diff options
Diffstat (limited to 'src/usr')
124 files changed, 9816 insertions, 7414 deletions
diff --git a/src/usr/local/captiveportal/index.php b/src/usr/local/captiveportal/index.php index 93c4e30..b1f693a 100644 --- a/src/usr/local/captiveportal/index.php +++ b/src/usr/local/captiveportal/index.php @@ -42,7 +42,7 @@ header("Connection: close"); global $cpzone, $cpzoneid; -$cpzone = $_REQUEST['zone']; +$cpzone = strtolower($_REQUEST['zone']); $cpcfg = $config['captiveportal'][$cpzone]; if (empty($cpcfg)) { log_error("Submission to captiveportal with unknown parameter zone: " . htmlspecialchars($cpzone)); diff --git a/src/usr/local/openssl/openssl.cnf b/src/usr/local/openssl/openssl.cnf deleted file mode 120000 index f95d25b..0000000 --- a/src/usr/local/openssl/openssl.cnf +++ /dev/null @@ -1 +0,0 @@ -../../../etc/ssl/openssl.cnf
\ No newline at end of file diff --git a/src/usr/local/sbin/pfSense-dhclient-script b/src/usr/local/sbin/pfSense-dhclient-script new file mode 100755 index 0000000..0695eff --- /dev/null +++ b/src/usr/local/sbin/pfSense-dhclient-script @@ -0,0 +1,393 @@ +#!/bin/sh +# $Id$ +# $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $ +# $FreeBSD: src/sbin/dhclient/dhclient-script,v 1.4 2005/06/10 03:41:18 brooks Exp $ +# +# Copyright (c) 2003 Kenneth R Westerback <krw@openbsd.org> +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +HOSTNAME=/bin/hostname +ROUTE=/sbin/route +SED=/usr/bin/sed +ARP=/usr/sbin/arp +IFCONFIG=/sbin/ifconfig +PFCTL=/sbin/pfctl + +LOCALHOST=127.0.0.1 + +if [ -x /usr/bin/logger ]; then + LOGGER="/usr/bin/logger -s -p user.notice -t dhclient" +else + LOGGER="echo" +fi + +# +# Helper functions that implement common actions. +# + +check_hostname() { + current_hostname=`$HOSTNAME` + if [ -z "$current_hostname" ] || \ + [ "$current_hostname" = "$old_host_name" -a \ + "$new_hostname" != "$old_host_name" ]; then + $LOGGER "New Hostname ($interface): $new_host_name" + $HOSTNAME $new_host_name + fi +} + +arp_flush() { + $ARP -an -i $interface | \ + $SED -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \ + /bin/sh >/dev/null 2>&1 +} + +# NOTE: use of the below has been disabled because rc.newwanip handles this correctly and this +# unnecessarily killed states in multiple circumstances. Leaving here for now, should be safe +# to remove later. -cmb 20141105 +delete_old_states() { + $LOGGER "Starting delete_old_states()" + _FLUSHED=0 + # If the IP changed, remove states from the old one + if [ -f /var/db/${interface}_ip ]; then + OLD_IP=`cat /var/db/${interface}_ip` + $LOGGER "Comparing IPs: Old: ${OLD_IP} New: ${new_ip_address}" + if [ -n "${OLD_IP}" ] && [ "${OLD_IP}" != "${new_ip_address}" ]; then + $LOGGER "Removing states from old IP '${OLD_IP}' (new IP '${new_ip_address}')" + ${PFCTL} -i $interface -Fs + ${PFCTL} -K ${OLD_IP}/32 + _FLUSHED=1 + fi + fi + # Delete states through old gateway if it's not the same + OLD_ROUTER="" + if [ -n "${old_routers}" ]; then + OLD_ROUTER=$old_routers + elif [ -f /tmp/${interface}_router ]; then + OLD_ROUTER=`cat /tmp/${interface}_router` + fi + if [ ${_FLUSHED} -eq 0 -a -n "${OLD_ROUTER}" ]; then + $LOGGER "Comparing Routers: Old: ${OLD_ROUTER} New: ${new_routers}" + if [ "${OLD_ROUTER}" != "${new_routers}" ]; then + $LOGGER "Removing states through old gateway '${OLD_ROUTER}' (new gateway '${new_routers}')" + ${PFCTL} -i $interface -Fs + fi + fi +} + +delete_old_address() { + /bin/rm -f /var/db/${interface}_ip + $IFCONFIG $interface inet -alias $old_ip_address $medium +} + +add_new_address() { + + $LOGGER "Starting add_new_address()" + + $LOGGER "ifconfig $interface inet $new_ip_address netmask $new_subnet_mask broadcast $new_broadcast_address $medium" + + $IFCONFIG $interface \ + inet $new_ip_address \ + netmask $new_subnet_mask \ + broadcast $new_broadcast_address \ + $medium + $IFCONFIG $interface setfirst $new_ip_address + + $LOGGER "New IP Address ($interface): $new_ip_address" + $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" + $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" + $LOGGER "New Routers ($interface): $new_routers" + + + # This is necessary otherwise dpinger will try to ping all 1s address + if [ -n "$new_routers" ] && [ "$new_routers" != "255.255.255.255" ]; then + echo $new_routers > /tmp/${interface}_router + fi + echo $new_ip_address > /var/db/${interface}_ip +} + +delete_old_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet -alias $alias_ip_address > /dev/null 2>&1 + $ROUTE delete $alias_ip_address $LOCALHOST > /dev/null 2>&1 + fi +} + +add_new_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet alias $alias_ip_address netmask \ + $alias_subnet_mask + $ROUTE add $alias_ip_address $LOCALHOST + fi +} + +fill_classless_routes() { + set $1 + while [ $# -ge 5 ]; do + if [ $1 -eq 0 ]; then + route="default" + elif [ $1 -le 8 ]; then + route="$2.0.0.0/$1" + shift + elif [ $1 -le 16 ]; then + route="$2.$3.0.0/$1" + shift; shift + elif [ $1 -le 24 ]; then + route="$2.$3.$4.0/$1" + shift; shift; shift + else + route="$2.$3.$4.$5/$1" + shift; shift; shift; shift + fi + shift + router="$1.$2.$3.$4" + classless_routes="$classless_routes $route $router" + shift; shift; shift; shift + done +} + +delete_old_routes() { + $LOGGER "Deleting old routes" + + if [ -n "$old_classless_routes" ]; then + fill_classless_routes "$old_classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + route delete "$1" "$2" + shift; shift + done + return 0; + fi + + # Only allow the default route to be overridden if it's on our own interface + if [ -f "/tmp/${interface}_defaultgw" ]; then + for router in $old_routers; do + $ROUTE delete default $router >/dev/null 2>&1 + /bin/rm -f /tmp/${interface}_router + done + fi + + if [ -n "$old_static_routes" ]; then + set $old_static_routes + while [ $# -gt 1 ]; do + $ROUTE delete "$1" "$2" + shift; shift + /bin/rm -f /tmp/${interface}_router + done + fi + + arp_flush +} + +add_new_routes() { + $LOGGER "Adding new routes to interface: $interface" + + # RFC 3442: If the DHCP server returns both a Classless Static + # Routes option and a Router option, the DHCP client MUST ignore + # the Router option. + # + # DHCP clients that support this option (Classless Static Routes) + # MUST NOT install the routes specified in the Static Routes + # option (option code 33) if both a Static Routes option and the + # Classless Static Routes option are provided. + if [ -n "$new_classless_routes" ]; then + fill_classless_routes "$new_classless_routes" + $LOGGER "New Classless Static Routes ($interface): $classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + if [ "0.0.0.0" = "$2" ]; then + route add "$1" -iface "$interface" + else + route add "$1" "$2" + fi + shift; shift + done + return + fi + + ADDED_ROUTE=no + EXISTSGW=`/bin/ls -l /tmp/*_defaultgw | /usr/bin/wc -l` + # Only allow the default route to be overridden if it's on our own interface + if [ -f "/tmp/${interface}_defaultgw" -o $EXISTSGW -eq 0 ]; then + $ROUTE delete default + for router in $new_routers; do + if [ "$new_ip_address" = "$router" -o "$router" = "255.255.255.255" ]; then + $ROUTE add default -iface $interface + echo $ROUTE add default -iface $interface | $LOGGER + # NOTE: Do not activate this for all ones address since pf(4) will try to forward packets to it. + if [ "$new_ip_address" = "$router" ]; then + echo $router > /tmp/${interface}_router + fi + else + $ROUTE add default $router + echo $ROUTE add default $router | $LOGGER + echo $router > /tmp/${interface}_router + fi + ADDED_ROUTE=yes + # 2nd and subsequent default routers error out, so explicitly + # stop processing the list after the first one. + break + done + fi + + if [ -n "$new_static_routes" ]; then + $LOGGER "New Static Routes ($interface): $new_static_routes" + set $new_static_routes + while [ $# -gt 1 ]; do + $ROUTE add $1 $2 + if [ "$ADDED_ROUTE" = "no" ]; then + echo $2 > /tmp/${interface}_router + fi + shift; shift + done + fi +} + +add_new_resolv_conf() { + $LOGGER "Creating resolv.conf" + if [ -f "/var/etc/nameserver_$interface" ]; then + # Remove old entries + for nameserver in `cat /var/etc/nameserver_$interface`; do + $ROUTE delete $nameserver >/dev/null 2>&1 + done + fi + if [ -n "$new_domain_name_servers" ]; then + /bin/rm -f /var/etc/nameserver_$interface + ALLOWOVERRIDE=$(/usr/local/sbin/read_xml_tag.sh boolean system/dnsallowoverride) + for nameserver in $new_domain_name_servers; do + # Add a route to the nameserver out the correct interface + # so that mulitple wans work correctly with multiple dns + # also backup the nameserver for later route removal + if [ "$ALLOWOVERRIDE" = "true" ]; then + echo $nameserver >>/var/etc/nameserver_$interface + $ROUTE add $nameserver -iface $interface + fi + done + echo $new_domain_name >/var/etc/searchdomain_$interface + fi + + return 0 +} + +# Notify rc.newwanip of changes to an interface +notify_rc_newwanip() { + /usr/local/sbin/pfSctl -c "interface newip $interface" +} + +# +# Start of active code. +# + +# Invoke the local dhcp client enter hooks, if they exist. +if [ -f /etc/dhclient-enter-hooks ]; then + $LOGGER "dhclient-enter-hooks" + exit_status=0 + . /etc/dhclient-enter-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + if [ $exit_status -ne 0 ]; then + exit $exit_status + fi +fi + +$LOGGER $reason +case $reason in +MEDIUM) + $IFCONFIG $interface $medium + $IFCONFIG $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1 + /bin/sleep 1 + ;; + +PREINIT) + delete_old_alias + $IFCONFIG $interface inet 0.0.0.0 netmask 255.0.0.0 broadcast 255.255.255.255 up + /bin/rm -f /tmp/${interface}_router + ;; + +ARPCHECK|ARPSEND) + ;; + +BOUND|RENEW|REBIND|REBOOT) + check_hostname + changes="no" + if [ -n "$old_ip_address" ]; then + if [ -n "$alias_ip_address" ] && \ + [ "$old_ip_address" != "$alias_ip_address" ]; then + delete_old_alias + changes="yes" + fi + if [ "$old_ip_address" != "$new_ip_address" ]; then + delete_old_address + delete_old_routes + changes="yes" + fi + fi + if [ "$reason" = BOUND ] || \ + [ "$reason" = REBOOT ] || \ + [ -z "$old_ip_address" ] || \ + [ "$old_ip_address" != "$new_ip_address" ]; then + add_new_address + add_new_routes + changes="yes" + fi + if [ -n "$alias_ip_address" ] && \ + [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + changes="yes" + fi + add_new_resolv_conf + if [ "$changes" = "yes" ] ; then + notify_rc_newwanip + fi + ;; + +EXPIRE|FAIL) + delete_old_alias + if [ -n "$old_ip_address" ]; then + delete_old_address + delete_old_routes + fi + ;; + +TIMEOUT) + delete_old_alias + add_new_address + /bin/sleep 1 + if [ -n "$new_routers" ]; then + $LOGGER "New Routers ($interface): $new_routers" + set "$new_routers" + if /sbin/ping -q -c 1 -t 1 "$1"; then + if [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + fi + add_new_routes + if add_new_resolv_conf; then + notify_rc_newwanip + fi + fi + fi + $IFCONFIG $interface inet -alias $new_ip_address $medium + delete_old_routes + ;; +esac + +# Invoke the local dhcp client exit hooks, if they exist. +if [ -f /etc/dhclient-exit-hooks ]; then + $LOGGER "dhclient-exit-hooks" + exit_status=0 + . /etc/dhclient-exit-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + exit $exit_status +fi diff --git a/src/usr/local/sbin/pfSense-upgrade b/src/usr/local/sbin/pfSense-upgrade index b5b7e5a..10f2dff 100755 --- a/src/usr/local/sbin/pfSense-upgrade +++ b/src/usr/local/sbin/pfSense-upgrade @@ -328,10 +328,13 @@ pkg_upgrade() { fi if [ -n "${dry_run}" ]; then + pkg_unlock ${kernel_pkg} pkg ${pkg_chroot} upgrade -nq 2>&1 | tee -a ${logfile} + pkg_lock ${kernel_pkg} _exit 0 fi + local _meta_pkg=$(get_meta_pkg_name) if [ $(pkg upgrade -r ${product}-core -nq | wc -l) -gt 1 ]; then if [ "${platform}" = "nanobsd" ]; then _echo "**** WARNING ****" @@ -355,6 +358,8 @@ pkg_upgrade() { setup_nanobsd_env fi need_reboot=1 + elif pkg upgrade -r ${product} -nq ${_meta_pkg} >/dev/null 2>&1; then + need_reboot=1 fi pkg_unlock ${kernel_pkg} @@ -469,16 +474,20 @@ pkg_upgrade() { fi } -check_upgrade() { +get_meta_pkg_name() { # figure out main meta package name if is_pkg_installed ${product}-vmware; then - local _meta_pkg="${product}-vmware" + echo "${product}-vmware" elif is_pkg_installed ${product}; then - local _meta_pkg="${product}" + echo "${product}" else _echo "ERROR: It was not possible to identify which ${product} meta package is installed" _exit 1 fi +} + +check_upgrade() { + local _meta_pkg=$(get_meta_pkg_name) pkg_update @@ -744,6 +753,8 @@ fi # pkg should not ask for confirmations export ASSUME_ALWAYS_YES=true +export FETCH_TIMEOUT=5 +export FETCH_RETRY=2 export product=$(/usr/local/bin/php -n /usr/local/sbin/read_global_var product_name pfSense) export pkg_prefix=$(/usr/local/bin/php -n /usr/local/sbin/read_global_var pkg_prefix pfSense-pkg-) diff --git a/src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot b/src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot index c2226d0..a82db99 100644 --- a/src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot +++ b/src/usr/local/share/locale/en/LC_MESSAGES/pfSense.pot @@ -3,24 +3,24 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#: src/usr/local/www/diag_traceroute.php:194 -#: src/usr/local/www/diag_traceroute.php:201 -#: src/usr/local/www/interfaces.php:3120 src/usr/local/www/interfaces.php:3130 -#: src/usr/local/www/system_gateway_groups_edit.php:236 -#: src/usr/local/www/system_gateway_groups_edit.php:237 -#: src/usr/local/www/system_gateway_groups_edit.php:238 -#: src/usr/local/www/system_gateway_groups_edit.php:239 -#: src/usr/local/www/system_gateway_groups_edit.php:310 -#: src/usr/local/www/system_gateway_groups_edit.php:311 -#: src/usr/local/www/system_gateway_groups_edit.php:312 -#: src/usr/local/www/system_gateway_groups_edit.php:313 +#: src/usr/local/www/diag_traceroute.php:182 +#: src/usr/local/www/diag_traceroute.php:189 +#: src/usr/local/www/interfaces.php:3127 src/usr/local/www/interfaces.php:3137 +#: src/usr/local/www/system_gateway_groups_edit.php:251 +#: src/usr/local/www/system_gateway_groups_edit.php:252 +#: src/usr/local/www/system_gateway_groups_edit.php:253 +#: src/usr/local/www/system_gateway_groups_edit.php:254 +#: src/usr/local/www/system_gateway_groups_edit.php:339 +#: src/usr/local/www/system_gateway_groups_edit.php:340 +#: src/usr/local/www/system_gateway_groups_edit.php:341 +#: src/usr/local/www/system_gateway_groups_edit.php:342 #: src/usr/local/www/vpn_ipsec_settings.php:285 #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-03-04 08:22-0300\n" +"POT-Creation-Date: 2016-05-19 09:29-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -44,134 +44,134 @@ msgstr "" msgid "Redirecting to the dashboard..." msgstr "" -#: src/etc/inc/auth.inc:404 src/etc/inc/auth.inc:428 src/etc/inc/auth.inc:505 -#: src/etc/inc/auth.inc:539 src/etc/inc/auth.inc:601 src/etc/inc/auth.inc:761 -#: src/etc/inc/auth.inc:774 +#: src/etc/inc/auth.inc:422 src/etc/inc/auth.inc:446 src/etc/inc/auth.inc:523 +#: src/etc/inc/auth.inc:557 src/etc/inc/auth.inc:619 src/etc/inc/auth.inc:774 +#: src/etc/inc/auth.inc:787 #, php-format msgid "Running: %s" msgstr "" -#: src/etc/inc/auth.inc:815 src/etc/inc/auth.inc:896 src/etc/inc/auth.inc:976 -#: src/etc/inc/auth.inc:1264 +#: src/etc/inc/auth.inc:828 src/etc/inc/auth.inc:909 src/etc/inc/auth.inc:989 +#: src/etc/inc/auth.inc:1277 #, php-format msgid "ERROR! Could not connect to server %s." msgstr "" -#: src/etc/inc/auth.inc:833 +#: src/etc/inc/auth.inc:846 #, php-format msgid "LDAP: Could not lookup CA by reference for host %s." msgstr "" -#: src/etc/inc/auth.inc:962 +#: src/etc/inc/auth.inc:975 msgid "" "ERROR! ldap_get_user_ous() backed selected with no LDAP authentication " "server defined." msgstr "" -#: src/etc/inc/auth.inc:992 +#: src/etc/inc/auth.inc:1005 #, php-format msgid "ERROR! ldap_get_user_ous() could not bind anonymously to server %s." msgstr "" -#: src/etc/inc/auth.inc:997 +#: src/etc/inc/auth.inc:1010 #, php-format msgid "ERROR! ldap_get_user_ous() could not bind to server %s." msgstr "" -#: src/etc/inc/auth.inc:1113 +#: src/etc/inc/auth.inc:1126 #, php-format msgid "ERROR! ldap_get_groups() Could not connect to server %s." msgstr "" -#: src/etc/inc/auth.inc:1128 +#: src/etc/inc/auth.inc:1141 #, php-format msgid "ERROR! ldap_get_groups() could not bind anonymously to server %s." msgstr "" -#: src/etc/inc/auth.inc:1133 +#: src/etc/inc/auth.inc:1146 #, php-format msgid "ERROR! ldap_get_groups() could not bind to server %s." msgstr "" -#: src/etc/inc/auth.inc:1239 +#: src/etc/inc/auth.inc:1252 msgid "" "ERROR! ldap_backed() called with no LDAP authentication server defined. " "Defaulting to local user database. Visit System -> User Manager." msgstr "" -#: src/etc/inc/auth.inc:1242 +#: src/etc/inc/auth.inc:1255 msgid "ERROR! ldap_backed() called with no LDAP authentication server defined." msgstr "" -#: src/etc/inc/auth.inc:1282 +#: src/etc/inc/auth.inc:1295 #, php-format msgid "ERROR! Could not bind to server %s." msgstr "" -#: src/etc/inc/auth.inc:1300 +#: src/etc/inc/auth.inc:1313 #, php-format msgid "Now Searching for %s in directory." msgstr "" -#: src/etc/inc/auth.inc:1309 +#: src/etc/inc/auth.inc:1322 #, php-format msgid "Now Searching in server %1$s, container %2$s with filter %3$s." msgstr "" -#: src/etc/inc/auth.inc:1323 +#: src/etc/inc/auth.inc:1336 #, php-format msgid "Search resulted in error: %s" msgstr "" -#: src/etc/inc/auth.inc:1339 +#: src/etc/inc/auth.inc:1352 msgid "ERROR! Either LDAP search failed, or multiple users were found." msgstr "" -#: src/etc/inc/auth.inc:1346 +#: src/etc/inc/auth.inc:1359 #, php-format msgid "ERROR! Could not login to server %1$s as user %2$s: %3$s" msgstr "" -#: src/etc/inc/auth.inc:1353 +#: src/etc/inc/auth.inc:1366 #, php-format msgid "Logged in successfully as %1$s via LDAP server %2$s with DN = %3$s." msgstr "" -#: src/etc/inc/auth.inc:1389 +#: src/etc/inc/auth.inc:1402 #, php-format msgid "RADIUS start: %s<br />\n" msgstr "" -#: src/etc/inc/auth.inc:1401 +#: src/etc/inc/auth.inc:1414 #, php-format msgid "RADIUS send failed: %s<br />\n" msgstr "" -#: src/etc/inc/auth.inc:1409 +#: src/etc/inc/auth.inc:1422 #, php-format msgid "RADIUS Auth succeeded" msgstr "" -#: src/etc/inc/auth.inc:1415 +#: src/etc/inc/auth.inc:1428 #, php-format msgid "RADIUS Auth rejected" msgstr "" -#: src/etc/inc/auth.inc:1481 src/etc/inc/auth.inc:1497 +#: src/etc/inc/auth.inc:1501 src/etc/inc/auth.inc:1517 msgid "Local Database" msgstr "" -#: src/etc/inc/auth.inc:1600 +#: src/etc/inc/auth.inc:1620 #, php-format msgid "Successful login for user '%1$s' from: %2$s" msgstr "" -#: src/etc/inc/auth.inc:1658 +#: src/etc/inc/auth.inc:1678 #, php-format msgid "Session timed out for user '%1$s' from: %2$s" msgstr "" -#: src/etc/inc/auth.inc:1660 +#: src/etc/inc/auth.inc:1680 #, php-format msgid "User logged out for user '%1$s' from: %2$s" msgstr "" @@ -204,15 +204,16 @@ msgid "This device is currently being maintained by: %s." msgstr "" #: src/etc/inc/authgui.inc:251 src/etc/inc/authgui.inc:299 -#: src/usr/local/www/services_captiveportal.php:1040 +#: src/usr/local/www/services_captiveportal.php:1049 msgid "Login" msgstr "" #: src/etc/inc/authgui.inc:265 msgid "" -"You are accessing this router by an IP address not configured locally, which " -"may be forwarded by NAT or other means. <br /><br />If you did not setup " -"this forwarding, you may be the target of a man-in-the-middle attack." +"The IP address being used to access this router is not configured locally, " +"which may be forwarded by NAT or other means. <br /><br />If this forwarding " +"is unexpected, it should be verified that a man-in-the-middle attack is not " +"taking place." msgstr "" #: src/etc/inc/authgui.inc:273 @@ -221,17 +222,17 @@ msgid "Login to %s" msgstr "" #: src/etc/inc/authgui.inc:280 -msgid "Your browser must support cookies to login." +msgid "The browser must support cookies to login." msgstr "" #: src/etc/inc/authgui.inc:284 src/usr/local/www/diag_authentication.php:132 -#: src/usr/local/www/interfaces.php:2491 src/usr/local/www/interfaces.php:2557 -#: src/usr/local/www/interfaces.php:2688 -#: src/usr/local/www/interfaces_ppps_edit.php:227 -#: src/usr/local/www/interfaces_ppps_edit.php:230 +#: src/usr/local/www/interfaces.php:2507 src/usr/local/www/interfaces.php:2574 +#: src/usr/local/www/interfaces.php:2700 #: src/usr/local/www/interfaces_ppps_edit.php:238 #: src/usr/local/www/interfaces_ppps_edit.php:241 -#: src/usr/local/www/interfaces_ppps_edit.php:623 +#: src/usr/local/www/interfaces_ppps_edit.php:249 +#: src/usr/local/www/interfaces_ppps_edit.php:252 +#: src/usr/local/www/interfaces_ppps_edit.php:633 #: src/usr/local/www/services_dyndns_edit.php:132 #: src/usr/local/www/services_dyndns_edit.php:381 #: src/usr/local/www/services_pppoe_edit.php:540 @@ -239,15 +240,15 @@ msgstr "" #: src/usr/local/www/system_usermanager.php:179 #: src/usr/local/www/system_usermanager.php:184 #: src/usr/local/www/system_usermanager.php:189 -#: src/usr/local/www/system_usermanager.php:500 -#: src/usr/local/www/system_usermanager.php:627 +#: src/usr/local/www/system_usermanager.php:501 +#: src/usr/local/www/system_usermanager.php:628 #: src/usr/local/www/vpn_l2tp_users.php:129 #: src/usr/local/www/vpn_l2tp_users_edit.php:108 #: src/usr/local/www/vpn_l2tp_users_edit.php:111 #: src/usr/local/www/vpn_l2tp_users_edit.php:189 #: src/usr/local/www/vpn_openvpn_client.php:533 #: src/usr/local/www/vpn_openvpn_client.php:566 -#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:131 +#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:132 msgid "Username" msgstr "" @@ -256,23 +257,23 @@ msgid "Enter your username" msgstr "" #: src/etc/inc/authgui.inc:291 src/usr/local/www/diag_authentication.php:140 -#: src/usr/local/www/diag_backup.php:658 src/usr/local/www/diag_backup.php:703 -#: src/usr/local/www/interfaces.php:2498 src/usr/local/www/interfaces.php:2564 -#: src/usr/local/www/interfaces.php:2695 -#: src/usr/local/www/interfaces_ppps_edit.php:227 -#: src/usr/local/www/interfaces_ppps_edit.php:230 +#: src/usr/local/www/diag_backup.php:658 src/usr/local/www/diag_backup.php:705 +#: src/usr/local/www/interfaces.php:2514 src/usr/local/www/interfaces.php:2581 +#: src/usr/local/www/interfaces.php:2707 #: src/usr/local/www/interfaces_ppps_edit.php:238 #: src/usr/local/www/interfaces_ppps_edit.php:241 -#: src/usr/local/www/interfaces_ppps_edit.php:630 +#: src/usr/local/www/interfaces_ppps_edit.php:249 +#: src/usr/local/www/interfaces_ppps_edit.php:252 +#: src/usr/local/www/interfaces_ppps_edit.php:640 #: src/usr/local/www/services_dyndns_edit.php:130 #: src/usr/local/www/services_dyndns_edit.php:391 #: src/usr/local/www/services_pppoe_edit.php:547 -#: src/usr/local/www/system_advanced_notifications.php:275 -#: src/usr/local/www/system_authservers.php:617 +#: src/usr/local/www/system_advanced_notifications.php:273 +#: src/usr/local/www/system_authservers.php:685 #: src/usr/local/www/system_usermanager.php:185 #: src/usr/local/www/system_usermanager.php:190 -#: src/usr/local/www/system_usermanager.php:643 -#: src/usr/local/www/system_usermanager.php:646 +#: src/usr/local/www/system_usermanager.php:644 +#: src/usr/local/www/system_usermanager.php:647 #: src/usr/local/www/system_usermanager_passwordmg.php:74 #: src/usr/local/www/system_usermanager_passwordmg.php:135 #: src/usr/local/www/vpn_l2tp_users_edit.php:111 @@ -309,7 +310,6 @@ msgid "Enter Voucher Code:" msgstr "" #: src/etc/inc/captiveportal.inc:132 src/usr/local/www/crash_reporter.php:124 -#: src/usr/local/www/services_captiveportal_zones_edit.php:119 msgid "Continue" msgstr "" @@ -348,144 +348,149 @@ msgstr "" msgid "Press ENTER to continue." msgstr "" -#: src/etc/inc/config.console.inc:97 src/etc/inc/config.console.inc:520 +#: src/etc/inc/config.console.inc:97 src/etc/inc/config.console.inc:543 msgid "No interfaces found!" msgstr "" -#: src/etc/inc/config.console.inc:116 -msgid "Do you want to set up VLANs first?" +#: src/etc/inc/config.console.inc:122 +msgid "Do VLANs need to be set up first?" msgstr "" -#: src/etc/inc/config.console.inc:119 +#: src/etc/inc/config.console.inc:125 msgid "" -"If you are not going to use VLANs, or only for optional interfaces, you " -"should\n" +"If VLANs will not be used, or only for optional interfaces, it is typical " +"to\n" "say no here and use the webConfigurator to configure VLANs later, if " "required." msgstr "" -#: src/etc/inc/config.console.inc:122 -msgid "Do you want to set up VLANs now [y|n]?" +#: src/etc/inc/config.console.inc:128 +msgid "Should VLANs be set up now [y|n]?" msgstr "" -#: src/etc/inc/config.console.inc:197 +#: src/etc/inc/config.console.inc:202 msgid "VLAN interfaces:" msgstr "" -#: src/etc/inc/config.console.inc:217 +#: src/etc/inc/config.console.inc:222 msgid "Enter the WAN interface name or 'a' for auto-detection" msgstr "" -#: src/etc/inc/config.console.inc:218 +#: src/etc/inc/config.console.inc:223 #, php-format msgid "%s(%s or a): " msgstr "" -#: src/etc/inc/config.console.inc:226 src/etc/inc/config.console.inc:252 -#: src/etc/inc/config.console.inc:288 src/etc/inc/config.console.inc:543 +#: src/etc/inc/config.console.inc:231 src/etc/inc/config.console.inc:257 +#: src/etc/inc/config.console.inc:293 src/etc/inc/config.console.inc:566 #, php-format msgid "%sInvalid interface name '%s'%s" msgstr "" -#: src/etc/inc/config.console.inc:234 +#: src/etc/inc/config.console.inc:239 #, php-format msgid "" "%sEnter the LAN interface name or 'a' for auto-detection %sNOTE: this " "enables full Firewalling/NAT mode.%s(%s a or nothing if finished):%s" msgstr "" -#: src/etc/inc/config.console.inc:271 +#: src/etc/inc/config.console.inc:276 #, php-format msgid "%sOptional interface %s description found: %s" msgstr "" -#: src/etc/inc/config.console.inc:274 +#: src/etc/inc/config.console.inc:279 #, php-format msgid "" "%sEnter the Optional %s interface name or 'a' for auto-detection%s(%s a or " "nothing if finished):%s" msgstr "" -#: src/etc/inc/config.console.inc:281 +#: src/etc/inc/config.console.inc:286 msgid "Optional" msgstr "" -#: src/etc/inc/config.console.inc:317 +#: src/etc/inc/config.console.inc:322 msgid "The interfaces will be assigned as follows:" msgstr "" -#: src/etc/inc/config.console.inc:327 src/etc/inc/config.console.inc:503 +#: src/etc/inc/config.console.inc:332 src/etc/inc/config.console.inc:526 msgid "Do you want to proceed [y|n]?" msgstr "" -#: src/etc/inc/config.console.inc:340 +#: src/etc/inc/config.console.inc:350 msgid "You have chosen to remove the LAN interface." msgstr "" -#: src/etc/inc/config.console.inc:341 +#: src/etc/inc/config.console.inc:351 msgid "" "Would you like to remove the LAN IP address and \n" "unload the interface now [y|n]?" msgstr "" -#: src/etc/inc/config.console.inc:449 +#: src/etc/inc/config.console.inc:472 #, php-format msgid "%sWriting configuration..." msgstr "" -#: src/etc/inc/config.console.inc:450 +#: src/etc/inc/config.console.inc:473 msgid "Console assignment of interfaces" msgstr "" -#: src/etc/inc/config.console.inc:451 +#: src/etc/inc/config.console.inc:474 #, php-format msgid "done.%s" msgstr "" -#: src/etc/inc/config.console.inc:459 -msgid "One moment while we reload the settings..." +#: src/etc/inc/config.console.inc:482 +msgid "One moment while the settings are reloading..." msgstr "" -#: src/etc/inc/config.console.inc:460 +#: src/etc/inc/config.console.inc:483 msgid " done!" msgstr "" -#: src/etc/inc/config.console.inc:480 +#: src/etc/inc/config.console.inc:503 #, php-format msgid "Detected link-up on interface %s.%s" msgstr "" -#: src/etc/inc/config.console.inc:485 +#: src/etc/inc/config.console.inc:508 #, php-format msgid "No link-up detected.%s" msgstr "" -#: src/etc/inc/config.console.inc:502 +#: src/etc/inc/config.console.inc:525 msgid "WARNING: all existing VLANs will be cleared if you proceed!" msgstr "" -#: src/etc/inc/config.console.inc:518 +#: src/etc/inc/config.console.inc:541 msgid "VLAN Capable interfaces:" msgstr "" -#: src/etc/inc/config.console.inc:533 +#: src/etc/inc/config.console.inc:556 msgid "No VLAN capable interfaces detected." msgstr "" -#: src/etc/inc/config.console.inc:537 +#: src/etc/inc/config.console.inc:560 msgid "" "Enter the parent interface name for the new VLAN (or nothing if finished):" msgstr "" -#: src/etc/inc/config.console.inc:550 +#: src/etc/inc/config.console.inc:573 msgid "Enter the VLAN tag (1-4094):" msgstr "" -#: src/etc/inc/config.console.inc:554 +#: src/etc/inc/config.console.inc:577 #, php-format msgid "%sInvalid VLAN tag '%s'%s" msgstr "" +#: src/etc/inc/config.console.inc:584 +#, php-format +msgid "This parent interface and VLAN already created." +msgstr "" + #: src/etc/inc/config.inc:112 msgid "Upgrading m0n0wall configuration to pfSense... " msgstr "" @@ -537,7 +542,7 @@ msgid "" msgstr "" #: src/etc/inc/config.lib.inc:159 src/etc/inc/config.lib.inc:170 -#: src/etc/inc/config.lib.inc:589 +#: src/etc/inc/config.lib.inc:592 msgid "Could not restore config.xml." msgstr "" @@ -554,7 +559,7 @@ msgstr "" msgid "" "No XML configuration file found - using factory defaults.\n" "Make sure that the configuration floppy disk with the conf/config.xml\n" -"file is inserted. If it isn't, your configuration changes will be lost\n" +"file is inserted. If it isn't, the configuration changes will be lost\n" "on reboot.\n" msgstr "" @@ -565,8 +570,8 @@ msgstr "" #: src/etc/inc/config.lib.inc:287 msgid "" -"Last known config found and restored. Please double check your " -"configuration file for accuracy." +"Last known config found and restored. Please double check the configuration " +"file for accuracy." msgstr "" #: src/etc/inc/config.lib.inc:291 @@ -581,62 +586,62 @@ msgstr "" msgid "/ File system is dirty." msgstr "" -#: src/etc/inc/config.lib.inc:421 +#: src/etc/inc/config.lib.inc:424 #, php-format msgid "Start Configuration upgrade at %s, set execution timeout to 15 minutes" msgstr "" -#: src/etc/inc/config.lib.inc:432 src/etc/inc/config.lib.inc:433 +#: src/etc/inc/config.lib.inc:435 src/etc/inc/config.lib.inc:436 msgid "Updated bogon update frequency to 3am" msgstr "" -#: src/etc/inc/config.lib.inc:469 +#: src/etc/inc/config.lib.inc:472 #, php-format msgid "Ended Configuration upgrade at %s" msgstr "" -#: src/etc/inc/config.lib.inc:472 +#: src/etc/inc/config.lib.inc:475 #, php-format msgid "Upgraded config version level from %1$s to %2$s" msgstr "" -#: src/etc/inc/config.lib.inc:566 +#: src/etc/inc/config.lib.inc:569 msgid "WARNING: Config contents could not be saved. Could not open file!" msgstr "" -#: src/etc/inc/config.lib.inc:568 +#: src/etc/inc/config.lib.inc:571 #, php-format msgid "Unable to open %s/config.xml for writing in write_config()%s" msgstr "" -#: src/etc/inc/config.lib.inc:697 +#: src/etc/inc/config.lib.inc:700 #, php-format msgid "Reverted to %s." msgstr "" -#: src/etc/inc/config.lib.inc:714 +#: src/etc/inc/config.lib.inc:717 msgid "Installing configuration..." msgstr "" -#: src/etc/inc/config.lib.inc:716 +#: src/etc/inc/config.lib.inc:719 msgid "Installing configuration ...." msgstr "" -#: src/etc/inc/config.lib.inc:769 +#: src/etc/inc/config.lib.inc:772 msgid "XML error: unable to open file" msgstr "" -#: src/etc/inc/config.lib.inc:775 +#: src/etc/inc/config.lib.inc:778 #, php-format msgid "%1$s at line %2$d" msgstr "" -#: src/etc/inc/config.lib.inc:829 src/etc/inc/config.lib.inc:831 +#: src/etc/inc/config.lib.inc:832 src/etc/inc/config.lib.inc:834 #, php-format msgid "The backup cache file %s is corrupted. Unlinking." msgstr "" -#: src/etc/inc/config.lib.inc:988 +#: src/etc/inc/config.lib.inc:991 #, php-format msgid "%s made unknown change" msgstr "" @@ -683,12 +688,12 @@ msgstr "" msgid "Dynamic DNS %1$s (%2$s): _checkStatus() starting." msgstr "" -#: src/etc/inc/dyndns.class:822 src/usr/local/www/pkg_mgr_install.php:144 +#: src/etc/inc/dyndns.class:822 src/usr/local/www/pkg_mgr_install.php:152 msgid "Success" msgstr "" #: src/etc/inc/dyndns.class:823 src/etc/inc/dyndns.class:1455 -#: src/usr/local/www/diag_smart.php:471 +#: src/usr/local/www/diag_smart.php:498 msgid "Error" msgstr "" @@ -759,8 +764,8 @@ msgstr "" #: src/etc/inc/dyndns.class:853 msgid "" -"You may update up to 20 hosts. numhost is returned if you try to update more " -"than 20 or update a round-robin." +"Up to 20 hosts my be updated. numhost is returned if attempting to update " +"more than 20 or update a round-robin." msgstr "" #: src/etc/inc/dyndns.class:855 @@ -919,7 +924,7 @@ msgid "" msgstr "" #: src/etc/inc/dyndns.class:1047 -msgid "Update Too Soon - You have tried updating to quickly since last change." +msgid "Update Too Soon - Attempted to update too quickly since last change." msgstr "" #: src/etc/inc/dyndns.class:1049 @@ -928,7 +933,7 @@ msgstr "" #: src/etc/inc/dyndns.class:1051 #, php-format -msgid "Hostname Error - The hostname (%s) doesn't belong to you." +msgid "Hostname Error - The hostname (%s) doesn't belong to user (%s)." msgstr "" #: src/etc/inc/dyndns.class:1114 @@ -936,7 +941,7 @@ msgid "Not a valid username or password!" msgstr "" #: src/etc/inc/dyndns.class:1116 -msgid "Hostname you are trying to update does not exist." +msgid "Hostname specified does not exist." msgstr "" #: src/etc/inc/dyndns.class:1122 @@ -977,7 +982,7 @@ msgid "Server side error." msgstr "" #: src/etc/inc/dyndns.class:1161 -msgid "Badly Formed Request (check your settings)." +msgid "Badly Formed Request (check the settings)." msgstr "" #: src/etc/inc/dyndns.class:1180 @@ -1017,7 +1022,7 @@ msgid "" msgstr "" #: src/etc/inc/dyndns.class:1272 -msgid "Zone or Host ID was not found, check your hostname." +msgid "Zone or Host ID was not found, check the hostname." msgstr "" #: src/etc/inc/dyndns.class:1274 @@ -1094,7 +1099,7 @@ msgid "DynDNS updated IP Address on %1$s (%2$s) to %3$s" msgstr "" #: src/etc/inc/dyndns.class:1430 src/etc/inc/dyndns.class:1438 -#: src/etc/inc/services.inc:2498 +#: src/etc/inc/services.inc:2514 #, php-format msgid "phpDynDNS: updating cache file %1$s: %2$s" msgstr "" @@ -1235,108 +1240,108 @@ msgstr "" msgid "Easy Rule: Blocked from Firewall Log View" msgstr "" -#: src/etc/inc/easyrule.inc:224 src/etc/inc/easyrule.inc:236 +#: src/etc/inc/easyrule.inc:235 src/etc/inc/easyrule.inc:247 msgid "Entry added" msgstr "" -#: src/etc/inc/easyrule.inc:233 +#: src/etc/inc/easyrule.inc:244 msgid "Hosts blocked from Firewall Log view" msgstr "" -#: src/etc/inc/easyrule.inc:315 +#: src/etc/inc/easyrule.inc:326 msgid "Easy Rule: Passed from Firewall Log View" msgstr "" -#: src/etc/inc/easyrule.inc:374 +#: src/etc/inc/easyrule.inc:385 msgid "Tried to block invalid IP:" msgstr "" -#: src/etc/inc/easyrule.inc:378 src/etc/inc/easyrule.inc:401 -#: src/etc/inc/easyrule.inc:458 +#: src/etc/inc/easyrule.inc:389 src/etc/inc/easyrule.inc:412 +#: src/etc/inc/easyrule.inc:469 msgid "Invalid interface for block rule:" msgstr "" -#: src/etc/inc/easyrule.inc:381 +#: src/etc/inc/easyrule.inc:392 msgid "Host added successfully" msgstr "" -#: src/etc/inc/easyrule.inc:383 +#: src/etc/inc/easyrule.inc:394 msgid "Failed to create block rule, alias, or add host." msgstr "" -#: src/etc/inc/easyrule.inc:386 +#: src/etc/inc/easyrule.inc:397 msgid "Tried to block but had no host IP or interface" msgstr "" -#: src/etc/inc/easyrule.inc:388 +#: src/etc/inc/easyrule.inc:399 msgid "Unknown block error." msgstr "" -#: src/etc/inc/easyrule.inc:397 +#: src/etc/inc/easyrule.inc:408 msgid "Tried to unblock invalid IP:" msgstr "" -#: src/etc/inc/easyrule.inc:407 src/etc/inc/easyrule.inc:465 +#: src/etc/inc/easyrule.inc:418 src/etc/inc/easyrule.inc:476 msgid "No block rules set on interface:" msgstr "" -#: src/etc/inc/easyrule.inc:442 +#: src/etc/inc/easyrule.inc:453 msgid "Host unblocked successfully" msgstr "" -#: src/etc/inc/easyrule.inc:445 +#: src/etc/inc/easyrule.inc:456 msgid "Host is not on block list: " msgstr "" -#: src/etc/inc/easyrule.inc:449 +#: src/etc/inc/easyrule.inc:460 msgid "Tried to unblock but had no host IP or interface" msgstr "" -#: src/etc/inc/easyrule.inc:480 +#: src/etc/inc/easyrule.inc:491 msgid "Invalid interface for pass rule:" msgstr "" -#: src/etc/inc/easyrule.inc:483 +#: src/etc/inc/easyrule.inc:494 msgid "Invalid protocol for pass rule:" msgstr "" -#: src/etc/inc/easyrule.inc:486 +#: src/etc/inc/easyrule.inc:497 msgid "Tried to pass invalid source IP:" msgstr "" -#: src/etc/inc/easyrule.inc:489 +#: src/etc/inc/easyrule.inc:500 msgid "Tried to pass invalid destination IP:" msgstr "" -#: src/etc/inc/easyrule.inc:493 +#: src/etc/inc/easyrule.inc:504 msgid "Missing destination port:" msgstr "" -#: src/etc/inc/easyrule.inc:496 +#: src/etc/inc/easyrule.inc:507 msgid "Tried to pass invalid destination port:" msgstr "" -#: src/etc/inc/easyrule.inc:503 +#: src/etc/inc/easyrule.inc:514 msgid "Successfully added pass rule!" msgstr "" -#: src/etc/inc/easyrule.inc:505 +#: src/etc/inc/easyrule.inc:516 msgid "Failed to add pass rule." msgstr "" -#: src/etc/inc/easyrule.inc:508 +#: src/etc/inc/easyrule.inc:519 msgid "Missing parameters for pass rule." msgstr "" -#: src/etc/inc/easyrule.inc:510 +#: src/etc/inc/easyrule.inc:521 msgid "Unknown pass error." msgstr "" #: src/etc/inc/filter.inc:80 src/etc/inc/filter.inc:110 -#: src/usr/local/www/firewall_rules_edit.php:1211 -#: src/usr/local/www/firewall_rules_edit.php:1253 -#: src/usr/local/www/firewall_rules_edit.php:1304 -#: src/usr/local/www/firewall_rules_edit.php:1354 +#: src/usr/local/www/firewall_rules_edit.php:1227 +#: src/usr/local/www/firewall_rules_edit.php:1269 +#: src/usr/local/www/firewall_rules_edit.php:1320 +#: src/usr/local/www/firewall_rules_edit.php:1372 msgid "any" msgstr "" @@ -1357,7 +1362,7 @@ msgid "Source quench" msgstr "" #: src/etc/inc/filter.inc:85 src/etc/inc/filter.inc:127 -#: src/etc/inc/unbound.inc:807 +#: src/etc/inc/unbound.inc:806 msgid "Redirect" msgstr "" @@ -1405,9 +1410,10 @@ msgstr "" msgid "Address mask reply" msgstr "" -#: src/etc/inc/filter.inc:97 src/usr/local/www/diag_dns.php:294 +#: src/etc/inc/filter.inc:97 src/usr/local/www/diag_dns.php:313 #: src/usr/local/www/diag_traceroute.php:70 -#: src/usr/local/www/diag_traceroute.php:160 src/usr/local/www/head.inc:392 +#: src/usr/local/www/diag_traceroute.php:148 +#: src/usr/local/www/diag_traceroute.php:197 src/usr/local/www/head.inc:392 msgid "Traceroute" msgstr "" @@ -1557,22 +1563,22 @@ msgstr "" #: src/etc/inc/filter.inc:322 src/etc/inc/filter.inc:574 #: src/etc/inc/interfaces.inc:209 src/etc/inc/interfaces.inc:233 -#: src/etc/inc/interfaces.inc:371 src/etc/inc/interfaces.inc:433 -#: src/etc/inc/interfaces.inc:741 src/etc/inc/interfaces.inc:1106 -#: src/etc/inc/interfaces.inc:1137 src/etc/inc/interfaces.inc:1161 -#: src/etc/inc/interfaces.inc:1182 src/etc/inc/interfaces.inc:2199 -#: src/etc/inc/pkg-utils.inc:545 src/etc/inc/pkg-utils.inc:694 -#: src/etc/inc/pkg-utils.inc:718 src/etc/inc/pkg-utils.inc:754 -#: src/etc/inc/pkg-utils.inc:759 src/etc/inc/pkg-utils.inc:764 -#: src/etc/inc/pkg-utils.inc:782 src/etc/inc/pkg-utils.inc:799 -#: src/etc/inc/pkg-utils.inc:821 src/etc/inc/pkg-utils.inc:864 -#: src/etc/inc/pkg-utils.inc:890 src/etc/inc/pkg-utils.inc:933 -#: src/etc/inc/pkg-utils.inc:952 src/etc/inc/rrd.inc:1077 -#: src/etc/inc/services.inc:1561 src/etc/inc/services.inc:1942 -#: src/etc/inc/services.inc:2138 src/etc/inc/services.inc:2180 -#: src/etc/inc/services.inc:2389 src/etc/inc/system.inc:1089 -#: src/etc/inc/system.inc:1187 src/etc/inc/system.inc:1479 -#: src/etc/inc/system.inc:1896 src/etc/inc/system.inc:2047 +#: src/etc/inc/interfaces.inc:379 src/etc/inc/interfaces.inc:441 +#: src/etc/inc/interfaces.inc:749 src/etc/inc/interfaces.inc:1114 +#: src/etc/inc/interfaces.inc:1145 src/etc/inc/interfaces.inc:1169 +#: src/etc/inc/interfaces.inc:1190 src/etc/inc/interfaces.inc:2208 +#: src/etc/inc/pkg-utils.inc:564 src/etc/inc/pkg-utils.inc:713 +#: src/etc/inc/pkg-utils.inc:737 src/etc/inc/pkg-utils.inc:773 +#: src/etc/inc/pkg-utils.inc:778 src/etc/inc/pkg-utils.inc:783 +#: src/etc/inc/pkg-utils.inc:801 src/etc/inc/pkg-utils.inc:818 +#: src/etc/inc/pkg-utils.inc:840 src/etc/inc/pkg-utils.inc:883 +#: src/etc/inc/pkg-utils.inc:909 src/etc/inc/pkg-utils.inc:952 +#: src/etc/inc/pkg-utils.inc:971 src/etc/inc/rrd.inc:1079 +#: src/etc/inc/services.inc:1577 src/etc/inc/services.inc:1958 +#: src/etc/inc/services.inc:2154 src/etc/inc/services.inc:2196 +#: src/etc/inc/services.inc:2405 src/etc/inc/system.inc:1092 +#: src/etc/inc/system.inc:1190 src/etc/inc/system.inc:1491 +#: src/etc/inc/system.inc:2022 msgid "done." msgstr "" @@ -1630,82 +1636,82 @@ msgstr "" msgid "Creating gateway group item..." msgstr "" -#: src/etc/inc/filter.inc:916 +#: src/etc/inc/filter.inc:917 #, php-format msgid "Setting up route with %1$s on %2$s" msgstr "" -#: src/etc/inc/filter.inc:920 +#: src/etc/inc/filter.inc:921 #, php-format msgid "Too many members in group %s, gateway group truncated in ruleset." msgstr "" -#: src/etc/inc/filter.inc:932 +#: src/etc/inc/filter.inc:933 #, php-format msgid "" "An error occurred while trying to find the interface got %s . The rule has " "not been added." msgstr "" -#: src/etc/inc/filter.inc:1285 +#: src/etc/inc/filter.inc:1286 #, php-format msgid "Creating reflection NAT rule for %s..." msgstr "" -#: src/etc/inc/filter.inc:1383 +#: src/etc/inc/filter.inc:1384 #, php-format msgid "Creating reflection rule for %s..." msgstr "" -#: src/etc/inc/filter.inc:1504 +#: src/etc/inc/filter.inc:1505 msgid "Not installing NAT reflection rules for a port range > 500" msgstr "" -#: src/etc/inc/filter.inc:1510 +#: src/etc/inc/filter.inc:1511 msgid "Installing partial NAT reflection rules. Maximum 1,000 reached." msgstr "" -#: src/etc/inc/filter.inc:1591 +#: src/etc/inc/filter.inc:1592 msgid "localhost" msgstr "" -#: src/etc/inc/filter.inc:1599 +#: src/etc/inc/filter.inc:1600 msgid "static route" msgstr "" -#: src/etc/inc/filter.inc:1611 +#: src/etc/inc/filter.inc:1612 msgid "DHCP alias address" msgstr "" -#: src/etc/inc/filter.inc:1645 +#: src/etc/inc/filter.inc:1646 msgid "PPPoE server" msgstr "" -#: src/etc/inc/filter.inc:1656 +#: src/etc/inc/filter.inc:1657 msgid "L2TP server" msgstr "" -#: src/etc/inc/filter.inc:1665 +#: src/etc/inc/filter.inc:1666 msgid "OpenVPN server" msgstr "" -#: src/etc/inc/filter.inc:1674 +#: src/etc/inc/filter.inc:1675 msgid "OpenVPN client" msgstr "" -#: src/etc/inc/filter.inc:1684 +#: src/etc/inc/filter.inc:1685 msgid "IPsec client" msgstr "" -#: src/etc/inc/filter.inc:1720 +#: src/etc/inc/filter.inc:1721 msgid "Auto created rule for ISAKMP" msgstr "" -#: src/etc/inc/filter.inc:1730 +#: src/etc/inc/filter.inc:1731 msgid "Auto created rule" msgstr "" -#: src/etc/inc/filter.inc:1863 +#: src/etc/inc/filter.inc:1864 msgid "Creating 1:1 rules..." msgstr "" @@ -1775,49 +1781,49 @@ msgstr "" msgid "Creating rule %s" msgstr "" -#: src/etc/inc/filter.inc:3033 +#: src/etc/inc/filter.inc:3031 #, php-format msgid "[TDR DEBUG] status true -- rule type '%s'" msgstr "" -#: src/etc/inc/filter.inc:3077 +#: src/etc/inc/filter.inc:3075 msgid "Creating default rules" msgstr "" -#: src/etc/inc/filter.inc:3729 +#: src/etc/inc/filter.inc:3726 msgid "Creating IPsec rules..." msgstr "" -#: src/etc/inc/filter.inc:3782 +#: src/etc/inc/filter.inc:3779 msgid "" "Please use filter_tdr_install_cron() function tdr_install_cron will be " "deprecated!" msgstr "" -#: src/etc/inc/filter.inc:3831 +#: src/etc/inc/filter.inc:3828 msgid "Installed 15 minute filter reload for Time Based Rules" msgstr "" -#: src/etc/inc/filter.inc:3838 +#: src/etc/inc/filter.inc:3835 msgid "Removed 15 minute filter reload for Time Based Rules" msgstr "" -#: src/etc/inc/filter.inc:4203 +#: src/etc/inc/filter.inc:4200 #, php-format msgid "Checking for %1$s PF hooks in package %2$s" msgstr "" -#: src/etc/inc/filter.inc:4210 +#: src/etc/inc/filter.inc:4207 #, php-format msgid "Processing early %1$s rules for package %2$s" msgstr "" -#: src/etc/inc/filter.inc:4215 +#: src/etc/inc/filter.inc:4212 #, php-format msgid "There was an error while parsing the package filter rules for %s." msgstr "" -#: src/etc/inc/filter.inc:4281 +#: src/etc/inc/filter.inc:4278 msgid "delete this separator" msgstr "" @@ -1867,70 +1873,72 @@ msgstr "" msgid "No mirrors found." msgstr "" -#: src/etc/inc/gmirror.inc:104 src/etc/inc/shaper.inc:789 -#: src/etc/inc/shaper.inc:1167 src/etc/inc/shaper.inc:1376 -#: src/etc/inc/shaper.inc:3345 src/etc/inc/shaper.inc:3891 -#: src/etc/inc/shaper.inc:4213 src/usr/local/www/diag_gmirror.php:251 -#: src/usr/local/www/diag_gmirror.php:331 +#: src/etc/inc/gmirror.inc:104 src/etc/inc/shaper.inc:838 +#: src/etc/inc/shaper.inc:1234 src/etc/inc/shaper.inc:1447 +#: src/etc/inc/shaper.inc:3312 src/etc/inc/shaper.inc:3859 +#: src/etc/inc/shaper.inc:4181 src/usr/local/www/diag_gmirror.php:255 +#: src/usr/local/www/diag_gmirror.php:336 #: src/usr/local/www/firewall_aliases.php:226 #: src/usr/local/www/firewall_aliases_edit.php:174 -#: src/usr/local/www/firewall_aliases_edit.php:674 +#: src/usr/local/www/firewall_aliases_edit.php:671 #: src/usr/local/www/firewall_aliases_import.php:93 #: src/usr/local/www/firewall_schedule.php:126 #: src/usr/local/www/interfaces_groups.php:113 #: src/usr/local/www/load_balancer_monitor.php:140 -#: src/usr/local/www/load_balancer_monitor_edit.php:118 -#: src/usr/local/www/load_balancer_monitor_edit.php:306 +#: src/usr/local/www/load_balancer_monitor_edit.php:120 +#: src/usr/local/www/load_balancer_monitor_edit.php:304 #: src/usr/local/www/load_balancer_pool.php:154 #: src/usr/local/www/load_balancer_pool_edit.php:107 -#: src/usr/local/www/load_balancer_pool_edit.php:347 -#: src/usr/local/www/load_balancer_virtual_server.php:154 +#: src/usr/local/www/load_balancer_pool_edit.php:339 +#: src/usr/local/www/load_balancer_virtual_server.php:174 #: src/usr/local/www/load_balancer_virtual_server_edit.php:104 #: src/usr/local/www/load_balancer_virtual_server_edit.php:109 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:208 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:210 #: src/usr/local/www/pkg_mgr.php:99 src/usr/local/www/pkg_mgr.php:190 -#: src/usr/local/www/pkg_mgr_installed.php:102 -#: src/usr/local/www/services_captiveportal_filemanager.php:218 +#: src/usr/local/www/pkg_mgr_installed.php:111 +#: src/usr/local/www/services_captiveportal_filemanager.php:223 #: src/usr/local/www/services_igmpproxy.php:121 #: src/usr/local/www/status_gateways.php:93 #: src/usr/local/www/status_lb_pool.php:162 #: src/usr/local/www/status_lb_vs.php:96 -#: src/usr/local/www/status_openvpn.php:252 -#: src/usr/local/www/status_openvpn.php:308 +#: src/usr/local/www/status_openvpn.php:256 +#: src/usr/local/www/status_openvpn.php:312 #: src/usr/local/www/system_camanager.php:392 -#: src/usr/local/www/system_certmanager.php:1006 -#: src/usr/local/www/system_crlmanager.php:614 +#: src/usr/local/www/system_certmanager.php:974 +#: src/usr/local/www/system_crlmanager.php:616 #: src/usr/local/www/system_gateways.php:276 #: src/usr/local/www/system_gateways_edit.php:142 #: src/usr/local/www/system_gateways_edit.php:638 -#: src/usr/local/www/system_groupmanager.php:249 +#: src/usr/local/www/system_groupmanager.php:261 #: src/usr/local/www/system_usermanager.php:379 -#: src/usr/local/www/system_usermanager.php:428 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:89 +#: src/usr/local/www/system_usermanager.php:429 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:90 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:82 -#: src/usr/local/www/widgets/widgets/system_information.widget.php:113 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:117 msgid "Name" msgstr "" -#: src/etc/inc/gmirror.inc:105 src/usr/local/www/diag_gmirror.php:252 -#: src/usr/local/www/easyrule.php:112 src/usr/local/www/index.php:315 +#: src/etc/inc/gmirror.inc:105 src/usr/local/www/diag_gmirror.php:256 +#: src/usr/local/www/easyrule.php:112 src/usr/local/www/index.php:321 +#: src/usr/local/www/pkg_mgr_install.php:484 #: src/usr/local/www/status_captiveportal.php:125 -#: src/usr/local/www/status_captiveportal_expire.php:86 -#: src/usr/local/www/status_captiveportal_test.php:86 -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:85 -#: src/usr/local/www/status_captiveportal_vouchers.php:85 -#: src/usr/local/www/status_carp.php:140 src/usr/local/www/status_carp.php:206 +#: src/usr/local/www/status_captiveportal_expire.php:87 +#: src/usr/local/www/status_captiveportal_test.php:87 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: src/usr/local/www/status_captiveportal_vouchers.php:86 +#: src/usr/local/www/status_carp.php:140 src/usr/local/www/status_carp.php:208 #: src/usr/local/www/status_dhcp_leases.php:69 #: src/usr/local/www/status_dhcpv6_leases.php:70 #: src/usr/local/www/status_filter_reload.php:67 #: src/usr/local/www/status_gateway_groups.php:80 #: src/usr/local/www/status_gateways.php:75 #: src/usr/local/www/status_gateways.php:99 -#: src/usr/local/www/status_graph.php:150 +#: src/usr/local/www/status_graph.php:165 #: src/usr/local/www/status_graph_cpu.php:66 -#: src/usr/local/www/status_interfaces.php:108 -#: src/usr/local/www/status_interfaces.php:124 -#: src/usr/local/www/status_ipsec.php:70 src/usr/local/www/status_ipsec.php:140 +#: src/usr/local/www/status_interfaces.php:111 +#: src/usr/local/www/status_interfaces.php:127 +#: src/usr/local/www/status_ipsec.php:490 +#: src/usr/local/www/status_ipsec.php:517 #: src/usr/local/www/status_ipsec_leases.php:66 #: src/usr/local/www/status_ipsec_leases.php:90 #: src/usr/local/www/status_ipsec_sad.php:69 @@ -1943,25 +1951,25 @@ msgstr "" #: src/usr/local/www/status_logs_filter_summary.php:101 #: src/usr/local/www/status_logs_settings.php:209 #: src/usr/local/www/status_logs_vpn.php:117 -#: src/usr/local/www/status_ntpd.php:186 src/usr/local/www/status_ntpd.php:198 +#: src/usr/local/www/status_ntpd.php:287 src/usr/local/www/status_ntpd.php:299 #: src/usr/local/www/status_openvpn.php:64 -#: src/usr/local/www/status_openvpn.php:253 -#: src/usr/local/www/status_openvpn.php:309 +#: src/usr/local/www/status_openvpn.php:257 +#: src/usr/local/www/status_openvpn.php:313 #: src/usr/local/www/status_pkglogs.php:104 -#: src/usr/local/www/status_queues.php:145 -#: src/usr/local/www/status_services.php:100 -#: src/usr/local/www/status_services.php:132 +#: src/usr/local/www/status_queues.php:144 +#: src/usr/local/www/status_services.php:90 +#: src/usr/local/www/status_services.php:122 #: src/usr/local/www/status_upnp.php:76 #: src/usr/local/www/status_wireless.php:65 #: src/usr/local/www/status_wireless.php:96 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:93 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:94 #: src/usr/local/www/widgets/widgets/ipsec.widget.php:236 #: src/usr/local/www/widgets/widgets/ipsec.widget.php:252 #: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:75 msgid "Status" msgstr "" -#: src/etc/inc/gmirror.inc:106 src/usr/local/www/diag_gmirror.php:253 +#: src/etc/inc/gmirror.inc:106 src/usr/local/www/diag_gmirror.php:257 msgid "Component" msgstr "" @@ -1990,34 +1998,34 @@ msgstr "" msgid "dpinger: cannot connect to status socket %1$s - %2$s (%3$s)" msgstr "" -#: src/etc/inc/gwlb.inc:927 +#: src/etc/inc/gwlb.inc:939 #, php-format msgid "MONITOR: %1$s is down, omitting from routing group %2$s" msgstr "" -#: src/etc/inc/gwlb.inc:931 +#: src/etc/inc/gwlb.inc:943 #, php-format msgid "MONITOR: %1$s has packet loss, omitting from routing group %2$s" msgstr "" -#: src/etc/inc/gwlb.inc:935 +#: src/etc/inc/gwlb.inc:947 #, php-format msgid "MONITOR: %1$s has high latency, omitting from routing group %2$s" msgstr "" -#: src/etc/inc/gwlb.inc:957 +#: src/etc/inc/gwlb.inc:969 #, php-format msgid "" "Gateways status could not be determined, considering all as up/active. " "(Group: %s)" msgstr "" -#: src/etc/inc/gwlb.inc:1000 +#: src/etc/inc/gwlb.inc:1012 #, php-format msgid "GATEWAYS: Group %1$s did not have any gateways up on tier %2$s!" msgstr "" -#: src/etc/inc/gwlb.inc:1022 +#: src/etc/inc/gwlb.inc:1034 #, php-format msgid "Updating gateway group gateway for %1$s - new gateway is %2$s" msgstr "" @@ -2042,288 +2050,288 @@ msgstr "" msgid "interface_vlan_configure called with if undefined." msgstr "" -#: src/etc/inc/interfaces.inc:284 src/etc/inc/interfaces.inc:379 +#: src/etc/inc/interfaces.inc:292 src/etc/inc/interfaces.inc:387 #, php-format msgid "QinQ compat VLAN: called with wrong options. Problems with config!%s" msgstr "" -#: src/etc/inc/interfaces.inc:291 +#: src/etc/inc/interfaces.inc:299 #, php-format msgid "interface_qinq_configure called with if undefined.%s" msgstr "" -#: src/etc/inc/interfaces.inc:296 +#: src/etc/inc/interfaces.inc:304 #, php-format msgid "interface_qinq_configure called with invalid if.%s" msgstr "" -#: src/etc/inc/interfaces.inc:362 +#: src/etc/inc/interfaces.inc:370 msgid "Configuring QinQ interfaces..." msgstr "" -#: src/etc/inc/interfaces.inc:387 +#: src/etc/inc/interfaces.inc:395 #, php-format msgid "interface_qinq2_configure called with if undefined.%s" msgstr "" -#: src/etc/inc/interfaces.inc:408 +#: src/etc/inc/interfaces.inc:416 msgid "Creating wireless clone interfaces..." msgstr "" -#: src/etc/inc/interfaces.inc:486 +#: src/etc/inc/interfaces.inc:494 #, php-format msgid "No members found on %s" msgstr "" -#: src/etc/inc/interfaces.inc:550 +#: src/etc/inc/interfaces.inc:558 msgid "realif not defined in interfaces bridge - up" msgstr "" -#: src/etc/inc/interfaces.inc:569 +#: src/etc/inc/interfaces.inc:577 msgid "bridgeif not defined -- could not bring interface up" msgstr "" -#: src/etc/inc/interfaces.inc:724 +#: src/etc/inc/interfaces.inc:732 msgid "Configuring LAGG interfaces..." msgstr "" -#: src/etc/inc/interfaces.inc:886 +#: src/etc/inc/interfaces.inc:894 msgid "Could not bring greif up -- variable not defined." msgstr "" -#: src/etc/inc/interfaces.inc:969 +#: src/etc/inc/interfaces.inc:977 msgid "" "could not bring realif up -- variable not defined -- " "interface_gif_configure()" msgstr "" -#: src/etc/inc/interfaces.inc:1016 +#: src/etc/inc/interfaces.inc:1024 msgid "could not bring gifif up -- variable not defined" msgstr "" -#: src/etc/inc/interfaces.inc:1098 src/etc/inc/interfaces.inc:1128 -#: src/etc/inc/interfaces.inc:1152 src/etc/inc/interfaces.inc:1170 +#: src/etc/inc/interfaces.inc:1106 src/etc/inc/interfaces.inc:1136 +#: src/etc/inc/interfaces.inc:1160 src/etc/inc/interfaces.inc:1178 #, php-format msgid "Configuring %s interface..." msgstr "" -#: src/etc/inc/interfaces.inc:1102 src/etc/inc/interfaces.inc:1131 -#: src/etc/inc/interfaces.inc:1155 src/etc/inc/interfaces.inc:1173 +#: src/etc/inc/interfaces.inc:1110 src/etc/inc/interfaces.inc:1139 +#: src/etc/inc/interfaces.inc:1163 src/etc/inc/interfaces.inc:1181 #, php-format msgid "Configuring %s" msgstr "" -#: src/etc/inc/interfaces.inc:1255 +#: src/etc/inc/interfaces.inc:1264 #, php-format msgid "Calling interface down for interface %1$s, destroy is %2$s" msgstr "" -#: src/etc/inc/interfaces.inc:1269 +#: src/etc/inc/interfaces.inc:1278 msgid "Wrong parameters used during interface_bring_down" msgstr "" -#: src/etc/inc/interfaces.inc:1444 +#: src/etc/inc/interfaces.inc:1453 msgid "Enter CARP maintenance mode" msgstr "" -#: src/etc/inc/interfaces.inc:1630 +#: src/etc/inc/interfaces.inc:1639 #, php-format msgid "Can't find PPP config for %s in interface_ppps_configure()." msgstr "" -#: src/etc/inc/interfaces.inc:1688 +#: src/etc/inc/interfaces.inc:1697 #, php-format msgid "" "Could not get a Local IP address for PPTP/L2TP link on %s in " "interfaces_ppps_configure. Using 0.0.0.0 ip!" msgstr "" -#: src/etc/inc/interfaces.inc:1692 +#: src/etc/inc/interfaces.inc:1701 #, php-format msgid "" "Could not get a PPTP/L2TP Remote IP address from %1$s for %2$s in " "interfaces_ppps_configure." msgstr "" -#: src/etc/inc/interfaces.inc:1699 +#: src/etc/inc/interfaces.inc:1708 #, php-format msgid "" "Device %s does not exist. PPP link cannot start without the modem device." msgstr "" -#: src/etc/inc/interfaces.inc:1704 +#: src/etc/inc/interfaces.inc:1713 #, php-format msgid "Unknown %s configured as ppp interface." msgstr "" -#: src/etc/inc/interfaces.inc:2022 +#: src/etc/inc/interfaces.inc:2031 #, php-format msgid "Error: cannot open mpd_%1$s.conf in interface_ppps_configure().%2$s" msgstr "" -#: src/etc/inc/interfaces.inc:2120 +#: src/etc/inc/interfaces.inc:2129 #, php-format msgid "Starting 3gstats.php on device '%1$s' for interface '%2$s'" msgstr "" -#: src/etc/inc/interfaces.inc:2137 +#: src/etc/inc/interfaces.inc:2146 msgid "Configuring CARP settings..." msgstr "" -#: src/etc/inc/interfaces.inc:2178 +#: src/etc/inc/interfaces.inc:2187 msgid "waiting for pfsync..." msgstr "" -#: src/etc/inc/interfaces.inc:2184 +#: src/etc/inc/interfaces.inc:2193 #, php-format msgid "pfsync done in %s seconds." msgstr "" -#: src/etc/inc/interfaces.inc:2185 +#: src/etc/inc/interfaces.inc:2194 msgid "Configuring CARP settings finalize..." msgstr "" -#: src/etc/inc/interfaces.inc:2408 +#: src/etc/inc/interfaces.inc:2417 #, php-format msgid "" "Interface specified for the virtual IP address %s does not exist. Skipping " "this VIP." msgstr "" -#: src/etc/inc/interfaces.inc:2468 +#: src/etc/inc/interfaces.inc:2477 #, php-format msgid "Interface %s changed to hostap mode" msgstr "" -#: src/etc/inc/interfaces.inc:2472 +#: src/etc/inc/interfaces.inc:2481 #, php-format msgid "Interface %s changed to adhoc mode" msgstr "" -#: src/etc/inc/interfaces.inc:2476 +#: src/etc/inc/interfaces.inc:2485 #, php-format msgid "Interface %s changed to infrastructure mode" msgstr "" -#: src/etc/inc/interfaces.inc:2489 +#: src/etc/inc/interfaces.inc:2498 #, php-format msgid "Cloning new wireless interface %s" msgstr "" -#: src/etc/inc/interfaces.inc:2494 +#: src/etc/inc/interfaces.inc:2503 #, php-format msgid "Failed to clone interface %1$s with error code %2$s, output %3$s" msgstr "" -#: src/etc/inc/interfaces.inc:3079 +#: src/etc/inc/interfaces.inc:3088 #, php-format msgid "OpenVPN: Resync server %s" msgstr "" -#: src/etc/inc/interfaces.inc:3092 +#: src/etc/inc/interfaces.inc:3101 #, php-format msgid "OpenVPN: Resync client %s" msgstr "" -#: src/etc/inc/interfaces.inc:3227 +#: src/etc/inc/interfaces.inc:3236 #, php-format msgid "Deny router advertisements for interface %s" msgstr "" -#: src/etc/inc/interfaces.inc:3252 +#: src/etc/inc/interfaces.inc:3261 msgid "Generating new MAC address." msgstr "" -#: src/etc/inc/interfaces.inc:3258 +#: src/etc/inc/interfaces.inc:3267 #, php-format msgid "" "The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface %1$s has been " "automatically replaced with %2$s" msgstr "" -#: src/etc/inc/interfaces.inc:3324 +#: src/etc/inc/interfaces.inc:3333 #, php-format msgid "There is a conflict on MTU between parent %1$s and VLAN(%2$s)" msgstr "" -#: src/etc/inc/interfaces.inc:3514 src/etc/inc/interfaces.inc:3579 -#: src/etc/inc/interfaces.inc:3643 +#: src/etc/inc/interfaces.inc:3524 src/etc/inc/interfaces.inc:3593 +#: src/etc/inc/interfaces.inc:3657 #, php-format -msgid "Interface %1$s tracking non-existant interface %2$s" +msgid "Interface %1$s tracking non-existent interface %2$s" msgstr "" -#: src/etc/inc/interfaces.inc:3521 src/etc/inc/interfaces.inc:3527 +#: src/etc/inc/interfaces.inc:3531 src/etc/inc/interfaces.inc:3537 #, php-format msgid "Interface %1$s configured via %2$s type %3$s" msgstr "" -#: src/etc/inc/interfaces.inc:3585 +#: src/etc/inc/interfaces.inc:3599 #, php-format msgid "" "The interface IPv4 '%1$s' address on interface '%2$s' is not valid, not " "configuring 6RD tunnel" msgstr "" -#: src/etc/inc/interfaces.inc:3621 +#: src/etc/inc/interfaces.inc:3635 #, php-format msgid "rd6 %1$s with ipv6 address %2$s based on %3$s ipv4 %4$s" msgstr "" -#: src/etc/inc/interfaces.inc:3649 src/etc/inc/interfaces.inc:3704 -#: src/etc/inc/interfaces.inc:3790 +#: src/etc/inc/interfaces.inc:3663 src/etc/inc/interfaces.inc:3718 +#: src/etc/inc/interfaces.inc:3804 #, php-format msgid "" "The interface IPv4 '%1$s' address on interface '%2$s' is not public, not " "configuring 6RD tunnel" msgstr "" -#: src/etc/inc/interfaces.inc:3681 +#: src/etc/inc/interfaces.inc:3695 #, php-format msgid "sixto4 %1$s with ipv6 address %2$s based on %3$s ipv4 %4$s" msgstr "" -#: src/etc/inc/interfaces.inc:4176 +#: src/etc/inc/interfaces.inc:4190 #, php-format msgid "Error: cannot open %s in DHCP6_Config_File_Override() for reading." msgstr "" -#: src/etc/inc/interfaces.inc:4204 +#: src/etc/inc/interfaces.inc:4218 #, php-format msgid "" "Error: cannot open dhclient_%s.conf in interface_dhcp_configure() for " "writing." msgstr "" -#: src/etc/inc/interfaces.inc:4217 +#: src/etc/inc/interfaces.inc:4231 #, php-format msgid "Invalid interface \"%s\" in interface_dhcp_configure()" msgstr "" -#: src/etc/inc/interfaces.inc:4273 +#: src/etc/inc/interfaces.inc:4287 #, php-format msgid "Could not bring up %s interface in interface_dhcp_configure()" msgstr "" -#: src/etc/inc/interfaces.inc:4359 +#: src/etc/inc/interfaces.inc:4373 #, php-format msgid "Error: cannot open %s in DHCP_Config_File_Override() for reading.\n" msgstr "" -#: src/etc/inc/interfaces.inc:5320 src/etc/inc/service-utils.inc:390 +#: src/etc/inc/interfaces.inc:5334 src/etc/inc/service-utils.inc:390 #: src/usr/local/www/diag_backup.php:567 #: src/usr/local/www/diag_packet_capture.php:143 -#: src/usr/local/www/firewall_nat_1to1_edit.php:441 -#: src/usr/local/www/firewall_nat_edit.php:706 +#: src/usr/local/www/firewall_nat_1to1_edit.php:438 +#: src/usr/local/www/firewall_nat_edit.php:704 #: src/usr/local/www/firewall_nat_npt_edit.php:206 -#: src/usr/local/www/firewall_rules.php:192 -#: src/usr/local/www/firewall_rules_edit.php:1054 +#: src/usr/local/www/firewall_rules.php:195 +#: src/usr/local/www/firewall_rules_edit.php:1070 #: src/usr/local/www/head.inc:316 src/usr/local/www/head.inc:334 #: src/usr/local/www/status_graph.php:94 src/usr/local/www/status_logs.php:86 #: src/usr/local/www/status_logs_common.inc:129 #: src/usr/local/www/status_logs_settings.php:241 #: src/usr/local/www/status_openvpn.php:64 #: src/usr/local/www/vpn_openvpn_client.php:426 -#: src/usr/local/www/vpn_openvpn_csc.php:308 +#: src/usr/local/www/vpn_openvpn_csc.php:312 #: src/usr/local/www/vpn_openvpn_server.php:592 #: src/usr/local/www/widgets/include/openvpn.inc:2 msgid "OpenVPN" @@ -2358,12 +2366,12 @@ msgid "Kernel Interface" msgstr "" #: src/etc/inc/ipsec.inc:65 src/etc/inc/ipsec.inc:95 -#: src/usr/local/www/system_advanced_admin.php:330 +#: src/usr/local/www/system_advanced_admin.php:332 #: src/usr/local/www/system_advanced_firewall.php:417 -#: src/usr/local/www/system_advanced_misc.php:318 +#: src/usr/local/www/system_advanced_misc.php:335 #: src/usr/local/www/system_advanced_network.php:173 #: src/usr/local/www/system_advanced_network.php:186 -#: src/usr/local/www/system_advanced_notifications.php:230 +#: src/usr/local/www/system_advanced_notifications.php:229 #: src/usr/local/www/system_advanced_sysctl.php:188 msgid "Networking" msgstr "" @@ -2429,17 +2437,17 @@ msgid "My IP address" msgstr "" #: src/etc/inc/ipsec.inc:109 src/etc/inc/ipsec.inc:121 -#: src/usr/local/www/diag_arp.php:345 src/usr/local/www/services_dhcp.php:1317 +#: src/usr/local/www/diag_arp.php:346 src/usr/local/www/services_dhcp.php:1331 #: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:100 #: src/usr/local/www/services_dnsmasq_edit.php:110 #: src/usr/local/www/services_unbound_domainoverride_edit.php:96 #: src/usr/local/www/services_unbound_host_edit.php:111 #: src/usr/local/www/status_captiveportal.php:183 #: src/usr/local/www/status_dhcp_leases.php:379 -#: src/usr/local/www/system_advanced_network.php:214 -#: src/usr/local/www/system_certmanager.php:814 +#: src/usr/local/www/system_advanced_network.php:213 +#: src/usr/local/www/system_certmanager.php:773 #: src/usr/local/www/vpn_l2tp_users.php:130 -#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:129 +#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:130 msgid "IP address" msgstr "" @@ -2461,8 +2469,8 @@ msgstr "" #: src/etc/inc/ipsec.inc:114 src/usr/local/www/head.inc:296 #: src/usr/local/www/services_dhcp.php:1010 -#: src/usr/local/www/services_dhcp_edit.php:599 -#: src/usr/local/www/services_dhcpv6.php:766 +#: src/usr/local/www/services_dhcp_edit.php:603 +#: src/usr/local/www/services_dhcpv6.php:768 #: src/usr/local/www/services_dyndns.php:100 #: src/usr/local/www/services_dyndns_edit.php:273 #: src/usr/local/www/services_rfc2136.php:92 @@ -2470,16 +2478,16 @@ msgstr "" msgid "Dynamic DNS" msgstr "" -#: src/etc/inc/ipsec.inc:119 src/usr/local/www/diag_traceroute.php:84 +#: src/etc/inc/ipsec.inc:119 src/usr/local/www/diag_traceroute.php:169 #: src/usr/local/www/firewall_nat_1to1_edit.php:287 #: src/usr/local/www/firewall_nat_1to1_edit.php:329 -#: src/usr/local/www/firewall_nat_edit.php:541 -#: src/usr/local/www/firewall_nat_edit.php:587 +#: src/usr/local/www/firewall_nat_edit.php:551 +#: src/usr/local/www/firewall_nat_edit.php:591 #: src/usr/local/www/firewall_nat_edit.php:762 #: src/usr/local/www/firewall_nat_out_edit.php:513 #: src/usr/local/www/firewall_nat_out_edit.php:537 -#: src/usr/local/www/firewall_rules_edit.php:1451 -#: src/usr/local/www/interfaces.php:2943 +#: src/usr/local/www/firewall_rules_edit.php:1467 +#: src/usr/local/www/interfaces.php:2950 msgid "Any" msgstr "" @@ -2527,8 +2535,8 @@ msgstr "" msgid "Tunnel IPv6" msgstr "" -#: src/etc/inc/ipsec.inc:215 src/usr/local/www/system_authservers.php:201 -#: src/usr/local/www/system_authservers.php:498 +#: src/etc/inc/ipsec.inc:215 src/usr/local/www/system_authservers.php:267 +#: src/usr/local/www/system_authservers.php:564 msgid "Transport" msgstr "" @@ -2596,14 +2604,14 @@ msgstr "" msgid "Mobile Client" msgstr "" -#: src/etc/inc/ipsec.inc:440 src/etc/inc/pfsense-utils.inc:2930 -#: src/etc/inc/shaper.inc:3936 src/etc/inc/shaper.inc:4240 +#: src/etc/inc/ipsec.inc:440 src/etc/inc/pfsense-utils.inc:2943 +#: src/etc/inc/shaper.inc:3904 src/etc/inc/shaper.inc:4208 #: src/usr/local/www/diag_pftop.php:150 #: src/usr/local/www/firewall_nat_edit.php:926 -#: src/usr/local/www/firewall_rules_edit.php:1562 -#: src/usr/local/www/interfaces.php:1640 src/usr/local/www/interfaces.php:1641 -#: src/usr/local/www/interfaces.php:1665 src/usr/local/www/interfaces.php:1678 -#: src/usr/local/www/system_advanced_misc.php:454 +#: src/usr/local/www/firewall_rules_edit.php:1578 +#: src/usr/local/www/interfaces.php:1649 src/usr/local/www/interfaces.php:1650 +#: src/usr/local/www/interfaces.php:1674 src/usr/local/www/interfaces.php:1687 +#: src/usr/local/www/system_advanced_misc.php:471 #: src/usr/local/www/vpn_ipsec_phase2.php:579 msgid "None" msgstr "" @@ -2643,39 +2651,45 @@ msgstr "" msgid "warning: tag %1$s has invalid data in '%2$s'%3$s" msgstr "" -#: src/etc/inc/notices.inc:104 +#: src/etc/inc/notices.inc:105 #, php-format msgid "Could not open %s for writing" msgstr "" -#: src/etc/inc/notices.inc:109 +#: src/etc/inc/notices.inc:110 #, php-format msgid "New alert found: %s" msgstr "" -#: src/etc/inc/notices.inc:393 +#: src/etc/inc/notices.inc:396 #, php-format msgid "Message sent to %s OK" msgstr "" -#: src/etc/inc/notices.inc:396 src/etc/inc/notices.inc:397 +#: src/etc/inc/notices.inc:399 src/etc/inc/notices.inc:400 #, php-format msgid "Could not send the message to %1$s -- Error: %2$s" msgstr "" -#: src/etc/inc/openvpn.inc:77 src/usr/local/www/firewall_rules.php:777 -#: src/usr/local/www/firewall_rules_edit.php:1601 -#: src/usr/local/www/firewall_rules_edit.php:1642 -#: src/usr/local/www/firewall_rules_edit.php:1649 -#: src/usr/local/www/status_ipsec.php:379 +#: src/etc/inc/notices.inc:440 src/etc/inc/notices.inc:473 +msgid "" +"Growl IP Address is invalid. Check the setting in System Advanced " +"Notifications." +msgstr "" + +#: src/etc/inc/openvpn.inc:77 src/usr/local/www/firewall_rules.php:780 +#: src/usr/local/www/firewall_rules_edit.php:1617 +#: src/usr/local/www/firewall_rules_edit.php:1658 +#: src/usr/local/www/firewall_rules_edit.php:1665 +#: src/usr/local/www/status_ipsec.php:363 #: src/usr/local/www/vpn_ipsec_mobile.php:495 #: src/usr/local/www/vpn_openvpn_client.php:528 msgid "none" msgstr "" #: src/etc/inc/openvpn.inc:78 src/usr/local/www/diag_pftop.php:128 -#: src/usr/local/www/firewall_rules_edit.php:1604 -#: src/usr/local/www/services_captiveportal.php:1000 +#: src/usr/local/www/firewall_rules_edit.php:1620 +#: src/usr/local/www/services_captiveportal.php:1009 msgid "default" msgstr "" @@ -2772,12 +2786,12 @@ msgstr "" msgid "CA: %s" msgstr "" -#: src/etc/inc/openvpn.inc:244 src/usr/local/www/system_certmanager.php:1009 -#: src/usr/local/www/system_crlmanager.php:617 +#: src/etc/inc/openvpn.inc:244 src/usr/local/www/system_certmanager.php:977 +#: src/usr/local/www/system_crlmanager.php:619 msgid "In Use" msgstr "" -#: src/etc/inc/openvpn.inc:247 src/usr/local/www/system_certmanager.php:1072 +#: src/etc/inc/openvpn.inc:247 src/usr/local/www/system_certmanager.php:1040 msgid "Revoked" msgstr "" @@ -2843,11 +2857,11 @@ msgstr "" msgid "openvpn_resync_gwgroup called with null gwgroup parameter." msgstr "" -#: src/etc/inc/openvpn.inc:1490 src/etc/inc/openvpn.inc:1618 +#: src/etc/inc/openvpn.inc:1490 src/etc/inc/openvpn.inc:1617 msgid "Unable to contact daemon" msgstr "" -#: src/etc/inc/openvpn.inc:1491 src/etc/inc/openvpn.inc:1619 +#: src/etc/inc/openvpn.inc:1491 src/etc/inc/openvpn.inc:1618 msgid "Service not running?" msgstr "" @@ -2943,59 +2957,64 @@ msgstr "" msgid "Download file failed with status code %1$s. URL: %2$s" msgstr "" -#: src/etc/inc/pfsense-utils.inc:1934 +#: src/etc/inc/pfsense-utils.inc:1933 +#, php-format +msgid "Could not process empty file from alias: %s" +msgstr "" + +#: src/etc/inc/pfsense-utils.inc:1938 #, php-format msgid "Could not process aliases from alias: %s" msgstr "" -#: src/etc/inc/pfsense-utils.inc:1991 +#: src/etc/inc/pfsense-utils.inc:1995 #, php-format msgid "Failed to download alias %s" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2020 +#: src/etc/inc/pfsense-utils.inc:2024 msgid "" "Alias archive is a .tar/tgz file which cannot be decompressed because " "utility is missing!" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2030 +#: src/etc/inc/pfsense-utils.inc:2034 #, php-format msgid "Could not open %s/aliases for writing!" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2036 +#: src/etc/inc/pfsense-utils.inc:2040 #, php-format msgid "The following file could not be read %1$s from %2$s" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2750 +#: src/etc/inc/pfsense-utils.inc:2763 msgid "English" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2751 +#: src/etc/inc/pfsense-utils.inc:2764 msgid "Portuguese (Brazil)" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2752 +#: src/etc/inc/pfsense-utils.inc:2765 msgid "Turkish" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2938 src/etc/inc/pfsense-utils.inc:2953 -#: src/etc/inc/pfsense-utils.inc:2978 +#: src/etc/inc/pfsense-utils.inc:2951 src/etc/inc/pfsense-utils.inc:2966 +#: src/etc/inc/pfsense-utils.inc:2991 msgid "No Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2948 src/etc/inc/pfsense-utils.inc:2990 +#: src/etc/inc/pfsense-utils.inc:2961 src/etc/inc/pfsense-utils.inc:3003 #: src/usr/local/www/firewall_nat_out.php:262 #: src/usr/local/www/firewall_nat_out.php:266 -#: src/usr/local/www/interfaces.php:864 src/usr/local/www/interfaces.php:2926 +#: src/usr/local/www/interfaces.php:873 src/usr/local/www/interfaces.php:2933 #: src/usr/local/www/interfaces_wireless.php:134 #: src/usr/local/www/interfaces_wireless_edit.php:115 #: src/usr/local/www/interfaces_wireless_edit.php:221 #: src/usr/local/www/load_balancer_pool.php:155 #: src/usr/local/www/load_balancer_pool_edit.php:107 -#: src/usr/local/www/load_balancer_pool_edit.php:354 +#: src/usr/local/www/load_balancer_pool_edit.php:346 #: src/usr/local/www/load_balancer_virtual_server_edit.php:104 #: src/usr/local/www/load_balancer_virtual_server_edit.php:109 #: src/usr/local/www/status_lb_pool.php:163 src/usr/local/www/vpn_ipsec.php:284 @@ -3004,306 +3023,323 @@ msgstr "" msgid "Mode" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2954 +#: src/etc/inc/pfsense-utils.inc:2967 msgid "Restricted Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2955 +#: src/etc/inc/pfsense-utils.inc:2968 msgid "Valid Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2956 +#: src/etc/inc/pfsense-utils.inc:2969 msgid "Restricted Regional Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2957 +#: src/etc/inc/pfsense-utils.inc:2970 msgid "Powersaving Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2963 +#: src/etc/inc/pfsense-utils.inc:2976 msgid "Invalid SIM/locked State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2964 +#: src/etc/inc/pfsense-utils.inc:2977 msgid "Valid SIM State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2965 +#: src/etc/inc/pfsense-utils.inc:2978 msgid "Invalid SIM CS State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2966 +#: src/etc/inc/pfsense-utils.inc:2979 msgid "Invalid SIM PS State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2967 +#: src/etc/inc/pfsense-utils.inc:2980 msgid "Invalid SIM CS/PS State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2968 +#: src/etc/inc/pfsense-utils.inc:2981 msgid "Missing SIM State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2979 +#: src/etc/inc/pfsense-utils.inc:2992 msgid "Limited Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2995 +#: src/etc/inc/pfsense-utils.inc:3008 msgid "Initializing Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2996 +#: src/etc/inc/pfsense-utils.inc:3009 msgid "Network Lock error Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2997 +#: src/etc/inc/pfsense-utils.inc:3010 msgid "Network Locked Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:2998 +#: src/etc/inc/pfsense-utils.inc:3011 msgid "Unlocked or correct MCC/MNC Service" msgstr "" -#: src/etc/inc/pfsense-utils.inc:3004 +#: src/etc/inc/pfsense-utils.inc:3017 msgid "No action State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:3005 +#: src/etc/inc/pfsense-utils.inc:3018 msgid "Network lock State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:3006 +#: src/etc/inc/pfsense-utils.inc:3019 msgid "(U)SIM card lock State" msgstr "" -#: src/etc/inc/pfsense-utils.inc:3007 +#: src/etc/inc/pfsense-utils.inc:3020 msgid "Network Lock and (U)SIM card Lock State" msgstr "" +#: src/etc/inc/pfsense-utils.inc:3111 +#, php-format +msgid "" +"Alias table restore failed exited with %1$s, the error is: %2$s %3$s%4$s" +msgstr "" + +#: src/etc/inc/pfsense-utils.inc:3113 +#, php-format +msgid "" +"Alias table restore succeeded exited with %1$s, the result is: %2$s %3$s%4$s" +msgstr "" + #: src/etc/inc/pkg-utils.inc:79 msgid "Warning, could not open log for writing." msgstr "" -#: src/etc/inc/pkg-utils.inc:212 +#: src/etc/inc/pkg-utils.inc:213 #, php-format msgid "" "ERROR!!! An error occurred on pkg execution (rc = %d) with parameters '%s':" msgstr "" -#: src/etc/inc/pkg-utils.inc:393 src/etc/inc/pkg-utils.inc:396 +#: src/etc/inc/pkg-utils.inc:412 src/etc/inc/pkg-utils.inc:415 msgid "ERROR: Error trying to get packages list. Aborting..." msgstr "" -#: src/etc/inc/pkg-utils.inc:428 src/etc/inc/pkg-utils.inc:431 +#: src/etc/inc/pkg-utils.inc:447 src/etc/inc/pkg-utils.inc:450 msgid "ERROR: Error trying to get package version. Aborting..." msgstr "" -#: src/etc/inc/pkg-utils.inc:480 +#: src/etc/inc/pkg-utils.inc:499 #, php-format msgid "Running last steps of %s installation." msgstr "" -#: src/etc/inc/pkg-utils.inc:493 +#: src/etc/inc/pkg-utils.inc:512 msgid "Resyncing configuration for all packages." msgstr "" -#: src/etc/inc/pkg-utils.inc:516 +#: src/etc/inc/pkg-utils.inc:535 msgid "Syncing packages..." msgstr "" -#: src/etc/inc/pkg-utils.inc:539 +#: src/etc/inc/pkg-utils.inc:558 msgid "Removing package..." msgstr "" -#: src/etc/inc/pkg-utils.inc:572 +#: src/etc/inc/pkg-utils.inc:591 #, php-format msgid "" "The %s package is missing its configuration file and must be reinstalled." msgstr "" -#: src/etc/inc/pkg-utils.inc:588 +#: src/etc/inc/pkg-utils.inc:607 #, php-format msgid "Reinstalling package %1$s because its include file(%2$s) is missing!" msgstr "" -#: src/etc/inc/pkg-utils.inc:591 +#: src/etc/inc/pkg-utils.inc:610 #, php-format msgid "Reinstalling package %s failed. Take appropriate measures!!!" msgstr "" -#: src/etc/inc/pkg-utils.inc:685 +#: src/etc/inc/pkg-utils.inc:704 msgid "Beginning package installation." msgstr "" -#: src/etc/inc/pkg-utils.inc:686 +#: src/etc/inc/pkg-utils.inc:705 #, php-format msgid "Beginning package installation for %s ." msgstr "" -#: src/etc/inc/pkg-utils.inc:690 +#: src/etc/inc/pkg-utils.inc:709 msgid "Saving updated package information..." msgstr "" -#: src/etc/inc/pkg-utils.inc:693 +#: src/etc/inc/pkg-utils.inc:712 #, php-format msgid "Installed %s package." msgstr "" -#: src/etc/inc/pkg-utils.inc:697 +#: src/etc/inc/pkg-utils.inc:716 #, php-format msgid "Overwrote previous installation of %s." msgstr "" -#: src/etc/inc/pkg-utils.inc:698 +#: src/etc/inc/pkg-utils.inc:717 msgid "overwrite!" msgstr "" -#: src/etc/inc/pkg-utils.inc:701 +#: src/etc/inc/pkg-utils.inc:720 #, php-format msgid "Intermediate config write during package install for %s." msgstr "" -#: src/etc/inc/pkg-utils.inc:706 +#: src/etc/inc/pkg-utils.inc:725 #, php-format msgid "The %s package is not installed.%sInstallation aborted." msgstr "" -#: src/etc/inc/pkg-utils.inc:710 src/etc/inc/pkg-utils.inc:742 -#: src/etc/inc/pkg-utils.inc:808 +#: src/etc/inc/pkg-utils.inc:729 src/etc/inc/pkg-utils.inc:761 +#: src/etc/inc/pkg-utils.inc:827 #, php-format msgid "Failed to install package: %s." msgstr "" -#: src/etc/inc/pkg-utils.inc:711 src/etc/inc/pkg-utils.inc:743 -#: src/etc/inc/pkg-utils.inc:809 +#: src/etc/inc/pkg-utils.inc:730 src/etc/inc/pkg-utils.inc:762 +#: src/etc/inc/pkg-utils.inc:828 msgid "Failed to install package." msgstr "" -#: src/etc/inc/pkg-utils.inc:716 +#: src/etc/inc/pkg-utils.inc:735 msgid "Loading package configuration... " msgstr "" -#: src/etc/inc/pkg-utils.inc:719 +#: src/etc/inc/pkg-utils.inc:738 msgid "Configuring package components..." msgstr "" -#: src/etc/inc/pkg-utils.inc:731 src/etc/inc/pkg-utils.inc:905 +#: src/etc/inc/pkg-utils.inc:750 src/etc/inc/pkg-utils.inc:924 msgid "Loading package instructions..." msgstr "" -#: src/etc/inc/pkg-utils.inc:738 +#: src/etc/inc/pkg-utils.inc:757 #, php-format msgid "Include %s is missing!" msgstr "" -#: src/etc/inc/pkg-utils.inc:749 +#: src/etc/inc/pkg-utils.inc:768 msgid "Custom commands..." msgstr "" -#: src/etc/inc/pkg-utils.inc:752 +#: src/etc/inc/pkg-utils.inc:771 msgid "Executing custom_php_global_functions()..." msgstr "" -#: src/etc/inc/pkg-utils.inc:757 +#: src/etc/inc/pkg-utils.inc:776 msgid "Executing custom_php_install_command()..." msgstr "" -#: src/etc/inc/pkg-utils.inc:762 +#: src/etc/inc/pkg-utils.inc:781 msgid "Executing custom_php_resync_config_command()..." msgstr "" -#: src/etc/inc/pkg-utils.inc:769 src/etc/inc/pkg-utils.inc:853 +#: src/etc/inc/pkg-utils.inc:788 src/etc/inc/pkg-utils.inc:872 msgid "Menu items... " msgstr "" -#: src/etc/inc/pkg-utils.inc:786 src/etc/inc/pkg-utils.inc:868 +#: src/etc/inc/pkg-utils.inc:805 src/etc/inc/pkg-utils.inc:887 msgid "Services... " msgstr "" -#: src/etc/inc/pkg-utils.inc:803 +#: src/etc/inc/pkg-utils.inc:822 msgid "Loading package configuration... failed!" msgstr "" -#: src/etc/inc/pkg-utils.inc:803 +#: src/etc/inc/pkg-utils.inc:822 msgid "Installation aborted." msgstr "" -#: src/etc/inc/pkg-utils.inc:804 +#: src/etc/inc/pkg-utils.inc:823 msgid "Unable to load package configuration. Installation aborted." msgstr "" -#: src/etc/inc/pkg-utils.inc:818 +#: src/etc/inc/pkg-utils.inc:837 msgid "Writing configuration... " msgstr "" -#: src/etc/inc/pkg-utils.inc:820 +#: src/etc/inc/pkg-utils.inc:839 #, php-format msgid "Successfully installed package: %s." msgstr "" -#: src/etc/inc/pkg-utils.inc:836 +#: src/etc/inc/pkg-utils.inc:855 #, php-format msgid "The %s package is not installed.%sDeletion aborted." msgstr "" -#: src/etc/inc/pkg-utils.inc:842 +#: src/etc/inc/pkg-utils.inc:861 #, php-format msgid "Removing %s package... " msgstr "" -#: src/etc/inc/pkg-utils.inc:843 +#: src/etc/inc/pkg-utils.inc:862 #, php-format msgid "Removing %s components..." msgstr "" -#: src/etc/inc/pkg-utils.inc:896 +#: src/etc/inc/pkg-utils.inc:915 #, php-format msgid "Intermediate config write during package removal for %s." msgstr "" -#: src/etc/inc/pkg-utils.inc:912 +#: src/etc/inc/pkg-utils.inc:931 #, php-format msgid "Include file %s could not be found for inclusion." msgstr "" -#: src/etc/inc/pkg-utils.inc:930 +#: src/etc/inc/pkg-utils.inc:949 msgid "Deinstall commands... " msgstr "" -#: src/etc/inc/pkg-utils.inc:935 +#: src/etc/inc/pkg-utils.inc:954 msgid "Not executing custom deinstall hook because an include is missing." msgstr "" -#: src/etc/inc/pkg-utils.inc:942 +#: src/etc/inc/pkg-utils.inc:961 msgid "Syslog entries... " msgstr "" -#: src/etc/inc/pkg-utils.inc:950 +#: src/etc/inc/pkg-utils.inc:969 msgid "Configuration... " msgstr "" -#: src/etc/inc/pkg-utils.inc:953 +#: src/etc/inc/pkg-utils.inc:972 #, php-format msgid "Removed %s package." msgstr "" -#: src/etc/inc/pkg-utils.inc:981 +#: src/etc/inc/pkg-utils.inc:1000 msgid "" -"Waiting for internet connection to update pkg metadata and finish package " +"Waiting for Internet connection to update pkg metadata and finish package " "reinstallation" msgstr "" -#: src/etc/inc/pkg-utils.inc:1010 +#: src/etc/inc/pkg-utils.inc:1013 src/etc/inc/pkg-utils.inc:1049 msgid "Package reinstall" msgstr "" -#: src/etc/inc/pkg-utils.inc:1011 +#: src/etc/inc/pkg-utils.inc:1014 +msgid "" +"Package reinstall process was ABORTED due to lack of internet connectivity" +msgstr "" + +#: src/etc/inc/pkg-utils.inc:1050 #, php-format msgid "" "Package %s does not exist in current %s version and it has been removed." msgstr "" -#: src/etc/inc/pkg-utils.inc:1037 +#: src/etc/inc/pkg-utils.inc:1071 msgid "Stopping all packages." msgstr "" @@ -3491,43 +3527,43 @@ msgid "Allow access to all pages" msgstr "" #: src/etc/inc/priv.defs.inc:23 -msgid "WebCfg - Status: CARP" +msgid "WebCfg - Crash reporter" msgstr "" #: src/etc/inc/priv.defs.inc:24 -msgid "Allow access to the 'Status: CARP' page." +msgid "Uploads crash reports to pfSense and or deletes crash reports." msgstr "" #: src/etc/inc/priv.defs.inc:29 -msgid "WebCfg - Crash reporter" +msgid "WebCfg - Diagnostics: ARP Table" msgstr "" #: src/etc/inc/priv.defs.inc:30 -msgid "Uploads crash reports to pfSense and or deletes crash reports." +msgid "Allow access to the 'Diagnostics: ARP Table' page." msgstr "" #: src/etc/inc/priv.defs.inc:35 -msgid "WebCfg - Diagnostics: ARP Table" +msgid "WebCfg - Diagnostics: Authentication" msgstr "" #: src/etc/inc/priv.defs.inc:36 -msgid "Allow access to the 'Diagnostics: ARP Table' page." +msgid "Allow access to the 'Diagnostics: Authentication' page." msgstr "" #: src/etc/inc/priv.defs.inc:41 -msgid "WebCfg - Diagnostics: Authentication" +msgid "WebCfg - Diagnostics: Backup & Restore" msgstr "" #: src/etc/inc/priv.defs.inc:42 -msgid "Allow access to the 'Diagnostics: Authentication' page." +msgid "Allow access to the 'Diagnostics: Backup & Restore' page." msgstr "" #: src/etc/inc/priv.defs.inc:47 -msgid "WebCfg - Diagnostics: Backup & Restore" +msgid "WebCfg - Diagnostics: Command" msgstr "" #: src/etc/inc/priv.defs.inc:48 -msgid "Allow access to the 'Diagnostics: Backup & Restore' page." +msgid "Allow access to the 'Diagnostics: Command' page." msgstr "" #: src/etc/inc/priv.defs.inc:53 @@ -3571,1607 +3607,1599 @@ msgid "Allow access to the 'Diagnostics: Show Source Tracking' page." msgstr "" #: src/etc/inc/priv.defs.inc:83 -msgid "WebCfg - Diagnostics: GEOM Mirrors" +msgid "WebCfg - Diagnostics: Edit File" msgstr "" #: src/etc/inc/priv.defs.inc:84 -msgid "Allow access to the 'Diagnostics: GEOM Mirrors' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:89 -msgid "WebCfg - Status: IPsec" -msgstr "" - -#: src/etc/inc/priv.defs.inc:90 -msgid "Allow access to the 'Status: IPsec' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:95 -msgid "WebCfg - Status: IPsec: Leases" -msgstr "" - -#: src/etc/inc/priv.defs.inc:96 -msgid "Allow access to the 'Status: IPsec: Leases' page." +msgid "Allow access to the 'Diagnostics: Edit File' page." msgstr "" -#: src/etc/inc/priv.defs.inc:101 -msgid "WebCfg - Status: IPsec: SADs" +#: src/etc/inc/priv.defs.inc:91 +msgid "WebCfg - Diagnostics: GEOM Mirrors" msgstr "" -#: src/etc/inc/priv.defs.inc:102 -msgid "Allow access to the 'Status: IPsec: SADs' page." +#: src/etc/inc/priv.defs.inc:92 +msgid "Allow access to the 'Diagnostics: GEOM Mirrors' page." msgstr "" -#: src/etc/inc/priv.defs.inc:107 -msgid "WebCfg - Status: IPsec: SPDs" +#: src/etc/inc/priv.defs.inc:97 +msgid "WebCfg - Diagnostics: Halt system" msgstr "" -#: src/etc/inc/priv.defs.inc:108 -msgid "Allow access to the 'Status: IPsec: SPDs' page." +#: src/etc/inc/priv.defs.inc:98 +msgid "Allow access to the 'Diagnostics: Halt system' page." msgstr "" -#: src/etc/inc/priv.defs.inc:113 +#: src/etc/inc/priv.defs.inc:103 msgid "WebCfg - Diagnostics: Limiter Info" msgstr "" -#: src/etc/inc/priv.defs.inc:114 +#: src/etc/inc/priv.defs.inc:104 msgid "Allows access to the 'Diagnostics: Limiter Info' page" msgstr "" -#: src/etc/inc/priv.defs.inc:119 -msgid "WebCfg - Status: Logs: System" -msgstr "" - -#: src/etc/inc/priv.defs.inc:120 -msgid "Allow access to the 'Status: System Logs: General' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:125 -msgid "WebCfg - Status: Logs: Firewall" -msgstr "" - -#: src/etc/inc/priv.defs.inc:126 -msgid "Allow access to the 'Status: Logs: Firewall' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:131 -msgid "WebCfg - Status: System Logs: Firewall (Dynamic View)" -msgstr "" - -#: src/etc/inc/priv.defs.inc:132 -msgid "Allow access to the 'Status: System Logs: Firewall (Dynamic View)' page" -msgstr "" - -#: src/etc/inc/priv.defs.inc:137 -msgid "WebCfg - Status: System Logs: Firewall Log Summary" -msgstr "" - -#: src/etc/inc/priv.defs.inc:138 -msgid "Allow access to the 'Status: System Logs: Firewall Log Summary' page" -msgstr "" - -#: src/etc/inc/priv.defs.inc:143 -msgid "WebCfg - Status: Logs: Settings" -msgstr "" - -#: src/etc/inc/priv.defs.inc:144 -msgid "Allow access to the 'Status: Logs: Settings' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:149 -msgid "WebCfg - Status: Logs: VPN" -msgstr "" - -#: src/etc/inc/priv.defs.inc:150 -msgid "Allow access to the 'Status: Logs: VPN' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:155 +#: src/etc/inc/priv.defs.inc:109 msgid "WebCfg - Diagnostics: NanoBSD" msgstr "" -#: src/etc/inc/priv.defs.inc:156 +#: src/etc/inc/priv.defs.inc:110 msgid "Allow access to the 'Diagnostics: NanoBSD' page." msgstr "" -#: src/etc/inc/priv.defs.inc:161 +#: src/etc/inc/priv.defs.inc:115 msgid "WebCfg - Diagnostics: NDP Table" msgstr "" -#: src/etc/inc/priv.defs.inc:162 +#: src/etc/inc/priv.defs.inc:116 msgid "Allow access to the 'Diagnostics: NDP Table' page." msgstr "" -#: src/etc/inc/priv.defs.inc:167 +#: src/etc/inc/priv.defs.inc:121 msgid "WebCfg - Diagnostics: Packet Capture" msgstr "" -#: src/etc/inc/priv.defs.inc:168 +#: src/etc/inc/priv.defs.inc:122 msgid "Allow access to the 'Diagnostics: Packet Capture' page." msgstr "" -#: src/etc/inc/priv.defs.inc:173 +#: src/etc/inc/priv.defs.inc:127 msgid "WebCfg - Diagnostics: pfInfo" msgstr "" -#: src/etc/inc/priv.defs.inc:174 +#: src/etc/inc/priv.defs.inc:128 msgid "Allows access to the 'Diagnostics: pfInfo' page" msgstr "" -#: src/etc/inc/priv.defs.inc:179 +#: src/etc/inc/priv.defs.inc:133 +msgid "WebCfg - Diagnostics: pfTop" +msgstr "" + +#: src/etc/inc/priv.defs.inc:134 +msgid "Allows access to the 'Diagnostics: pfTop' page" +msgstr "" + +#: src/etc/inc/priv.defs.inc:139 msgid "WebCfg - Diagnostics: Ping" msgstr "" -#: src/etc/inc/priv.defs.inc:180 +#: src/etc/inc/priv.defs.inc:140 msgid "Allow access to the 'Diagnostics: Ping' page." msgstr "" -#: src/etc/inc/priv.defs.inc:185 -msgid "WebCfg - Status: Package logs" +#: src/etc/inc/priv.defs.inc:145 +msgid "WebCfg - Diagnostics: Reboot System" msgstr "" -#: src/etc/inc/priv.defs.inc:186 -msgid "Allow access to the 'Status: Package logs' page." +#: src/etc/inc/priv.defs.inc:146 +msgid "Allow access to the 'Diagnostics: Reboot System' page." msgstr "" -#: src/etc/inc/priv.defs.inc:191 +#: src/etc/inc/priv.defs.inc:151 msgid "WebCfg - Diagnostics: Reset states" msgstr "" -#: src/etc/inc/priv.defs.inc:192 +#: src/etc/inc/priv.defs.inc:152 msgid "Allow access to the 'Diagnostics: Reset states' page." msgstr "" -#: src/etc/inc/priv.defs.inc:197 +#: src/etc/inc/priv.defs.inc:157 msgid "WebCfg - Diagnostics: Routing tables" msgstr "" -#: src/etc/inc/priv.defs.inc:198 +#: src/etc/inc/priv.defs.inc:158 msgid "Allow access to the 'Diagnostics: Routing tables' page." msgstr "" -#: src/etc/inc/priv.defs.inc:203 +#: src/etc/inc/priv.defs.inc:163 msgid "WebCfg - Diagnostics: S.M.A.R.T. Status" msgstr "" -#: src/etc/inc/priv.defs.inc:204 +#: src/etc/inc/priv.defs.inc:164 msgid "Allow access to the 'Diagnostics: S.M.A.R.T. Status' page." msgstr "" -#: src/etc/inc/priv.defs.inc:209 +#: src/etc/inc/priv.defs.inc:169 msgid "WebCfg - Diagnostics: Sockets" msgstr "" -#: src/etc/inc/priv.defs.inc:210 +#: src/etc/inc/priv.defs.inc:170 msgid "Allow access to the 'Diagnostics: Sockets' page." msgstr "" -#: src/etc/inc/priv.defs.inc:215 +#: src/etc/inc/priv.defs.inc:175 msgid "WebCfg - Diagnostics: States Summary" msgstr "" -#: src/etc/inc/priv.defs.inc:216 +#: src/etc/inc/priv.defs.inc:176 msgid "Allow access to the 'Diagnostics: States Summary' page." msgstr "" -#: src/etc/inc/priv.defs.inc:221 +#: src/etc/inc/priv.defs.inc:181 msgid "WebCfg - Diagnostics: System Activity" msgstr "" -#: src/etc/inc/priv.defs.inc:222 +#: src/etc/inc/priv.defs.inc:182 msgid "Allows access to the 'Diagnostics: System Activity' page" msgstr "" -#: src/etc/inc/priv.defs.inc:227 -msgid "WebCfg - Diagnostics: pfTop" -msgstr "" - -#: src/etc/inc/priv.defs.inc:228 -msgid "Allows access to the 'Diagnostics: pfTop' page" -msgstr "" - -#: src/etc/inc/priv.defs.inc:233 +#: src/etc/inc/priv.defs.inc:187 msgid "WebCfg - Diagnostics: pf Table IP addresses" msgstr "" -#: src/etc/inc/priv.defs.inc:234 +#: src/etc/inc/priv.defs.inc:188 msgid "Allow access to the 'Diagnostics: Tables' page." msgstr "" -#: src/etc/inc/priv.defs.inc:239 +#: src/etc/inc/priv.defs.inc:193 msgid "WebCfg - Diagnostics: Test Port" msgstr "" -#: src/etc/inc/priv.defs.inc:240 +#: src/etc/inc/priv.defs.inc:194 msgid "Allow access to the 'Diagnostics: Test Port' page." msgstr "" -#: src/etc/inc/priv.defs.inc:245 +#: src/etc/inc/priv.defs.inc:199 msgid "WebCfg - Diagnostics: Traceroute" msgstr "" -#: src/etc/inc/priv.defs.inc:246 +#: src/etc/inc/priv.defs.inc:200 msgid "Allow access to the 'Diagnostics: Traceroute' page." msgstr "" -#: src/etc/inc/priv.defs.inc:251 +#: src/etc/inc/priv.defs.inc:205 msgid "WebCfg - Firewall: Easy Rule add/status" msgstr "" -#: src/etc/inc/priv.defs.inc:252 +#: src/etc/inc/priv.defs.inc:206 msgid "Allow access to the 'Firewall: Easy Rule' add/status page." msgstr "" -#: src/etc/inc/priv.defs.inc:257 -msgid "WebCfg - Diagnostics: Edit File" -msgstr "" - -#: src/etc/inc/priv.defs.inc:258 -msgid "Allow access to the 'Diagnostics: Edit File' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:265 -msgid "WebCfg - Diagnostics: Command" -msgstr "" - -#: src/etc/inc/priv.defs.inc:266 -msgid "Allow access to the 'Diagnostics: Command' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:271 +#: src/etc/inc/priv.defs.inc:211 msgid "WebCfg - Firewall: Aliases" msgstr "" -#: src/etc/inc/priv.defs.inc:272 +#: src/etc/inc/priv.defs.inc:212 msgid "Allow access to the 'Firewall: Aliases' page." msgstr "" -#: src/etc/inc/priv.defs.inc:277 +#: src/etc/inc/priv.defs.inc:217 msgid "WebCfg - Firewall: Alias: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:278 +#: src/etc/inc/priv.defs.inc:218 msgid "Allow access to the 'Firewall: Alias: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:283 +#: src/etc/inc/priv.defs.inc:223 msgid "WebCfg - Firewall: Alias: Import" msgstr "" -#: src/etc/inc/priv.defs.inc:284 +#: src/etc/inc/priv.defs.inc:224 msgid "Allow access to the 'Firewall: Alias: Import' page." msgstr "" -#: src/etc/inc/priv.defs.inc:289 +#: src/etc/inc/priv.defs.inc:229 msgid "WebCfg - Firewall: NAT: Port Forward" msgstr "" -#: src/etc/inc/priv.defs.inc:290 +#: src/etc/inc/priv.defs.inc:230 msgid "Allow access to the 'Firewall: NAT: Port Forward' page." msgstr "" -#: src/etc/inc/priv.defs.inc:295 +#: src/etc/inc/priv.defs.inc:235 msgid "WebCfg - Firewall: NAT: 1:1" msgstr "" -#: src/etc/inc/priv.defs.inc:296 +#: src/etc/inc/priv.defs.inc:236 msgid "Allow access to the 'Firewall: NAT: 1:1' page." msgstr "" -#: src/etc/inc/priv.defs.inc:301 +#: src/etc/inc/priv.defs.inc:241 msgid "WebCfg - Firewall: NAT: 1:1: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:302 +#: src/etc/inc/priv.defs.inc:242 msgid "Allow access to the 'Firewall: NAT: 1:1: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:307 +#: src/etc/inc/priv.defs.inc:247 msgid "WebCfg - Firewall: NAT: Port Forward: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:308 +#: src/etc/inc/priv.defs.inc:248 msgid "Allow access to the 'Firewall: NAT: Port Forward: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:313 +#: src/etc/inc/priv.defs.inc:253 msgid "WebCfg - Firewall: NAT: NPt" msgstr "" -#: src/etc/inc/priv.defs.inc:314 +#: src/etc/inc/priv.defs.inc:254 msgid "Allow access to the 'Firewall: NAT: NPt' page." msgstr "" -#: src/etc/inc/priv.defs.inc:319 +#: src/etc/inc/priv.defs.inc:259 msgid "WebCfg - Firewall: NAT: NPt: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:320 +#: src/etc/inc/priv.defs.inc:260 msgid "Allow access to the 'Firewall: NAT: NPt: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:325 +#: src/etc/inc/priv.defs.inc:265 msgid "WebCfg - Firewall: NAT: Outbound" msgstr "" -#: src/etc/inc/priv.defs.inc:326 +#: src/etc/inc/priv.defs.inc:266 msgid "Allow access to the 'Firewall: NAT: Outbound' page." msgstr "" -#: src/etc/inc/priv.defs.inc:331 +#: src/etc/inc/priv.defs.inc:271 msgid "WebCfg - Firewall: NAT: Outbound: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:332 +#: src/etc/inc/priv.defs.inc:272 msgid "Allow access to the 'Firewall: NAT: Outbound: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:337 +#: src/etc/inc/priv.defs.inc:277 msgid "WebCfg - Firewall: Rules" msgstr "" -#: src/etc/inc/priv.defs.inc:338 +#: src/etc/inc/priv.defs.inc:278 msgid "Allow access to the 'Firewall: Rules' page." msgstr "" -#: src/etc/inc/priv.defs.inc:343 +#: src/etc/inc/priv.defs.inc:283 msgid "WebCfg - Firewall: Rules: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:344 +#: src/etc/inc/priv.defs.inc:284 msgid "Allow access to the 'Firewall: Rules: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:349 +#: src/etc/inc/priv.defs.inc:289 msgid "WebCfg - Firewall: Schedules" msgstr "" -#: src/etc/inc/priv.defs.inc:350 +#: src/etc/inc/priv.defs.inc:290 msgid "Allow access to the 'Firewall: Schedules' page." msgstr "" -#: src/etc/inc/priv.defs.inc:355 +#: src/etc/inc/priv.defs.inc:295 msgid "WebCfg - Firewall: Schedules: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:356 +#: src/etc/inc/priv.defs.inc:296 msgid "Allow access to the 'Firewall: Schedules: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:361 +#: src/etc/inc/priv.defs.inc:301 msgid "WebCfg - Firewall: Traffic Shaper" msgstr "" -#: src/etc/inc/priv.defs.inc:362 +#: src/etc/inc/priv.defs.inc:302 msgid "Allow access to the 'Firewall: Traffic Shaper' page." msgstr "" -#: src/etc/inc/priv.defs.inc:367 +#: src/etc/inc/priv.defs.inc:307 msgid "WebCfg - Firewall: Traffic Shaper: Queues" msgstr "" -#: src/etc/inc/priv.defs.inc:368 +#: src/etc/inc/priv.defs.inc:308 msgid "Allow access to the 'Firewall: Traffic Shaper: Queues' page." msgstr "" -#: src/etc/inc/priv.defs.inc:373 +#: src/etc/inc/priv.defs.inc:313 msgid "WebCfg - Firewall: Traffic Shaper: Limiters" msgstr "" -#: src/etc/inc/priv.defs.inc:374 +#: src/etc/inc/priv.defs.inc:314 msgid "Allow access to the 'Firewall: Traffic Shaper: Limiters' page." msgstr "" -#: src/etc/inc/priv.defs.inc:379 +#: src/etc/inc/priv.defs.inc:319 msgid "WebCfg - Firewall: Traffic Shaper: Wizard" msgstr "" -#: src/etc/inc/priv.defs.inc:380 +#: src/etc/inc/priv.defs.inc:320 msgid "Allow access to the 'Firewall: Traffic Shaper: Wizard' page." msgstr "" -#: src/etc/inc/priv.defs.inc:385 +#: src/etc/inc/priv.defs.inc:325 msgid "WebCfg - Firewall: Virtual IP Addresses" msgstr "" -#: src/etc/inc/priv.defs.inc:386 +#: src/etc/inc/priv.defs.inc:326 msgid "Allow access to the 'Firewall: Virtual IP Addresses' page." msgstr "" -#: src/etc/inc/priv.defs.inc:391 +#: src/etc/inc/priv.defs.inc:331 msgid "WebCfg - Firewall: Virtual IP Address: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:392 +#: src/etc/inc/priv.defs.inc:332 msgid "Allow access to the 'Firewall: Virtual IP Address: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:397 +#: src/etc/inc/priv.defs.inc:337 msgid "WebCfg - AJAX: Get Service Providers" msgstr "" -#: src/etc/inc/priv.defs.inc:398 +#: src/etc/inc/priv.defs.inc:338 msgid "Allow access to the 'AJAX: Service Providers' page." msgstr "" -#: src/etc/inc/priv.defs.inc:403 +#: src/etc/inc/priv.defs.inc:343 msgid "WebCfg - AJAX: Get Stats" msgstr "" -#: src/etc/inc/priv.defs.inc:404 +#: src/etc/inc/priv.defs.inc:344 msgid "Allow access to the 'AJAX: Get Stats' page." msgstr "" -#: src/etc/inc/priv.defs.inc:409 +#: src/etc/inc/priv.defs.inc:349 msgid "WebCfg - Diagnostics: Interface Traffic" msgstr "" -#: src/etc/inc/priv.defs.inc:410 +#: src/etc/inc/priv.defs.inc:350 msgid "Allow access to the 'Diagnostics: Interface Traffic' page." msgstr "" -#: src/etc/inc/priv.defs.inc:415 +#: src/etc/inc/priv.defs.inc:355 msgid "WebCfg - Diagnostics: CPU Utilization" msgstr "" -#: src/etc/inc/priv.defs.inc:416 +#: src/etc/inc/priv.defs.inc:356 msgid "Allow access to the 'Diagnostics: CPU Utilization' page." msgstr "" -#: src/etc/inc/priv.defs.inc:422 -msgid "WebCfg - Diagnostics: Halt system" -msgstr "" - -#: src/etc/inc/priv.defs.inc:423 -msgid "Allow access to the 'Diagnostics: Halt system' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:428 +#: src/etc/inc/priv.defs.inc:362 msgid "WebCfg - XMLRPC Interface Stats" msgstr "" -#: src/etc/inc/priv.defs.inc:429 +#: src/etc/inc/priv.defs.inc:363 msgid "Allow access to the 'XMLRPC Interface Stats' page." msgstr "" -#: src/etc/inc/priv.defs.inc:434 +#: src/etc/inc/priv.defs.inc:368 msgid "WebCfg - System: Login / Logout / Dashboard" msgstr "" -#: src/etc/inc/priv.defs.inc:435 +#: src/etc/inc/priv.defs.inc:369 msgid "Allow access to the 'System: Login / Logout' page and Dashboard." msgstr "" -#: src/etc/inc/priv.defs.inc:440 +#: src/etc/inc/priv.defs.inc:374 msgid "WebCfg - Interfaces: WAN" msgstr "" -#: src/etc/inc/priv.defs.inc:441 +#: src/etc/inc/priv.defs.inc:375 msgid "Allow access to the 'Interfaces' page." msgstr "" -#: src/etc/inc/priv.defs.inc:446 +#: src/etc/inc/priv.defs.inc:380 msgid "WebCfg - Interfaces: Interface Assignments" msgstr "" -#: src/etc/inc/priv.defs.inc:447 +#: src/etc/inc/priv.defs.inc:381 msgid "Allow access to the 'Interfaces: Interface Assignments' page." msgstr "" -#: src/etc/inc/priv.defs.inc:452 +#: src/etc/inc/priv.defs.inc:386 msgid "WebCfg - Interfaces: Bridge" msgstr "" -#: src/etc/inc/priv.defs.inc:453 +#: src/etc/inc/priv.defs.inc:387 msgid "Allow access to the 'Interfaces: Bridge' page." msgstr "" -#: src/etc/inc/priv.defs.inc:458 +#: src/etc/inc/priv.defs.inc:392 msgid "WebCfg - Interfaces: Bridge edit" msgstr "" -#: src/etc/inc/priv.defs.inc:459 +#: src/etc/inc/priv.defs.inc:393 msgid "Allow access to the 'Interfaces: Bridge : Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:464 +#: src/etc/inc/priv.defs.inc:398 msgid "WebCfg - Interfaces: GIF" msgstr "" -#: src/etc/inc/priv.defs.inc:465 +#: src/etc/inc/priv.defs.inc:399 msgid "Allow access to the 'Interfaces: GIF' page." msgstr "" -#: src/etc/inc/priv.defs.inc:470 +#: src/etc/inc/priv.defs.inc:404 msgid "WebCfg - Interfaces: GIF: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:471 +#: src/etc/inc/priv.defs.inc:405 msgid "Allow access to the 'Interfaces: GIF: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:476 +#: src/etc/inc/priv.defs.inc:410 msgid "WebCfg - Interfaces: GRE" msgstr "" -#: src/etc/inc/priv.defs.inc:477 +#: src/etc/inc/priv.defs.inc:411 msgid "Allow access to the 'Interfaces: GRE' page." msgstr "" -#: src/etc/inc/priv.defs.inc:482 +#: src/etc/inc/priv.defs.inc:416 msgid "WebCfg - Interfaces: GRE: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:483 +#: src/etc/inc/priv.defs.inc:417 msgid "Allow access to the 'Interfaces: GRE: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:488 +#: src/etc/inc/priv.defs.inc:422 msgid "WebCfg - Interfaces: Groups" msgstr "" -#: src/etc/inc/priv.defs.inc:489 +#: src/etc/inc/priv.defs.inc:423 msgid "Create interface groups" msgstr "" -#: src/etc/inc/priv.defs.inc:494 +#: src/etc/inc/priv.defs.inc:428 msgid "WebCfg - Interfaces: Groups: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:495 +#: src/etc/inc/priv.defs.inc:429 msgid "Allow access to the 'Interfaces: Groups: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:500 +#: src/etc/inc/priv.defs.inc:434 msgid "WebCfg - Interfaces: LAGG:" msgstr "" -#: src/etc/inc/priv.defs.inc:501 +#: src/etc/inc/priv.defs.inc:435 msgid "Allow access to the 'Interfaces: LAGG' page." msgstr "" -#: src/etc/inc/priv.defs.inc:506 +#: src/etc/inc/priv.defs.inc:440 msgid "WebCfg - Interfaces: LAGG: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:507 +#: src/etc/inc/priv.defs.inc:441 msgid "Allow access to the 'Interfaces: LAGG: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:512 +#: src/etc/inc/priv.defs.inc:446 msgid "WebCfg - Interfaces: PPPs" msgstr "" -#: src/etc/inc/priv.defs.inc:513 +#: src/etc/inc/priv.defs.inc:447 msgid "Allow access to the 'Interfaces: PPPs' page." msgstr "" -#: src/etc/inc/priv.defs.inc:518 +#: src/etc/inc/priv.defs.inc:452 msgid "WebCfg - Interfaces: PPPs: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:519 +#: src/etc/inc/priv.defs.inc:453 msgid "Allow access to the 'Interfaces: PPPs: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:524 +#: src/etc/inc/priv.defs.inc:458 msgid "WebCfg - Interfaces: QinQ" msgstr "" -#: src/etc/inc/priv.defs.inc:525 +#: src/etc/inc/priv.defs.inc:459 msgid "Allow access to the 'Interfaces: QinQ' page." msgstr "" -#: src/etc/inc/priv.defs.inc:530 +#: src/etc/inc/priv.defs.inc:464 msgid "WebCfg - Interfaces: QinQ: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:531 +#: src/etc/inc/priv.defs.inc:465 msgid "Allow access to 'Interfaces: QinQ: Edit' page" msgstr "" -#: src/etc/inc/priv.defs.inc:536 +#: src/etc/inc/priv.defs.inc:470 msgid "WebCfg - Interfaces: VLAN" msgstr "" -#: src/etc/inc/priv.defs.inc:537 +#: src/etc/inc/priv.defs.inc:471 msgid "Allow access to the 'Interfaces: VLAN' page." msgstr "" -#: src/etc/inc/priv.defs.inc:542 +#: src/etc/inc/priv.defs.inc:476 msgid "WebCfg - Interfaces: VLAN: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:543 +#: src/etc/inc/priv.defs.inc:477 msgid "Allow access to the 'Interfaces: VLAN: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:548 +#: src/etc/inc/priv.defs.inc:482 msgid "WebCfg - Interfaces: Wireless" msgstr "" -#: src/etc/inc/priv.defs.inc:549 +#: src/etc/inc/priv.defs.inc:483 msgid "Allow access to the 'Interfaces: Wireless' page." msgstr "" -#: src/etc/inc/priv.defs.inc:554 +#: src/etc/inc/priv.defs.inc:488 msgid "WebCfg - Interfaces: Wireless: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:555 +#: src/etc/inc/priv.defs.inc:489 msgid "Allow access to the 'Interfaces: Wireless: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:560 +#: src/etc/inc/priv.defs.inc:494 msgid "WebCfg - System: License" msgstr "" -#: src/etc/inc/priv.defs.inc:561 +#: src/etc/inc/priv.defs.inc:495 msgid "Allow access to the 'System: License' page." msgstr "" -#: src/etc/inc/priv.defs.inc:566 +#: src/etc/inc/priv.defs.inc:500 msgid "WebCfg - Services: Load Balancer: Monitors" msgstr "" -#: src/etc/inc/priv.defs.inc:567 +#: src/etc/inc/priv.defs.inc:501 msgid "Allow access to the 'Services: Load Balancer: Monitors' page." msgstr "" -#: src/etc/inc/priv.defs.inc:572 +#: src/etc/inc/priv.defs.inc:506 msgid "WebCfg - Services: Load Balancer: Monitor: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:573 +#: src/etc/inc/priv.defs.inc:507 msgid "Allow access to the 'Services: Load Balancer: Monitor: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:578 +#: src/etc/inc/priv.defs.inc:512 msgid "WebCfg - Load Balancer: Pool" msgstr "" -#: src/etc/inc/priv.defs.inc:579 +#: src/etc/inc/priv.defs.inc:513 msgid "Allow access to the 'Load Balancer: Pool' page." msgstr "" -#: src/etc/inc/priv.defs.inc:584 +#: src/etc/inc/priv.defs.inc:518 msgid "WebCfg - Load Balancer: Pool: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:585 +#: src/etc/inc/priv.defs.inc:519 msgid "Allow access to the 'Load Balancer: Pool: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:590 +#: src/etc/inc/priv.defs.inc:524 msgid "WebCfg - Services: Load Balancer: Settings" msgstr "" -#: src/etc/inc/priv.defs.inc:591 +#: src/etc/inc/priv.defs.inc:525 msgid "Allow access to the 'Settings: Load Balancer: Settings' page." msgstr "" -#: src/etc/inc/priv.defs.inc:596 +#: src/etc/inc/priv.defs.inc:530 msgid "WebCfg - Services: Load Balancer: Virtual Servers" msgstr "" -#: src/etc/inc/priv.defs.inc:597 +#: src/etc/inc/priv.defs.inc:531 msgid "Allow access to the 'Services: Load Balancer: Virtual Servers' page." msgstr "" -#: src/etc/inc/priv.defs.inc:602 +#: src/etc/inc/priv.defs.inc:536 msgid "WebCfg - Load Balancer: Virtual Server: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:603 +#: src/etc/inc/priv.defs.inc:537 msgid "Allow access to the 'Load Balancer: Virtual Server: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:608 +#: src/etc/inc/priv.defs.inc:542 msgid "WebCfg - Package: Settings" msgstr "" -#: src/etc/inc/priv.defs.inc:609 +#: src/etc/inc/priv.defs.inc:543 msgid "Allow access to the 'Package: Settings' page." msgstr "" -#: src/etc/inc/priv.defs.inc:614 +#: src/etc/inc/priv.defs.inc:548 msgid "WebCfg - Package: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:615 +#: src/etc/inc/priv.defs.inc:549 msgid "Allow access to the 'Package: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:620 +#: src/etc/inc/priv.defs.inc:554 msgid "WebCfg - System: Package Manager" msgstr "" -#: src/etc/inc/priv.defs.inc:621 +#: src/etc/inc/priv.defs.inc:555 msgid "Allow access to the 'System: Package Manager' page." msgstr "" -#: src/etc/inc/priv.defs.inc:626 +#: src/etc/inc/priv.defs.inc:560 msgid "WebCfg - System: Package Manager: Install Package" msgstr "" -#: src/etc/inc/priv.defs.inc:627 +#: src/etc/inc/priv.defs.inc:561 msgid "Allow access to the 'System: Package Manager: Install Package' page." msgstr "" -#: src/etc/inc/priv.defs.inc:632 +#: src/etc/inc/priv.defs.inc:566 msgid "WebCfg - System: Package Manager: Installed" msgstr "" -#: src/etc/inc/priv.defs.inc:633 +#: src/etc/inc/priv.defs.inc:567 msgid "Allow access to the 'System: Package Manager: Installed' page." msgstr "" -#: src/etc/inc/priv.defs.inc:638 -msgid "WebCfg - Diagnostics: Reboot System" -msgstr "" - -#: src/etc/inc/priv.defs.inc:639 -msgid "Allow access to the 'Diagnostics: Reboot System' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:644 +#: src/etc/inc/priv.defs.inc:572 msgid "WebCfg - Diagnostics: Restart Web Server Daemon" msgstr "" -#: src/etc/inc/priv.defs.inc:645 +#: src/etc/inc/priv.defs.inc:573 msgid "Allow access to the 'Diagnostics: Restart Web Server Daemon' page." msgstr "" -#: src/etc/inc/priv.defs.inc:650 +#: src/etc/inc/priv.defs.inc:578 msgid "WebCfg - Services: Captive portal" msgstr "" -#: src/etc/inc/priv.defs.inc:651 +#: src/etc/inc/priv.defs.inc:579 msgid "Allow access to the 'Services: Captive portal' page." msgstr "" -#: src/etc/inc/priv.defs.inc:656 +#: src/etc/inc/priv.defs.inc:584 msgid "WebCfg - Services: Captive portal: File Manager" msgstr "" -#: src/etc/inc/priv.defs.inc:657 +#: src/etc/inc/priv.defs.inc:585 msgid "Allow access to the 'Services: Captive portal: File Manager' page." msgstr "" -#: src/etc/inc/priv.defs.inc:662 +#: src/etc/inc/priv.defs.inc:590 msgid "WebCfg - Services: Captive portal: Allowed Hostnames" msgstr "" -#: src/etc/inc/priv.defs.inc:663 +#: src/etc/inc/priv.defs.inc:591 msgid "Allow access to the 'Services: Captive portal: Allowed Hostnames' page." msgstr "" -#: src/etc/inc/priv.defs.inc:668 +#: src/etc/inc/priv.defs.inc:596 msgid "WebCfg - Services: Captive portal: Edit Allowed Hostnames" msgstr "" -#: src/etc/inc/priv.defs.inc:669 +#: src/etc/inc/priv.defs.inc:597 msgid "" "Allow access to the 'Services: Captive portal: Edit Allowed Hostnames' page." msgstr "" -#: src/etc/inc/priv.defs.inc:674 +#: src/etc/inc/priv.defs.inc:602 msgid "WebCfg - Services: Captive portal: Allowed IPs" msgstr "" -#: src/etc/inc/priv.defs.inc:675 +#: src/etc/inc/priv.defs.inc:603 msgid "Allow access to the 'Services: Captive portal: Allowed IPs' page." msgstr "" -#: src/etc/inc/priv.defs.inc:680 +#: src/etc/inc/priv.defs.inc:608 msgid "WebCfg - Services: Captive portal: Edit Allowed IPs" msgstr "" -#: src/etc/inc/priv.defs.inc:681 +#: src/etc/inc/priv.defs.inc:609 msgid "Allow access to the 'Services: Captive portal: Edit Allowed IPs' page." msgstr "" -#: src/etc/inc/priv.defs.inc:686 +#: src/etc/inc/priv.defs.inc:614 msgid "WebCfg - Services: Captive portal: Mac Addresses" msgstr "" -#: src/etc/inc/priv.defs.inc:687 +#: src/etc/inc/priv.defs.inc:615 msgid "Allow access to the 'Services: Captive portal: Mac Addresses' page." msgstr "" -#: src/etc/inc/priv.defs.inc:692 +#: src/etc/inc/priv.defs.inc:620 msgid "WebCfg - Services: Captive portal: Edit MAC Addresses" msgstr "" -#: src/etc/inc/priv.defs.inc:693 +#: src/etc/inc/priv.defs.inc:621 msgid "" "Allow access to the 'Services: Captive portal: Edit MAC Addresses' page." msgstr "" -#: src/etc/inc/priv.defs.inc:698 +#: src/etc/inc/priv.defs.inc:626 msgid "WebCfg - Services: Captive portal Vouchers" msgstr "" -#: src/etc/inc/priv.defs.inc:699 +#: src/etc/inc/priv.defs.inc:627 msgid "Allow access to the 'Services: Captive portal Vouchers' page." msgstr "" -#: src/etc/inc/priv.defs.inc:704 +#: src/etc/inc/priv.defs.inc:632 msgid "WebCfg - Services: Captive portal Voucher Rolls" msgstr "" -#: src/etc/inc/priv.defs.inc:705 +#: src/etc/inc/priv.defs.inc:633 msgid "Allow access to the 'Services: Captive portal Edit Voucher Rolls' page." msgstr "" -#: src/etc/inc/priv.defs.inc:710 +#: src/etc/inc/priv.defs.inc:638 msgid "WebCfg - Services: Captive portal Zones" msgstr "" -#: src/etc/inc/priv.defs.inc:711 +#: src/etc/inc/priv.defs.inc:639 msgid "Allow access to the 'Services: Captive portal Zones' page." msgstr "" -#: src/etc/inc/priv.defs.inc:716 +#: src/etc/inc/priv.defs.inc:644 msgid "WebCfg - Services: Captive portal: Edit Zones" msgstr "" -#: src/etc/inc/priv.defs.inc:717 +#: src/etc/inc/priv.defs.inc:645 msgid "Allow access to the 'Services: Captive portal: Edit Zones' page." msgstr "" -#: src/etc/inc/priv.defs.inc:722 +#: src/etc/inc/priv.defs.inc:650 msgid "WebCfg - Services: DHCP Server" msgstr "" -#: src/etc/inc/priv.defs.inc:723 +#: src/etc/inc/priv.defs.inc:651 msgid "Allow access to the 'Services: DHCP Server' page." msgstr "" -#: src/etc/inc/priv.defs.inc:728 -msgid "WebCfg - Services: DHCP Server: Edit Static Mapping" +#: src/etc/inc/priv.defs.inc:656 +msgid "WebCfg - Services: DHCP Server: Edit static mapping" msgstr "" -#: src/etc/inc/priv.defs.inc:729 -msgid "Allow access to the 'Services: DHCP Server: Edit Static Mapping' page." +#: src/etc/inc/priv.defs.inc:657 +msgid "Allow access to the 'Services: DHCP Server: Edit static mapping' page." msgstr "" -#: src/etc/inc/priv.defs.inc:734 +#: src/etc/inc/priv.defs.inc:662 msgid "WebCfg - Services: DHCP Relay" msgstr "" -#: src/etc/inc/priv.defs.inc:735 +#: src/etc/inc/priv.defs.inc:663 msgid "Allow access to the 'Services: DHCP Relay' page." msgstr "" -#: src/etc/inc/priv.defs.inc:740 +#: src/etc/inc/priv.defs.inc:668 msgid "WebCfg - Services: DHCPv6 server" msgstr "" -#: src/etc/inc/priv.defs.inc:741 +#: src/etc/inc/priv.defs.inc:669 msgid "Allow access to the 'Services: DHCPv6 server' page." msgstr "" -#: src/etc/inc/priv.defs.inc:746 -msgid "WebCfg - Services: DHCPv6 Server: Edit Static Mapping" +#: src/etc/inc/priv.defs.inc:674 +msgid "WebCfg - Services: DHCPv6 Server: Edit static mapping" msgstr "" -#: src/etc/inc/priv.defs.inc:747 +#: src/etc/inc/priv.defs.inc:675 msgid "" -"Allow access to the 'Services: DHCPv6 Server : Edit Static Mapping' page." +"Allow access to the 'Services: DHCPv6 Server : Edit static mapping' page." msgstr "" -#: src/etc/inc/priv.defs.inc:752 +#: src/etc/inc/priv.defs.inc:680 msgid "WebCfg - Services: DHCPv6 Relay" msgstr "" -#: src/etc/inc/priv.defs.inc:753 +#: src/etc/inc/priv.defs.inc:681 msgid "Allow access to the 'Services: DHCPv6 Relay' page." msgstr "" -#: src/etc/inc/priv.defs.inc:758 +#: src/etc/inc/priv.defs.inc:686 msgid "WebCfg - Services: DNS Forwarder" msgstr "" -#: src/etc/inc/priv.defs.inc:759 +#: src/etc/inc/priv.defs.inc:687 msgid "Allow access to the 'Services: DNS Forwarder' page." msgstr "" -#: src/etc/inc/priv.defs.inc:764 +#: src/etc/inc/priv.defs.inc:692 msgid "WebCfg - Services: DNS Forwarder: Edit Domain Override" msgstr "" -#: src/etc/inc/priv.defs.inc:765 +#: src/etc/inc/priv.defs.inc:693 msgid "" "Allow access to the 'Services: DNS Forwarder: Edit Domain Override' page." msgstr "" -#: src/etc/inc/priv.defs.inc:770 +#: src/etc/inc/priv.defs.inc:698 msgid "WebCfg - Services: DNS Forwarder: Edit host" msgstr "" -#: src/etc/inc/priv.defs.inc:771 +#: src/etc/inc/priv.defs.inc:699 msgid "Allow access to the 'Services: DNS Forwarder: Edit host' page." msgstr "" -#: src/etc/inc/priv.defs.inc:776 +#: src/etc/inc/priv.defs.inc:704 msgid "WebCfg - Services: Dynamic DNS clients" msgstr "" -#: src/etc/inc/priv.defs.inc:777 +#: src/etc/inc/priv.defs.inc:705 msgid "Allow access to the 'Services: Dynamic DNS clients' page." msgstr "" -#: src/etc/inc/priv.defs.inc:782 +#: src/etc/inc/priv.defs.inc:710 msgid "WebCfg - Services: Dynamic DNS client" msgstr "" -#: src/etc/inc/priv.defs.inc:783 +#: src/etc/inc/priv.defs.inc:711 msgid "Allow access to the 'Services: Dynamic DNS client' page." msgstr "" -#: src/etc/inc/priv.defs.inc:788 +#: src/etc/inc/priv.defs.inc:716 msgid "WebCfg - Services: IGMP Proxy" msgstr "" -#: src/etc/inc/priv.defs.inc:789 +#: src/etc/inc/priv.defs.inc:717 msgid "Allow access to the 'Services: IGMP Proxy' page." msgstr "" -#: src/etc/inc/priv.defs.inc:794 +#: src/etc/inc/priv.defs.inc:722 msgid "WebCfg - Services: IGMP Proxy: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:795 +#: src/etc/inc/priv.defs.inc:723 msgid "Allow access to the 'Services: IGMP Proxy: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:800 +#: src/etc/inc/priv.defs.inc:728 msgid "WebCfg - Services: NTP Settings" msgstr "" -#: src/etc/inc/priv.defs.inc:801 +#: src/etc/inc/priv.defs.inc:729 msgid "Allow access to the 'Services: NTP Settings' page." msgstr "" -#: src/etc/inc/priv.defs.inc:806 +#: src/etc/inc/priv.defs.inc:734 +msgid "WebCfg - Services: NTP ACL Settings" +msgstr "" + +#: src/etc/inc/priv.defs.inc:735 +msgid "Allow access to the 'Services: NTP ACL Settings' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:740 msgid "WebCfg - Services: NTP Serial GPS" msgstr "" -#: src/etc/inc/priv.defs.inc:807 +#: src/etc/inc/priv.defs.inc:741 msgid "Allow access to the 'Services: NTP Serial GPS' page." msgstr "" -#: src/etc/inc/priv.defs.inc:812 +#: src/etc/inc/priv.defs.inc:746 msgid "WebCfg - Services: NTP PPS" msgstr "" -#: src/etc/inc/priv.defs.inc:813 +#: src/etc/inc/priv.defs.inc:747 msgid "Allow access to the 'Services: NTP PPS' page." msgstr "" -#: src/etc/inc/priv.defs.inc:818 +#: src/etc/inc/priv.defs.inc:752 +msgid "WebCfg - Services: PPPoE Server" +msgstr "" + +#: src/etc/inc/priv.defs.inc:753 +msgid "Allow access to the 'Services: PPPoE Server' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:758 +msgid "WebCfg - Services: PPPoE Server: Edit" +msgstr "" + +#: src/etc/inc/priv.defs.inc:759 +msgid "Allow access to the 'Services: PPPoE Server: Edit' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:764 msgid "WebCfg - Services: RFC 2136 Clients" msgstr "" -#: src/etc/inc/priv.defs.inc:819 +#: src/etc/inc/priv.defs.inc:765 msgid "Allow access to the 'Services: RFC 2136 Clients' page." msgstr "" -#: src/etc/inc/priv.defs.inc:824 +#: src/etc/inc/priv.defs.inc:770 msgid "WebCfg - Services: RFC 2136 Client: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:825 +#: src/etc/inc/priv.defs.inc:771 msgid "Allow access to the 'Services: RFC 2136 Client: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:830 +#: src/etc/inc/priv.defs.inc:776 msgid "WebCfg - Services: Router Advertisements" msgstr "" -#: src/etc/inc/priv.defs.inc:831 +#: src/etc/inc/priv.defs.inc:777 msgid "Allow access to the 'Services: Router Advertisements' page." msgstr "" -#: src/etc/inc/priv.defs.inc:836 +#: src/etc/inc/priv.defs.inc:782 msgid "WebCfg - Services: SNMP" msgstr "" -#: src/etc/inc/priv.defs.inc:837 +#: src/etc/inc/priv.defs.inc:783 msgid "Allow access to the 'Services: SNMP' page." msgstr "" -#: src/etc/inc/priv.defs.inc:842 +#: src/etc/inc/priv.defs.inc:788 msgid "WebCfg - Services: DNS Resolver" msgstr "" -#: src/etc/inc/priv.defs.inc:843 +#: src/etc/inc/priv.defs.inc:789 msgid "Allow access to the 'Services: DNS Resolver' page." msgstr "" -#: src/etc/inc/priv.defs.inc:848 +#: src/etc/inc/priv.defs.inc:794 msgid "WebCfg - Services: DNS Resolver: Access Lists" msgstr "" -#: src/etc/inc/priv.defs.inc:849 +#: src/etc/inc/priv.defs.inc:795 msgid "Allow access to the 'Services: DNS Resolver: Access Lists' page." msgstr "" -#: src/etc/inc/priv.defs.inc:854 +#: src/etc/inc/priv.defs.inc:800 msgid "WebCfg - Services: DNS Resolver: Advanced" msgstr "" -#: src/etc/inc/priv.defs.inc:855 +#: src/etc/inc/priv.defs.inc:801 msgid "Allow access to the 'Services: DNS Resolver: Advanced' page." msgstr "" -#: src/etc/inc/priv.defs.inc:860 +#: src/etc/inc/priv.defs.inc:806 msgid "WebCfg - Services: DNS Resolver: Edit Domain Override" msgstr "" -#: src/etc/inc/priv.defs.inc:861 +#: src/etc/inc/priv.defs.inc:807 msgid "" "Allow access to the 'Services: DNS Resolver: Edit Domain Override' page." msgstr "" -#: src/etc/inc/priv.defs.inc:866 +#: src/etc/inc/priv.defs.inc:812 msgid "WebCfg - Services: DNS Resolver: Edit host" msgstr "" -#: src/etc/inc/priv.defs.inc:867 +#: src/etc/inc/priv.defs.inc:813 msgid "Allow access to the 'Services: DNS Resolver: Edit host' page." msgstr "" -#: src/etc/inc/priv.defs.inc:872 +#: src/etc/inc/priv.defs.inc:818 msgid "WebCfg - Services: Wake-on-LAN" msgstr "" -#: src/etc/inc/priv.defs.inc:873 +#: src/etc/inc/priv.defs.inc:819 msgid "Allow access to the 'Services: Wake-on-LAN' page." msgstr "" -#: src/etc/inc/priv.defs.inc:878 +#: src/etc/inc/priv.defs.inc:824 msgid "WebCfg - Services: Wake-on-LAN: Edit" msgstr "" -#: src/etc/inc/priv.defs.inc:879 +#: src/etc/inc/priv.defs.inc:825 msgid "Allow access to the 'Services: Wake-on-LAN: Edit' page." msgstr "" -#: src/etc/inc/priv.defs.inc:884 +#: src/etc/inc/priv.defs.inc:830 msgid "WebCfg - Hidden: Detailed Status" msgstr "" -#: src/etc/inc/priv.defs.inc:885 +#: src/etc/inc/priv.defs.inc:831 msgid "Allow access to the 'Hidden: Detailed Status' page." msgstr "" -#: src/etc/inc/priv.defs.inc:890 +#: src/etc/inc/priv.defs.inc:836 msgid "WebCfg - Status: Captive portal" msgstr "" -#: src/etc/inc/priv.defs.inc:891 +#: src/etc/inc/priv.defs.inc:837 msgid "Allow access to the 'Status: Captive portal' page." msgstr "" -#: src/etc/inc/priv.defs.inc:896 +#: src/etc/inc/priv.defs.inc:842 msgid "WebCfg - Status: Captive Portal: Expire Vouchers" msgstr "" -#: src/etc/inc/priv.defs.inc:897 +#: src/etc/inc/priv.defs.inc:843 msgid "Allow access to the 'Status: Captive Portal: Expire Vouchers' page." msgstr "" -#: src/etc/inc/priv.defs.inc:902 +#: src/etc/inc/priv.defs.inc:848 msgid "WebCfg - Status: Captive Portal: Test Vouchers" msgstr "" -#: src/etc/inc/priv.defs.inc:903 +#: src/etc/inc/priv.defs.inc:849 msgid "Allow access to the 'Status: Captive Portal: Test Vouchers' page." msgstr "" -#: src/etc/inc/priv.defs.inc:908 +#: src/etc/inc/priv.defs.inc:854 msgid "WebCfg - Status: Captive portal Voucher Rolls" msgstr "" -#: src/etc/inc/priv.defs.inc:909 +#: src/etc/inc/priv.defs.inc:855 msgid "Allow access to the 'Status: Captive portal Voucher Rolls' page." msgstr "" -#: src/etc/inc/priv.defs.inc:914 +#: src/etc/inc/priv.defs.inc:860 msgid "WebCfg - Status: Captive portal Vouchers" msgstr "" -#: src/etc/inc/priv.defs.inc:915 +#: src/etc/inc/priv.defs.inc:861 msgid "Allow access to the 'Status: Captive portal Vouchers' page." msgstr "" -#: src/etc/inc/priv.defs.inc:920 +#: src/etc/inc/priv.defs.inc:866 +msgid "WebCfg - Status: CARP" +msgstr "" + +#: src/etc/inc/priv.defs.inc:867 +msgid "Allow access to the 'Status: CARP' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:872 msgid "WebCfg - Status: DHCP leases" msgstr "" -#: src/etc/inc/priv.defs.inc:921 +#: src/etc/inc/priv.defs.inc:873 msgid "Allow access to the 'Status: DHCP leases' page." msgstr "" -#: src/etc/inc/priv.defs.inc:926 +#: src/etc/inc/priv.defs.inc:878 msgid "WebCfg - Status: DHCPv6 leases" msgstr "" -#: src/etc/inc/priv.defs.inc:927 +#: src/etc/inc/priv.defs.inc:879 msgid "Allow access to the 'Status: DHCPv6 leases' page." msgstr "" -#: src/etc/inc/priv.defs.inc:932 +#: src/etc/inc/priv.defs.inc:884 msgid "WebCfg - Status: Filter Reload Status" msgstr "" -#: src/etc/inc/priv.defs.inc:933 +#: src/etc/inc/priv.defs.inc:885 msgid "Allow access to the 'Status: Filter Reload Status' page." msgstr "" -#: src/etc/inc/priv.defs.inc:938 +#: src/etc/inc/priv.defs.inc:890 msgid "WebCfg - Status: Gateway Groups" msgstr "" -#: src/etc/inc/priv.defs.inc:939 +#: src/etc/inc/priv.defs.inc:891 msgid "Allow access to the 'Status: Gateway Groups' page." msgstr "" -#: src/etc/inc/priv.defs.inc:944 +#: src/etc/inc/priv.defs.inc:896 msgid "WebCfg - Status: Gateways" msgstr "" -#: src/etc/inc/priv.defs.inc:945 +#: src/etc/inc/priv.defs.inc:897 msgid "Allow access to the 'Status: Gateways' page." msgstr "" -#: src/etc/inc/priv.defs.inc:950 +#: src/etc/inc/priv.defs.inc:902 msgid "WebCfg - Status: Traffic Graph" msgstr "" -#: src/etc/inc/priv.defs.inc:951 +#: src/etc/inc/priv.defs.inc:903 msgid "Allow access to the 'Status: Traffic Graph' page." msgstr "" -#: src/etc/inc/priv.defs.inc:959 +#: src/etc/inc/priv.defs.inc:911 msgid "WebCfg - Status: CPU load" msgstr "" -#: src/etc/inc/priv.defs.inc:960 +#: src/etc/inc/priv.defs.inc:912 msgid "Allow access to the 'Status: CPU load' page." msgstr "" -#: src/etc/inc/priv.defs.inc:965 +#: src/etc/inc/priv.defs.inc:917 msgid "WebCfg - Status: Interfaces" msgstr "" -#: src/etc/inc/priv.defs.inc:966 +#: src/etc/inc/priv.defs.inc:918 msgid "Allow access to the 'Status: Interfaces' page." msgstr "" -#: src/etc/inc/priv.defs.inc:971 +#: src/etc/inc/priv.defs.inc:923 +msgid "WebCfg - Status: IPsec" +msgstr "" + +#: src/etc/inc/priv.defs.inc:924 +msgid "Allow access to the 'Status: IPsec' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:929 +msgid "WebCfg - Status: IPsec: Leases" +msgstr "" + +#: src/etc/inc/priv.defs.inc:930 +msgid "Allow access to the 'Status: IPsec: Leases' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:935 +msgid "WebCfg - Status: IPsec: SADs" +msgstr "" + +#: src/etc/inc/priv.defs.inc:936 +msgid "Allow access to the 'Status: IPsec: SADs' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:941 +msgid "WebCfg - Status: IPsec: SPD" +msgstr "" + +#: src/etc/inc/priv.defs.inc:942 +msgid "Allow access to the 'Status: IPsec: SPD' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:947 msgid "WebCfg - Status: Load Balancer: Pool" msgstr "" -#: src/etc/inc/priv.defs.inc:972 +#: src/etc/inc/priv.defs.inc:948 msgid "Allow access to the 'Status: Load Balancer: Pool' page." msgstr "" -#: src/etc/inc/priv.defs.inc:977 +#: src/etc/inc/priv.defs.inc:953 msgid "WebCfg - Status: Load Balancer: Virtual Server" msgstr "" -#: src/etc/inc/priv.defs.inc:978 +#: src/etc/inc/priv.defs.inc:954 msgid "Allow access to the 'Status: Load Balancer: Virtual Server' page." msgstr "" +#: src/etc/inc/priv.defs.inc:959 +msgid "WebCfg - Status: Logs: System" +msgstr "" + +#: src/etc/inc/priv.defs.inc:960 +msgid "Allow access to the 'Status: System Logs: General' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:965 +msgid "WebCfg - Status: Logs: Firewall" +msgstr "" + +#: src/etc/inc/priv.defs.inc:966 +msgid "Allow access to the 'Status: Logs: Firewall' page." +msgstr "" + +#: src/etc/inc/priv.defs.inc:971 +msgid "WebCfg - Status: System Logs: Firewall (Dynamic View)" +msgstr "" + +#: src/etc/inc/priv.defs.inc:972 +msgid "Allow access to the 'Status: System Logs: Firewall (Dynamic View)' page" +msgstr "" + +#: src/etc/inc/priv.defs.inc:977 +msgid "WebCfg - Status: System Logs: Firewall Log Summary" +msgstr "" + +#: src/etc/inc/priv.defs.inc:978 +msgid "Allow access to the 'Status: System Logs: Firewall Log Summary' page" +msgstr "" + #: src/etc/inc/priv.defs.inc:983 -msgid "WebCfg - Status: NTP" +msgid "WebCfg - Status: Logs: Settings" msgstr "" #: src/etc/inc/priv.defs.inc:984 -msgid "Allow access to the 'Status: NTP' page." +msgid "Allow access to the 'Status: Logs: Settings' page." msgstr "" #: src/etc/inc/priv.defs.inc:989 -msgid "WebCfg - Status: OpenVPN" +msgid "WebCfg - Status: Logs: VPN" msgstr "" #: src/etc/inc/priv.defs.inc:990 -msgid "Allow access to the 'Status: OpenVPN' page." +msgid "Allow access to the 'Status: Logs: VPN' page." msgstr "" #: src/etc/inc/priv.defs.inc:995 -msgid "WebCfg - Status: Traffic shaper: Queues" +msgid "WebCfg - Status: NTP" msgstr "" #: src/etc/inc/priv.defs.inc:996 -msgid "Allow access to the 'Status: Traffic shaper: Queues' page." +msgid "Allow access to the 'Status: NTP' page." msgstr "" #: src/etc/inc/priv.defs.inc:1001 -msgid "WebCfg - Status: Services" +msgid "WebCfg - Status: OpenVPN" msgstr "" #: src/etc/inc/priv.defs.inc:1002 -msgid "Allow access to the 'Status: Services' page." +msgid "Allow access to the 'Status: OpenVPN' page." msgstr "" #: src/etc/inc/priv.defs.inc:1007 -msgid "WebCfg - Status: UPnP Status" +msgid "WebCfg - Status: Package logs" msgstr "" #: src/etc/inc/priv.defs.inc:1008 -msgid "Allow access to the 'Status: UPnP Status' page." +msgid "Allow access to the 'Status: Package logs' page." msgstr "" #: src/etc/inc/priv.defs.inc:1013 -msgid "WebCfg - Status: Wireless" +msgid "WebCfg - Status: Traffic shaper: Queues" msgstr "" #: src/etc/inc/priv.defs.inc:1014 -msgid "Allow access to the 'Status: Wireless' page." +msgid "Allow access to the 'Status: Traffic shaper: Queues' page." msgstr "" #: src/etc/inc/priv.defs.inc:1019 -msgid "WebCfg - System: General Setup" +msgid "WebCfg - Status: Services" msgstr "" #: src/etc/inc/priv.defs.inc:1020 -msgid "Allow access to the 'System: General Setup' page." +msgid "Allow access to the 'Status: Services' page." msgstr "" #: src/etc/inc/priv.defs.inc:1025 -msgid "WebCfg - System: Advanced: Admin Access Page" +msgid "WebCfg - Status: UPnP Status" msgstr "" #: src/etc/inc/priv.defs.inc:1026 -msgid "Allow access to the 'System: Advanced: Admin Access' page." +msgid "Allow access to the 'Status: UPnP Status' page." msgstr "" #: src/etc/inc/priv.defs.inc:1031 -msgid "WebCfg - System: Advanced: Firewall and NAT" +msgid "WebCfg - Status: Wireless" msgstr "" #: src/etc/inc/priv.defs.inc:1032 -msgid "Allow access to the 'System: Advanced: Firewall and NAT' page." +msgid "Allow access to the 'Status: Wireless' page." msgstr "" #: src/etc/inc/priv.defs.inc:1037 -msgid "WebCfg - System: Advanced: Miscellaneous" +msgid "WebCfg - System: General Setup" msgstr "" #: src/etc/inc/priv.defs.inc:1038 -msgid "Allow access to the 'System: Advanced: Miscellaneous' page." +msgid "Allow access to the 'System: General Setup' page." msgstr "" #: src/etc/inc/priv.defs.inc:1043 -msgid "WebCfg - System: Advanced: Networking" +msgid "WebCfg - System: Advanced: Admin Access Page" msgstr "" #: src/etc/inc/priv.defs.inc:1044 -msgid "Allow access to the 'System: Advanced: Networking' page." +msgid "Allow access to the 'System: Advanced: Admin Access' page." msgstr "" #: src/etc/inc/priv.defs.inc:1049 -msgid "WebCfg - System: Advanced: Notifications" +msgid "WebCfg - System: Advanced: Firewall & NAT" msgstr "" #: src/etc/inc/priv.defs.inc:1050 -msgid "Allow access to the 'System: Advanced: Notifications' page." +msgid "Allow access to the 'System: Advanced: Firewall & NAT' page." msgstr "" #: src/etc/inc/priv.defs.inc:1055 -msgid "WebCfg - System: Advanced: Tunables" +msgid "WebCfg - System: Advanced: Miscellaneous" msgstr "" #: src/etc/inc/priv.defs.inc:1056 -msgid "Allow access to the 'System: Advanced: Tunables' page." +msgid "Allow access to the 'System: Advanced: Miscellaneous' page." msgstr "" #: src/etc/inc/priv.defs.inc:1061 -msgid "WebCfg - System: Authentication Servers" +msgid "WebCfg - System: Advanced: Networking" msgstr "" #: src/etc/inc/priv.defs.inc:1062 -msgid "Allow access to the 'System: Authentication Servers' page." +msgid "Allow access to the 'System: Advanced: Networking' page." msgstr "" #: src/etc/inc/priv.defs.inc:1067 -msgid "WebCfg - System: CA Manager" +msgid "WebCfg - System: Advanced: Notifications" msgstr "" #: src/etc/inc/priv.defs.inc:1068 -msgid "Allow access to the 'System: CA Manager' page." +msgid "Allow access to the 'System: Advanced: Notifications' page." msgstr "" #: src/etc/inc/priv.defs.inc:1073 -msgid "WebCfg - System: Certificate Manager" +msgid "WebCfg - System: Advanced: Tunables" msgstr "" #: src/etc/inc/priv.defs.inc:1074 -msgid "Allow access to the 'System: Certificate Manager' page." +msgid "Allow access to the 'System: Advanced: Tunables' page." msgstr "" #: src/etc/inc/priv.defs.inc:1079 -msgid "WebCfg - System: CRL Manager" +msgid "WebCfg - System: Authentication Servers" msgstr "" #: src/etc/inc/priv.defs.inc:1080 -msgid "Allow access to the 'System: CRL Manager' page." +msgid "Allow access to the 'System: Authentication Servers' page." msgstr "" #: src/etc/inc/priv.defs.inc:1085 -msgid "WebCfg - System: Gateway Groups" +msgid "WebCfg - System: CA Manager" msgstr "" #: src/etc/inc/priv.defs.inc:1086 -msgid "Allow access to the 'System: Gateway Groups' page." +msgid "Allow access to the 'System: CA Manager' page." msgstr "" #: src/etc/inc/priv.defs.inc:1091 -msgid "WebCfg - System: Gateways: Edit Gateway Groups" +msgid "WebCfg - System: Certificate Manager" msgstr "" #: src/etc/inc/priv.defs.inc:1092 -msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page." +msgid "Allow access to the 'System: Certificate Manager' page." msgstr "" #: src/etc/inc/priv.defs.inc:1097 -msgid "WebCfg - System: Gateways" +msgid "WebCfg - System: CRL Manager" msgstr "" #: src/etc/inc/priv.defs.inc:1098 -msgid "Allow access to the 'System: Gateways' page." +msgid "Allow access to the 'System: CRL Manager' page." msgstr "" #: src/etc/inc/priv.defs.inc:1103 -msgid "WebCfg - System: Gateways: Edit Gateway" +msgid "WebCfg - System: Gateway Groups" msgstr "" #: src/etc/inc/priv.defs.inc:1104 -msgid "Allow access to the 'System: Gateways: Edit Gateway' page." +msgid "Allow access to the 'System: Gateway Groups' page." msgstr "" #: src/etc/inc/priv.defs.inc:1109 -msgid "WebCfg - System: Group manager" +msgid "WebCfg - System: Gateways: Edit Gateway Groups" msgstr "" #: src/etc/inc/priv.defs.inc:1110 -msgid "Allow access to the 'System: Group manager' page." +msgid "Allow access to the 'System: Gateways: Edit Gateway Groups' page." msgstr "" #: src/etc/inc/priv.defs.inc:1115 -msgid "WebCfg - System: Group Manager: Add Privileges" +msgid "WebCfg - System: Gateways" msgstr "" #: src/etc/inc/priv.defs.inc:1116 -msgid "Allow access to the 'System: Group Manager: Add Privileges' page." +msgid "Allow access to the 'System: Gateways' page." msgstr "" #: src/etc/inc/priv.defs.inc:1121 -msgid "WebCfg - System: High Availability Sync" +msgid "WebCfg - System: Gateways: Edit Gateway" msgstr "" #: src/etc/inc/priv.defs.inc:1122 -msgid "Allow access to the 'System: High Availability Sync' page." +msgid "Allow access to the 'System: Gateways: Edit Gateway' page." msgstr "" #: src/etc/inc/priv.defs.inc:1127 -msgid "WebCfg - System: Static Routes" +msgid "WebCfg - System: Group manager" msgstr "" #: src/etc/inc/priv.defs.inc:1128 -msgid "Allow access to the 'System: Static Routes' page." +msgid "Allow access to the 'System: Group manager' page." msgstr "" #: src/etc/inc/priv.defs.inc:1133 -msgid "WebCfg - System: Static Routes: Edit route" +msgid "WebCfg - System: Group Manager: Add Privileges" msgstr "" #: src/etc/inc/priv.defs.inc:1134 -msgid "Allow access to the 'System: Static Routes: Edit route' page." +msgid "Allow access to the 'System: Group Manager: Add Privileges' page." msgstr "" #: src/etc/inc/priv.defs.inc:1139 -msgid "WebCfg - System: Update: Settings" +msgid "WebCfg - System: High Availability Sync" msgstr "" #: src/etc/inc/priv.defs.inc:1140 -msgid "Allow access to the 'System: Update: Settings' page." +msgid "Allow access to the 'System: High Availability Sync' page." msgstr "" #: src/etc/inc/priv.defs.inc:1145 -msgid "WebCfg - System: User Manager" +msgid "WebCfg - System: Static Routes" msgstr "" #: src/etc/inc/priv.defs.inc:1146 -msgid "Allow access to the 'System: User Manager' page." +msgid "Allow access to the 'System: Static Routes' page." msgstr "" #: src/etc/inc/priv.defs.inc:1151 -msgid "WebCfg - System: User Manager: Add Privileges" +msgid "WebCfg - System: Static Routes: Edit route" msgstr "" #: src/etc/inc/priv.defs.inc:1152 -msgid "Allow access to the 'System: User Manager: Add Privileges' page." +msgid "Allow access to the 'System: Static Routes: Edit route' page." msgstr "" #: src/etc/inc/priv.defs.inc:1157 -msgid "WebCfg - System: User Password Manager" +msgid "WebCfg - System: Update: Settings" msgstr "" #: src/etc/inc/priv.defs.inc:1158 -msgid "Allow access to the 'System: User Password Manager' page." +msgid "Allow access to the 'System: Update: Settings' page." msgstr "" #: src/etc/inc/priv.defs.inc:1163 -msgid "WebCfg - System: User Manager: Settings" +msgid "WebCfg - System: User Manager" msgstr "" #: src/etc/inc/priv.defs.inc:1164 -msgid "Allow access to the 'System: User Manager: Settings' page." +msgid "Allow access to the 'System: User Manager' page." msgstr "" #: src/etc/inc/priv.defs.inc:1169 -msgid "WebCfg - System: User Manager: Settings: LDAP Picker" +msgid "WebCfg - System: User Manager: Add Privileges" msgstr "" #: src/etc/inc/priv.defs.inc:1170 -msgid "Allow access to the 'System: User Manager: Settings: LDAP Picker' page." +msgid "Allow access to the 'System: User Manager: Add Privileges' page." msgstr "" #: src/etc/inc/priv.defs.inc:1175 -msgid "WebCfg - System: User Manager: Settings: Test LDAP" +msgid "WebCfg - System: User Password Manager" msgstr "" #: src/etc/inc/priv.defs.inc:1176 -msgid "Allow access to the 'System: User Manager: Settings: Test LDAP' page." +msgid "Allow access to the 'System: User Password Manager' page." msgstr "" #: src/etc/inc/priv.defs.inc:1181 -msgid "WebCfg - Hidden: Upload Configuration" +msgid "WebCfg - System: User Manager: Settings" msgstr "" #: src/etc/inc/priv.defs.inc:1182 -msgid "Allow access to the 'Hidden: Upload Configuration' page." +msgid "Allow access to the 'System: User Manager: Settings' page." msgstr "" #: src/etc/inc/priv.defs.inc:1187 -msgid "WebCfg - VPN: IPsec" +msgid "WebCfg - Hidden: Upload Configuration" msgstr "" #: src/etc/inc/priv.defs.inc:1188 -msgid "Allow access to the 'VPN: IPsec' page." +msgid "Allow access to the 'Hidden: Upload Configuration' page." msgstr "" #: src/etc/inc/priv.defs.inc:1193 -msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List" +msgid "WebCfg - VPN: IPsec" msgstr "" #: src/etc/inc/priv.defs.inc:1194 -msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page." +msgid "Allow access to the 'VPN: IPsec' page." msgstr "" #: src/etc/inc/priv.defs.inc:1199 -msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys" +msgid "WebCfg - VPN: IPsec: Pre-Shared Keys List" msgstr "" #: src/etc/inc/priv.defs.inc:1200 -msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page." +msgid "Allow access to the 'VPN: IPsec: Pre-Shared Keys List' page." msgstr "" #: src/etc/inc/priv.defs.inc:1205 -msgid "WebCfg - VPN: IPsec: Mobile" +msgid "WebCfg - VPN: IPsec: Edit Pre-Shared Keys" msgstr "" #: src/etc/inc/priv.defs.inc:1206 -msgid "Allow access to the 'VPN: IPsec: Mobile' page." +msgid "Allow access to the 'VPN: IPsec: Edit Pre-Shared Keys' page." msgstr "" #: src/etc/inc/priv.defs.inc:1211 -msgid "WebCfg - VPN: IPsec: Edit Phase 1" +msgid "WebCfg - VPN: IPsec: Mobile" msgstr "" #: src/etc/inc/priv.defs.inc:1212 -msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page." +msgid "Allow access to the 'VPN: IPsec: Mobile' page." msgstr "" #: src/etc/inc/priv.defs.inc:1217 -msgid "WebCfg - VPN: IPsec: Edit Phase 2" +msgid "WebCfg - VPN: IPsec: Edit Phase 1" msgstr "" #: src/etc/inc/priv.defs.inc:1218 -msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page." +msgid "Allow access to the 'VPN: IPsec: Edit Phase 1' page." msgstr "" #: src/etc/inc/priv.defs.inc:1223 -msgid "WebCfg - VPN: IPsec: Settings" +msgid "WebCfg - VPN: IPsec: Edit Phase 2" msgstr "" #: src/etc/inc/priv.defs.inc:1224 -msgid "Allow access to the 'VPN: IPsec: Settings' page." +msgid "Allow access to the 'VPN: IPsec: Edit Phase 2' page." msgstr "" #: src/etc/inc/priv.defs.inc:1229 -msgid "WebCfg - VPN: L2TP" +msgid "WebCfg - VPN: IPsec: Settings" msgstr "" #: src/etc/inc/priv.defs.inc:1230 -msgid "Allow access to the 'VPN: L2TP' page." +msgid "Allow access to the 'VPN: IPsec: Settings' page." msgstr "" #: src/etc/inc/priv.defs.inc:1235 -msgid "WebCfg - VPN: L2TP: Users" +msgid "WebCfg - VPN: L2TP" msgstr "" #: src/etc/inc/priv.defs.inc:1236 -msgid "Allow access to the 'VPN: L2TP: Users' page." +msgid "Allow access to the 'VPN: L2TP' page." msgstr "" #: src/etc/inc/priv.defs.inc:1241 -msgid "WebCfg - VPN: L2TP: Users: Edit" +msgid "WebCfg - VPN: L2TP: Users" msgstr "" #: src/etc/inc/priv.defs.inc:1242 -msgid "Allow access to the 'VPN: L2TP: Users: Edit' page." +msgid "Allow access to the 'VPN: L2TP: Users' page." msgstr "" #: src/etc/inc/priv.defs.inc:1247 -msgid "WebCfg - OpenVPN: Clients" +msgid "WebCfg - VPN: L2TP: Users: Edit" msgstr "" #: src/etc/inc/priv.defs.inc:1248 -msgid "Allow access to the 'OpenVPN: Clients' page." +msgid "Allow access to the 'VPN: L2TP: Users: Edit' page." msgstr "" #: src/etc/inc/priv.defs.inc:1253 -msgid "WebCfg - OpenVPN: Client Specific Override" +msgid "WebCfg - OpenVPN: Clients" msgstr "" #: src/etc/inc/priv.defs.inc:1254 -msgid "Allow access to the 'OpenVPN: Client Specific Override' page." +msgid "Allow access to the 'OpenVPN: Clients' page." msgstr "" #: src/etc/inc/priv.defs.inc:1259 -msgid "WebCfg - OpenVPN: Servers" +msgid "WebCfg - OpenVPN: Client Specific Override" msgstr "" #: src/etc/inc/priv.defs.inc:1260 -msgid "Allow access to the 'OpenVPN: Servers' page." +msgid "Allow access to the 'OpenVPN: Client Specific Override' page." msgstr "" #: src/etc/inc/priv.defs.inc:1265 -msgid "WebCfg - Services: PPPoE Server" +msgid "WebCfg - OpenVPN: Servers" msgstr "" #: src/etc/inc/priv.defs.inc:1266 -msgid "Allow access to the 'Services: PPPoE Server' page." +msgid "Allow access to the 'OpenVPN: Servers' page." msgstr "" #: src/etc/inc/priv.defs.inc:1271 -msgid "WebCfg - Services: PPPoE Server: Edit" -msgstr "" - -#: src/etc/inc/priv.defs.inc:1272 -msgid "Allow access to the 'Services: PPPoE Server: Edit' page." -msgstr "" - -#: src/etc/inc/priv.defs.inc:1277 msgid "WebCfg - pfSense wizard subsystem" msgstr "" -#: src/etc/inc/priv.defs.inc:1278 +#: src/etc/inc/priv.defs.inc:1272 msgid "Allow access to the 'pfSense wizard subsystem' page." msgstr "" -#: src/etc/inc/priv.defs.inc:1283 +#: src/etc/inc/priv.defs.inc:1277 msgid "WebCfg - XMLRPC Library" msgstr "" -#: src/etc/inc/priv.defs.inc:1284 +#: src/etc/inc/priv.defs.inc:1278 msgid "Allow access to the 'XMLRPC Library' page." msgstr "" @@ -5269,7 +5297,7 @@ msgid "DNS Forwarder" msgstr "" #: src/etc/inc/service-utils.inc:287 src/usr/local/www/diag_backup.php:560 -#: src/usr/local/www/head.inc:287 src/usr/local/www/services_unbound.php:266 +#: src/usr/local/www/head.inc:287 src/usr/local/www/services_unbound.php:272 #: src/usr/local/www/services_unbound_acls.php:208 #: src/usr/local/www/services_unbound_advanced.php:221 #: src/usr/local/www/services_unbound_domainoverride_edit.php:145 @@ -5285,24 +5313,24 @@ msgstr "" #: src/etc/inc/service-utils.inc:302 src/usr/local/www/diag_backup.php:557 #: src/usr/local/www/head.inc:285 src/usr/local/www/head.inc:323 -#: src/usr/local/www/services_captiveportal.php:96 -#: src/usr/local/www/services_captiveportal_filemanager.php:99 -#: src/usr/local/www/services_captiveportal_hostname.php:95 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:96 -#: src/usr/local/www/services_captiveportal_ip.php:94 -#: src/usr/local/www/services_captiveportal_ip_edit.php:98 -#: src/usr/local/www/services_captiveportal_mac.php:91 -#: src/usr/local/www/services_captiveportal_mac_edit.php:101 -#: src/usr/local/www/services_captiveportal_vouchers.php:111 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:86 +#: src/usr/local/www/services_captiveportal.php:97 +#: src/usr/local/www/services_captiveportal_filemanager.php:100 +#: src/usr/local/www/services_captiveportal_hostname.php:96 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:98 +#: src/usr/local/www/services_captiveportal_ip.php:95 +#: src/usr/local/www/services_captiveportal_ip_edit.php:99 +#: src/usr/local/www/services_captiveportal_mac.php:92 +#: src/usr/local/www/services_captiveportal_mac_edit.php:102 +#: src/usr/local/www/services_captiveportal_vouchers.php:112 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:87 #: src/usr/local/www/services_captiveportal_zones.php:93 #: src/usr/local/www/services_captiveportal_zones_edit.php:69 #: src/usr/local/www/status_captiveportal.php:125 -#: src/usr/local/www/status_captiveportal_expire.php:86 -#: src/usr/local/www/status_captiveportal_test.php:86 -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:85 -#: src/usr/local/www/status_captiveportal_vouchers.php:85 -#: src/usr/local/www/system_certmanager.php:1090 +#: src/usr/local/www/status_captiveportal_expire.php:87 +#: src/usr/local/www/status_captiveportal_test.php:87 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: src/usr/local/www/status_captiveportal_vouchers.php:86 +#: src/usr/local/www/system_certmanager.php:1058 msgid "Captive Portal" msgstr "" @@ -5352,7 +5380,7 @@ msgstr "" msgid "Not available." msgstr "" -#: src/etc/inc/service-utils.inc:493 src/usr/local/www/status_services.php:168 +#: src/etc/inc/service-utils.inc:493 src/usr/local/www/status_services.php:158 msgid "Running" msgstr "" @@ -5361,512 +5389,469 @@ msgstr "" msgid "%s Service is" msgstr "" -#: src/etc/inc/service-utils.inc:502 src/usr/local/www/status_services.php:168 +#: src/etc/inc/service-utils.inc:502 src/usr/local/www/status_services.php:158 msgid "Stopped" msgstr "" #: src/etc/inc/service-utils.inc:502 -#: src/usr/local/www/firewall_nat_edit.php:669 +#: src/usr/local/www/firewall_nat_1to1_edit.php:401 +#: src/usr/local/www/firewall_nat_edit.php:667 #: src/usr/local/www/firewall_nat_npt_edit.php:225 #: src/usr/local/www/firewall_nat_out_edit.php:451 -#: src/usr/local/www/firewall_rules_edit.php:1136 -#: src/usr/local/www/interfaces.php:2597 -#: src/usr/local/www/interfaces_ppps_edit.php:748 -#: src/usr/local/www/load_balancer_pool_edit.php:445 -#: src/usr/local/www/services_router_advertisements.php:141 +#: src/usr/local/www/firewall_rules_edit.php:1152 +#: src/usr/local/www/interfaces.php:2614 +#: src/usr/local/www/interfaces_ppps_edit.php:758 +#: src/usr/local/www/load_balancer_pool_edit.php:439 +#: src/usr/local/www/services_router_advertisements.php:142 #: src/usr/local/www/system_gateways_edit.php:613 #: src/usr/local/www/system_routes_edit.php:298 -#: src/usr/local/www/system_usermanager.php:502 -#: src/usr/local/www/system_usermanager.php:620 -#: src/usr/local/www/vpn_ipsec_phase1.php:692 +#: src/usr/local/www/system_usermanager.php:503 +#: src/usr/local/www/system_usermanager.php:621 +#: src/usr/local/www/vpn_ipsec_phase1.php:690 #: src/usr/local/www/vpn_ipsec_phase2.php:535 #: src/usr/local/www/vpn_openvpn_client.php:462 -#: src/usr/local/www/vpn_openvpn_csc.php:669 +#: src/usr/local/www/vpn_openvpn_csc.php:673 #: src/usr/local/www/vpn_openvpn_server.php:630 msgid "Disabled" msgstr "" -#: src/etc/inc/service-utils.inc:542 src/etc/inc/service-utils.inc:594 +#: src/etc/inc/service-utils.inc:597 #, php-format msgid "Restart %sService" msgstr "" -#: src/etc/inc/service-utils.inc:553 src/etc/inc/service-utils.inc:607 +#: src/etc/inc/service-utils.inc:610 #, php-format msgid "Stop %sService" msgstr "" -#: src/etc/inc/service-utils.inc:558 src/etc/inc/service-utils.inc:613 +#: src/etc/inc/service-utils.inc:616 #, php-format msgid "Start %sService" msgstr "" -#: src/etc/inc/service-utils.inc:685 +#: src/etc/inc/service-utils.inc:688 #, php-format msgid "%s has been started." msgstr "" -#: src/etc/inc/service-utils.inc:755 +#: src/etc/inc/service-utils.inc:758 #, php-format msgid "%s has been stopped." msgstr "" -#: src/etc/inc/service-utils.inc:824 +#: src/etc/inc/service-utils.inc:827 #, php-format msgid "%s has been restarted." msgstr "" -#: src/etc/inc/services.inc:360 +#: src/etc/inc/services.inc:376 msgid "Error: cannot open radvd.conf in services_radvd_configure()." msgstr "" -#: src/etc/inc/services.inc:377 +#: src/etc/inc/services.inc:393 msgid "Shutting down Router Advertisment daemon cleanly" msgstr "" -#: src/etc/inc/services.inc:465 +#: src/etc/inc/services.inc:481 #, php-format msgid "DHCP leases restore failed exited with %1$s, the error is: %2$s%3$s" msgstr "" -#: src/etc/inc/services.inc:492 +#: src/etc/inc/services.inc:508 msgid "Starting DHCP service..." msgstr "" -#: src/etc/inc/services.inc:584 +#: src/etc/inc/services.inc:600 msgid "Warning! DHCP Failover setup and no CARP virtual IPs defined!" msgstr "" -#: src/etc/inc/services.inc:751 +#: src/etc/inc/services.inc:767 #, php-format msgid "" "Invalid DHCP pool %s - %s for %s subnet %s/%s detected. Please correct the " "settings in Services, DHCP Server" msgstr "" -#: src/etc/inc/services.inc:1095 +#: src/etc/inc/services.inc:1111 #, php-format msgid "Error: cannot open dhcpd.conf in services_dhcpdv4_configure().%s" msgstr "" -#: src/etc/inc/services.inc:1222 +#: src/etc/inc/services.inc:1238 #, php-format msgid "DHCP leases v6 restore failed exited with %1$s, the error is: %2$s" msgstr "" -#: src/etc/inc/services.inc:1614 +#: src/etc/inc/services.inc:1630 msgid "Could not write Igmpproxy configuration file!" msgstr "" -#: src/etc/inc/services.inc:1622 +#: src/etc/inc/services.inc:1638 msgid "Started IGMP proxy service." msgstr "" -#: src/etc/inc/services.inc:1646 +#: src/etc/inc/services.inc:1662 msgid "Starting DHCP relay service..." msgstr "" -#: src/etc/inc/services.inc:1671 +#: src/etc/inc/services.inc:1687 msgid "No destination IP has been configured!" msgstr "" -#: src/etc/inc/services.inc:1744 +#: src/etc/inc/services.inc:1760 msgid "No suitable interface found for running dhcrelay!" msgstr "" -#: src/etc/inc/services.inc:1780 +#: src/etc/inc/services.inc:1796 msgid "Starting DHCPv6 relay service..." msgstr "" -#: src/etc/inc/services.inc:1868 +#: src/etc/inc/services.inc:1884 msgid "No suitable interface found for running dhcrelay -6!" msgstr "" -#: src/etc/inc/services.inc:1928 +#: src/etc/inc/services.inc:1944 msgid "Starting DynDNS clients..." msgstr "" -#: src/etc/inc/services.inc:2001 +#: src/etc/inc/services.inc:2017 msgid "Starting DNS forwarder..." msgstr "" -#: src/etc/inc/services.inc:2167 +#: src/etc/inc/services.inc:2183 msgid "Starting DNS Resolver..." msgstr "" -#: src/etc/inc/services.inc:2212 +#: src/etc/inc/services.inc:2228 msgid "Starting SNMP daemon... " msgstr "" -#: src/etc/inc/services.inc:2218 +#: src/etc/inc/services.inc:2234 #, php-format msgid "Error: cannot open snmpd.conf in services_snmpd_configure().%s" msgstr "" -#: src/etc/inc/services.inc:2496 +#: src/etc/inc/services.inc:2512 #, php-format msgid "DynDNS updated IP Address (A) for %1$s on %2$s (%3$s) to %4$s" msgstr "" -#: src/etc/inc/services.inc:2501 +#: src/etc/inc/services.inc:2517 #, php-format msgid "" "phpDynDNS: Not updating %s A record because the IP address has not changed." msgstr "" -#: src/etc/inc/services.inc:2512 +#: src/etc/inc/services.inc:2528 #, php-format msgid "DynDNS updated IPv6 Address (AAAA) for %1$s on %2$s (%3$s) to %4$s" msgstr "" -#: src/etc/inc/services.inc:2514 +#: src/etc/inc/services.inc:2530 #, php-format msgid "phpDynDNS: updating cache file %1$s.ipv6: %2$s" msgstr "" -#: src/etc/inc/services.inc:2517 +#: src/etc/inc/services.inc:2533 #, php-format msgid "" "phpDynDNS: Not updating %s AAAA record because the IPv6 address has not " "changed." msgstr "" -#: src/etc/inc/services.inc:2568 +#: src/etc/inc/services.inc:2584 msgid "pfSense specific crontab entries" msgstr "" -#: src/etc/inc/services.inc:2569 +#: src/etc/inc/services.inc:2585 msgid "Created:" msgstr "" -#: src/etc/inc/services.inc:2591 +#: src/etc/inc/services.inc:2607 msgid "If possible do not add items to this file manually." msgstr "" -#: src/etc/inc/services.inc:2592 +#: src/etc/inc/services.inc:2608 msgid "" -"If you do so, this file must be terminated with a blank line (e.g. new line)" +"If done so, this file must be terminated with a blank line (e.g. new line)" msgstr "" -#: src/etc/inc/services.inc:2643 +#: src/etc/inc/services.inc:2659 msgid "Starting UPnP service... " msgstr "" -#: src/etc/inc/services.inc:2683 +#: src/etc/inc/services.inc:2699 #, php-format msgid "Installed cron job for %s" msgstr "" -#: src/etc/inc/services.inc:2687 +#: src/etc/inc/services.inc:2703 #, php-format msgid "Checked cron job for %s, no change needed" msgstr "" -#: src/etc/inc/services.inc:2690 +#: src/etc/inc/services.inc:2706 #, php-format msgid "Updated cron job for %s" msgstr "" -#: src/etc/inc/services.inc:2696 +#: src/etc/inc/services.inc:2712 #, php-format msgid "Removed cron job for %s" msgstr "" -#: src/etc/inc/shaper.inc:254 src/usr/local/www/system_camanager.php:260 +#: src/etc/inc/shaper.inc:296 src/usr/local/www/system_camanager.php:260 #: src/usr/local/www/system_certmanager.php:378 #, php-format msgid "The field '%s' contains invalid characters." msgstr "" -#: src/etc/inc/shaper.inc:260 +#: src/etc/inc/shaper.inc:302 #, php-format msgid "The field '%s' is required." msgstr "" -#: src/etc/inc/shaper.inc:411 src/etc/inc/shaper.inc:1878 -#: src/etc/inc/shaper.inc:2254 src/etc/inc/shaper.inc:2654 -#: src/etc/inc/shaper.inc:2812 src/etc/inc/shaper.inc:2964 -#: src/etc/inc/shaper.inc:3113 src/etc/inc/shaper.inc:3339 -#: src/etc/inc/shaper.inc:3925 src/usr/local/www/interfaces_ppps_edit.php:908 -#: src/usr/local/www/status_queues.php:198 -#: src/usr/local/www/status_queues.php:202 +#: src/etc/inc/shaper.inc:469 src/etc/inc/shaper.inc:1934 +#: src/etc/inc/shaper.inc:2297 src/etc/inc/shaper.inc:2681 +#: src/etc/inc/shaper.inc:2809 src/etc/inc/shaper.inc:2961 +#: src/etc/inc/shaper.inc:3080 src/etc/inc/shaper.inc:3306 +#: src/etc/inc/shaper.inc:3893 src/usr/local/www/interfaces_ppps_edit.php:920 +#: src/usr/local/www/status_queues.php:197 +#: src/usr/local/www/status_queues.php:201 msgid "Bandwidth" msgstr "" -#: src/etc/inc/shaper.inc:413 src/etc/inc/shaper.inc:1880 -#: src/etc/inc/shaper.inc:2656 src/etc/inc/shaper.inc:2966 -#: src/etc/inc/shaper.inc:3343 +#: src/etc/inc/shaper.inc:471 src/etc/inc/shaper.inc:1936 +#: src/etc/inc/shaper.inc:2683 src/etc/inc/shaper.inc:2963 +#: src/etc/inc/shaper.inc:3310 msgid "Bandwidthtype" msgstr "" -#: src/etc/inc/shaper.inc:418 src/etc/inc/shaper.inc:1171 -#: src/etc/inc/shaper.inc:1886 src/etc/inc/shaper.inc:2661 -#: src/etc/inc/shaper.inc:2971 +#: src/etc/inc/shaper.inc:476 +msgid "Bandwidth must be set. This is usually the interface speed." +msgstr "" + +#: src/etc/inc/shaper.inc:479 src/etc/inc/shaper.inc:1238 +#: src/etc/inc/shaper.inc:1942 msgid "Bandwidth must be an integer." msgstr "" -#: src/etc/inc/shaper.inc:421 src/etc/inc/shaper.inc:1174 -#: src/etc/inc/shaper.inc:1890 src/etc/inc/shaper.inc:2666 -#: src/etc/inc/shaper.inc:2976 +#: src/etc/inc/shaper.inc:482 src/etc/inc/shaper.inc:1241 +#: src/etc/inc/shaper.inc:1946 msgid "Bandwidth cannot be negative." msgstr "" -#: src/etc/inc/shaper.inc:424 +#: src/etc/inc/shaper.inc:486 src/etc/inc/shaper.inc:1245 +#: src/etc/inc/shaper.inc:1951 +msgid "Bandwidth in percentage should be between 1 and 100." +msgstr "" + +#: src/etc/inc/shaper.inc:493 msgid "Qlimit must be an integer." msgstr "" -#: src/etc/inc/shaper.inc:427 +#: src/etc/inc/shaper.inc:496 msgid "Qlimit must be positive." msgstr "" -#: src/etc/inc/shaper.inc:430 +#: src/etc/inc/shaper.inc:499 msgid "Tbrsize must be an integer." msgstr "" -#: src/etc/inc/shaper.inc:433 +#: src/etc/inc/shaper.inc:502 msgid "Tbrsize must be positive." msgstr "" -#: src/etc/inc/shaper.inc:533 src/etc/inc/shaper.inc:1703 -#: src/etc/inc/shaper.inc:2530 src/etc/inc/shaper.inc:3469 -#, php-format -msgid "SHAPER: could not create queue %1$s on interface %2$s because: %3$s" -msgstr "" - -#: src/etc/inc/shaper.inc:670 +#: src/etc/inc/shaper.inc:721 #, php-format msgid "SHAPER: no default queue specified for interface %s." msgstr "" -#: src/etc/inc/shaper.inc:670 +#: src/etc/inc/shaper.inc:721 msgid "The interface queue will be enforced as default." msgstr "" -#: src/etc/inc/shaper.inc:755 -msgid "Disable shaper on interface" +#: src/etc/inc/shaper.inc:807 +msgid "Remove shaper from this interface" msgstr "" -#: src/etc/inc/shaper.inc:773 src/etc/inc/shaper.inc:1359 -#: src/usr/local/www/diag_confbak.php:189 src/usr/local/www/diag_edit.php:146 -#: src/usr/local/www/diag_nanobsd.php:203 -#: src/usr/local/www/firewall_nat.php:455 -#: src/usr/local/www/firewall_nat.php:469 -#: src/usr/local/www/firewall_nat_1to1.php:282 -#: src/usr/local/www/firewall_nat_1to1_edit.php:397 -#: src/usr/local/www/firewall_nat_edit.php:662 -#: src/usr/local/www/firewall_nat_npt.php:271 -#: src/usr/local/www/firewall_nat_out.php:538 -#: src/usr/local/www/firewall_nat_out_edit.php:444 -#: src/usr/local/www/firewall_rules.php:849 -#: src/usr/local/www/firewall_rules.php:897 -#: src/usr/local/www/interfaces.php:1707 -#: src/usr/local/www/interfaces_assign.php:601 -#: src/usr/local/www/interfaces_qinq_edit.php:261 -#: src/usr/local/www/load_balancer_monitor_edit.php:299 -#: src/usr/local/www/load_balancer_pool_edit.php:340 -#: src/usr/local/www/pkg_edit.php:623 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:204 -#: src/usr/local/www/services_dhcp.php:786 -#: src/usr/local/www/services_dhcpv6.php:595 -#: src/usr/local/www/services_igmpproxy.php:172 -#: src/usr/local/www/services_igmpproxy.php:174 -#: src/usr/local/www/services_router_advertisements.php:294 -#: src/usr/local/www/status_lb_pool.php:274 -#: src/usr/local/www/status_lb_pool.php:276 -#: src/usr/local/www/status_logs_common.inc:973 -#: src/usr/local/www/status_logs_settings.php:248 -#: src/usr/local/www/system_advanced_sysctl.php:139 -#: src/usr/local/www/system_camanager.php:353 -#: src/usr/local/www/system_camanager.php:383 -#: src/usr/local/www/system_certmanager.php:253 -#: src/usr/local/www/system_certmanager.php:561 -#: src/usr/local/www/system_certmanager.php:591 -#: src/usr/local/www/system_crlmanager.php:295 -#: src/usr/local/www/system_crlmanager.php:379 -#: src/usr/local/www/system_usermanager_settings_ldapacpicker.php:157 -#: src/usr/local/www/vpn_l2tp.php:238 -#: src/usr/local/www/widgets/widgets/log.widget.php:296 -#: src/usr/local/www/widgets/widgets/rss.widget.php:190 -#: src/usr/local/www/widgets/widgets/services_status.widget.php:166 -#: src/usr/local/www/widgets/widgets/traffic_graphs.widget.php:198 -msgid "Save" -msgstr "" - -#: src/etc/inc/shaper.inc:782 src/etc/inc/shaper.inc:1368 +#: src/etc/inc/shaper.inc:831 src/etc/inc/shaper.inc:1439 msgid "Enable/Disable" msgstr "" -#: src/etc/inc/shaper.inc:795 +#: src/etc/inc/shaper.inc:844 msgid "Scheduler Type" msgstr "" -#: src/etc/inc/shaper.inc:802 -msgid "" -"Changing this changes all child queues! Beware you can lose information." +#: src/etc/inc/shaper.inc:851 +msgid "Changing this changes all child queues! Beware information can be lost." msgstr "" -#: src/etc/inc/shaper.inc:828 src/etc/inc/shaper.inc:1398 +#: src/etc/inc/shaper.inc:877 src/etc/inc/shaper.inc:1469 msgid "Queue Limit" msgstr "" -#: src/etc/inc/shaper.inc:835 -msgid "TRB Size" +#: src/etc/inc/shaper.inc:884 +msgid "TBR Size" msgstr "" -#: src/etc/inc/shaper.inc:838 +#: src/etc/inc/shaper.inc:887 msgid "" "Adjusts the size, in bytes, of the token bucket regulator. If not specified, " "heuristics based on the interface bandwidth are used to determine the size." msgstr "" -#: src/etc/inc/shaper.inc:1178 +#: src/etc/inc/shaper.inc:1252 msgid "The priority must be an integer between 1 and 15." msgstr "" -#: src/etc/inc/shaper.inc:1181 src/etc/inc/shaper.inc:3358 +#: src/etc/inc/shaper.inc:1255 src/etc/inc/shaper.inc:3325 msgid "Queue limit must be an integer" msgstr "" -#: src/etc/inc/shaper.inc:1184 +#: src/etc/inc/shaper.inc:1258 msgid "Queue limit must be positive" msgstr "" -#: src/etc/inc/shaper.inc:1187 src/etc/inc/shaper.inc:1190 -#: src/etc/inc/shaper.inc:3361 src/etc/inc/shaper.inc:3364 +#: src/etc/inc/shaper.inc:1261 src/etc/inc/shaper.inc:1264 +#: src/etc/inc/shaper.inc:3328 src/etc/inc/shaper.inc:3331 msgid "Queue names must be alphanumeric and _ or - only." msgstr "" -#: src/etc/inc/shaper.inc:1194 +#: src/etc/inc/shaper.inc:1268 msgid "Only one default queue per interface is allowed." msgstr "" -#: src/etc/inc/shaper.inc:1379 +#: src/etc/inc/shaper.inc:1450 msgid "" "Enter the name of the queue here. Do not use spaces and limit the size to 15 " "characters." msgstr "" -#: src/etc/inc/shaper.inc:1390 src/usr/local/www/interfaces_bridge_edit.php:605 +#: src/etc/inc/shaper.inc:1461 src/usr/local/www/interfaces_bridge_edit.php:617 #: src/usr/local/www/interfaces_vlan.php:142 -#: src/usr/local/www/system_gateway_groups.php:152 +#: src/usr/local/www/system_gateway_groups.php:166 msgid "Priority" msgstr "" -#: src/etc/inc/shaper.inc:1394 +#: src/etc/inc/shaper.inc:1465 msgid "" "For hfsc, the range is 0 to 7. The default is 1. Hfsc queues with a higher " "priority are preferred in the case of overload." msgstr "" -#: src/etc/inc/shaper.inc:1401 +#: src/etc/inc/shaper.inc:1472 msgid "Queue limit in packets." msgstr "" -#: src/etc/inc/shaper.inc:1403 +#: src/etc/inc/shaper.inc:1474 msgid "Scheduler options" msgstr "" -#: src/etc/inc/shaper.inc:1412 src/usr/local/www/firewall_rules_edit.php:1684 +#: src/etc/inc/shaper.inc:1483 src/usr/local/www/firewall_rules_edit.php:1700 msgid "Default Queue" msgstr "" -#: src/etc/inc/shaper.inc:1420 +#: src/etc/inc/shaper.inc:1491 msgid "Random Early Detection" msgstr "" -#: src/etc/inc/shaper.inc:1420 +#: src/etc/inc/shaper.inc:1491 msgid "" "<a target=\"_new\" href=\"http://www.openbsd.org/faq/pf/queueing.html#red\">" msgstr "" -#: src/etc/inc/shaper.inc:1427 +#: src/etc/inc/shaper.inc:1498 msgid "Random Early Detection In and Out" msgstr "" -#: src/etc/inc/shaper.inc:1427 +#: src/etc/inc/shaper.inc:1498 msgid "" "<a target=\"_new\" href=\"http://www.openbsd.org/faq/pf/queueing.html#rio\">" msgstr "" -#: src/etc/inc/shaper.inc:1434 +#: src/etc/inc/shaper.inc:1505 msgid "Explicit Congestion Notification" msgstr "" -#: src/etc/inc/shaper.inc:1434 src/etc/inc/shaper.inc:1441 +#: src/etc/inc/shaper.inc:1505 src/etc/inc/shaper.inc:1512 msgid "" "<a target=\"_new\" href=\"http://www.openbsd.org/faq/pf/queueing.html#ecn\">" msgstr "" -#: src/etc/inc/shaper.inc:1441 +#: src/etc/inc/shaper.inc:1512 msgid "Codel Active Queue" msgstr "" -#: src/etc/inc/shaper.inc:1443 +#: src/etc/inc/shaper.inc:1514 msgid "Select options for this queue" msgstr "" -#: src/etc/inc/shaper.inc:1449 src/etc/inc/shaper.inc:3961 -#: src/etc/inc/shaper.inc:4265 src/usr/local/www/firewall_aliases.php:228 -#: src/usr/local/www/firewall_aliases_edit.php:682 -#: src/usr/local/www/firewall_aliases_edit.php:739 +#: src/etc/inc/shaper.inc:1520 src/etc/inc/shaper.inc:3929 +#: src/etc/inc/shaper.inc:4233 src/usr/local/www/firewall_aliases.php:228 +#: src/usr/local/www/firewall_aliases_edit.php:679 +#: src/usr/local/www/firewall_aliases_edit.php:736 #: src/usr/local/www/firewall_aliases_import.php:208 #: src/usr/local/www/firewall_nat.php:246 #: src/usr/local/www/firewall_nat_1to1.php:187 -#: src/usr/local/www/firewall_nat_1to1_edit.php:513 +#: src/usr/local/www/firewall_nat_1to1_edit.php:510 #: src/usr/local/www/firewall_nat_edit.php:897 #: src/usr/local/www/firewall_nat_npt.php:186 #: src/usr/local/www/firewall_nat_npt_edit.php:267 #: src/usr/local/www/firewall_nat_out.php:319 -#: src/usr/local/www/firewall_nat_out.php:570 -#: src/usr/local/www/firewall_nat_out_edit.php:641 -#: src/usr/local/www/firewall_rules.php:414 -#: src/usr/local/www/firewall_rules_edit.php:1421 +#: src/usr/local/www/firewall_nat_out.php:572 +#: src/usr/local/www/firewall_nat_out_edit.php:640 +#: src/usr/local/www/firewall_rules.php:417 +#: src/usr/local/www/firewall_rules_edit.php:1439 #: src/usr/local/www/firewall_schedule.php:128 -#: src/usr/local/www/firewall_schedule_edit.php:409 -#: src/usr/local/www/firewall_schedule_edit.php:649 +#: src/usr/local/www/firewall_schedule_edit.php:404 +#: src/usr/local/www/firewall_schedule_edit.php:648 #: src/usr/local/www/firewall_virtual_ip.php:298 -#: src/usr/local/www/firewall_virtual_ip_edit.php:455 -#: src/usr/local/www/guiconfig.inc:1102 src/usr/local/www/interfaces.php:1722 -#: src/usr/local/www/interfaces.php:1876 src/usr/local/www/interfaces.php:3188 +#: src/usr/local/www/firewall_virtual_ip_edit.php:464 +#: src/usr/local/www/guiconfig.inc:1105 src/usr/local/www/interfaces.php:1728 +#: src/usr/local/www/interfaces.php:1888 src/usr/local/www/interfaces.php:3195 #: src/usr/local/www/interfaces_bridge.php:138 -#: src/usr/local/www/interfaces_bridge_edit.php:427 +#: src/usr/local/www/interfaces_bridge_edit.php:442 #: src/usr/local/www/interfaces_gif.php:133 -#: src/usr/local/www/interfaces_gif_edit.php:255 +#: src/usr/local/www/interfaces_gif_edit.php:259 #: src/usr/local/www/interfaces_gre.php:133 -#: src/usr/local/www/interfaces_gre_edit.php:256 +#: src/usr/local/www/interfaces_gre_edit.php:262 #: src/usr/local/www/interfaces_groups.php:115 #: src/usr/local/www/interfaces_lagg.php:140 +#: src/usr/local/www/interfaces_lagg_edit.php:288 #: src/usr/local/www/interfaces_ppps.php:132 -#: src/usr/local/www/interfaces_ppps_edit.php:595 +#: src/usr/local/www/interfaces_ppps_edit.php:605 #: src/usr/local/www/interfaces_qinq.php:146 -#: src/usr/local/www/interfaces_qinq_edit.php:290 +#: src/usr/local/www/interfaces_qinq_edit.php:287 #: src/usr/local/www/interfaces_vlan.php:143 #: src/usr/local/www/interfaces_vlan_edit.php:241 #: src/usr/local/www/interfaces_wireless.php:135 #: src/usr/local/www/interfaces_wireless_edit.php:232 #: src/usr/local/www/load_balancer_monitor.php:142 -#: src/usr/local/www/load_balancer_monitor_edit.php:118 -#: src/usr/local/www/load_balancer_monitor_edit.php:313 +#: src/usr/local/www/load_balancer_monitor_edit.php:120 +#: src/usr/local/www/load_balancer_monitor_edit.php:311 #: src/usr/local/www/load_balancer_pool.php:159 -#: src/usr/local/www/load_balancer_pool_edit.php:364 -#: src/usr/local/www/load_balancer_virtual_server.php:160 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:215 +#: src/usr/local/www/load_balancer_pool_edit.php:356 +#: src/usr/local/www/load_balancer_virtual_server.php:180 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:217 #: src/usr/local/www/pkg_mgr.php:101 src/usr/local/www/pkg_mgr.php:191 -#: src/usr/local/www/pkg_mgr_installed.php:105 -#: src/usr/local/www/services_captiveportal_hostname.php:151 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:226 -#: src/usr/local/www/services_captiveportal_ip.php:145 -#: src/usr/local/www/services_captiveportal_mac.php:210 -#: src/usr/local/www/services_captiveportal_mac_edit.php:262 +#: src/usr/local/www/pkg_mgr_installed.php:114 +#: src/usr/local/www/services_captiveportal_hostname.php:152 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:225 +#: src/usr/local/www/services_captiveportal_ip.php:146 +#: src/usr/local/www/services_captiveportal_ip_edit.php:259 +#: src/usr/local/www/services_captiveportal_mac.php:211 +#: src/usr/local/www/services_captiveportal_mac_edit.php:265 #: src/usr/local/www/services_captiveportal_zones.php:115 #: src/usr/local/www/services_dhcp.php:690 -#: src/usr/local/www/services_dhcp.php:1319 -#: src/usr/local/www/services_dhcp_edit.php:487 -#: src/usr/local/www/services_dhcpv6.php:1005 +#: src/usr/local/www/services_dhcp.php:1333 +#: src/usr/local/www/services_dhcp_edit.php:489 +#: src/usr/local/www/services_dhcpv6.php:1019 #: src/usr/local/www/services_dhcpv6_edit.php:274 -#: src/usr/local/www/services_dnsmasq.php:377 -#: src/usr/local/www/services_dnsmasq.php:457 -#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:190 +#: src/usr/local/www/services_dnsmasq.php:355 +#: src/usr/local/www/services_dnsmasq.php:429 +#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:191 #: src/usr/local/www/services_dnsmasq_edit.php:269 #: src/usr/local/www/services_dnsmasq_edit.php:318 #: src/usr/local/www/services_dyndns.php:124 @@ -5877,242 +5862,258 @@ msgstr "" #: src/usr/local/www/services_pppoe_edit.php:383 #: src/usr/local/www/services_rfc2136.php:117 #: src/usr/local/www/services_rfc2136_edit.php:322 -#: src/usr/local/www/services_unbound.php:441 -#: src/usr/local/www/services_unbound.php:517 +#: src/usr/local/www/services_unbound.php:470 +#: src/usr/local/www/services_unbound.php:546 #: src/usr/local/www/services_unbound_acls.php:270 #: src/usr/local/www/services_unbound_acls.php:296 -#: src/usr/local/www/services_unbound_acls.php:328 -#: src/usr/local/www/services_unbound_domainoverride_edit.php:169 +#: src/usr/local/www/services_unbound_acls.php:332 +#: src/usr/local/www/services_unbound_domainoverride_edit.php:173 #: src/usr/local/www/services_unbound_host_edit.php:270 #: src/usr/local/www/services_unbound_host_edit.php:319 -#: src/usr/local/www/services_wol.php:202 +#: src/usr/local/www/services_wol.php:210 #: src/usr/local/www/services_wol_edit.php:173 #: src/usr/local/www/status_dhcp_leases.php:382 #: src/usr/local/www/status_gateway_groups.php:98 #: src/usr/local/www/status_gateways.php:100 -#: src/usr/local/www/status_graph.php:196 -#: src/usr/local/www/status_ipsec.php:132 +#: src/usr/local/www/status_graph.php:211 +#: src/usr/local/www/status_ipsec.php:509 #: src/usr/local/www/status_lb_pool.php:166 #: src/usr/local/www/status_lb_vs.php:100 -#: src/usr/local/www/status_services.php:131 +#: src/usr/local/www/status_services.php:121 #: src/usr/local/www/status_upnp.php:107 #: src/usr/local/www/system_advanced_sysctl.php:206 #: src/usr/local/www/system_advanced_sysctl.php:263 -#: src/usr/local/www/system_gateway_groups.php:153 -#: src/usr/local/www/system_gateway_groups_edit.php:313 +#: src/usr/local/www/system_gateway_groups.php:167 #: src/usr/local/www/system_gateway_groups_edit.php:342 +#: src/usr/local/www/system_gateway_groups_edit.php:371 #: src/usr/local/www/system_gateways.php:280 #: src/usr/local/www/system_gateways_edit.php:698 -#: src/usr/local/www/system_groupmanager.php:250 -#: src/usr/local/www/system_groupmanager.php:305 -#: src/usr/local/www/system_groupmanager.php:403 +#: src/usr/local/www/system_groupmanager.php:262 +#: src/usr/local/www/system_groupmanager.php:321 +#: src/usr/local/www/system_groupmanager.php:426 #: src/usr/local/www/system_routes.php:279 #: src/usr/local/www/system_routes_edit.php:306 #: src/usr/local/www/system_usermanager.php:380 -#: src/usr/local/www/vpn_ipsec_phase1.php:729 +#: src/usr/local/www/vpn_ipsec_phase1.php:727 #: src/usr/local/www/vpn_ipsec_phase2.php:619 #: src/usr/local/www/vpn_openvpn_client.php:555 -#: src/usr/local/www/vpn_openvpn_client.php:821 -#: src/usr/local/www/vpn_openvpn_csc.php:372 -#: src/usr/local/www/vpn_openvpn_csc.php:671 +#: src/usr/local/www/vpn_openvpn_client.php:820 +#: src/usr/local/www/vpn_openvpn_csc.php:376 +#: src/usr/local/www/vpn_openvpn_csc.php:675 #: src/usr/local/www/vpn_openvpn_server.php:695 -#: src/usr/local/www/vpn_openvpn_server.php:1203 +#: src/usr/local/www/vpn_openvpn_server.php:1208 #: src/usr/local/www/widgets/widgets/ipsec.widget.php:235 #: src/usr/local/www/widgets/widgets/load_balancer_status.widget.php:95 #: src/usr/local/www/widgets/widgets/services_status.widget.php:109 msgid "Description" msgstr "" -#: src/etc/inc/shaper.inc:1527 -msgid "Delete queue from interface" -msgstr "" - -#: src/etc/inc/shaper.inc:1895 src/etc/inc/shaper.inc:2671 -#: src/etc/inc/shaper.inc:2982 -msgid "Bandwidth in percentage should be between 1 and 100 bounds." +#: src/etc/inc/shaper.inc:1599 +msgid "Delete Queue from this Interface" msgstr "" -#: src/etc/inc/shaper.inc:1914 +#: src/etc/inc/shaper.inc:1957 msgid "upperlimit service curve defined but missing (d) value" msgstr "" -#: src/etc/inc/shaper.inc:1917 +#: src/etc/inc/shaper.inc:1960 msgid "" "upperlimit service curve defined but missing initial bandwidth (m1) value" msgstr "" -#: src/etc/inc/shaper.inc:1920 +#: src/etc/inc/shaper.inc:1963 msgid "upperlimit m1 value needs to be Kb, Mb, Gb, or %" msgstr "" -#: src/etc/inc/shaper.inc:1923 +#: src/etc/inc/shaper.inc:1966 msgid "upperlimit d value needs to be numeric" msgstr "" -#: src/etc/inc/shaper.inc:1926 +#: src/etc/inc/shaper.inc:1969 msgid "upperlimit m2 value needs to be Kb, Mb, Gb, or %" msgstr "" -#: src/etc/inc/shaper.inc:1943 +#: src/etc/inc/shaper.inc:1986 msgid "linkshare service curve defined but missing (d) value" msgstr "" -#: src/etc/inc/shaper.inc:1946 +#: src/etc/inc/shaper.inc:1989 msgid "" "linkshare service curve defined but missing initial bandwidth (m1) value" msgstr "" -#: src/etc/inc/shaper.inc:1949 +#: src/etc/inc/shaper.inc:1992 msgid "linkshare m1 value needs to be Kb, Mb, Gb, or %" msgstr "" -#: src/etc/inc/shaper.inc:1952 +#: src/etc/inc/shaper.inc:1995 msgid "linkshare d value needs to be numeric" msgstr "" -#: src/etc/inc/shaper.inc:1955 +#: src/etc/inc/shaper.inc:1998 msgid "linkshare m2 value needs to be Kb, Mb, Gb, or %" msgstr "" -#: src/etc/inc/shaper.inc:1958 +#: src/etc/inc/shaper.inc:2001 msgid "realtime service curve defined but missing (d) value" msgstr "" -#: src/etc/inc/shaper.inc:1961 +#: src/etc/inc/shaper.inc:2004 msgid "realtime service curve defined but missing initial bandwidth (m1) value" msgstr "" -#: src/etc/inc/shaper.inc:1979 +#: src/etc/inc/shaper.inc:2022 msgid "realtime m1 value needs to be Kb, Mb, Gb, or %" msgstr "" -#: src/etc/inc/shaper.inc:1982 +#: src/etc/inc/shaper.inc:2025 msgid "realtime d value needs to be numeric" msgstr "" -#: src/etc/inc/shaper.inc:1985 +#: src/etc/inc/shaper.inc:2028 msgid "realtime m2 value needs to be Kb, Mb, Gb, or %" msgstr "" -#: src/etc/inc/shaper.inc:2252 +#: src/etc/inc/shaper.inc:2295 msgid "Service Curve (sc)" msgstr "" -#: src/etc/inc/shaper.inc:2274 src/etc/inc/shaper.inc:2832 -#: src/etc/inc/shaper.inc:3133 +#: src/etc/inc/shaper.inc:2317 src/etc/inc/shaper.inc:2829 +#: src/etc/inc/shaper.inc:3100 msgid "Choose the amount of bandwidth for this queue" msgstr "" -#: src/etc/inc/shaper.inc:2278 +#: src/etc/inc/shaper.inc:2321 msgid "Max bandwidth for queue." msgstr "" -#: src/etc/inc/shaper.inc:2292 src/etc/inc/shaper.inc:2325 -#: src/etc/inc/shaper.inc:2357 +#: src/etc/inc/shaper.inc:2335 src/etc/inc/shaper.inc:2368 +#: src/etc/inc/shaper.inc:2400 msgid "m1" msgstr "" -#: src/etc/inc/shaper.inc:2299 src/etc/inc/shaper.inc:2332 -#: src/etc/inc/shaper.inc:2364 +#: src/etc/inc/shaper.inc:2342 src/etc/inc/shaper.inc:2375 +#: src/etc/inc/shaper.inc:2407 msgid "d" msgstr "" -#: src/etc/inc/shaper.inc:2306 src/etc/inc/shaper.inc:2339 -#: src/etc/inc/shaper.inc:2371 +#: src/etc/inc/shaper.inc:2349 src/etc/inc/shaper.inc:2382 +#: src/etc/inc/shaper.inc:2414 msgid "m2" msgstr "" -#: src/etc/inc/shaper.inc:2311 +#: src/etc/inc/shaper.inc:2354 msgid "Min bandwidth for queue." msgstr "" -#: src/etc/inc/shaper.inc:2343 +#: src/etc/inc/shaper.inc:2386 msgid "B/W share of a backlogged queue." msgstr "" -#: src/etc/inc/shaper.inc:2651 +#: src/etc/inc/shaper.inc:2678 msgid "Priority must be an integer between 1 and 7." msgstr "" -#: src/etc/inc/shaper.inc:2838 +#: src/etc/inc/shaper.inc:2835 msgid "Scheduler option" msgstr "" -#: src/etc/inc/shaper.inc:2961 +#: src/etc/inc/shaper.inc:2958 msgid "Priority must be an integer between 1 and 255." msgstr "" -#: src/etc/inc/shaper.inc:3139 +#: src/etc/inc/shaper.inc:3106 msgid "Scheduler specific options" msgstr "" -#: src/etc/inc/shaper.inc:3142 +#: src/etc/inc/shaper.inc:3109 msgid "Number of buckets available" msgstr "" -#: src/etc/inc/shaper.inc:3149 +#: src/etc/inc/shaper.inc:3116 msgid "Bandwidth limit for hosts to not saturate link" msgstr "" -#: src/etc/inc/shaper.inc:3351 +#: src/etc/inc/shaper.inc:3318 msgid "Plr must be a value between 0 and 1." msgstr "" -#: src/etc/inc/shaper.inc:3355 +#: src/etc/inc/shaper.inc:3322 msgid "Buckets must be an integer between 16 and 65535." msgstr "" -#: src/etc/inc/shaper.inc:3368 +#: src/etc/inc/shaper.inc:3335 msgid "IPV4 bit mask must be blank or numeric value between 1 and 32." msgstr "" -#: src/etc/inc/shaper.inc:3373 +#: src/etc/inc/shaper.inc:3340 msgid "IPV6 bit mask must be blank or numeric value between 1 and 128." msgstr "" -#: src/etc/inc/shaper.inc:3527 +#: src/etc/inc/shaper.inc:3436 +#, php-format +msgid "SHAPER: Could not create queue %1$s on interface %2$s because: %3$s" +msgstr "" + +#: src/etc/inc/shaper.inc:3494 #, php-format msgid "Bandwidth for schedule %s must be an integer." msgstr "" -#: src/etc/inc/shaper.inc:3529 +#: src/etc/inc/shaper.inc:3496 #, php-format msgid "Burst for schedule %s must be an integer." msgstr "" -#: src/etc/inc/shaper.inc:3536 -msgid "You need to specify a schedule for every additional entry" +#: src/etc/inc/shaper.inc:3503 +msgid "A schedule needs to be specified for every additional entry." msgstr "" -#: src/etc/inc/shaper.inc:3539 -msgid "If more than one bandwidth configured all schedules need to be selected" +#: src/etc/inc/shaper.inc:3506 +msgid "" +"If more than one bandwidth configured all schedules need to be selected." msgstr "" -#: src/etc/inc/shaper.inc:3542 -msgid "At least one bw specification is necessary" +#: src/etc/inc/shaper.inc:3509 +msgid "At least one bw specification is necessary." msgstr "" -#: src/etc/inc/shaper.inc:3545 +#: src/etc/inc/shaper.inc:3512 msgid "Delay must be an integer." msgstr "" -#: src/etc/inc/shaper.inc:3849 -#: src/usr/local/www/diag_dump_states_sources.php:179 -#: src/usr/local/www/diag_gmirror.php:279 -#: src/usr/local/www/diag_gmirror.php:297 src/usr/local/www/diag_tables.php:316 -#: src/usr/local/www/load_balancer_pool_edit.php:461 -#: src/usr/local/www/load_balancer_pool_edit.php:466 -#: src/usr/local/www/pkg_mgr_installed.php:211 -#: src/usr/local/www/widgets/widgets/installed_packages.widget.php:151 -msgid "Remove" +#: src/etc/inc/shaper.inc:3816 src/usr/local/www/firewall_aliases_edit.php:743 +#: src/usr/local/www/firewall_nat.php:483 +#: src/usr/local/www/firewall_nat_1to1.php:278 +#: src/usr/local/www/firewall_nat_npt.php:267 +#: src/usr/local/www/firewall_nat_out.php:536 +#: src/usr/local/www/firewall_rules.php:849 +#: src/usr/local/www/firewall_schedule_edit.php:652 +#: src/usr/local/www/firewall_schedule_edit.php:1149 +#: src/usr/local/www/interfaces_assign.php:573 +#: src/usr/local/www/interfaces_qinq_edit.php:332 +#: src/usr/local/www/interfaces_vlan.php:166 +#: src/usr/local/www/pkg_edit.php:1463 src/usr/local/www/services_dhcp.php:1221 +#: src/usr/local/www/services_dhcpv6.php:960 +#: src/usr/local/www/services_dnsmasq_edit.php:322 +#: src/usr/local/www/services_igmpproxy_edit.php:264 +#: src/usr/local/www/services_ntpd.php:282 +#: src/usr/local/www/services_ntpd_acls.php:320 +#: src/usr/local/www/services_pppoe_edit.php:557 +#: src/usr/local/www/services_router_advertisements.php:388 +#: src/usr/local/www/services_unbound_acls.php:300 +#: src/usr/local/www/services_unbound_host_edit.php:323 +#: src/usr/local/www/system_certmanager.php:788 +#: src/usr/local/www/system_usermanager.php:551 +msgid "Delete" msgstr "" -#: src/etc/inc/shaper.inc:3856 -msgid "Add another schedule" +#: src/etc/inc/shaper.inc:3824 +msgid "Add Schedule" msgstr "" -#: src/etc/inc/shaper.inc:3879 src/etc/inc/shaper.inc:4201 -#: src/usr/local/www/firewall_shaper.php:438 +#: src/etc/inc/shaper.inc:3847 src/etc/inc/shaper.inc:4169 +#: src/usr/local/www/firewall_shaper.php:417 #: src/usr/local/www/firewall_shaper_queues.php:245 #: src/usr/local/www/firewall_shaper_vinterface.php:73 #: src/usr/local/www/firewall_shaper_vinterface.php:417 @@ -6120,14 +6121,14 @@ msgstr "" msgid "Limiters" msgstr "" -#: src/etc/inc/shaper.inc:3883 src/etc/inc/shaper.inc:4205 -#: src/usr/local/www/firewall_nat_1to1_edit.php:524 -#: src/usr/local/www/firewall_rules.php:796 -#: src/usr/local/www/interfaces.php:1714 src/usr/local/www/interfaces.php:2986 -#: src/usr/local/www/services_captiveportal.php:577 -#: src/usr/local/www/services_captiveportal_vouchers.php:514 -#: src/usr/local/www/services_dhcp.php:794 -#: src/usr/local/www/services_dhcp.php:1235 +#: src/etc/inc/shaper.inc:3851 src/etc/inc/shaper.inc:4173 +#: src/usr/local/www/firewall_nat_1to1_edit.php:521 +#: src/usr/local/www/firewall_rules.php:800 +#: src/usr/local/www/interfaces.php:1720 src/usr/local/www/interfaces.php:2993 +#: src/usr/local/www/services_captiveportal.php:578 +#: src/usr/local/www/services_captiveportal_vouchers.php:515 +#: src/usr/local/www/services_dhcp.php:790 +#: src/usr/local/www/services_dhcp.php:1249 #: src/usr/local/www/services_dhcp_relay.php:178 #: src/usr/local/www/services_dhcpv6_relay.php:176 #: src/usr/local/www/services_dnsmasq.php:237 @@ -6135,26 +6136,26 @@ msgstr "" #: src/usr/local/www/services_rfc2136_edit.php:199 #: src/usr/local/www/services_snmp.php:229 #: src/usr/local/www/services_snmp.php:272 -#: src/usr/local/www/services_unbound.php:295 -#: src/usr/local/www/vpn_ipsec_phase1.php:894 -#: src/usr/local/www/vpn_l2tp.php:245 src/usr/local/www/vpn_l2tp.php:331 +#: src/usr/local/www/services_unbound.php:301 +#: src/usr/local/www/vpn_ipsec_phase1.php:892 +#: src/usr/local/www/vpn_l2tp.php:242 src/usr/local/www/vpn_l2tp.php:328 #: src/usr/local/www/diag_routes.php:114 msgid "Enable" msgstr "" -#: src/etc/inc/shaper.inc:3936 src/etc/inc/shaper.inc:4240 +#: src/etc/inc/shaper.inc:3904 src/etc/inc/shaper.inc:4208 msgid "Source addresses" msgstr "" -#: src/etc/inc/shaper.inc:3936 src/etc/inc/shaper.inc:4240 +#: src/etc/inc/shaper.inc:3904 src/etc/inc/shaper.inc:4208 msgid "Destination addresses" msgstr "" -#: src/etc/inc/shaper.inc:3934 src/etc/inc/shaper.inc:4238 +#: src/etc/inc/shaper.inc:3902 src/etc/inc/shaper.inc:4206 msgid "Mask" msgstr "" -#: src/etc/inc/shaper.inc:3937 src/etc/inc/shaper.inc:4241 +#: src/etc/inc/shaper.inc:3905 src/etc/inc/shaper.inc:4209 msgid "" "If \"source\" or \"destination\" slots is chosen a dynamic pipe with the " "bandwidth, delay, packet loss and queue size given above will be created for " @@ -6162,123 +6163,159 @@ msgid "" "possible to easily specify bandwidth limits per host." msgstr "" -#: src/etc/inc/shaper.inc:3948 src/etc/inc/shaper.inc:4252 +#: src/etc/inc/shaper.inc:3916 src/etc/inc/shaper.inc:4220 msgid "IPV4 mask bits<br />255.255.255.255/?" msgstr "" -#: src/etc/inc/shaper.inc:3955 src/etc/inc/shaper.inc:4259 +#: src/etc/inc/shaper.inc:3923 src/etc/inc/shaper.inc:4227 msgid "" "IPV6 mask bits<br /><span style=\"font-family:consolas\">ffff:ffff:ffff:ffff:" "ffff:ffff:ffff:ffff/?</span>" msgstr "" -#: src/etc/inc/shaper.inc:3964 src/etc/inc/shaper.inc:4268 -#: src/usr/local/www/firewall_aliases_edit.php:685 +#: src/etc/inc/shaper.inc:3932 src/etc/inc/shaper.inc:4236 +#: src/usr/local/www/firewall_aliases_edit.php:682 #: src/usr/local/www/firewall_aliases_import.php:211 -#: src/usr/local/www/firewall_nat_1to1_edit.php:516 +#: src/usr/local/www/firewall_nat_1to1_edit.php:513 #: src/usr/local/www/firewall_nat_edit.php:900 #: src/usr/local/www/firewall_nat_npt_edit.php:270 -#: src/usr/local/www/firewall_nat_out_edit.php:644 -#: src/usr/local/www/firewall_virtual_ip_edit.php:458 -#: src/usr/local/www/interfaces_gif_edit.php:258 -#: src/usr/local/www/interfaces_gre_edit.php:259 -#: src/usr/local/www/interfaces_qinq_edit.php:293 +#: src/usr/local/www/firewall_nat_out_edit.php:643 +#: src/usr/local/www/firewall_virtual_ip_edit.php:467 +#: src/usr/local/www/interfaces_gif_edit.php:262 +#: src/usr/local/www/interfaces_gre_edit.php:265 +#: src/usr/local/www/interfaces_qinq_edit.php:290 #: src/usr/local/www/interfaces_wireless_edit.php:235 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:229 -#: src/usr/local/www/services_captiveportal_zones_edit.php:132 -#: src/usr/local/www/services_dhcp_edit.php:490 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:228 +#: src/usr/local/www/services_captiveportal_zones_edit.php:129 +#: src/usr/local/www/services_dhcp_edit.php:492 #: src/usr/local/www/services_dhcpv6_edit.php:277 -#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:193 +#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:194 #: src/usr/local/www/services_dnsmasq_edit.php:272 #: src/usr/local/www/services_dyndns_edit.php:435 #: src/usr/local/www/services_igmpproxy_edit.php:198 #: src/usr/local/www/services_rfc2136_edit.php:325 -#: src/usr/local/www/services_unbound_domainoverride_edit.php:172 +#: src/usr/local/www/services_unbound_domainoverride_edit.php:176 #: src/usr/local/www/services_unbound_host_edit.php:273 #: src/usr/local/www/services_wol_edit.php:176 -#: src/usr/local/www/system_gateway_groups_edit.php:345 -#: src/usr/local/www/system_gateways_edit.php:701 +#: src/usr/local/www/system_gateway_groups_edit.php:374 #: src/usr/local/www/system_routes_edit.php:309 -#: src/usr/local/www/vpn_ipsec_phase1.php:732 +#: src/usr/local/www/vpn_ipsec_phase1.php:730 #: src/usr/local/www/vpn_ipsec_phase2.php:622 #: src/usr/local/www/vpn_openvpn_client.php:558 #: src/usr/local/www/vpn_openvpn_server.php:698 -msgid "You may enter a description here for your reference (not parsed)." +msgid "" +"A description may be entered here for administrative reference (not parsed)." msgstr "" -#: src/etc/inc/shaper.inc:3968 src/etc/inc/shaper.inc:4272 -#: src/usr/local/www/firewall_rules_edit.php:1444 -#: src/usr/local/www/vpn_ipsec_phase1.php:859 +#: src/etc/inc/shaper.inc:3936 src/etc/inc/shaper.inc:4240 +#: src/usr/local/www/firewall_rules_edit.php:1454 +#: src/usr/local/www/firewall_rules_edit.php:1460 +#: src/usr/local/www/interfaces_bridge_edit.php:458 +#: src/usr/local/www/vpn_ipsec_phase1.php:857 msgid "Advanced Options" msgstr "" -#: src/etc/inc/shaper.inc:3972 +#: src/etc/inc/shaper.inc:3940 msgid "Delay (ms)" msgstr "" -#: src/etc/inc/shaper.inc:3975 -msgid "In most cases, you should specify 0 here (or leave the field empty)" +#: src/etc/inc/shaper.inc:3943 +msgid "" +"In most cases, zero (0) should specified here (or leave the field empty)." msgstr "" -#: src/etc/inc/shaper.inc:3979 src/etc/inc/shaper.inc:4285 +#: src/etc/inc/shaper.inc:3947 src/etc/inc/shaper.inc:4253 msgid "Packet Loss Rate" msgstr "" -#: src/etc/inc/shaper.inc:3983 src/etc/inc/shaper.inc:4289 +#: src/etc/inc/shaper.inc:3951 msgid "" -"In most cases, you should specify 0 here (or leave the field empty). A value " -"of 0.001 means one packet in 1000 gets dropped" +"In most cases, zero (0) should be specified here (or leave the field empty). " +"A value of 0.001 means one packet in 1000 gets dropped." msgstr "" -#: src/etc/inc/shaper.inc:3988 src/etc/inc/shaper.inc:4294 +#: src/etc/inc/shaper.inc:3956 src/etc/inc/shaper.inc:4262 msgid "Queue size (slots)" msgstr "" -#: src/etc/inc/shaper.inc:3991 src/etc/inc/shaper.inc:4297 +#: src/etc/inc/shaper.inc:3959 src/etc/inc/shaper.inc:4265 msgid "" -"In most cases, you should leave the field empty. All packets in this pipe " -"are placed into a fixed-size queue first, then they are delayed by value " +"In most cases, the field should be left empty. All packets in this pipe are " +"placed into a fixed-size queue first, then they are delayed by value " "specified in the Delay field, and then they are delivered to their " "destination." msgstr "" -#: src/etc/inc/shaper.inc:3996 src/etc/inc/shaper.inc:4302 +#: src/etc/inc/shaper.inc:3964 src/etc/inc/shaper.inc:4270 msgid "Bucket size (slots)" msgstr "" -#: src/etc/inc/shaper.inc:3999 src/etc/inc/shaper.inc:4305 +#: src/etc/inc/shaper.inc:3967 msgid "" -"In most cases, you should leave this field empty. It increases the hash size " -"set" +"In most cases, this field should be left empty. It increases the hash size " +"set." msgstr "" -#: src/etc/inc/shaper.inc:4070 +#: src/etc/inc/shaper.inc:4038 msgid "Weight must be an integer between 1 and 100." msgstr "" -#: src/etc/inc/shaper.inc:4276 src/usr/local/www/system_gateways_edit.php:741 +#: src/etc/inc/shaper.inc:4244 src/usr/local/www/system_gateways_edit.php:725 msgid "Weight" msgstr "" -#: src/etc/inc/shaper.inc:4280 +#: src/etc/inc/shaper.inc:4248 msgid "" "For queues under the same parent this specifies the share that a queue " -"gets(values range from 1 to 100), you can leave it blank otherwise" +"gets(values range from 1 to 100), it can be left blank otherwise." +msgstr "" + +#: src/etc/inc/shaper.inc:4257 +msgid "" +"In most cases, zero (0) should be specified here (or leave the field empty). " +"A value of 0.001 means one packet in 1000 gets dropped" +msgstr "" + +#: src/etc/inc/shaper.inc:4273 +msgid "" +"In most cases, this field should be left empty. It increases the hash size " +"set" msgstr "" -#: src/etc/inc/shaper.inc:4691 -msgid "Clone shaper on the I/F" +#: src/etc/inc/shaper.inc:4660 +msgid "Clone Shaper to this Interface" msgstr "" -#: src/etc/inc/shaper.inc:4700 +#: src/etc/inc/shaper.inc:4669 #, php-format msgid "Welcome to the %s Traffic Shaper." msgstr "" -#: src/etc/inc/shaper.inc:4701 +#: src/etc/inc/shaper.inc:4672 +#, php-format +msgid "The tree on the left navigates through the %s." +msgstr "" + +#: src/etc/inc/shaper.inc:4673 +msgid "queues" +msgstr "" + +#: src/etc/inc/shaper.inc:4674 +msgid "limiters" +msgstr "" + +#: src/etc/inc/shaper.inc:4676 +#, php-format msgid "" -"The tree on the left helps you navigate through the queues.<br />Buttons at " -"the bottom represent queue actions and are activated accordingly." +"Buttons at the bottom represent %s actions and are activated accordingly." +msgstr "" + +#: src/etc/inc/shaper.inc:4677 src/usr/local/www/diag_pftop.php:131 +msgid "queue" +msgstr "" + +#: src/etc/inc/shaper.inc:4678 +msgid "limiter" msgstr "" #: src/etc/inc/system.inc:463 @@ -6308,126 +6345,114 @@ msgstr "" msgid "Starting syslog..." msgstr "" -#: src/etc/inc/system.inc:1042 +#: src/etc/inc/system.inc:1045 #, php-format msgid "Error: cannot open syslog.conf in system_syslogd_start().%s" msgstr "" -#: src/etc/inc/system.inc:1106 +#: src/etc/inc/system.inc:1109 msgid "Creating SSL Certificate for this host" msgstr "" -#: src/etc/inc/system.inc:1110 +#: src/etc/inc/system.inc:1113 #, php-format msgid "webConfigurator default (%s)" msgstr "" -#: src/etc/inc/system.inc:1122 +#: src/etc/inc/system.inc:1125 #, php-format msgid "Error creating WebGUI Certificate: openssl library returns: %s" msgstr "" -#: src/etc/inc/system.inc:1131 +#: src/etc/inc/system.inc:1134 #, php-format msgid "Generated new self-signed HTTPS certificate (%s)" msgstr "" -#: src/etc/inc/system.inc:1139 +#: src/etc/inc/system.inc:1142 msgid "Starting webConfigurator..." msgstr "" -#: src/etc/inc/system.inc:1189 src/etc/inc/system.inc:2050 -#: src/etc/inc/system.inc:2053 +#: src/etc/inc/system.inc:1192 src/etc/inc/system.inc:2025 +#: src/etc/inc/system.inc:2028 msgid "failed!" msgstr "" -#: src/etc/inc/system.inc:1378 +#: src/etc/inc/system.inc:1390 #, php-format msgid "Error: cannot open certificate file in system_webgui_start().%s" msgstr "" -#: src/etc/inc/system.inc:1391 +#: src/etc/inc/system.inc:1403 #, php-format msgid "Error: cannot open certificate key file in system_webgui_start().%s" msgstr "" -#: src/etc/inc/system.inc:1418 +#: src/etc/inc/system.inc:1430 #, php-format msgid "Error: cannot open %s in system_generate_nginx_config().%s" msgstr "" -#: src/etc/inc/system.inc:1467 +#: src/etc/inc/system.inc:1479 msgid "Setting timezone..." msgstr "" -#: src/etc/inc/system.inc:1855 +#: src/etc/inc/system.inc:1867 #, php-format msgid "Could not open %s/ntpd.conf for writing" msgstr "" -#: src/etc/inc/system.inc:1887 -msgid "Syncing system time before startup..." -msgstr "" - -#: src/etc/inc/system.inc:2005 +#: src/etc/inc/system.inc:1980 #, php-format msgid "Error: cannot open dmesg.boot in system_dmesg_save().%s" msgstr "" -#: src/etc/inc/system.inc:2029 +#: src/etc/inc/system.inc:2004 msgid "Setting hard disk standby... " msgstr "" -#: src/etc/inc/system.inc:2166 -msgid "Generic PC" -msgstr "" - -#: src/etc/inc/system.inc:2170 -msgid "Generic PC (CD-ROM)" -msgstr "" - -#: src/etc/inc/system.inc:2206 +#: src/etc/inc/system.inc:2216 msgid "PC Engines WRAP" msgstr "" -#: src/etc/inc/system.inc:2210 src/etc/inc/system.inc:2229 +#: src/etc/inc/system.inc:2220 src/etc/inc/system.inc:2239 msgid "PC Engines ALIX" msgstr "" -#: src/etc/inc/system.inc:2234 +#: src/etc/inc/system.inc:2244 msgid "embedded (unknown)" msgstr "" -#: src/etc/inc/unbound.inc:802 src/usr/local/www/services_dhcpv6.php:810 +#: src/etc/inc/unbound.inc:801 src/usr/local/www/services_dhcpv6.php:812 #: src/usr/local/www/services_unbound_acls.php:265 msgid "Deny" msgstr "" -#: src/etc/inc/unbound.inc:803 src/usr/local/www/services_unbound_acls.php:265 +#: src/etc/inc/unbound.inc:802 src/usr/local/www/services_unbound_acls.php:265 msgid "Refuse" msgstr "" -#: src/etc/inc/unbound.inc:804 +#: src/etc/inc/unbound.inc:803 msgid "Static" msgstr "" -#: src/etc/inc/unbound.inc:805 +#: src/etc/inc/unbound.inc:804 msgid "Transparent" msgstr "" -#: src/etc/inc/unbound.inc:806 +#: src/etc/inc/unbound.inc:805 msgid "Type Transparent" msgstr "" -#: src/etc/inc/unbound.inc:808 +#: src/etc/inc/unbound.inc:807 msgid "Inform" msgstr "" -#: src/etc/inc/unbound.inc:809 +#: src/etc/inc/unbound.inc:808 msgid "Inform Deny" msgstr "" -#: src/etc/inc/unbound.inc:810 +#: src/etc/inc/unbound.inc:809 msgid "No Default" msgstr "" @@ -6509,8 +6534,8 @@ msgstr "" #: src/etc/inc/upgrade_config.inc:663 msgid "" -"This user is associated with the UNIX root user (you should associate this " -"privilege only with one single user)." +"This user is associated with the UNIX root user (this privilege should only " +"be associated with one single user)." msgstr "" #: src/etc/inc/upgrade_config.inc:682 @@ -6635,17 +6660,17 @@ msgid "" "interface will be disabled. Please reconfigure the interface." msgstr "" -#: src/etc/inc/upgrade_config.inc:4215 +#: src/etc/inc/upgrade_config.inc:4262 #, php-format msgid "DES is no longer supported, IPsec phase 1 item '%s' is being disabled." msgstr "" -#: src/etc/inc/upgrade_config.inc:4232 +#: src/etc/inc/upgrade_config.inc:4279 #, php-format msgid "DES is no longer supported, IPsec phase 2 item '%s' is being disabled." msgstr "" -#: src/etc/inc/upgrade_config.inc:4277 +#: src/etc/inc/upgrade_config.inc:4335 msgid "" "Layer 7 shaping is no longer supported. Its configuration has been removed." msgstr "" @@ -6656,11 +6681,11 @@ msgid "WARNING: Could not mark subsystem: %s dirty" msgstr "" #: src/etc/inc/util.inc:151 -msgid "WARNING: You must give a name as parameter to lock() function." +msgid "WARNING: A name must be given as parameter to lock() function." msgstr "" #: src/etc/inc/util.inc:170 -msgid "WARNING: You must give a name as parameter to try_lock() function." +msgid "WARNING: A name must be given as parameter to try_lock() function." msgstr "" #: src/etc/inc/util.inc:280 src/etc/inc/util.inc:305 @@ -6678,7 +6703,34 @@ msgstr "" msgid "Could not open shared memory for read %s" msgstr "" -#: src/etc/inc/util.inc:1651 +#: src/etc/inc/util.inc:1080 +#, php-format +msgid "" +"The %1$s name must be less than 32 characters long, may not consist of only " +"numbers, may not consist of only underscores, and may only contain the " +"following characters: %2$s" +msgstr "" + +#: src/etc/inc/util.inc:1087 +#, php-format +msgid "The %1$s name must not be either of the reserved words %2$s or %3$s." +msgstr "" + +#: src/etc/inc/util.inc:1094 +#, php-format +msgid "" +"The %1$s name must not be a well-known IP protocol name such as TCP, UDP, " +"ICMP etc." +msgstr "" + +#: src/etc/inc/util.inc:1101 +#, php-format +msgid "" +"The %1$s name must not be a well-known TCP or UDP port name such as ssh, " +"smtp, pop3, tftp, http, openvpn etc." +msgstr "" + +#: src/etc/inc/util.inc:1687 #, php-format msgid "The command '%1$s' returned exit code '%2$d', the output was '%3$s' " msgstr "" @@ -6790,109 +6842,109 @@ msgstr "" msgid "Syncing vouchers" msgstr "" -#: src/etc/inc/vpn.inc:271 +#: src/etc/inc/vpn.inc:274 msgid "Configuring IPsec VPN... " msgstr "" -#: src/etc/inc/vpn.inc:312 +#: src/etc/inc/vpn.inc:315 #, php-format msgid "" "IPsec ERROR: Could not find phase 1 source for connection %s. Omitting from " "configuration file." msgstr "" -#: src/etc/inc/vpn.inc:341 +#: src/etc/inc/vpn.inc:344 #, php-format msgid "The remote gateway %s already exists on another phase 1 entry" msgstr "" -#: src/etc/inc/vpn.inc:657 +#: src/etc/inc/vpn.inc:661 #, php-format msgid "Warning: Missing CRL data for %s" msgstr "" -#: src/etc/inc/vpn.inc:662 +#: src/etc/inc/vpn.inc:666 #, php-format msgid "Error: Cannot write IPsec CRL file for %s" msgstr "" -#: src/etc/inc/vpn.inc:686 +#: src/etc/inc/vpn.inc:690 #, php-format msgid "Error: Invalid phase1 certificate reference for %s" msgstr "" -#: src/etc/inc/vpn.inc:704 +#: src/etc/inc/vpn.inc:708 #, php-format msgid "Error: Cannot write phase1 key file for %s" msgstr "" -#: src/etc/inc/vpn.inc:711 +#: src/etc/inc/vpn.inc:715 #, php-format msgid "Error: Cannot write phase1 certificate file for %s" msgstr "" -#: src/etc/inc/vpn.inc:776 +#: src/etc/inc/vpn.inc:780 #, php-format msgid "Error: Invalid certificate hash info for %s" msgstr "" -#: src/etc/inc/vpn.inc:781 +#: src/etc/inc/vpn.inc:785 #, php-format msgid "Error: Cannot write IPsec CA file for %s" msgstr "" -#: src/etc/inc/vpn.inc:1406 +#: src/etc/inc/vpn.inc:1414 #, php-format msgid "No phase2 specifications for tunnel with REQID = %s" msgstr "" -#: src/etc/inc/vpn.inc:1524 +#: src/etc/inc/vpn.inc:1533 #, php-format msgid "Ignoring IPsec reload since there are no tunnels on interface %s" msgstr "" -#: src/etc/inc/vpn.inc:1530 +#: src/etc/inc/vpn.inc:1539 msgid "Forcefully reloading IPsec" msgstr "" -#: src/etc/inc/vpn.inc:1580 +#: src/etc/inc/vpn.inc:1589 msgid "Configuring PPPoE Server service... " msgstr "" -#: src/etc/inc/vpn.inc:1605 +#: src/etc/inc/vpn.inc:1614 #, php-format msgid "Error: cannot open mpd.conf in vpn_pppoe_configure()." msgstr "" -#: src/etc/inc/vpn.inc:1727 +#: src/etc/inc/vpn.inc:1736 #, php-format msgid "Error: cannot open mpd.links in vpn_pppoe_configure()." msgstr "" -#: src/etc/inc/vpn.inc:1754 +#: src/etc/inc/vpn.inc:1763 #, php-format msgid "Error: cannot open mpd.secret in vpn_pppoe_configure()." msgstr "" -#: src/etc/inc/vpn.inc:1788 +#: src/etc/inc/vpn.inc:1797 msgid "done" msgstr "" -#: src/etc/inc/vpn.inc:1810 +#: src/etc/inc/vpn.inc:1819 msgid "Configuring l2tp VPN service... " msgstr "" -#: src/etc/inc/vpn.inc:1849 +#: src/etc/inc/vpn.inc:1858 #, php-format msgid "Error: cannot open mpd.conf in vpn_l2tp_configure()." msgstr "" -#: src/etc/inc/vpn.inc:1952 +#: src/etc/inc/vpn.inc:1961 #, php-format msgid "Error: cannot open mpd.links in vpn_l2tp_configure()." msgstr "" -#: src/etc/inc/vpn.inc:1979 +#: src/etc/inc/vpn.inc:1988 #, php-format msgid "Error: cannot open mpd.secret in vpn_l2tp_configure()." msgstr "" @@ -7073,13 +7125,51 @@ msgid "no info" msgstr "" #: src/usr/local/www/classes/Form/Section.class.php:85 -#: src/usr/local/www/diag_gmirror.php:88 src/usr/local/www/diag_gmirror.php:231 +#: src/usr/local/www/diag_gmirror.php:88 src/usr/local/www/diag_gmirror.php:232 +#: src/usr/local/www/diag_gmirror.php:234 +#: src/usr/local/www/pkg_mgr_install.php:348 +#: src/usr/local/www/pkg_mgr_install.php:350 +#: src/usr/local/www/pkg_mgr_install.php:359 +#: src/usr/local/www/pkg_mgr_install.php:361 msgid "Confirm" msgstr "" +#: src/usr/local/www/classes/Form.class.php:45 +#: src/usr/local/www/diag_confbak.php:207 src/usr/local/www/diag_edit.php:157 +#: src/usr/local/www/diag_edit.php:159 src/usr/local/www/firewall_nat.php:487 +#: src/usr/local/www/firewall_nat.php:501 +#: src/usr/local/www/firewall_nat_1to1.php:282 +#: src/usr/local/www/firewall_nat_npt.php:271 +#: src/usr/local/www/firewall_nat_out.php:540 +#: src/usr/local/www/firewall_rules.php:853 +#: src/usr/local/www/firewall_rules.php:904 +#: src/usr/local/www/interfaces_assign.php:606 src/usr/local/www/pkg.php:627 +#: src/usr/local/www/pkg_edit.php:623 +#: src/usr/local/www/services_igmpproxy.php:172 +#: src/usr/local/www/services_igmpproxy.php:174 +#: src/usr/local/www/status_lb_pool.php:274 +#: src/usr/local/www/status_lb_pool.php:276 +#: src/usr/local/www/status_logs_common.inc:973 +#: src/usr/local/www/system_advanced_sysctl.php:139 +#: src/usr/local/www/system_authservers.php:114 +#: src/usr/local/www/system_camanager.php:353 +#: src/usr/local/www/system_camanager.php:383 +#: src/usr/local/www/system_certmanager.php:253 +#: src/usr/local/www/system_certmanager.php:561 +#: src/usr/local/www/system_certmanager.php:591 +#: src/usr/local/www/system_crlmanager.php:295 +#: src/usr/local/www/system_crlmanager.php:379 +#: src/usr/local/www/widgets/widgets/log.widget.php:296 +#: src/usr/local/www/widgets/widgets/rss.widget.php:190 +#: src/usr/local/www/widgets/widgets/services_status.widget.php:169 +#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:273 +#: src/usr/local/www/widgets/widgets/traffic_graphs.widget.php:198 +msgid "Save" +msgstr "" + #: src/usr/local/www/crash_reporter.php:90 src/usr/local/www/diag_arp.php:286 #: src/usr/local/www/diag_authentication.php:103 -#: src/usr/local/www/diag_backup.php:596 src/usr/local/www/diag_command.php:125 +#: src/usr/local/www/diag_backup.php:596 src/usr/local/www/diag_command.php:124 #: src/usr/local/www/diag_confbak.php:135 #: src/usr/local/www/diag_defaults.php:73 src/usr/local/www/diag_dns.php:63 #: src/usr/local/www/diag_dump_states.php:108 @@ -7087,7 +7177,7 @@ msgstr "" #: src/usr/local/www/diag_edit.php:65 src/usr/local/www/diag_gmirror.php:67 #: src/usr/local/www/diag_halt.php:78 #: src/usr/local/www/diag_limiter_info.php:65 -#: src/usr/local/www/diag_nanobsd.php:74 src/usr/local/www/diag_ndp.php:128 +#: src/usr/local/www/diag_nanobsd.php:74 src/usr/local/www/diag_ndp.php:129 #: src/usr/local/www/diag_packet_capture.php:118 #: src/usr/local/www/diag_pf_info.php:65 src/usr/local/www/diag_pftop.php:65 #: src/usr/local/www/diag_ping.php:68 src/usr/local/www/diag_reboot.php:76 @@ -7097,7 +7187,7 @@ msgstr "" #: src/usr/local/www/diag_states_summary.php:221 #: src/usr/local/www/diag_system_activity.php:65 #: src/usr/local/www/diag_tables.php:64 src/usr/local/www/diag_testport.php:71 -#: src/usr/local/www/diag_traceroute.php:70 src/usr/local/www/head.inc:596 +#: src/usr/local/www/diag_traceroute.php:70 src/usr/local/www/head.inc:612 msgid "Diagnostics" msgstr "" @@ -7126,44 +7216,43 @@ msgid "Could not locate any crash data." msgstr "" #: src/usr/local/www/crash_reporter.php:153 -msgid "Unfortunately We Have Detected a Programming Bug" +msgid "Unfortunately a Programming Bug has been detected" msgstr "" #: src/usr/local/www/crash_reporter.php:157 msgid "" -"Would you like to submit the programming debug logs to the pfSense " -"developers for inspection?" +"The programming debug logs can be submitted to the pfSense developers for " +"inspection." msgstr "" #: src/usr/local/www/crash_reporter.php:158 msgid "" -"Please double check the contents to ensure you are comfortable sending this " -"information before clicking Yes." +"Please double check the contents to ensure this information is acceptable to " +"disclose before submitting." msgstr "" -#: src/usr/local/www/crash_reporter.php:164 +#: src/usr/local/www/crash_reporter.php:167 #: src/usr/local/www/diag_defaults.php:77 -#: src/usr/local/www/diag_defaults.php:105 src/usr/local/www/pkg.php:509 +#: src/usr/local/www/diag_defaults.php:105 src/usr/local/www/pkg.php:513 msgid "Yes" msgstr "" -#: src/usr/local/www/crash_reporter.php:164 +#: src/usr/local/www/crash_reporter.php:167 msgid "Submit this to the developers for inspection" msgstr "" -#: src/usr/local/www/crash_reporter.php:165 +#: src/usr/local/www/crash_reporter.php:171 #: src/usr/local/www/diag_defaults.php:68 -#: src/usr/local/www/diag_defaults.php:106 src/usr/local/www/diag_halt.php:106 -#: src/usr/local/www/diag_pf_info.php:67 src/usr/local/www/diag_reboot.php:147 -#: src/usr/local/www/pkg.php:507 +#: src/usr/local/www/diag_defaults.php:109 +#: src/usr/local/www/diag_pf_info.php:67 src/usr/local/www/pkg.php:511 msgid "No" msgstr "" -#: src/usr/local/www/crash_reporter.php:165 -msgid "Just delete the crash report and take me back to the Dashboard" +#: src/usr/local/www/crash_reporter.php:171 +msgid "Just delete the crash report and return to the Dashboard" msgstr "" -#: src/usr/local/www/diag_arp.php:286 src/usr/local/www/diag_arp.php:337 +#: src/usr/local/www/diag_arp.php:286 src/usr/local/www/diag_arp.php:338 #: src/usr/local/www/head.inc:365 msgid "ARP Table" msgstr "" @@ -7172,31 +7261,31 @@ msgstr "" msgid " Loading, please wait..." msgstr "" -#: src/usr/local/www/diag_arp.php:344 +#: src/usr/local/www/diag_arp.php:345 #: src/usr/local/www/diag_dump_states.php:163 -#: src/usr/local/www/diag_dump_states.php:202 -#: src/usr/local/www/diag_ndp.php:143 -#: src/usr/local/www/diag_packet_capture.php:301 +#: src/usr/local/www/diag_dump_states.php:212 +#: src/usr/local/www/diag_ndp.php:144 +#: src/usr/local/www/diag_packet_capture.php:313 #: src/usr/local/www/firewall_nat.php:238 #: src/usr/local/www/firewall_nat_1to1.php:183 #: src/usr/local/www/firewall_nat_1to1_edit.php:152 #: src/usr/local/www/firewall_nat_1to1_edit.php:155 -#: src/usr/local/www/firewall_nat_1to1_edit.php:446 +#: src/usr/local/www/firewall_nat_1to1_edit.php:443 #: src/usr/local/www/firewall_nat_edit.php:245 #: src/usr/local/www/firewall_nat_edit.php:248 -#: src/usr/local/www/firewall_nat_edit.php:711 +#: src/usr/local/www/firewall_nat_edit.php:709 #: src/usr/local/www/firewall_nat_npt.php:183 #: src/usr/local/www/firewall_nat_npt_edit.php:133 #: src/usr/local/www/firewall_nat_npt_edit.php:232 #: src/usr/local/www/firewall_nat_out.php:311 -#: src/usr/local/www/firewall_nat_out.php:562 -#: src/usr/local/www/firewall_nat_out_edit.php:181 +#: src/usr/local/www/firewall_nat_out.php:564 +#: src/usr/local/www/firewall_nat_out_edit.php:184 #: src/usr/local/www/firewall_nat_out_edit.php:493 -#: src/usr/local/www/firewall_rules_edit.php:1191 -#: src/usr/local/www/firewall_rules_edit.php:1199 +#: src/usr/local/www/firewall_rules_edit.php:1207 +#: src/usr/local/www/firewall_rules_edit.php:1215 #: src/usr/local/www/firewall_virtual_ip.php:296 -#: src/usr/local/www/firewall_virtual_ip_edit.php:392 -#: src/usr/local/www/interfaces_assign.php:539 +#: src/usr/local/www/firewall_virtual_ip_edit.php:401 +#: src/usr/local/www/interfaces_assign.php:544 #: src/usr/local/www/interfaces_bridge.php:136 #: src/usr/local/www/interfaces_gif.php:131 #: src/usr/local/www/interfaces_gre.php:131 @@ -7205,7 +7294,7 @@ msgstr "" #: src/usr/local/www/interfaces_qinq.php:143 #: src/usr/local/www/interfaces_vlan.php:140 #: src/usr/local/www/interfaces_wireless.php:133 -#: src/usr/local/www/services_captiveportal.php:246 +#: src/usr/local/www/services_captiveportal.php:247 #: src/usr/local/www/services_dhcp_relay.php:111 #: src/usr/local/www/services_dhcpv6_relay.php:112 #: src/usr/local/www/services_dyndns.php:120 @@ -7216,11 +7305,11 @@ msgstr "" #: src/usr/local/www/services_rfc2136.php:113 #: src/usr/local/www/services_rfc2136_edit.php:210 #: src/usr/local/www/services_wol.php:173 -#: src/usr/local/www/services_wol.php:200 +#: src/usr/local/www/services_wol.php:208 #: src/usr/local/www/services_wol_edit.php:106 #: src/usr/local/www/services_wol_edit.php:159 -#: src/usr/local/www/status_dhcp_leases.php:494 -#: src/usr/local/www/status_graph.php:166 +#: src/usr/local/www/status_dhcp_leases.php:497 +#: src/usr/local/www/status_graph.php:181 #: src/usr/local/www/status_logs_common.inc:503 #: src/usr/local/www/status_logs_common.inc:535 #: src/usr/local/www/status_logs_common.inc:538 @@ -7230,39 +7319,39 @@ msgstr "" #: src/usr/local/www/system_gateways_edit.php:142 #: src/usr/local/www/system_gateways_edit.php:621 #: src/usr/local/www/system_routes.php:278 -#: src/usr/local/www/vpn_ipsec_phase1.php:713 -#: src/usr/local/www/vpn_l2tp.php:264 +#: src/usr/local/www/vpn_ipsec_phase1.php:711 +#: src/usr/local/www/vpn_l2tp.php:261 #: src/usr/local/www/vpn_openvpn_client.php:490 #: src/usr/local/www/vpn_openvpn_server.php:680 #: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:74 msgid "Interface" msgstr "" -#: src/usr/local/www/diag_arp.php:346 src/usr/local/www/diag_ndp.php:141 -#: src/usr/local/www/services_captiveportal_mac.php:209 -#: src/usr/local/www/services_captiveportal_mac_edit.php:131 -#: src/usr/local/www/services_dhcp.php:1316 +#: src/usr/local/www/diag_arp.php:347 src/usr/local/www/diag_ndp.php:142 +#: src/usr/local/www/services_captiveportal_mac.php:210 +#: src/usr/local/www/services_captiveportal_mac_edit.php:132 +#: src/usr/local/www/services_dhcp.php:1330 #: src/usr/local/www/services_wol.php:180 -#: src/usr/local/www/services_wol.php:201 +#: src/usr/local/www/services_wol.php:209 #: src/usr/local/www/services_wol_edit.php:106 #: src/usr/local/www/services_wol_edit.php:166 #: src/usr/local/www/status_captiveportal.php:186 #: src/usr/local/www/status_dhcp_leases.php:380 #: src/usr/local/www/status_dhcpv6_leases.php:460 -#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:130 +#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:131 msgid "MAC address" msgstr "" -#: src/usr/local/www/diag_arp.php:347 src/usr/local/www/diag_dns.php:227 -#: src/usr/local/www/diag_ndp.php:142 src/usr/local/www/diag_ping.php:176 +#: src/usr/local/www/diag_arp.php:348 src/usr/local/www/diag_dns.php:231 +#: src/usr/local/www/diag_ndp.php:143 src/usr/local/www/diag_ping.php:164 #: src/usr/local/www/diag_testport.php:254 -#: src/usr/local/www/diag_traceroute.php:164 -#: src/usr/local/www/interfaces.php:1926 -#: src/usr/local/www/services_captiveportal_hostname.php:150 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:219 -#: src/usr/local/www/services_dhcp.php:1318 -#: src/usr/local/www/services_dhcp_edit.php:464 -#: src/usr/local/www/services_dhcpv6.php:1004 +#: src/usr/local/www/diag_traceroute.php:152 +#: src/usr/local/www/interfaces.php:1942 +#: src/usr/local/www/services_captiveportal_hostname.php:151 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:218 +#: src/usr/local/www/services_dhcp.php:1332 +#: src/usr/local/www/services_dhcp_edit.php:466 +#: src/usr/local/www/services_dhcpv6.php:1018 #: src/usr/local/www/services_dhcpv6_edit.php:267 #: src/usr/local/www/services_dyndns.php:122 #: src/usr/local/www/services_dyndns_edit.php:128 @@ -7273,21 +7362,21 @@ msgstr "" #: src/usr/local/www/services_rfc2136_edit.php:217 #: src/usr/local/www/status_dhcp_leases.php:381 #: src/usr/local/www/status_dhcpv6_leases.php:461 -#: src/usr/local/www/system.php:143 src/usr/local/www/system.php:376 +#: src/usr/local/www/system.php:144 src/usr/local/www/system.php:380 #: src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php:130 msgid "Hostname" msgstr "" -#: src/usr/local/www/diag_arp.php:389 +#: src/usr/local/www/diag_arp.php:390 msgid "Local IPv6 peers use " msgstr "" -#: src/usr/local/www/diag_arp.php:389 +#: src/usr/local/www/diag_arp.php:390 msgid "NDP" msgstr "" -#: src/usr/local/www/diag_arp.php:389 -msgid " instead of ARP" +#: src/usr/local/www/diag_arp.php:390 +msgid " instead of ARP." msgstr "" #: src/usr/local/www/diag_authentication.php:72 @@ -7321,7 +7410,7 @@ msgstr "" #: src/usr/local/www/diag_authentication.php:103 #: src/usr/local/www/guiconfig.inc:189 src/usr/local/www/head.inc:366 -#: src/usr/local/www/services_captiveportal.php:719 +#: src/usr/local/www/services_captiveportal.php:728 msgid "Authentication" msgstr "" @@ -7330,12 +7419,18 @@ msgid "Authentication Test" msgstr "" #: src/usr/local/www/diag_authentication.php:125 -#: src/usr/local/www/system_usermanager_settings.php:175 +#: src/usr/local/www/system_usermanager_settings.php:231 msgid "Authentication Server" msgstr "" #: src/usr/local/www/diag_authentication.php:128 -msgid "Select the authentication server to test against" +msgid "Select the authentication server to test against." +msgstr "" + +#: src/usr/local/www/diag_authentication.php:150 +#: src/usr/local/www/diag_smart.php:404 src/usr/local/www/diag_testport.php:302 +#: src/usr/local/www/status_captiveportal_test.php:138 +msgid "Test" msgstr "" #: src/usr/local/www/diag_backup.php:111 src/usr/local/www/diag_backup.php:126 @@ -7362,16 +7457,19 @@ msgid "Restore configuration" msgstr "" #: src/usr/local/www/diag_backup.php:210 -#: src/usr/local/www/pkg_mgr_installed.php:213 +#: src/usr/local/www/pkg_mgr_installed.php:233 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:156 msgid "Reinstall" msgstr "" -#: src/usr/local/www/diag_backup.php:212 src/usr/local/www/diag_backup.php:739 +#: src/usr/local/www/diag_backup.php:212 src/usr/local/www/diag_backup.php:745 msgid "Clear Package Lock" msgstr "" -#: src/usr/local/www/diag_backup.php:214 src/usr/local/www/diag_command.php:265 +#: src/usr/local/www/diag_backup.php:214 src/usr/local/www/diag_command.php:279 +#: src/usr/local/www/services_captiveportal.php:1125 +#: src/usr/local/www/services_captiveportal.php:1159 +#: src/usr/local/www/services_captiveportal.php:1191 msgid "Download" msgstr "" @@ -7380,11 +7478,11 @@ msgid "Restore version" msgstr "" #: src/usr/local/www/diag_backup.php:229 -msgid "You must supply and confirm the password for encryption." +msgid "A password for encryption must be supplied and confirmed." msgstr "" #: src/usr/local/www/diag_backup.php:304 -msgid "You must supply and confirm the password for decryption." +msgid "A password for decryption must be supplied and confirmed." msgstr "" #: src/usr/local/www/diag_backup.php:314 @@ -7404,21 +7502,19 @@ msgstr "" #: src/usr/local/www/diag_backup.php:335 src/usr/local/www/diag_backup.php:338 msgid "" -"You have selected to restore an area but we could not locate the correct xml " -"tag." +"An area to restore was selected but the correct xml tag could not be located." msgstr "" #: src/usr/local/www/diag_backup.php:350 msgid "" -"The configuration area has been restored. You may need to reboot the " -"firewall." +"The configuration area has been restored. The firewall may need to be " +"rebooted." msgstr "" #: src/usr/local/www/diag_backup.php:355 #, php-format msgid "" -"You have selected to restore the full configuration but we could not locate " -"a %s tag." +"A full configuration restore was selected but a %s tag could not be located." msgstr "" #: src/usr/local/www/diag_backup.php:373 @@ -7439,7 +7535,7 @@ msgstr "" #: src/usr/local/www/diag_backup.php:532 msgid "" -"XXX - this feature may hose your config (do NOT backrev configs!) - billm" +"XXX - this feature may hose the config (do NOT backrev configs!) - billm" msgstr "" #: src/usr/local/www/diag_backup.php:541 @@ -7467,10 +7563,10 @@ msgstr "" #: src/usr/local/www/diag_backup.php:562 #: src/usr/local/www/services_dhcpv6.php:509 -#: src/usr/local/www/services_dhcpv6.php:589 +#: src/usr/local/www/services_dhcpv6.php:587 #: src/usr/local/www/services_dhcpv6.php:602 #: src/usr/local/www/services_dhcpv6_edit.php:234 -#: src/usr/local/www/services_router_advertisements.php:288 +#: src/usr/local/www/services_router_advertisements.php:290 msgid "DHCPv6 Server" msgstr "" @@ -7479,30 +7575,30 @@ msgid "Firewall Rules" msgstr "" #: src/usr/local/www/diag_backup.php:564 src/usr/local/www/head.inc:330 -#: src/usr/local/www/interfaces.php:1637 +#: src/usr/local/www/interfaces.php:1646 #: src/usr/local/www/interfaces_assign.php:67 #: src/usr/local/www/interfaces_bridge.php:109 -#: src/usr/local/www/interfaces_bridge_edit.php:403 +#: src/usr/local/www/interfaces_bridge_edit.php:418 #: src/usr/local/www/interfaces_gif.php:103 -#: src/usr/local/www/interfaces_gif_edit.php:195 +#: src/usr/local/www/interfaces_gif_edit.php:199 #: src/usr/local/www/interfaces_gre.php:104 -#: src/usr/local/www/interfaces_gre_edit.php:189 +#: src/usr/local/www/interfaces_gre_edit.php:195 #: src/usr/local/www/interfaces_groups.php:88 #: src/usr/local/www/interfaces_groups_edit.php:67 #: src/usr/local/www/interfaces_lagg.php:110 -#: src/usr/local/www/interfaces_lagg_edit.php:241 +#: src/usr/local/www/interfaces_lagg_edit.php:257 #: src/usr/local/www/interfaces_ppps.php:106 -#: src/usr/local/www/interfaces_ppps_edit.php:462 +#: src/usr/local/www/interfaces_ppps_edit.php:472 #: src/usr/local/www/interfaces_qinq.php:114 #: src/usr/local/www/interfaces_qinq_edit.php:63 #: src/usr/local/www/interfaces_vlan.php:109 #: src/usr/local/www/interfaces_vlan_edit.php:205 #: src/usr/local/www/interfaces_wireless.php:105 #: src/usr/local/www/interfaces_wireless_edit.php:201 -#: src/usr/local/www/services_captiveportal.php:584 +#: src/usr/local/www/services_captiveportal.php:585 #: src/usr/local/www/services_captiveportal_zones.php:113 #: src/usr/local/www/services_dnsmasq.php:319 -#: src/usr/local/www/status_interfaces.php:108 +#: src/usr/local/www/status_interfaces.php:111 #: src/usr/local/www/status_logs_filter_summary.php:118 #: src/usr/local/www/widgets/include/interfaces.inc:3 msgid "Interfaces" @@ -7515,20 +7611,20 @@ msgstr "" #: src/usr/local/www/diag_backup.php:566 src/usr/local/www/firewall_nat.php:206 #: src/usr/local/www/firewall_nat_1to1.php:155 #: src/usr/local/www/firewall_nat_1to1_edit.php:281 -#: src/usr/local/www/firewall_nat_edit.php:653 +#: src/usr/local/www/firewall_nat_edit.php:654 #: src/usr/local/www/firewall_nat_npt.php:155 #: src/usr/local/www/firewall_nat_npt_edit.php:212 #: src/usr/local/www/firewall_nat_out.php:239 -#: src/usr/local/www/firewall_nat_out_edit.php:393 +#: src/usr/local/www/firewall_nat_out_edit.php:396 #: src/usr/local/www/head.inc:276 msgid "NAT" msgstr "" #: src/usr/local/www/diag_backup.php:568 src/usr/local/www/head.inc:247 -#: src/usr/local/www/head.inc:594 src/usr/local/www/pkg_mgr.php:72 -#: src/usr/local/www/pkg_mgr.php:163 src/usr/local/www/pkg_mgr_install.php:244 +#: src/usr/local/www/head.inc:610 src/usr/local/www/pkg_mgr.php:72 +#: src/usr/local/www/pkg_mgr.php:163 src/usr/local/www/pkg_mgr_install.php:251 #: src/usr/local/www/pkg_mgr_installed.php:68 -#: src/usr/local/www/pkg_mgr_installed.php:75 +#: src/usr/local/www/pkg_mgr_installed.php:242 msgid "Package Manager" msgstr "" @@ -7544,43 +7640,43 @@ msgstr "" msgid "Syslog" msgstr "" -#: src/usr/local/www/diag_backup.php:572 src/usr/local/www/head.inc:594 +#: src/usr/local/www/diag_backup.php:572 src/usr/local/www/head.inc:610 #: src/usr/local/www/pkg_mgr.php:72 src/usr/local/www/pkg_mgr.php:163 -#: src/usr/local/www/pkg_mgr_install.php:240 -#: src/usr/local/www/pkg_mgr_install.php:244 +#: src/usr/local/www/pkg_mgr_install.php:247 +#: src/usr/local/www/pkg_mgr_install.php:251 #: src/usr/local/www/pkg_mgr_installed.php:68 -#: src/usr/local/www/pkg_mgr_installed.php:75 +#: src/usr/local/www/pkg_mgr_installed.php:242 #: src/usr/local/www/status_logs.php:129 #: src/usr/local/www/status_logs_common.inc:121 #: src/usr/local/www/status_logs_settings.php:233 -#: src/usr/local/www/system.php:113 src/usr/local/www/system.php:358 -#: src/usr/local/www/system.php:373 -#: src/usr/local/www/system_advanced_admin.php:316 +#: src/usr/local/www/system.php:114 src/usr/local/www/system.php:362 +#: src/usr/local/www/system.php:377 +#: src/usr/local/www/system_advanced_admin.php:318 #: src/usr/local/www/system_advanced_firewall.php:404 -#: src/usr/local/www/system_advanced_misc.php:304 +#: src/usr/local/www/system_advanced_misc.php:320 #: src/usr/local/www/system_advanced_network.php:173 -#: src/usr/local/www/system_advanced_notifications.php:216 +#: src/usr/local/www/system_advanced_notifications.php:215 #: src/usr/local/www/system_advanced_sysctl.php:166 -#: src/usr/local/www/system_authservers.php:377 +#: src/usr/local/www/system_authservers.php:443 #: src/usr/local/www/system_camanager.php:351 #: src/usr/local/www/system_certmanager.php:559 #: src/usr/local/www/system_crlmanager.php:293 -#: src/usr/local/www/system_gateway_groups.php:124 -#: src/usr/local/www/system_gateway_groups_edit.php:180 +#: src/usr/local/www/system_gateway_groups.php:138 +#: src/usr/local/www/system_gateway_groups_edit.php:181 #: src/usr/local/www/system_gateways.php:245 #: src/usr/local/www/system_gateways_edit.php:572 -#: src/usr/local/www/system_groupmanager.php:274 +#: src/usr/local/www/system_groupmanager.php:288 #: src/usr/local/www/system_groupmanager_addprivs.php:69 #: src/usr/local/www/system_hasync.php:137 #: src/usr/local/www/system_routes.php:246 #: src/usr/local/www/system_routes_edit.php:257 -#: src/usr/local/www/system_update_settings.php:99 -#: src/usr/local/www/system_usermanager.php:467 +#: src/usr/local/www/system_update_settings.php:111 +#: src/usr/local/www/system_usermanager.php:468 #: src/usr/local/www/system_usermanager_addprivs.php:70 #: src/usr/local/www/system_usermanager_passwordmg.php:67 -#: src/usr/local/www/system_usermanager_settings.php:75 +#: src/usr/local/www/system_usermanager_settings.php:140 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:180 -#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:277 +#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:280 msgid "System" msgstr "" @@ -7618,17 +7714,17 @@ msgstr "" #: src/usr/local/www/diag_backup.php:581 #: src/usr/local/www/firewall_aliases.php:192 -#: src/usr/local/www/pkg_edit.php:1198 +#: src/usr/local/www/pkg_edit.php:1214 #: src/usr/local/www/services_ntpd_gps.php:205 -#: src/usr/local/www/services_unbound.php:248 -#: src/usr/local/www/status_graph.php:185 src/usr/local/www/diag_smart.php:354 +#: src/usr/local/www/services_unbound.php:254 +#: src/usr/local/www/status_graph.php:200 src/usr/local/www/diag_smart.php:377 msgid "All" msgstr "" #: src/usr/local/www/diag_backup.php:596 src/usr/local/www/diag_backup.php:619 #: src/usr/local/www/diag_confbak.php:135 #: src/usr/local/www/diag_confbak.php:143 src/usr/local/www/head.inc:367 -#: src/usr/local/www/head.inc:596 +#: src/usr/local/www/head.inc:612 msgid "Backup & Restore" msgstr "" @@ -7661,7 +7757,7 @@ msgstr "" msgid "Skip RRD data" msgstr "" -#: src/usr/local/www/diag_backup.php:651 src/usr/local/www/diag_backup.php:696 +#: src/usr/local/www/diag_backup.php:651 src/usr/local/www/diag_backup.php:698 msgid "Encryption" msgstr "" @@ -7669,47 +7765,47 @@ msgstr "" msgid "Download configuration as XML" msgstr "" -#: src/usr/local/www/diag_backup.php:673 +#: src/usr/local/www/diag_backup.php:675 msgid "Restore Backup" msgstr "" -#: src/usr/local/www/diag_backup.php:677 +#: src/usr/local/www/diag_backup.php:679 #, php-format msgid "" "Open a %s configuration XML file and click the button below to restore the " "configuration." msgstr "" -#: src/usr/local/www/diag_backup.php:682 +#: src/usr/local/www/diag_backup.php:684 msgid "Restore area" msgstr "" -#: src/usr/local/www/diag_backup.php:689 +#: src/usr/local/www/diag_backup.php:691 msgid "Configuration file" msgstr "" -#: src/usr/local/www/diag_backup.php:713 +#: src/usr/local/www/diag_backup.php:715 msgid "Restore Configuration" msgstr "" -#: src/usr/local/www/diag_backup.php:714 +#: src/usr/local/www/diag_backup.php:718 msgid "The firewall will reboot after restoring the configuration." msgstr "" -#: src/usr/local/www/diag_backup.php:721 +#: src/usr/local/www/diag_backup.php:725 msgid "Package Functions" msgstr "" -#: src/usr/local/www/diag_backup.php:728 +#: src/usr/local/www/diag_backup.php:732 msgid "Reinstall Packages" msgstr "" -#: src/usr/local/www/diag_backup.php:729 +#: src/usr/local/www/diag_backup.php:735 msgid "" "Click this button to reinstall all system packages. This may take a while." msgstr "" -#: src/usr/local/www/diag_backup.php:740 +#: src/usr/local/www/diag_backup.php:748 msgid "" "Click this button to clear the package lock if a package fails to reinstall " "properly after an upgrade." @@ -7720,65 +7816,85 @@ msgstr "" msgid "Uploaded file to /tmp/%s." msgstr "" -#: src/usr/local/www/diag_command.php:125 src/usr/local/www/head.inc:368 +#: src/usr/local/www/diag_command.php:124 src/usr/local/www/head.inc:368 msgid "Command Prompt" msgstr "" -#: src/usr/local/www/diag_command.php:186 +#: src/usr/local/www/diag_command.php:185 msgid "Nothing to recall" msgstr "" -#: src/usr/local/www/diag_command.php:221 +#: src/usr/local/www/diag_command.php:220 src/usr/local/www/diag_edit.php:133 msgid "" "The capabilities offered here can be dangerous. No support is available. Use " "them at your own risk!" msgstr "" -#: src/usr/local/www/diag_command.php:221 +#: src/usr/local/www/diag_command.php:220 src/usr/local/www/diag_edit.php:133 msgid "Advanced Users Only" msgstr "" -#: src/usr/local/www/diag_command.php:226 +#: src/usr/local/www/diag_command.php:225 #, php-format msgid "Shell Output - %s" msgstr "" -#: src/usr/local/www/diag_command.php:245 +#: src/usr/local/www/diag_command.php:244 msgid "Execute Shell Command" msgstr "" #: src/usr/local/www/diag_command.php:252 -#: src/usr/local/www/diag_command.php:328 +msgid "Recall Previous Command" +msgstr "" + +#: src/usr/local/www/diag_command.php:255 +msgid "Execute the entered command" +msgstr "" + +#: src/usr/local/www/diag_command.php:257 +#: src/usr/local/www/diag_command.php:348 msgid "Execute" msgstr "" -#: src/usr/local/www/diag_command.php:254 src/usr/local/www/pkg_mgr.php:197 -#: src/usr/local/www/system_groupmanager_addprivs.php:227 +#: src/usr/local/www/diag_command.php:259 +msgid "Recall Next Command" +msgstr "" + +#: src/usr/local/www/diag_command.php:262 +msgid "Clear command entry" +msgstr "" + +#: src/usr/local/www/diag_command.php:264 src/usr/local/www/pkg_mgr.php:197 +#: src/usr/local/www/system_groupmanager_addprivs.php:226 #: src/usr/local/www/system_usermanager_addprivs.php:220 -#: src/usr/local/www/widgets/widgets/services_status.widget.php:167 -#: src/usr/local/www/interfaces.php:2007 +#: src/usr/local/www/widgets/widgets/services_status.widget.php:170 +#: src/usr/local/www/interfaces.php:2023 msgid "Clear" msgstr "" -#: src/usr/local/www/diag_command.php:260 +#: src/usr/local/www/diag_command.php:272 msgid "Download File" msgstr "" -#: src/usr/local/www/diag_command.php:276 +#: src/usr/local/www/diag_command.php:291 msgid "Upload File" msgstr "" -#: src/usr/local/www/diag_command.php:281 -#: src/usr/local/www/services_captiveportal_filemanager.php:184 -#: src/usr/local/www/widgets/widgets/picture.widget.php:83 +#: src/usr/local/www/diag_command.php:298 +#: src/usr/local/www/services_captiveportal_filemanager.php:206 +#: src/usr/local/www/widgets/widgets/picture.widget.php:85 msgid "Upload" msgstr "" -#: src/usr/local/www/diag_command.php:323 +#: src/usr/local/www/diag_command.php:341 msgid "Execute PHP Commands" msgstr "" -#: src/usr/local/www/diag_command.php:329 +#: src/usr/local/www/diag_command.php:346 +msgid "Execute this PHP Code" +msgstr "" + +#: src/usr/local/www/diag_command.php:350 msgid "Example" msgstr "" @@ -7798,12 +7914,12 @@ msgstr "" #: src/usr/local/www/diag_confbak.php:86 src/usr/local/www/diag_confbak.php:93 #: src/usr/local/www/diag_confbak.php:152 -#: src/usr/local/www/diag_confbak.php:253 -#: src/usr/local/www/diag_confbak.php:264 +#: src/usr/local/www/diag_confbak.php:260 +#: src/usr/local/www/diag_confbak.php:271 #: src/usr/local/www/firewall_nat_edit.php:977 #: src/usr/local/www/firewall_nat_edit.php:984 -#: src/usr/local/www/firewall_nat_out_edit.php:673 -#: src/usr/local/www/firewall_nat_out_edit.php:680 +#: src/usr/local/www/firewall_nat_out_edit.php:672 +#: src/usr/local/www/firewall_nat_out_edit.php:679 msgid "n/j/y H:i:s" msgstr "" @@ -7821,25 +7937,25 @@ msgstr "" msgid "Configuration Diff from %1$s to %2$s" msgstr "" -#: src/usr/local/www/diag_confbak.php:192 +#: src/usr/local/www/diag_confbak.php:189 msgid "Saved Configurations" msgstr "" -#: src/usr/local/www/diag_confbak.php:196 +#: src/usr/local/www/diag_confbak.php:193 msgid "Backup Count" msgstr "" -#: src/usr/local/www/diag_confbak.php:199 +#: src/usr/local/www/diag_confbak.php:196 msgid "" "Maximum number of old configurations to keep. By default this is 30 for a " "full install or 5 on NanoBSD. " msgstr "" -#: src/usr/local/www/diag_confbak.php:204 +#: src/usr/local/www/diag_confbak.php:201 msgid "Current space used by backups" msgstr "" -#: src/usr/local/www/diag_confbak.php:218 +#: src/usr/local/www/diag_confbak.php:222 msgid "" "To view the differences between an older configuration and a newer " "configuration, select the older configuration using the left column of radio " @@ -7847,40 +7963,42 @@ msgid "" "the \"Diff\" button." msgstr "" -#: src/usr/local/www/diag_confbak.php:237 -#: src/usr/local/www/diag_confbak.php:297 +#: src/usr/local/www/diag_confbak.php:241 +#: src/usr/local/www/diag_confbak.php:243 +#: src/usr/local/www/diag_confbak.php:305 +#: src/usr/local/www/diag_confbak.php:307 msgid "Diff" msgstr "" -#: src/usr/local/www/diag_confbak.php:239 -#: src/usr/local/www/firewall_schedule_edit.php:422 +#: src/usr/local/www/diag_confbak.php:246 +#: src/usr/local/www/firewall_schedule_edit.php:417 msgid "Date" msgstr "" -#: src/usr/local/www/diag_confbak.php:240 src/usr/local/www/pkg_mgr.php:100 -#: src/usr/local/www/pkg_mgr_installed.php:104 +#: src/usr/local/www/diag_confbak.php:247 src/usr/local/www/pkg_mgr.php:100 +#: src/usr/local/www/pkg_mgr_installed.php:113 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:84 -#: src/usr/local/www/widgets/widgets/system_information.widget.php:117 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:121 msgid "Version" msgstr "" -#: src/usr/local/www/diag_confbak.php:241 -#: src/usr/local/www/diag_gmirror.php:332 src/usr/local/www/diag_pftop.php:159 -#: src/usr/local/www/services_captiveportal_filemanager.php:219 +#: src/usr/local/www/diag_confbak.php:248 +#: src/usr/local/www/diag_gmirror.php:337 src/usr/local/www/diag_pftop.php:159 +#: src/usr/local/www/services_captiveportal_filemanager.php:224 msgid "Size" msgstr "" -#: src/usr/local/www/diag_confbak.php:242 +#: src/usr/local/www/diag_confbak.php:249 msgid "Configuration Change" msgstr "" -#: src/usr/local/www/diag_confbak.php:243 +#: src/usr/local/www/diag_confbak.php:250 #: src/usr/local/www/firewall_aliases.php:229 #: src/usr/local/www/firewall_nat.php:247 #: src/usr/local/www/firewall_nat_1to1.php:188 #: src/usr/local/www/firewall_nat_npt.php:187 #: src/usr/local/www/firewall_nat_out.php:320 -#: src/usr/local/www/firewall_rules.php:415 +#: src/usr/local/www/firewall_rules.php:418 #: src/usr/local/www/firewall_schedule.php:129 #: src/usr/local/www/firewall_virtual_ip.php:299 #: src/usr/local/www/interfaces_bridge.php:139 @@ -7894,77 +8012,88 @@ msgstr "" #: src/usr/local/www/interfaces_wireless.php:136 #: src/usr/local/www/load_balancer_monitor.php:143 #: src/usr/local/www/load_balancer_pool.php:160 -#: src/usr/local/www/load_balancer_virtual_server.php:161 -#: src/usr/local/www/pkg_mgr_installed.php:106 +#: src/usr/local/www/load_balancer_virtual_server.php:181 +#: src/usr/local/www/pkg_mgr_installed.php:115 +#: src/usr/local/www/services_captiveportal_filemanager.php:225 +#: src/usr/local/www/services_captiveportal_hostname.php:153 +#: src/usr/local/www/services_captiveportal_ip.php:147 +#: src/usr/local/www/services_captiveportal_mac.php:212 +#: src/usr/local/www/services_captiveportal_vouchers.php:460 #: src/usr/local/www/services_captiveportal_zones.php:116 #: src/usr/local/www/services_dhcp.php:691 +#: src/usr/local/www/services_dnsmasq.php:356 +#: src/usr/local/www/services_dnsmasq.php:430 #: src/usr/local/www/services_dyndns.php:125 #: src/usr/local/www/services_igmpproxy.php:125 #: src/usr/local/www/services_pppoe.php:141 #: src/usr/local/www/services_rfc2136.php:118 -#: src/usr/local/www/services_unbound_acls.php:329 -#: src/usr/local/www/services_wol.php:203 +#: src/usr/local/www/services_unbound.php:471 +#: src/usr/local/www/services_unbound.php:547 +#: src/usr/local/www/services_unbound_acls.php:333 +#: src/usr/local/www/services_wol.php:211 +#: src/usr/local/www/status_captiveportal.php:204 #: src/usr/local/www/status_dhcp_leases.php:387 #: src/usr/local/www/status_dhcpv6_leases.php:466 #: src/usr/local/www/status_logs_filter_summary.php:117 -#: src/usr/local/www/status_services.php:133 -#: src/usr/local/www/system_authservers.php:412 +#: src/usr/local/www/status_services.php:123 +#: src/usr/local/www/system_authservers.php:478 #: src/usr/local/www/system_camanager.php:397 -#: src/usr/local/www/system_certmanager.php:1011 -#: src/usr/local/www/system_gateway_groups.php:154 +#: src/usr/local/www/system_certmanager.php:979 +#: src/usr/local/www/system_crlmanager.php:620 +#: src/usr/local/www/system_gateway_groups.php:168 #: src/usr/local/www/system_gateways.php:281 -#: src/usr/local/www/system_groupmanager.php:307 +#: src/usr/local/www/system_groupmanager.php:323 #: src/usr/local/www/system_routes.php:280 -#: src/usr/local/www/system_usermanager.php:504 +#: src/usr/local/www/system_usermanager.php:505 #: src/usr/local/www/vpn_ipsec.php:288 src/usr/local/www/vpn_ipsec_keys.php:136 #: src/usr/local/www/vpn_l2tp_users.php:131 -#: src/usr/local/www/vpn_openvpn_client.php:822 -#: src/usr/local/www/vpn_openvpn_csc.php:672 -#: src/usr/local/www/vpn_openvpn_server.php:1204 +#: src/usr/local/www/vpn_openvpn_client.php:821 +#: src/usr/local/www/vpn_openvpn_csc.php:676 +#: src/usr/local/www/vpn_openvpn_server.php:1209 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:85 msgid "Actions" msgstr "" -#: src/usr/local/www/diag_confbak.php:257 +#: src/usr/local/www/diag_confbak.php:264 msgid "Current configuration" msgstr "" -#: src/usr/local/www/diag_confbak.php:266 -#: src/usr/local/www/pkg_mgr_installed.php:147 -#: src/usr/local/www/status_ipsec.php:172 -#: src/usr/local/www/status_ipsec.php:182 -#: src/usr/local/www/status_ipsec.php:213 -#: src/usr/local/www/status_ipsec.php:225 -#: src/usr/local/www/status_ipsec.php:326 -#: src/usr/local/www/status_ipsec.php:348 -#: src/usr/local/www/status_ipsec.php:435 -#: src/usr/local/www/status_ipsec.php:446 -#: src/usr/local/www/status_ipsec.php:456 -#: src/usr/local/www/status_ipsec.php:466 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:258 +#: src/usr/local/www/diag_confbak.php:273 +#: src/usr/local/www/pkg_mgr_installed.php:156 +#: src/usr/local/www/status_ipsec.php:147 +#: src/usr/local/www/status_ipsec.php:156 +#: src/usr/local/www/status_ipsec.php:189 +#: src/usr/local/www/status_ipsec.php:201 +#: src/usr/local/www/status_ipsec.php:308 +#: src/usr/local/www/status_ipsec.php:330 +#: src/usr/local/www/status_ipsec.php:419 +#: src/usr/local/www/status_ipsec.php:429 +#: src/usr/local/www/status_ipsec.php:440 +#: src/usr/local/www/status_ipsec.php:449 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:270 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:129 -#: src/usr/local/www/widgets/widgets/smart_status.widget.php:93 +#: src/usr/local/www/widgets/widgets/smart_status.widget.php:96 msgid "Unknown" msgstr "" -#: src/usr/local/www/diag_confbak.php:288 +#: src/usr/local/www/diag_confbak.php:295 msgid "Revert config" msgstr "" -#: src/usr/local/www/diag_confbak.php:288 +#: src/usr/local/www/diag_confbak.php:295 msgid "" -"Are you sure you want to replace the current configuration with this backup?" +"Confirmation Required to replace the current configuration with this backup." msgstr "" -#: src/usr/local/www/diag_confbak.php:289 +#: src/usr/local/www/diag_confbak.php:296 msgid "Download config" msgstr "" -#: src/usr/local/www/diag_confbak.php:290 +#: src/usr/local/www/diag_confbak.php:297 msgid "Delete config" msgstr "" -#: src/usr/local/www/diag_confbak.php:302 +#: src/usr/local/www/diag_confbak.php:314 msgid "No backups found." msgstr "" @@ -7975,16 +8104,17 @@ msgstr "" #: src/usr/local/www/diag_defaults.php:78 msgid "" "The system has been reset to factory defaults and is now rebooting. This may " -"take a few minutes, depending on your hardware." +"take a few minutes, depending on the hardware." msgstr "" #: src/usr/local/www/diag_defaults.php:88 -msgid "Are you sure you want to reset the system to the factory defaults?" +msgid "Factory Defaults Reset" msgstr "" #: src/usr/local/www/diag_defaults.php:93 -#, php-format -msgid "If you click %1$sYes%1$s the firewall will:" +msgid "" +"Resetting the system to factory defaults will remove all user configuration " +"and apply the following settings:" msgstr "" #: src/usr/local/www/diag_defaults.php:95 @@ -8022,12 +8152,28 @@ msgstr "" msgid "Are you sure you want to proceed?" msgstr "" -#: src/usr/local/www/diag_dns.php:63 src/usr/local/www/diag_dns.php:223 +#: src/usr/local/www/diag_defaults.php:105 +msgid "Perform a factory reset" +msgstr "" + +#: src/usr/local/www/diag_defaults.php:107 +msgid "Factory Reset" +msgstr "" + +#: src/usr/local/www/diag_defaults.php:109 +msgid "Return to the dashboard" +msgstr "" + +#: src/usr/local/www/diag_defaults.php:111 +msgid "Keep Configuration" +msgstr "" + +#: src/usr/local/www/diag_dns.php:63 src/usr/local/www/diag_dns.php:227 #: src/usr/local/www/head.inc:369 msgid "DNS Lookup" msgstr "" -#: src/usr/local/www/diag_dns.php:114 +#: src/usr/local/www/diag_dns.php:115 msgid "Created from Diagnostics-> DNS Lookup" msgstr "" @@ -8043,44 +8189,44 @@ msgstr "" msgid "No record found" msgstr "" -#: src/usr/local/www/diag_dns.php:193 src/usr/local/www/diag_tables.php:290 -#: src/usr/local/www/interfaces.php:3060 src/usr/local/www/interfaces.php:3084 -#: src/usr/local/www/interfaces_ppps_edit.php:646 -#: src/usr/local/www/load_balancer_pool_edit.php:412 -#: src/usr/local/www/load_balancer_virtual_server.php:156 +#: src/usr/local/www/diag_dns.php:193 src/usr/local/www/diag_tables.php:294 +#: src/usr/local/www/interfaces.php:3067 src/usr/local/www/interfaces.php:3091 +#: src/usr/local/www/interfaces_ppps_edit.php:656 +#: src/usr/local/www/load_balancer_pool_edit.php:404 +#: src/usr/local/www/load_balancer_virtual_server.php:176 #: src/usr/local/www/load_balancer_virtual_server_edit.php:104 #: src/usr/local/www/load_balancer_virtual_server_edit.php:109 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:223 -#: src/usr/local/www/services_captiveportal_ip_edit.php:251 -#: src/usr/local/www/services_dhcp_edit.php:457 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:224 +#: src/usr/local/www/services_captiveportal_ip_edit.php:253 +#: src/usr/local/www/services_dhcp_edit.php:459 #: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:175 #: src/usr/local/www/services_dnsmasq_edit.php:262 #: src/usr/local/www/services_pppoe_edit.php:449 #: src/usr/local/www/services_pppoe_edit.php:482 #: src/usr/local/www/services_pppoe_edit.php:553 -#: src/usr/local/www/services_unbound_domainoverride_edit.php:162 +#: src/usr/local/www/services_unbound_domainoverride_edit.php:166 #: src/usr/local/www/services_unbound_host_edit.php:263 -#: src/usr/local/www/status_graph.php:194 +#: src/usr/local/www/status_graph.php:209 #: src/usr/local/www/status_logs_vpn.php:173 #: src/usr/local/www/status_logs_vpn.php:424 -#: src/usr/local/www/system_advanced_notifications.php:267 +#: src/usr/local/www/system_advanced_notifications.php:266 #: src/usr/local/www/vpn_ipsec_phase2.php:716 #: src/usr/local/www/vpn_l2tp_users_edit.php:209 msgid "IP Address" msgstr "" -#: src/usr/local/www/diag_dns.php:194 src/usr/local/www/status_graph.php:195 -#: src/usr/local/www/system_authservers.php:411 +#: src/usr/local/www/diag_dns.php:194 src/usr/local/www/status_graph.php:210 +#: src/usr/local/www/system_authservers.php:477 msgid "Host Name" msgstr "" #: src/usr/local/www/diag_dns.php:197 #: src/usr/local/www/services_rfc2136.php:114 #: src/usr/local/www/services_rfc2136_edit.php:273 -#: src/usr/local/www/status_ntpd.php:199 -#: src/usr/local/www/system_certmanager.php:1057 -#: src/usr/local/www/vpn_l2tp.php:345 -#: src/usr/local/www/vpn_openvpn_client.php:820 +#: src/usr/local/www/status_ntpd.php:300 +#: src/usr/local/www/system_certmanager.php:1025 +#: src/usr/local/www/vpn_l2tp.php:342 +#: src/usr/local/www/vpn_openvpn_client.php:819 #: src/usr/local/www/widgets/widgets/load_balancer_status.widget.php:93 msgid "Server" msgstr "" @@ -8094,51 +8240,65 @@ msgstr "" msgid "Host \"%s\" could not be resolved." msgstr "" -#: src/usr/local/www/diag_dns.php:219 -msgid "Alias was created/updated successfully." +#: src/usr/local/www/diag_dns.php:220 +msgid "Alias was updated successfully." msgstr "" -#: src/usr/local/www/diag_dns.php:236 +#: src/usr/local/www/diag_dns.php:222 +msgid "Alias was created successfully." +msgstr "" + +#: src/usr/local/www/diag_dns.php:239 +msgid "Update alias" +msgstr "" + +#: src/usr/local/www/diag_dns.php:241 msgid "Add alias" msgstr "" -#: src/usr/local/www/diag_dns.php:247 src/usr/local/www/diag_ping.php:210 -#: src/usr/local/www/diag_traceroute.php:212 +#: src/usr/local/www/diag_dns.php:255 +#: src/usr/local/www/status_logs_filter_summary.php:210 +msgid "Lookup" +msgstr "" + +#: src/usr/local/www/diag_dns.php:266 src/usr/local/www/diag_ping.php:206 +#: src/usr/local/www/diag_traceroute.php:208 msgid "Results" msgstr "" -#: src/usr/local/www/diag_dns.php:267 +#: src/usr/local/www/diag_dns.php:286 msgid "Timings" msgstr "" -#: src/usr/local/www/diag_dns.php:272 +#: src/usr/local/www/diag_dns.php:291 msgid "Name server" msgstr "" -#: src/usr/local/www/diag_dns.php:273 +#: src/usr/local/www/diag_dns.php:292 msgid "Query time" msgstr "" -#: src/usr/local/www/diag_dns.php:290 +#: src/usr/local/www/diag_dns.php:309 msgid "More Information" msgstr "" -#: src/usr/local/www/diag_dns.php:293 src/usr/local/www/diag_ping.php:68 -#: src/usr/local/www/diag_ping.php:172 src/usr/local/www/head.inc:381 +#: src/usr/local/www/diag_dns.php:312 src/usr/local/www/diag_ping.php:68 +#: src/usr/local/www/diag_ping.php:160 src/usr/local/www/diag_ping.php:195 +#: src/usr/local/www/head.inc:381 msgid "Ping" msgstr "" -#: src/usr/local/www/diag_dns.php:296 +#: src/usr/local/www/diag_dns.php:315 msgid "" "NOTE: The following links are to external services, so their reliability " "cannot be guaranteed." msgstr "" -#: src/usr/local/www/diag_dns.php:298 +#: src/usr/local/www/diag_dns.php:317 msgid "IP WHOIS @ DNS Stuff" msgstr "" -#: src/usr/local/www/diag_dns.php:299 +#: src/usr/local/www/diag_dns.php:318 msgid "IP Info @ DNS Stuff" msgstr "" @@ -8151,14 +8311,14 @@ msgstr "" #: src/usr/local/www/diag_dump_states.php:108 #: src/usr/local/www/diag_dump_states.php:139 -#: src/usr/local/www/diag_dump_states.php:196 +#: src/usr/local/www/diag_dump_states.php:206 #: src/usr/local/www/diag_dump_states_sources.php:87 #: src/usr/local/www/diag_dump_states_sources.php:91 #: src/usr/local/www/diag_resetstate.php:89 #: src/usr/local/www/diag_resetstate.php:113 #: src/usr/local/www/diag_states_summary.php:181 #: src/usr/local/www/diag_states_summary.php:183 -#: src/usr/local/www/firewall_rules.php:405 src/usr/local/www/head.inc:389 +#: src/usr/local/www/firewall_rules.php:408 src/usr/local/www/head.inc:389 msgid "States" msgstr "" @@ -8166,7 +8326,7 @@ msgstr "" #: src/usr/local/www/diag_dump_states_sources.php:87 #: src/usr/local/www/diag_dump_states_sources.php:92 #: src/usr/local/www/diag_resetstate.php:116 -#: src/usr/local/www/diag_resetstate.php:143 +#: src/usr/local/www/diag_resetstate.php:136 msgid "Source Tracking" msgstr "" @@ -8186,41 +8346,43 @@ msgstr "" msgid "Filter expression" msgstr "" -#: src/usr/local/www/diag_dump_states.php:176 -#: src/usr/local/www/diag_routes.php:129 src/usr/local/www/status_graph.php:187 -#: src/usr/local/www/system_groupmanager_addprivs.php:209 -#: src/usr/local/www/system_groupmanager_addprivs.php:216 +#: src/usr/local/www/diag_dump_states.php:178 +#: src/usr/local/www/diag_dump_states_sources.php:139 +#: src/usr/local/www/diag_routes.php:129 src/usr/local/www/pkg.php:381 +#: src/usr/local/www/status_graph.php:202 +#: src/usr/local/www/system_groupmanager_addprivs.php:208 +#: src/usr/local/www/system_groupmanager_addprivs.php:215 #: src/usr/local/www/system_usermanager_addprivs.php:202 #: src/usr/local/www/system_usermanager_addprivs.php:209 msgid "Filter" msgstr "" -#: src/usr/local/www/diag_dump_states.php:184 +#: src/usr/local/www/diag_dump_states.php:191 msgid "Kill States" msgstr "" -#: src/usr/local/www/diag_dump_states.php:187 +#: src/usr/local/www/diag_dump_states.php:197 msgid "Kill filtered states" msgstr "" -#: src/usr/local/www/diag_dump_states.php:189 +#: src/usr/local/www/diag_dump_states.php:199 msgid "Remove all states to and from the filtered address" msgstr "" -#: src/usr/local/www/diag_dump_states.php:203 -#: src/usr/local/www/diag_packet_capture.php:327 +#: src/usr/local/www/diag_dump_states.php:213 +#: src/usr/local/www/diag_packet_capture.php:340 #: src/usr/local/www/diag_states_summary.php:182 #: src/usr/local/www/firewall_nat.php:239 #: src/usr/local/www/firewall_nat_edit.php:245 #: src/usr/local/www/firewall_nat_edit.php:248 -#: src/usr/local/www/firewall_nat_edit.php:720 -#: src/usr/local/www/firewall_nat_out_edit.php:181 +#: src/usr/local/www/firewall_nat_edit.php:718 +#: src/usr/local/www/firewall_nat_out_edit.php:184 #: src/usr/local/www/firewall_nat_out_edit.php:502 -#: src/usr/local/www/firewall_rules.php:406 -#: src/usr/local/www/firewall_rules_edit.php:433 -#: src/usr/local/www/firewall_rules_edit.php:1238 -#: src/usr/local/www/interfaces_bridge_edit.php:561 -#: src/usr/local/www/load_balancer_virtual_server.php:155 +#: src/usr/local/www/firewall_rules.php:409 +#: src/usr/local/www/firewall_rules_edit.php:449 +#: src/usr/local/www/firewall_rules_edit.php:1254 +#: src/usr/local/www/interfaces_bridge_edit.php:573 +#: src/usr/local/www/load_balancer_virtual_server.php:175 #: src/usr/local/www/services_rfc2136_edit.php:280 #: src/usr/local/www/status_ipsec_sad.php:100 #: src/usr/local/www/status_ipsec_spd.php:94 @@ -8228,44 +8390,44 @@ msgstr "" #: src/usr/local/www/status_logs_filter.php:196 #: src/usr/local/www/status_logs_filter_dynamic.php:427 #: src/usr/local/www/status_upnp.php:104 -#: src/usr/local/www/system_advanced_admin.php:340 -#: src/usr/local/www/system_advanced_admin.php:344 -#: src/usr/local/www/system_advanced_admin.php:352 +#: src/usr/local/www/system_advanced_admin.php:342 +#: src/usr/local/www/system_advanced_admin.php:346 +#: src/usr/local/www/system_advanced_admin.php:354 #: src/usr/local/www/vpn_ipsec_phase2.php:630 #: src/usr/local/www/vpn_openvpn_client.php:476 -#: src/usr/local/www/vpn_openvpn_client.php:819 +#: src/usr/local/www/vpn_openvpn_client.php:818 #: src/usr/local/www/vpn_openvpn_server.php:666 msgid "Protocol" msgstr "" -#: src/usr/local/www/diag_dump_states.php:204 +#: src/usr/local/www/diag_dump_states.php:214 msgid "Source -> Router -> Destination" msgstr "" -#: src/usr/local/www/diag_dump_states.php:205 -#: src/usr/local/www/status_dhcpv6_leases.php:556 +#: src/usr/local/www/diag_dump_states.php:215 +#: src/usr/local/www/status_dhcpv6_leases.php:559 msgid "State" msgstr "" -#: src/usr/local/www/diag_dump_states.php:206 +#: src/usr/local/www/diag_dump_states.php:216 msgid "Packets" msgstr "" -#: src/usr/local/www/diag_dump_states.php:207 +#: src/usr/local/www/diag_dump_states.php:217 #: src/usr/local/www/diag_pftop.php:152 msgid "Bytes" msgstr "" -#: src/usr/local/www/diag_dump_states.php:277 +#: src/usr/local/www/diag_dump_states.php:287 #, php-format msgid "Remove all state entries from %1$s to %2$s" msgstr "" -#: src/usr/local/www/diag_dump_states.php:292 +#: src/usr/local/www/diag_dump_states.php:302 msgid "No states were found that match the current filter." msgstr "" -#: src/usr/local/www/diag_dump_states.php:294 +#: src/usr/local/www/diag_dump_states.php:304 msgid "No states were found." msgstr "" @@ -8273,34 +8435,44 @@ msgstr "" msgid "Filters" msgstr "" -#: src/usr/local/www/diag_dump_states_sources.php:140 +#: src/usr/local/www/diag_dump_states_sources.php:148 msgid "Current Source Tracking Entries" msgstr "" -#: src/usr/local/www/diag_dump_states_sources.php:145 +#: src/usr/local/www/diag_dump_states_sources.php:153 msgid "Source -> Destination" msgstr "" -#: src/usr/local/www/diag_dump_states_sources.php:146 +#: src/usr/local/www/diag_dump_states_sources.php:154 msgid "# States" msgstr "" -#: src/usr/local/www/diag_dump_states_sources.php:147 +#: src/usr/local/www/diag_dump_states_sources.php:155 msgid "# Connections" msgstr "" -#: src/usr/local/www/diag_dump_states_sources.php:148 +#: src/usr/local/www/diag_dump_states_sources.php:156 #: src/usr/local/www/diag_pftop.php:158 -#: src/usr/local/www/status_interfaces.php:174 +#: src/usr/local/www/status_interfaces.php:177 msgid "Rate" msgstr "" -#: src/usr/local/www/diag_dump_states_sources.php:179 +#: src/usr/local/www/diag_dump_states_sources.php:187 #, php-format msgid "Remove all source tracking entries from %1$s to %2$s" msgstr "" -#: src/usr/local/www/diag_dump_states_sources.php:193 +#: src/usr/local/www/diag_dump_states_sources.php:187 +#: src/usr/local/www/diag_gmirror.php:284 +#: src/usr/local/www/diag_gmirror.php:302 +#: src/usr/local/www/load_balancer_pool_edit.php:455 +#: src/usr/local/www/load_balancer_pool_edit.php:462 +#: src/usr/local/www/pkg_mgr_installed.php:231 +#: src/usr/local/www/widgets/widgets/installed_packages.widget.php:151 +msgid "Remove" +msgstr "" + +#: src/usr/local/www/diag_dump_states_sources.php:201 msgid "No source tracking entries were found." msgstr "" @@ -8336,19 +8508,19 @@ msgstr "" msgid "File saved successfully." msgstr "" -#: src/usr/local/www/diag_edit.php:139 +#: src/usr/local/www/diag_edit.php:142 msgid "Save / Load a File from the Filesystem" msgstr "" -#: src/usr/local/www/diag_edit.php:144 +#: src/usr/local/www/diag_edit.php:149 src/usr/local/www/diag_edit.php:151 msgid "Load" msgstr "" -#: src/usr/local/www/diag_edit.php:145 +#: src/usr/local/www/diag_edit.php:153 src/usr/local/www/diag_edit.php:155 msgid "Browse" msgstr "" -#: src/usr/local/www/diag_edit.php:148 +#: src/usr/local/www/diag_edit.php:164 msgid "GoTo Line #" msgstr "" @@ -8360,7 +8532,7 @@ msgstr "" msgid "Forget all formerly connected consumers" msgstr "" -#: src/usr/local/www/diag_gmirror.php:73 src/usr/local/www/diag_gmirror.php:358 +#: src/usr/local/www/diag_gmirror.php:73 msgid "Remove metadata from disk" msgstr "" @@ -8385,11 +8557,11 @@ msgid "Force rebuild of mirror consumer" msgstr "" #: src/usr/local/www/diag_gmirror.php:96 -msgid "You must supply a valid mirror name." +msgid "A valid mirror name must be supplied." msgstr "" #: src/usr/local/www/diag_gmirror.php:100 -msgid "You must supply a valid consumer name" +msgid "A valid consumer name must be supplied" msgstr "" #: src/usr/local/www/diag_gmirror.php:107 @@ -8452,63 +8624,67 @@ msgstr "" msgid "Consumer" msgstr "" -#: src/usr/local/www/diag_gmirror.php:237 +#: src/usr/local/www/diag_gmirror.php:241 msgid "" "The options on this page are intended for use by advanced users only. This " "page is for managing existing mirrors, not creating new mirrors." msgstr "" -#: src/usr/local/www/diag_gmirror.php:242 +#: src/usr/local/www/diag_gmirror.php:246 msgid "GEOM Mirror Information - Mirror Status" msgstr "" -#: src/usr/local/www/diag_gmirror.php:268 +#: src/usr/local/www/diag_gmirror.php:273 msgid "Forget Disconnected Disks" msgstr "" -#: src/usr/local/www/diag_gmirror.php:277 -#: src/usr/local/www/diag_gmirror.php:295 +#: src/usr/local/www/diag_gmirror.php:282 +#: src/usr/local/www/diag_gmirror.php:300 msgid "Rebuild" msgstr "" -#: src/usr/local/www/diag_gmirror.php:278 -#: src/usr/local/www/diag_gmirror.php:296 +#: src/usr/local/www/diag_gmirror.php:283 +#: src/usr/local/www/diag_gmirror.php:301 msgid "Deactivate" msgstr "" -#: src/usr/local/www/diag_gmirror.php:312 +#: src/usr/local/www/diag_gmirror.php:317 msgid "No Mirrors Found" msgstr "" -#: src/usr/local/www/diag_gmirror.php:320 +#: src/usr/local/www/diag_gmirror.php:325 msgid "" "Some disk operations may only be performed when there are multiple consumers " "present in a mirror." msgstr "" -#: src/usr/local/www/diag_gmirror.php:324 +#: src/usr/local/www/diag_gmirror.php:329 msgid "Consumer Information - Available Consumers" msgstr "" -#: src/usr/local/www/diag_gmirror.php:333 +#: src/usr/local/www/diag_gmirror.php:338 msgid "Add to Mirror" msgstr "" -#: src/usr/local/www/diag_gmirror.php:354 -msgid "Reactivate on:" +#: src/usr/local/www/diag_gmirror.php:360 +msgid "Reactivate on" msgstr "" -#: src/usr/local/www/diag_gmirror.php:386 +#: src/usr/local/www/diag_gmirror.php:365 +msgid "Clear Metadata" +msgstr "" + +#: src/usr/local/www/diag_gmirror.php:394 msgid "No unused consumers found" msgstr "" -#: src/usr/local/www/diag_gmirror.php:392 +#: src/usr/local/www/diag_gmirror.php:400 msgid "" "Consumers may only be added to a mirror if they are larger than the size of " "the mirror." msgstr "" -#: src/usr/local/www/diag_gmirror.php:393 +#: src/usr/local/www/diag_gmirror.php:401 msgid "" "To repair a failed mirror, first perform a 'Forget' command on the mirror, " "followed by an 'insert' action on the new consumer." @@ -8528,25 +8704,36 @@ msgid "Not actually halting (DEBUG is set true)%s" msgstr "" #: src/usr/local/www/diag_halt.php:99 -msgid "Are you sure you want to halt the system?" +msgid "System Halt Confirmation" msgstr "" #: src/usr/local/www/diag_halt.php:103 msgid "" -"Click \"Halt\" to halt the system immediately, or \"No\" to go to the system " -"dashboard. (There will be a brief delay before the dashboard appears.)" +"Click \"Halt\" to halt the system immediately, or \"Cancel\" to go to the " +"system dashboard. (There will be a brief delay before the dashboard appears.)" msgstr "" -#: src/usr/local/www/diag_halt.php:105 +#: src/usr/local/www/diag_halt.php:105 src/usr/local/www/diag_halt.php:107 msgid "Halt" msgstr "" +#: src/usr/local/www/diag_halt.php:105 +msgid "Halt the system and power off" +msgstr "" + +#: src/usr/local/www/diag_halt.php:111 src/usr/local/www/diag_reboot.php:152 +#: src/usr/local/www/firewall_nat.php:500 +#: src/usr/local/www/firewall_rules.php:903 +#: src/usr/local/www/interfaces.php:1903 src/usr/local/www/interfaces.php:3210 +msgid "Cancel" +msgstr "" + #: src/usr/local/www/diag_limiter_info.php:65 src/usr/local/www/head.inc:378 msgid "Limiter Info" msgstr "" #: src/usr/local/www/diag_limiter_info.php:71 -msgid "We could not find any limiters on this system." +msgid "No limiters were found on this system." msgstr "" #: src/usr/local/www/diag_limiter_info.php:73 @@ -8554,7 +8741,7 @@ msgid "Limiters:" msgstr "" #: src/usr/local/www/diag_limiter_info.php:77 src/usr/local/www/head.inc:340 -#: src/usr/local/www/status_queues.php:145 +#: src/usr/local/www/status_queues.php:144 msgid "Queues" msgstr "" @@ -8585,8 +8772,8 @@ msgstr "" #: src/usr/local/www/diag_nanobsd.php:103 msgid "" -"If you would like to boot from this newly duplicated slice please set it " -"using the bootup information area." +"To boot from this newly duplicated slice set it using the bootup information " +"area." msgstr "" #: src/usr/local/www/diag_nanobsd.php:106 @@ -8622,107 +8809,85 @@ msgstr "" msgid "Image Size" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:157 +#: src/usr/local/www/diag_nanobsd.php:159 msgid "Switch Slice" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:161 +#: src/usr/local/www/diag_nanobsd.php:166 msgid "Bootup slice" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:174 -#, php-format -msgid "(Reference count %s)" -msgstr "" - -#: src/usr/local/www/diag_nanobsd.php:176 +#: src/usr/local/www/diag_nanobsd.php:184 msgid "Read/Write" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:177 +#: src/usr/local/www/diag_nanobsd.php:185 msgid "Switch to Read-Only" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:179 +#: src/usr/local/www/diag_nanobsd.php:187 msgid "Read-Only" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:180 +#: src/usr/local/www/diag_nanobsd.php:188 msgid "Switch to Read/Write" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:192 +#: src/usr/local/www/diag_nanobsd.php:206 msgid "Read/Write status" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:194 +#: src/usr/local/www/diag_nanobsd.php:208 msgid "" -"This setting is only temporary, and can be switched dynamically in the " -"background." +"NanoBSD is now always read-write to avoid read-write to read-only mount " +"problems." msgstr "" -#: src/usr/local/www/diag_nanobsd.php:198 -msgid "Permanent Read/Write" -msgstr "" - -#: src/usr/local/www/diag_nanobsd.php:218 +#: src/usr/local/www/diag_nanobsd.php:242 msgid "Duplicate " msgstr "" -#: src/usr/local/www/diag_nanobsd.php:222 +#: src/usr/local/www/diag_nanobsd.php:249 msgid "Duplicate boot slice" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:224 +#: src/usr/local/www/diag_nanobsd.php:251 msgid "" -"This will duplicate the bootup slice to the alternate slice. Use this if " -"you would like to duplicate the known good working boot partition to the " -"alternate." +"This will duplicate the bootup slice to the alternate slice. Use this to " +"duplicate the known good working boot partition to the alternate." msgstr "" -#: src/usr/local/www/diag_nanobsd.php:227 +#: src/usr/local/www/diag_nanobsd.php:254 msgid "RRD/DHCP Backup" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:232 +#: src/usr/local/www/diag_nanobsd.php:261 msgid "View log" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:236 +#: src/usr/local/www/diag_nanobsd.php:268 msgid "View previous upgrade log" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:246 +#: src/usr/local/www/diag_nanobsd.php:278 msgid "Previous Upgrade Log" msgstr "" -#: src/usr/local/www/diag_nanobsd.php:249 -msgid "File list:" -msgstr "" - -#: src/usr/local/www/diag_nanobsd.php:251 -msgid "Misc log:" -msgstr "" - -#: src/usr/local/www/diag_nanobsd.php:253 -msgid "fdisk/bsdlabel log:" -msgstr "" - -#: src/usr/local/www/diag_ndp.php:128 src/usr/local/www/diag_ndp.php:133 +#: src/usr/local/www/diag_ndp.php:129 src/usr/local/www/diag_ndp.php:134 #: src/usr/local/www/head.inc:379 msgid "NDP Table" msgstr "" -#: src/usr/local/www/diag_ndp.php:140 src/usr/local/www/interfaces.php:602 -#: src/usr/local/www/interfaces.php:1827 -#: src/usr/local/www/services_dhcpv6.php:1003 +#: src/usr/local/www/diag_ndp.php:141 src/usr/local/www/interfaces.php:611 +#: src/usr/local/www/interfaces.php:1837 +#: src/usr/local/www/services_dhcpv6.php:1017 #: src/usr/local/www/services_dhcpv6_edit.php:259 #: src/usr/local/www/status_dhcpv6_leases.php:457 msgid "IPv6 address" msgstr "" #: src/usr/local/www/diag_packet_capture.php:114 -#: src/usr/local/www/diag_packet_capture.php:413 +#: src/usr/local/www/diag_packet_capture.php:432 msgid "Download Capture" msgstr "" @@ -8738,207 +8903,219 @@ msgstr "" msgid "Invalid address family." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:169 +#: src/usr/local/www/diag_packet_capture.php:170 +msgid "IPv4 with ICMPv6 is not valid." +msgstr "" + +#: src/usr/local/www/diag_packet_capture.php:173 +msgid "IPv6 with ICMP is not valid." +msgstr "" + +#: src/usr/local/www/diag_packet_capture.php:176 +msgid "IPv6 with ARP is not valid." +msgstr "" + +#: src/usr/local/www/diag_packet_capture.php:181 msgid "Invalid protocol." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:183 +#: src/usr/local/www/diag_packet_capture.php:195 #, php-format msgid "A valid IP address or CIDR block must be specified. [%s]" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:190 +#: src/usr/local/www/diag_packet_capture.php:202 msgid "Invalid value specified for port." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:198 +#: src/usr/local/www/diag_packet_capture.php:210 msgid "Invalid value specified for packet length." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:206 +#: src/usr/local/www/diag_packet_capture.php:218 msgid "Invalid value specified for packet count." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:232 -#: src/usr/local/www/diag_packet_capture.php:396 -#: src/usr/local/www/diag_packet_capture.php:464 +#: src/usr/local/www/diag_packet_capture.php:244 +#: src/usr/local/www/diag_packet_capture.php:409 +#: src/usr/local/www/diag_packet_capture.php:485 #: src/usr/local/www/status_dhcp_leases.php:383 #: src/usr/local/www/status_dhcpv6_leases.php:462 -#: src/usr/local/www/status_dhcpv6_leases.php:554 +#: src/usr/local/www/status_dhcpv6_leases.php:557 msgid "Start" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:240 -#: src/usr/local/www/diag_packet_capture.php:393 -#: src/usr/local/www/diag_packet_capture.php:401 +#: src/usr/local/www/diag_packet_capture.php:252 +#: src/usr/local/www/diag_packet_capture.php:406 +#: src/usr/local/www/diag_packet_capture.php:416 msgid "Stop" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:267 +#: src/usr/local/www/diag_packet_capture.php:279 msgid "Exclude" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:297 +#: src/usr/local/www/diag_packet_capture.php:309 msgid "Packet Capture Options" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:304 +#: src/usr/local/www/diag_packet_capture.php:316 msgid "Select the interface on which to capture traffic. " msgstr "" -#: src/usr/local/www/diag_packet_capture.php:308 +#: src/usr/local/www/diag_packet_capture.php:320 msgid "Promiscuous" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:311 +#: src/usr/local/www/diag_packet_capture.php:323 msgid "" -"Note: Some network adapters do not support or work well in promiscuous mode." -"<br />More: <a target=\"_blank\" href=\"http://www.freebsd.org/cgi/man.cgi?" +"The packet capture will be performed using promiscuous mode.<br />Note: Some " +"network adapters do not support or work well in promiscuous mode.<br />More: " +"<a target=\"_blank\" href=\"http://www.freebsd.org/cgi/man.cgi?" "query=tcpdump&apropos=0&sektion=0&manpath=FreeBSD+8.3-stable&" "arch=default&format=html\">Packet capture</a>" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:320 +#: src/usr/local/www/diag_packet_capture.php:333 msgid "IPv4 Only" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:321 +#: src/usr/local/www/diag_packet_capture.php:334 msgid "IPv6 Only" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:317 -#: src/usr/local/www/firewall_rules_edit.php:1227 +#: src/usr/local/www/diag_packet_capture.php:330 +#: src/usr/local/www/firewall_rules_edit.php:1243 #: src/usr/local/www/system_gateways_edit.php:628 msgid "Address Family" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:323 -msgid "Select the type of traffic to be captured" +#: src/usr/local/www/diag_packet_capture.php:336 +msgid "Select the type of traffic to be captured." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:330 +#: src/usr/local/www/diag_packet_capture.php:343 msgid "Select the protocol to capture, or \"Any\". " msgstr "" -#: src/usr/local/www/diag_packet_capture.php:334 +#: src/usr/local/www/diag_packet_capture.php:347 msgid "Host Address" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:337 +#: src/usr/local/www/diag_packet_capture.php:350 msgid "" "This value is either the Source or Destination IP address or subnet in CIDR " "notation. The packet capture will look for this address in either field.<br /" ">Matching can be negated by preceding the value with \"!\". Multiple IP " "addresses or CIDR subnets may be specified. Comma (\",\") separated values " "perform a boolean \"AND\". Separating with a pipe (\"|\") performs a boolean " -"\"OR\".<br />If you leave this field blank, all packets on the specified " +"\"OR\".<br />If this field is left blank, all packets on the specified " "interface will be captured." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:344 -#: src/usr/local/www/diag_testport.php:83 +#: src/usr/local/www/diag_packet_capture.php:357 +#: src/usr/local/www/diag_testport.php:85 #: src/usr/local/www/diag_testport.php:262 -#: src/usr/local/www/firewall_aliases_edit.php:587 +#: src/usr/local/www/firewall_aliases_edit.php:581 #: src/usr/local/www/firewall_nat_edit.php:880 #: src/usr/local/www/firewall_nat_out_edit.php:527 #: src/usr/local/www/firewall_nat_out_edit.php:551 #: src/usr/local/www/firewall_nat_out_edit.php:607 -#: src/usr/local/www/firewall_rules.php:408 -#: src/usr/local/www/firewall_rules.php:410 -#: src/usr/local/www/interfaces.php:3066 src/usr/local/www/interfaces.php:3090 +#: src/usr/local/www/firewall_rules.php:411 +#: src/usr/local/www/firewall_rules.php:413 +#: src/usr/local/www/interfaces.php:3073 src/usr/local/www/interfaces.php:3097 #: src/usr/local/www/load_balancer_pool.php:157 #: src/usr/local/www/load_balancer_pool_edit.php:107 -#: src/usr/local/www/load_balancer_pool_edit.php:371 -#: src/usr/local/www/load_balancer_virtual_server.php:157 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:231 +#: src/usr/local/www/load_balancer_pool_edit.php:363 +#: src/usr/local/www/load_balancer_virtual_server.php:177 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:233 #: src/usr/local/www/status_upnp.php:103 msgid "Port" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:347 +#: src/usr/local/www/diag_packet_capture.php:360 msgid "" "The port can be either the source or destination port. The packet capture " -"will look for this port in either field. Leave blank if you do not want to " -"filter by port." +"will look for this port in either field. Leave blank if not filtering by " +"port." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:352 +#: src/usr/local/www/diag_packet_capture.php:365 msgid "Packet Length" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:355 +#: src/usr/local/www/diag_packet_capture.php:368 msgid "" "The Packet length is the number of bytes of each packet that will be " "captured. Default value is 0, which will capture the entire frame regardless " "of its size." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:360 -#: src/usr/local/www/diag_ping.php:95 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:124 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:235 +#: src/usr/local/www/diag_packet_capture.php:373 +#: src/usr/local/www/diag_ping.php:83 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:125 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:236 msgid "Count" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:363 +#: src/usr/local/www/diag_packet_capture.php:376 msgid "" "This is the number of packets the packet capture will grab. Default value is " "100.<br />Enter 0 (zero) for no count limit." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:370 -#: src/usr/local/www/services_router_advertisements.php:149 +#: src/usr/local/www/diag_packet_capture.php:383 +#: src/usr/local/www/services_router_advertisements.php:150 msgid "Normal" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:371 +#: src/usr/local/www/diag_packet_capture.php:384 msgid "Medium" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:372 -#: src/usr/local/www/services_router_advertisements.php:150 +#: src/usr/local/www/diag_packet_capture.php:385 +#: src/usr/local/www/services_router_advertisements.php:151 msgid "High" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:373 +#: src/usr/local/www/diag_packet_capture.php:386 msgid "Full" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:368 +#: src/usr/local/www/diag_packet_capture.php:381 msgid "Level of detail" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:375 +#: src/usr/local/www/diag_packet_capture.php:388 msgid "" "This is the level of detail that will be displayed after hitting \"Stop\" " "when the packets have been captured.<br />This option does not affect the " "level of detail when downloading the packet capture. " msgstr "" -#: src/usr/local/www/diag_packet_capture.php:380 +#: src/usr/local/www/diag_packet_capture.php:393 msgid "Reverse DNS Lookup" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:383 +#: src/usr/local/www/diag_packet_capture.php:396 msgid "" -"This check box will cause the packet capture to perform a reverse DNS lookup " -"associated with all IP addresses.<br />This option can cause delays for " -"large packet captures." +"The packet capture will perform a reverse DNS lookup associated with all IP " +"addresses.<br />This option can cause delays for large packet captures." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:408 +#: src/usr/local/www/diag_packet_capture.php:425 msgid "View Capture" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:417 +#: src/usr/local/www/diag_packet_capture.php:438 msgid "Last capture" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:467 +#: src/usr/local/www/diag_packet_capture.php:488 msgid "Packet capture is running." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:477 +#: src/usr/local/www/diag_packet_capture.php:498 msgid "Packets Captured" msgstr "" @@ -8978,10 +9155,6 @@ msgstr "" msgid "long" msgstr "" -#: src/usr/local/www/diag_pftop.php:131 -msgid "queue" -msgstr "" - #: src/usr/local/www/diag_pftop.php:132 msgid "rules" msgstr "" @@ -9002,8 +9175,11 @@ msgstr "" msgid "time" msgstr "" -#: src/usr/local/www/diag_pftop.php:140 src/usr/local/www/diag_smart.php:303 -#: src/usr/local/www/diag_smart.php:452 +#: src/usr/local/www/diag_pftop.php:140 src/usr/local/www/diag_smart.php:324 +#: src/usr/local/www/diag_smart.php:477 +#: src/usr/local/www/services_captiveportal.php:1118 +#: src/usr/local/www/services_captiveportal.php:1152 +#: src/usr/local/www/services_captiveportal.php:1184 msgid "View" msgstr "" @@ -9017,7 +9193,7 @@ msgstr "" #: src/usr/local/www/diag_pftop.php:154 #: src/usr/local/www/firewall_nat_out.php:315 -#: src/usr/local/www/firewall_nat_out.php:566 +#: src/usr/local/www/firewall_nat_out.php:568 #: src/usr/local/www/status_logs_common.inc:510 msgid "Destination Port" msgstr "" @@ -9036,19 +9212,19 @@ msgstr "" #: src/usr/local/www/diag_pftop.php:160 src/usr/local/www/diag_testport.php:270 #: src/usr/local/www/firewall_nat_out.php:313 -#: src/usr/local/www/firewall_nat_out.php:564 +#: src/usr/local/www/firewall_nat_out.php:566 #: src/usr/local/www/status_logs_common.inc:469 msgid "Source Port" msgstr "" #: src/usr/local/www/diag_pftop.php:161 src/usr/local/www/diag_testport.php:285 -#: src/usr/local/www/diag_traceroute.php:179 +#: src/usr/local/www/diag_traceroute.php:167 #: src/usr/local/www/firewall_nat.php:240 -#: src/usr/local/www/status_logs_settings.php:355 +#: src/usr/local/www/status_logs_settings.php:354 msgid "Source Address" msgstr "" -#: src/usr/local/www/diag_pftop.php:147 src/usr/local/www/status_graph.php:176 +#: src/usr/local/www/diag_pftop.php:147 src/usr/local/www/status_graph.php:191 msgid "Sort by" msgstr "" @@ -9060,74 +9236,68 @@ msgstr "" msgid "Gathering pfTOP activity, please wait..." msgstr "" -#: src/usr/local/www/diag_ping.php:80 -#: src/usr/local/www/firewall_nat_out_edit.php:590 -#: src/usr/local/www/interfaces.php:1856 src/usr/local/www/interfaces.php:2837 -#: src/usr/local/www/interfaces.php:2846 src/usr/local/www/interfaces.php:2855 -#: src/usr/local/www/interfaces.php:2913 src/usr/local/www/interfaces.php:3168 -#: src/usr/local/www/services_ntpd_gps.php:249 -msgid "Default" -msgstr "" - -#: src/usr/local/www/diag_ping.php:95 src/usr/local/www/diag_testport.php:83 -#: src/usr/local/www/diag_traceroute.php:100 -#: src/usr/local/www/load_balancer_monitor_edit.php:339 -#: src/usr/local/www/load_balancer_monitor_edit.php:365 -#: src/usr/local/www/services_dnsmasq.php:374 +#: src/usr/local/www/diag_ping.php:83 src/usr/local/www/diag_testport.php:85 +#: src/usr/local/www/diag_traceroute.php:88 +#: src/usr/local/www/load_balancer_monitor_edit.php:337 +#: src/usr/local/www/load_balancer_monitor_edit.php:363 +#: src/usr/local/www/services_dnsmasq.php:352 #: src/usr/local/www/services_dnsmasq_edit.php:246 -#: src/usr/local/www/services_unbound.php:438 +#: src/usr/local/www/services_unbound.php:467 #: src/usr/local/www/services_unbound_host_edit.php:247 #: src/usr/local/www/status_ipsec_leases.php:89 #: src/usr/local/www/services_rfc2136_edit.php:249 msgid "Host" msgstr "" -#: src/usr/local/www/diag_ping.php:99 +#: src/usr/local/www/diag_ping.php:87 #, php-format msgid "Count must be between 1 and %s" msgstr "" -#: src/usr/local/www/diag_ping.php:105 -#: src/usr/local/www/diag_traceroute.php:109 +#: src/usr/local/www/diag_ping.php:93 src/usr/local/www/diag_traceroute.php:97 msgid "When using IPv4, the target host must be an IPv4 address or hostname." msgstr "" -#: src/usr/local/www/diag_ping.php:108 -#: src/usr/local/www/diag_traceroute.php:112 +#: src/usr/local/www/diag_ping.php:96 src/usr/local/www/diag_traceroute.php:100 msgid "When using IPv6, the target host must be an IPv6 address or hostname." msgstr "" -#: src/usr/local/www/diag_ping.php:159 +#: src/usr/local/www/diag_ping.php:147 #, php-format msgid "Host \"%s\" did not respond or could not be resolved." msgstr "" -#: src/usr/local/www/diag_ping.php:184 src/usr/local/www/diag_testport.php:292 -#: src/usr/local/www/diag_traceroute.php:172 -#: src/usr/local/www/status_logs_settings.php:362 +#: src/usr/local/www/diag_ping.php:172 src/usr/local/www/diag_testport.php:292 +#: src/usr/local/www/diag_traceroute.php:160 +#: src/usr/local/www/status_logs_settings.php:361 msgid "IP Protocol" msgstr "" -#: src/usr/local/www/diag_ping.php:191 +#: src/usr/local/www/diag_ping.php:181 +msgid "Automatically selected (default)" +msgstr "" + +#: src/usr/local/www/diag_ping.php:179 #: src/usr/local/www/firewall_nat_1to1_edit.php:160 #: src/usr/local/www/firewall_nat_edit.php:253 msgid "Source address" msgstr "" -#: src/usr/local/www/diag_ping.php:194 -msgid "Select source address for the ping" +#: src/usr/local/www/diag_ping.php:182 +msgid "Select source address for the ping." msgstr "" -#: src/usr/local/www/diag_ping.php:198 +#: src/usr/local/www/diag_ping.php:186 msgid "Maximum number of pings" msgstr "" -#: src/usr/local/www/diag_ping.php:201 -msgid "Select the maximum number of pings" +#: src/usr/local/www/diag_ping.php:189 +msgid "Select the maximum number of pings." msgstr "" #: src/usr/local/www/diag_reboot.php:76 src/usr/local/www/diag_reboot.php:146 -#: src/usr/local/www/head.inc:385 src/usr/local/www/interfaces.php:1975 +#: src/usr/local/www/diag_reboot.php:148 src/usr/local/www/head.inc:385 +#: src/usr/local/www/interfaces.php:1991 msgid "Reboot" msgstr "" @@ -9136,26 +9306,30 @@ msgid "Not actually rebooting (DEBUG is set true)." msgstr "" #: src/usr/local/www/diag_reboot.php:112 -#: src/usr/local/www/pkg_mgr_install.php:650 +#: src/usr/local/www/pkg_mgr_install.php:693 #, php-format msgid "Rebooting%sPage will automatically reload in %s seconds" msgstr "" #: src/usr/local/www/diag_reboot.php:120 -#: src/usr/local/www/pkg_mgr_install.php:658 +#: src/usr/local/www/pkg_mgr_install.php:701 #, php-format msgid "Not yet ready%s Retrying in another %s seconds" msgstr "" #: src/usr/local/www/diag_reboot.php:140 -msgid "Are you sure you want to reboot the system?" +msgid "System Reboot Confirmation" msgstr "" #: src/usr/local/www/diag_reboot.php:144 msgid "" -"Click \"Reboot\" to reboot the system immediately, or \"No\" to go to the " -"system dashboard without rebooting. (There will be a brief delay before the " -"dashboard appears.)" +"Click \"Reboot\" to reboot the system immediately, or \"Cancel\" to go to " +"the system dashboard without rebooting. (There will be a brief delay before " +"the dashboard appears.)" +msgstr "" + +#: src/usr/local/www/diag_reboot.php:146 +msgid "Reboot the system" msgstr "" #: src/usr/local/www/diag_resetstate.php:77 @@ -9174,8 +9348,8 @@ msgid "" "be re-established. This may be necessary after making substantial changes to " "the firewall and/or NAT rules, especially if there are IP protocol mappings " "(e.g. for PPTP or IPv6) with open connections.%sThe firewall will normally " -"leave the state tables intact when changing rules.%s%sNOTE:%s If you reset " -"the firewall state table, the browser session may appear to be hung after " +"leave the state tables intact when changing rules.%s%sNOTE:%s Resetting the " +"firewall state table may cause the browser session to appear hung after " "clicking "Reset". Simply refresh the page to continue." msgstr "" @@ -9189,19 +9363,19 @@ msgid "" msgstr "" #: src/usr/local/www/diag_resetstate.php:124 -#: src/usr/local/www/status_lb_pool.php:279 -#: src/usr/local/www/status_lb_pool.php:281 -msgid "Reset" -msgstr "" - -#: src/usr/local/www/diag_resetstate.php:131 msgid "Select States to Reset" msgstr "" -#: src/usr/local/www/diag_resetstate.php:135 +#: src/usr/local/www/diag_resetstate.php:128 msgid "State Table" msgstr "" +#: src/usr/local/www/diag_resetstate.php:146 +#: src/usr/local/www/status_lb_pool.php:279 +#: src/usr/local/www/status_lb_pool.php:281 +msgid "Reset" +msgstr "" + #: src/usr/local/www/diag_routes.php:97 src/usr/local/www/head.inc:386 msgid "Routes" msgstr "" @@ -9216,8 +9390,8 @@ msgstr "" #: src/usr/local/www/diag_routes.php:116 msgid "" -"Enabling name resolution may cause the query to take longer. You can stop it " -"at any time by clicking the Stop button in your browser." +"Enabling name resolution may cause the query to take longer. It can be " +"stopped at any time by clicking the Stop button in the browser." msgstr "" #: src/usr/local/www/diag_routes.php:122 @@ -9225,24 +9399,36 @@ msgid "Rows to display" msgstr "" #: src/usr/local/www/diag_routes.php:132 -msgid "Use a regular expression to filter IP address or hostnames" +msgid "Use a regular expression to filter IP address or hostnames." +msgstr "" + +#: src/usr/local/www/diag_routes.php:138 src/usr/local/www/diag_tables.php:180 +#: src/usr/local/www/head.inc:243 src/usr/local/www/pkg_mgr_install.php:247 +#: src/usr/local/www/pkg_mgr_installed.php:227 +#: src/usr/local/www/system_certmanager.php:499 +#: src/usr/local/www/system_certmanager.php:561 +#: src/usr/local/www/system_certmanager.php:911 +#: src/usr/local/www/system_certmanager.php:959 +#: src/usr/local/www/system_update_settings.php:111 +#: src/usr/local/www/widgets/widgets/installed_packages.widget.php:154 +msgid "Update" msgstr "" -#: src/usr/local/www/diag_routes.php:215 +#: src/usr/local/www/diag_routes.php:223 msgid "IPv4 Routes" msgstr "" -#: src/usr/local/www/diag_routes.php:225 src/usr/local/www/diag_routes.php:243 +#: src/usr/local/www/diag_routes.php:233 src/usr/local/www/diag_routes.php:251 msgid "Gathering data, please wait..." msgstr "" -#: src/usr/local/www/diag_routes.php:233 +#: src/usr/local/www/diag_routes.php:241 msgid "IPv6 Routes" msgstr "" #: src/usr/local/www/diag_smart.php:70 src/usr/local/www/head.inc:387 #: src/usr/local/www/widgets/include/smart_status.inc:3 -#: src/usr/local/www/widgets/widgets/smart_status.widget.php:72 +#: src/usr/local/www/widgets/widgets/smart_status.widget.php:73 msgid "S.M.A.R.T. Status" msgstr "" @@ -9270,100 +9456,104 @@ msgstr "" msgid "Device does not exist, bailing." msgstr "" -#: src/usr/local/www/diag_smart.php:135 -msgid "Invalid test type, bailing." +#: src/usr/local/www/diag_smart.php:131 +msgid "S.M.A.R.T. is not supported in Hyper-V guests." msgstr "" #: src/usr/local/www/diag_smart.php:142 +msgid "Invalid test type, bailing." +msgstr "" + +#: src/usr/local/www/diag_smart.php:149 msgid "Test Results" msgstr "" -#: src/usr/local/www/diag_smart.php:152 src/usr/local/www/diag_smart.php:218 -#: src/usr/local/www/diag_smart.php:504 src/usr/local/www/diag_smart.php:511 +#: src/usr/local/www/diag_smart.php:159 src/usr/local/www/diag_smart.php:237 +#: src/usr/local/www/diag_smart.php:531 src/usr/local/www/diag_smart.php:540 msgid "Abort" msgstr "" -#: src/usr/local/www/diag_smart.php:153 src/usr/local/www/diag_smart.php:181 -#: src/usr/local/www/diag_smart.php:206 +#: src/usr/local/www/diag_smart.php:161 +msgid "Abort Test" +msgstr "" + +#: src/usr/local/www/diag_smart.php:165 src/usr/local/www/diag_smart.php:196 +#: src/usr/local/www/diag_smart.php:224 msgid "Back" msgstr "" -#: src/usr/local/www/diag_smart.php:167 +#: src/usr/local/www/diag_smart.php:180 msgid "Invalid info type, bailing." msgstr "" -#: src/usr/local/www/diag_smart.php:174 src/usr/local/www/diag_smart.php:308 -#: src/usr/local/www/pkg_mgr_installed.php:212 +#: src/usr/local/www/diag_smart.php:187 src/usr/local/www/diag_smart.php:331 +#: src/usr/local/www/pkg_mgr_installed.php:232 msgid "Information" msgstr "" -#: src/usr/local/www/diag_smart.php:192 +#: src/usr/local/www/diag_smart.php:208 msgid "Invalid log type, bailing." msgstr "" -#: src/usr/local/www/diag_smart.php:199 +#: src/usr/local/www/diag_smart.php:215 msgid "Logs" msgstr "" -#: src/usr/local/www/diag_smart.php:233 +#: src/usr/local/www/diag_smart.php:252 #, php-format msgid "Email sent to %s" msgstr "" -#: src/usr/local/www/diag_smart.php:271 -#: src/usr/local/www/services_captiveportal.php:96 -#: src/usr/local/www/services_captiveportal.php:562 -#: src/usr/local/www/services_captiveportal_filemanager.php:172 -#: src/usr/local/www/services_captiveportal_hostname.php:138 -#: src/usr/local/www/services_captiveportal_ip.php:131 -#: src/usr/local/www/services_captiveportal_mac.php:196 -#: src/usr/local/www/services_captiveportal_vouchers.php:438 +#: src/usr/local/www/diag_smart.php:290 +#: src/usr/local/www/services_captiveportal.php:97 +#: src/usr/local/www/services_captiveportal.php:563 +#: src/usr/local/www/services_captiveportal_filemanager.php:173 +#: src/usr/local/www/services_captiveportal_hostname.php:139 +#: src/usr/local/www/services_captiveportal_ip.php:132 +#: src/usr/local/www/services_captiveportal_mac.php:197 +#: src/usr/local/www/services_captiveportal_vouchers.php:439 #: src/usr/local/www/vpn_l2tp.php:219 src/usr/local/www/vpn_l2tp.php:232 -#: src/usr/local/www/vpn_l2tp.php:259 src/usr/local/www/vpn_l2tp_users.php:118 +#: src/usr/local/www/vpn_l2tp.php:256 src/usr/local/www/vpn_l2tp_users.php:118 msgid "Configuration" msgstr "" -#: src/usr/local/www/diag_smart.php:275 -#: src/usr/local/www/system_camanager.php:619 -#: src/usr/local/www/system_certmanager.php:781 -#: src/usr/local/www/system_certmanager.php:896 +#: src/usr/local/www/diag_smart.php:294 +#: src/usr/local/www/system_camanager.php:616 +#: src/usr/local/www/system_certmanager.php:740 +#: src/usr/local/www/system_certmanager.php:859 msgid "Email Address" msgstr "" -#: src/usr/local/www/diag_smart.php:285 +#: src/usr/local/www/diag_smart.php:304 msgid "Send test email" msgstr "" -#: src/usr/local/www/diag_smart.php:317 +#: src/usr/local/www/diag_smart.php:340 msgid "Info type" msgstr "" -#: src/usr/local/www/diag_smart.php:363 src/usr/local/www/diag_smart.php:434 -#: src/usr/local/www/diag_smart.php:488 src/usr/local/www/diag_smart.php:522 +#: src/usr/local/www/diag_smart.php:386 src/usr/local/www/diag_smart.php:459 +#: src/usr/local/www/diag_smart.php:515 src/usr/local/www/diag_smart.php:551 msgid "Device: /dev/" msgstr "" -#: src/usr/local/www/diag_smart.php:381 -msgid "Test" -msgstr "" - -#: src/usr/local/www/diag_smart.php:386 +#: src/usr/local/www/diag_smart.php:411 msgid "Perform self-tests" msgstr "" -#: src/usr/local/www/diag_smart.php:395 +#: src/usr/local/www/diag_smart.php:420 msgid "Test type" msgstr "" -#: src/usr/local/www/diag_smart.php:429 -msgid "Select \"Conveyance\" for ATA disks only" +#: src/usr/local/www/diag_smart.php:454 +msgid "Select \"Conveyance\" for ATA disks only." msgstr "" -#: src/usr/local/www/diag_smart.php:457 +#: src/usr/local/www/diag_smart.php:484 msgid "View Logs" msgstr "" -#: src/usr/local/www/diag_smart.php:466 +#: src/usr/local/www/diag_smart.php:493 msgid "Log type" msgstr "" @@ -9379,15 +9569,15 @@ msgstr "" msgid "Show all socket connections" msgstr "" -#: src/usr/local/www/diag_sockets.php:93 +#: src/usr/local/www/diag_sockets.php:96 msgid "System Socket Information" msgstr "" -#: src/usr/local/www/diag_sockets.php:138 +#: src/usr/local/www/diag_sockets.php:141 msgid "Socket information - explanation." msgstr "" -#: src/usr/local/www/diag_sockets.php:139 +#: src/usr/local/www/diag_sockets.php:142 msgid "" "This page shows the output for the commands: \"sockstat -4lL\" and " "\"sockstat -6lL\".<br />Or in case of showing all sockets the output for: " @@ -9410,10 +9600,10 @@ msgstr "" #: src/usr/local/www/diag_states_summary.php:180 #: src/usr/local/www/firewall_aliases.php:189 -#: src/usr/local/www/services_dnsmasq.php:376 -#: src/usr/local/www/services_dnsmasq.php:456 -#: src/usr/local/www/services_unbound.php:440 -#: src/usr/local/www/services_unbound.php:516 +#: src/usr/local/www/services_dnsmasq.php:354 +#: src/usr/local/www/services_dnsmasq.php:428 +#: src/usr/local/www/services_unbound.php:469 +#: src/usr/local/www/services_unbound.php:545 #: src/usr/local/www/widgets/widgets/ipsec.widget.php:251 msgid "IP" msgstr "" @@ -9453,11 +9643,11 @@ msgstr "" msgid "System Activity" msgstr "" -#: src/usr/local/www/diag_system_activity.php:106 +#: src/usr/local/www/diag_system_activity.php:120 msgid "CPU Activity" msgstr "" -#: src/usr/local/www/diag_system_activity.php:108 +#: src/usr/local/www/diag_system_activity.php:122 msgid "Gathering CPU activity, please wait..." msgstr "" @@ -9487,80 +9677,71 @@ msgstr "" msgid "Table" msgstr "" -#: src/usr/local/www/diag_tables.php:180 src/usr/local/www/head.inc:243 -#: src/usr/local/www/pkg_mgr_install.php:240 -#: src/usr/local/www/pkg_mgr_installed.php:207 -#: src/usr/local/www/system_certmanager.php:499 -#: src/usr/local/www/system_certmanager.php:561 -#: src/usr/local/www/system_certmanager.php:594 -#: src/usr/local/www/system_certmanager.php:949 -#: src/usr/local/www/system_certmanager.php:952 -#: src/usr/local/www/system_update_settings.php:99 -#: src/usr/local/www/widgets/widgets/installed_packages.widget.php:154 -msgid "Update" +#: src/usr/local/www/diag_tables.php:187 +msgid "Empty Table" msgstr "" -#: src/usr/local/www/diag_tables.php:185 -msgid "Clear Table" -msgstr "" - -#: src/usr/local/www/diag_tables.php:213 +#: src/usr/local/www/diag_tables.php:217 #, php-format msgid "Table last updated on %s." msgstr "" -#: src/usr/local/www/diag_tables.php:215 +#: src/usr/local/www/diag_tables.php:219 msgid "Date of last update of table is unknown." msgstr "" -#: src/usr/local/www/diag_tables.php:218 +#: src/usr/local/www/diag_tables.php:222 #, php-format msgid "%s records." msgstr "" -#: src/usr/local/www/diag_tables.php:218 +#: src/usr/local/www/diag_tables.php:222 msgid "." msgstr "" -#: src/usr/local/www/diag_tables.php:218 +#: src/usr/local/www/diag_tables.php:222 msgid "," msgstr "" -#: src/usr/local/www/diag_tables.php:230 +#: src/usr/local/www/diag_tables.php:234 msgid "Hide table comments." msgstr "" -#: src/usr/local/www/diag_tables.php:231 +#: src/usr/local/www/diag_tables.php:235 msgid "Show table comments." msgstr "" -#: src/usr/local/www/diag_tables.php:280 +#: src/usr/local/www/diag_tables.php:284 msgid "No entries exist in this table." msgstr "" +#: src/usr/local/www/diag_tables.php:321 +msgid "Remove this entry" +msgstr "" + #: src/usr/local/www/diag_testport.php:71 #: src/usr/local/www/diag_testport.php:250 src/usr/local/www/head.inc:382 msgid "Test Port" msgstr "" -#: src/usr/local/www/diag_testport.php:87 +#: src/usr/local/www/diag_testport.php:89 msgid "Please enter a valid IP or hostname." msgstr "" -#: src/usr/local/www/diag_testport.php:91 +#: src/usr/local/www/diag_testport.php:93 msgid "Please enter a valid port number." msgstr "" -#: src/usr/local/www/diag_testport.php:95 +#: src/usr/local/www/diag_testport.php:97 msgid "Please enter a valid source port number, or leave the field blank." msgstr "" -#: src/usr/local/www/diag_testport.php:99 -msgid "You cannot connect to an IPv4 address using IPv6." +#: src/usr/local/www/diag_testport.php:101 +msgid "Cannot connect to an IPv4 address using IPv6." msgstr "" -#: src/usr/local/www/diag_testport.php:102 -msgid "You cannot connect to an IPv6 address using IPv4." +#: src/usr/local/www/diag_testport.php:104 +msgid "Cannot connect to an IPv6 address using IPv4." msgstr "" #: src/usr/local/www/diag_testport.php:228 @@ -9584,8 +9765,8 @@ msgstr "" #: src/usr/local/www/diag_testport.php:244 msgid "" -"This page allows you to perform a simple TCP connection test to determine if " -"a host is up and accepting connections on a given port." +"This page performs a simple TCP connection test to determine if a host is up " +"and accepting connections on a given port." msgstr "" #: src/usr/local/www/diag_testport.php:245 @@ -9605,64 +9786,64 @@ msgid "" msgstr "" #: src/usr/local/www/diag_testport.php:288 -#: src/usr/local/www/diag_traceroute.php:182 -msgid "Select source address for the trace" +#: src/usr/local/www/diag_traceroute.php:170 +msgid "Select source address for the trace." msgstr "" #: src/usr/local/www/diag_testport.php:295 msgid "" -"If you force IPv4 or IPv6 and use a hostname that does not contain a result " -"using that protocol, it will result in an error. For example if you force " -"IPv4 and use a hostname that only returns an AAAA IPv6 IP address, it will " -"not work." +"If IPv4 or IPv6 is forced and a hostname is used that does not contain a " +"result using that protocol, it will result in an error. For example if IPv4 " +"is forced and a hostname is used that only returns an AAAA IPv6 IP address, " +"it will not work." msgstr "" -#: src/usr/local/www/diag_testport.php:306 +#: src/usr/local/www/diag_testport.php:314 msgid "Received Remote Text" msgstr "" -#: src/usr/local/www/diag_traceroute.php:100 +#: src/usr/local/www/diag_traceroute.php:88 msgid "ttl" msgstr "" -#: src/usr/local/www/diag_traceroute.php:104 +#: src/usr/local/www/diag_traceroute.php:92 #, php-format msgid "Maximum number of hops must be between 1 and %s" msgstr "" -#: src/usr/local/www/diag_traceroute.php:154 +#: src/usr/local/www/diag_traceroute.php:142 #, php-format msgid "Error: %s could not be traced/resolved" msgstr "" -#: src/usr/local/www/diag_traceroute.php:175 -msgid "Select the protocol to use" +#: src/usr/local/www/diag_traceroute.php:163 +msgid "Select the protocol to use." msgstr "" -#: src/usr/local/www/diag_traceroute.php:186 -msgid "Maximum nuber of hops" +#: src/usr/local/www/diag_traceroute.php:174 +msgid "Maximum number of hops" msgstr "" -#: src/usr/local/www/diag_traceroute.php:189 -msgid "Select the maximum number of network hops to trace" +#: src/usr/local/www/diag_traceroute.php:177 +msgid "Select the maximum number of network hops to trace." msgstr "" -#: src/usr/local/www/diag_traceroute.php:193 +#: src/usr/local/www/diag_traceroute.php:181 msgid "Reverse Address Lookup" msgstr "" -#: src/usr/local/www/diag_traceroute.php:196 +#: src/usr/local/www/diag_traceroute.php:184 msgid "" "When checked, traceroute will attempt to perform a PTR lookup to locate " "hostnames for hops along the path. This will slow down the process as it has " "to wait for DNS replies." msgstr "" -#: src/usr/local/www/diag_traceroute.php:200 +#: src/usr/local/www/diag_traceroute.php:188 msgid "Use ICMP" msgstr "" -#: src/usr/local/www/diag_traceroute.php:203 +#: src/usr/local/www/diag_traceroute.php:191 msgid "" "By default, traceroute uses UDP but that may be blocked by some routers. " "Check this box to use ICMP instead, which may succeed. " @@ -9687,8 +9868,8 @@ msgstr "" #: src/usr/local/www/easyrule.php:109 msgid "" -"If you are seeing this, there apparently was not an error, and you navigated " -"to the page directly without telling it what to do." +"There apparently was not an error, and this page was navigated to directly " +"without any instructions for what it should do." msgstr "" #: src/usr/local/www/easyrule.php:111 @@ -9730,14 +9911,14 @@ msgstr "" #: src/usr/local/www/firewall_nat.php:206 #: src/usr/local/www/firewall_nat_1to1.php:155 #: src/usr/local/www/firewall_nat_1to1_edit.php:281 -#: src/usr/local/www/firewall_nat_edit.php:653 +#: src/usr/local/www/firewall_nat_edit.php:654 #: src/usr/local/www/firewall_nat_npt.php:155 #: src/usr/local/www/firewall_nat_npt_edit.php:212 #: src/usr/local/www/firewall_nat_out.php:239 -#: src/usr/local/www/firewall_nat_out_edit.php:393 -#: src/usr/local/www/firewall_rules.php:72 -#: src/usr/local/www/firewall_rules.php:355 -#: src/usr/local/www/firewall_rules_edit.php:1060 +#: src/usr/local/www/firewall_nat_out_edit.php:396 +#: src/usr/local/www/firewall_rules.php:75 +#: src/usr/local/www/firewall_rules.php:358 +#: src/usr/local/www/firewall_rules_edit.php:1076 #: src/usr/local/www/firewall_schedule.php:75 #: src/usr/local/www/firewall_schedule_edit.php:85 #: src/usr/local/www/firewall_shaper.php:75 @@ -9745,7 +9926,7 @@ msgstr "" #: src/usr/local/www/firewall_shaper_vinterface.php:73 #: src/usr/local/www/firewall_shaper_wizards.php:96 #: src/usr/local/www/firewall_virtual_ip.php:271 -#: src/usr/local/www/firewall_virtual_ip_edit.php:320 +#: src/usr/local/www/firewall_virtual_ip_edit.php:329 #: src/usr/local/www/status_logs_common.inc:122 #: src/usr/local/www/status_logs_settings.php:234 msgid "Firewall" @@ -9760,36 +9941,35 @@ msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:164 #: src/usr/local/www/firewall_nat_npt.php:164 #: src/usr/local/www/firewall_nat_out.php:248 -#: src/usr/local/www/firewall_rules.php:366 -#: src/usr/local/www/firewall_shaper.php:432 +#: src/usr/local/www/firewall_rules.php:369 +#: src/usr/local/www/firewall_shaper.php:411 #: src/usr/local/www/firewall_shaper_queues.php:239 #: src/usr/local/www/firewall_shaper_vinterface.php:411 #: src/usr/local/www/firewall_shaper_wizards.php:122 #: src/usr/local/www/firewall_virtual_ip.php:279 -#: src/usr/local/www/interfaces.php:1696 -#: src/usr/local/www/interfaces_assign.php:509 +#: src/usr/local/www/interfaces_assign.php:514 #: src/usr/local/www/load_balancer_monitor.php:121 #: src/usr/local/www/load_balancer_pool.php:135 #: src/usr/local/www/load_balancer_setting.php:134 -#: src/usr/local/www/load_balancer_virtual_server.php:135 -#: src/usr/local/www/services_captiveportal_mac.php:192 +#: src/usr/local/www/load_balancer_virtual_server.php:155 +#: src/usr/local/www/services_captiveportal_mac.php:193 #: src/usr/local/www/services_captiveportal_zones.php:102 #: src/usr/local/www/services_dhcp.php:750 -#: src/usr/local/www/services_dhcpv6.php:530 +#: src/usr/local/www/services_dhcpv6.php:528 #: src/usr/local/www/services_dnsmasq.php:228 #: src/usr/local/www/services_igmpproxy.php:109 #: src/usr/local/www/services_pppoe.php:125 -#: src/usr/local/www/services_unbound.php:280 +#: src/usr/local/www/services_unbound.php:286 #: src/usr/local/www/services_unbound_acls.php:225 #: src/usr/local/www/services_unbound_advanced.php:234 #: src/usr/local/www/status_lb_pool.php:143 #: src/usr/local/www/system_advanced_sysctl.php:182 -#: src/usr/local/www/system_gateway_groups.php:134 +#: src/usr/local/www/system_gateway_groups.php:148 #: src/usr/local/www/system_gateways.php:258 #: src/usr/local/www/system_routes.php:258 src/usr/local/www/vpn_ipsec.php:269 #: src/usr/local/www/vpn_ipsec_keys.php:115 #: src/usr/local/www/vpn_ipsec_mobile.php:440 -msgid "You must apply the changes in order for them to take effect." +msgid "The changes must be applied for them to take effect." msgstr "" #: src/usr/local/www/firewall_aliases.php:219 @@ -9811,20 +9991,20 @@ msgid "Delete alias" msgstr "" #: src/usr/local/www/firewall_aliases.php:307 -#: src/usr/local/www/firewall_nat.php:443 -#: src/usr/local/www/firewall_nat.php:447 +#: src/usr/local/www/firewall_nat.php:475 +#: src/usr/local/www/firewall_nat.php:479 #: src/usr/local/www/firewall_nat_1to1.php:270 #: src/usr/local/www/firewall_nat_1to1.php:274 #: src/usr/local/www/firewall_nat_npt.php:259 #: src/usr/local/www/firewall_nat_npt.php:263 -#: src/usr/local/www/firewall_nat_out.php:526 -#: src/usr/local/www/firewall_nat_out.php:530 -#: src/usr/local/www/firewall_rules.php:837 +#: src/usr/local/www/firewall_nat_out.php:528 +#: src/usr/local/www/firewall_nat_out.php:532 #: src/usr/local/www/firewall_rules.php:841 +#: src/usr/local/www/firewall_rules.php:845 #: src/usr/local/www/firewall_schedule.php:278 #: src/usr/local/www/firewall_virtual_ip.php:371 -#: src/usr/local/www/interfaces.php:1882 src/usr/local/www/interfaces.php:3194 -#: src/usr/local/www/interfaces_assign.php:592 +#: src/usr/local/www/interfaces.php:1894 src/usr/local/www/interfaces.php:3201 +#: src/usr/local/www/interfaces_assign.php:597 #: src/usr/local/www/interfaces_bridge.php:190 #: src/usr/local/www/interfaces_gif.php:164 #: src/usr/local/www/interfaces_gre.php:170 @@ -9836,49 +10016,49 @@ msgstr "" #: src/usr/local/www/interfaces_wireless.php:174 #: src/usr/local/www/load_balancer_monitor.php:180 #: src/usr/local/www/load_balancer_pool.php:215 -#: src/usr/local/www/load_balancer_virtual_server.php:204 -#: src/usr/local/www/pkg.php:600 src/usr/local/www/pkg_edit.php:1447 -#: src/usr/local/www/services_captiveportal_filemanager.php:266 -#: src/usr/local/www/services_captiveportal_hostname.php:195 -#: src/usr/local/www/services_captiveportal_ip.php:191 -#: src/usr/local/www/services_captiveportal_mac.php:254 -#: src/usr/local/www/services_captiveportal_vouchers.php:502 +#: src/usr/local/www/load_balancer_virtual_server.php:237 +#: src/usr/local/www/pkg.php:609 src/usr/local/www/pkg_edit.php:1475 +#: src/usr/local/www/services_captiveportal_filemanager.php:269 +#: src/usr/local/www/services_captiveportal_hostname.php:196 +#: src/usr/local/www/services_captiveportal_ip.php:192 +#: src/usr/local/www/services_captiveportal_mac.php:255 +#: src/usr/local/www/services_captiveportal_vouchers.php:503 #: src/usr/local/www/services_captiveportal_zones.php:156 -#: src/usr/local/www/services_dhcp.php:894 -#: src/usr/local/www/services_dhcp.php:1221 -#: src/usr/local/www/services_dhcp.php:1369 -#: src/usr/local/www/services_dhcpv6.php:1048 -#: src/usr/local/www/services_dnsmasq.php:439 -#: src/usr/local/www/services_dnsmasq.php:492 +#: src/usr/local/www/services_dhcp.php:892 +#: src/usr/local/www/services_dhcp.php:1233 +#: src/usr/local/www/services_dhcp.php:1383 +#: src/usr/local/www/services_dhcpv6.php:1062 +#: src/usr/local/www/services_dnsmasq.php:417 +#: src/usr/local/www/services_dnsmasq.php:464 #: src/usr/local/www/services_dyndns.php:245 #: src/usr/local/www/services_igmpproxy.php:178 -#: src/usr/local/www/services_ntpd.php:290 -#: src/usr/local/www/services_ntpd_acls.php:331 +#: src/usr/local/www/services_ntpd.php:292 +#: src/usr/local/www/services_ntpd_acls.php:333 #: src/usr/local/www/services_pppoe.php:181 #: src/usr/local/www/services_rfc2136.php:234 -#: src/usr/local/www/services_router_advertisements.php:373 -#: src/usr/local/www/services_unbound.php:505 -#: src/usr/local/www/services_unbound.php:554 -#: src/usr/local/www/services_unbound_acls.php:365 -#: src/usr/local/www/services_wol.php:230 -#: src/usr/local/www/system_authservers.php:438 -#: src/usr/local/www/system_camanager.php:467 -#: src/usr/local/www/system_certmanager.php:841 -#: src/usr/local/www/system_certmanager.php:1139 +#: src/usr/local/www/services_router_advertisements.php:402 +#: src/usr/local/www/services_unbound.php:534 +#: src/usr/local/www/services_unbound.php:583 +#: src/usr/local/www/services_unbound_acls.php:369 +#: src/usr/local/www/services_wol.php:240 +#: src/usr/local/www/system_authservers.php:504 +#: src/usr/local/www/system_camanager.php:464 +#: src/usr/local/www/system_certmanager.php:802 +#: src/usr/local/www/system_certmanager.php:1107 #: src/usr/local/www/system_crlmanager.php:575 -#: src/usr/local/www/system_gateway_groups.php:204 +#: src/usr/local/www/system_gateway_groups.php:222 #: src/usr/local/www/system_gateways.php:351 -#: src/usr/local/www/system_groupmanager.php:268 -#: src/usr/local/www/system_groupmanager.php:348 +#: src/usr/local/www/system_groupmanager.php:282 +#: src/usr/local/www/system_groupmanager.php:364 #: src/usr/local/www/system_routes.php:332 -#: src/usr/local/www/system_usermanager.php:415 -#: src/usr/local/www/system_usermanager.php:461 -#: src/usr/local/www/system_usermanager.php:545 +#: src/usr/local/www/system_usermanager.php:416 +#: src/usr/local/www/system_usermanager.php:462 +#: src/usr/local/www/system_usermanager.php:546 #: src/usr/local/www/vpn_ipsec_keys.php:201 #: src/usr/local/www/vpn_l2tp_users.php:158 -#: src/usr/local/www/vpn_openvpn_client.php:859 -#: src/usr/local/www/vpn_openvpn_csc.php:708 -#: src/usr/local/www/vpn_openvpn_server.php:1241 +#: src/usr/local/www/vpn_openvpn_client.php:858 +#: src/usr/local/www/vpn_openvpn_csc.php:712 +#: src/usr/local/www/vpn_openvpn_server.php:1246 msgid "Add" msgstr "" @@ -9890,38 +10070,38 @@ msgstr "" msgid "" "Aliases act as placeholders for real hosts, networks or ports. They can be " "used to minimize the number of changes that have to be made if a host, " -"network or port changes. <br />You can enter the name of an alias instead of " -"the host, network or port where indicated. The alias will be resolved " +"network or port changes. <br />The name of an alias can be entered instead " +"of the host, network or port where indicated. The alias will be resolved " "according to the list above.<br />If an alias cannot be resolved (e.g. " -"because you deleted it), the corresponding element (e.g. filter/NAT/shaper " +"because it was deleted), the corresponding element (e.g. filter/NAT/shaper " "rule) will be considered invalid and skipped." msgstr "" #: src/usr/local/www/firewall_aliases_edit.php:71 #: src/usr/local/www/firewall_nat_1to1_edit.php:281 -#: src/usr/local/www/firewall_nat_edit.php:653 +#: src/usr/local/www/firewall_nat_edit.php:654 #: src/usr/local/www/firewall_nat_npt_edit.php:212 -#: src/usr/local/www/firewall_nat_out_edit.php:393 -#: src/usr/local/www/firewall_rules.php:792 -#: src/usr/local/www/firewall_rules_edit.php:1065 +#: src/usr/local/www/firewall_nat_out_edit.php:396 +#: src/usr/local/www/firewall_rules.php:796 +#: src/usr/local/www/firewall_rules_edit.php:1081 #: src/usr/local/www/firewall_schedule_edit.php:85 -#: src/usr/local/www/firewall_virtual_ip_edit.php:320 -#: src/usr/local/www/interfaces_bridge_edit.php:403 -#: src/usr/local/www/interfaces_gif_edit.php:195 -#: src/usr/local/www/interfaces_gre_edit.php:189 +#: src/usr/local/www/firewall_virtual_ip_edit.php:329 +#: src/usr/local/www/interfaces_bridge_edit.php:418 +#: src/usr/local/www/interfaces_gif_edit.php:199 +#: src/usr/local/www/interfaces_gre_edit.php:195 #: src/usr/local/www/interfaces_groups_edit.php:67 -#: src/usr/local/www/interfaces_lagg_edit.php:241 -#: src/usr/local/www/interfaces_ppps_edit.php:462 +#: src/usr/local/www/interfaces_lagg_edit.php:257 +#: src/usr/local/www/interfaces_ppps_edit.php:472 #: src/usr/local/www/interfaces_qinq_edit.php:63 #: src/usr/local/www/interfaces_vlan_edit.php:205 #: src/usr/local/www/interfaces_wireless_edit.php:201 -#: src/usr/local/www/load_balancer_monitor_edit.php:234 +#: src/usr/local/www/load_balancer_monitor_edit.php:236 #: src/usr/local/www/load_balancer_pool_edit.php:219 #: src/usr/local/www/load_balancer_virtual_server_edit.php:193 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:96 -#: src/usr/local/www/services_captiveportal_ip_edit.php:98 -#: src/usr/local/www/services_captiveportal_mac_edit.php:101 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:86 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:98 +#: src/usr/local/www/services_captiveportal_ip_edit.php:99 +#: src/usr/local/www/services_captiveportal_mac_edit.php:102 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:87 #: src/usr/local/www/services_dyndns_edit.php:273 #: src/usr/local/www/services_igmpproxy_edit.php:66 #: src/usr/local/www/services_pppoe_edit.php:314 @@ -9929,21 +10109,21 @@ msgstr "" #: src/usr/local/www/services_unbound_acls.php:211 #: src/usr/local/www/services_wol_edit.php:137 #: src/usr/local/www/system_advanced_sysctl.php:169 -#: src/usr/local/www/system_authservers.php:380 +#: src/usr/local/www/system_authservers.php:446 #: src/usr/local/www/system_camanager.php:354 #: src/usr/local/www/system_certmanager.php:562 #: src/usr/local/www/system_crlmanager.php:296 -#: src/usr/local/www/system_gateway_groups_edit.php:180 +#: src/usr/local/www/system_gateway_groups_edit.php:181 #: src/usr/local/www/system_gateways_edit.php:572 -#: src/usr/local/www/system_groupmanager.php:277 +#: src/usr/local/www/system_groupmanager.php:291 #: src/usr/local/www/system_groupmanager_addprivs.php:69 #: src/usr/local/www/system_routes_edit.php:257 -#: src/usr/local/www/system_usermanager.php:470 +#: src/usr/local/www/system_usermanager.php:471 #: src/usr/local/www/system_usermanager_addprivs.php:70 #: src/usr/local/www/vpn_ipsec_keys_edit.php:155 #: src/usr/local/www/vpn_l2tp_users_edit.php:63 #: src/usr/local/www/vpn_openvpn_client.php:429 -#: src/usr/local/www/vpn_openvpn_csc.php:311 +#: src/usr/local/www/vpn_openvpn_csc.php:315 #: src/usr/local/www/vpn_openvpn_server.php:595 msgid "Edit" msgstr "" @@ -9957,6 +10137,7 @@ msgid "network" msgstr "" #: src/usr/local/www/firewall_aliases_edit.php:112 +#: src/usr/local/www/firewall_aliases_edit.php:730 msgid "port" msgstr "" @@ -9982,278 +10163,266 @@ msgid "" "not allowed. Descriptions have been cleaned. Check and save again." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:180 -#: src/usr/local/www/firewall_aliases_edit.php:182 -msgid "Reserved word used for alias name." -msgstr "" - #: src/usr/local/www/firewall_aliases_edit.php:185 -#, php-format -msgid "" -"The alias name must be less than 32 characters long, may not consist of only " -"numbers, may not consist of only underscores, and may only contain the " -"following characters: %s" -msgstr "" - -#: src/usr/local/www/firewall_aliases_edit.php:191 #: src/usr/local/www/firewall_aliases_import.php:103 msgid "An alias with this name already exists." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:199 +#: src/usr/local/www/firewall_aliases_edit.php:193 #: src/usr/local/www/firewall_aliases_import.php:110 #, php-format msgid "Cannot use a reserved keyword as an alias name: %s" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:206 +#: src/usr/local/www/firewall_aliases_edit.php:200 #: src/usr/local/www/firewall_aliases_import.php:117 msgid "An interface description with this name already exists." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:227 -msgid "You must provide a valid URL." +#: src/usr/local/www/firewall_aliases_edit.php:221 +msgid "A valid URL must be provided." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:229 +#: src/usr/local/www/firewall_aliases_edit.php:223 msgid "Unable to fetch usable data from URL" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:241 -#: src/usr/local/www/firewall_aliases_edit.php:283 -#: src/usr/local/www/firewall_aliases_edit.php:328 +#: src/usr/local/www/firewall_aliases_edit.php:235 +#: src/usr/local/www/firewall_aliases_edit.php:277 +#: src/usr/local/www/firewall_aliases_edit.php:322 #, php-format msgid "Entry added %s" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:290 +#: src/usr/local/www/firewall_aliases_edit.php:284 #, php-format -msgid "You must provide a valid URL. Could not fetch usable data from '%s'." +msgid "A valid URL must be provided. Could not fetch usable data from '%s'." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:294 +#: src/usr/local/www/firewall_aliases_edit.php:288 #, php-format msgid "URL '%s' is not valid." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:359 +#: src/usr/local/www/firewall_aliases_edit.php:353 #, php-format msgid "Range is too large to expand into individual host IP addresses (%s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:360 -#: src/usr/local/www/firewall_aliases_edit.php:390 +#: src/usr/local/www/firewall_aliases_edit.php:354 +#: src/usr/local/www/firewall_aliases_edit.php:384 #, php-format msgid "The maximum number of entries in an alias is %s" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:368 +#: src/usr/local/www/firewall_aliases_edit.php:362 #: src/usr/local/www/firewall_aliases_import.php:142 #, php-format msgid "IPv6 address ranges are not supported (%s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:389 +#: src/usr/local/www/firewall_aliases_edit.php:383 #, php-format msgid "Subnet is too large to expand into individual host IP addresses (%s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:397 +#: src/usr/local/www/firewall_aliases_edit.php:391 #, php-format msgid "IPv6 subnets are not supported in host aliases (%s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:424 +#: src/usr/local/www/firewall_aliases_edit.php:418 #, php-format msgid "The maximum number of entries in an alias has been exceeded (%s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:443 +#: src/usr/local/www/firewall_aliases_edit.php:437 #, php-format msgid "%s is not a valid port or alias." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:448 +#: src/usr/local/www/firewall_aliases_edit.php:442 #, php-format msgid "%1$s is not a valid %2$s address, FQDN or alias." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:454 +#: src/usr/local/www/firewall_aliases_edit.php:448 #, php-format msgid "%1$s/%2$s is not a valid subnet." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:463 +#: src/usr/local/www/firewall_aliases_edit.php:457 #, php-format msgid "" "The alias(es): %s cannot be nested because they are not of the same type." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:565 -#: src/usr/local/www/firewall_aliases_edit.php:623 +#: src/usr/local/www/firewall_aliases_edit.php:559 +#: src/usr/local/www/firewall_aliases_edit.php:620 msgid "Network(s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:566 -#: src/usr/local/www/firewall_aliases_edit.php:622 +#: src/usr/local/www/firewall_aliases_edit.php:560 +#: src/usr/local/www/firewall_aliases_edit.php:619 msgid "Host(s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:567 -#: src/usr/local/www/firewall_aliases_edit.php:624 +#: src/usr/local/www/firewall_aliases_edit.php:561 +#: src/usr/local/www/firewall_aliases_edit.php:621 msgid "Port(s)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:568 -#: src/usr/local/www/firewall_aliases_edit.php:588 -#: src/usr/local/www/firewall_aliases_edit.php:625 +#: src/usr/local/www/firewall_aliases_edit.php:562 +#: src/usr/local/www/firewall_aliases_edit.php:582 +#: src/usr/local/www/firewall_aliases_edit.php:622 msgid "URL (IPs)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:569 -#: src/usr/local/www/firewall_aliases_edit.php:589 -#: src/usr/local/www/firewall_aliases_edit.php:626 +#: src/usr/local/www/firewall_aliases_edit.php:563 +#: src/usr/local/www/firewall_aliases_edit.php:583 +#: src/usr/local/www/firewall_aliases_edit.php:623 msgid "URL (Ports)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:570 -#: src/usr/local/www/firewall_aliases_edit.php:590 -#: src/usr/local/www/firewall_aliases_edit.php:627 +#: src/usr/local/www/firewall_aliases_edit.php:564 +#: src/usr/local/www/firewall_aliases_edit.php:584 +#: src/usr/local/www/firewall_aliases_edit.php:624 msgid "URL Table (IPs)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:571 -#: src/usr/local/www/firewall_aliases_edit.php:591 -#: src/usr/local/www/firewall_aliases_edit.php:628 +#: src/usr/local/www/firewall_aliases_edit.php:565 +#: src/usr/local/www/firewall_aliases_edit.php:585 +#: src/usr/local/www/firewall_aliases_edit.php:625 msgid "URL Table (Ports)" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:575 +#: src/usr/local/www/firewall_aliases_edit.php:569 +#: src/usr/local/www/services_unbound_acls.php:313 msgid "Add Network" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:576 +#: src/usr/local/www/firewall_aliases_edit.php:570 msgid "Add Host" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:577 +#: src/usr/local/www/firewall_aliases_edit.php:571 msgid "Add Port" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:578 -#: src/usr/local/www/firewall_aliases_edit.php:579 +#: src/usr/local/www/firewall_aliases_edit.php:572 +#: src/usr/local/www/firewall_aliases_edit.php:573 msgid "Add URL" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:580 -#: src/usr/local/www/firewall_aliases_edit.php:581 +#: src/usr/local/www/firewall_aliases_edit.php:574 +#: src/usr/local/www/firewall_aliases_edit.php:575 msgid "Add URL Table" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:585 +#: src/usr/local/www/firewall_aliases_edit.php:579 msgid "Network or FQDN" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:586 +#: src/usr/local/www/firewall_aliases_edit.php:580 msgid "IP or FQDN" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:594 +#: src/usr/local/www/firewall_aliases_edit.php:588 msgid "The value after the \"/\" is the update frequency in days." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:597 +#: src/usr/local/www/firewall_aliases_edit.php:591 msgid "" "Networks are specified in CIDR format. Select the CIDR mask that pertains to " "each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 " "host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. " "Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 " -"for IPv6. You may also enter an IP range such as 192.168.1.1-192.168.1.254 " +"for IPv6. An IP range such as 192.168.1.1-192.168.1.254 may also be entered " "and a list of CIDR networks will be derived to fill the range." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:598 +#: src/usr/local/www/firewall_aliases_edit.php:592 msgid "" -"Enter as many hosts as you would like. Hosts must be specified by their IP " -"address or fully qualified domain name (FQDN). FQDN hostnames are " -"periodically re-resolved and updated. If multiple IPs are returned by a DNS " -"query, all are used. You may also enter an IP range such as " -"192.168.1.1-192.168.1.10 or a small subnet such as 192.168.1.16/28 and a " -"list of individual IP addresses will be generated." +"Enter as many hosts as desired. Hosts must be specified by their IP address " +"or fully qualified domain name (FQDN). FQDN hostnames are periodically re-" +"resolved and updated. If multiple IPs are returned by a DNS query, all are " +"used. An IP range such as 192.168.1.1-192.168.1.10 or a small subnet such as " +"192.168.1.16/28 may also be entered and a list of individual IP addresses " +"will be generated." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:599 +#: src/usr/local/www/firewall_aliases_edit.php:593 msgid "" -"Enter as many ports as you wish. Port ranges can be expressed by separating " +"Enter as many ports as desired. Port ranges can be expressed by separating " "with a colon." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:600 +#: src/usr/local/www/firewall_aliases_edit.php:594 msgid "" -"Enter as many URLs as you wish. After saving we will download the URL and " -"import the items into the alias. Use only with small sets of IP addresses " +"Enter as many URLs as desired. After saving, the URLs will be downloaded and " +"the items imported into the alias. Use only with small sets of IP addresses " "(less than 3000)." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:601 +#: src/usr/local/www/firewall_aliases_edit.php:595 msgid "" -"Enter as many URLs as you wish. After saving we will download the URL and " -"import the items into the alias. Use only with small sets of Ports (less " +"Enter as many URLs as desired. After saving, the URLs will be downloaded and " +"the items imported into the alias. Use only with small sets of Ports (less " "than 3000)." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:602 +#: src/usr/local/www/firewall_aliases_edit.php:596 msgid "" "Enter a single URL containing a large number of IPs and/or Subnets. After " -"saving we will download the URL and create a table file containing these " -"addresses. This will work with large numbers of addresses (30,000+) or small " -"numbers." +"saving, the URLs will be downloaded and a table file containing these " +"addresses will be created. This will work with large numbers of addresses " +"(30,000+) or small numbers." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:604 +#: src/usr/local/www/firewall_aliases_edit.php:598 msgid "" "Enter a single URL containing a list of Port numbers and/or Port ranges. " -"After saving we will download the URL." +"After saving, the URL will be downloaded." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:670 +#: src/usr/local/www/firewall_aliases_edit.php:667 msgid "Properties" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:677 +#: src/usr/local/www/firewall_aliases_edit.php:674 #: src/usr/local/www/firewall_aliases_import.php:203 msgid "" "The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and " "_\"." msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:689 -#: src/usr/local/www/firewall_nat_1to1_edit.php:472 -#: src/usr/local/www/firewall_nat_1to1_edit.php:499 +#: src/usr/local/www/firewall_aliases_edit.php:686 +#: src/usr/local/www/firewall_nat_1to1_edit.php:469 +#: src/usr/local/www/firewall_nat_1to1_edit.php:496 #: src/usr/local/www/firewall_nat_edit.php:752 #: src/usr/local/www/firewall_nat_edit.php:819 #: src/usr/local/www/firewall_nat_out_edit.php:514 #: src/usr/local/www/firewall_nat_out_edit.php:538 -#: src/usr/local/www/firewall_rules_edit.php:433 +#: src/usr/local/www/firewall_rules_edit.php:449 #: src/usr/local/www/firewall_virtual_ip.php:297 #: src/usr/local/www/firewall_virtual_ip_edit.php:129 -#: src/usr/local/www/firewall_virtual_ip_edit.php:354 +#: src/usr/local/www/firewall_virtual_ip_edit.php:363 #: src/usr/local/www/load_balancer_monitor.php:141 -#: src/usr/local/www/load_balancer_monitor_edit.php:118 -#: src/usr/local/www/load_balancer_monitor_edit.php:320 -#: src/usr/local/www/services_captiveportal.php:998 -#: src/usr/local/www/services_dhcp.php:1200 +#: src/usr/local/www/load_balancer_monitor_edit.php:120 +#: src/usr/local/www/load_balancer_monitor_edit.php:318 +#: src/usr/local/www/services_captiveportal.php:1007 +#: src/usr/local/www/services_dhcp.php:1210 #: src/usr/local/www/services_igmpproxy.php:122 #: src/usr/local/www/services_igmpproxy_edit.php:202 #: src/usr/local/www/status_logs_vpn.php:210 #: src/usr/local/www/status_logs_vpn.php:440 -#: src/usr/local/www/status_ntpd.php:202 -#: src/usr/local/www/system_authservers.php:198 -#: src/usr/local/www/system_authservers.php:221 -#: src/usr/local/www/system_authservers.php:410 -#: src/usr/local/www/system_authservers.php:467 -#: src/usr/local/www/system_certmanager.php:810 -#: src/usr/local/www/system_certmanager.php:818 +#: src/usr/local/www/status_ntpd.php:303 +#: src/usr/local/www/system_authservers.php:264 +#: src/usr/local/www/system_authservers.php:287 +#: src/usr/local/www/system_authservers.php:476 +#: src/usr/local/www/system_authservers.php:533 +#: src/usr/local/www/system_certmanager.php:769 +#: src/usr/local/www/system_certmanager.php:777 #: src/usr/local/www/vpn_ipsec_keys.php:134 #: src/usr/local/www/vpn_ipsec_phase2.php:560 #: src/usr/local/www/vpn_ipsec_phase2.php:586 @@ -10261,58 +10430,14 @@ msgstr "" msgid "Type" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:699 +#: src/usr/local/www/firewall_aliases_edit.php:696 msgid "Hint" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:733 -#: src/usr/local/www/firewall_nat_npt_edit.php:247 -#: src/usr/local/www/firewall_nat_npt_edit.php:261 -#: src/usr/local/www/firewall_nat_out_edit.php:569 -#: src/usr/local/www/status_lb_vs.php:97 src/usr/local/www/system.php:405 -#: src/usr/local/www/vpn_ipsec_phase2.php:559 -#: src/usr/local/www/vpn_ipsec_phase2.php:566 -#: src/usr/local/www/vpn_ipsec_phase2.php:579 -#: src/usr/local/www/vpn_ipsec_phase2.php:592 -#: src/usr/local/www/vpn_ipsec_phase2.php:605 -#: src/usr/local/www/vpn_ipsec_phase2.php:612 -msgid "Address" -msgstr "" - -#: src/usr/local/www/firewall_aliases_edit.php:746 -#: src/usr/local/www/firewall_nat.php:451 -#: src/usr/local/www/firewall_nat_1to1.php:278 -#: src/usr/local/www/firewall_nat_npt.php:267 -#: src/usr/local/www/firewall_nat_out.php:534 -#: src/usr/local/www/firewall_rules.php:845 -#: src/usr/local/www/firewall_schedule_edit.php:653 -#: src/usr/local/www/interfaces_assign.php:568 -#: src/usr/local/www/interfaces_vlan.php:166 -#: src/usr/local/www/pkg_edit.php:1435 src/usr/local/www/services_dhcp.php:1211 -#: src/usr/local/www/services_dhcpv6.php:950 -#: src/usr/local/www/services_dnsmasq_edit.php:322 -#: src/usr/local/www/services_igmpproxy_edit.php:264 -#: src/usr/local/www/services_ntpd.php:282 -#: src/usr/local/www/services_ntpd_acls.php:320 -#: src/usr/local/www/services_pppoe_edit.php:557 -#: src/usr/local/www/services_router_advertisements.php:361 -#: src/usr/local/www/services_unbound_acls.php:300 -#: src/usr/local/www/services_unbound_host_edit.php:323 -#: src/usr/local/www/status_ipsec_sad.php:138 -#: src/usr/local/www/system_certmanager.php:829 -#: src/usr/local/www/system_usermanager.php:550 -msgid "Delete" -msgstr "" - #: src/usr/local/www/firewall_aliases_import.php:72 msgid "Bulk import" msgstr "" -#: src/usr/local/www/firewall_aliases_import.php:98 -#, php-format -msgid "The alias name may only consist of the characters %s" -msgstr "" - #: src/usr/local/www/firewall_aliases_import.php:144 #, php-format msgid "%s is not an IP address. Please correct the error to continue" @@ -10336,19 +10461,20 @@ msgstr "" msgid "Alias Name" msgstr "" -#: src/usr/local/www/firewall_aliases_import.php:216 +#: src/usr/local/www/firewall_aliases_import.php:215 msgid "Aliases to import" msgstr "" -#: src/usr/local/www/firewall_aliases_import.php:218 +#: src/usr/local/www/firewall_aliases_import.php:217 msgid "" "Paste in the aliases to import separated by a carriage return. Common " -"examples are lists of IPs, networks, blacklists, etc.The list may contain IP " -"addresses, with or without CIDR prefix, IP ranges, blank lines (ignored) and " -"an optional description after each IP. e.g.:<ul><li>172.16.1.2</" +"examples are lists of IPs, networks, blacklists, etc. The list may contain " +"IP addresses, with or without CIDR prefix, IP ranges, blank lines (ignored) " +"and an optional description after each IP. e.g.:</span><ul><li>172.16.1.2</" "li><li>172.16.0.0/24</li><li>10.11.12.100-10.11.12.200</li><li>192.168.1.254 " "Home router</li><li>10.20.0.0/16 Office network</" -"li><li>10.40.1.10-10.40.1.19 Managed switches</li></ul>" +"li><li>10.40.1.10-10.40.1.19 Managed switches</li></ul><span class=\"help-" +"block\">" msgstr "" #: src/usr/local/www/firewall_nat.php:198 @@ -10358,7 +10484,7 @@ msgstr "" #: src/usr/local/www/firewall_nat.php:206 #: src/usr/local/www/firewall_nat.php:219 #: src/usr/local/www/firewall_nat_1to1.php:168 -#: src/usr/local/www/firewall_nat_edit.php:653 +#: src/usr/local/www/firewall_nat_edit.php:654 #: src/usr/local/www/firewall_nat_npt.php:168 #: src/usr/local/www/firewall_nat_out.php:252 msgid "Port Forward" @@ -10385,7 +10511,7 @@ msgstr "" #: src/usr/local/www/firewall_nat_npt.php:170 #: src/usr/local/www/firewall_nat_out.php:239 #: src/usr/local/www/firewall_nat_out.php:254 -#: src/usr/local/www/firewall_nat_out_edit.php:393 +#: src/usr/local/www/firewall_nat_out_edit.php:396 msgid "Outbound" msgstr "" @@ -10399,9 +10525,9 @@ msgid "NPt" msgstr "" #: src/usr/local/www/firewall_nat.php:230 -#: src/usr/local/www/firewall_rules.php:72 -#: src/usr/local/www/firewall_rules.php:355 -#: src/usr/local/www/firewall_rules_edit.php:1060 +#: src/usr/local/www/firewall_rules.php:75 +#: src/usr/local/www/firewall_rules.php:358 +#: src/usr/local/www/firewall_rules_edit.php:1076 #: src/usr/local/www/head.inc:277 msgid "Rules" msgstr "" @@ -10418,110 +10544,113 @@ msgstr "" msgid "NAT Ports" msgstr "" -#: src/usr/local/www/firewall_nat.php:294 +#: src/usr/local/www/firewall_nat.php:305 #: src/usr/local/www/firewall_nat_1to1.php:211 #: src/usr/local/www/firewall_nat_npt.php:212 -#: src/usr/local/www/firewall_rules.php:525 src/usr/local/www/vpn_ipsec.php:308 +#: src/usr/local/www/firewall_rules.php:528 src/usr/local/www/vpn_ipsec.php:308 #: src/usr/local/www/vpn_ipsec.php:458 msgid "click to toggle enabled/disabled status" msgstr "" -#: src/usr/local/www/firewall_nat.php:301 +#: src/usr/local/www/firewall_nat.php:307 +#: src/usr/local/www/firewall_nat_1to1.php:213 +#: src/usr/local/www/firewall_nat_out.php:368 +msgid "Negated: This rule excludes NAT from a later rule" +msgstr "" + +#: src/usr/local/www/firewall_nat.php:315 msgid "All traffic matching this NAT entry is passed" msgstr "" -#: src/usr/local/www/firewall_nat.php:305 +#: src/usr/local/www/firewall_nat.php:319 #, php-format msgid "Firewall rule ID %s is managed by this rule" msgstr "" -#: src/usr/local/www/firewall_nat.php:332 -#: src/usr/local/www/firewall_nat.php:349 -#: src/usr/local/www/firewall_nat.php:367 -#: src/usr/local/www/firewall_nat.php:384 -#: src/usr/local/www/firewall_rules.php:725 -#: src/usr/local/www/firewall_rules.php:734 -#: src/usr/local/www/firewall_rules.php:743 -#: src/usr/local/www/firewall_rules.php:752 +#: src/usr/local/www/firewall_nat.php:346 +#: src/usr/local/www/firewall_nat.php:363 +#: src/usr/local/www/firewall_nat.php:381 +#: src/usr/local/www/firewall_nat.php:398 +#: src/usr/local/www/firewall_nat.php:415 +#: src/usr/local/www/firewall_nat.php:433 +#: src/usr/local/www/firewall_rules.php:728 +#: src/usr/local/www/firewall_rules.php:737 +#: src/usr/local/www/firewall_rules.php:746 +#: src/usr/local/www/firewall_rules.php:755 msgid "Alias details" msgstr "" -#: src/usr/local/www/firewall_nat.php:419 +#: src/usr/local/www/firewall_nat.php:451 msgid "Edit rule" msgstr "" -#: src/usr/local/www/firewall_nat.php:420 +#: src/usr/local/www/firewall_nat.php:452 msgid "Add a new NAT based on this one" msgstr "" -#: src/usr/local/www/firewall_nat.php:421 +#: src/usr/local/www/firewall_nat.php:453 msgid "Delete rule" msgstr "" -#: src/usr/local/www/firewall_nat.php:441 -#: src/usr/local/www/firewall_rules.php:835 +#: src/usr/local/www/firewall_nat.php:473 +#: src/usr/local/www/firewall_rules.php:839 msgid "Add rule to the top of the list" msgstr "" -#: src/usr/local/www/firewall_nat.php:445 -#: src/usr/local/www/firewall_rules.php:839 +#: src/usr/local/www/firewall_nat.php:477 +#: src/usr/local/www/firewall_rules.php:843 msgid "Add rule to the end of the list" msgstr "" -#: src/usr/local/www/firewall_nat.php:449 -#: src/usr/local/www/firewall_rules.php:843 +#: src/usr/local/www/firewall_nat.php:481 +#: src/usr/local/www/firewall_rules.php:847 msgid "Delete selected rules" msgstr "" -#: src/usr/local/www/firewall_nat.php:453 -#: src/usr/local/www/firewall_rules.php:847 +#: src/usr/local/www/firewall_nat.php:485 +#: src/usr/local/www/firewall_rules.php:851 msgid "Save rule order" msgstr "" -#: src/usr/local/www/firewall_nat.php:457 -#: src/usr/local/www/firewall_rules.php:851 +#: src/usr/local/www/firewall_nat.php:489 +#: src/usr/local/www/firewall_rules.php:855 msgid "Add separator" msgstr "" -#: src/usr/local/www/firewall_nat.php:459 -#: src/usr/local/www/firewall_rules.php:853 +#: src/usr/local/www/firewall_nat.php:491 +#: src/usr/local/www/firewall_rules.php:857 msgid "Separator" msgstr "" -#: src/usr/local/www/firewall_nat.php:468 -#: src/usr/local/www/firewall_rules.php:896 -#: src/usr/local/www/interfaces.php:1889 src/usr/local/www/interfaces.php:3201 -msgid "Cancel" -msgstr "" - -#: src/usr/local/www/firewall_nat.php:470 -#: src/usr/local/www/firewall_rules.php:898 +#: src/usr/local/www/firewall_nat.php:502 +#: src/usr/local/www/firewall_rules.php:905 msgid "Enter a description, Save, then drag to final location." msgstr "" -#: src/usr/local/www/firewall_nat.php:506 -msgid "You have moved one or more Port Forward rules but have not yet saved" +#: src/usr/local/www/firewall_nat.php:538 +msgid "" +"One or more Port Forward rules have been moved but have not yet been saved" msgstr "" -#: src/usr/local/www/firewall_nat.php:521 -#: src/usr/local/www/firewall_rules.php:862 +#: src/usr/local/www/firewall_nat.php:553 +#: src/usr/local/www/firewall_rules.php:866 msgid "Legend" msgstr "" -#: src/usr/local/www/firewall_nat.php:522 +#: src/usr/local/www/firewall_nat.php:554 #: src/usr/local/www/firewall_nat_edit.php:926 #: src/usr/local/www/firewall_nat_edit.php:961 -#: src/usr/local/www/firewall_rules.php:863 -#: src/usr/local/www/firewall_rules_edit.php:1114 -#: src/usr/local/www/services_captiveportal_mac.php:94 -#: src/usr/local/www/services_captiveportal_mac_edit.php:236 +#: src/usr/local/www/firewall_rules.php:867 +#: src/usr/local/www/firewall_rules_edit.php:1130 +#: src/usr/local/www/services_captiveportal_mac.php:95 +#: src/usr/local/www/services_captiveportal_mac_edit.php:237 #: src/usr/local/www/status_logs_common.inc:451 #: src/usr/local/www/widgets/widgets/log.widget.php:258 #: src/usr/local/www/status_logs_common.inc:452 msgid "Pass" msgstr "" -#: src/usr/local/www/firewall_nat.php:523 +#: src/usr/local/www/firewall_nat.php:555 msgid "Linked rule" msgstr "" @@ -10538,7 +10667,7 @@ msgid "External IP" msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:185 -#: src/usr/local/www/firewall_nat_1to1_edit.php:458 +#: src/usr/local/www/firewall_nat_1to1_edit.php:455 #: src/usr/local/www/status_upnp.php:105 msgid "Internal IP" msgstr "" @@ -10547,25 +10676,21 @@ msgstr "" msgid "Destination IP" msgstr "" -#: src/usr/local/www/firewall_nat_1to1.php:213 -msgid "Negated: This rule excludes NAT from a later rule" -msgstr "" - #: src/usr/local/www/firewall_nat_1to1.php:252 #: src/usr/local/www/firewall_nat_npt.php:242 -#: src/usr/local/www/firewall_nat_out.php:509 +#: src/usr/local/www/firewall_nat_out.php:511 msgid "Edit mapping" msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:253 #: src/usr/local/www/firewall_nat_npt.php:243 -#: src/usr/local/www/firewall_nat_out.php:510 +#: src/usr/local/www/firewall_nat_out.php:512 msgid "Add a new mapping based on this one" msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:254 #: src/usr/local/www/firewall_nat_npt.php:244 -#: src/usr/local/www/firewall_nat_out.php:511 +#: src/usr/local/www/firewall_nat_out.php:513 msgid "Delete mapping" msgstr "" @@ -10586,32 +10711,39 @@ msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:280 #: src/usr/local/www/firewall_nat_npt.php:269 -#: src/usr/local/www/firewall_nat_out.php:536 +#: src/usr/local/www/firewall_nat_out.php:538 msgid "Save mapping order" msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:288 -msgid "Depending on the way your WAN connection is setup, you may also need a " +msgid "Depending on the way the WAN connection is setup, this may also need a " msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:289 -msgid "Virtual IP." +#: src/usr/local/www/firewall_nat_out.php:676 +#: src/usr/local/www/firewall_nat_out_edit.php:582 +#: src/usr/local/www/status_carp.php:207 +#: src/usr/local/www/system_gateway_groups_edit.php:321 +#: src/usr/local/www/system_gateway_groups_edit.php:341 +#: src/usr/local/www/system_gateway_groups_edit.php:353 +msgid "Virtual IP" msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:290 msgid "" -"If you add a 1:1 NAT entry for any of the interface IPs on this system, it " -"will make this system inaccessible on that IP address. i.e. if you use your " -"WAN IP address, any services on this system (IPsec, OpenVPN server, etc.) " +"If a 1:1 NAT entry is added for any of the interface IPs on this system, it " +"will make this system inaccessible on that IP address. i.e. if the WAN IP " +"address is used, any services on this system (IPsec, OpenVPN server, etc.) " "using the WAN IP address will no longer function." msgstr "" #: src/usr/local/www/firewall_nat_1to1.php:325 -msgid "You have moved one or more NAT 1:1 mappings but have not yet saved" +msgid "" +"One or more NAT 1:1 mappings have been moved but have not yet been saved" msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:145 -#: src/usr/local/www/firewall_nat_out_edit.php:175 +#: src/usr/local/www/firewall_nat_out_edit.php:178 #, php-format msgid "" "Invalid characters detected (%s). Please remove invalid characters and save " @@ -10632,10 +10764,8 @@ msgid "A valid external subnet must be specified." msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:205 -#: src/usr/local/www/firewall_nat_edit.php:312 -#: src/usr/local/www/firewall_rules_edit.php:521 -#: src/usr/local/www/firewall_rules_edit.php:526 -msgid "You must specify single host or alias for alias entries." +#: src/usr/local/www/firewall_nat_edit.php:316 +msgid "Alias entries must specify a single host or alias." msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:211 @@ -10648,35 +10778,31 @@ msgid "A valid internal bit count must be specified." msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:222 -#: src/usr/local/www/firewall_nat_edit.php:326 -#: src/usr/local/www/firewall_rules_edit.php:540 +#: src/usr/local/www/firewall_nat_edit.php:333 +#: src/usr/local/www/firewall_rules_edit.php:556 #, php-format msgid "%s is not a valid destination IP address or alias." msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:226 -#: src/usr/local/www/firewall_nat_edit.php:329 -#: src/usr/local/www/firewall_nat_out_edit.php:235 -#: src/usr/local/www/firewall_rules_edit.php:543 +#: src/usr/local/www/firewall_nat_edit.php:339 +#: src/usr/local/www/firewall_nat_out_edit.php:238 +#: src/usr/local/www/firewall_rules_edit.php:559 msgid "A valid destination bit count must be specified." msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:287 -#: src/usr/local/www/firewall_nat_1to1_edit.php:329 -#: src/usr/local/www/firewall_nat_edit.php:541 -#: src/usr/local/www/firewall_nat_edit.php:587 -#: src/usr/local/www/firewall_rules_edit.php:1305 -msgid "Single host or alias" +msgid "Single host" msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:287 #: src/usr/local/www/firewall_nat_1to1_edit.php:329 -#: src/usr/local/www/firewall_nat_edit.php:541 -#: src/usr/local/www/firewall_nat_edit.php:587 +#: src/usr/local/www/firewall_nat_edit.php:551 +#: src/usr/local/www/firewall_nat_edit.php:591 #: src/usr/local/www/firewall_nat_out_edit.php:513 #: src/usr/local/www/firewall_nat_out_edit.php:537 -#: src/usr/local/www/firewall_rules_edit.php:1306 -#: src/usr/local/www/firewall_virtual_ip_edit.php:403 +#: src/usr/local/www/firewall_rules_edit.php:1322 +#: src/usr/local/www/firewall_virtual_ip_edit.php:412 #: src/usr/local/www/system_routes.php:276 #: src/usr/local/www/vpn_ipsec_mobile.php:521 #: src/usr/local/www/vpn_ipsec_phase2.php:559 @@ -10687,79 +10813,79 @@ msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:292 #: src/usr/local/www/firewall_nat_1to1_edit.php:332 -#: src/usr/local/www/firewall_nat_edit.php:546 -#: src/usr/local/www/firewall_nat_edit.php:590 -#: src/usr/local/www/firewall_rules_edit.php:1317 +#: src/usr/local/www/firewall_nat_edit.php:554 +#: src/usr/local/www/firewall_nat_edit.php:594 +#: src/usr/local/www/firewall_rules_edit.php:1333 #: src/usr/local/www/guiconfig.inc:251 msgid "PPPoE clients" msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:296 #: src/usr/local/www/firewall_nat_1to1_edit.php:336 -#: src/usr/local/www/firewall_nat_edit.php:550 -#: src/usr/local/www/firewall_nat_edit.php:594 -#: src/usr/local/www/firewall_rules_edit.php:1320 +#: src/usr/local/www/firewall_nat_edit.php:558 +#: src/usr/local/www/firewall_nat_edit.php:598 +#: src/usr/local/www/firewall_rules_edit.php:1336 #: src/usr/local/www/guiconfig.inc:252 msgid "L2TP clients" msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:329 -#: src/usr/local/www/firewall_nat_edit.php:587 +#: src/usr/local/www/firewall_nat_edit.php:551 +#: src/usr/local/www/firewall_nat_edit.php:591 +#: src/usr/local/www/firewall_rules_edit.php:1321 +msgid "Single host or alias" +msgstr "" + +#: src/usr/local/www/firewall_nat_1to1_edit.php:329 +#: src/usr/local/www/firewall_nat_edit.php:591 #: src/usr/local/www/firewall_nat_out_edit.php:513 -#: src/usr/local/www/firewall_rules_edit.php:1314 +#: src/usr/local/www/firewall_rules_edit.php:1330 msgid "This Firewall (self)" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:400 +#: src/usr/local/www/firewall_nat_1to1_edit.php:397 msgid "Edit NAT 1:1 Entry" msgstr "" #: src/usr/local/www/firewall_nat_1to1_edit.php:404 -msgid "Negate" +msgid "When disabled, the rule will not have any effect." msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:407 -msgid "Use this to exclude addresses from a rule that follows this one" -msgstr "" - -#: src/usr/local/www/firewall_nat_1to1_edit.php:411 +#: src/usr/local/www/firewall_nat_1to1_edit.php:408 msgid "No BINAT (NOT)" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:414 -#: src/usr/local/www/firewall_nat_edit.php:679 -msgid "" -"This option is rarely needed, don't use this unless you know what you're " -"doing." +#: src/usr/local/www/firewall_nat_1to1_edit.php:411 +msgid "Excludes the address from a later, more general, rule." msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:426 -#: src/usr/local/www/firewall_nat_edit.php:691 +#: src/usr/local/www/firewall_nat_1to1_edit.php:423 +#: src/usr/local/www/firewall_nat_edit.php:689 #: src/usr/local/www/firewall_nat_npt_edit.php:189 -#: src/usr/local/www/firewall_rules.php:173 -#: src/usr/local/www/firewall_rules_edit.php:1040 +#: src/usr/local/www/firewall_rules.php:176 +#: src/usr/local/www/firewall_rules_edit.php:1056 msgid "L2TP VPN" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:431 -#: src/usr/local/www/firewall_nat_edit.php:696 +#: src/usr/local/www/firewall_nat_1to1_edit.php:428 +#: src/usr/local/www/firewall_nat_edit.php:694 #: src/usr/local/www/firewall_nat_npt_edit.php:195 -#: src/usr/local/www/firewall_rules.php:180 -#: src/usr/local/www/firewall_rules_edit.php:1044 +#: src/usr/local/www/firewall_rules.php:183 +#: src/usr/local/www/firewall_rules_edit.php:1060 #: src/usr/local/www/head.inc:300 src/usr/local/www/services_pppoe.php:116 #: src/usr/local/www/services_pppoe.php:130 #: src/usr/local/www/services_pppoe_edit.php:314 msgid "PPPoE Server" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:436 -#: src/usr/local/www/firewall_nat_edit.php:701 +#: src/usr/local/www/firewall_nat_1to1_edit.php:433 +#: src/usr/local/www/firewall_nat_edit.php:699 #: src/usr/local/www/firewall_nat_npt_edit.php:201 -#: src/usr/local/www/firewall_rules.php:187 -#: src/usr/local/www/firewall_rules_edit.php:1049 +#: src/usr/local/www/firewall_rules.php:190 +#: src/usr/local/www/firewall_rules_edit.php:1065 #: src/usr/local/www/head.inc:315 src/usr/local/www/head.inc:331 -#: src/usr/local/www/status_graph.php:87 src/usr/local/www/status_graph.php:252 -#: src/usr/local/www/status_ipsec.php:70 +#: src/usr/local/www/status_graph.php:87 src/usr/local/www/status_graph.php:267 +#: src/usr/local/www/status_ipsec.php:490 #: src/usr/local/www/status_ipsec_leases.php:66 #: src/usr/local/www/status_ipsec_sad.php:69 #: src/usr/local/www/status_ipsec_spd.php:72 @@ -10770,7 +10896,7 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_keys_edit.php:155 #: src/usr/local/www/vpn_ipsec_mobile.php:339 #: src/usr/local/www/vpn_ipsec_phase1.php:664 -#: src/usr/local/www/vpn_ipsec_phase1.php:667 +#: src/usr/local/www/vpn_ipsec_phase1.php:666 #: src/usr/local/www/vpn_ipsec_phase2.php:441 #: src/usr/local/www/vpn_ipsec_phase2.php:444 #: src/usr/local/www/vpn_ipsec_settings.php:236 @@ -10778,51 +10904,51 @@ msgstr "" msgid "IPsec" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:449 -#: src/usr/local/www/firewall_nat_edit.php:714 +#: src/usr/local/www/firewall_nat_1to1_edit.php:446 +#: src/usr/local/www/firewall_nat_edit.php:712 #: src/usr/local/www/firewall_nat_out_edit.php:496 msgid "" "Choose which interface this rule applies to. In most cases \"WAN\" is " "specified." msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:453 +#: src/usr/local/www/firewall_nat_1to1_edit.php:450 msgid "External subnet IP" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:455 +#: src/usr/local/www/firewall_nat_1to1_edit.php:452 msgid "" "Enter the external (usually on a WAN) subnet's starting address for the 1:1 " "mapping. The subnet mask from the internal address below will be applied to " "this IP address." msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:465 -#: src/usr/local/www/firewall_nat_1to1_edit.php:492 +#: src/usr/local/www/firewall_nat_1to1_edit.php:462 +#: src/usr/local/www/firewall_nat_1to1_edit.php:489 msgid "Invert the sense of the match." msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:478 -#: src/usr/local/www/firewall_nat_1to1_edit.php:505 +#: src/usr/local/www/firewall_nat_1to1_edit.php:475 +#: src/usr/local/www/firewall_nat_1to1_edit.php:502 #: src/usr/local/www/firewall_nat_edit.php:758 #: src/usr/local/www/firewall_nat_edit.php:825 msgid "Address/mask" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:480 +#: src/usr/local/www/firewall_nat_1to1_edit.php:477 msgid "" "Enter the internal (LAN) subnet for the 1:1 mapping. The subnet size " "specified for the internal subnet will be applied to the external subnet." msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:485 +#: src/usr/local/www/firewall_nat_1to1_edit.php:482 #: src/usr/local/www/firewall_nat_edit.php:805 #: src/usr/local/www/firewall_nat_out.php:314 -#: src/usr/local/www/firewall_nat_out.php:565 -#: src/usr/local/www/firewall_nat_out_edit.php:181 +#: src/usr/local/www/firewall_nat_out.php:567 +#: src/usr/local/www/firewall_nat_out_edit.php:184 #: src/usr/local/www/firewall_nat_out_edit.php:531 -#: src/usr/local/www/firewall_rules.php:409 -#: src/usr/local/www/firewall_rules_edit.php:436 +#: src/usr/local/www/firewall_rules.php:412 +#: src/usr/local/www/firewall_rules_edit.php:452 #: src/usr/local/www/status_ipsec_sad.php:99 #: src/usr/local/www/status_ipsec_spd.php:92 #: src/usr/local/www/status_logs_filter.php:195 @@ -10832,27 +10958,27 @@ msgstr "" msgid "Destination" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:507 +#: src/usr/local/www/firewall_nat_1to1_edit.php:504 msgid "" "The 1:1 mapping will only be used for connections to or from the specified " "destination. Hint: this is usually \"Any\"." msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:523 +#: src/usr/local/www/firewall_nat_1to1_edit.php:520 #: src/usr/local/www/firewall_nat_edit.php:916 msgid "Use system default" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:525 +#: src/usr/local/www/firewall_nat_1to1_edit.php:522 #: src/usr/local/www/firewall_nat_edit.php:919 -#: src/usr/local/www/firewall_rules.php:799 +#: src/usr/local/www/firewall_rules.php:803 #: src/usr/local/www/services_dyndns_edit.php:292 -#: src/usr/local/www/vpn_ipsec_phase1.php:894 -#: src/usr/local/www/vpn_openvpn_csc.php:358 +#: src/usr/local/www/vpn_ipsec_phase1.php:892 +#: src/usr/local/www/vpn_openvpn_csc.php:362 msgid "Disable" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:520 +#: src/usr/local/www/firewall_nat_1to1_edit.php:517 #: src/usr/local/www/firewall_nat_edit.php:913 msgid "NAT reflection" msgstr "" @@ -10883,121 +11009,160 @@ msgid "\"%s\" is not a valid redirect target IP address or host alias." msgstr "" #: src/usr/local/www/firewall_nat_edit.php:293 -#: src/usr/local/www/firewall_rules_edit.php:471 +#, php-format +msgid "Redirect target IP must be IPv4." +msgstr "" + +#: src/usr/local/www/firewall_nat_edit.php:297 +#: src/usr/local/www/firewall_rules_edit.php:487 #, php-format msgid "" "%s is not a valid start source port. It must be a port alias or integer " "between 1 and 65535." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:296 -#: src/usr/local/www/firewall_rules_edit.php:474 +#: src/usr/local/www/firewall_nat_edit.php:300 +#: src/usr/local/www/firewall_rules_edit.php:490 #, php-format msgid "" "%s is not a valid end source port. It must be a port alias or integer " "between 1 and 65535." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:299 -#: src/usr/local/www/firewall_rules_edit.php:477 +#: src/usr/local/www/firewall_nat_edit.php:303 +#: src/usr/local/www/firewall_rules_edit.php:493 #, php-format msgid "" "%s is not a valid start destination port. It must be a port alias or integer " "between 1 and 65535." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:302 -#: src/usr/local/www/firewall_rules_edit.php:480 +#: src/usr/local/www/firewall_nat_edit.php:306 +#: src/usr/local/www/firewall_rules_edit.php:496 #, php-format msgid "" "%s is not a valid end destination port. It must be a port alias or integer " "between 1 and 65535." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:306 +#: src/usr/local/www/firewall_nat_edit.php:310 #, php-format msgid "" "A valid redirect target port must be specified. It must be a port alias or " "integer between 1 and 65535." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:317 -#: src/usr/local/www/firewall_rules_edit.php:532 +#: src/usr/local/www/firewall_nat_edit.php:321 +#: src/usr/local/www/firewall_rules_edit.php:548 #, php-format msgid "%s is not a valid source IP address or alias." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:320 -#: src/usr/local/www/firewall_nat_out_edit.php:225 -#: src/usr/local/www/firewall_rules_edit.php:535 +#: src/usr/local/www/firewall_nat_edit.php:324 +#, php-format +msgid "Source must be IPv4." +msgstr "" + +#: src/usr/local/www/firewall_nat_edit.php:327 +#: src/usr/local/www/firewall_nat_out_edit.php:228 +#: src/usr/local/www/firewall_rules_edit.php:551 msgid "A valid source bit count must be specified." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:349 +#: src/usr/local/www/firewall_nat_edit.php:336 +#, php-format +msgid "Destination must be IPv4." +msgstr "" + +#: src/usr/local/www/firewall_nat_edit.php:359 msgid "The target port range must be an integer between 1 and 65535." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:375 +#: src/usr/local/www/firewall_nat_edit.php:385 msgid "The destination port range overlaps with an existing entry." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:495 +#: src/usr/local/www/firewall_nat_edit.php:505 msgid "NAT Port Forward" msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:665 +#: src/usr/local/www/firewall_nat_edit.php:663 msgid "Edit Redirect Entry" msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:676 +#: src/usr/local/www/firewall_nat_edit.php:674 msgid "No RDR (NOT)" msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:723 +#: src/usr/local/www/firewall_nat_edit.php:677 +msgid "" +"This option is rarely needed. Don't use this without thorough knowledge of " +"the implications." +msgstr "" + +#: src/usr/local/www/firewall_nat_edit.php:721 msgid "" "Choose which protocol this rule should match. In most cases \"TCP\" is " "specified." msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:727 src/usr/local/www/head.inc:242 -#: src/usr/local/www/interfaces_bridge_edit.php:436 -#: src/usr/local/www/services_dhcp.php:1004 +#: src/usr/local/www/firewall_nat_edit.php:725 +#: src/usr/local/www/firewall_nat_edit.php:1211 +#: src/usr/local/www/firewall_rules_edit.php:1366 +#: src/usr/local/www/firewall_rules_edit.php:1446 +#: src/usr/local/www/firewall_rules_edit.php:1765 +#: src/usr/local/www/firewall_rules_edit.php:1837 +#: src/usr/local/www/interfaces_bridge_edit.php:450 +#: src/usr/local/www/interfaces_bridge_edit.php:695 +#: src/usr/local/www/interfaces_ppps_edit.php:832 +#: src/usr/local/www/interfaces_ppps_edit.php:1047 +#: src/usr/local/www/services_dhcp.php:1002 #: src/usr/local/www/services_dhcp.php:1052 -#: src/usr/local/www/services_dhcp.php:1079 -#: src/usr/local/www/services_dhcp.php:1104 -#: src/usr/local/www/services_dhcp.php:1123 -#: src/usr/local/www/services_dhcp.php:1145 -#: src/usr/local/www/services_dhcp_edit.php:593 -#: src/usr/local/www/services_dhcp_edit.php:639 -#: src/usr/local/www/services_dhcp_edit.php:673 +#: src/usr/local/www/services_dhcp.php:1081 +#: src/usr/local/www/services_dhcp.php:1108 +#: src/usr/local/www/services_dhcp.php:1129 +#: src/usr/local/www/services_dhcp.php:1151 +#: src/usr/local/www/services_dhcp.php:1424 +#: src/usr/local/www/services_dhcp.php:1459 +#: src/usr/local/www/services_dhcp.php:1494 +#: src/usr/local/www/services_dhcp.php:1528 +#: src/usr/local/www/services_dhcp.php:1562 +#: src/usr/local/www/services_dhcp.php:1597 +#: src/usr/local/www/services_dhcp_edit.php:595 +#: src/usr/local/www/services_dhcp_edit.php:643 +#: src/usr/local/www/services_dhcp_edit.php:679 +#: src/usr/local/www/services_dhcp_edit.php:736 +#: src/usr/local/www/services_dhcp_edit.php:771 +#: src/usr/local/www/services_dhcp_edit.php:805 #: src/usr/local/www/services_dhcpv6.php:760 -#: src/usr/local/www/services_dhcpv6.php:826 -#: src/usr/local/www/services_dhcpv6.php:860 -#: src/usr/local/www/services_dhcpv6.php:879 -#: src/usr/local/www/services_dhcpv6.php:905 -#: src/usr/local/www/services_ntpd.php:334 -#: src/usr/local/www/services_ntpd.php:368 +#: src/usr/local/www/services_dhcpv6.php:828 +#: src/usr/local/www/services_dhcpv6.php:864 +#: src/usr/local/www/services_dhcpv6.php:885 +#: src/usr/local/www/services_dhcpv6.php:913 +#: src/usr/local/www/services_dhcpv6.php:1107 +#: src/usr/local/www/services_dhcpv6.php:1142 +#: src/usr/local/www/services_dhcpv6.php:1176 +#: src/usr/local/www/services_dhcpv6.php:1211 +#: src/usr/local/www/services_dhcpv6.php:1247 +#: src/usr/local/www/services_ntpd.php:338 +#: src/usr/local/www/services_ntpd.php:374 +#: src/usr/local/www/services_ntpd.php:443 +#: src/usr/local/www/services_ntpd.php:480 #: src/usr/local/www/services_ntpd_gps.php:377 -#: src/usr/local/www/system_advanced_admin.php:316 -#: src/usr/local/www/system_advanced_firewall.php:404 -#: src/usr/local/www/system_advanced_misc.php:304 -#: src/usr/local/www/system_advanced_network.php:173 -#: src/usr/local/www/system_advanced_notifications.php:216 -#: src/usr/local/www/system_advanced_sysctl.php:166 -#: src/usr/local/www/system_gateways_edit.php:731 -#: src/usr/local/www/vpn_openvpn_csc.php:590 -#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:277 -msgid "Advanced" +#: src/usr/local/www/services_ntpd_gps.php:568 +#: src/usr/local/www/system_gateways_edit.php:706 +#: src/usr/local/www/system_gateways_edit.php:909 +msgid "Display Advanced" msgstr "" #: src/usr/local/www/firewall_nat_edit.php:733 #: src/usr/local/www/firewall_nat_edit.php:737 #: src/usr/local/www/firewall_nat_out.php:312 -#: src/usr/local/www/firewall_nat_out.php:563 -#: src/usr/local/www/firewall_nat_out_edit.php:181 +#: src/usr/local/www/firewall_nat_out.php:565 +#: src/usr/local/www/firewall_nat_out_edit.php:184 #: src/usr/local/www/firewall_nat_out_edit.php:507 -#: src/usr/local/www/firewall_rules.php:407 -#: src/usr/local/www/firewall_rules_edit.php:435 +#: src/usr/local/www/firewall_rules.php:410 +#: src/usr/local/www/firewall_rules_edit.php:451 #: src/usr/local/www/status_ipsec_sad.php:98 #: src/usr/local/www/status_ipsec_spd.php:91 #: src/usr/local/www/status_logs_filter.php:194 @@ -11015,7 +11180,7 @@ msgstr "" #: src/usr/local/www/firewall_nat_edit.php:762 #: src/usr/local/www/firewall_virtual_ip.php:267 -#: src/usr/local/www/firewall_virtual_ip_edit.php:383 +#: src/usr/local/www/firewall_virtual_ip_edit.php:392 msgid "Other" msgstr "" @@ -11033,10 +11198,10 @@ msgstr "" #: src/usr/local/www/firewall_nat_edit.php:844 #: src/usr/local/www/firewall_nat_edit.php:858 #: src/usr/local/www/firewall_nat_edit.php:891 -#: src/usr/local/www/firewall_rules_edit.php:1376 -#: src/usr/local/www/firewall_rules_edit.php:1390 -#: src/usr/local/www/interfaces.php:2597 -#: src/usr/local/www/interfaces_ppps_edit.php:749 +#: src/usr/local/www/firewall_rules_edit.php:1394 +#: src/usr/local/www/firewall_rules_edit.php:1408 +#: src/usr/local/www/interfaces.php:2614 +#: src/usr/local/www/interfaces_ppps_edit.php:759 #: src/usr/local/www/services_ntpd_gps.php:249 msgid "Custom" msgstr "" @@ -11050,8 +11215,7 @@ msgstr "" msgid "" "Specify the source port or port range for this rule. This is usually random " "and almost never equal to the destination port range (and should usually be " -"'any'). You can leave the 'to' field empty if you only want to filter a " -"single port." +"'any'). The 'to' field may be left empty if only filtering a single port." msgstr "" #: src/usr/local/www/firewall_nat_edit.php:809 @@ -11065,14 +11229,13 @@ msgstr "" #: src/usr/local/www/firewall_nat_edit.php:860 msgid "" "Specify the port or port range for the destination of the packet for this " -"mapping. You can leave the 'to' field empty if you only want to map a single " -"port " +"mapping. The 'to' field may be left empty if only mapping a single port. " msgstr "" #: src/usr/local/www/firewall_nat_edit.php:869 msgid "" -"Enter the internal IP address of the server on which you want to map the " -"ports.<br />e.g.: 192.168.1.12" +"Enter the internal IP address of the server on which to map the ports.<br /" +">e.g.: 192.168.1.12" msgstr "" #: src/usr/local/www/firewall_nat_edit.php:872 @@ -11083,13 +11246,13 @@ msgstr "" msgid "" "Specify the port on the machine with the IP address entered above. In case " "of a port range, specify the beginning port of the range (the end port will " -"be calculated automatically).<br />this is usually identical to \"From port" -"\" above" +"be calculated automatically).<br />This is usually identical to the \"From " +"port\" above." msgstr "" #: src/usr/local/www/firewall_nat_edit.php:905 -#: src/usr/local/www/firewall_nat_out_edit.php:632 -#: src/usr/local/www/firewall_rules_edit.php:1569 +#: src/usr/local/www/firewall_nat_out_edit.php:631 +#: src/usr/local/www/firewall_rules_edit.php:1585 msgid "No XMLRPC Sync" msgstr "" @@ -11140,32 +11303,58 @@ msgid "" msgstr "" #: src/usr/local/www/firewall_nat_edit.php:972 -#: src/usr/local/www/firewall_nat_out_edit.php:668 -#: src/usr/local/www/firewall_rules_edit.php:1699 +#: src/usr/local/www/firewall_nat_out_edit.php:667 +#: src/usr/local/www/firewall_rules_edit.php:1715 msgid "Rule Information" msgstr "" #: src/usr/local/www/firewall_nat_edit.php:977 #: src/usr/local/www/firewall_nat_edit.php:984 -#: src/usr/local/www/firewall_nat_out_edit.php:673 -#: src/usr/local/www/firewall_nat_out_edit.php:680 -#: src/usr/local/www/firewall_rules_edit.php:1704 -#: src/usr/local/www/firewall_rules_edit.php:1711 +#: src/usr/local/www/firewall_nat_out_edit.php:672 +#: src/usr/local/www/firewall_nat_out_edit.php:679 +#: src/usr/local/www/firewall_rules_edit.php:1720 +#: src/usr/local/www/firewall_rules_edit.php:1727 msgid " by " msgstr "" #: src/usr/local/www/firewall_nat_edit.php:976 -#: src/usr/local/www/firewall_nat_out_edit.php:672 -#: src/usr/local/www/firewall_rules_edit.php:1703 +#: src/usr/local/www/firewall_nat_out_edit.php:671 +#: src/usr/local/www/firewall_rules_edit.php:1719 msgid "Created" msgstr "" #: src/usr/local/www/firewall_nat_edit.php:983 -#: src/usr/local/www/firewall_nat_out_edit.php:679 -#: src/usr/local/www/firewall_rules_edit.php:1710 +#: src/usr/local/www/firewall_nat_out_edit.php:678 +#: src/usr/local/www/firewall_rules_edit.php:1726 msgid "Updated" msgstr "" +#: src/usr/local/www/firewall_nat_edit.php:1213 +#: src/usr/local/www/firewall_rules_edit.php:1763 +#: src/usr/local/www/firewall_rules_edit.php:1835 +#: src/usr/local/www/interfaces_bridge_edit.php:693 +#: src/usr/local/www/interfaces_ppps_edit.php:1045 +#: src/usr/local/www/services_dhcp.php:1422 +#: src/usr/local/www/services_dhcp.php:1457 +#: src/usr/local/www/services_dhcp.php:1492 +#: src/usr/local/www/services_dhcp.php:1526 +#: src/usr/local/www/services_dhcp.php:1560 +#: src/usr/local/www/services_dhcp.php:1595 +#: src/usr/local/www/services_dhcp_edit.php:734 +#: src/usr/local/www/services_dhcp_edit.php:769 +#: src/usr/local/www/services_dhcp_edit.php:803 +#: src/usr/local/www/services_dhcpv6.php:1105 +#: src/usr/local/www/services_dhcpv6.php:1140 +#: src/usr/local/www/services_dhcpv6.php:1174 +#: src/usr/local/www/services_dhcpv6.php:1209 +#: src/usr/local/www/services_dhcpv6.php:1245 +#: src/usr/local/www/services_ntpd.php:441 +#: src/usr/local/www/services_ntpd.php:478 +#: src/usr/local/www/services_ntpd_gps.php:566 +#: src/usr/local/www/system_gateways_edit.php:907 +msgid "Hide Advanced" +msgstr "" + #: src/usr/local/www/firewall_nat_npt.php:147 msgid "Firewall: NAT: NPt, enable/disable NAT rule" msgstr "" @@ -11183,7 +11372,7 @@ msgid "Internal prefix" msgstr "" #: src/usr/local/www/firewall_nat_npt.php:303 -msgid "You have moved one or more NPt mappings but have not yet saved" +msgid "One or more NPt mappings have been moved but have not yet been saved" msgstr "" #: src/usr/local/www/firewall_nat_npt_edit.php:135 @@ -11200,8 +11389,8 @@ msgstr "" #: src/usr/local/www/firewall_nat_npt_edit.php:235 msgid "" -"Choose which interface this rule applies to.<br />Hint: in most cases, " -"you'll want to use \"WAN\" here." +"Choose which interface this rule applies to.<br />Hint: Typically the \"WAN" +"\" is used here." msgstr "" #: src/usr/local/www/firewall_nat_npt_edit.php:240 @@ -11213,6 +11402,19 @@ msgstr "" msgid "Use this option to invert the sense of the match. " msgstr "" +#: src/usr/local/www/firewall_nat_npt_edit.php:247 +#: src/usr/local/www/firewall_nat_npt_edit.php:261 +#: src/usr/local/www/firewall_nat_out_edit.php:569 +#: src/usr/local/www/status_lb_vs.php:97 src/usr/local/www/system.php:409 +#: src/usr/local/www/vpn_ipsec_phase2.php:559 +#: src/usr/local/www/vpn_ipsec_phase2.php:566 +#: src/usr/local/www/vpn_ipsec_phase2.php:579 +#: src/usr/local/www/vpn_ipsec_phase2.php:592 +#: src/usr/local/www/vpn_ipsec_phase2.php:605 +#: src/usr/local/www/vpn_ipsec_phase2.php:612 +msgid "Address" +msgstr "" + #: src/usr/local/www/firewall_nat_npt_edit.php:249 msgid "" "Internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. The " @@ -11242,7 +11444,7 @@ msgid "Default rules for each interface have been created." msgstr "" #: src/usr/local/www/firewall_nat_out.php:260 -#: src/usr/local/www/status_logs_settings.php:251 +#: src/usr/local/www/status_logs_settings.php:248 msgid "General Logging Options" msgstr "" @@ -11270,17 +11472,17 @@ msgid "Mappings" msgstr "" #: src/usr/local/www/firewall_nat_out.php:316 -#: src/usr/local/www/firewall_nat_out.php:567 +#: src/usr/local/www/firewall_nat_out.php:569 msgid "NAT Address" msgstr "" #: src/usr/local/www/firewall_nat_out.php:317 -#: src/usr/local/www/firewall_nat_out.php:568 +#: src/usr/local/www/firewall_nat_out.php:570 msgid "NAT Port" msgstr "" #: src/usr/local/www/firewall_nat_out.php:318 -#: src/usr/local/www/firewall_nat_out.php:569 +#: src/usr/local/www/firewall_nat_out.php:571 msgid "Static Port" msgstr "" @@ -11292,37 +11494,27 @@ msgstr "" msgid "Click to toggle enabled/disabled status" msgstr "" -#: src/usr/local/www/firewall_nat_out.php:496 -#: src/usr/local/www/firewall_nat_out.php:647 -msgid "YES" -msgstr "" - -#: src/usr/local/www/firewall_nat_out.php:498 -#: src/usr/local/www/firewall_nat_out.php:649 -msgid "NO" -msgstr "" - -#: src/usr/local/www/firewall_nat_out.php:524 +#: src/usr/local/www/firewall_nat_out.php:526 msgid "Add new mapping to the top of the list" msgstr "" -#: src/usr/local/www/firewall_nat_out.php:528 +#: src/usr/local/www/firewall_nat_out.php:530 msgid "Add new mapping to the end of the list" msgstr "" -#: src/usr/local/www/firewall_nat_out.php:532 +#: src/usr/local/www/firewall_nat_out.php:534 msgid "Delete selected map" msgstr "" -#: src/usr/local/www/firewall_nat_out.php:532 +#: src/usr/local/www/firewall_nat_out.php:534 msgid "Delete selected maps" msgstr "" -#: src/usr/local/www/firewall_nat_out.php:556 +#: src/usr/local/www/firewall_nat_out.php:558 msgid "Automatic Rules:" msgstr "" -#: src/usr/local/www/firewall_nat_out.php:580 +#: src/usr/local/www/firewall_nat_out.php:582 msgid "automatic outbound nat" msgstr "" @@ -11332,8 +11524,8 @@ msgid "" "for each interface's subnet (except WAN-type connections) and the rules on " "the \"Mappings\" section of this page are ignored.<br />If manual outbound " "NAT is selected, outbound NAT rules will not be automatically generated and " -"only the mappings you specify on this page will be used.<br />If hybrid " -"outbound NAT is selected, mappings you specify on this page will be used, " +"only the mappings specified on this page will be used.<br />If hybrid " +"outbound NAT is selected, mappings specified on this page will be used, " "followed by the automatically generated ones.<br />If disable outbound NAT " "is selected, no rules will be used.<br />If a target address other than an " "interface's IP address is used, then depending on the way the WAN connection " @@ -11341,87 +11533,77 @@ msgid "" msgstr "" #: src/usr/local/www/firewall_nat_out.php:676 -#: src/usr/local/www/firewall_nat_out_edit.php:582 -#: src/usr/local/www/status_carp.php:205 -#: src/usr/local/www/system_gateway_groups_edit.php:292 -#: src/usr/local/www/system_gateway_groups_edit.php:312 -#: src/usr/local/www/system_gateway_groups_edit.php:324 -msgid "Virtual IP" -msgstr "" - -#: src/usr/local/www/firewall_nat_out.php:676 msgid " may also be required." msgstr "" #: src/usr/local/www/firewall_nat_out.php:709 -msgid "You have moved one or more NAT outbound mappings but have not yet saved" +msgid "" +"One or more NAT outbound mappings have been moved but have not yet been saved" msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:181 -#: src/usr/local/www/firewall_rules_edit.php:451 +#: src/usr/local/www/firewall_nat_out_edit.php:184 +#: src/usr/local/www/firewall_rules_edit.php:467 msgid "Source bit count" msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:181 -#: src/usr/local/www/firewall_rules_edit.php:456 +#: src/usr/local/www/firewall_nat_out_edit.php:184 +#: src/usr/local/www/firewall_rules_edit.php:472 msgid "Destination bit count" msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:207 -msgid "" -"You must supply either a valid port or port alias for the source port entry." +#: src/usr/local/www/firewall_nat_out_edit.php:210 +msgid "A valid port or port alias must be supplied for the source port entry." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:211 +#: src/usr/local/www/firewall_nat_out_edit.php:214 msgid "" -"You must supply either a valid port or port alias for the destination port " -"entry." +"A valid port or port alias must be supplied for the destination port entry." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:215 -msgid "You must supply a valid port for the NAT port entry." +#: src/usr/local/www/firewall_nat_out_edit.php:218 +msgid "A valid port must be supplied for the NAT port entry." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:220 +#: src/usr/local/www/firewall_nat_out_edit.php:223 msgid "A valid source must be specified." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:230 +#: src/usr/local/www/firewall_nat_out_edit.php:233 msgid "A valid destination must be specified." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:240 +#: src/usr/local/www/firewall_nat_out_edit.php:243 msgid "Negating destination address of \"any\" is invalid." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:245 +#: src/usr/local/www/firewall_nat_out_edit.php:248 msgid "A valid target IP address must be specified." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:250 +#: src/usr/local/www/firewall_nat_out_edit.php:253 msgid "A valid target IP must be specified when using the 'Other Subnet' type." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:254 +#: src/usr/local/www/firewall_nat_out_edit.php:257 msgid "" "A valid target bit count must be specified when using the 'Other Subnet' " "type." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:267 +#: src/usr/local/www/firewall_nat_out_edit.php:270 msgid "Only Round Robin pool options may be chosen when selecting an alias." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:400 -#: src/usr/local/www/system_gateway_groups_edit.php:195 +#: src/usr/local/www/firewall_nat_out_edit.php:403 +#: src/usr/local/www/system_gateway_groups_edit.php:196 msgid "Interface Address" msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:430 +#: src/usr/local/www/firewall_nat_out_edit.php:433 msgid "Host Alias: " msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:433 +#: src/usr/local/www/firewall_nat_out_edit.php:436 msgid "Other Subnet (Enter Below)" msgstr "" @@ -11434,7 +11616,7 @@ msgid "Do not NAT" msgstr "" #: src/usr/local/www/firewall_nat_out_edit.php:461 -msgid "In most cases this option is not required" +msgid "In most cases this option is not required." msgstr "" #: src/usr/local/www/firewall_nat_out_edit.php:505 @@ -11452,7 +11634,7 @@ msgid "Destination network for the outbound NAT mapping." msgstr "" #: src/usr/local/www/firewall_nat_out_edit.php:560 -msgid "Invert the sense of the destination match" +msgid "Invert the sense of the destination match." msgstr "" #: src/usr/local/www/firewall_nat_out_edit.php:564 @@ -11466,9 +11648,16 @@ msgstr "" #: src/usr/local/www/firewall_nat_out_edit.php:579 msgid "" "Packets matching this rule will be mapped to the IP address given here.<br /" -">If you want this rule to apply to another IP address rather than the IP " -"address of the interface chosen above, select it here (you will need to " -"define <a href=\"firewall_virtual_ip.php\">" +">To apply this rule to a different IP address than the IP address of the " +"interface chosen above, select it here (<a href=\"firewall_virtual_ip.php\">" +msgstr "" + +#: src/usr/local/www/firewall_nat_out_edit.php:590 +#: src/usr/local/www/interfaces.php:1868 src/usr/local/www/interfaces.php:2844 +#: src/usr/local/www/interfaces.php:2853 src/usr/local/www/interfaces.php:2862 +#: src/usr/local/www/interfaces.php:2920 src/usr/local/www/interfaces.php:3175 +#: src/usr/local/www/services_ntpd_gps.php:249 +msgid "Default" msgstr "" #: src/usr/local/www/firewall_nat_out_edit.php:591 @@ -11514,53 +11703,63 @@ msgid "" "ul><span class=\"help-block\">" msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:616 -msgid "Enter the source port for the outbound NAT mapping." +#: src/usr/local/www/firewall_nat_out_edit.php:615 +msgid "Enter the source port or range for the outbound NAT mapping." msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:628 +#: src/usr/local/www/firewall_nat_out_edit.php:627 msgid "Misc" msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:636 +#: src/usr/local/www/firewall_nat_out_edit.php:635 msgid "" "Prevents the rule on Master from automatically syncing to other CARP " "members. This does NOT prevent the rule from being overwritten on Slave." msgstr "" -#: src/usr/local/www/firewall_rules.php:118 +#: src/usr/local/www/firewall_rules.php:72 +msgid "" +"Move checked rules above this one. Shift+Click to move checked rules below." +msgstr "" + +#: src/usr/local/www/firewall_rules.php:73 +msgid "" +"Move checked rules below this one. Release shift to move checked rules above." +msgstr "" + +#: src/usr/local/www/firewall_rules.php:121 msgid "States details" msgstr "" -#: src/usr/local/www/firewall_rules.php:216 +#: src/usr/local/www/firewall_rules.php:219 #, php-format msgid "" "The settings have been applied. The firewall rules are now reloading in the " -"background.<br />You can also %s monitor %s the reload progress." +"background.<br />%s Monitor %s the reload progress." msgstr "" -#: src/usr/local/www/firewall_rules.php:342 -#: src/usr/local/www/firewall_rules_edit.php:1063 -#: src/usr/local/www/firewall_rules_edit.php:1219 +#: src/usr/local/www/firewall_rules.php:345 +#: src/usr/local/www/firewall_rules_edit.php:1079 +#: src/usr/local/www/firewall_rules_edit.php:1235 msgid "Floating" msgstr "" -#: src/usr/local/www/firewall_rules.php:366 +#: src/usr/local/www/firewall_rules.php:369 msgid "The firewall rule configuration has been changed." msgstr "" -#: src/usr/local/www/firewall_rules.php:398 +#: src/usr/local/www/firewall_rules.php:401 msgid "Rules (Drag to Change Order)" msgstr "" -#: src/usr/local/www/firewall_rules.php:411 -#: src/usr/local/www/firewall_rules_edit.php:1630 -#: src/usr/local/www/interfaces.php:551 src/usr/local/www/interfaces.php:602 -#: src/usr/local/www/services_dhcp.php:936 -#: src/usr/local/www/services_dhcp_edit.php:558 -#: src/usr/local/www/status_gateways.php:94 src/usr/local/www/system.php:427 -#: src/usr/local/www/system.php:430 -#: src/usr/local/www/system_gateway_groups_edit.php:310 +#: src/usr/local/www/firewall_rules.php:414 +#: src/usr/local/www/firewall_rules_edit.php:1646 +#: src/usr/local/www/interfaces.php:560 src/usr/local/www/interfaces.php:611 +#: src/usr/local/www/services_dhcp.php:934 +#: src/usr/local/www/services_dhcp_edit.php:560 +#: src/usr/local/www/status_gateways.php:94 src/usr/local/www/system.php:431 +#: src/usr/local/www/system.php:434 +#: src/usr/local/www/system_gateway_groups_edit.php:339 #: src/usr/local/www/system_gateways.php:278 #: src/usr/local/www/system_gateways_edit.php:645 #: src/usr/local/www/system_routes.php:277 @@ -11569,305 +11768,305 @@ msgstr "" msgid "Gateway" msgstr "" -#: src/usr/local/www/firewall_rules.php:412 -#: src/usr/local/www/status_queues.php:194 +#: src/usr/local/www/firewall_rules.php:415 +#: src/usr/local/www/status_queues.php:193 msgid "Queue" msgstr "" -#: src/usr/local/www/firewall_rules.php:413 -#: src/usr/local/www/firewall_rules_edit.php:1599 +#: src/usr/local/www/firewall_rules.php:416 +#: src/usr/local/www/firewall_rules_edit.php:1615 msgid "Schedule" msgstr "" -#: src/usr/local/www/firewall_rules.php:429 -#: src/usr/local/www/firewall_rules.php:520 +#: src/usr/local/www/firewall_rules.php:432 +#: src/usr/local/www/firewall_rules.php:523 msgid "traffic is passed" msgstr "" -#: src/usr/local/www/firewall_rules.php:439 +#: src/usr/local/www/firewall_rules.php:442 msgid "Anti-Lockout Rule" msgstr "" -#: src/usr/local/www/firewall_rules.php:441 -#: src/usr/local/www/firewall_rules.php:460 -#: src/usr/local/www/firewall_rules.php:479 +#: src/usr/local/www/firewall_rules.php:444 +#: src/usr/local/www/firewall_rules.php:463 +#: src/usr/local/www/firewall_rules.php:482 src/usr/local/www/head.inc:549 #: src/usr/local/www/load_balancer_monitor.php:129 #: src/usr/local/www/load_balancer_pool.php:143 #: src/usr/local/www/load_balancer_setting.php:120 #: src/usr/local/www/load_balancer_setting.php:142 -#: src/usr/local/www/load_balancer_virtual_server.php:143 +#: src/usr/local/www/load_balancer_virtual_server.php:163 #: src/usr/local/www/services_ntpd.php:218 #: src/usr/local/www/services_ntpd.php:230 #: src/usr/local/www/services_ntpd_acls.php:207 #: src/usr/local/www/services_ntpd_gps.php:230 #: src/usr/local/www/services_ntpd_pps.php:149 -#: src/usr/local/www/services_router_advertisements.php:397 +#: src/usr/local/www/services_router_advertisements.php:428 #: src/usr/local/www/status_logs_common.inc:131 #: src/usr/local/www/status_logs_settings.php:209 #: src/usr/local/www/status_logs_settings.php:243 -#: src/usr/local/www/system_authservers.php:396 -#: src/usr/local/www/system_groupmanager.php:291 -#: src/usr/local/www/system_groupmanager_addprivs.php:173 -#: src/usr/local/www/system_usermanager.php:485 +#: src/usr/local/www/system_authservers.php:462 +#: src/usr/local/www/system_groupmanager.php:307 +#: src/usr/local/www/system_groupmanager_addprivs.php:172 +#: src/usr/local/www/system_usermanager.php:486 #: src/usr/local/www/system_usermanager_addprivs.php:174 -#: src/usr/local/www/system_usermanager_settings.php:75 -#: src/usr/local/www/system_usermanager_settings.php:145 -#: src/usr/local/www/system_usermanager_settings.php:156 +#: src/usr/local/www/system_usermanager_settings.php:140 +#: src/usr/local/www/system_usermanager_settings.php:201 +#: src/usr/local/www/system_usermanager_settings.php:212 msgid "Settings" msgstr "" -#: src/usr/local/www/firewall_rules.php:448 -#: src/usr/local/www/firewall_rules.php:467 -#: src/usr/local/www/firewall_rules.php:511 +#: src/usr/local/www/firewall_rules.php:451 +#: src/usr/local/www/firewall_rules.php:470 +#: src/usr/local/www/firewall_rules.php:514 msgid "traffic is blocked" msgstr "" -#: src/usr/local/www/firewall_rules.php:451 +#: src/usr/local/www/firewall_rules.php:454 msgid "RFC 1918 networks" msgstr "" -#: src/usr/local/www/firewall_rules.php:458 -#: src/usr/local/www/interfaces.php:3119 +#: src/usr/local/www/firewall_rules.php:461 msgid "Block private networks" msgstr "" -#: src/usr/local/www/firewall_rules.php:470 +#: src/usr/local/www/firewall_rules.php:473 #, php-format msgid "Reserved%sNot assigned by IANA" msgstr "" -#: src/usr/local/www/firewall_rules.php:477 -#: src/usr/local/www/interfaces.php:3129 +#: src/usr/local/www/firewall_rules.php:480 +#: src/usr/local/www/interfaces.php:3136 msgid "Block bogon networks" msgstr "" -#: src/usr/local/www/firewall_rules.php:514 +#: src/usr/local/www/firewall_rules.php:517 msgid "traffic is rejected" msgstr "" -#: src/usr/local/www/firewall_rules.php:517 +#: src/usr/local/www/firewall_rules.php:520 msgid "traffic is matched" msgstr "" -#: src/usr/local/www/firewall_rules.php:529 -#: src/usr/local/www/firewall_rules.php:869 +#: src/usr/local/www/firewall_rules.php:532 +#: src/usr/local/www/firewall_rules.php:873 msgid ""Quick" rule. Applied immediately on match." msgstr "" -#: src/usr/local/www/firewall_rules.php:534 +#: src/usr/local/www/firewall_rules.php:537 msgid "advanced setting" msgstr "" -#: src/usr/local/www/firewall_rules.php:538 +#: src/usr/local/www/firewall_rules.php:541 msgid "traffic is logged" msgstr "" -#: src/usr/local/www/firewall_rules.php:557 +#: src/usr/local/www/firewall_rules.php:560 #: src/usr/local/www/firewall_schedule.php:68 #: src/usr/local/www/firewall_schedule_edit.php:89 -#: src/usr/local/www/firewall_schedule_edit.php:293 +#: src/usr/local/www/firewall_schedule_edit.php:288 msgid "Mon" msgstr "" -#: src/usr/local/www/firewall_rules.php:557 +#: src/usr/local/www/firewall_rules.php:560 #: src/usr/local/www/firewall_schedule.php:68 #: src/usr/local/www/firewall_schedule_edit.php:89 msgid "Tues" msgstr "" -#: src/usr/local/www/firewall_rules.php:557 +#: src/usr/local/www/firewall_rules.php:560 #: src/usr/local/www/firewall_schedule.php:68 #: src/usr/local/www/firewall_schedule_edit.php:89 -#: src/usr/local/www/firewall_schedule_edit.php:295 +#: src/usr/local/www/firewall_schedule_edit.php:290 msgid "Wed" msgstr "" -#: src/usr/local/www/firewall_rules.php:557 +#: src/usr/local/www/firewall_rules.php:560 #: src/usr/local/www/firewall_schedule.php:68 #: src/usr/local/www/firewall_schedule_edit.php:89 msgid "Thur" msgstr "" -#: src/usr/local/www/firewall_rules.php:557 +#: src/usr/local/www/firewall_rules.php:560 #: src/usr/local/www/firewall_schedule.php:68 #: src/usr/local/www/firewall_schedule_edit.php:89 -#: src/usr/local/www/firewall_schedule_edit.php:297 +#: src/usr/local/www/firewall_schedule_edit.php:292 msgid "Fri" msgstr "" -#: src/usr/local/www/firewall_rules.php:557 +#: src/usr/local/www/firewall_rules.php:560 #: src/usr/local/www/firewall_schedule.php:68 #: src/usr/local/www/firewall_schedule_edit.php:89 -#: src/usr/local/www/firewall_schedule_edit.php:298 +#: src/usr/local/www/firewall_schedule_edit.php:293 msgid "Sat" msgstr "" -#: src/usr/local/www/firewall_rules.php:557 +#: src/usr/local/www/firewall_rules.php:560 #: src/usr/local/www/firewall_schedule.php:68 #: src/usr/local/www/firewall_schedule_edit.php:89 -#: src/usr/local/www/firewall_schedule_edit.php:299 +#: src/usr/local/www/firewall_schedule_edit.php:294 msgid "Sun" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "January" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "February" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "March" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "April" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "May" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "June" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "July" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "August" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "September" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "October" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "November" msgstr "" -#: src/usr/local/www/firewall_rules.php:558 +#: src/usr/local/www/firewall_rules.php:561 #: src/usr/local/www/firewall_schedule.php:69 #: src/usr/local/www/firewall_schedule_edit.php:90 msgid "December" msgstr "" -#: src/usr/local/www/firewall_rules.php:671 +#: src/usr/local/www/firewall_rules.php:674 msgid "Traffic matching this rule is currently being denied" msgstr "" -#: src/usr/local/www/firewall_rules.php:675 +#: src/usr/local/www/firewall_rules.php:678 msgid "Traffic matching this rule is currently being allowed" msgstr "" -#: src/usr/local/www/firewall_rules.php:684 +#: src/usr/local/www/firewall_rules.php:687 msgid "This rule is not currently active because its period has expired" msgstr "" -#: src/usr/local/www/firewall_rules.php:713 -#: src/usr/local/www/firewall_rules_edit.php:1261 +#: src/usr/local/www/firewall_rules.php:716 +#: src/usr/local/www/firewall_rules_edit.php:1277 msgid "ICMP type" msgstr "" -#: src/usr/local/www/firewall_rules.php:793 +#: src/usr/local/www/firewall_rules.php:797 msgid "Copy" msgstr "" -#: src/usr/local/www/firewall_rules.php:802 +#: src/usr/local/www/firewall_rules.php:806 msgid "Delete this rule" msgstr "" -#: src/usr/local/www/firewall_rules.php:824 +#: src/usr/local/www/firewall_rules.php:828 msgid "No floating rules are currently defined." msgstr "" -#: src/usr/local/www/firewall_rules.php:826 +#: src/usr/local/www/firewall_rules.php:830 msgid "No rules are currently defined for this interface" msgstr "" -#: src/usr/local/www/firewall_rules.php:827 +#: src/usr/local/www/firewall_rules.php:831 msgid "" -"All incoming connections on this interface will be blocked until you add " -"pass rules." +"All incoming connections on this interface will be blocked until pass rules " +"are added." msgstr "" -#: src/usr/local/www/firewall_rules.php:829 +#: src/usr/local/www/firewall_rules.php:833 msgid "Click the button to add a new rule." msgstr "" -#: src/usr/local/www/firewall_rules.php:864 -#: src/usr/local/www/firewall_rules_edit.php:1120 +#: src/usr/local/www/firewall_rules.php:868 +#: src/usr/local/www/firewall_rules_edit.php:1136 msgid "Match" msgstr "" -#: src/usr/local/www/firewall_rules.php:865 -#: src/usr/local/www/firewall_rules_edit.php:1115 -#: src/usr/local/www/services_captiveportal_mac.php:95 -#: src/usr/local/www/services_captiveportal_mac_edit.php:236 +#: src/usr/local/www/firewall_rules.php:869 +#: src/usr/local/www/firewall_rules_edit.php:1131 +#: src/usr/local/www/services_captiveportal_mac.php:96 +#: src/usr/local/www/services_captiveportal_mac_edit.php:237 #: src/usr/local/www/status_logs_common.inc:492 #: src/usr/local/www/widgets/widgets/log.widget.php:262 #: src/usr/local/www/status_logs_common.inc:493 msgid "Block" msgstr "" -#: src/usr/local/www/firewall_rules.php:866 -#: src/usr/local/www/firewall_rules_edit.php:1116 +#: src/usr/local/www/firewall_rules.php:870 +#: src/usr/local/www/firewall_rules_edit.php:1132 #: src/usr/local/www/widgets/widgets/log.widget.php:266 msgid "Reject" msgstr "" -#: src/usr/local/www/firewall_rules.php:867 -#: src/usr/local/www/firewall_rules_edit.php:1411 +#: src/usr/local/www/firewall_rules.php:871 +#: src/usr/local/www/firewall_rules_edit.php:1429 #: src/usr/local/www/status_logs_common.inc:816 msgid "Log" msgstr "" -#: src/usr/local/www/firewall_rules.php:868 +#: src/usr/local/www/firewall_rules.php:872 msgid "Advanced filter" msgstr "" -#: src/usr/local/www/firewall_rules.php:874 +#: src/usr/local/www/firewall_rules.php:878 msgid "" "Rules are evaluated on a first-match basis (i.e. the action of the first " "rule to match a packet will be executed). " msgstr "" -#: src/usr/local/www/firewall_rules.php:876 +#: src/usr/local/www/firewall_rules.php:880 msgid "" -"This means that if you use block rules, you'll have to pay attention to the " -"rule order. Everything that isn't explicitly passed is blocked by default. " +"This means that if block rules are used, it is important to pay attention to " +"the rule order. Everything that isn't explicitly passed is blocked by " +"default. " msgstr "" -#: src/usr/local/www/firewall_rules.php:880 +#: src/usr/local/www/firewall_rules.php:884 msgid "" "Floating rules are evaluated on a first-match basis (i.e. the action of the " "first rule to match a packet will be executed) only if the 'quick' option is " @@ -11876,296 +12075,313 @@ msgid "" "matches, the per-interface or default rules are used. " msgstr "" -#: src/usr/local/www/firewall_rules.php:932 -msgid "You have moved one or more rules but have not yet saved" +#: src/usr/local/www/firewall_rules.php:891 +#, php-format +msgid "" +"%sClick the anchor icon %s to move checked rules before the clicked row. " +"Hold down the shift key and click to move the rules after the clicked row." +msgstr "" + +#: src/usr/local/www/firewall_rules.php:1006 +msgid "One or more rules have been moved but have not yet been saved" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:331 -#: src/usr/local/www/firewall_rules_edit.php:345 -msgid "You can not assign a gateway to a rule that applies to IPv4 and IPv6" +#: src/usr/local/www/firewall_rules_edit.php:347 +#: src/usr/local/www/firewall_rules_edit.php:361 +msgid "A gateway can not be assigned to a rule that applies to IPv4 and IPv6" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:334 -msgid "You can not assign an IPv4 gateway group on IPv6 Address Family rule" +#: src/usr/local/www/firewall_rules_edit.php:350 +msgid "" +"An IPv4 gateway group can not be assigned on an IPv6 Address Family rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:337 -msgid "You can not assign an IPv6 gateway group on IPv4 Address Family rule" +#: src/usr/local/www/firewall_rules_edit.php:353 +msgid "" +"An IPv6 gateway group can not be assigned on an IPv4 Address Family rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:348 -msgid "You can not assign an IPv4 Gateway to an IPv6 Filter rule" +#: src/usr/local/www/firewall_rules_edit.php:364 +msgid "An IPv4 Gateway can not be assigned to an IPv6 Filter rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:351 -msgid "You can not assign an IPv6 Gateway to an IPv4 Filter rule" +#: src/usr/local/www/firewall_rules_edit.php:367 +msgid "An IPv6 Gateway can not be assigned to an IPv4 Filter rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:356 -msgid "You can not assign a ICMP type to a rule that applies to IPv4 and IPv6" +#: src/usr/local/www/firewall_rules_edit.php:372 +msgid "" +"An ICMP type can not be assigned to a rule that applies to IPv4 and IPv6" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:441 +#: src/usr/local/www/firewall_rules_edit.php:457 #, php-format msgid "%s is only valid with protocol TCP." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:444 +#: src/usr/local/www/firewall_rules_edit.php:460 #, php-format msgid "%s is only valid if the gateway is set to 'default'." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:548 +#: src/usr/local/www/firewall_rules_edit.php:537 +#: src/usr/local/www/firewall_rules_edit.php:542 +msgid "Alias entries must be a single host or alias." +msgstr "" + +#: src/usr/local/www/firewall_rules_edit.php:564 #, php-format msgid "" "The Source IP address %s Address Family differs from the destination %s." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:551 -msgid "You can not use IPv6 addresses in IPv4 rules." +#: src/usr/local/www/firewall_rules_edit.php:568 +msgid "IPv6 addresses cannot be used in IPv4 rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:554 -msgid "You can not use IPv4 addresses in IPv6 rules." +#: src/usr/local/www/firewall_rules_edit.php:571 +msgid "IPv4 addresses can not be used in IPv6 rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:559 -msgid "You can not use a IPv4 or IPv6 address in combined IPv4 + IPv6 rules." +#: src/usr/local/www/firewall_rules_edit.php:575 +msgid "An IPv4 or IPv6 address can not be used in combined IPv4 + IPv6 rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:576 +#: src/usr/local/www/firewall_rules_edit.php:592 msgid "OS detection is only valid with protocol TCP." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:579 +#: src/usr/local/www/firewall_rules_edit.php:595 msgid "Invalid OS detection selection. Please select a valid OS." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:585 -msgid "You have to select a queue when you select an acknowledge queue too." +#: src/usr/local/www/firewall_rules_edit.php:601 +msgid "A queue must be selected when an acknowledge queue is also selected." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:587 +#: src/usr/local/www/firewall_rules_edit.php:603 msgid "Acknowledge queue and Queue cannot be the same." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:591 +#: src/usr/local/www/firewall_rules_edit.php:607 msgid "" -"You can not use limiters in Floating rules without choosing a direction." +"Limiters can not be used in Floating rules without choosing a direction." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:594 +#: src/usr/local/www/firewall_rules_edit.php:610 msgid "" -"You can not use gateways in Floating rules without choosing a direction." +"Gateways can not be used in Floating rules without choosing a direction." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:598 +#: src/usr/local/www/firewall_rules_edit.php:614 msgid "" -"You must select a queue for the In direction before selecting one for Out " +"A queue must be selected for the In direction before selecting one for Out " "too." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:600 +#: src/usr/local/www/firewall_rules_edit.php:616 msgid "In and Out Queue cannot be the same." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:602 -#: src/usr/local/www/firewall_rules_edit.php:604 +#: src/usr/local/www/firewall_rules_edit.php:618 +#: src/usr/local/www/firewall_rules_edit.php:620 msgid "" -"You cannot select one queue and one virtual interface for IN and Out. Both " -"must be from the same type." +"A queue and a virtual interface cannot be selected for IN and Out. Both must " +"be from the same type." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:607 +#: src/usr/local/www/firewall_rules_edit.php:623 msgid "" "Please select a gateway, normally the interface selected gateway, so the " "limiters work correctly" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:611 +#: src/usr/local/www/firewall_rules_edit.php:627 msgid "ID must be an integer" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:616 +#: src/usr/local/www/firewall_rules_edit.php:632 msgid "" -"You can only specify the maximum number of established connections per host " -"(advanced option) for TCP protocol." +"The maximum number of established connections per host (advanced option) can " +"only be specified for TCP protocol." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:619 +#: src/usr/local/www/firewall_rules_edit.php:635 msgid "" -"You can only specify the maximum new connections per host / per second(s) " -"(advanced option) for TCP protocol." +"The maximum new connections per host / per second(s) (advanced option) can " +"only be specified for TCP protocol." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:622 +#: src/usr/local/www/firewall_rules_edit.php:638 msgid "" -"You can only specify the state timeout (advanced option) for TCP protocol." +"The state timeout (advanced option) can only be specified for TCP protocol." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:628 +#: src/usr/local/www/firewall_rules_edit.php:644 msgid "" -"You can only specify the maximum state entries (advanced option) for Pass " +"The maximum state entries (advanced option) can only be specified for Pass " "type rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:631 +#: src/usr/local/www/firewall_rules_edit.php:647 msgid "" -"You can only specify the maximum number of unique source hosts (advanced " -"option) for Pass type rules." +"The maximum number of unique source hosts (advanced option) can only be " +"specified for Pass type rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:634 +#: src/usr/local/www/firewall_rules_edit.php:650 msgid "" -"You can only specify the maximum number of established connections per host " -"(advanced option) for Pass type rules." +"The maximum number of established connections per host (advanced option) can " +"only be specified for Pass type rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:637 +#: src/usr/local/www/firewall_rules_edit.php:653 msgid "" -"You can only specify the maximum state entries per host (advanced option) " +"The maximum state entries per host (advanced option) can only be specified " "for Pass type rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:640 +#: src/usr/local/www/firewall_rules_edit.php:656 msgid "" -"You can only specify the maximum new connections per host / per second(s) " -"(advanced option) for Pass type rules." +"The maximum new connections per host / per second(s) (advanced option) can " +"only be specified for Pass type rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:643 +#: src/usr/local/www/firewall_rules_edit.php:659 msgid "" -"You can only specify the state timeout (advanced option) for Pass type rules." +"The state timeout (advanced option) can only be specified for Pass type " +"rules." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:649 +#: src/usr/local/www/firewall_rules_edit.php:665 msgid "" -"You cannot specify the maximum state entries (advanced option) if statetype " +"The maximum state entries (advanced option) cannot be specified if statetype " "is none." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:652 +#: src/usr/local/www/firewall_rules_edit.php:668 msgid "" -"You cannot specify the maximum number of unique source hosts (advanced " -"option) if statetype is none." +"The maximum number of unique source hosts (advanced option) cannot be " +"specified if statetype is none." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:655 +#: src/usr/local/www/firewall_rules_edit.php:671 msgid "" -"You cannot specify the maximum number of established connections per host " -"(advanced option) if statetype is none." +"The maximum number of established connections per host (advanced option) " +"cannot be specified if statetype is none." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:658 +#: src/usr/local/www/firewall_rules_edit.php:674 msgid "" -"You cannot specify the maximum state entries per host (advanced option) if " +"The maximum state entries per host (advanced option) cannot be specified if " "statetype is none." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:661 +#: src/usr/local/www/firewall_rules_edit.php:677 msgid "" -"You cannot specify the maximum new connections per host / per second(s) " -"(advanced option) if statetype is none." +"The maximum new connections per host / per second(s) (advanced option) " +"cannot be specified if statetype is none." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:664 +#: src/usr/local/www/firewall_rules_edit.php:680 msgid "" -"You cannot specify the state timeout (advanced option) if statetype is none." +"The state timeout (advanced option) cannot be specified if statetype is none." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:669 +#: src/usr/local/www/firewall_rules_edit.php:685 msgid "Maximum state entries (advanced option) must be a positive integer" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:673 +#: src/usr/local/www/firewall_rules_edit.php:689 msgid "" "Maximum number of unique source hosts (advanced option) must be a positive " "integer" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:677 +#: src/usr/local/www/firewall_rules_edit.php:693 msgid "" "Maximum number of established connections per host (advanced option) must be " "a positive integer" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:681 +#: src/usr/local/www/firewall_rules_edit.php:697 msgid "" "Maximum state entries per host (advanced option) must be a positive integer" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:685 +#: src/usr/local/www/firewall_rules_edit.php:701 msgid "" "Maximum new connections per host / per second(s) (advanced option) must be a " "positive integer" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:689 +#: src/usr/local/www/firewall_rules_edit.php:705 msgid "State timeout (advanced option) must be a positive integer" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:694 +#: src/usr/local/www/firewall_rules_edit.php:710 msgid "" "Both maximum new connections per host and the interval (per second(s)) must " "be specified" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:709 +#: src/usr/local/www/firewall_rules_edit.php:725 msgid "" -"If you specify TCP flags that should be set you should specify out of which " -"flags as well." +"If TCP flags that should be set is specified, then out of which flags should " +"be specified as well." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:986 +#: src/usr/local/www/firewall_rules_edit.php:1002 msgid "set" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:987 +#: src/usr/local/www/firewall_rules_edit.php:1003 msgid "out of" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1014 +#: src/usr/local/www/firewall_rules_edit.php:1030 msgid " Any flags." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1076 +#: src/usr/local/www/firewall_rules_edit.php:1092 msgid "Edit Firewall Rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1081 +#: src/usr/local/www/firewall_rules_edit.php:1097 #: src/usr/local/www/status_ipsec_leases.php:88 msgid "ID" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1090 +#: src/usr/local/www/firewall_rules_edit.php:1106 msgid "Tracker" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1098 +#: src/usr/local/www/firewall_rules_edit.php:1114 msgid "After" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1105 +#: src/usr/local/www/firewall_rules_edit.php:1121 msgid "Ruleid" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1125 -#: src/usr/local/www/services_captiveportal_mac.php:208 -#: src/usr/local/www/services_captiveportal_mac_edit.php:131 -#: src/usr/local/www/services_captiveportal_mac_edit.php:234 -#: src/usr/local/www/services_captiveportal_vouchers.php:459 +#: src/usr/local/www/firewall_rules_edit.php:1141 +#: src/usr/local/www/services_captiveportal_mac.php:209 +#: src/usr/local/www/services_captiveportal_mac_edit.php:132 +#: src/usr/local/www/services_captiveportal_mac_edit.php:235 #: src/usr/local/www/services_unbound_acls.php:263 -#: src/usr/local/www/services_unbound_acls.php:327 +#: src/usr/local/www/services_unbound_acls.php:331 #: src/usr/local/www/status_logs_common.inc:969 #: src/usr/local/www/status_logs_filter.php:182 #: src/usr/local/www/status_logs_filter_dynamic.php:422 #: src/usr/local/www/status_logs_vpn.php:171 #: src/usr/local/www/status_logs_vpn.php:398 +#: src/usr/local/www/system_groupmanager.php:263 +#: src/usr/local/www/system_usermanager.php:381 #: src/usr/local/www/widgets/widgets/services_status.widget.php:110 msgid "Action" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1128 +#: src/usr/local/www/firewall_rules_edit.php:1144 msgid "" "Choose what to do with packets that match the criteria specified below.<br/" ">Hint: the difference between block and reject is that with reject, a packet " @@ -12174,369 +12390,359 @@ msgid "" "original packet is discarded." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1139 +#: src/usr/local/www/firewall_rules_edit.php:1155 msgid "Set this option to disable this rule without removing it from the list." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1145 +#: src/usr/local/www/firewall_rules_edit.php:1161 msgid "Quick" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1148 +#: src/usr/local/www/firewall_rules_edit.php:1164 msgid "" -"Set this option if you need to apply this action to traffic that matches " -"this rule immediately." +"Set this option to apply this action to traffic that matches this rule " +"immediately." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1158 +#: src/usr/local/www/firewall_rules_edit.php:1174 msgid "View the NAT rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1163 +#: src/usr/local/www/firewall_rules_edit.php:1179 msgid "Associated filter rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1195 +#: src/usr/local/www/firewall_rules_edit.php:1211 msgid "Choose the interface(s) for this rule." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1202 +#: src/usr/local/www/firewall_rules_edit.php:1218 msgid "Choose the interface from which packets must come to match this rule." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1212 +#: src/usr/local/www/firewall_rules_edit.php:1228 msgid "in" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1213 +#: src/usr/local/www/firewall_rules_edit.php:1229 msgid "out" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1208 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:211 -#: src/usr/local/www/services_captiveportal_ip_edit.php:258 +#: src/usr/local/www/firewall_rules_edit.php:1224 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:210 +#: src/usr/local/www/services_captiveportal_ip_edit.php:266 #: src/usr/local/www/status_ipsec_spd.php:93 msgid "Direction" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1234 -msgid "Select the Internet Protocol version this rule applies to" +#: src/usr/local/www/firewall_rules_edit.php:1250 +msgid "Select the Internet Protocol version this rule applies to." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1257 +#: src/usr/local/www/firewall_rules_edit.php:1273 msgid "Choose which IP protocol this rule should match." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1264 -#: src/usr/local/www/firewall_rules_edit.php:1271 +#: src/usr/local/www/firewall_rules_edit.php:1280 +#: src/usr/local/www/firewall_rules_edit.php:1287 msgid "" -"If you selected ICMP for the protocol above, you may specify an ICMP type " +"If ICMP is selected for the protocol above, an ICMP type may be specified " "here." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1268 +#: src/usr/local/www/firewall_rules_edit.php:1284 msgid "ICMPv6 type" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1283 +#: src/usr/local/www/firewall_rules_edit.php:1299 msgid " not" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1310 +#: src/usr/local/www/firewall_rules_edit.php:1326 msgid "This firewall (self)" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1334 +#: src/usr/local/www/firewall_rules_edit.php:1350 msgid " Type" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1341 +#: src/usr/local/www/firewall_rules_edit.php:1357 msgid " Address" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1350 -msgid "Show advanced" -msgstr "" - -#: src/usr/local/www/firewall_rules_edit.php:1354 +#: src/usr/local/www/firewall_rules_edit.php:1372 msgid "(other)" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1360 +#: src/usr/local/www/firewall_rules_edit.php:1378 msgid " port range" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1366 +#: src/usr/local/www/firewall_rules_edit.php:1384 msgid " port begin" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1369 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:186 -#: src/usr/local/www/services_captiveportal_ip_edit.php:229 -#: src/usr/local/www/services_dhcp.php:872 +#: src/usr/local/www/firewall_rules_edit.php:1387 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:188 +#: src/usr/local/www/services_captiveportal_ip_edit.php:231 +#: src/usr/local/www/services_dhcp.php:868 #: src/usr/local/www/services_dhcpv6.php:646 #: src/usr/local/www/services_dhcpv6.php:671 -#: src/usr/local/www/system_gateways_edit.php:757 -#: src/usr/local/www/system_gateways_edit.php:777 +#: src/usr/local/www/system_gateways_edit.php:741 +#: src/usr/local/www/system_gateways_edit.php:761 msgid "From" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1380 +#: src/usr/local/www/firewall_rules_edit.php:1398 msgid " port end" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1383 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:186 -#: src/usr/local/www/services_captiveportal_ip_edit.php:229 -#: src/usr/local/www/services_dhcp.php:878 +#: src/usr/local/www/firewall_rules_edit.php:1401 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:188 +#: src/usr/local/www/services_captiveportal_ip_edit.php:231 +#: src/usr/local/www/services_dhcp.php:874 #: src/usr/local/www/services_dhcpv6.php:655 #: src/usr/local/www/services_dhcpv6.php:680 -#: src/usr/local/www/system_gateways_edit.php:764 -#: src/usr/local/www/system_gateways_edit.php:784 +#: src/usr/local/www/system_gateways_edit.php:748 +#: src/usr/local/www/system_gateways_edit.php:768 msgid "To" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1394 +#: src/usr/local/www/firewall_rules_edit.php:1412 msgid "" "Specify the source port or port range for this rule. This is usually random " "and almost never equal to the destination port range (and should usually be " -"<b>any</b>). You can leave the \"To\" field empty if you only want to filter " -"a single port." +"<b>any</b>). The \"To\" field may be left empty if only filtering a single " +"port." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1399 +#: src/usr/local/www/firewall_rules_edit.php:1417 msgid "" -"Specify the destination port or port range for this rule. You can leave the " -"\"To\" field empty if you only want to filter a single port." +"Specify the destination port or port range for this rule. The \"To\" field " +"may be left empty if only filtering a single port." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1408 +#: src/usr/local/www/firewall_rules_edit.php:1426 msgid "Extra Options" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1414 +#: src/usr/local/www/firewall_rules_edit.php:1432 msgid "" "Hint: the firewall has limited local log space. Don't turn on logging for " -"everything. If you want to do a lot of logging, consider using a remote " -"syslog server (see the <a href=\"status_logs_settings.php\">Status: System " -"Logs: Settings</a> page)." +"everything. If doing a lot of logging, consider using a remote syslog server " +"(see the <a href=\"status_logs_settings.php\">Status: System Logs: Settings</" +"a> page)." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1424 +#: src/usr/local/www/firewall_rules_edit.php:1442 #: src/usr/local/www/services_unbound_acls.php:273 -msgid "You may enter a description here for your reference." -msgstr "" - -#: src/usr/local/www/firewall_rules_edit.php:1430 -#: src/usr/local/www/interfaces_ppps_edit.php:828 -#: src/usr/local/www/system_gateways_edit.php:716 -msgid "Advanced options" +msgid "A description may be entered here for administrative reference." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1449 +#: src/usr/local/www/firewall_rules_edit.php:1465 msgid "Source OS" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1452 +#: src/usr/local/www/firewall_rules_edit.php:1468 msgid "" "Note: this only works for TCP rules. General OS choice matches all subtypes." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1456 +#: src/usr/local/www/firewall_rules_edit.php:1472 msgid "Diffserv Code Point" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1463 +#: src/usr/local/www/firewall_rules_edit.php:1479 msgid "Allow IP options" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1471 +#: src/usr/local/www/firewall_rules_edit.php:1487 #: src/usr/local/www/system_advanced_firewall.php:552 msgid "Disable reply-to" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1478 +#: src/usr/local/www/firewall_rules_edit.php:1494 #: src/usr/local/www/interfaces_qinq.php:144 msgid "Tag" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1481 +#: src/usr/local/www/firewall_rules_edit.php:1497 msgid "" -"You can mark a packet matching this rule and use this mark to match on other " -"NAT/filter rules. It is called <b>Policy filtering</b>." +"A packet matching this rule can be marked and this mark used to match on " +"other NAT/filter rules. It is called <b>Policy filtering</b>." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1486 +#: src/usr/local/www/firewall_rules_edit.php:1502 msgid "Tagged" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1489 -msgid "You can match packet on a mark placed before on another rule." +#: src/usr/local/www/firewall_rules_edit.php:1505 +msgid "A packet can be matched on a mark placed before on another rule." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1493 +#: src/usr/local/www/firewall_rules_edit.php:1509 msgid "Max. states" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1496 +#: src/usr/local/www/firewall_rules_edit.php:1512 msgid "Maximum state entries this rule can create." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1500 +#: src/usr/local/www/firewall_rules_edit.php:1516 msgid "Max. src nodes" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1503 +#: src/usr/local/www/firewall_rules_edit.php:1519 msgid "Maximum number of unique source hosts." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1507 +#: src/usr/local/www/firewall_rules_edit.php:1523 msgid "Max. connections" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1510 +#: src/usr/local/www/firewall_rules_edit.php:1526 msgid "Maximum number of established connections per host (TCP only)." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1514 +#: src/usr/local/www/firewall_rules_edit.php:1530 msgid "Max. src. states" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1517 +#: src/usr/local/www/firewall_rules_edit.php:1533 msgid "Maximum state entries per host." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1521 +#: src/usr/local/www/firewall_rules_edit.php:1537 msgid "Max. src. conn. Rate" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1524 -msgid "Maximum new connections per host (TCP only)" +#: src/usr/local/www/firewall_rules_edit.php:1540 +msgid "Maximum new connections per host (TCP only)." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1528 +#: src/usr/local/www/firewall_rules_edit.php:1544 msgid "Max. src. conn. Rates" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1532 +#: src/usr/local/www/firewall_rules_edit.php:1548 msgid "/ per how many second(s) (TCP only)" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1536 +#: src/usr/local/www/firewall_rules_edit.php:1552 msgid "State timeout" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1540 +#: src/usr/local/www/firewall_rules_edit.php:1556 msgid "State Timeout in seconds (TCP only)" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1543 +#: src/usr/local/www/firewall_rules_edit.php:1559 #: src/usr/local/www/status_logs_filter.php:362 #: src/usr/local/www/status_logs_filter_dynamic.php:510 msgid "TCP Flags" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1545 +#: src/usr/local/www/firewall_rules_edit.php:1561 msgid "" "Use this to choose TCP flags that must be set or cleared for this rule to " "match." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1549 +#: src/usr/local/www/firewall_rules_edit.php:1565 msgid "No pfSync" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1559 +#: src/usr/local/www/firewall_rules_edit.php:1575 msgid "Keep" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1560 +#: src/usr/local/www/firewall_rules_edit.php:1576 msgid "Sloppy" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1561 +#: src/usr/local/www/firewall_rules_edit.php:1577 msgid "Synproxy" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1556 +#: src/usr/local/www/firewall_rules_edit.php:1572 msgid "State type" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1564 +#: src/usr/local/www/firewall_rules_edit.php:1580 msgid "" -"Select which type of state tracking mechanism you would like to use. If in " -"doubt, use keep state<br /><span></span>" +"Select which type of state tracking mechanism to use. If in doubt, use keep " +"state.<br /><span></span>" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1572 +#: src/usr/local/www/firewall_rules_edit.php:1588 msgid "This does NOT prevent the rule from being overwritten on Slave." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1578 +#: src/usr/local/www/firewall_rules_edit.php:1594 msgid "VLAN Prio" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1581 -msgid "Choose 802.1p priority to match on" +#: src/usr/local/www/firewall_rules_edit.php:1597 +msgid "Choose 802.1p priority to match on." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1585 +#: src/usr/local/www/firewall_rules_edit.php:1601 msgid "VLAN Prio Set" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1588 -msgid "Choose 802.1p priority to apply" +#: src/usr/local/www/firewall_rules_edit.php:1604 +msgid "Choose 802.1p priority to apply." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1602 -msgid "Leave as 'none' to leave the rule enabled all the time" +#: src/usr/local/www/firewall_rules_edit.php:1618 +msgid "Leave as 'none' to leave the rule enabled all the time." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1633 +#: src/usr/local/www/firewall_rules_edit.php:1649 msgid "" "Leave as 'default' to use the system routing table. Or choose a gateway to " "utilize policy based routing." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1636 +#: src/usr/local/www/firewall_rules_edit.php:1652 msgid "In / Out pipe" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1640 +#: src/usr/local/www/firewall_rules_edit.php:1656 msgid "DNpipe" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1647 +#: src/usr/local/www/firewall_rules_edit.php:1663 msgid "PDNpipe" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1652 +#: src/usr/local/www/firewall_rules_edit.php:1668 msgid "" -"Choose the Out queue/Virtual interface only if you have also selected In. " -"The Out selection is applied to traffic leaving the interface where the rule " -"is created, the In selection is applied to traffic coming into the chosen " -"interface.<br />If you are creating a floating rule, if the direction is In " -"then the same rules apply, if the direction is Out the selections are " -"reversed, Out is for incoming and In is for outgoing." +"Choose the Out queue/Virtual interface only if In is also selected. The Out " +"selection is applied to traffic leaving the interface where the rule is " +"created, the In selection is applied to traffic coming into the chosen " +"interface.<br />If creating a floating rule, if the direction is In then the " +"same rules apply, if the direction is Out the selections are reversed, Out " +"is for incoming and In is for outgoing." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1660 +#: src/usr/local/www/firewall_rules_edit.php:1676 msgid "Ackqueue / Queue" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1677 +#: src/usr/local/www/firewall_rules_edit.php:1693 msgid "Ackqueue" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1689 -msgid "Choose the Acknowledge Queue only if you have selected Queue." +#: src/usr/local/www/firewall_rules_edit.php:1705 +msgid "Choose the Acknowledge Queue only if there is a selected Queue." msgstr "" #: src/usr/local/www/firewall_schedule.php:75 #: src/usr/local/www/firewall_schedule.php:120 #: src/usr/local/www/firewall_schedule_edit.php:85 #: src/usr/local/www/head.inc:278 -#: src/usr/local/www/system_advanced_misc.php:479 +#: src/usr/local/www/system_advanced_misc.php:496 msgid "Schedules" msgstr "" @@ -12582,75 +12788,68 @@ msgstr "" msgid "Schedule name cannot be blank." msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:130 -msgid "Reserved word used for schedule name." +#: src/usr/local/www/firewall_schedule_edit.php:129 +msgid "schedule" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:133 -#, php-format -msgid "" -"The schedule name must be less than 32 characters long, may not consist of " -"only numbers, may not consist of only underscores, and may only contain the " -"following characters: %s" -msgstr "" - -#: src/usr/local/www/firewall_schedule_edit.php:144 +#: src/usr/local/www/firewall_schedule_edit.php:139 msgid "A Schedule with this name already exists." msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:159 +#: src/usr/local/www/firewall_schedule_edit.php:154 #, php-format msgid "Invalid start time - '%s'" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:164 +#: src/usr/local/www/firewall_schedule_edit.php:159 #, php-format msgid "Invalid stop time - '%s'" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:211 +#: src/usr/local/www/firewall_schedule_edit.php:206 msgid "The schedule must have at least one time range configured." msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:294 +#: src/usr/local/www/firewall_schedule_edit.php:289 msgid "Tue" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:296 +#: src/usr/local/www/firewall_schedule_edit.php:291 msgid "Thu" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:345 +#: src/usr/local/www/firewall_schedule_edit.php:340 msgid "" "Click individual date to select that date only. Click the appropriate " "weekday Header to select all occurrences of that weekday. " msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:389 +#: src/usr/local/www/firewall_schedule_edit.php:384 msgid "Schedule Information" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:393 +#: src/usr/local/www/firewall_schedule_edit.php:388 msgid "Schedule Name" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:398 +#: src/usr/local/www/firewall_schedule_edit.php:393 msgid "" "The name of the schedule may only consist of the characters \"a-z, A-Z, 0-9 " "and _\"." msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:412 -#: src/usr/local/www/firewall_schedule_edit.php:465 -#: src/usr/local/www/vpn_openvpn_csc.php:375 -msgid "You may enter a description here for your reference (not parsed). " +#: src/usr/local/www/firewall_schedule_edit.php:407 +#: src/usr/local/www/firewall_schedule_edit.php:460 +#: src/usr/local/www/vpn_openvpn_csc.php:379 +msgid "" +"A description may be entered here for administrative reference (not parsed). " msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:416 +#: src/usr/local/www/firewall_schedule_edit.php:411 msgid "Month" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:426 +#: src/usr/local/www/firewall_schedule_edit.php:421 #: src/usr/local/www/status_logs.php:172 src/usr/local/www/status_logs.php:224 #: src/usr/local/www/status_logs_common.inc:276 #: src/usr/local/www/status_logs_common.inc:462 @@ -12665,58 +12864,58 @@ msgstr "" msgid "Time" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:433 +#: src/usr/local/www/firewall_schedule_edit.php:428 msgid "Start Hrs" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:440 +#: src/usr/local/www/firewall_schedule_edit.php:435 msgid "Start Mins" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:447 +#: src/usr/local/www/firewall_schedule_edit.php:442 msgid "Stop Hrs" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:454 +#: src/usr/local/www/firewall_schedule_edit.php:449 msgid "Stop Mins" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:456 +#: src/usr/local/www/firewall_schedule_edit.php:451 msgid "" "Select the time range for the day(s) selected on the Month(s) above. A full " "day is 0:00-23:59." msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:462 +#: src/usr/local/www/firewall_schedule_edit.php:457 msgid "Time range description" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:471 +#: src/usr/local/www/firewall_schedule_edit.php:466 msgid "Add Time" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:476 +#: src/usr/local/www/firewall_schedule_edit.php:473 msgid "Clear selection" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:492 +#: src/usr/local/www/firewall_schedule_edit.php:491 msgid "Configured Ranges" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:628 +#: src/usr/local/www/firewall_schedule_edit.php:627 msgid "Day(s)" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:635 +#: src/usr/local/www/firewall_schedule_edit.php:634 msgid "Start time" msgstr "" -#: src/usr/local/www/firewall_schedule_edit.php:642 +#: src/usr/local/www/firewall_schedule_edit.php:641 msgid "Stop time" msgstr "" #: src/usr/local/www/firewall_shaper.php:75 -#: src/usr/local/www/firewall_shaper.php:436 +#: src/usr/local/www/firewall_shaper.php:415 #: src/usr/local/www/firewall_shaper_queues.php:243 #: src/usr/local/www/firewall_shaper_vinterface.php:415 #: src/usr/local/www/firewall_shaper_wizards.php:111 @@ -12730,8 +12929,8 @@ msgstr "" #: src/usr/local/www/firewall_shaper.php:203 msgid "" -"Could not create new queue/discipline! Did you remember to apply any recent " -"changes?" +"Could not create new queue/discipline! Any recent changes may need to be " +"applied first." msgstr "" #: src/usr/local/www/firewall_shaper.php:225 @@ -12743,19 +12942,19 @@ msgstr "" msgid "Queue not found!" msgstr "" -#: src/usr/local/www/firewall_shaper.php:334 +#: src/usr/local/www/firewall_shaper.php:313 #: src/usr/local/www/firewall_shaper_vinterface.php:303 msgid "Could not add new queue." msgstr "" -#: src/usr/local/www/firewall_shaper.php:432 +#: src/usr/local/www/firewall_shaper.php:411 #: src/usr/local/www/firewall_shaper_queues.php:239 #: src/usr/local/www/firewall_shaper_vinterface.php:411 #: src/usr/local/www/firewall_shaper_wizards.php:122 msgid "The traffic shaper configuration has been changed." msgstr "" -#: src/usr/local/www/firewall_shaper.php:437 +#: src/usr/local/www/firewall_shaper.php:416 #: src/usr/local/www/firewall_shaper_queues.php:221 #: src/usr/local/www/firewall_shaper_queues.php:244 #: src/usr/local/www/firewall_shaper_vinterface.php:416 @@ -12763,27 +12962,27 @@ msgstr "" msgid "By Queue" msgstr "" -#: src/usr/local/www/firewall_shaper.php:439 +#: src/usr/local/www/firewall_shaper.php:418 #: src/usr/local/www/firewall_shaper_queues.php:246 #: src/usr/local/www/firewall_shaper_vinterface.php:418 #: src/usr/local/www/firewall_shaper_wizards.php:96 #: src/usr/local/www/firewall_shaper_wizards.php:114 #: src/usr/local/www/vpn_openvpn_client.php:451 -#: src/usr/local/www/vpn_openvpn_csc.php:329 +#: src/usr/local/www/vpn_openvpn_csc.php:333 #: src/usr/local/www/vpn_openvpn_server.php:617 msgid "Wizards" msgstr "" -#: src/usr/local/www/firewall_shaper.php:457 +#: src/usr/local/www/firewall_shaper.php:437 msgid "Remove Shaper" msgstr "" -#: src/usr/local/www/firewall_shaper.php:478 -#: src/usr/local/www/firewall_shaper_vinterface.php:448 +#: src/usr/local/www/firewall_shaper.php:458 +#: src/usr/local/www/firewall_shaper_vinterface.php:447 msgid "Add new Queue" msgstr "" -#: src/usr/local/www/firewall_shaper.php:492 +#: src/usr/local/www/firewall_shaper.php:473 #: src/usr/local/www/firewall_shaper_vinterface.php:462 msgid "Delete this queue" msgstr "" @@ -12809,10 +13008,10 @@ msgstr "" #: src/usr/local/www/firewall_shaper_vinterface.php:260 #: src/usr/local/www/firewall_shaper_vinterface.php:286 -msgid "You cannot name a child queue with the same name as a parent limiter" +msgid "A child queue cannot be named the same as a parent limiter." msgstr "" -#: src/usr/local/www/firewall_shaper_vinterface.php:428 +#: src/usr/local/www/firewall_shaper_vinterface.php:429 msgid "New Limiter" msgstr "" @@ -12870,23 +13069,23 @@ msgid "" msgstr "" #: src/usr/local/www/firewall_virtual_ip.php:265 -#: src/usr/local/www/firewall_virtual_ip_edit.php:375 +#: src/usr/local/www/firewall_virtual_ip_edit.php:384 msgid "Proxy ARP" msgstr "" #: src/usr/local/www/firewall_virtual_ip.php:266 #: src/usr/local/www/status_carp.php:140 -#: src/usr/local/www/firewall_virtual_ip_edit.php:367 +#: src/usr/local/www/firewall_virtual_ip_edit.php:376 msgid "CARP" msgstr "" #: src/usr/local/www/firewall_virtual_ip.php:268 -#: src/usr/local/www/firewall_virtual_ip_edit.php:359 +#: src/usr/local/www/firewall_virtual_ip_edit.php:368 msgid "IP Alias" msgstr "" #: src/usr/local/www/firewall_virtual_ip.php:271 -#: src/usr/local/www/firewall_virtual_ip_edit.php:320 +#: src/usr/local/www/firewall_virtual_ip_edit.php:329 #: src/usr/local/www/head.inc:280 msgid "Virtual IPs" msgstr "" @@ -12920,9 +13119,7 @@ msgstr "" #: src/usr/local/www/firewall_virtual_ip.php:377 #, php-format -msgid "" -"You can check the status of your CARP Virtual IPs and interfaces %1$shere" -"%2$s." +msgid "Check the status of CARP Virtual IPs and interfaces %1$shere%2$s." msgstr "" #: src/usr/local/www/firewall_virtual_ip_edit.php:139 @@ -12943,16 +13140,17 @@ msgid "" msgstr "" #: src/usr/local/www/firewall_virtual_ip_edit.php:183 -msgid "You cannot use the network address for this VIP" +msgid "The network address cannot be used for this VIP" msgstr "" #: src/usr/local/www/firewall_virtual_ip_edit.php:185 -msgid "You cannot use the broadcast address for this VIP" +msgid "The broadcast address cannot be used for this VIP" msgstr "" #: src/usr/local/www/firewall_virtual_ip_edit.php:204 msgid "" -"You must specify a CARP password that is shared between the two VHID members." +"A CARP password that is shared between the two VHID members must be " +"specified." msgstr "" #: src/usr/local/www/firewall_virtual_ip_edit.php:208 @@ -12960,99 +13158,107 @@ msgid "Password and confirm password must match" msgstr "" #: src/usr/local/www/firewall_virtual_ip_edit.php:212 -#: src/usr/local/www/firewall_virtual_ip_edit.php:223 +#: src/usr/local/www/firewall_virtual_ip_edit.php:232 msgid "For this type of vip localhost is not allowed." msgstr "" #: src/usr/local/www/firewall_virtual_ip_edit.php:214 -#: src/usr/local/www/firewall_virtual_ip_edit.php:225 +#: src/usr/local/www/firewall_virtual_ip_edit.php:234 msgid "" "A CARP parent interface can only be used with IP Alias type Virtual IPs." msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:317 +#: src/usr/local/www/firewall_virtual_ip_edit.php:223 +msgid "An IPv4 Virtual IP cannot have an IPv6 CARP parent." +msgstr "" + +#: src/usr/local/www/firewall_virtual_ip_edit.php:226 +msgid "An IPv6 Virtual IP cannot have an IPv4 CARP parent." +msgstr "" + +#: src/usr/local/www/firewall_virtual_ip_edit.php:326 msgid "" "The mask must be the network's subnet mask. It does not specify a CIDR range." msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:318 +#: src/usr/local/www/firewall_virtual_ip_edit.php:327 msgid "Enter a CIDR block of proxy ARP addresses." msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:352 +#: src/usr/local/www/firewall_virtual_ip_edit.php:361 msgid "Edit Virtual IP" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:402 +#: src/usr/local/www/firewall_virtual_ip_edit.php:411 msgid "Single address" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:399 +#: src/usr/local/www/firewall_virtual_ip_edit.php:408 msgid "Address type" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:409 +#: src/usr/local/www/firewall_virtual_ip_edit.php:418 msgid "Address(es)" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:411 +#: src/usr/local/www/firewall_virtual_ip_edit.php:420 msgid "<span id=\"address_note\"></span>" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:415 +#: src/usr/local/www/firewall_virtual_ip_edit.php:424 msgid "Expansion" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:422 +#: src/usr/local/www/firewall_virtual_ip_edit.php:431 msgid "Virtual IP Password" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:425 +#: src/usr/local/www/firewall_virtual_ip_edit.php:434 msgid "Enter the VHID group password." msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:429 +#: src/usr/local/www/firewall_virtual_ip_edit.php:438 msgid "VHID Group" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:432 -msgid "Enter the VHID group that the machines will share" +#: src/usr/local/www/firewall_virtual_ip_edit.php:441 +msgid "Enter the VHID group that the machines will share." msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:434 +#: src/usr/local/www/firewall_virtual_ip_edit.php:443 msgid "Advertising frequency" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:437 -#: src/usr/local/www/firewall_virtual_ip_edit.php:440 +#: src/usr/local/www/firewall_virtual_ip_edit.php:446 +#: src/usr/local/www/firewall_virtual_ip_edit.php:449 msgid "Base" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:444 -#: src/usr/local/www/firewall_virtual_ip_edit.php:447 +#: src/usr/local/www/firewall_virtual_ip_edit.php:453 +#: src/usr/local/www/firewall_virtual_ip_edit.php:456 msgid "Skew" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:449 +#: src/usr/local/www/firewall_virtual_ip_edit.php:458 msgid "" "The frequency that this machine will advertise. 0 means usually master. " "Otherwise the lowest combination of both values in the cluster determines " "the master." msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:482 +#: src/usr/local/www/firewall_virtual_ip_edit.php:491 msgid "" "Proxy ARP and Other type Virtual IPs cannot be bound to by anything running " "on the firewall, such as IPsec, OpenVPN, etc. Use a CARP or IP Alias type " "address for these types." msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:483 +#: src/usr/local/www/firewall_virtual_ip_edit.php:492 #, php-format msgid "For more information on CARP and the above values, visit the OpenBSD %s" msgstr "" -#: src/usr/local/www/foot.inc:12 src/usr/local/www/foot.inc:16 +#: src/usr/local/www/foot.inc:11 src/usr/local/www/foot.inc:15 msgid "Top of page" msgstr "" @@ -13147,8 +13353,8 @@ msgid "Authentication and Accounting" msgstr "" #: src/usr/local/www/guiconfig.inc:190 -#: src/usr/local/www/services_captiveportal.php:901 -#: src/usr/local/www/vpn_l2tp.php:338 +#: src/usr/local/www/services_captiveportal.php:910 +#: src/usr/local/www/vpn_l2tp.php:335 msgid "Accounting" msgstr "" @@ -13176,17 +13382,17 @@ msgstr "" msgid "10BASE-T half-duplex" msgstr "" -#: src/usr/local/www/guiconfig.inc:268 src/usr/local/www/interfaces.php:2928 +#: src/usr/local/www/guiconfig.inc:268 src/usr/local/www/interfaces.php:2935 #: src/usr/local/www/interfaces_wireless_edit.php:224 msgid "Infrastructure (BSS)" msgstr "" -#: src/usr/local/www/guiconfig.inc:269 src/usr/local/www/interfaces.php:2928 +#: src/usr/local/www/guiconfig.inc:269 src/usr/local/www/interfaces.php:2935 #: src/usr/local/www/interfaces_wireless_edit.php:225 msgid "Ad-hoc (IBSS)" msgstr "" -#: src/usr/local/www/guiconfig.inc:270 src/usr/local/www/interfaces.php:2928 +#: src/usr/local/www/guiconfig.inc:270 src/usr/local/www/interfaces.php:2935 #: src/usr/local/www/interfaces_wireless_edit.php:226 msgid "Access Point" msgstr "" @@ -13205,48 +13411,60 @@ msgstr "" msgid "The following input errors were detected:" msgstr "" -#: src/usr/local/www/guiconfig.inc:344 +#: src/usr/local/www/guiconfig.inc:347 msgid "Apply Changes" msgstr "" -#: src/usr/local/www/guiconfig.inc:377 +#: src/usr/local/www/guiconfig.inc:380 #: src/usr/local/www/status_logs_common.inc:753 msgid "The changes have been applied successfully." msgstr "" -#: src/usr/local/www/guiconfig.inc:384 +#: src/usr/local/www/guiconfig.inc:387 msgid "" -"You can also <a href=\"status_filter_reload.php\">monitor</a> the filter " -"reload progress." +"<a href=\"status_filter_reload.php\">Monitor</a> the filter reload progress." msgstr "" -#: src/usr/local/www/guiconfig.inc:565 src/usr/local/www/guiconfig.inc:616 +#: src/usr/local/www/guiconfig.inc:568 src/usr/local/www/guiconfig.inc:619 #, php-format msgid "File %s is a directory." msgstr "" -#: src/usr/local/www/guiconfig.inc:567 src/usr/local/www/guiconfig.inc:618 +#: src/usr/local/www/guiconfig.inc:570 src/usr/local/www/guiconfig.inc:621 msgid "Log file started." msgstr "" -#: src/usr/local/www/guiconfig.inc:1005 +#: src/usr/local/www/guiconfig.inc:1008 msgid "Currently viewing: " msgstr "" -#: src/usr/local/www/guiconfig.inc:1092 +#: src/usr/local/www/guiconfig.inc:1095 msgid "listing only first 10k items" msgstr "" -#: src/usr/local/www/guiconfig.inc:1102 -#: src/usr/local/www/services_dhcp.php:1207 -#: src/usr/local/www/services_dhcpv6.php:946 +#: src/usr/local/www/guiconfig.inc:1105 +#: src/usr/local/www/services_dhcp.php:1217 +#: src/usr/local/www/services_dhcpv6.php:956 #: src/usr/local/www/system_advanced_sysctl.php:207 #: src/usr/local/www/system_advanced_sysctl.php:256 -#: src/usr/local/www/system_certmanager.php:825 +#: src/usr/local/www/system_certmanager.php:784 msgid "Value" msgstr "" -#: src/usr/local/www/head.inc:244 src/usr/local/www/system.php:358 +#: src/usr/local/www/head.inc:242 +#: src/usr/local/www/system_advanced_admin.php:318 +#: src/usr/local/www/system_advanced_firewall.php:404 +#: src/usr/local/www/system_advanced_misc.php:320 +#: src/usr/local/www/system_advanced_network.php:173 +#: src/usr/local/www/system_advanced_notifications.php:215 +#: src/usr/local/www/system_advanced_sysctl.php:166 +#: src/usr/local/www/system_gateways_edit.php:719 +#: src/usr/local/www/vpn_openvpn_csc.php:594 +#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:280 +msgid "Advanced" +msgstr "" + +#: src/usr/local/www/head.inc:244 src/usr/local/www/system.php:362 msgid "General Setup" msgstr "" @@ -13260,8 +13478,8 @@ msgstr "" #: src/usr/local/www/head.inc:250 src/usr/local/www/status_logs.php:92 #: src/usr/local/www/status_logs_common.inc:138 -#: src/usr/local/www/system_gateway_groups.php:124 -#: src/usr/local/www/system_gateway_groups_edit.php:180 +#: src/usr/local/www/system_gateway_groups.php:138 +#: src/usr/local/www/system_gateway_groups_edit.php:181 #: src/usr/local/www/system_gateways.php:245 #: src/usr/local/www/system_gateways_edit.php:572 #: src/usr/local/www/system_routes.php:246 @@ -13274,12 +13492,12 @@ msgid "Cert. Manager" msgstr "" #: src/usr/local/www/head.inc:253 src/usr/local/www/head.inc:255 -#: src/usr/local/www/system_authservers.php:377 -#: src/usr/local/www/system_groupmanager.php:274 +#: src/usr/local/www/system_authservers.php:443 +#: src/usr/local/www/system_groupmanager.php:288 #: src/usr/local/www/system_groupmanager_addprivs.php:69 -#: src/usr/local/www/system_usermanager.php:467 +#: src/usr/local/www/system_usermanager.php:468 #: src/usr/local/www/system_usermanager_addprivs.php:70 -#: src/usr/local/www/system_usermanager_settings.php:75 +#: src/usr/local/www/system_usermanager_settings.php:140 msgid "User Manager" msgstr "" @@ -13289,7 +13507,7 @@ msgstr "" #: src/usr/local/www/head.inc:293 src/usr/local/www/services_dhcpv6.php:505 #: src/usr/local/www/services_dhcpv6_edit.php:234 -#: src/usr/local/www/services_router_advertisements.php:242 +#: src/usr/local/www/services_router_advertisements.php:244 msgid "DHCPv6 Server & RA" msgstr "" @@ -13301,11 +13519,11 @@ msgstr "" #: src/usr/local/www/head.inc:298 src/usr/local/www/head.inc:332 #: src/usr/local/www/load_balancer_monitor.php:107 -#: src/usr/local/www/load_balancer_monitor_edit.php:234 +#: src/usr/local/www/load_balancer_monitor_edit.php:236 #: src/usr/local/www/load_balancer_pool.php:121 #: src/usr/local/www/load_balancer_pool_edit.php:219 #: src/usr/local/www/load_balancer_setting.php:120 -#: src/usr/local/www/load_balancer_virtual_server.php:121 +#: src/usr/local/www/load_balancer_virtual_server.php:141 #: src/usr/local/www/load_balancer_virtual_server_edit.php:193 #: src/usr/local/www/status_lb_pool.php:92 #: src/usr/local/www/status_lb_vs.php:79 src/usr/local/www/status_logs.php:84 @@ -13315,7 +13533,7 @@ msgid "Load Balancer" msgstr "" #: src/usr/local/www/head.inc:299 src/usr/local/www/head.inc:333 -#: src/usr/local/www/services_dhcp.php:1085 +#: src/usr/local/www/services_dhcp.php:1089 #: src/usr/local/www/services_ntpd.php:218 #: src/usr/local/www/services_ntpd_acls.php:195 #: src/usr/local/www/services_ntpd_gps.php:225 @@ -13323,7 +13541,7 @@ msgstr "" #: src/usr/local/www/status_logs.php:88 #: src/usr/local/www/status_logs_common.inc:130 #: src/usr/local/www/status_logs_settings.php:242 -#: src/usr/local/www/status_ntpd.php:186 +#: src/usr/local/www/status_ntpd.php:287 msgid "NTP" msgstr "" @@ -13336,8 +13554,8 @@ msgstr "" msgid "UPnP & NAT-PMP" msgstr "" -#: src/usr/local/www/head.inc:318 src/usr/local/www/interfaces.php:1640 -#: src/usr/local/www/interfaces_ppps_edit.php:466 +#: src/usr/local/www/head.inc:318 src/usr/local/www/interfaces.php:1649 +#: src/usr/local/www/interfaces_ppps_edit.php:476 #: src/usr/local/www/vpn_l2tp.php:219 src/usr/local/www/vpn_l2tp_users.php:63 #: src/usr/local/www/vpn_l2tp_users_edit.php:63 msgid "L2TP" @@ -13347,7 +13565,7 @@ msgstr "" msgid "CARP (failover)" msgstr "" -#: src/usr/local/www/head.inc:325 src/usr/local/www/index.php:315 +#: src/usr/local/www/head.inc:325 src/usr/local/www/index.php:321 msgid "Dashboard" msgstr "" @@ -13360,8 +13578,8 @@ msgstr "" #: src/usr/local/www/status_gateways.php:86 #: src/usr/local/www/status_logs.php:90 #: src/usr/local/www/status_logs_common.inc:137 -#: src/usr/local/www/system_gateway_groups.php:138 -#: src/usr/local/www/system_gateway_groups.php:151 +#: src/usr/local/www/system_gateway_groups.php:152 +#: src/usr/local/www/system_gateway_groups.php:165 #: src/usr/local/www/system_gateways.php:245 #: src/usr/local/www/system_gateways.php:262 #: src/usr/local/www/system_gateways.php:269 @@ -13390,22 +13608,22 @@ msgstr "" #: src/usr/local/www/head.inc:341 #: src/usr/local/www/load_balancer_monitor.php:107 -#: src/usr/local/www/load_balancer_monitor_edit.php:234 +#: src/usr/local/www/load_balancer_monitor_edit.php:236 #: src/usr/local/www/load_balancer_pool.php:121 #: src/usr/local/www/load_balancer_pool_edit.php:219 #: src/usr/local/www/load_balancer_setting.php:120 -#: src/usr/local/www/load_balancer_virtual_server.php:121 +#: src/usr/local/www/load_balancer_virtual_server.php:141 #: src/usr/local/www/load_balancer_virtual_server_edit.php:193 -#: src/usr/local/www/services_captiveportal.php:96 -#: src/usr/local/www/services_captiveportal_filemanager.php:99 -#: src/usr/local/www/services_captiveportal_hostname.php:95 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:96 -#: src/usr/local/www/services_captiveportal_ip.php:94 -#: src/usr/local/www/services_captiveportal_ip_edit.php:98 -#: src/usr/local/www/services_captiveportal_mac.php:91 -#: src/usr/local/www/services_captiveportal_mac_edit.php:101 -#: src/usr/local/www/services_captiveportal_vouchers.php:111 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:86 +#: src/usr/local/www/services_captiveportal.php:97 +#: src/usr/local/www/services_captiveportal_filemanager.php:100 +#: src/usr/local/www/services_captiveportal_hostname.php:96 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:98 +#: src/usr/local/www/services_captiveportal_ip.php:95 +#: src/usr/local/www/services_captiveportal_ip_edit.php:99 +#: src/usr/local/www/services_captiveportal_mac.php:92 +#: src/usr/local/www/services_captiveportal_mac_edit.php:102 +#: src/usr/local/www/services_captiveportal_vouchers.php:112 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:87 #: src/usr/local/www/services_captiveportal_zones.php:93 #: src/usr/local/www/services_captiveportal_zones_edit.php:69 #: src/usr/local/www/services_dhcp.php:726 @@ -13429,27 +13647,27 @@ msgstr "" #: src/usr/local/www/services_pppoe_edit.php:314 #: src/usr/local/www/services_rfc2136.php:92 #: src/usr/local/www/services_rfc2136_edit.php:182 -#: src/usr/local/www/services_router_advertisements.php:242 +#: src/usr/local/www/services_router_advertisements.php:244 #: src/usr/local/www/services_snmp.php:210 -#: src/usr/local/www/services_unbound.php:266 +#: src/usr/local/www/services_unbound.php:272 #: src/usr/local/www/services_unbound_acls.php:208 #: src/usr/local/www/services_unbound_advanced.php:221 #: src/usr/local/www/services_unbound_domainoverride_edit.php:145 #: src/usr/local/www/services_unbound_host_edit.php:233 #: src/usr/local/www/services_wol.php:146 #: src/usr/local/www/services_wol_edit.php:137 -#: src/usr/local/www/status_services.php:100 -#: src/usr/local/www/status_services.php:122 -#: src/usr/local/www/system_authservers.php:223 +#: src/usr/local/www/status_services.php:90 +#: src/usr/local/www/status_services.php:112 +#: src/usr/local/www/system_authservers.php:289 msgid "Services" msgstr "" -#: src/usr/local/www/head.inc:343 src/usr/local/www/status_graph.php:150 -#: src/usr/local/www/status_graph.php:258 +#: src/usr/local/www/head.inc:343 src/usr/local/www/status_graph.php:165 +#: src/usr/local/www/status_graph.php:273 msgid "Traffic Graph" msgstr "" -#: src/usr/local/www/head.inc:358 src/usr/local/www/interfaces_assign.php:524 +#: src/usr/local/www/head.inc:358 src/usr/local/www/interfaces_assign.php:529 #: src/usr/local/www/interfaces_bridge.php:119 #: src/usr/local/www/interfaces_gif.php:114 #: src/usr/local/www/interfaces_gre.php:114 @@ -13508,7 +13726,7 @@ msgstr "" msgid "FreeBSD Handbook" msgstr "" -#: src/usr/local/www/head.inc:479 src/usr/local/www/head.inc:625 +#: src/usr/local/www/head.inc:479 src/usr/local/www/head.inc:641 msgid "Notices" msgstr "" @@ -13517,11 +13735,11 @@ msgid "Log out" msgstr "" #: src/usr/local/www/head.inc:512 -msgid "Available widgets" +msgid "Save dashboard layout" msgstr "" #: src/usr/local/www/head.inc:520 -msgid "Save dashboard layout" +msgid "Available widgets" msgstr "" #: src/usr/local/www/head.inc:528 @@ -13532,24 +13750,28 @@ msgstr "" msgid "Manage log" msgstr "" -#: src/usr/local/www/head.inc:581 +#: src/usr/local/www/head.inc:557 +msgid "Refresh Graph" +msgstr "" + +#: src/usr/local/www/head.inc:597 msgid "Help for items on this page" msgstr "" -#: src/usr/local/www/head.inc:592 +#: src/usr/local/www/head.inc:608 #, php-format msgid "" "<p>%s is booting, then packages will be reinstalled in the background.</" "p><p>Do not make changes in the GUI until this is complete.</p>" msgstr "" -#: src/usr/local/www/head.inc:595 +#: src/usr/local/www/head.inc:611 msgid "" "<p>Packages are currently being reinstalled in the background.</p><p>Do not " "make changes in the GUI until this is complete.</p>" msgstr "" -#: src/usr/local/www/head.inc:596 +#: src/usr/local/www/head.inc:612 #, php-format msgid "" "<p>If the above message is still displayed after a couple of hours, use the " @@ -13557,16 +13779,15 @@ msgid "" "> %2$s\">%1$s > %2$s</a> page and reinstall packages manually.</p>" msgstr "" -#: src/usr/local/www/head.inc:606 +#: src/usr/local/www/head.inc:622 msgid "This page is currently being managed by a remote machine." msgstr "" -#: src/usr/local/www/head.inc:664 -#: src/usr/local/www/system_usermanager_settings_ldapacpicker.php:132 +#: src/usr/local/www/head.inc:680 msgid "Close" msgstr "" -#: src/usr/local/www/head.inc:665 +#: src/usr/local/www/head.inc:681 msgid "Mark All as Read" msgstr "" @@ -13587,7 +13808,7 @@ msgid "Welcome to %s!\n" msgstr "" #: src/usr/local/www/index.php:218 -msgid "One moment while we start the initial setup wizard." +msgid "One moment while the initial setup wizard starts." msgstr "" #: src/usr/local/www/index.php:219 @@ -13601,644 +13822,640 @@ msgstr "" msgid "To bypass the wizard, click on the %s logo on the initial page." msgstr "" -#: src/usr/local/www/index.php:328 src/usr/local/www/system.php:532 +#: src/usr/local/www/index.php:334 src/usr/local/www/system.php:552 msgid "Available Widgets" msgstr "" -#: src/usr/local/www/index.php:501 -msgid "You have moved one or more widgets but have not yet saved" +#: src/usr/local/www/index.php:513 +msgid "One or more widgets have been moved but have not yet been saved" msgstr "" #: src/usr/local/www/interfaces.php:444 -msgid "You have already applied your settings!" +msgid "The settings have already been applied!" msgstr "" -#: src/usr/local/www/interfaces.php:514 +#: src/usr/local/www/interfaces.php:523 msgid "An interface with the specified description already exists." msgstr "" -#: src/usr/local/www/interfaces.php:523 +#: src/usr/local/www/interfaces.php:532 #, php-format msgid "Sorry, an alias with the name %s already exists." msgstr "" -#: src/usr/local/www/interfaces.php:532 +#: src/usr/local/www/interfaces.php:541 #, php-format msgid "Sorry, an interface group with the name %s already exists." msgstr "" -#: src/usr/local/www/interfaces.php:538 +#: src/usr/local/www/interfaces.php:547 msgid "The interface description cannot contain only numbers." msgstr "" -#: src/usr/local/www/interfaces.php:542 +#: src/usr/local/www/interfaces.php:551 msgid "" "The DHCP Server is active on this interface and it can be used only with a " "static IP configuration. Please disable the DHCP Server service on this " "interface first, then change the interface configuration." msgstr "" -#: src/usr/local/www/interfaces.php:545 +#: src/usr/local/www/interfaces.php:554 msgid "" "The DHCP6 Server is active on this interface and it can be used only with a " "static IPv6 configuration. Please disable the DHCPv6 Server service on this " "interface first, then change the interface configuration." msgstr "" -#: src/usr/local/www/interfaces.php:551 +#: src/usr/local/www/interfaces.php:560 msgid "IPv4 address" msgstr "" -#: src/usr/local/www/interfaces.php:551 src/usr/local/www/interfaces.php:602 +#: src/usr/local/www/interfaces.php:560 src/usr/local/www/interfaces.php:611 msgid "Subnet bit count" msgstr "" -#: src/usr/local/www/interfaces.php:558 +#: src/usr/local/www/interfaces.php:567 msgid "" "This interface is referenced by IPv4 VIPs. Please delete those before " "setting the interface to 'none' configuration." msgstr "" -#: src/usr/local/www/interfaces.php:565 +#: src/usr/local/www/interfaces.php:574 msgid "Modem Port" msgstr "" -#: src/usr/local/www/interfaces.php:565 -#: src/usr/local/www/interfaces_ppps_edit.php:221 +#: src/usr/local/www/interfaces.php:574 +#: src/usr/local/www/interfaces_ppps_edit.php:232 msgid "Phone Number" msgstr "" -#: src/usr/local/www/interfaces.php:571 src/usr/local/www/interfaces.php:574 +#: src/usr/local/www/interfaces.php:580 src/usr/local/www/interfaces.php:583 msgid "PPPoE username" msgstr "" -#: src/usr/local/www/interfaces.php:571 src/usr/local/www/interfaces.php:574 +#: src/usr/local/www/interfaces.php:580 src/usr/local/www/interfaces.php:583 msgid "PPPoE password" msgstr "" -#: src/usr/local/www/interfaces.php:571 src/usr/local/www/interfaces.php:581 -#: src/usr/local/www/interfaces.php:591 src/usr/local/www/interfaces.php:2578 -#: src/usr/local/www/interfaces.php:2714 -#: src/usr/local/www/interfaces_ppps_edit.php:227 +#: src/usr/local/www/interfaces.php:580 src/usr/local/www/interfaces.php:590 +#: src/usr/local/www/interfaces.php:600 src/usr/local/www/interfaces.php:2595 +#: src/usr/local/www/interfaces.php:2726 #: src/usr/local/www/interfaces_ppps_edit.php:238 +#: src/usr/local/www/interfaces_ppps_edit.php:249 msgid "Dial on demand" msgstr "" -#: src/usr/local/www/interfaces.php:571 src/usr/local/www/interfaces.php:581 -#: src/usr/local/www/interfaces.php:591 -#: src/usr/local/www/interfaces_ppps_edit.php:227 +#: src/usr/local/www/interfaces.php:580 src/usr/local/www/interfaces.php:590 +#: src/usr/local/www/interfaces.php:600 #: src/usr/local/www/interfaces_ppps_edit.php:238 +#: src/usr/local/www/interfaces_ppps_edit.php:249 msgid "Idle timeout value" msgstr "" -#: src/usr/local/www/interfaces.php:581 src/usr/local/www/interfaces.php:584 +#: src/usr/local/www/interfaces.php:590 src/usr/local/www/interfaces.php:593 msgid "PPTP username" msgstr "" -#: src/usr/local/www/interfaces.php:581 src/usr/local/www/interfaces.php:584 +#: src/usr/local/www/interfaces.php:590 src/usr/local/www/interfaces.php:593 msgid "PPTP password" msgstr "" -#: src/usr/local/www/interfaces.php:581 src/usr/local/www/interfaces.php:584 +#: src/usr/local/www/interfaces.php:590 src/usr/local/www/interfaces.php:593 msgid "PPTP local IP address" msgstr "" -#: src/usr/local/www/interfaces.php:581 src/usr/local/www/interfaces.php:584 +#: src/usr/local/www/interfaces.php:590 src/usr/local/www/interfaces.php:593 msgid "PPTP subnet" msgstr "" -#: src/usr/local/www/interfaces.php:581 src/usr/local/www/interfaces.php:584 +#: src/usr/local/www/interfaces.php:590 src/usr/local/www/interfaces.php:593 msgid "PPTP remote IP address" msgstr "" -#: src/usr/local/www/interfaces.php:591 src/usr/local/www/interfaces.php:594 +#: src/usr/local/www/interfaces.php:600 src/usr/local/www/interfaces.php:603 msgid "L2TP username" msgstr "" -#: src/usr/local/www/interfaces.php:591 src/usr/local/www/interfaces.php:594 +#: src/usr/local/www/interfaces.php:600 src/usr/local/www/interfaces.php:603 msgid "L2TP password" msgstr "" -#: src/usr/local/www/interfaces.php:591 src/usr/local/www/interfaces.php:594 +#: src/usr/local/www/interfaces.php:600 src/usr/local/www/interfaces.php:603 msgid "L2TP remote IP address" msgstr "" -#: src/usr/local/www/interfaces.php:609 +#: src/usr/local/www/interfaces.php:618 msgid "" "This interface is referenced by IPv6 VIPs. Please delete those before " "setting the interface to 'none' configuration." msgstr "" -#: src/usr/local/www/interfaces.php:616 src/usr/local/www/interfaces.php:635 -#: src/usr/local/www/interfaces.php:646 src/usr/local/www/interfaces.php:652 +#: src/usr/local/www/interfaces.php:625 src/usr/local/www/interfaces.php:644 +#: src/usr/local/www/interfaces.php:655 src/usr/local/www/interfaces.php:661 #, php-format -msgid "You have to reassign the interface to be able to configure as %s." +msgid "The interface must be reassigned to configure as %s." msgstr "" -#: src/usr/local/www/interfaces.php:619 +#: src/usr/local/www/interfaces.php:628 msgid "" "DHCPv6 Prefix Delegation size must be provided when Send IPv6 prefix hint " "flag is checked" msgstr "" -#: src/usr/local/www/interfaces.php:626 -msgid "You can only have one interface configured in 6rd with same prefix." +#: src/usr/local/www/interfaces.php:635 +msgid "Only one interface can be configured within a single 6rd prefix." msgstr "" -#: src/usr/local/www/interfaces.php:632 +#: src/usr/local/www/interfaces.php:641 msgid "6RD Border Gateway must be an IPv4 address." msgstr "" -#: src/usr/local/www/interfaces.php:641 +#: src/usr/local/www/interfaces.php:650 #, php-format -msgid "You can only have one interface configured as 6to4." +msgid "Only one interface can be configured as 6to4." msgstr "" -#: src/usr/local/www/interfaces.php:656 -msgid "You have to select a valid interface to track." +#: src/usr/local/www/interfaces.php:665 +msgid "A valid interface to track must be selected." msgstr "" -#: src/usr/local/www/interfaces.php:660 -msgid "You must enter a valid hexadecimal number for the IPv6 prefix ID." +#: src/usr/local/www/interfaces.php:669 +msgid "A valid hexadecimal number must be entered for the IPv6 prefix ID." msgstr "" -#: src/usr/local/www/interfaces.php:664 -msgid "You specified an IPv6 prefix ID that is out of range." +#: src/usr/local/www/interfaces.php:673 +msgid "The specified IPv6 Prefix ID is out of range." msgstr "" -#: src/usr/local/www/interfaces.php:674 +#: src/usr/local/www/interfaces.php:683 #, php-format msgid "This track6 prefix ID is already being used in %s." msgstr "" -#: src/usr/local/www/interfaces.php:687 +#: src/usr/local/www/interfaces.php:696 msgid "A valid IPv4 address must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:691 +#: src/usr/local/www/interfaces.php:700 #, php-format msgid "IPv4 address %s is being used by or overlaps with:" msgstr "" -#: src/usr/local/www/interfaces.php:701 +#: src/usr/local/www/interfaces.php:710 msgid "This IPv4 address is the network address and cannot be used" msgstr "" -#: src/usr/local/www/interfaces.php:703 +#: src/usr/local/www/interfaces.php:712 msgid "This IPv4 address is the broadcast address and cannot be used" msgstr "" -#: src/usr/local/www/interfaces.php:710 +#: src/usr/local/www/interfaces.php:719 msgid "This IPv4 address conflicts with a Static Route." msgstr "" -#: src/usr/local/www/interfaces.php:719 +#: src/usr/local/www/interfaces.php:728 #: src/usr/local/www/services_dhcpv6_edit.php:160 msgid "A valid IPv6 address must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:722 +#: src/usr/local/www/interfaces.php:731 msgid "IPv6 link local addresses cannot be configured as an interface IP." msgstr "" -#: src/usr/local/www/interfaces.php:726 +#: src/usr/local/www/interfaces.php:735 #, php-format msgid "IPv6 address %s is being used by or overlaps with:" msgstr "" -#: src/usr/local/www/interfaces.php:736 +#: src/usr/local/www/interfaces.php:745 msgid "This IPv6 address conflicts with a Static Route." msgstr "" -#: src/usr/local/www/interfaces.php:744 src/usr/local/www/interfaces.php:747 +#: src/usr/local/www/interfaces.php:753 src/usr/local/www/interfaces.php:756 msgid "A valid subnet bit count must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:750 +#: src/usr/local/www/interfaces.php:759 msgid "A valid alias IP address must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:753 +#: src/usr/local/www/interfaces.php:762 msgid "A valid alias subnet bit count must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:756 +#: src/usr/local/www/interfaces.php:765 msgid "A valid alias IP address must be specified to reject DHCP Leases from." msgstr "" -#: src/usr/local/www/interfaces.php:771 +#: src/usr/local/www/interfaces.php:780 #: src/usr/local/www/system_routes_edit.php:127 msgid "A valid gateway must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:775 +#: src/usr/local/www/interfaces.php:784 msgid "The service name contains invalid characters." msgstr "" -#: src/usr/local/www/interfaces.php:778 src/usr/local/www/interfaces.php:801 -#: src/usr/local/www/interfaces_ppps_edit.php:268 +#: src/usr/local/www/interfaces.php:787 src/usr/local/www/interfaces.php:810 +#: src/usr/local/www/interfaces_ppps_edit.php:279 msgid "The idle timeout value must be an integer." msgstr "" -#: src/usr/local/www/interfaces.php:782 -#: src/usr/local/www/interfaces_ppps_edit.php:272 +#: src/usr/local/www/interfaces.php:791 +#: src/usr/local/www/interfaces_ppps_edit.php:283 msgid "A valid PPPoE reset hour must be specified (0-23)." msgstr "" -#: src/usr/local/www/interfaces.php:786 -#: src/usr/local/www/interfaces_ppps_edit.php:276 +#: src/usr/local/www/interfaces.php:795 +#: src/usr/local/www/interfaces_ppps_edit.php:287 msgid "A valid PPPoE reset minute must be specified (0-59)." msgstr "" -#: src/usr/local/www/interfaces.php:789 -#: src/usr/local/www/interfaces_ppps_edit.php:279 +#: src/usr/local/www/interfaces.php:798 +#: src/usr/local/www/interfaces_ppps_edit.php:290 msgid "A valid PPPoE reset date must be specified (mm/dd/yyyy)." msgstr "" -#: src/usr/local/www/interfaces.php:792 +#: src/usr/local/www/interfaces.php:801 msgid "A valid PPTP local IP address must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:795 +#: src/usr/local/www/interfaces.php:804 msgid "A valid PPTP subnet bit count must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:798 +#: src/usr/local/www/interfaces.php:807 msgid "A valid PPTP remote IP address must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:804 +#: src/usr/local/www/interfaces.php:813 #: src/usr/local/www/services_dhcp_edit.php:214 #: src/usr/local/www/services_wol.php:112 #: src/usr/local/www/services_wol_edit.php:114 msgid "A valid MAC address must be specified." msgstr "" -#: src/usr/local/www/interfaces.php:819 +#: src/usr/local/www/interfaces.php:828 #, php-format msgid "The MTU must be between %d and %d bytes." msgstr "" -#: src/usr/local/www/interfaces.php:835 +#: src/usr/local/www/interfaces.php:844 msgid "The MTU of a VLAN cannot be greater than that of its parent interface." msgstr "" -#: src/usr/local/www/interfaces.php:851 +#: src/usr/local/www/interfaces.php:860 #, php-format msgid "Interface %s (VLAN) has MTU set to a larger value." msgstr "" -#: src/usr/local/www/interfaces.php:858 +#: src/usr/local/www/interfaces.php:867 msgid "The MSS must be an integer between 576 and 65535 bytes." msgstr "" -#: src/usr/local/www/interfaces.php:867 src/usr/local/www/interfaces.php:2933 -#: src/usr/local/www/status_interfaces.php:172 +#: src/usr/local/www/interfaces.php:876 src/usr/local/www/interfaces.php:2940 +#: src/usr/local/www/status_interfaces.php:175 msgid "SSID" msgstr "" -#: src/usr/local/www/interfaces.php:870 +#: src/usr/local/www/interfaces.php:879 msgid "A specific channel, not auto, must be selected for Access Point mode." msgstr "" -#: src/usr/local/www/interfaces.php:875 +#: src/usr/local/www/interfaces.php:884 msgid "802.11n standards require enabling WME." msgstr "" -#: src/usr/local/www/interfaces.php:881 +#: src/usr/local/www/interfaces.php:890 msgid "Key Rotation must be an integer between 1 and 9999." msgstr "" -#: src/usr/local/www/interfaces.php:884 +#: src/usr/local/www/interfaces.php:893 msgid "Master Key Regeneration must be an integer between 1 and 9999." msgstr "" -#: src/usr/local/www/interfaces.php:888 +#: src/usr/local/www/interfaces.php:897 msgid "Master Key Regeneration must be greater than Key Rotation." msgstr "" -#: src/usr/local/www/interfaces.php:893 +#: src/usr/local/www/interfaces.php:902 msgid "802.1X Authentication Server must be an IP or hostname." msgstr "" -#: src/usr/local/www/interfaces.php:898 +#: src/usr/local/www/interfaces.php:907 msgid "Secondary 802.1X Authentication Server must be an IP or hostname." msgstr "" -#: src/usr/local/www/interfaces.php:903 +#: src/usr/local/www/interfaces.php:912 msgid "" "802.1X Authentication Server Port must be a valid port number (1-65535)." msgstr "" -#: src/usr/local/www/interfaces.php:908 +#: src/usr/local/www/interfaces.php:917 msgid "" "Secondary 802.1X Authentication Server Port must be a valid port number " "(1-65535)." msgstr "" -#: src/usr/local/www/interfaces.php:913 +#: src/usr/local/www/interfaces.php:922 msgid "Invalid channel specified." msgstr "" -#: src/usr/local/www/interfaces.php:916 +#: src/usr/local/www/interfaces.php:925 msgid "Channel must be between 0-255." msgstr "" -#: src/usr/local/www/interfaces.php:921 +#: src/usr/local/www/interfaces.php:930 msgid "Distance must be an integer." msgstr "" -#: src/usr/local/www/interfaces.php:925 +#: src/usr/local/www/interfaces.php:934 msgid "Channel selected is not valid for 802.11a or 802.11na." msgstr "" -#: src/usr/local/www/interfaces.php:930 +#: src/usr/local/www/interfaces.php:939 msgid "Channel selected is not valid for 802.11b or 802.11g." msgstr "" -#: src/usr/local/www/interfaces.php:934 +#: src/usr/local/www/interfaces.php:943 msgid "Invalid option chosen for OFDM Protection Mode" msgstr "" -#: src/usr/local/www/interfaces.php:940 +#: src/usr/local/www/interfaces.php:949 msgid "The WPA passphrase must be between 8 and 63 characters long." msgstr "" -#: src/usr/local/www/interfaces.php:946 +#: src/usr/local/www/interfaces.php:955 msgid "A WPA Passphrase must be specified when WPA PSK is enabled." msgstr "" -#: src/usr/local/www/interfaces.php:952 +#: src/usr/local/www/interfaces.php:961 msgid "PPP Password and confirmed password must match!" msgstr "" -#: src/usr/local/www/interfaces.php:956 +#: src/usr/local/www/interfaces.php:965 msgid "PPPoE Password and confirmed password must match!" msgstr "" -#: src/usr/local/www/interfaces.php:960 +#: src/usr/local/www/interfaces.php:969 msgid "PTPP Password and confirmed password must match!" msgstr "" -#: src/usr/local/www/interfaces.php:1614 +#: src/usr/local/www/interfaces.php:1623 #, php-format msgid "" -"Unable to change mode to %s.\t You may already have the maximum number of " -"wireless clones supported in this mode." +"Unable to change mode to %s. The maximum number of wireless clones supported " +"in this mode may have been reached." msgstr "" -#: src/usr/local/www/interfaces.php:1640 +#: src/usr/local/www/interfaces.php:1649 msgid "Static IPv4" msgstr "" -#: src/usr/local/www/interfaces.php:1640 src/usr/local/www/status_logs.php:76 +#: src/usr/local/www/interfaces.php:1649 src/usr/local/www/status_logs.php:76 #: src/usr/local/www/status_logs_common.inc:123 #: src/usr/local/www/status_logs_settings.php:235 msgid "DHCP" msgstr "" -#: src/usr/local/www/interfaces.php:1640 -#: src/usr/local/www/interfaces_ppps_edit.php:466 +#: src/usr/local/www/interfaces.php:1649 +#: src/usr/local/www/interfaces_ppps_edit.php:476 #: src/usr/local/www/status_logs.php:82 #: src/usr/local/www/status_logs_common.inc:126 #: src/usr/local/www/status_logs_settings.php:238 msgid "PPP" msgstr "" -#: src/usr/local/www/interfaces.php:1640 -#: src/usr/local/www/interfaces_ppps_edit.php:466 +#: src/usr/local/www/interfaces.php:1649 +#: src/usr/local/www/interfaces_ppps_edit.php:476 msgid "PPPoE" msgstr "" -#: src/usr/local/www/interfaces.php:1640 -#: src/usr/local/www/interfaces_ppps_edit.php:466 +#: src/usr/local/www/interfaces.php:1649 +#: src/usr/local/www/interfaces_ppps_edit.php:476 msgid "PPTP" msgstr "" -#: src/usr/local/www/interfaces.php:1641 +#: src/usr/local/www/interfaces.php:1650 msgid "Static IPv6" msgstr "" -#: src/usr/local/www/interfaces.php:1641 +#: src/usr/local/www/interfaces.php:1650 msgid "DHCP6" msgstr "" -#: src/usr/local/www/interfaces.php:1641 +#: src/usr/local/www/interfaces.php:1650 msgid "SLAAC" msgstr "" -#: src/usr/local/www/interfaces.php:1641 +#: src/usr/local/www/interfaces.php:1650 msgid "6rd Tunnel" msgstr "" -#: src/usr/local/www/interfaces.php:1641 +#: src/usr/local/www/interfaces.php:1650 msgid "6to4 Tunnel" msgstr "" -#: src/usr/local/www/interfaces.php:1641 +#: src/usr/local/www/interfaces.php:1650 msgid "Track Interface" msgstr "" -#: src/usr/local/www/interfaces.php:1651 +#: src/usr/local/www/interfaces.php:1660 msgid "Default (no preference, typically autoselect)" msgstr "" -#: src/usr/local/www/interfaces.php:1652 +#: src/usr/local/www/interfaces.php:1661 msgid "------- Media Supported by this interface -------" msgstr "" -#: src/usr/local/www/interfaces.php:1695 +#: src/usr/local/www/interfaces.php:1704 #, php-format msgid "The %s configuration has been changed." msgstr "" -#: src/usr/local/www/interfaces.php:1697 +#: src/usr/local/www/interfaces.php:1705 +msgid "The changes must be applied to take effect." +msgstr "" + +#: src/usr/local/www/interfaces.php:1706 msgid "Don't forget to adjust the DHCP Server range if needed after applying." msgstr "" -#: src/usr/local/www/interfaces.php:1710 +#: src/usr/local/www/interfaces.php:1716 msgid "General Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:1725 +#: src/usr/local/www/interfaces.php:1731 msgid "Enter a description (name) for the interface here." msgstr "" -#: src/usr/local/www/interfaces.php:1729 +#: src/usr/local/www/interfaces.php:1735 msgid "IPv4 Configuration Type" msgstr "" -#: src/usr/local/www/interfaces.php:1736 +#: src/usr/local/www/interfaces.php:1742 msgid "IPv6 Configuration Type" msgstr "" -#: src/usr/local/www/interfaces.php:1743 -#: src/usr/local/www/services_captiveportal_mac_edit.php:241 -#: src/usr/local/www/services_captiveportal_mac_edit.php:254 +#: src/usr/local/www/interfaces.php:1749 +#: src/usr/local/www/services_captiveportal_mac_edit.php:242 +#: src/usr/local/www/services_captiveportal_mac_edit.php:257 #: src/usr/local/www/services_dhcp_edit.php:429 -#: src/usr/local/www/status_interfaces.php:144 +#: src/usr/local/www/status_interfaces.php:147 msgid "MAC Address" msgstr "" -#: src/usr/local/www/interfaces.php:1751 -#: src/usr/local/www/services_captiveportal_mac_edit.php:249 +#: src/usr/local/www/interfaces.php:1757 +#: src/usr/local/www/services_captiveportal_mac_edit.php:250 #: src/usr/local/www/services_dhcp_edit.php:437 msgid "Copy My MAC" msgstr "" -#: src/usr/local/www/interfaces.php:1756 -#: src/usr/local/www/services_dhcp_edit.php:442 +#: src/usr/local/www/interfaces.php:1764 +#: src/usr/local/www/services_dhcp_edit.php:444 msgid "MAC controls" msgstr "" -#: src/usr/local/www/interfaces.php:1759 +#: src/usr/local/www/interfaces.php:1767 msgid "" "This field can be used to modify (\"spoof\") the MAC address of this " "interface.<br />Enter a MAC address in the following format: xx:xx:xx:xx:xx:" -"xx or leave blank" +"xx or leave blank." msgstr "" -#: src/usr/local/www/interfaces.php:1765 -#: src/usr/local/www/interfaces_ppps_edit.php:915 -#: src/usr/local/www/status_interfaces.php:167 +#: src/usr/local/www/interfaces.php:1773 +#: src/usr/local/www/interfaces_ppps_edit.php:927 +#: src/usr/local/www/status_interfaces.php:170 msgid "MTU" msgstr "" -#: src/usr/local/www/interfaces.php:1768 +#: src/usr/local/www/interfaces.php:1776 msgid "" -"If you leave this field blank, the adapter's default MTU will be used. This " -"is typically 1500 bytes but can vary in some circumstances." +"If this field is blank, the adapter's default MTU will be used. This is " +"typically 1500 bytes but can vary in some circumstances." msgstr "" -#: src/usr/local/www/interfaces.php:1773 +#: src/usr/local/www/interfaces.php:1781 msgid "MSS" msgstr "" -#: src/usr/local/www/interfaces.php:1776 +#: src/usr/local/www/interfaces.php:1784 msgid "" -"If you enter a value in this field, then MSS clamping for TCP connections to " -"the value entered above minus 40 (TCP/IP header size) will be in effect." +"If a value is entered in this field, then MSS clamping for TCP connections " +"to the value entered above minus 40 (TCP/IP header size) will be in effect." msgstr "" -#: src/usr/local/www/interfaces.php:1782 +#: src/usr/local/www/interfaces.php:1790 msgid "Speed and Duplex" msgstr "" -#: src/usr/local/www/interfaces.php:1785 +#: src/usr/local/www/interfaces.php:1793 msgid "" -"Here you can explicitly set speed and duplex mode for this interface.<br /" -">WARNING: You MUST leave this set to autoselect (automatically negotiate " -"speed) unless the port this interface connects to has its speed and duplex " -"forced." +"Explicitly set speed and duplex mode for this interface.<br />WARNING: MUST " +"be set to autoselect (automatically negotiate speed) unless the port this " +"interface connects to has its speed and duplex forced." msgstr "" -#: src/usr/local/www/interfaces.php:1791 +#: src/usr/local/www/interfaces.php:1799 msgid "Static IPv4 Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:1796 -#: src/usr/local/www/status_interfaces.php:149 +#: src/usr/local/www/interfaces.php:1804 +#: src/usr/local/www/status_interfaces.php:152 msgid "IPv4 Address" msgstr "" -#: src/usr/local/www/interfaces.php:1800 +#: src/usr/local/www/interfaces.php:1808 msgid "IPv4 Upstream gateway" msgstr "" -#: src/usr/local/www/interfaces.php:1804 +#: src/usr/local/www/interfaces.php:1812 msgid "IPv4 Upstream Gateway" msgstr "" -#: src/usr/local/www/interfaces.php:1811 src/usr/local/www/interfaces.php:1842 +#: src/usr/local/www/interfaces.php:1819 src/usr/local/www/interfaces.php:1852 msgid "Add a new gateway" msgstr "" -#: src/usr/local/www/interfaces.php:1816 -msgid "You can manage gateways by " +#: src/usr/local/www/interfaces.php:1826 +msgid "Gateways can be managed by " msgstr "" -#: src/usr/local/www/interfaces.php:1816 +#: src/usr/local/www/interfaces.php:1826 msgid " clicking here" msgstr "" -#: src/usr/local/www/interfaces.php:1814 +#: src/usr/local/www/interfaces.php:1824 src/usr/local/www/interfaces.php:1857 msgid "" "If this interface is an Internet connection, select an existing Gateway from " "the list or add a new one using the \"Add\" button.<br />On local LANs the " -"upstream gateway should be \"none\"." +"upstream gateway should be \"none\". " msgstr "" -#: src/usr/local/www/interfaces.php:1822 +#: src/usr/local/www/interfaces.php:1832 msgid "Static IPv6 Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:1831 +#: src/usr/local/www/interfaces.php:1841 msgid "IPv6 Upstream gateway" msgstr "" -#: src/usr/local/www/interfaces.php:1835 -msgid "IPv6 Upstream Gateway" -msgstr "" - #: src/usr/local/www/interfaces.php:1845 -msgid "" -"If this interface is an Internet connection, select an existing Gateway from " -"the list or add a new one using the \"Add\" button.<br />On local LANs the " -"upstream gateway should be \"none\". " +msgid "IPv6 Upstream Gateway" msgstr "" -#: src/usr/local/www/interfaces.php:1852 +#: src/usr/local/www/interfaces.php:1864 msgid "New IPv6 Gateway" msgstr "" -#: src/usr/local/www/interfaces.php:1863 src/usr/local/www/interfaces.php:3175 +#: src/usr/local/www/interfaces.php:1875 src/usr/local/www/interfaces.php:3182 #: src/usr/local/www/system_gateways_edit.php:641 msgid "Gateway name" msgstr "" -#: src/usr/local/www/interfaces.php:1870 -#: src/usr/local/www/status_interfaces.php:155 +#: src/usr/local/www/interfaces.php:1882 +#: src/usr/local/www/status_interfaces.php:158 msgid "Gateway IPv6" msgstr "" -#: src/usr/local/www/interfaces.php:1903 +#: src/usr/local/www/interfaces.php:1919 msgid "DHCP Client Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:1906 src/usr/local/www/interfaces.php:2089 +#: src/usr/local/www/interfaces.php:1922 src/usr/local/www/interfaces.php:2105 msgid "Options" msgstr "" -#: src/usr/local/www/interfaces.php:1913 +#: src/usr/local/www/interfaces.php:1929 msgid "Use advanced DHCP configuration options." msgstr "" -#: src/usr/local/www/interfaces.php:1920 src/usr/local/www/interfaces.php:2103 +#: src/usr/local/www/interfaces.php:1936 src/usr/local/www/interfaces.php:2119 msgid "Override the configuration from this file." msgstr "" -#: src/usr/local/www/interfaces.php:1929 +#: src/usr/local/www/interfaces.php:1945 msgid "" "The value in this field is sent as the DHCP client identifier and hostname " "when requesting a DHCP lease. Some ISPs may require this (for client " "identification)." msgstr "" -#: src/usr/local/www/interfaces.php:1933 +#: src/usr/local/www/interfaces.php:1949 msgid "Alias IPv4 address" msgstr "" -#: src/usr/local/www/interfaces.php:1935 +#: src/usr/local/www/interfaces.php:1951 msgid "" "The value in this field is used as a fixed alias IPv4 address by the DHCP " "client." msgstr "" -#: src/usr/local/www/interfaces.php:1939 +#: src/usr/local/www/interfaces.php:1955 msgid "Reject leases from" msgstr "" -#: src/usr/local/www/interfaces.php:1942 +#: src/usr/local/www/interfaces.php:1958 msgid "" "If there is a certain upstream DHCP server that should be ignored, place the " "IP address or subnet of the DHCP server to be ignored here. This is useful " @@ -14246,102 +14463,102 @@ msgid "" "upstream sync." msgstr "" -#: src/usr/local/www/interfaces.php:1945 +#: src/usr/local/www/interfaces.php:1961 msgid "Protocol timing" msgstr "" -#: src/usr/local/www/interfaces.php:1953 +#: src/usr/local/www/interfaces.php:1969 #: src/usr/local/www/load_balancer_setting.php:151 msgid "Timeout" msgstr "" -#: src/usr/local/www/interfaces.php:1960 -#: src/usr/local/www/load_balancer_pool_edit.php:378 +#: src/usr/local/www/interfaces.php:1976 +#: src/usr/local/www/load_balancer_pool_edit.php:370 msgid "Retry" msgstr "" -#: src/usr/local/www/interfaces.php:1968 +#: src/usr/local/www/interfaces.php:1984 msgid "Select timeout" msgstr "" -#: src/usr/local/www/interfaces.php:1982 +#: src/usr/local/www/interfaces.php:1998 msgid "Backoff cutoff" msgstr "" -#: src/usr/local/www/interfaces.php:1989 +#: src/usr/local/www/interfaces.php:2005 msgid "Initial interval" msgstr "" -#: src/usr/local/www/interfaces.php:1993 +#: src/usr/local/www/interfaces.php:2009 msgid "Presets" msgstr "" -#: src/usr/local/www/interfaces.php:2028 +#: src/usr/local/www/interfaces.php:2044 msgid "" "The values in these fields are DHCP protocol timings used when requesting a " "lease.<br /><a target=\"_blank\" href=\"https://www.freebsd.org/cgi/man.cgi?" "query=dhclient.conf&sektion=5#PROTOCOL_TIMING\">See here more information</a>" msgstr "" -#: src/usr/local/www/interfaces.php:2035 src/usr/local/www/interfaces.php:2144 +#: src/usr/local/www/interfaces.php:2051 src/usr/local/www/interfaces.php:2160 msgid "Configuration File Override" msgstr "" -#: src/usr/local/www/interfaces.php:2045 +#: src/usr/local/www/interfaces.php:2061 msgid "Lease Requirements and Requests" msgstr "" -#: src/usr/local/www/interfaces.php:2050 src/usr/local/www/interfaces.php:2169 +#: src/usr/local/www/interfaces.php:2066 src/usr/local/www/interfaces.php:2185 msgid "Send options" msgstr "" -#: src/usr/local/www/interfaces.php:2060 +#: src/usr/local/www/interfaces.php:2076 msgid "Request options" msgstr "" -#: src/usr/local/www/interfaces.php:2068 +#: src/usr/local/www/interfaces.php:2084 msgid "Require options" msgstr "" -#: src/usr/local/www/interfaces.php:2075 +#: src/usr/local/www/interfaces.php:2091 msgid "Option modifiers" msgstr "" -#: src/usr/local/www/interfaces.php:2086 +#: src/usr/local/www/interfaces.php:2102 msgid "DHCP6 Client Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:2096 +#: src/usr/local/www/interfaces.php:2112 msgid "Use advanced DHCPv6 configuration options." msgstr "" -#: src/usr/local/www/interfaces.php:2109 +#: src/usr/local/www/interfaces.php:2125 msgid "Use IPv4 connectivity as parent interface" msgstr "" -#: src/usr/local/www/interfaces.php:2116 +#: src/usr/local/www/interfaces.php:2132 msgid "Request only an IPv6 prefix" msgstr "" -#: src/usr/local/www/interfaces.php:2123 +#: src/usr/local/www/interfaces.php:2139 msgid "DHCPv6 Prefix Delegation size" msgstr "" -#: src/usr/local/www/interfaces.php:2126 +#: src/usr/local/www/interfaces.php:2142 msgid "" "The value in this field is the delegated prefix length provided by the " "DHCPv6 server. Normally specified by the ISP." msgstr "" -#: src/usr/local/www/interfaces.php:2130 +#: src/usr/local/www/interfaces.php:2146 msgid "Send IPv6 prefix hint" msgstr "" -#: src/usr/local/www/interfaces.php:2137 +#: src/usr/local/www/interfaces.php:2153 msgid "Debug" msgstr "" -#: src/usr/local/www/interfaces.php:2147 +#: src/usr/local/www/interfaces.php:2163 msgid "" "The value in this field is the full absolute path to a DHCP client " "configuration file.\t [/[dirname/[.../]]filename[.ext]]<br />Value " @@ -14351,382 +14568,391 @@ msgid "" "ISPs may require certain options be or not be sent." msgstr "" -#: src/usr/local/www/interfaces.php:2156 +#: src/usr/local/www/interfaces.php:2172 msgid "Advanced DHCP6 Client Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:2161 +#: src/usr/local/www/interfaces.php:2177 msgid "Information only" msgstr "" -#: src/usr/local/www/interfaces.php:2165 +#: src/usr/local/www/interfaces.php:2181 msgid "Only exchange informational configuration parameters with servers." msgstr "" -#: src/usr/local/www/interfaces.php:2179 +#: src/usr/local/www/interfaces.php:2195 msgid "Request Options" msgstr "" -#: src/usr/local/www/interfaces.php:2187 +#: src/usr/local/www/interfaces.php:2203 msgid "Scripts" msgstr "" -#: src/usr/local/www/interfaces.php:2193 +#: src/usr/local/www/interfaces.php:2209 msgid "Identity Association Statement" msgstr "" -#: src/usr/local/www/interfaces.php:2272 +#: src/usr/local/www/interfaces.php:2288 msgid "Prefix interface statement" msgstr "" -#: src/usr/local/www/interfaces.php:2290 +#: src/usr/local/www/interfaces.php:2306 msgid "Authentication statement" msgstr "" -#: src/usr/local/www/interfaces.php:2322 +#: src/usr/local/www/interfaces.php:2338 msgid "Keyinfo statement" msgstr "" -#: src/usr/local/www/interfaces.php:2363 +#: src/usr/local/www/interfaces.php:2379 msgid "" "<a target=\"_blank\" href=\"https://www.freebsd.org/cgi/man.cgi?query=dhcp6c." "conf&sektion=5&apropos=0&manpath=FreeBSD+10.1-RELEASE+and" "+Ports#Interface_statement\">See here more information</a>" msgstr "" -#: src/usr/local/www/interfaces.php:2369 +#: src/usr/local/www/interfaces.php:2385 msgid "6RD Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:2374 +#: src/usr/local/www/interfaces.php:2390 msgid "6RD Prefix" msgstr "" -#: src/usr/local/www/interfaces.php:2381 +#: src/usr/local/www/interfaces.php:2397 msgid "6RD Border relay" msgstr "" -#: src/usr/local/www/interfaces.php:2388 +#: src/usr/local/www/interfaces.php:2404 msgid "6RD IPv4 Prefix length" msgstr "" -#: src/usr/local/www/interfaces.php:2391 +#: src/usr/local/www/interfaces.php:2407 msgid "" -"6RD IPv4 prefix length. Normally specified by the ISP. A value of 0 means we " +"6RD IPv4 prefix length. Normally specified by the ISP. A value of 0 means " "embed the entire IPv4 address in the 6RD prefix." msgstr "" -#: src/usr/local/www/interfaces.php:2396 +#: src/usr/local/www/interfaces.php:2412 msgid "Track IPv6 Interface" msgstr "" -#: src/usr/local/www/interfaces.php:2438 +#: src/usr/local/www/interfaces.php:2454 msgid "IPv6 Interface" msgstr "" -#: src/usr/local/www/interfaces.php:2441 -msgid "selects the dynamic IPv6 WAN interface to track for configuration" +#: src/usr/local/www/interfaces.php:2457 +msgid "Selects the dynamic IPv6 WAN interface to track for configuration." msgstr "" -#: src/usr/local/www/interfaces.php:2449 +#: src/usr/local/www/interfaces.php:2465 msgid "IPv6 Prefix ID" msgstr "" -#: src/usr/local/www/interfaces.php:2452 +#: src/usr/local/www/interfaces.php:2468 msgid "" "<span id=\"track6-prefix-id-range\"></span>The value in this field is the " "(Delegated) IPv6 prefix ID. This determines the configurable network ID " "based on the dynamic IPv6 connection. The default value is 0." msgstr "" -#: src/usr/local/www/interfaces.php:2465 -#: src/usr/local/www/interfaces_ppps_edit.php:574 +#: src/usr/local/www/interfaces.php:2481 +#: src/usr/local/www/interfaces_ppps_edit.php:584 msgid "PPP Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:2470 src/usr/local/www/interfaces.php:2904 -#: src/usr/local/www/interfaces_ppps_edit.php:602 +#: src/usr/local/www/interfaces.php:2486 src/usr/local/www/interfaces.php:2911 +#: src/usr/local/www/interfaces_ppps_edit.php:612 msgid "Country" msgstr "" -#: src/usr/local/www/interfaces.php:2477 -#: src/usr/local/www/interfaces_ppps_edit.php:609 +#: src/usr/local/www/interfaces.php:2493 +#: src/usr/local/www/interfaces_ppps_edit.php:619 msgid "Provider" msgstr "" -#: src/usr/local/www/interfaces.php:2484 -#: src/usr/local/www/interfaces_ppps_edit.php:616 +#: src/usr/local/www/interfaces.php:2500 +#: src/usr/local/www/interfaces_ppps_edit.php:626 msgid "Plan" msgstr "" -#: src/usr/local/www/interfaces.php:2487 -#: src/usr/local/www/interfaces_ppps_edit.php:619 -msgid "Select to fill in data for your service provider." +#: src/usr/local/www/interfaces.php:2503 +#: src/usr/local/www/interfaces_ppps_edit.php:629 +msgid "Select to fill in service provider data." msgstr "" -#: src/usr/local/www/interfaces.php:2505 -#: src/usr/local/www/interfaces_ppps_edit.php:665 +#: src/usr/local/www/interfaces.php:2521 +#: src/usr/local/www/interfaces_ppps_edit.php:675 msgid "Phone number" msgstr "" -#: src/usr/local/www/interfaces.php:2508 -#: src/usr/local/www/interfaces_ppps_edit.php:668 -msgid "Typically *99# for GSM networks and #777 for CDMA networks" +#: src/usr/local/www/interfaces.php:2524 +msgid "Typically *99# for GSM networks and #777 for CDMA networks." msgstr "" -#: src/usr/local/www/interfaces.php:2512 +#: src/usr/local/www/interfaces.php:2528 msgid "Access Point Name" msgstr "" -#: src/usr/local/www/interfaces.php:2538 +#: src/usr/local/www/interfaces.php:2554 msgid "Modem port" msgstr "" -#: src/usr/local/www/interfaces.php:2545 +#: src/usr/local/www/interfaces.php:2561 msgid "Advanced PPP" msgstr "" -#: src/usr/local/www/interfaces.php:2547 -msgid "Create a new PPP configuration" +#: src/usr/local/www/interfaces.php:2564 +msgid "Create a new PPP configuration." msgstr "" -#: src/usr/local/www/interfaces.php:2552 +#: src/usr/local/www/interfaces.php:2569 msgid "PPPoE Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:2571 -#: src/usr/local/www/interfaces_ppps_edit.php:721 +#: src/usr/local/www/interfaces.php:2588 +#: src/usr/local/www/interfaces_ppps_edit.php:731 msgid "Service name" msgstr "" -#: src/usr/local/www/interfaces.php:2574 -msgid "This field can usually be left empty" +#: src/usr/local/www/interfaces.php:2591 +msgid "This field can usually be left empty." msgstr "" -#: src/usr/local/www/interfaces.php:2586 +#: src/usr/local/www/interfaces.php:2603 msgid "Idle timeout" msgstr "" -#: src/usr/local/www/interfaces.php:2590 src/usr/local/www/interfaces.php:2727 +#: src/usr/local/www/interfaces.php:2607 src/usr/local/www/interfaces.php:2739 msgid "" "If no qualifying outgoing packets are transmitted for the specified number " "of seconds, the connection is brought down. An idle timeout of zero disables " "this feature." msgstr "" -#: src/usr/local/www/interfaces.php:2597 -#: src/usr/local/www/interfaces_ppps_edit.php:750 +#: src/usr/local/www/interfaces.php:2614 +#: src/usr/local/www/interfaces_ppps_edit.php:760 msgid "Pre-set" msgstr "" -#: src/usr/local/www/interfaces.php:2595 +#: src/usr/local/www/interfaces.php:2612 msgid "Periodic reset" msgstr "" -#: src/usr/local/www/interfaces.php:2598 -#: src/usr/local/www/interfaces_ppps_edit.php:752 -msgid "Select a reset timing type" +#: src/usr/local/www/interfaces.php:2615 +msgid "Select a reset timing type." msgstr "" -#: src/usr/local/www/interfaces.php:2600 +#: src/usr/local/www/interfaces.php:2617 msgid "Custom reset" msgstr "" -#: src/usr/local/www/interfaces.php:2609 +#: src/usr/local/www/interfaces.php:2626 msgid "Hour (0-23)" msgstr "" -#: src/usr/local/www/interfaces.php:2617 +#: src/usr/local/www/interfaces.php:2634 msgid "Minutes (0-59)" msgstr "" -#: src/usr/local/www/interfaces.php:2625 +#: src/usr/local/www/interfaces.php:2642 msgid "Specific date (mm/dd/yyyy)" msgstr "" -#: src/usr/local/www/interfaces.php:2627 +#: src/usr/local/www/interfaces.php:2644 msgid "" -"If you leave the date field empty, the reset will be executed each day at " -"the time you specified using the minutes and hour field" +"Leave the date field empty, for the reset to be executed each day at the " +"time specified by the minutes and hour fields" msgstr "" -#: src/usr/local/www/interfaces.php:2631 +#: src/usr/local/www/interfaces.php:2648 msgid "cron based reset" msgstr "" -#: src/usr/local/www/interfaces.php:2670 src/usr/local/www/interfaces.php:2675 -#: src/usr/local/www/interfaces.php:2738 src/usr/local/www/interfaces.php:2743 +#: src/usr/local/www/interfaces.php:2687 src/usr/local/www/interfaces.php:2750 msgid "Advanced and MLPPP" msgstr "" -#: src/usr/local/www/interfaces.php:2683 +#: src/usr/local/www/interfaces.php:2690 +msgid "" +"Click for additional PPPoE configuration options. Save first if changes have " +"been made." +msgstr "" + +#: src/usr/local/www/interfaces.php:2695 msgid "PPTP/L2TP Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:2702 -#: src/usr/local/www/interfaces_ppps_edit.php:238 -#: src/usr/local/www/interfaces_ppps_edit.php:241 +#: src/usr/local/www/interfaces.php:2714 +#: src/usr/local/www/interfaces_ppps_edit.php:249 +#: src/usr/local/www/interfaces_ppps_edit.php:252 msgid "Local IP address" msgstr "" -#: src/usr/local/www/interfaces.php:2708 -#: src/usr/local/www/interfaces_ppps_edit.php:238 -#: src/usr/local/www/interfaces_ppps_edit.php:241 +#: src/usr/local/www/interfaces.php:2720 +#: src/usr/local/www/interfaces_ppps_edit.php:249 +#: src/usr/local/www/interfaces_ppps_edit.php:252 msgid "Remote IP address" msgstr "" -#: src/usr/local/www/interfaces.php:2718 +#: src/usr/local/www/interfaces.php:2730 msgid "" "This option causes the interface to operate in dial-on-demand mode, allowing " -"you to have a virtual full time connection. The interface is configured, but " +"it to be a virtual full time connection. The interface is configured, but " "the actual connection of the link is delayed until qualifying outgoing " "traffic is detected." msgstr "" -#: src/usr/local/www/interfaces.php:2723 +#: src/usr/local/www/interfaces.php:2735 msgid "Idle timeout (seconds)" msgstr "" -#: src/usr/local/www/interfaces.php:2732 +#: src/usr/local/www/interfaces.php:2743 msgid "There are additional Local and Remote IP addresses defined for MLPPP." msgstr "" #: src/usr/local/www/interfaces.php:2753 msgid "" +"Click for additional PPTP and L2TP configuration options. Save first if " +"changes have been made." +msgstr "" + +#: src/usr/local/www/interfaces.php:2760 +msgid "" "Common Wireless Configuration - Settings apply to all wireless networks on " msgstr "" -#: src/usr/local/www/interfaces.php:2757 +#: src/usr/local/www/interfaces.php:2764 msgid "Persist common settings" msgstr "" -#: src/usr/local/www/interfaces.php:2777 +#: src/usr/local/www/interfaces.php:2784 msgid "Standard" msgstr "" -#: src/usr/local/www/interfaces.php:2787 src/usr/local/www/interfaces.php:2837 +#: src/usr/local/www/interfaces.php:2794 src/usr/local/www/interfaces.php:2844 msgid "Off" msgstr "" -#: src/usr/local/www/interfaces.php:2787 +#: src/usr/local/www/interfaces.php:2794 msgid "CTS to self" msgstr "" -#: src/usr/local/www/interfaces.php:2787 +#: src/usr/local/www/interfaces.php:2794 msgid "RTS and CTS" msgstr "" -#: src/usr/local/www/interfaces.php:2785 +#: src/usr/local/www/interfaces.php:2792 msgid "802.11g OFDM Protection Mode" msgstr "" -#: src/usr/local/www/interfaces.php:2788 +#: src/usr/local/www/interfaces.php:2795 msgid "" "For IEEE 802.11g, use the specified technique for protecting OFDM frames in " "a mixed 11b/11g network." msgstr "" -#: src/usr/local/www/interfaces.php:2798 src/usr/local/www/interfaces.php:2846 -#: src/usr/local/www/interfaces.php:2855 -#: src/usr/local/www/vpn_ipsec_phase1.php:701 -#: src/usr/local/www/vpn_ipsec_phase1.php:886 +#: src/usr/local/www/interfaces.php:2805 src/usr/local/www/interfaces.php:2853 +#: src/usr/local/www/interfaces.php:2862 +#: src/usr/local/www/vpn_ipsec_phase1.php:699 +#: src/usr/local/www/vpn_ipsec_phase1.php:884 #: src/usr/local/www/vpn_ipsec_phase2.php:664 msgid "Auto" msgstr "" -#: src/usr/local/www/interfaces.php:2822 -#: src/usr/local/www/status_interfaces.php:171 +#: src/usr/local/www/interfaces.php:2829 +#: src/usr/local/www/status_interfaces.php:174 msgid "Channel" msgstr "" -#: src/usr/local/www/interfaces.php:2825 +#: src/usr/local/www/interfaces.php:2832 msgid "" "Legend: wireless standards - channel # (frequency @ max TX power / TX power " -"allowed in reg. domain)<br />Not all channels may be supported by your " -"card. Auto may override the wireless standard selected above." +"allowed in reg. domain)<br />Not all channels may be supported by some " +"cards. Auto may override the wireless standard selected above." msgstr "" -#: src/usr/local/www/interfaces.php:2830 +#: src/usr/local/www/interfaces.php:2837 msgid "Antenna Settings" msgstr "" -#: src/usr/local/www/interfaces.php:2837 +#: src/usr/local/www/interfaces.php:2844 msgid "On" msgstr "" -#: src/usr/local/www/interfaces.php:2838 +#: src/usr/local/www/interfaces.php:2845 msgid "Diversity" msgstr "" -#: src/usr/local/www/interfaces.php:2846 src/usr/local/www/interfaces.php:2855 +#: src/usr/local/www/interfaces.php:2853 src/usr/local/www/interfaces.php:2862 msgid "#1" msgstr "" -#: src/usr/local/www/interfaces.php:2846 src/usr/local/www/interfaces.php:2855 +#: src/usr/local/www/interfaces.php:2853 src/usr/local/www/interfaces.php:2862 msgid "#2" msgstr "" -#: src/usr/local/www/interfaces.php:2847 +#: src/usr/local/www/interfaces.php:2854 msgid "Transmit antenna" msgstr "" -#: src/usr/local/www/interfaces.php:2856 +#: src/usr/local/www/interfaces.php:2863 msgid "Receive antenna" msgstr "" -#: src/usr/local/www/interfaces.php:2859 +#: src/usr/local/www/interfaces.php:2866 msgid "" "Note: The antenna numbers do not always match up with the labels on the card." msgstr "" -#: src/usr/local/www/interfaces.php:2868 +#: src/usr/local/www/interfaces.php:2875 msgid "Distance setting (meters)" msgstr "" -#: src/usr/local/www/interfaces.php:2871 +#: src/usr/local/www/interfaces.php:2878 msgid "" "This field can be used to tune ACK/CTS timers to fit the distance between AP " "and Client" msgstr "" -#: src/usr/local/www/interfaces.php:2877 +#: src/usr/local/www/interfaces.php:2884 msgid "Regulatory Settings" msgstr "" -#: src/usr/local/www/interfaces.php:2889 +#: src/usr/local/www/interfaces.php:2896 msgid "Regulatory domain" msgstr "" -#: src/usr/local/www/interfaces.php:2892 +#: src/usr/local/www/interfaces.php:2899 msgid "" "Some cards have a default that is not recognized and require changing the " "regulatory domain to one in this list for the changes to other regulatory " "settings to work" msgstr "" -#: src/usr/local/www/interfaces.php:2907 +#: src/usr/local/www/interfaces.php:2914 msgid "" "Any country setting other than \"Default\" will override the regulatory " "domain setting" msgstr "" -#: src/usr/local/www/interfaces.php:2913 +#: src/usr/local/www/interfaces.php:2920 msgid "Indoor" msgstr "" -#: src/usr/local/www/interfaces.php:2913 +#: src/usr/local/www/interfaces.php:2920 msgid "Outdoor" msgstr "" -#: src/usr/local/www/interfaces.php:2913 +#: src/usr/local/www/interfaces.php:2920 msgid "Anywhere" msgstr "" -#: src/usr/local/www/interfaces.php:2911 +#: src/usr/local/www/interfaces.php:2918 msgid "Location" msgstr "" -#: src/usr/local/www/interfaces.php:2914 +#: src/usr/local/www/interfaces.php:2921 msgid "" "These settings may affect which channels are available and the maximum " "transmit power allowed on those channels. Using the correct settings to " @@ -14737,213 +14963,218 @@ msgid "" "additional channels that are not already supported." msgstr "" -#: src/usr/local/www/interfaces.php:2922 +#: src/usr/local/www/interfaces.php:2929 msgid "Network-Specific Wireless Configuration" msgstr "" -#: src/usr/local/www/interfaces.php:2943 +#: src/usr/local/www/interfaces.php:2950 msgid "802.11g" msgstr "" -#: src/usr/local/www/interfaces.php:2943 +#: src/usr/local/www/interfaces.php:2950 msgid "802.11n" msgstr "" -#: src/usr/local/www/interfaces.php:2941 +#: src/usr/local/www/interfaces.php:2948 msgid "Minimum wireless standard" msgstr "" -#: src/usr/local/www/interfaces.php:2944 +#: src/usr/local/www/interfaces.php:2951 msgid "" "When operating as an access point, allow only stations capable of the " "selected wireless standard to associate (stations not capable are not " "permitted to associate)" msgstr "" -#: src/usr/local/www/interfaces.php:2948 +#: src/usr/local/www/interfaces.php:2955 msgid "802.11g only" msgstr "" -#: src/usr/local/www/interfaces.php:2952 +#: src/usr/local/www/interfaces.php:2959 msgid "" "When operating as an access point in 802.11g mode, allow only 11g-capable " "stations to associate (11b-only stations are not permitted to associate)" msgstr "" -#: src/usr/local/www/interfaces.php:2957 +#: src/usr/local/www/interfaces.php:2964 msgid "Allow intra-BSS communication" msgstr "" -#: src/usr/local/www/interfaces.php:2961 +#: src/usr/local/www/interfaces.php:2968 msgid "" "Provides extra security by isolating clients so they cannot directly " "communicate with one another" msgstr "" -#: src/usr/local/www/interfaces.php:2965 +#: src/usr/local/www/interfaces.php:2972 msgid "Enable WME" msgstr "" -#: src/usr/local/www/interfaces.php:2973 +#: src/usr/local/www/interfaces.php:2980 msgid "Hide SSID" msgstr "" -#: src/usr/local/www/interfaces.php:2982 src/usr/local/www/interfaces.php:3003 +#: src/usr/local/www/interfaces.php:2989 src/usr/local/www/interfaces.php:3010 msgid "WPA" msgstr "" -#: src/usr/local/www/interfaces.php:2994 +#: src/usr/local/www/interfaces.php:3001 msgid "WPA Pre-Shared Key" msgstr "" -#: src/usr/local/www/interfaces.php:2997 +#: src/usr/local/www/interfaces.php:3004 msgid "WPA Passphrase must be between 8 and 63 characters long" msgstr "" -#: src/usr/local/www/interfaces.php:3003 +#: src/usr/local/www/interfaces.php:3010 msgid "WPA2" msgstr "" -#: src/usr/local/www/interfaces.php:3003 src/usr/local/www/interfaces.php:3010 -#: src/usr/local/www/interfaces.php:3017 src/usr/local/www/pkg_mgr.php:192 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:186 -#: src/usr/local/www/services_captiveportal_ip_edit.php:229 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:135 +#: src/usr/local/www/interfaces.php:3010 src/usr/local/www/interfaces.php:3017 +#: src/usr/local/www/interfaces.php:3024 src/usr/local/www/pkg_mgr.php:192 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:188 +#: src/usr/local/www/services_captiveportal_ip_edit.php:231 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:142 #: src/usr/local/www/services_rfc2136_edit.php:313 msgid "Both" msgstr "" -#: src/usr/local/www/interfaces.php:3001 +#: src/usr/local/www/interfaces.php:3008 msgid "WPA mode" msgstr "" -#: src/usr/local/www/interfaces.php:3010 +#: src/usr/local/www/interfaces.php:3017 #: src/usr/local/www/vpn_ipsec_keys.php:135 #: src/usr/local/www/vpn_ipsec_keys_edit.php:101 #: src/usr/local/www/vpn_ipsec_keys_edit.php:183 #: src/usr/local/www/vpn_ipsec_phase1.php:246 -#: src/usr/local/www/vpn_ipsec_phase1.php:795 +#: src/usr/local/www/vpn_ipsec_phase1.php:793 msgid "Pre-Shared Key" msgstr "" -#: src/usr/local/www/interfaces.php:3010 +#: src/usr/local/www/interfaces.php:3017 msgid "Extensible Authentication Protocol" msgstr "" -#: src/usr/local/www/interfaces.php:3008 +#: src/usr/local/www/interfaces.php:3015 msgid "WPA Key Management Mode" msgstr "" -#: src/usr/local/www/interfaces.php:3017 +#: src/usr/local/www/interfaces.php:3024 msgid "AES (recommended)" msgstr "" -#: src/usr/local/www/interfaces.php:3017 +#: src/usr/local/www/interfaces.php:3024 msgid "TKIP" msgstr "" -#: src/usr/local/www/interfaces.php:3015 +#: src/usr/local/www/interfaces.php:3022 msgid "WPA Pairwise" msgstr "" -#: src/usr/local/www/interfaces.php:3022 +#: src/usr/local/www/interfaces.php:3029 msgid "Group Key Rotation" msgstr "" -#: src/usr/local/www/interfaces.php:3026 +#: src/usr/local/www/interfaces.php:3033 msgid "" "Time between group rekey events, specified in seconds. Allowed values are " "1-9999. Must be shorter than Master Key Regeneration time" msgstr "" -#: src/usr/local/www/interfaces.php:3030 +#: src/usr/local/www/interfaces.php:3037 msgid "Group Master Key Regeneration" msgstr "" -#: src/usr/local/www/interfaces.php:3034 +#: src/usr/local/www/interfaces.php:3041 msgid "" "Time between GMK rekey events, specified in seconds. Allowed values are " "1-9999. Must be longer than Group Key Rotation time" msgstr "" -#: src/usr/local/www/interfaces.php:3038 +#: src/usr/local/www/interfaces.php:3045 msgid "Strict Key Regeneration" msgstr "" -#: src/usr/local/www/interfaces.php:3046 +#: src/usr/local/www/interfaces.php:3053 msgid "802.1x RADIUS Options" msgstr "" -#: src/usr/local/www/interfaces.php:3050 +#: src/usr/local/www/interfaces.php:3057 msgid "IEEE802.1X" msgstr "" -#: src/usr/local/www/interfaces.php:3054 +#: src/usr/local/www/interfaces.php:3061 msgid "This option requires that the \"Enable WPA box\" is checked" msgstr "" -#: src/usr/local/www/interfaces.php:3056 +#: src/usr/local/www/interfaces.php:3063 msgid "Primary 802.1X server" msgstr "" -#: src/usr/local/www/interfaces.php:3062 src/usr/local/www/interfaces.php:3086 +#: src/usr/local/www/interfaces.php:3069 src/usr/local/www/interfaces.php:3093 msgid "IP address of the RADIUS server" msgstr "" -#: src/usr/local/www/interfaces.php:3069 src/usr/local/www/interfaces.php:3093 +#: src/usr/local/www/interfaces.php:3076 src/usr/local/www/interfaces.php:3100 msgid "Server auth port. Default is 1812" msgstr "" -#: src/usr/local/www/interfaces.php:3073 src/usr/local/www/interfaces.php:3097 -#: src/usr/local/www/system_authservers.php:239 -#: src/usr/local/www/system_authservers.php:707 +#: src/usr/local/www/interfaces.php:3080 src/usr/local/www/interfaces.php:3104 +#: src/usr/local/www/system_authservers.php:305 +#: src/usr/local/www/system_authservers.php:775 msgid "Shared Secret" msgstr "" -#: src/usr/local/www/interfaces.php:3076 src/usr/local/www/interfaces.php:3100 +#: src/usr/local/www/interfaces.php:3083 src/usr/local/www/interfaces.php:3107 msgid "RADIUS Shared secret for this firewall" msgstr "" -#: src/usr/local/www/interfaces.php:3080 +#: src/usr/local/www/interfaces.php:3087 msgid "Secondary 802.1X server" msgstr "" -#: src/usr/local/www/interfaces.php:3106 +#: src/usr/local/www/interfaces.php:3113 msgid "Authentication Roaming Preauth" msgstr "" -#: src/usr/local/www/interfaces.php:3115 -msgid "Private Networks" +#: src/usr/local/www/interfaces.php:3122 +msgid "Reserved Networks" msgstr "" -#: src/usr/local/www/interfaces.php:3123 +#: src/usr/local/www/interfaces.php:3126 +msgid "Block private networks and loopback addresses" +msgstr "" + +#: src/usr/local/www/interfaces.php:3130 msgid "" "Blocks traffic from IP addresses that are reserved for private networks per " -"RFC 1918 (10/8, 172.16/12, 192.168/16) as well as loopback addresses " -"(127/8). You should generally leave this option turned on, unless your WAN " -"network lies in such a private address space, too." +"RFC 1918 (10/8, 172.16/12, 192.168/16) and unique local addresses per RFC " +"4193 (fc00::/7) as well as loopback addresses (127/8). This option should " +"generally be turned on, unless this network interface resides in such a " +"private address space, too." msgstr "" -#: src/usr/local/www/interfaces.php:3133 +#: src/usr/local/www/interfaces.php:3140 msgid "" "Blocks traffic from reserved IP addresses (but not RFC 1918) or not yet " "assigned by IANA. Bogons are prefixes that should never appear in the " "Internet routing table, and so should not appear as the source address in " -"any packets you receive.<br />Note: The update frequency can be changed " -"under System->Advanced Firewall/NAT settings" +"any packets received.<br />Note: The update frequency can be changed under " +"System->Advanced Firewall/NAT settings." msgstr "" -#: src/usr/local/www/interfaces.php:3164 +#: src/usr/local/www/interfaces.php:3171 msgid "New Gateway" msgstr "" -#: src/usr/local/www/interfaces.php:3182 -#: src/usr/local/www/status_interfaces.php:151 +#: src/usr/local/www/interfaces.php:3189 +#: src/usr/local/www/status_interfaces.php:154 msgid "Gateway IPv4" msgstr "" #: src/usr/local/www/interfaces_assign.php:67 -#: src/usr/local/www/interfaces_assign.php:522 +#: src/usr/local/www/interfaces_assign.php:527 #: src/usr/local/www/interfaces_bridge.php:117 #: src/usr/local/www/interfaces_gif.php:112 #: src/usr/local/www/interfaces_gre.php:112 @@ -14982,8 +15213,8 @@ msgstr "" #: src/usr/local/www/interfaces_assign.php:343 #, php-format msgid "" -"You cannot set port %1$s to interface %2$s because this interface is a " -"member of %3$s." +"Cannot set port %1$s to interface %2$s because this interface is a member of " +"%3$s." msgstr "" #: src/usr/local/www/interfaces_assign.php:354 @@ -15014,29 +15245,29 @@ msgid "" "The interface is part of a gif tunnel. Please delete the tunnel to continue" msgstr "" -#: src/usr/local/www/interfaces_assign.php:469 +#: src/usr/local/www/interfaces_assign.php:474 msgid "Interface has been deleted." msgstr "" -#: src/usr/local/www/interfaces_assign.php:495 +#: src/usr/local/www/interfaces_assign.php:500 msgid "The system is now rebooting. Please wait." msgstr "" -#: src/usr/local/www/interfaces_assign.php:498 +#: src/usr/local/www/interfaces_assign.php:503 msgid "Reboot is needed. Please apply the settings in order to reboot." msgstr "" -#: src/usr/local/www/interfaces_assign.php:502 +#: src/usr/local/www/interfaces_assign.php:507 msgid "" "Interface mismatch detected. Please resolve the mismatch and click 'Apply " "Changes'. The firewall will reboot afterwards." msgstr "" -#: src/usr/local/www/interfaces_assign.php:509 +#: src/usr/local/www/interfaces_assign.php:514 msgid "The interface configuration has been changed." msgstr "" -#: src/usr/local/www/interfaces_assign.php:523 +#: src/usr/local/www/interfaces_assign.php:528 #: src/usr/local/www/interfaces_bridge.php:118 #: src/usr/local/www/interfaces_gif.php:113 #: src/usr/local/www/interfaces_gre.php:113 @@ -15053,7 +15284,7 @@ msgstr "" msgid "Interface Groups" msgstr "" -#: src/usr/local/www/interfaces_assign.php:525 +#: src/usr/local/www/interfaces_assign.php:530 #: src/usr/local/www/interfaces_bridge.php:120 #: src/usr/local/www/interfaces_gif.php:115 #: src/usr/local/www/interfaces_gre.php:115 @@ -15069,7 +15300,7 @@ msgstr "" msgid "VLANs" msgstr "" -#: src/usr/local/www/interfaces_assign.php:526 +#: src/usr/local/www/interfaces_assign.php:531 #: src/usr/local/www/interfaces_bridge.php:121 #: src/usr/local/www/interfaces_gif.php:116 #: src/usr/local/www/interfaces_gre.php:116 @@ -15085,7 +15316,7 @@ msgstr "" msgid "QinQs" msgstr "" -#: src/usr/local/www/interfaces_assign.php:527 +#: src/usr/local/www/interfaces_assign.php:532 #: src/usr/local/www/interfaces_bridge.php:122 #: src/usr/local/www/interfaces_gif.php:117 #: src/usr/local/www/interfaces_gre.php:117 @@ -15094,19 +15325,19 @@ msgstr "" #: src/usr/local/www/interfaces_lagg.php:124 #: src/usr/local/www/interfaces_ppps.php:106 #: src/usr/local/www/interfaces_ppps.php:116 -#: src/usr/local/www/interfaces_ppps_edit.php:462 +#: src/usr/local/www/interfaces_ppps_edit.php:472 #: src/usr/local/www/interfaces_qinq.php:128 #: src/usr/local/www/interfaces_vlan.php:121 #: src/usr/local/www/interfaces_wireless.php:119 msgid "PPPs" msgstr "" -#: src/usr/local/www/interfaces_assign.php:528 +#: src/usr/local/www/interfaces_assign.php:533 #: src/usr/local/www/interfaces_bridge.php:123 #: src/usr/local/www/interfaces_gif.php:118 #: src/usr/local/www/interfaces_gre.php:104 #: src/usr/local/www/interfaces_gre.php:118 -#: src/usr/local/www/interfaces_gre_edit.php:189 +#: src/usr/local/www/interfaces_gre_edit.php:195 #: src/usr/local/www/interfaces_groups.php:100 #: src/usr/local/www/interfaces_lagg.php:125 #: src/usr/local/www/interfaces_ppps.php:117 @@ -15116,11 +15347,11 @@ msgstr "" msgid "GREs" msgstr "" -#: src/usr/local/www/interfaces_assign.php:529 +#: src/usr/local/www/interfaces_assign.php:534 #: src/usr/local/www/interfaces_bridge.php:124 #: src/usr/local/www/interfaces_gif.php:103 #: src/usr/local/www/interfaces_gif.php:119 -#: src/usr/local/www/interfaces_gif_edit.php:195 +#: src/usr/local/www/interfaces_gif_edit.php:199 #: src/usr/local/www/interfaces_gre.php:119 #: src/usr/local/www/interfaces_groups.php:101 #: src/usr/local/www/interfaces_lagg.php:126 @@ -15131,10 +15362,10 @@ msgstr "" msgid "GIFs" msgstr "" -#: src/usr/local/www/interfaces_assign.php:530 +#: src/usr/local/www/interfaces_assign.php:535 #: src/usr/local/www/interfaces_bridge.php:109 #: src/usr/local/www/interfaces_bridge.php:125 -#: src/usr/local/www/interfaces_bridge_edit.php:403 +#: src/usr/local/www/interfaces_bridge_edit.php:418 #: src/usr/local/www/interfaces_gif.php:120 #: src/usr/local/www/interfaces_gre.php:120 #: src/usr/local/www/interfaces_groups.php:102 @@ -15147,14 +15378,14 @@ msgstr "" msgid "Bridges" msgstr "" -#: src/usr/local/www/interfaces_assign.php:531 +#: src/usr/local/www/interfaces_assign.php:536 #: src/usr/local/www/interfaces_bridge.php:126 #: src/usr/local/www/interfaces_gif.php:121 #: src/usr/local/www/interfaces_gre.php:121 #: src/usr/local/www/interfaces_groups.php:103 #: src/usr/local/www/interfaces_lagg.php:110 #: src/usr/local/www/interfaces_lagg.php:128 -#: src/usr/local/www/interfaces_lagg_edit.php:241 +#: src/usr/local/www/interfaces_lagg_edit.php:257 #: src/usr/local/www/interfaces_ppps.php:120 #: src/usr/local/www/interfaces_qinq.php:132 #: src/usr/local/www/interfaces_vlan.php:125 @@ -15162,23 +15393,23 @@ msgstr "" msgid "LAGGs" msgstr "" -#: src/usr/local/www/interfaces_assign.php:540 +#: src/usr/local/www/interfaces_assign.php:545 msgid "Network port" msgstr "" -#: src/usr/local/www/interfaces_assign.php:566 +#: src/usr/local/www/interfaces_assign.php:571 msgid "Delete interface" msgstr "" -#: src/usr/local/www/interfaces_assign.php:578 +#: src/usr/local/www/interfaces_assign.php:583 msgid "Available network ports:" msgstr "" -#: src/usr/local/www/interfaces_assign.php:590 +#: src/usr/local/www/interfaces_assign.php:595 msgid "Add selected interface" msgstr "" -#: src/usr/local/www/interfaces_assign.php:606 +#: src/usr/local/www/interfaces_assign.php:611 msgid "" "Interfaces that are configured as members of a lagg(4) interface will not be " "shown." @@ -15211,8 +15442,8 @@ msgstr "" #: src/usr/local/www/interfaces_bridge.php:137 #: src/usr/local/www/interfaces_groups.php:114 #: src/usr/local/www/interfaces_lagg.php:139 -#: src/usr/local/www/load_balancer_pool_edit.php:427 -#: src/usr/local/www/system_groupmanager.php:441 +#: src/usr/local/www/load_balancer_pool_edit.php:421 +#: src/usr/local/www/system_groupmanager.php:465 msgid "Members" msgstr "" @@ -15224,148 +15455,148 @@ msgstr "" msgid "Delete interface bridge" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:166 -#: src/usr/local/www/interfaces_bridge_edit.php:419 +#: src/usr/local/www/interfaces_bridge_edit.php:181 +#: src/usr/local/www/interfaces_bridge_edit.php:434 msgid "Member Interfaces" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:171 +#: src/usr/local/www/interfaces_bridge_edit.php:186 msgid "Maxage needs to be an integer between 6 and 40." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:174 +#: src/usr/local/www/interfaces_bridge_edit.php:189 msgid "Maxaddr needs to be an integer." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:177 +#: src/usr/local/www/interfaces_bridge_edit.php:192 msgid "Timeout needs to be an integer." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:180 +#: src/usr/local/www/interfaces_bridge_edit.php:195 msgid "Forward Delay needs to be an integer between 4 and 30." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:183 +#: src/usr/local/www/interfaces_bridge_edit.php:198 msgid "Hello time for STP needs to be an integer between 1 and 2." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:186 +#: src/usr/local/www/interfaces_bridge_edit.php:201 msgid "Priority for STP needs to be an integer between 0 and 61440." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:189 +#: src/usr/local/www/interfaces_bridge_edit.php:204 msgid "Transmit Hold Count for STP needs to be an integer between 1 and 10." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:193 +#: src/usr/local/www/interfaces_bridge_edit.php:208 #, php-format msgid "%s interface priority for STP needs to be an integer between 0 and 240." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:201 +#: src/usr/local/www/interfaces_bridge_edit.php:216 #, php-format msgid "" "%s interface path cost for STP needs to be an integer between 1 and " "200000000." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:207 -msgid "You must select at least one member interface for a bridge." +#: src/usr/local/www/interfaces_bridge_edit.php:222 +msgid "At least one member interface must be selected for a bridge." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:272 +#: src/usr/local/www/interfaces_bridge_edit.php:287 msgid "A member interface passed does not exist in configuration" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:275 +#: src/usr/local/www/interfaces_bridge_edit.php:290 msgid "A bridge interface cannot be a member of a bridge." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:279 +#: src/usr/local/www/interfaces_bridge_edit.php:294 msgid "Bridging a wireless interface is only possible in hostap mode." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:291 +#: src/usr/local/www/interfaces_bridge_edit.php:306 #, php-format msgid "" "%s is part of another bridge. Remove the interface from bridge members to " "continue." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:363 -#: src/usr/local/www/interfaces_gif_edit.php:163 -#: src/usr/local/www/interfaces_gre_edit.php:157 -#: src/usr/local/www/interfaces_lagg_edit.php:200 +#: src/usr/local/www/interfaces_bridge_edit.php:378 +#: src/usr/local/www/interfaces_gif_edit.php:167 +#: src/usr/local/www/interfaces_gre_edit.php:163 +#: src/usr/local/www/interfaces_lagg_edit.php:203 #: src/usr/local/www/interfaces_vlan_edit.php:169 msgid "Error occurred creating interface, please retry." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:413 +#: src/usr/local/www/interfaces_bridge_edit.php:428 msgid "Bridge Configuration" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:423 -msgid "Interfaces participating in the bridge" +#: src/usr/local/www/interfaces_bridge_edit.php:438 +msgid "Interfaces participating in the bridge." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:443 -#: src/usr/local/www/interfaces_ppps_edit.php:834 +#: src/usr/local/www/interfaces_bridge_edit.php:464 +#: src/usr/local/www/interfaces_ppps_edit.php:846 #: src/usr/local/www/vpn_ipsec_phase2.php:710 #: src/usr/local/www/vpn_openvpn_client.php:772 -#: src/usr/local/www/vpn_openvpn_server.php:1154 -#: src/usr/local/www/interfaces.php:1911 src/usr/local/www/interfaces.php:2094 +#: src/usr/local/www/vpn_openvpn_server.php:1159 +#: src/usr/local/www/interfaces.php:1927 src/usr/local/www/interfaces.php:2110 msgid "Advanced Configuration" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:454 +#: src/usr/local/www/interfaces_bridge_edit.php:470 msgid "Cache Size" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:457 -msgid "Set the size of the bridge address cache. The default is 2000 entries" +#: src/usr/local/www/interfaces_bridge_edit.php:473 +msgid "Set the size of the bridge address cache. The default is 2000 entries." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:461 +#: src/usr/local/www/interfaces_bridge_edit.php:477 msgid "Cache expire time" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:464 +#: src/usr/local/www/interfaces_bridge_edit.php:480 msgid "" "Set the timeout of address cache entries to this number of seconds. If " "seconds is zero, then address cache entries will not be expired. The default " -"is 1200 seconds" +"is 1200 seconds." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:470 +#: src/usr/local/www/interfaces_bridge_edit.php:486 msgid "Span Port" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:474 +#: src/usr/local/www/interfaces_bridge_edit.php:490 #, php-format msgid "" "Add the interface named by interface as a span port on the bridge. Span " -"ports transmit a copy of every frame received by the bridge.This is most " +"ports transmit a copy of every frame received by the bridge. This is most " "useful for snooping a bridged network passively on another host connected to " "one of the span ports of the bridge. <br />%sThe span interface cannot be " "part of the bridge member interfaces.%s" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:482 +#: src/usr/local/www/interfaces_bridge_edit.php:498 msgid "Edge Ports" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:486 +#: src/usr/local/www/interfaces_bridge_edit.php:502 msgid "" "Set interface as an edge port. An edge port connects directly to end " "stations and cannot create bridging loops in the network; this allows it to " "transition straight to forwarding." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:492 +#: src/usr/local/www/interfaces_bridge_edit.php:508 msgid "Auto Edge Ports" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:496 +#: src/usr/local/www/interfaces_bridge_edit.php:512 #, php-format msgid "" "Allow interface to automatically detect edge status. This is the default for " @@ -15373,22 +15604,22 @@ msgid "" "interfaces. %s" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:503 +#: src/usr/local/www/interfaces_bridge_edit.php:519 msgid "PTP Ports" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:507 +#: src/usr/local/www/interfaces_bridge_edit.php:523 msgid "" "Set the interface as a point-to-point link. This is required for straight " "transitions to forwarding and should be enabled on a direct link to another " "RSTP-capable switch." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:513 +#: src/usr/local/www/interfaces_bridge_edit.php:529 msgid "Auto PTP Ports" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:517 +#: src/usr/local/www/interfaces_bridge_edit.php:533 #, php-format msgid "" "Automatically detect the point-to-point status on interface by checking the " @@ -15397,11 +15628,11 @@ msgid "" "status. %s" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:524 +#: src/usr/local/www/interfaces_bridge_edit.php:540 msgid "Sticky Ports" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:528 +#: src/usr/local/www/interfaces_bridge_edit.php:544 msgid "" "Mark an interface as a \"sticky\" interface. Dynamically learned address " "entries are treated as static once entered into the cache. Sticky entries " @@ -15409,105 +15640,105 @@ msgid "" "a different interface." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:535 +#: src/usr/local/www/interfaces_bridge_edit.php:551 msgid "Private Ports" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:539 +#: src/usr/local/www/interfaces_bridge_edit.php:555 msgid "" "Mark an interface as a \"private\" interface. A private interface does not " "forward any traffic to any other port that is also a private interface. " msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:545 +#: src/usr/local/www/interfaces_bridge_edit.php:561 msgid "Enable RSTP/STP" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:552 +#: src/usr/local/www/interfaces_bridge_edit.php:568 msgid "RSTP/STP" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:565 +#: src/usr/local/www/interfaces_bridge_edit.php:577 msgid "Protocol used for spanning tree." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:571 +#: src/usr/local/www/interfaces_bridge_edit.php:583 msgid "STP Interfaces" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:575 +#: src/usr/local/www/interfaces_bridge_edit.php:587 msgid "" "Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has " -"support for the IEEE 802.1D Spanning Tree Protocol (STP).STP is used to " +"support for the IEEE 802.1D Spanning Tree Protocol (STP). STP is used to " "detect and remove loops in a network topology." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:580 +#: src/usr/local/www/interfaces_bridge_edit.php:592 msgid "Valid time" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:584 +#: src/usr/local/www/interfaces_bridge_edit.php:596 msgid "" "Set the time that a Spanning Tree Protocol configuration is valid. The " "default is 20 seconds. The minimum is 6 seconds and the maximum is 40 " "seconds." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:588 +#: src/usr/local/www/interfaces_bridge_edit.php:600 msgid "Forward time" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:592 +#: src/usr/local/www/interfaces_bridge_edit.php:604 msgid "" "Set the time that must pass before an interface begins forwarding packets " "when Spanning Tree is enabled. The default is 15 seconds. The minimum is 4 " "seconds and the maximum is 30 seconds. " msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:596 +#: src/usr/local/www/interfaces_bridge_edit.php:608 msgid "Hello time" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:600 +#: src/usr/local/www/interfaces_bridge_edit.php:612 msgid "" "Set the time in seconds between broadcasting of Spanning Tree Protocol " "configuration messages. The hello time may only be changed when operating in " -"legacy STP mode.The default is 2 seconds. The minimum is 1 second and the " +"legacy STP mode. The default is 2 seconds. The minimum is 1 second and the " "maximum is 2 seconds." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:609 +#: src/usr/local/www/interfaces_bridge_edit.php:621 msgid "" "Set the bridge priority for Spanning Tree. The default is 32768. The minimum " "is 0 and the maximum is 61440. " msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:613 +#: src/usr/local/www/interfaces_bridge_edit.php:625 msgid "Hold Count" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:617 +#: src/usr/local/www/interfaces_bridge_edit.php:629 msgid "" "Set the transmit hold count for Spanning Tree. This is the number of packets " "transmitted before being rate limited. The default is 6. The minimum is 1 " "and the maximum is 10." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:622 +#: src/usr/local/www/interfaces_bridge_edit.php:634 msgid " Priority" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:626 +#: src/usr/local/www/interfaces_bridge_edit.php:638 msgid "" "Set the Spanning Tree priority of interface to value. The default is 128. " "The minimum is 0 and the maximum is 240. Increments of 16." msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:633 +#: src/usr/local/www/interfaces_bridge_edit.php:645 msgid " Path cost" msgstr "" -#: src/usr/local/www/interfaces_bridge_edit.php:637 +#: src/usr/local/www/interfaces_bridge_edit.php:649 msgid "" "Set the Spanning Tree path cost of interface to value. The default is " "calculated from the link speed. To change a previously selected path cost " @@ -15540,7 +15771,7 @@ msgstr "" #: src/usr/local/www/interfaces_gif_edit.php:99 #: src/usr/local/www/interfaces_gre_edit.php:99 -#: src/usr/local/www/interfaces_qinq_edit.php:268 +#: src/usr/local/www/interfaces_qinq_edit.php:265 #: src/usr/local/www/interfaces_vlan_edit.php:105 #: src/usr/local/www/interfaces_wireless_edit.php:115 msgid "Parent interface" @@ -15602,62 +15833,62 @@ msgstr "" msgid "A gif with the network %s is already defined." msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:205 +#: src/usr/local/www/interfaces_gif_edit.php:209 msgid "GIF Configuration" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:209 -#: src/usr/local/www/interfaces_gre_edit.php:203 +#: src/usr/local/www/interfaces_gif_edit.php:213 +#: src/usr/local/www/interfaces_gre_edit.php:209 #: src/usr/local/www/interfaces_vlan_edit.php:218 #: src/usr/local/www/interfaces_wireless_edit.php:214 msgid "Parent Interface" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:212 +#: src/usr/local/www/interfaces_gif_edit.php:216 msgid "" "This interface serves as the local address to be used for the GIF tunnel." msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:216 +#: src/usr/local/www/interfaces_gif_edit.php:220 msgid "GIF Remote Address" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:218 +#: src/usr/local/www/interfaces_gif_edit.php:222 msgid "Peer address where encapsulated gif packets will be sent." msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:222 +#: src/usr/local/www/interfaces_gif_edit.php:226 msgid "GIF tunnel local address" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:224 +#: src/usr/local/www/interfaces_gif_edit.php:228 msgid "Local gif tunnel endpoint." msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:228 +#: src/usr/local/www/interfaces_gif_edit.php:232 msgid "GIF tunnel remote address" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:230 +#: src/usr/local/www/interfaces_gif_edit.php:234 msgid "Remote GIF address endpoint." msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:234 +#: src/usr/local/www/interfaces_gif_edit.php:238 msgid "GIF tunnel subnet" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:237 -#: src/usr/local/www/interfaces_gre_edit.php:231 -msgid "The subnet is used for determining the network that is tunnelled" +#: src/usr/local/www/interfaces_gif_edit.php:241 +#: src/usr/local/www/interfaces_gre_edit.php:237 +msgid "The subnet is used for determining the network that is tunnelled." msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:241 -#: src/usr/local/www/interfaces_gre_edit.php:235 +#: src/usr/local/www/interfaces_gif_edit.php:245 +#: src/usr/local/www/interfaces_gre_edit.php:241 msgid "Route Caching" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:248 -#: src/usr/local/www/interfaces_gre_edit.php:242 +#: src/usr/local/www/interfaces_gif_edit.php:252 +#: src/usr/local/www/interfaces_gre_edit.php:248 msgid "ECN friendly behavior" msgstr "" @@ -15724,61 +15955,61 @@ msgstr "" msgid "A GRE tunnel with the network %s is already defined." msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:199 +#: src/usr/local/www/interfaces_gre_edit.php:205 msgid "GRE Configuration" msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:206 +#: src/usr/local/www/interfaces_gre_edit.php:212 msgid "" "This interface serves as the local address to be used for the GRE tunnel." msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:210 +#: src/usr/local/www/interfaces_gre_edit.php:216 msgid "GRE Remote Address" msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:212 +#: src/usr/local/www/interfaces_gre_edit.php:218 msgid "Peer address where encapsulated GRE packets will be sent." msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:216 +#: src/usr/local/www/interfaces_gre_edit.php:222 msgid "GRE tunnel local address" msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:218 +#: src/usr/local/www/interfaces_gre_edit.php:224 msgid "Local GRE tunnel endpoint." msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:222 +#: src/usr/local/www/interfaces_gre_edit.php:228 msgid "GRE tunnel remote address" msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:224 +#: src/usr/local/www/interfaces_gre_edit.php:230 msgid "Remote GRE address endpoint." msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:228 +#: src/usr/local/www/interfaces_gre_edit.php:234 msgid "GRE tunnel subnet" msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:249 +#: src/usr/local/www/interfaces_gre_edit.php:255 msgid "WCCP Version" msgstr "" #: src/usr/local/www/interfaces_groups.php:146 -#: src/usr/local/www/system_groupmanager.php:330 +#: src/usr/local/www/system_groupmanager.php:346 msgid "Edit group" msgstr "" #: src/usr/local/www/interfaces_groups.php:147 -#: src/usr/local/www/system_groupmanager.php:332 +#: src/usr/local/www/system_groupmanager.php:348 msgid "Delete group" msgstr "" #: src/usr/local/www/interfaces_groups.php:165 msgid "" -"Interface Groups allow you to setup rules for multiple interfaces without " -"duplicating the rules.<br />If you remove members from an interface group, " +"Interface Groups allow setting up rules for multiple interfaces without " +"duplicating the rules.<br />If members are removed from an interface group, " "the group rules are no longer applicable to that interface." msgstr "" @@ -15808,16 +16039,16 @@ msgstr "" #: src/usr/local/www/interfaces_groups_edit.php:227 #: src/usr/local/www/status_gateway_groups.php:96 -#: src/usr/local/www/system_gateway_groups.php:150 -#: src/usr/local/www/system_gateway_groups_edit.php:227 -#: src/usr/local/www/system_gateway_groups_edit.php:270 +#: src/usr/local/www/system_gateway_groups.php:164 +#: src/usr/local/www/system_gateway_groups_edit.php:242 #: src/usr/local/www/system_gateway_groups_edit.php:299 -#: src/usr/local/www/system_groupmanager.php:176 +#: src/usr/local/www/system_gateway_groups_edit.php:328 +#: src/usr/local/www/system_groupmanager.php:177 msgid "Group Name" msgstr "" #: src/usr/local/www/interfaces_groups_edit.php:231 -msgid "No numbers or spaces are allowed. Only characters in a-zA-Z" +msgid "No numbers or spaces are allowed. Only characters: a-zA-Z" msgstr "" #: src/usr/local/www/interfaces_groups_edit.php:236 @@ -15825,7 +16056,10 @@ msgid "Group Description" msgstr "" #: src/usr/local/www/interfaces_groups_edit.php:240 -msgid "You may enter a group decsription here for your reference (not parsed)" +#: src/usr/local/www/interfaces_vlan_edit.php:245 +msgid "" +"A group description may be entered here for administrative reference (not " +"parsed)." msgstr "" #: src/usr/local/www/interfaces_groups_edit.php:245 @@ -15840,7 +16074,7 @@ msgid "" msgstr "" #: src/usr/local/www/interfaces_groups_edit.php:257 -#: src/usr/local/www/interfaces_vlan_edit.php:258 +#: src/usr/local/www/interfaces_vlan_edit.php:257 #: src/usr/local/www/system_advanced_sysctl.php:271 msgid "id" msgstr "" @@ -15888,7 +16122,7 @@ msgstr "" #: src/usr/local/www/interfaces_lagg_edit.php:79 msgid "" "This protocol is intended to do nothing: it disables any traffic without " -"disabling the lagg interface itself" +"disabling the lagg interface itself." msgstr "" #: src/usr/local/www/interfaces_lagg_edit.php:84 @@ -15924,53 +16158,57 @@ msgid "" "is a static setup and does not negotiate aggregation with the peer or " "exchange frames to monitor the link. The hash includes the Ethernet source " "and destination address, and, if available, the VLAN tag, and the IP source " -"and destination address" +"and destination address." msgstr "" #: src/usr/local/www/interfaces_lagg_edit.php:120 msgid "" "Distributes outgoing traffic using a round-robin scheduler through all " -"active ports and accepts incoming traffic from any active port" +"active ports and accepts incoming traffic from any active port." msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:170 +#: src/usr/local/www/interfaces_lagg_edit.php:173 msgid "Member interfaces" msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:170 +#: src/usr/local/www/interfaces_lagg_edit.php:173 msgid "Lagg protocol" msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:177 +#: src/usr/local/www/interfaces_lagg_edit.php:180 #, php-format msgid "Interface supplied as member (%s) is invalid" msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:181 +#: src/usr/local/www/interfaces_lagg_edit.php:184 msgid "Interface supplied as member is invalid" msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:185 +#: src/usr/local/www/interfaces_lagg_edit.php:188 msgid "Protocol supplied is invalid" msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:251 +#: src/usr/local/www/interfaces_lagg_edit.php:267 msgid "LAGG Configuration" msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:257 +#: src/usr/local/www/interfaces_lagg_edit.php:273 msgid "Parent Interfaces" msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:261 +#: src/usr/local/www/interfaces_lagg_edit.php:277 msgid "Choose the members that will be used for the link aggregation." msgstr "" -#: src/usr/local/www/interfaces_lagg_edit.php:265 -#: src/usr/local/www/status_interfaces.php:169 +#: src/usr/local/www/interfaces_lagg_edit.php:281 +#: src/usr/local/www/status_interfaces.php:172 msgid "LAGG Protocol" msgstr "" +#: src/usr/local/www/interfaces_lagg_edit.php:291 +msgid "Enter a description here for reference only (Not parsed)." +msgstr "" + #: src/usr/local/www/interfaces_ppps.php:89 msgid "" "This point-to-point link cannot be deleted because it is still being used as " @@ -15993,99 +16231,99 @@ msgstr "" msgid "Delete PPP interface" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:221 -#: src/usr/local/www/interfaces_ppps_edit.php:227 -#: src/usr/local/www/interfaces_ppps_edit.php:230 +#: src/usr/local/www/interfaces_ppps_edit.php:232 #: src/usr/local/www/interfaces_ppps_edit.php:238 #: src/usr/local/www/interfaces_ppps_edit.php:241 -#: src/usr/local/www/interfaces_ppps_edit.php:587 +#: src/usr/local/www/interfaces_ppps_edit.php:249 +#: src/usr/local/www/interfaces_ppps_edit.php:252 +#: src/usr/local/www/interfaces_ppps_edit.php:597 msgid "Link Interface(s)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:238 -#: src/usr/local/www/interfaces_ppps_edit.php:241 -#: src/usr/local/www/services_dhcp.php:827 +#: src/usr/local/www/interfaces_ppps_edit.php:249 +#: src/usr/local/www/interfaces_ppps_edit.php:252 +#: src/usr/local/www/services_dhcp.php:823 #: src/usr/local/www/services_dhcpv6.php:615 msgid "Subnet" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:246 +#: src/usr/local/www/interfaces_ppps_edit.php:257 msgid "Please choose a Link Type." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:256 -#: src/usr/local/www/services_captiveportal_vouchers.php:282 +#: src/usr/local/www/interfaces_ppps_edit.php:267 +#: src/usr/local/www/services_captiveportal_vouchers.php:283 #: src/usr/local/www/services_dyndns_edit.php:145 msgid "Password and confirmed password must match." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:259 +#: src/usr/local/www/interfaces_ppps_edit.php:270 msgid "" "Multilink connections (MLPPP) using the PPP link type is not currently " "supported. Please select only one Link Interface." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:262 +#: src/usr/local/www/interfaces_ppps_edit.php:273 msgid "The Service name contains invalid characters." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:265 +#: src/usr/local/www/interfaces_ppps_edit.php:276 msgid "Do not specify both a Service name and a NULL Service name." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:284 +#: src/usr/local/www/interfaces_ppps_edit.php:295 msgid "" "A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE " "Periodic reset fields." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:287 +#: src/usr/local/www/interfaces_ppps_edit.php:298 msgid "" "A valid PPPoE reset day of month must be specified (1-31) in the Custom " "PPPoE Periodic reset fields. No checks are done on valid # of days per month" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:290 +#: src/usr/local/www/interfaces_ppps_edit.php:301 msgid "" "A valid PPPoE reset year must be specified. Don't select a year in the past!" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:298 +#: src/usr/local/www/interfaces_ppps_edit.php:309 #, php-format msgid "A valid local IP address must be specified for %s." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:301 +#: src/usr/local/www/interfaces_ppps_edit.php:312 #, php-format msgid "A valid gateway IP address OR hostname must be specified for %s." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:304 +#: src/usr/local/www/interfaces_ppps_edit.php:315 #, php-format msgid "The bandwidth value for %s must be an integer." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:307 +#: src/usr/local/www/interfaces_ppps_edit.php:318 #, php-format msgid "The MTU for %s must be greater than 576 bytes." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:310 +#: src/usr/local/www/interfaces_ppps_edit.php:321 #, php-format msgid "The MRU for %s must be greater than 576 bytes." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:327 +#: src/usr/local/www/interfaces_ppps_edit.php:338 #, php-format msgid "" "The MTU (%d) is too big for %s (maximum allowed with current settings: %d)." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:466 +#: src/usr/local/www/interfaces_ppps_edit.php:476 msgid "Select" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:567 +#: src/usr/local/www/interfaces_ppps_edit.php:577 msgid "" "Bandwidth is set only for MLPPP connections and when links have different " "bandwidths<br />MTU defaults to 1492<br />MRU will be auto-negotiated by " @@ -16093,163 +16331,171 @@ msgid "" "default." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:578 +#: src/usr/local/www/interfaces_ppps_edit.php:588 msgid "Link Type" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:591 +#: src/usr/local/www/interfaces_ppps_edit.php:601 msgid "Select at least two interfaces for Multilink (MLPPP) connections." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:598 +#: src/usr/local/www/interfaces_ppps_edit.php:608 msgid "" -"You may enter a description here for your reference. Description will appear " -"in the \"Interfaces Assign\" select lists." +"A description may be entered here for administrative reference. Description " +"will appear in the \"Interfaces Assign\" select lists." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:640 +#: src/usr/local/www/interfaces_ppps_edit.php:650 msgid "IP/Gateway (" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:653 +#: src/usr/local/www/interfaces_ppps_edit.php:663 msgid "IP or Hostname" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:673 +#: src/usr/local/www/interfaces_ppps_edit.php:678 +msgid "Typically *99# for GSM networks and #777 for CDMA networks" +msgstr "" + +#: src/usr/local/www/interfaces_ppps_edit.php:683 msgid "Access Point Name (APN)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:680 +#: src/usr/local/www/interfaces_ppps_edit.php:690 msgid "APN number (optional)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:683 +#: src/usr/local/www/interfaces_ppps_edit.php:693 msgid "Defaults to 1 if APN is set. Ignored if no APN is set." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:687 +#: src/usr/local/www/interfaces_ppps_edit.php:697 msgid "SIM PIN" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:694 +#: src/usr/local/www/interfaces_ppps_edit.php:704 msgid "SIM PIN wait" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:697 +#: src/usr/local/www/interfaces_ppps_edit.php:707 msgid "" "Time to wait for SIM to discover network after PIN is sent to SIM (seconds)." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:701 +#: src/usr/local/www/interfaces_ppps_edit.php:711 msgid "Init string" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:704 +#: src/usr/local/www/interfaces_ppps_edit.php:714 msgid "" "Enter the modem initialization string here. Do NOT include the \"AT\" string " "at the beginning of the command. Many modern USB 3G modems don't need an " "initialization string." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:709 +#: src/usr/local/www/interfaces_ppps_edit.php:719 msgid "Connection Timeout" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:712 +#: src/usr/local/www/interfaces_ppps_edit.php:722 msgid "" "Enter timeout in seconds for connection to be established (sec.) Default is " "45 sec." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:716 +#: src/usr/local/www/interfaces_ppps_edit.php:726 msgid "Uptime logging" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:738 +#: src/usr/local/www/interfaces_ppps_edit.php:748 msgid "" "This field can usually be left empty. Service name will not be configured if " "this field is empty. Check the \"Configure NULL\" box to configure a blank " "Service name." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:745 +#: src/usr/local/www/interfaces_ppps_edit.php:755 msgid "Periodic Reset" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:754 +#: src/usr/local/www/interfaces_ppps_edit.php:762 +msgid "Select a reset timing type" +msgstr "" + +#: src/usr/local/www/interfaces_ppps_edit.php:764 msgid "Reset Date/Time" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:762 +#: src/usr/local/www/interfaces_ppps_edit.php:772 msgid "Hour" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:769 +#: src/usr/local/www/interfaces_ppps_edit.php:779 msgid "Minute" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:777 +#: src/usr/local/www/interfaces_ppps_edit.php:787 msgid "Specific date" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:779 +#: src/usr/local/www/interfaces_ppps_edit.php:789 msgid "" "Leaving the date field empty will cause the reset to be executed each day at " -"the time you specified in the minutes and hour fields. " +"the time specified in the minutes and hour fields. " msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:783 +#: src/usr/local/www/interfaces_ppps_edit.php:793 msgid "Reset frequency" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:822 -msgid "Show" +#: src/usr/local/www/interfaces_ppps_edit.php:840 +msgid "Advanced options" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:839 +#: src/usr/local/www/interfaces_ppps_edit.php:851 msgid "Dial On Demand" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:842 +#: src/usr/local/www/interfaces_ppps_edit.php:854 msgid "" -"Causes the interface to operate in dial-on-demand mode. Do NOT enable if you " -"want your link to be always up. The interface is configured, but the actual " -"connection of the link is delayed until qualifying outgoing traffic is " -"detected." +"Causes the interface to operate in dial-on-demand mode. Do NOT enable if the " +"link is to remain continuously connected. The interface is configured, but " +"the actual connection of the link is delayed until qualifying outgoing " +"traffic is detected." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:847 +#: src/usr/local/www/interfaces_ppps_edit.php:859 msgid "Idle Timeout" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:850 +#: src/usr/local/www/interfaces_ppps_edit.php:862 msgid "" "If no incoming or outgoing packets are transmitted for the entered number of " -"seconds the connection is brought down.When the idle timeout occurs, if the " +"seconds the connection is brought down. When the idle timeout occurs, if the " "dial-on-demand option is enabled, mpd goes back into dial-on-demand mode. " "Otherwise, the interface is brought down and all associated routes removed." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:856 +#: src/usr/local/www/interfaces_ppps_edit.php:868 #: src/usr/local/www/vpn_openvpn_client.php:730 #: src/usr/local/www/vpn_openvpn_server.php:952 msgid "Compression" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:859 +#: src/usr/local/www/interfaces_ppps_edit.php:871 msgid "" "Disable vjcomp(compression) (auto-negotiated by default).<br />This option " "enables Van Jacobson TCP header compression, which saves several bytes per " -"TCP data packet.This option is almost always required. Compression is not " +"TCP data packet. This option is almost always required. Compression is not " "effective for TCP connections with enabled modern extensions like time " "stamping or SACK, which modify TCP options between sequential packets." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:866 +#: src/usr/local/www/interfaces_ppps_edit.php:878 msgid "TCPmssFix" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:869 +#: src/usr/local/www/interfaces_ppps_edit.php:881 msgid "" "Causes mpd to adjust incoming and outgoing TCP SYN segments so that the " "requested maximum segment size is not greater than the amount allowed by the " @@ -16264,11 +16510,11 @@ msgid "" "outgoing data." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:877 +#: src/usr/local/www/interfaces_ppps_edit.php:889 msgid "ShortSeq" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:880 +#: src/usr/local/www/interfaces_ppps_edit.php:892 msgid "" "This option is only meaningful if multi-link PPP is negotiated. It " "proscribes shorter multi-link fragment headers, saving two bytes on every " @@ -16276,35 +16522,35 @@ msgid "" "multi-link." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:885 +#: src/usr/local/www/interfaces_ppps_edit.php:897 msgid "ACFComp" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:888 +#: src/usr/local/www/interfaces_ppps_edit.php:900 msgid "" "Address and control field compression. This option only applies to " "asynchronous link types. It saves two bytes per frame." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:892 +#: src/usr/local/www/interfaces_ppps_edit.php:904 msgid "ProtoComp" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:895 +#: src/usr/local/www/interfaces_ppps_edit.php:907 msgid "" "Protocol field compression. This option saves one byte per frame for most " "frames." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:901 +#: src/usr/local/www/interfaces_ppps_edit.php:913 msgid "Link Parameters (" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:922 +#: src/usr/local/www/interfaces_ppps_edit.php:934 msgid "MRU" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:929 +#: src/usr/local/www/interfaces_ppps_edit.php:941 msgid "MRRU" msgstr "" @@ -16347,14 +16593,11 @@ msgid "First level tag cannot be empty." msgstr "" #: src/usr/local/www/interfaces_qinq_edit.php:112 -msgid "" -"You are editing an existing entry and modifying the first level tag is not " -"allowed." +msgid "Modifying the first level tag of an existing entry is not allowed." msgstr "" #: src/usr/local/www/interfaces_qinq_edit.php:115 -msgid "" -"You are editing an existing entry and modifying the interface is not allowed." +msgid "Modifying the interface of an existing entry is not allowed." msgstr "" #: src/usr/local/www/interfaces_qinq_edit.php:120 @@ -16376,40 +16619,44 @@ msgstr "" msgid "QinQ VLANs group" msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:264 +#: src/usr/local/www/interfaces_qinq_edit.php:261 msgid "QinQ Configuration" msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:271 +#: src/usr/local/www/interfaces_qinq_edit.php:268 msgid "Only QinQ capable interfaces will be shown." msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:275 +#: src/usr/local/www/interfaces_qinq_edit.php:272 msgid "First level tag" msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:279 +#: src/usr/local/www/interfaces_qinq_edit.php:276 msgid "" "This is the first level VLAN tag. On top of this are stacked the member " "VLANs defined below." msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:283 +#: src/usr/local/www/interfaces_qinq_edit.php:280 msgid "Option(s)" msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:286 -msgid "Allows rules to be written more easily" +#: src/usr/local/www/interfaces_qinq_edit.php:283 +msgid "Allows rules to be written more easily." msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:296 +#: src/usr/local/www/interfaces_qinq_edit.php:293 msgid "Member(s)" msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:323 +#: src/usr/local/www/interfaces_qinq_edit.php:320 msgid "Tag(s)" msgstr "" +#: src/usr/local/www/interfaces_qinq_edit.php:344 +msgid "Add Tag" +msgstr "" + #: src/usr/local/www/interfaces_vlan.php:94 msgid "" "This VLAN cannot be deleted because it is still being used as an interface." @@ -16454,8 +16701,7 @@ msgid "Interface supplied as parent is invalid" msgstr "" #: src/usr/local/www/interfaces_vlan_edit.php:123 -msgid "" -"Interface is assigned and you cannot change the VLAN tag while assigned." +msgid "The VLAN tag cannot be changed while the interface is assigned." msgstr "" #: src/usr/local/www/interfaces_vlan_edit.php:133 @@ -16494,11 +16740,7 @@ msgstr "" msgid "802.1Q VLAN Priority (between 0 and 7)." msgstr "" -#: src/usr/local/www/interfaces_vlan_edit.php:245 -msgid "You may enter a group description here for your reference (not parsed)." -msgstr "" - -#: src/usr/local/www/interfaces_vlan_edit.php:250 +#: src/usr/local/www/interfaces_vlan_edit.php:249 msgid "vlanif" msgstr "" @@ -16672,6 +16914,7 @@ msgstr "" #: src/usr/local/www/license.php:214 src/usr/local/www/license.php:218 #: src/usr/local/www/license.php:222 src/usr/local/www/license.php:226 #: src/usr/local/www/license.php:230 src/usr/local/www/license.php:238 +#: src/usr/local/www/license.php:242 msgid "Copyright" msgstr "" @@ -16735,10 +16978,10 @@ msgstr "" #: src/usr/local/www/load_balancer_monitor.php:107 #: src/usr/local/www/load_balancer_monitor.php:128 -#: src/usr/local/www/load_balancer_monitor_edit.php:234 +#: src/usr/local/www/load_balancer_monitor_edit.php:236 #: src/usr/local/www/load_balancer_pool.php:142 #: src/usr/local/www/load_balancer_setting.php:141 -#: src/usr/local/www/load_balancer_virtual_server.php:142 +#: src/usr/local/www/load_balancer_virtual_server.php:162 msgid "Monitors" msgstr "" @@ -16754,7 +16997,7 @@ msgstr "" #: src/usr/local/www/load_balancer_pool.php:140 #: src/usr/local/www/load_balancer_pool_edit.php:219 #: src/usr/local/www/load_balancer_setting.php:139 -#: src/usr/local/www/load_balancer_virtual_server.php:140 +#: src/usr/local/www/load_balancer_virtual_server.php:160 #: src/usr/local/www/status_lb_pool.php:92 #: src/usr/local/www/status_lb_pool.php:148 #: src/usr/local/www/status_lb_vs.php:84 @@ -16764,9 +17007,9 @@ msgstr "" #: src/usr/local/www/load_balancer_monitor.php:127 #: src/usr/local/www/load_balancer_pool.php:141 #: src/usr/local/www/load_balancer_setting.php:140 -#: src/usr/local/www/load_balancer_virtual_server.php:121 #: src/usr/local/www/load_balancer_virtual_server.php:141 -#: src/usr/local/www/load_balancer_virtual_server.php:149 +#: src/usr/local/www/load_balancer_virtual_server.php:161 +#: src/usr/local/www/load_balancer_virtual_server.php:169 #: src/usr/local/www/load_balancer_virtual_server_edit.php:193 #: src/usr/local/www/status_lb_pool.php:149 #: src/usr/local/www/status_lb_vs.php:79 src/usr/local/www/status_lb_vs.php:85 @@ -16776,8 +17019,8 @@ msgstr "" #: src/usr/local/www/load_balancer_monitor.php:135 #: src/usr/local/www/load_balancer_pool.php:158 #: src/usr/local/www/load_balancer_pool_edit.php:107 -#: src/usr/local/www/load_balancer_pool_edit.php:397 -#: src/usr/local/www/load_balancer_pool_edit.php:403 +#: src/usr/local/www/load_balancer_pool_edit.php:389 +#: src/usr/local/www/load_balancer_pool_edit.php:395 #: src/usr/local/www/status_gateways.php:95 #: src/usr/local/www/status_lb_pool.php:165 msgid "Monitor" @@ -16795,106 +17038,107 @@ msgstr "" msgid "Delete monitor" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:96 +#: src/usr/local/www/load_balancer_monitor_edit.php:98 msgid "Load Balancer: Monitor:" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:125 +#: src/usr/local/www/load_balancer_monitor_edit.php:127 msgid "This monitor name has already been used. Monitor names must be unique." msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:130 +#: src/usr/local/www/load_balancer_monitor_edit.php:132 #: src/usr/local/www/load_balancer_pool_edit.php:119 #: src/usr/local/www/load_balancer_virtual_server_edit.php:123 -msgid "You cannot use spaces or slashes in the 'name' field." +msgid "Spaces or slashes cannot be used in the 'name' field." msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:134 +#: src/usr/local/www/load_balancer_monitor_edit.php:136 #: src/usr/local/www/load_balancer_pool_edit.php:123 msgid "The 'name' field must be 16 characters or less." msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:149 +#: src/usr/local/www/load_balancer_monitor_edit.php:151 #: src/usr/local/www/services_dhcp_edit.php:201 #: src/usr/local/www/services_dhcpv6_edit.php:151 msgid "The hostname can only contain the characters A-Z, 0-9 and '-'." msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:155 +#: src/usr/local/www/load_balancer_monitor_edit.php:157 msgid "HTTP(s) codes must be from RFC2616." msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:159 +#: src/usr/local/www/load_balancer_monitor_edit.php:161 msgid "The path to monitor must be set." msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:183 +#: src/usr/local/www/load_balancer_monitor_edit.php:185 #, php-format msgid "modified '%s' monitor:" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:238 +#: src/usr/local/www/load_balancer_monitor_edit.php:240 msgid "ICMP" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:238 +#: src/usr/local/www/load_balancer_monitor_edit.php:240 msgid "TCP" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:238 -#: src/usr/local/www/system_advanced_admin.php:345 +#: src/usr/local/www/load_balancer_monitor_edit.php:240 +#: src/usr/local/www/system_advanced_admin.php:347 msgid "HTTP" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:238 -#: src/usr/local/www/system_advanced_admin.php:353 +#: src/usr/local/www/load_balancer_monitor_edit.php:240 +#: src/usr/local/www/system_advanced_admin.php:355 msgid "HTTPS" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:238 +#: src/usr/local/www/load_balancer_monitor_edit.php:240 msgid "Send/Expect" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:302 +#: src/usr/local/www/load_balancer_monitor_edit.php:300 msgid "Edit Load Balancer - Monitor Entry" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:327 +#: src/usr/local/www/load_balancer_monitor_edit.php:325 msgid "HTTP Options" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:332 -#: src/usr/local/www/load_balancer_monitor_edit.php:358 +#: src/usr/local/www/load_balancer_monitor_edit.php:330 +#: src/usr/local/www/load_balancer_monitor_edit.php:356 msgid "Path" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:342 -#: src/usr/local/www/load_balancer_monitor_edit.php:368 +#: src/usr/local/www/load_balancer_monitor_edit.php:340 +#: src/usr/local/www/load_balancer_monitor_edit.php:366 msgid "Hostname for Host: header if needed." msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:346 +#: src/usr/local/www/load_balancer_monitor_edit.php:344 msgid "HTTP Code" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:353 -#: src/usr/local/www/services_captiveportal.php:1035 +#: src/usr/local/www/load_balancer_monitor_edit.php:351 +#: src/usr/local/www/services_captiveportal.php:1044 msgid "HTTPS Options" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:372 +#: src/usr/local/www/load_balancer_monitor_edit.php:370 msgid "HTTPS Code" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:379 +#: src/usr/local/www/load_balancer_monitor_edit.php:377 msgid "Send/Expect Options" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:384 +#: src/usr/local/www/load_balancer_monitor_edit.php:382 +#: src/usr/local/www/services_wol.php:189 msgid "Send" msgstr "" -#: src/usr/local/www/load_balancer_monitor_edit.php:391 +#: src/usr/local/www/load_balancer_monitor_edit.php:389 msgid "Expect" msgstr "" @@ -16905,18 +17149,18 @@ msgid "" msgstr "" #: src/usr/local/www/load_balancer_pool.php:149 -#: src/usr/local/www/load_balancer_virtual_server.php:158 +#: src/usr/local/www/load_balancer_virtual_server.php:178 #: src/usr/local/www/status_ipsec_leases.php:85 #: src/usr/local/www/widgets/widgets/load_balancer_status.widget.php:94 msgid "Pool" msgstr "" #: src/usr/local/www/load_balancer_pool.php:156 -#: src/usr/local/www/services_dhcp.php:908 +#: src/usr/local/www/services_dhcp.php:906 #: src/usr/local/www/status_lb_pool.php:164 #: src/usr/local/www/status_lb_vs.php:98 #: src/usr/local/www/vpn_openvpn_client.php:448 -#: src/usr/local/www/vpn_openvpn_csc.php:326 +#: src/usr/local/www/vpn_openvpn_csc.php:330 #: src/usr/local/www/vpn_openvpn_server.php:592 #: src/usr/local/www/vpn_openvpn_server.php:614 msgid "Servers" @@ -16941,7 +17185,7 @@ msgid "Load Balancer: Pool:" msgstr "" #: src/usr/local/www/load_balancer_pool_edit.php:107 -#: src/usr/local/www/vpn_openvpn_csc.php:349 +#: src/usr/local/www/vpn_openvpn_csc.php:353 msgid "Server List" msgstr "" @@ -17002,56 +17246,56 @@ msgstr "" msgid " modified '%s' pool:" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:343 +#: src/usr/local/www/load_balancer_pool_edit.php:335 msgid "Add/Edit Load Balancer - Pool Entry" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:357 +#: src/usr/local/www/load_balancer_pool_edit.php:349 msgid "Load Balance" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:358 +#: src/usr/local/www/load_balancer_pool_edit.php:350 msgid "Manual Failover" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:374 +#: src/usr/local/www/load_balancer_pool_edit.php:366 msgid "" -"This is the port your servers are listening on. You may also specify a port " -"alias listed in Firewall -> Aliases here." +"This is the port the servers are listening on. A port alias listed in " +"Firewall -> Aliases may also be specified here." msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:382 +#: src/usr/local/www/load_balancer_pool_edit.php:374 msgid "" "Optionally specify how many times to retry checking a server before " "declaring it down." msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:386 +#: src/usr/local/www/load_balancer_pool_edit.php:378 msgid "Add Item to the Pool" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:408 +#: src/usr/local/www/load_balancer_pool_edit.php:400 msgid "Server IP Address" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:418 +#: src/usr/local/www/load_balancer_pool_edit.php:410 msgid "Add to pool" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:425 +#: src/usr/local/www/load_balancer_pool_edit.php:419 msgid "Current Pool Members" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:453 +#: src/usr/local/www/load_balancer_pool_edit.php:447 msgid "Enabled (Default)" msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:475 -msgid "Move to enabled list >" +#: src/usr/local/www/load_balancer_pool_edit.php:473 +msgid "Move to enabled list" msgstr "" #: src/usr/local/www/load_balancer_pool_edit.php:480 -msgid "< Move to disabled list" +msgid "Move to disabled list" msgstr "" #: src/usr/local/www/load_balancer_setting.php:91 @@ -17077,7 +17321,7 @@ msgstr "" #: src/usr/local/www/load_balancer_setting.php:154 msgid "" "Set the global timeout in milliseconds for checks. Leave blank to use the " -"default value of 1000 ms" +"default value of 1000 ms." msgstr "" #: src/usr/local/www/load_balancer_setting.php:158 @@ -17087,7 +17331,7 @@ msgstr "" #: src/usr/local/www/load_balancer_setting.php:161 msgid "" "Set the interval in seconds at which the member of a pool will be checked. " -"Leave blank to use the default interval of 10 seconds" +"Leave blank to use the default interval of 10 seconds." msgstr "" #: src/usr/local/www/load_balancer_setting.php:165 @@ -17097,30 +17341,30 @@ msgstr "" #: src/usr/local/www/load_balancer_setting.php:168 msgid "" "Number of processes forked in advance by relayd. Leave blank to use the " -"default value of 5 processes" +"default value of 5 processes." msgstr "" -#: src/usr/local/www/load_balancer_virtual_server.php:135 +#: src/usr/local/www/load_balancer_virtual_server.php:155 msgid "The virtual server configuration has been changed." msgstr "" -#: src/usr/local/www/load_balancer_virtual_server.php:159 +#: src/usr/local/www/load_balancer_virtual_server.php:179 msgid "Fallback pool" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server.php:179 +#: src/usr/local/www/load_balancer_virtual_server.php:212 msgid "Edit virtual server" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server.php:180 +#: src/usr/local/www/load_balancer_virtual_server.php:213 msgid "Copy virtual server" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server.php:181 +#: src/usr/local/www/load_balancer_virtual_server.php:214 msgid "Delete virtual server" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server.php:190 +#: src/usr/local/www/load_balancer_virtual_server.php:223 msgid "No virtual servers have been configured." msgstr "" @@ -17129,7 +17373,7 @@ msgid "Load Balancer: Virtual Server:" msgstr "" #: src/usr/local/www/load_balancer_virtual_server_edit.php:109 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:287 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:288 msgid "Relay Protocol" msgstr "" @@ -17163,7 +17407,7 @@ msgid "The submitted relay protocol is not valid." msgstr "" #: src/usr/local/www/load_balancer_virtual_server_edit.php:145 -msgid "You cannot select a Fall Back Pool when using the DNS relay protocol." +msgid "A Fall Back Pool cannot be selected when using the DNS relay protocol." msgstr "" #: src/usr/local/www/load_balancer_virtual_server_edit.php:154 @@ -17176,40 +17420,39 @@ msgstr "" msgid "created '%s' vs:" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server_edit.php:204 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:206 msgid "Edit Load Balancer - Virtual Server Entry" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server_edit.php:225 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:227 msgid "" -"This is normally the WAN IP address that you would like the server to listen " -"on. All connections to this IP and port will be forwarded to the pool " -"cluster. You may also specify a host alias listed in Firewall -> Aliases " -"here." +"This is normally the WAN IP address for the server to listen on. All " +"connections to this IP and port will be forwarded to the pool cluster. A " +"host alias listed in Firewall -> Aliases may also be specified here." msgstr "" -#: src/usr/local/www/load_balancer_virtual_server_edit.php:234 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:236 msgid "" "Port that the clients will connect to. All connections to this port will be " "forwarded to the pool cluster. If left blank listening ports from the pool " -"will be used.You may also specify a port alias listed in Firewall -> " -"Aliases here." +"will be used. A port alias listed in Firewall -> Aliases may also be " +"specified here." msgstr "" -#: src/usr/local/www/load_balancer_virtual_server_edit.php:240 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:252 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:242 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:254 msgid "Virtual Server Pool" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server_edit.php:260 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:272 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:262 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:273 msgid "Fall-back Pool" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server_edit.php:304 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:305 msgid "" -"Don't forget to add a firewall rule for the virtual server/pool after you " -"have finished setting it up." +"Don't forget to add a firewall rule for the virtual server/pool after " +"finished setting it up." msgstr "" #: src/usr/local/www/pkg.php:73 src/usr/local/www/pkg.php:202 @@ -17251,7 +17494,7 @@ msgid "Saving changes..." msgstr "" #: src/usr/local/www/pkg.php:295 -msgid "Do you really want to save changes?" +msgid "Confirmation Required to save changes." msgstr "" #: src/usr/local/www/pkg.php:354 @@ -17266,54 +17509,53 @@ msgstr "" msgid "Filter text: " msgstr "" -#: src/usr/local/www/pkg.php:409 +#: src/usr/local/www/pkg.php:413 #, php-format msgid "Displaying page %1$s of %2$s" msgstr "" -#: src/usr/local/www/pkg.php:410 +#: src/usr/local/www/pkg.php:414 msgid "Rows per page: " msgstr "" -#: src/usr/local/www/pkg.php:538 +#: src/usr/local/www/pkg.php:547 msgid "Edit this item" msgstr "" -#: src/usr/local/www/pkg.php:543 +#: src/usr/local/www/pkg.php:552 msgid "Delete this item" msgstr "" -#: src/usr/local/www/pkg.php:567 +#: src/usr/local/www/pkg.php:576 msgid "Previous page" msgstr "" -#: src/usr/local/www/pkg.php:580 +#: src/usr/local/www/pkg.php:589 msgid "Next page" msgstr "" -#: src/usr/local/www/pkg.php:598 +#: src/usr/local/www/pkg.php:607 msgid "Add a new item" msgstr "" -#: src/usr/local/www/pkg_edit.php:661 +#: src/usr/local/www/pkg_edit.php:674 msgid "Advanced Features" msgstr "" -#: src/usr/local/www/pkg_edit.php:739 src/usr/local/www/services_dhcp.php:789 +#: src/usr/local/www/pkg_edit.php:755 src/usr/local/www/services_dhcp.php:785 msgid "General Options" msgstr "" -#: src/usr/local/www/pkg_edit.php:1198 +#: src/usr/local/www/pkg_edit.php:1214 msgid "Listen on All interfaces/ip addresses " msgstr "" -#: src/usr/local/www/pkg_edit.php:1202 +#: src/usr/local/www/pkg_edit.php:1218 msgid "loopback" msgstr "" -#: src/usr/local/www/pkg_edit.php:1486 -#: src/usr/local/www/interfaces_bridge_edit.php:437 -msgid "Show advanced options" +#: src/usr/local/www/pkg_edit.php:1518 +msgid "Show Advanced Options" msgstr "" #: src/usr/local/www/pkg_mgr.php:116 @@ -17321,13 +17563,13 @@ msgid "Visit official website" msgstr "" #: src/usr/local/www/pkg_mgr.php:125 -#: src/usr/local/www/pkg_mgr_installed.php:169 +#: src/usr/local/www/pkg_mgr_installed.php:180 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:140 msgid "View changelog" msgstr "" #: src/usr/local/www/pkg_mgr.php:136 -#: src/usr/local/www/pkg_mgr_installed.php:178 +#: src/usr/local/www/pkg_mgr_installed.php:191 msgid "Package Dependencies" msgstr "" @@ -17336,21 +17578,21 @@ msgid "Click to install" msgstr "" #: src/usr/local/www/pkg_mgr.php:150 -#: src/usr/local/www/pkg_mgr_installed.php:194 +#: src/usr/local/www/pkg_mgr_installed.php:212 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:160 msgid "View more information" msgstr "" #: src/usr/local/www/pkg_mgr.php:163 src/usr/local/www/pkg_mgr.php:168 -#: src/usr/local/www/pkg_mgr_install.php:246 -#: src/usr/local/www/pkg_mgr_installed.php:80 +#: src/usr/local/www/pkg_mgr_install.php:253 +#: src/usr/local/www/pkg_mgr_installed.php:247 msgid "Available Packages" msgstr "" -#: src/usr/local/www/pkg_mgr.php:167 src/usr/local/www/pkg_mgr_install.php:245 -#: src/usr/local/www/pkg_mgr_installed.php:75 -#: src/usr/local/www/pkg_mgr_installed.php:79 -#: src/usr/local/www/pkg_mgr_installed.php:96 +#: src/usr/local/www/pkg_mgr.php:167 src/usr/local/www/pkg_mgr_install.php:252 +#: src/usr/local/www/pkg_mgr_installed.php:105 +#: src/usr/local/www/pkg_mgr_installed.php:242 +#: src/usr/local/www/pkg_mgr_installed.php:246 #: src/usr/local/www/widgets/include/installed_packages.inc:4 msgid "Installed Packages" msgstr "" @@ -17370,236 +17612,243 @@ msgid "" msgstr "" #: src/usr/local/www/pkg_mgr.php:207 +#: src/usr/local/www/pkg_mgr_installed.php:253 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:180 msgid "Packages" msgstr "" #: src/usr/local/www/pkg_mgr.php:210 +#: src/usr/local/www/pkg_mgr_installed.php:256 msgid "Please wait while the list of packages is retrieved and formatted." msgstr "" #: src/usr/local/www/pkg_mgr.php:214 +#: src/usr/local/www/pkg_mgr_installed.php:260 msgid "Unable to retrieve package information." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:146 +#: src/usr/local/www/pkg_mgr_install.php:154 msgid "Failed" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:240 -#: src/usr/local/www/pkg_mgr_install.php:241 -#: src/usr/local/www/system_update_settings.php:117 +#: src/usr/local/www/pkg_mgr_install.php:247 +#: src/usr/local/www/pkg_mgr_install.php:248 +#: src/usr/local/www/system_update_settings.php:155 msgid "System Update" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:242 -#: src/usr/local/www/system_update_settings.php:99 -#: src/usr/local/www/system_update_settings.php:118 +#: src/usr/local/www/pkg_mgr_install.php:249 +#: src/usr/local/www/system_update_settings.php:111 +#: src/usr/local/www/system_update_settings.php:156 msgid "Update Settings" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:244 -#: src/usr/local/www/pkg_mgr_install.php:247 +#: src/usr/local/www/pkg_mgr_install.php:251 +#: src/usr/local/www/pkg_mgr_install.php:254 msgid "Package Installer" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:278 +#: src/usr/local/www/pkg_mgr_install.php:285 #, php-format -msgid "Are you sure you want to reinstall package %s?" +msgid "Confirmation Required to reinstall package %s." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:281 +#: src/usr/local/www/pkg_mgr_install.php:288 #, php-format -msgid "Are you sure you want to remove package %s?" +msgid "Confirmation Required to remove package %s." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:285 +#: src/usr/local/www/pkg_mgr_install.php:292 #, php-format -msgid "Are you sure you want to install package %s?" +msgid "Confirmation Required to install package %s." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:295 -msgid "Are you sure you want to reinstall all packages?" +#: src/usr/local/www/pkg_mgr_install.php:302 +msgid "Confirmation Required to reinstall all packages." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:299 +#: src/usr/local/www/pkg_mgr_install.php:306 #, php-format -msgid "Are you sure you want to upgrade package %1$s from %2$s to %3$s?" +msgid "Confirmation Required to upgrade package %1$s from %2$s to %3$s." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:303 +#: src/usr/local/www/pkg_mgr_install.php:310 #, php-format -msgid "Are you sure you want to update %s system?" +msgid "Confirmation Required to update %s system." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:321 +#: src/usr/local/www/pkg_mgr_install.php:328 msgid "Current Base System" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:330 +#: src/usr/local/www/pkg_mgr_install.php:336 msgid "Latest Base System" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:341 -msgid "Confirm Update" -msgstr "" - -#: src/usr/local/www/pkg_mgr_install.php:355 -msgid "System is up to date" +#: src/usr/local/www/pkg_mgr_install.php:344 +msgid "Retrieving" msgstr "" #: src/usr/local/www/pkg_mgr_install.php:373 msgid "Unable to retrieve system versions." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:386 +#: src/usr/local/www/pkg_mgr_install.php:387 msgid "Package Removal" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:387 +#: src/usr/local/www/pkg_mgr_install.php:388 #, php-format msgid "<b>%1$s</b> removal successfully completed." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:388 +#: src/usr/local/www/pkg_mgr_install.php:389 #, php-format msgid "<b>%1$s</b> removal failed!" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:389 +#: src/usr/local/www/pkg_mgr_install.php:390 #, php-format msgid "Please wait while the removal of <b>%1$s</b> completes." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:391 +#: src/usr/local/www/pkg_mgr_install.php:392 msgid "Package Reinstallation" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:392 +#: src/usr/local/www/pkg_mgr_install.php:393 #, php-format msgid "<b>%1$s</b> reinstallation successfully completed." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:393 +#: src/usr/local/www/pkg_mgr_install.php:394 #, php-format msgid "<b>%1$s</b> reinstallation failed!" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:394 +#: src/usr/local/www/pkg_mgr_install.php:395 #, php-format msgid "Please wait while the reinstallation of <b>%1$s</b> completes." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:396 +#: src/usr/local/www/pkg_mgr_install.php:397 msgid "Package Installation" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:397 +#: src/usr/local/www/pkg_mgr_install.php:398 #, php-format msgid "<b>%1$s</b> installation successfully completed." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:398 +#: src/usr/local/www/pkg_mgr_install.php:399 #, php-format msgid "<b>%1$s</b> installation failed!" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:399 +#: src/usr/local/www/pkg_mgr_install.php:400 #, php-format msgid "Please wait while the installation of <b>%1$s</b> completes." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:425 +#: src/usr/local/www/pkg_mgr_install.php:426 msgid "Updating System" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:445 +#: src/usr/local/www/pkg_mgr_install.php:446 msgid "Creating restore point before package installation." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:519 +#: src/usr/local/www/pkg_mgr_install.php:482 +msgid "Up to date." +msgstr "" + +#: src/usr/local/www/pkg_mgr_install.php:483 +msgid "Confirm Update" +msgstr "" + +#: src/usr/local/www/pkg_mgr_install.php:525 msgid "System update successfully completed." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:524 +#: src/usr/local/www/pkg_mgr_install.php:530 msgid "Reinstallation of all packages successfully completed." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:537 +#: src/usr/local/www/pkg_mgr_install.php:543 msgid "Reinstallation of all packages failed." msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:547 -#: src/usr/local/www/pkg_mgr_install.php:550 +#: src/usr/local/www/pkg_mgr_install.php:553 +#: src/usr/local/www/pkg_mgr_install.php:556 msgid "This may take several minutes!" msgstr "" -#: src/usr/local/www/pkg_mgr_install.php:549 +#: src/usr/local/www/pkg_mgr_install.php:555 msgid "Please wait while the reinstallation of all packages completes." msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:93 -msgid "There are no packages currently installed." -msgstr "" - -#: src/usr/local/www/pkg_mgr_installed.php:103 +#: src/usr/local/www/pkg_mgr_installed.php:112 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:83 msgid "Category" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:126 +#: src/usr/local/www/pkg_mgr_installed.php:135 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:103 msgid "Package is configured, but not installed!" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:132 +#: src/usr/local/www/pkg_mgr_installed.php:141 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:109 #, php-format msgid "Newer than available (%s)" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:135 +#: src/usr/local/www/pkg_mgr_installed.php:144 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:113 #, php-format msgid "Upgrade available to %s" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:141 +#: src/usr/local/www/pkg_mgr_installed.php:150 msgid "Up-to-date" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:143 +#: src/usr/local/www/pkg_mgr_installed.php:152 #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:124 msgid "Error comparing version" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:186 +#: src/usr/local/www/pkg_mgr_installed.php:200 #, php-format msgid "Remove package %s" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:188 +#: src/usr/local/www/pkg_mgr_installed.php:204 #, php-format msgid "Update package %s" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:190 +#: src/usr/local/www/pkg_mgr_installed.php:207 #, php-format msgid "Reinstall package %s" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:208 +#: src/usr/local/www/pkg_mgr_installed.php:228 msgid "Current" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:215 +#: src/usr/local/www/pkg_mgr_installed.php:235 msgid "Newer version available" msgstr "" -#: src/usr/local/www/pkg_mgr_installed.php:216 +#: src/usr/local/www/pkg_mgr_installed.php:236 msgid "Package is configured but not (fully) installed" msgstr "" +#: src/usr/local/www/pkg_mgr_installed.php:264 +msgid "There are no packages currently installed." +msgstr "" + #: src/usr/local/www/restart_httpd.php:66 msgid "Restarting httpd" msgstr "" @@ -17620,179 +17869,179 @@ msgstr "" msgid "Restarting mini_httpd" msgstr "" -#: src/usr/local/www/services_captiveportal.php:116 +#: src/usr/local/www/services_captiveportal.php:117 #, php-format msgid "Captive Portal: zone %s: Restore default portal page" msgstr "" -#: src/usr/local/www/services_captiveportal.php:136 +#: src/usr/local/www/services_captiveportal.php:137 #, php-format msgid "Captive Portal: zone %s: Restore default error page" msgstr "" -#: src/usr/local/www/services_captiveportal.php:156 +#: src/usr/local/www/services_captiveportal.php:157 #, php-format msgid "Captive Portal: zone %s: Restore default logout page" msgstr "" -#: src/usr/local/www/services_captiveportal.php:246 +#: src/usr/local/www/services_captiveportal.php:247 #: src/usr/local/www/services_captiveportal_zones_edit.php:83 -#: src/usr/local/www/services_captiveportal_zones_edit.php:126 +#: src/usr/local/www/services_captiveportal_zones_edit.php:123 msgid "Zone name" msgstr "" -#: src/usr/local/www/services_captiveportal.php:250 +#: src/usr/local/www/services_captiveportal.php:251 msgid "RADIUS Protocol" msgstr "" -#: src/usr/local/www/services_captiveportal.php:252 +#: src/usr/local/www/services_captiveportal.php:253 msgid "Primary RADIUS server IP address" msgstr "" -#: src/usr/local/www/services_captiveportal.php:261 +#: src/usr/local/www/services_captiveportal.php:262 #, php-format msgid "" "The captive portal cannot be used on interface %s since it is part of a " "bridge." msgstr "" -#: src/usr/local/www/services_captiveportal.php:266 +#: src/usr/local/www/services_captiveportal.php:267 #, php-format msgid "" "The captive portal cannot be used on interface %s since it is used already " "on %s instance." msgstr "" -#: src/usr/local/www/services_captiveportal.php:275 +#: src/usr/local/www/services_captiveportal.php:276 msgid "Certificate must be specified for HTTPS login." msgstr "" -#: src/usr/local/www/services_captiveportal.php:278 +#: src/usr/local/www/services_captiveportal.php:279 msgid "The HTTPS server name must be specified for HTTPS login." msgstr "" -#: src/usr/local/www/services_captiveportal.php:285 +#: src/usr/local/www/services_captiveportal.php:286 msgid "The timeout must be at least 1 minute." msgstr "" -#: src/usr/local/www/services_captiveportal.php:301 +#: src/usr/local/www/services_captiveportal.php:302 msgid "" "Hard timeout must be less than or equal to the Default lease time set on " "DHCP Server" msgstr "" -#: src/usr/local/www/services_captiveportal.php:308 +#: src/usr/local/www/services_captiveportal.php:309 msgid "The idle timeout must be at least 1 minute." msgstr "" -#: src/usr/local/www/services_captiveportal.php:312 +#: src/usr/local/www/services_captiveportal.php:313 msgid "The pass-through credit count must be a number or left blank." msgstr "" -#: src/usr/local/www/services_captiveportal.php:315 +#: src/usr/local/www/services_captiveportal.php:316 msgid "" "The waiting period to restore pass-through credits must be above 0 hours." msgstr "" -#: src/usr/local/www/services_captiveportal.php:320 -#: src/usr/local/www/services_captiveportal.php:324 -#: src/usr/local/www/services_captiveportal.php:328 -#: src/usr/local/www/services_captiveportal.php:332 -#: src/usr/local/www/services_captiveportal_ip_edit.php:132 +#: src/usr/local/www/services_captiveportal.php:321 +#: src/usr/local/www/services_captiveportal.php:325 +#: src/usr/local/www/services_captiveportal.php:329 +#: src/usr/local/www/services_captiveportal.php:333 +#: src/usr/local/www/services_captiveportal_ip_edit.php:134 #, php-format msgid "A valid IP address must be specified. [%s]" msgstr "" -#: src/usr/local/www/services_captiveportal.php:336 -#: src/usr/local/www/services_captiveportal.php:340 -#: src/usr/local/www/services_captiveportal.php:344 -#: src/usr/local/www/services_captiveportal.php:348 -#: src/usr/local/www/services_captiveportal.php:352 +#: src/usr/local/www/services_captiveportal.php:337 +#: src/usr/local/www/services_captiveportal.php:341 +#: src/usr/local/www/services_captiveportal.php:345 +#: src/usr/local/www/services_captiveportal.php:349 +#: src/usr/local/www/services_captiveportal.php:353 #, php-format msgid "A valid port number must be specified. [%s]" msgstr "" -#: src/usr/local/www/services_captiveportal.php:356 +#: src/usr/local/www/services_captiveportal.php:357 msgid "" "The maximum number of concurrent connections per client IP address may not " "be larger than the global maximum." msgstr "" -#: src/usr/local/www/services_captiveportal.php:360 +#: src/usr/local/www/services_captiveportal.php:361 msgid "" "The NAS-Identifier must be 3-253 characters long and should only contain " "ASCII characters." msgstr "" -#: src/usr/local/www/services_captiveportal.php:563 -#: src/usr/local/www/services_captiveportal_filemanager.php:173 -#: src/usr/local/www/services_captiveportal_hostname.php:139 -#: src/usr/local/www/services_captiveportal_ip.php:132 -#: src/usr/local/www/services_captiveportal_mac.php:91 -#: src/usr/local/www/services_captiveportal_mac.php:197 -#: src/usr/local/www/services_captiveportal_mac_edit.php:101 -#: src/usr/local/www/services_captiveportal_vouchers.php:439 -msgid "MACs" -msgstr "" - #: src/usr/local/www/services_captiveportal.php:564 #: src/usr/local/www/services_captiveportal_filemanager.php:174 #: src/usr/local/www/services_captiveportal_hostname.php:140 -#: src/usr/local/www/services_captiveportal_ip.php:94 #: src/usr/local/www/services_captiveportal_ip.php:133 -#: src/usr/local/www/services_captiveportal_ip_edit.php:98 +#: src/usr/local/www/services_captiveportal_mac.php:92 #: src/usr/local/www/services_captiveportal_mac.php:198 +#: src/usr/local/www/services_captiveportal_mac_edit.php:102 #: src/usr/local/www/services_captiveportal_vouchers.php:440 -msgid "Allowed IP Addresses" +msgid "MACs" msgstr "" #: src/usr/local/www/services_captiveportal.php:565 #: src/usr/local/www/services_captiveportal_filemanager.php:175 -#: src/usr/local/www/services_captiveportal_hostname.php:95 #: src/usr/local/www/services_captiveportal_hostname.php:141 -#: src/usr/local/www/services_captiveportal_hostname_edit.php:96 +#: src/usr/local/www/services_captiveportal_ip.php:95 #: src/usr/local/www/services_captiveportal_ip.php:134 +#: src/usr/local/www/services_captiveportal_ip_edit.php:99 #: src/usr/local/www/services_captiveportal_mac.php:199 #: src/usr/local/www/services_captiveportal_vouchers.php:441 -msgid "Allowed Hostnames" +msgid "Allowed IP Addresses" msgstr "" #: src/usr/local/www/services_captiveportal.php:566 #: src/usr/local/www/services_captiveportal_filemanager.php:176 +#: src/usr/local/www/services_captiveportal_hostname.php:96 #: src/usr/local/www/services_captiveportal_hostname.php:142 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:98 #: src/usr/local/www/services_captiveportal_ip.php:135 #: src/usr/local/www/services_captiveportal_mac.php:200 -#: src/usr/local/www/services_captiveportal_vouchers.php:111 #: src/usr/local/www/services_captiveportal_vouchers.php:442 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:86 -#: src/usr/local/www/status_captiveportal_expire.php:114 -#: src/usr/local/www/status_captiveportal_test.php:122 -msgid "Vouchers" +msgid "Allowed Hostnames" msgstr "" #: src/usr/local/www/services_captiveportal.php:567 -#: src/usr/local/www/services_captiveportal_filemanager.php:99 #: src/usr/local/www/services_captiveportal_filemanager.php:177 #: src/usr/local/www/services_captiveportal_hostname.php:143 #: src/usr/local/www/services_captiveportal_ip.php:136 #: src/usr/local/www/services_captiveportal_mac.php:201 +#: src/usr/local/www/services_captiveportal_vouchers.php:112 #: src/usr/local/www/services_captiveportal_vouchers.php:443 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:87 +#: src/usr/local/www/status_captiveportal_expire.php:115 +#: src/usr/local/www/status_captiveportal_test.php:123 +msgid "Vouchers" +msgstr "" + +#: src/usr/local/www/services_captiveportal.php:568 +#: src/usr/local/www/services_captiveportal_filemanager.php:100 +#: src/usr/local/www/services_captiveportal_filemanager.php:178 +#: src/usr/local/www/services_captiveportal_hostname.php:144 +#: src/usr/local/www/services_captiveportal_ip.php:137 +#: src/usr/local/www/services_captiveportal_mac.php:202 +#: src/usr/local/www/services_captiveportal_vouchers.php:444 msgid "File Manager" msgstr "" -#: src/usr/local/www/services_captiveportal.php:573 +#: src/usr/local/www/services_captiveportal.php:574 msgid "Captive Portal Configuration" msgstr "" -#: src/usr/local/www/services_captiveportal.php:588 +#: src/usr/local/www/services_captiveportal.php:589 msgid "Select the interface(s) to enable for captive portal." msgstr "" -#: src/usr/local/www/services_captiveportal.php:592 +#: src/usr/local/www/services_captiveportal.php:593 msgid "Maximum concurrent connections" msgstr "" -#: src/usr/local/www/services_captiveportal.php:596 +#: src/usr/local/www/services_captiveportal.php:597 msgid "" "Limits the number of concurrent connections to the captive portal HTTP(S) " "server. This does not set how many users can be logged in to the captive " @@ -17800,32 +18049,32 @@ msgid "" "portal web server." msgstr "" -#: src/usr/local/www/services_captiveportal.php:601 +#: src/usr/local/www/services_captiveportal.php:602 msgid "Idle timeout (Minutes)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:604 +#: src/usr/local/www/services_captiveportal.php:605 msgid "" "Clients will be disconnected after this amount of inactivity. They may log " "in again immediately, though. Leave this field blank for no idle timeout." msgstr "" -#: src/usr/local/www/services_captiveportal.php:608 +#: src/usr/local/www/services_captiveportal.php:609 msgid "Hard timeout (Minutes)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:611 +#: src/usr/local/www/services_captiveportal.php:612 msgid "" "Clients will be disconnected after this amount of time, regardless of " "activity. They may log in again immediately, though. Leave this field blank " "for no hard timeout (not recommended unless an idle timeout is set)." msgstr "" -#: src/usr/local/www/services_captiveportal.php:616 +#: src/usr/local/www/services_captiveportal.php:617 msgid "Pass-through credits per MAC address." msgstr "" -#: src/usr/local/www/services_captiveportal.php:619 +#: src/usr/local/www/services_captiveportal.php:620 msgid "" "Allows passing through the captive portal without authentication a limited " "number of times per MAC address. Once used up, the client can only log in " @@ -17834,72 +18083,83 @@ msgid "" "to be effective." msgstr "" -#: src/usr/local/www/services_captiveportal.php:625 +#: src/usr/local/www/services_captiveportal.php:626 +msgid "Waiting period to restore pass-through credits. (Hours)" +msgstr "" + +#: src/usr/local/www/services_captiveportal.php:629 +msgid "" +"Clients will have their available pass-through credits restored to the " +"original count after this amount of time since using the first one. This " +"must be above 0 hours if pass-through credits are enabled." +msgstr "" + +#: src/usr/local/www/services_captiveportal.php:634 msgid "Reset waiting period" msgstr "" -#: src/usr/local/www/services_captiveportal.php:628 +#: src/usr/local/www/services_captiveportal.php:637 msgid "" "If enabled, the waiting period is reset to the original duration if access " "is attempted when all pass-through credits have already been exhausted." msgstr "" -#: src/usr/local/www/services_captiveportal.php:632 +#: src/usr/local/www/services_captiveportal.php:641 msgid "Logout popup window" msgstr "" -#: src/usr/local/www/services_captiveportal.php:635 +#: src/usr/local/www/services_captiveportal.php:644 msgid "" "If enabled, a popup window will appear when clients are allowed through the " "captive portal. This allows clients to explicitly disconnect themselves " "before the idle or hard timeout occurs." msgstr "" -#: src/usr/local/www/services_captiveportal.php:640 +#: src/usr/local/www/services_captiveportal.php:649 msgid "Pre-authentication redirect URL" msgstr "" -#: src/usr/local/www/services_captiveportal.php:643 +#: src/usr/local/www/services_captiveportal.php:652 msgid "" "Use this field to set $PORTAL_REDIRURL$ variable which can be accessed using " -"your custom captive portal index.php page or error pages." +"the custom captive portal index.php page or error pages." msgstr "" -#: src/usr/local/www/services_captiveportal.php:647 +#: src/usr/local/www/services_captiveportal.php:656 msgid "After authentication Redirection URL" msgstr "" -#: src/usr/local/www/services_captiveportal.php:650 +#: src/usr/local/www/services_captiveportal.php:659 msgid "" "Clients will be redirected to this URL instead of the one they initially " -"tried to access after they've authenticated" +"tried to access after they've authenticated." msgstr "" -#: src/usr/local/www/services_captiveportal.php:654 +#: src/usr/local/www/services_captiveportal.php:663 msgid "Blocked MAC address redirect URL" msgstr "" -#: src/usr/local/www/services_captiveportal.php:657 +#: src/usr/local/www/services_captiveportal.php:666 msgid "" "Blocked MAC addresses will be redirected to this URL when attempting access." msgstr "" -#: src/usr/local/www/services_captiveportal.php:661 +#: src/usr/local/www/services_captiveportal.php:670 msgid "Concurrent user logins" msgstr "" -#: src/usr/local/www/services_captiveportal.php:664 +#: src/usr/local/www/services_captiveportal.php:673 msgid "" "If enabled only the most recent login per username will be active. " "Subsequent logins will cause machines previously logged in with the same " "username to be disconnected." msgstr "" -#: src/usr/local/www/services_captiveportal.php:669 +#: src/usr/local/www/services_captiveportal.php:678 msgid "MAC filtering" msgstr "" -#: src/usr/local/www/services_captiveportal.php:672 +#: src/usr/local/www/services_captiveportal.php:681 msgid "" "If enabled no attempts will be made to ensure that the MAC address of " "clients stays the same while they are logged in. This is required when the " @@ -17908,99 +18168,99 @@ msgid "" "authentication cannot be used." msgstr "" -#: src/usr/local/www/services_captiveportal.php:678 +#: src/usr/local/www/services_captiveportal.php:687 msgid "Pass-through MAC Auto Entry" msgstr "" -#: src/usr/local/www/services_captiveportal.php:697 +#: src/usr/local/www/services_captiveportal.php:706 msgid "Per-user bandwidth restriction" msgstr "" -#: src/usr/local/www/services_captiveportal.php:704 +#: src/usr/local/www/services_captiveportal.php:713 msgid "Default download (Kbit/s)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:711 +#: src/usr/local/www/services_captiveportal.php:720 msgid "Default upload (Kbit/s)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:714 +#: src/usr/local/www/services_captiveportal.php:723 msgid "" "If this option is set, the captive portal will restrict each user who logs " "in to the specified default bandwidth. RADIUS can override the default " "settings. Leave empty or set to 0 for no limit." msgstr "" -#: src/usr/local/www/services_captiveportal.php:722 +#: src/usr/local/www/services_captiveportal.php:731 msgid "Authentication method" msgstr "" -#: src/usr/local/www/services_captiveportal.php:757 +#: src/usr/local/www/services_captiveportal.php:766 msgid "RADIUS protocol" msgstr "" -#: src/usr/local/www/services_captiveportal.php:796 +#: src/usr/local/www/services_captiveportal.php:805 msgid "Primary Authentication Source" msgstr "" -#: src/usr/local/www/services_captiveportal.php:799 -#: src/usr/local/www/services_captiveportal.php:852 +#: src/usr/local/www/services_captiveportal.php:808 +#: src/usr/local/www/services_captiveportal.php:861 msgid "Primary RADIUS server" msgstr "" -#: src/usr/local/www/services_captiveportal.php:823 -#: src/usr/local/www/services_captiveportal.php:876 +#: src/usr/local/www/services_captiveportal.php:832 +#: src/usr/local/www/services_captiveportal.php:885 msgid "Secondary RADIUS server" msgstr "" -#: src/usr/local/www/services_captiveportal.php:829 -#: src/usr/local/www/services_captiveportal.php:882 +#: src/usr/local/www/services_captiveportal.php:838 +#: src/usr/local/www/services_captiveportal.php:891 msgid "IP address of the RADIUS server to authenticate against." msgstr "" -#: src/usr/local/www/services_captiveportal.php:836 -#: src/usr/local/www/services_captiveportal.php:889 +#: src/usr/local/www/services_captiveportal.php:845 +#: src/usr/local/www/services_captiveportal.php:898 msgid "RADIUS port. Leave blank for default (1812)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:843 -#: src/usr/local/www/services_captiveportal.php:896 +#: src/usr/local/www/services_captiveportal.php:852 +#: src/usr/local/www/services_captiveportal.php:905 msgid "" "RADIUS shared secret. Leave blank to not use a shared secret (not " "recommended)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:849 +#: src/usr/local/www/services_captiveportal.php:858 msgid "Secondary Authentication Source" msgstr "" -#: src/usr/local/www/services_captiveportal.php:906 +#: src/usr/local/www/services_captiveportal.php:915 #: src/usr/local/www/services_pppoe_edit.php:403 -#: src/usr/local/www/vpn_l2tp.php:326 +#: src/usr/local/www/vpn_l2tp.php:323 msgid "RADIUS" msgstr "" -#: src/usr/local/www/services_captiveportal.php:913 +#: src/usr/local/www/services_captiveportal.php:922 msgid "Accounting Port" msgstr "" -#: src/usr/local/www/services_captiveportal.php:916 +#: src/usr/local/www/services_captiveportal.php:925 msgid "Leave blank to use the default port (1813)." msgstr "" -#: src/usr/local/www/services_captiveportal.php:918 +#: src/usr/local/www/services_captiveportal.php:927 msgid "Accounting updates" msgstr "" -#: src/usr/local/www/services_captiveportal.php:956 +#: src/usr/local/www/services_captiveportal.php:965 msgid "RADIUS Options" msgstr "" -#: src/usr/local/www/services_captiveportal.php:961 +#: src/usr/local/www/services_captiveportal.php:970 msgid "Reathentication" msgstr "" -#: src/usr/local/www/services_captiveportal.php:964 +#: src/usr/local/www/services_captiveportal.php:973 msgid "" "If reauthentication is enabled, Access-Requests will be sent to the RADIUS " "server for each user that is logged in every minute. If an Access-Reject is " @@ -18008,41 +18268,41 @@ msgid "" "immediately." msgstr "" -#: src/usr/local/www/services_captiveportal.php:969 +#: src/usr/local/www/services_captiveportal.php:978 msgid "RADIUS MAC Authentication" msgstr "" -#: src/usr/local/www/services_captiveportal.php:972 +#: src/usr/local/www/services_captiveportal.php:981 msgid "" "If this option is enabled, the captive portal will try to authenticate users " "by sending their MAC address as the username and the password entered below " "to the RADIUS server." msgstr "" -#: src/usr/local/www/services_captiveportal.php:977 +#: src/usr/local/www/services_captiveportal.php:986 msgid "MAC authentication secret" msgstr "" -#: src/usr/local/www/services_captiveportal.php:984 +#: src/usr/local/www/services_captiveportal.php:993 msgid "RADIUS NAS IP Attribute" msgstr "" -#: src/usr/local/www/services_captiveportal.php:987 +#: src/usr/local/www/services_captiveportal.php:996 msgid "Choose the IP to use for calling station attribute." msgstr "" -#: src/usr/local/www/services_captiveportal.php:991 -#: src/usr/local/www/system_usermanager_settings.php:160 +#: src/usr/local/www/services_captiveportal.php:1000 +#: src/usr/local/www/system_usermanager_settings.php:216 msgid "Session timeout" msgstr "" -#: src/usr/local/www/services_captiveportal.php:994 +#: src/usr/local/www/services_captiveportal.php:1003 msgid "" "When enabled, clients will be disconnected after the amount of time " "retrieved from the RADIUS Session-Timeout attribute." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1001 +#: src/usr/local/www/services_captiveportal.php:1010 msgid "" "If RADIUS type is set to Cisco, in Access-Requests the value of Calling-" "Station-ID will be set to the client's IP address and the Called-Station-Id " @@ -18050,83 +18310,83 @@ msgid "" "client's MAC address and Called-Station-ID = pfSense's WAN IP address." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1007 +#: src/usr/local/www/services_captiveportal.php:1016 msgid "Accounting style" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1010 +#: src/usr/local/www/services_captiveportal.php:1019 msgid "" "When enabled, data counts for RADIUS accounting packets will be taken from " "the client perspective, not the NAS. Acct-Input-Octets will represent " "download, and Acct-Output-Octets will represent upload." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1015 +#: src/usr/local/www/services_captiveportal.php:1024 msgid "NAS Identifier" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1018 +#: src/usr/local/www/services_captiveportal.php:1027 msgid "" "Specify a NAS identifier to override the default value (pfSense.localdomain)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1024 +#: src/usr/local/www/services_captiveportal.php:1033 msgid "Single dash" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1024 +#: src/usr/local/www/services_captiveportal.php:1033 msgid "Unformatted" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1022 +#: src/usr/local/www/services_captiveportal.php:1031 msgid "MAC address format" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1025 +#: src/usr/local/www/services_captiveportal.php:1034 msgid "" "This option changes the MAC address format used in the whole RADIUS system. " -"Change this if you also need to change the username format for RADIUS MAC " +"Change this if the username format also needs to be changed for RADIUS MAC " "authentication.<br />Default: 00:11:22:33:44:55<br />Single dash: " "001122-334455<br />IETF: 00-11-22-33-44-55<br />Cisco: 0011.2233.4455<br /" ">Unformatted: 001122334455" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1043 +#: src/usr/local/www/services_captiveportal.php:1052 msgid "" "When enabled, the username and password will be transmitted over an HTTPS " "connection to protect against eavesdroppers. A server name and certificate " "must also be specified below." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1048 +#: src/usr/local/www/services_captiveportal.php:1057 msgid "HTTPS server name" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1051 +#: src/usr/local/www/services_captiveportal.php:1060 msgid "" "This name will be used in the form action for the HTTPS POST and should " -"match the Common Name (CN) in your certificate (otherwise, the client " -"browser will most likely display a security warning). Make sure captive " -"portal clients can resolve this name in DNS and verify on the client that " -"the IP resolves to the correct interface IP on pfSense." +"match the Common Name (CN) in the certificate (otherwise, the client browser " +"will most likely display a security warning). Make sure captive portal " +"clients can resolve this name in DNS and verify on the client that the IP " +"resolves to the correct interface IP on pfSense." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1057 -#: src/usr/local/www/system_advanced_admin.php:371 +#: src/usr/local/www/services_captiveportal.php:1066 +#: src/usr/local/www/system_advanced_admin.php:372 msgid "SSL Certificate" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1060 +#: src/usr/local/www/services_captiveportal.php:1069 msgid "" -"If no certificates are defined, you may define one here: <a href=" +"If no certificates are defined, one may be defined here: <a href=" "\"system_certmanager.php\">System > Cert. Manager</a>" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1064 +#: src/usr/local/www/services_captiveportal.php:1073 msgid "HTTPS Forwards" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1067 +#: src/usr/local/www/services_captiveportal.php:1076 msgid "" "If this option is set, attempts to connect to SSL/HTTPS (Port 443) sites " "will not be forwarded to the captive portalThis prevents certificate errors " @@ -18136,15 +18396,15 @@ msgid "" "the HTTPS login page." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1074 +#: src/usr/local/www/services_captiveportal.php:1083 msgid "HTML Page Contents" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1079 +#: src/usr/local/www/services_captiveportal.php:1088 msgid "Portal page contents" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1082 +#: src/usr/local/www/services_captiveportal.php:1091 msgid "" "Upload an HTML/PHP file for the portal page here (leave blank to keep the " "current one). Make sure to include a form (POST to \"$PORTAL_ACTION$\") with " @@ -18161,122 +18421,120 @@ msgid "" "text"><br />\n" "\t\t\t <input name="redirurl" type="" "hidden" value="$PORTAL_REDIRURL$"><br />\n" +"\t\t\t <input name="zone" type="" +"hidden" value="$PORTAL_ZONE$"><br />\n" "\t\t\t <input name="accept" type="" "submit" value="Continue"><br />\n" "\t\t\t </form>" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1107 -#: src/usr/local/www/services_captiveportal.php:1136 -#: src/usr/local/www/services_captiveportal.php:1163 -msgid "View current page" +#: src/usr/local/www/services_captiveportal.php:1115 +msgid "Current Portal Page" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1113 -#: src/usr/local/www/services_captiveportal.php:1142 -#: src/usr/local/www/services_captiveportal.php:1169 -msgid "Download current page" +#: src/usr/local/www/services_captiveportal.php:1132 +#: src/usr/local/www/services_captiveportal.php:1166 +#: src/usr/local/www/services_captiveportal.php:1198 +msgid "Restore Default Page" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1119 -msgid "Restore default portal page" -msgstr "" - -#: src/usr/local/www/services_captiveportal.php:1126 +#: src/usr/local/www/services_captiveportal.php:1141 msgid "Auth error page contents" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1129 +#: src/usr/local/www/services_captiveportal.php:1144 msgid "" -"The contents of the HTML/PHP file that you upload here are displayed when an " -"authentication error occurs. You may include \"$PORTAL_MESSAGE$\", which " +"The contents of the HTML/PHP file that is uploaded here are displayed when " +"an authentication error occurs. It may include \"$PORTAL_MESSAGE$\", which " "will be replaced by the error or reply messages from the RADIUS server, if " "any." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1148 -msgid "Restore default error page" +#: src/usr/local/www/services_captiveportal.php:1149 +msgid "Current Auth Error Page" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1155 +#: src/usr/local/www/services_captiveportal.php:1175 msgid "Logout page contents" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1158 +#: src/usr/local/www/services_captiveportal.php:1178 msgid "" -"The contents of the HTML/PHP file that you upload here are displayed on " +"The contents of the HTML/PHP file that is uploaded here are displayed on " "authentication success when the logout popup is enabled." msgstr "" -#: src/usr/local/www/services_captiveportal.php:1175 -msgid "Restore default logout page" +#: src/usr/local/www/services_captiveportal.php:1181 +msgid "Current Logout Page" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1189 +#: src/usr/local/www/services_captiveportal.php:1214 msgid "" -"Don't forget to enable the DHCP server on your captive portal interface! " -"Make sure that the default/maximum DHCP lease time is higher than the hard " +"Don't forget to enable the DHCP server on the captive portal interface! Make " +"sure that the default/maximum DHCP lease time is higher than the hard " "timeout entered on this page. Also, the DNS Forwarder or Resolver must be " "enabled for DNS lookups by unauthenticated clients to work." msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:128 +#: src/usr/local/www/services_captiveportal_filemanager.php:129 #, php-format msgid "A file with the name '%s' already exists." msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:135 +#: src/usr/local/www/services_captiveportal_filemanager.php:136 #, php-format msgid "The total size of all files uploaded may not exceed %s." msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:189 +#: src/usr/local/www/services_captiveportal_filemanager.php:187 msgid "Upload a New File" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:200 +#: src/usr/local/www/services_captiveportal_filemanager.php:198 msgid "File" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:212 +#: src/usr/local/www/services_captiveportal_filemanager.php:217 msgid "Installed Files" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:234 +#: src/usr/local/www/services_captiveportal_filemanager.php:237 msgid "Delete file" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:245 +#: src/usr/local/www/services_captiveportal_filemanager.php:248 msgid "Total" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:275 +#: src/usr/local/www/services_captiveportal_filemanager.php:278 #: src/usr/local/www/services_ntpd_gps.php:241 #: src/usr/local/www/services_ntpd_pps.php:160 msgid "Notes" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:277 +#: src/usr/local/www/services_captiveportal_filemanager.php:280 msgid "" -"Any files that you upload here with the filename prefix of captiveportal- " +"Any files that are uploaded here with the filename prefix of captiveportal- " "will be made available in the root directory of the captive portal HTTP(S) " -"server. You may reference them directly from your portal page HTML code " -"using relative paths. Example: you've uploaded an image with the name " -"'captiveportal-test.jpg' using the file manager. Then you can include it in " -"your portal page like this:" +"server. An icon file named favicon.ico may also be uploaded and will remain " +"without prefix. They may be referenced directly from the portal page HTML " +"code using relative paths. Example: An image uploaded with the name " +"'captiveportal-test.jpg' using the file manager can then be included in the " +"portal page like this:" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:283 +#: src/usr/local/www/services_captiveportal_filemanager.php:287 msgid "" -"In addition, you can also upload .php files for execution.\tYou can pass the " -"filename to your custom page from the initial page by using text similar to:" +"In addition, .php files can also be uploaded for execution.\tThe filename " +"can be passed to the custom page from the initial page by using text similar " +"to:" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:285 +#: src/usr/local/www/services_captiveportal_filemanager.php:289 msgid "Acceptable usage policy" msgstr "" -#: src/usr/local/www/services_captiveportal_filemanager.php:286 +#: src/usr/local/www/services_captiveportal_filemanager.php:290 #, php-format msgid "The total size limit for all files is %s." msgstr "" @@ -18284,116 +18542,116 @@ msgstr "" #: src/usr/local/www/services_captiveportal_hostname.php:66 msgid "" "Adding new hostnames will allow a DNS hostname access to/from the captive " -"portal without being taken to the portal page.This can be used for a web " +"portal without being taken to the portal page. This can be used for a web " "server serving images for the portal page, or a DNS server on another " "network, for example. By specifying <em>from</em> addresses, it may be used " "to always allow pass-through access from a client behind the captive portal." msgstr "" -#: src/usr/local/www/services_captiveportal_hostname.php:170 +#: src/usr/local/www/services_captiveportal_hostname.php:171 msgid "Edit hostname" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname.php:171 +#: src/usr/local/www/services_captiveportal_hostname.php:172 msgid "Delete hostname" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname.php:179 +#: src/usr/local/www/services_captiveportal_hostname.php:180 #, php-format msgid "All connections %sto%s the hostname are allowed" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname.php:180 +#: src/usr/local/www/services_captiveportal_hostname.php:181 #, php-format msgid "All connections %sfrom%s the hostname are allowed" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname.php:181 -#: src/usr/local/www/services_captiveportal_ip.php:177 +#: src/usr/local/www/services_captiveportal_hostname.php:182 +#: src/usr/local/www/services_captiveportal_ip.php:178 #, php-format msgid "All connections %sto or from%s are allowed" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:127 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:129 msgid "Allowed Hostname" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:132 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:134 #, php-format msgid "A valid Hostname must be specified. [%s]" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:136 -#: src/usr/local/www/services_captiveportal_ip_edit.php:140 -#: src/usr/local/www/services_captiveportal_mac_edit.php:151 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:138 +#: src/usr/local/www/services_captiveportal_ip_edit.php:142 +#: src/usr/local/www/services_captiveportal_mac_edit.php:152 msgid "Upload speed needs to be an integer" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:139 -#: src/usr/local/www/services_captiveportal_ip_edit.php:144 -#: src/usr/local/www/services_captiveportal_mac_edit.php:154 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:141 +#: src/usr/local/www/services_captiveportal_ip_edit.php:146 +#: src/usr/local/www/services_captiveportal_mac_edit.php:155 msgid "Download speed needs to be an integer" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:148 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:150 #, php-format msgid "Hostname [%s] already allowed." msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:207 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:206 msgid "Captive Portal Hostname Settings" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:214 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:213 msgid "" "Use \"From\" to always allow a Hostname through the captive portal (without " "authentication). Use \"To\" to allow access from all clients (even non-" "authenticated ones) behind the portal to this Hostname." msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:233 -#: src/usr/local/www/services_captiveportal_ip_edit.php:266 -#: src/usr/local/www/services_captiveportal_mac_edit.php:269 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:232 +#: src/usr/local/www/services_captiveportal_ip_edit.php:274 +#: src/usr/local/www/services_captiveportal_mac_edit.php:272 msgid "Bandwidth up" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:236 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:235 msgid "Enter a upload limit to be enforced on this Hostname in Kbit/s" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:240 -#: src/usr/local/www/services_captiveportal_ip_edit.php:273 -#: src/usr/local/www/services_captiveportal_mac_edit.php:276 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:239 +#: src/usr/local/www/services_captiveportal_ip_edit.php:281 +#: src/usr/local/www/services_captiveportal_mac_edit.php:279 msgid "Bandwidth down" msgstr "" -#: src/usr/local/www/services_captiveportal_hostname_edit.php:243 +#: src/usr/local/www/services_captiveportal_hostname_edit.php:242 msgid "Enter a download limit to be enforced on this Hostname in Kbit/s" msgstr "" -#: src/usr/local/www/services_captiveportal_ip.php:144 +#: src/usr/local/www/services_captiveportal_ip.php:145 msgid "IP Addresses" msgstr "" -#: src/usr/local/www/services_captiveportal_ip.php:165 +#: src/usr/local/www/services_captiveportal_ip.php:166 msgid "Edit IP" msgstr "" -#: src/usr/local/www/services_captiveportal_ip.php:166 +#: src/usr/local/www/services_captiveportal_ip.php:167 msgid "Delete IP" msgstr "" -#: src/usr/local/www/services_captiveportal_ip.php:175 +#: src/usr/local/www/services_captiveportal_ip.php:176 #, php-format msgid "All connections %sto%s the address are allowed" msgstr "" -#: src/usr/local/www/services_captiveportal_ip.php:176 +#: src/usr/local/www/services_captiveportal_ip.php:177 #, php-format msgid "All connections %sfrom%s the address are allowed" msgstr "" -#: src/usr/local/www/services_captiveportal_ip.php:196 +#: src/usr/local/www/services_captiveportal_ip.php:197 msgid "" "Adding allowed IP addresses will allow IP access to/from these addresses " "through the captive portal without being taken to the portal page. This can " @@ -18401,368 +18659,373 @@ msgid "" "on another network, for example." msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:127 +#: src/usr/local/www/services_captiveportal_ip_edit.php:129 msgid "Allowed IP address" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:127 -#: src/usr/local/www/services_dhcp.php:832 -#: src/usr/local/www/services_dhcp.php:860 +#: src/usr/local/www/services_captiveportal_ip_edit.php:129 +#: src/usr/local/www/services_dhcp.php:828 +#: src/usr/local/www/services_dhcp.php:856 #: src/usr/local/www/services_pppoe_edit.php:376 msgid "Subnet mask" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:136 +#: src/usr/local/www/services_captiveportal_ip_edit.php:138 msgid "A valid subnet mask must be specified" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:148 -#: src/usr/local/www/services_captiveportal_mac_edit.php:157 +#: src/usr/local/www/services_captiveportal_ip_edit.php:150 +#: src/usr/local/www/services_captiveportal_mac_edit.php:158 msgid "Upload speed must be between 1 and 999999" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:152 -#: src/usr/local/www/services_captiveportal_mac_edit.php:160 +#: src/usr/local/www/services_captiveportal_ip_edit.php:154 +#: src/usr/local/www/services_captiveportal_mac_edit.php:161 msgid "Download speed must be between 1 and 999999" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:161 +#: src/usr/local/www/services_captiveportal_ip_edit.php:163 msgid "already allowed" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:247 +#: src/usr/local/www/services_captiveportal_ip_edit.php:249 msgid "Edit Captive Portal IP Rule" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:261 +#: src/usr/local/www/services_captiveportal_ip_edit.php:262 +msgid "Enter a description here for reference only. (Not parsed)" +msgstr "" + +#: src/usr/local/www/services_captiveportal_ip_edit.php:269 msgid "" "Use \"From\" to always allow access to an address through the captive portal " "(without authentication). Use \"To\" to allow access from all clients (even " "non-authenticated ones) behind the portal to this IP." msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:269 +#: src/usr/local/www/services_captiveportal_ip_edit.php:277 msgid "Enter an upload limit to be enforced on this address in Kbit/s" msgstr "" -#: src/usr/local/www/services_captiveportal_ip_edit.php:276 +#: src/usr/local/www/services_captiveportal_ip_edit.php:284 msgid "Enter a download limit to be enforced on this address in Kbit/s" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:120 +#: src/usr/local/www/services_captiveportal_mac.php:121 msgid "No entry exists yet!" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:125 +#: src/usr/local/www/services_captiveportal_mac.php:126 msgid "Please set the zone on which the operation should be allowed" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:138 +#: src/usr/local/www/services_captiveportal_mac.php:139 msgid "No entry exists for this username:" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:159 +#: src/usr/local/www/services_captiveportal_mac.php:160 msgid "The entry was successfully deleted" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:161 +#: src/usr/local/www/services_captiveportal_mac.php:162 msgid "No entry exists for this mac address:" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:192 +#: src/usr/local/www/services_captiveportal_mac.php:193 msgid "The Captive Portal MAC address configuration has been changed." msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:232 +#: src/usr/local/www/services_captiveportal_mac.php:233 msgid "Edit MAC address" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:233 +#: src/usr/local/www/services_captiveportal_mac.php:234 msgid "Delete MAC address" msgstr "" -#: src/usr/local/www/services_captiveportal_mac.php:259 +#: src/usr/local/www/services_captiveportal_mac.php:260 msgid "" "Adding MAC addresses as \"pass\" MACs allows them access through the captive " "portal automatically without being taken to the portal page." msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:142 +#: src/usr/local/www/services_captiveportal_mac_edit.php:143 #, php-format msgid "" -"The MAC address %s belongs to a local interface, you cannot use it here." +"The MAC address %s belongs to a local interface. It cannot be used here." msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:147 +#: src/usr/local/www/services_captiveportal_mac_edit.php:148 msgid "A valid MAC address must be specified" msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:169 +#: src/usr/local/www/services_captiveportal_mac_edit.php:170 msgid "already exists" msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:230 +#: src/usr/local/www/services_captiveportal_mac_edit.php:231 msgid "Edit MAC Address Rules" msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:237 +#: src/usr/local/www/services_captiveportal_mac_edit.php:238 msgid "Choose what to do with packets coming from this MAC address." msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:257 +#: src/usr/local/www/services_captiveportal_mac_edit.php:260 msgid "6 hex octets separated by colons" msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:265 -msgid "You may enter a description here for your reference (not parsed)" +#: src/usr/local/www/services_captiveportal_mac_edit.php:268 +msgid "" +"A description may be entered here for administrative reference (not parsed)" msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:272 +#: src/usr/local/www/services_captiveportal_mac_edit.php:275 msgid "Enter an upload limit to be enforced on this MAC in Kbit/s" msgstr "" -#: src/usr/local/www/services_captiveportal_mac_edit.php:279 +#: src/usr/local/www/services_captiveportal_mac_edit.php:282 msgid "Enter a download limit to be enforced on this MAC in Kbit/s" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:106 +#: src/usr/local/www/services_captiveportal_vouchers.php:107 #, php-format msgid "Submission on captiveportal page with unknown zone parameter: %s" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:161 +#: src/usr/local/www/services_captiveportal_vouchers.php:162 msgid "Voucher invalid" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:164 +#: src/usr/local/www/services_captiveportal_vouchers.php:165 msgid "Voucher expired" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:187 +#: src/usr/local/www/services_captiveportal_vouchers.php:188 msgid "Cannot write private key file" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:209 +#: src/usr/local/www/services_captiveportal_vouchers.php:210 msgid "Need private RSA key to print vouchers" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:243 +#: src/usr/local/www/services_captiveportal_vouchers.php:244 msgid "charset" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:243 +#: src/usr/local/www/services_captiveportal_vouchers.php:244 msgid "rollbits" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:243 +#: src/usr/local/www/services_captiveportal_vouchers.php:244 msgid "ticketbits" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:243 +#: src/usr/local/www/services_captiveportal_vouchers.php:244 msgid "checksumbits" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:243 +#: src/usr/local/www/services_captiveportal_vouchers.php:244 msgid "publickey" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:243 +#: src/usr/local/www/services_captiveportal_vouchers.php:244 msgid "magic" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:246 -#: src/usr/local/www/services_captiveportal_vouchers.php:596 +#: src/usr/local/www/services_captiveportal_vouchers.php:247 +#: src/usr/local/www/services_captiveportal_vouchers.php:597 msgid "Synchronize Voucher Database IP" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:246 +#: src/usr/local/www/services_captiveportal_vouchers.php:247 msgid "Sync port" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:246 +#: src/usr/local/www/services_captiveportal_vouchers.php:247 msgid "Sync password" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:246 +#: src/usr/local/www/services_captiveportal_vouchers.php:247 msgid "Sync username" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:255 +#: src/usr/local/www/services_captiveportal_vouchers.php:256 msgid "Need at least 2 characters to create vouchers." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:258 +#: src/usr/local/www/services_captiveportal_vouchers.php:259 msgid "Double quotes aren't allowed." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:261 +#: src/usr/local/www/services_captiveportal_vouchers.php:262 msgid "',' aren't allowed." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:264 +#: src/usr/local/www/services_captiveportal_vouchers.php:265 msgid "# of Bits to store Roll Id needs to be between 1..31." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:267 +#: src/usr/local/www/services_captiveportal_vouchers.php:268 msgid "# of Bits to store Ticket Id needs to be between 1..16." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:270 +#: src/usr/local/www/services_captiveportal_vouchers.php:271 msgid "# of Bits to store checksum needs to be between 1..31." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:273 +#: src/usr/local/www/services_captiveportal_vouchers.php:274 msgid "This doesn't look like an RSA Public key." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:276 +#: src/usr/local/www/services_captiveportal_vouchers.php:277 msgid "This doesn't look like an RSA Private key." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:279 -msgid "You cannot sync the voucher database to this host (itself)." +#: src/usr/local/www/services_captiveportal_vouchers.php:280 +msgid "The voucher database cannot be sync'd to this host (itself)." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:353 +#: src/usr/local/www/services_captiveportal_vouchers.php:354 #, php-format msgid "voucher XMLRPC sync data %s:%d" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:359 +#: src/usr/local/www/services_captiveportal_vouchers.php:360 #, php-format msgid "" "A communications error occurred while attempting CaptivePortalVoucherSync " "XMLRPC sync with %s:%d (pfsense.exec_php)." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:361 +#: src/usr/local/www/services_captiveportal_vouchers.php:362 msgid "Communications error occurred" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:366 +#: src/usr/local/www/services_captiveportal_vouchers.php:367 #, php-format msgid "" "An error code was received while attempting CaptivePortalVoucherSync XMLRPC " "sync with %s:%d - Code %d: %s" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:368 +#: src/usr/local/www/services_captiveportal_vouchers.php:369 msgid "Error code received" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:371 +#: src/usr/local/www/services_captiveportal_vouchers.php:372 #, php-format msgid "" "The Captive Portal voucher database has been synchronized with %s:%d " "(pfsense.exec_php)." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:377 +#: src/usr/local/www/services_captiveportal_vouchers.php:378 msgid "Could not synchronize the voucher database: Authentication Failed." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:411 +#: src/usr/local/www/services_captiveportal_vouchers.php:412 #, php-format msgid "Voucher database has been synchronized from %1$s:%2$s" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:449 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:217 +#: src/usr/local/www/services_captiveportal_vouchers.php:450 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:218 #: src/usr/local/www/status_captiveportal.php:142 -#: src/usr/local/www/status_captiveportal_expire.php:103 -#: src/usr/local/www/status_captiveportal_test.php:111 -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:85 -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:99 -#: src/usr/local/www/status_captiveportal_vouchers.php:135 +#: src/usr/local/www/status_captiveportal_expire.php:104 +#: src/usr/local/www/status_captiveportal_test.php:112 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:86 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:100 +#: src/usr/local/www/status_captiveportal_vouchers.php:136 msgid "Voucher Rolls" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:455 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:221 -msgid "Roll #" -msgstr "" - #: src/usr/local/www/services_captiveportal_vouchers.php:456 -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:110 -msgid "Minutes/Ticket" +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:222 +msgid "Roll #" msgstr "" #: src/usr/local/www/services_captiveportal_vouchers.php:457 #: src/usr/local/www/status_captiveportal_voucher_rolls.php:111 -msgid "# of Tickets" +msgid "Minutes/Ticket" msgstr "" #: src/usr/local/www/services_captiveportal_vouchers.php:458 -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:242 #: src/usr/local/www/status_captiveportal_voucher_rolls.php:112 +msgid "# of Tickets" +msgstr "" + +#: src/usr/local/www/services_captiveportal_vouchers.php:459 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:243 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:113 msgid "Comment" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:482 +#: src/usr/local/www/services_captiveportal_vouchers.php:483 msgid "Edit voucher roll" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:483 +#: src/usr/local/www/services_captiveportal_vouchers.php:484 msgid "Delete voucher roll" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:484 +#: src/usr/local/www/services_captiveportal_vouchers.php:485 msgid "Export vouchers for this roll to a .csv file" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:510 -#: src/usr/local/www/services_captiveportal_vouchers.php:521 +#: src/usr/local/www/services_captiveportal_vouchers.php:511 +#: src/usr/local/www/services_captiveportal_vouchers.php:522 msgid "Create, Generate and Activate Rolls with Vouchers" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:526 +#: src/usr/local/www/services_captiveportal_vouchers.php:527 msgid "Voucher Public Key" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:528 +#: src/usr/local/www/services_captiveportal_vouchers.php:529 msgid "" "Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is " "used to decrypt vouchers." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:532 +#: src/usr/local/www/services_captiveportal_vouchers.php:533 msgid "Voucher Private Key" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:534 +#: src/usr/local/www/services_captiveportal_vouchers.php:535 msgid "" "Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is " "only used to generate encrypted vouchers and doesn't need to be available if " "the vouchers have been generated offline." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:538 +#: src/usr/local/www/services_captiveportal_vouchers.php:539 msgid "Character set" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:541 +#: src/usr/local/www/services_captiveportal_vouchers.php:542 msgid "" "Tickets are generated with the specified character set. It should contain " "printable characters (numbers, lower case and upper case letters) that are " "hard to confuse with others. Avoid e.g. 0/O and l/1." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:545 +#: src/usr/local/www/services_captiveportal_vouchers.php:546 msgid "# of Roll bits" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:548 +#: src/usr/local/www/services_captiveportal_vouchers.php:549 msgid "" "Reserves a range in each voucher to store the Roll # it belongs to. Allowed " "range: 1..31. Sum of Roll+Ticket+Checksum bits must be one Bit less than the " "RSA key size." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:552 +#: src/usr/local/www/services_captiveportal_vouchers.php:553 msgid "# of Ticket bits" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:555 +#: src/usr/local/www/services_captiveportal_vouchers.php:556 msgid "" "Reserves a range in each voucher to store the Ticket# it belongs to. Allowed " "range: 1..16. Using 16 bits allows a roll to have up to 65535 vouchers. A " @@ -18770,83 +19033,83 @@ msgid "" "been used. A bit array for 65535 vouchers requires 8 KB of storage. " msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:561 +#: src/usr/local/www/services_captiveportal_vouchers.php:562 msgid "# of Checksum bits" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:564 +#: src/usr/local/www/services_captiveportal_vouchers.php:565 msgid "" "Reserves a range in each voucher to store a simple checksum over Roll # and " "Ticket#. Allowed range is 0..31." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:568 +#: src/usr/local/www/services_captiveportal_vouchers.php:569 msgid "Magic number" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:571 +#: src/usr/local/www/services_captiveportal_vouchers.php:572 msgid "" "Magic number stored in every voucher. Verified during voucher check. Size " "depends on how many bits are left by Roll+Ticket+Checksum bits. If all bits " "are used, no magic number will be used and checked." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:576 +#: src/usr/local/www/services_captiveportal_vouchers.php:577 msgid "Invalid voucher message" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:579 +#: src/usr/local/www/services_captiveportal_vouchers.php:580 msgid "" "Error message displayed for invalid vouchers on captive portal error page " "($PORTAL_MESSAGE$)." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:584 +#: src/usr/local/www/services_captiveportal_vouchers.php:585 msgid "Expired voucher message" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:587 +#: src/usr/local/www/services_captiveportal_vouchers.php:588 msgid "" "Error message displayed for expired vouchers on captive portal error page " "($PORTAL_MESSAGE$)." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:591 +#: src/usr/local/www/services_captiveportal_vouchers.php:592 msgid "Voucher Database Synchronization" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:598 +#: src/usr/local/www/services_captiveportal_vouchers.php:599 msgid "" "IP address of master nodes webConfigurator to synchronize voucher database " "and used vouchers from.<br />NOTE: this should be setup on the slave nodes " "and not the primary node!" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:603 +#: src/usr/local/www/services_captiveportal_vouchers.php:604 msgid "Voucher sync port" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:606 +#: src/usr/local/www/services_captiveportal_vouchers.php:607 msgid "The port of the master voucher node's webConfigurator. Example: 443 " msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:610 +#: src/usr/local/www/services_captiveportal_vouchers.php:611 msgid "Voucher sync username" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:613 +#: src/usr/local/www/services_captiveportal_vouchers.php:614 msgid "This is the username of the master voucher nodes webConfigurator." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:617 +#: src/usr/local/www/services_captiveportal_vouchers.php:618 msgid "Voucher sync password" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:620 +#: src/usr/local/www/services_captiveportal_vouchers.php:621 msgid "This is the password of the master voucher nodes webConfigurator." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:641 +#: src/usr/local/www/services_captiveportal_vouchers.php:642 msgid "" "Changing any Voucher parameter (apart from managing the list of Rolls) on " "this page will render existing vouchers useless if they were generated with " @@ -18855,61 +19118,61 @@ msgid "" "retrieved/synced from the master." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:677 +#: src/usr/local/www/services_captiveportal_vouchers.php:678 msgid "Generate new keys" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:124 -#: src/usr/local/www/services_dhcp.php:1192 -#: src/usr/local/www/services_dhcpv6.php:939 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:125 +#: src/usr/local/www/services_dhcp.php:1202 +#: src/usr/local/www/services_dhcpv6.php:949 msgid "Number" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:124 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:125 #: src/usr/local/www/services_unbound_advanced.php:343 msgid "minutes" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:134 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:135 #, php-format msgid "Roll number %s already exists." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:140 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:141 #, php-format msgid "Roll number must be numeric and less than %s" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:144 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:145 #, php-format msgid "A roll has at least one voucher and less than %s." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:148 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:149 msgid "Each voucher must be good for at least 1 minute." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:172 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:173 #, php-format msgid "All %1$s vouchers from Roll %2$s marked unused" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:224 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:225 #, php-format msgid "Enter the Roll# (0..%d) found on top of the generated/printed vouchers" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:228 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:229 msgid "Minutes per ticket" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:231 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:232 msgid "" "Defines the time in minutes that a user is allowed access. The clock starts " "ticking the first time a voucher is used for authentication." msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:238 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:239 #, php-format msgid "" "Enter the number of vouchers (1..%d) found on top of the generated/printed " @@ -18917,7 +19180,7 @@ msgid "" "vouchers as unused again" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers_edit.php:245 +#: src/usr/local/www/services_captiveportal_vouchers_edit.php:246 msgid "Can be used to further identify this roll. Ignored by the system." msgstr "" @@ -18960,18 +19223,22 @@ msgstr "" msgid "Zone [%s] already exists." msgstr "" -#: src/usr/local/www/services_captiveportal_zones_edit.php:122 +#: src/usr/local/www/services_captiveportal_zones_edit.php:119 msgid "Add Captive Portal Zone" msgstr "" -#: src/usr/local/www/services_captiveportal_zones_edit.php:127 +#: src/usr/local/www/services_captiveportal_zones_edit.php:124 msgid "Zone name. Can only contain letters, digits, and underscores (_)." msgstr "" -#: src/usr/local/www/services_captiveportal_zones_edit.php:131 +#: src/usr/local/www/services_captiveportal_zones_edit.php:128 msgid "Zone description" msgstr "" +#: src/usr/local/www/services_captiveportal_zones_edit.php:135 +msgid "Save & Continue" +msgstr "" + #: src/usr/local/www/services_dhcp.php:268 #: src/usr/local/www/services_dhcpv6.php:249 msgid "Range begin" @@ -19054,32 +19321,32 @@ msgstr "" #: src/usr/local/www/services_dhcp.php:339 #: src/usr/local/www/services_dhcp_edit.php:302 #: src/usr/local/www/services_dhcpv6.php:329 -msgid "You must specify both a valid domain key and key name." +msgid "Both a valid domain key and key name must be specified." msgstr "" #: src/usr/local/www/services_dhcp.php:345 #: src/usr/local/www/services_dhcp_edit.php:308 #: src/usr/local/www/services_dhcpv6.php:335 -#: src/usr/local/www/services_router_advertisements.php:195 +#: src/usr/local/www/services_router_advertisements.php:196 msgid "A valid domain search list must be specified." msgstr "" #: src/usr/local/www/services_dhcp.php:353 msgid "" -"If you specify a mac allow list, it must contain only valid partial MAC " +"If a mac allow list is specified, it must contain only valid partial MAC " "addresses." msgstr "" #: src/usr/local/www/services_dhcp.php:356 msgid "" -"If you specify a mac deny list, it must contain only valid partial MAC " +"If a mac deny list is specified, it must contain only valid partial MAC " "addresses." msgstr "" #: src/usr/local/www/services_dhcp.php:360 -#: src/usr/local/www/services_dhcp_edit.php:315 msgid "" -"A valid IP address must be specified for the primary/secondary NTP servers." +"A valid IP address or hostname must be specified for the primary/secondary " +"NTP servers." msgstr "" #: src/usr/local/www/services_dhcp.php:363 @@ -19098,11 +19365,11 @@ msgid "A valid IP address must be specified for the network boot server." msgstr "" #: src/usr/local/www/services_dhcp.php:373 -msgid "You cannot use the network address in the starting subnet range." +msgid "The network address cannot be used in the starting subnet range." msgstr "" #: src/usr/local/www/services_dhcp.php:376 -msgid "You cannot use the broadcast address in the ending subnet range." +msgid "The broadcast address cannot be used in the ending subnet range." msgstr "" #: src/usr/local/www/services_dhcp.php:384 @@ -19112,7 +19379,7 @@ msgstr "" #: src/usr/local/www/services_dhcp.php:400 msgid "" -"Cannot enable static ARP when you have static map entries without IP " +"Cannot enable static ARP when there are static map entries without IP " "addresses. Ensure all static maps have IP addresses and try again." msgstr "" @@ -19188,7 +19455,7 @@ msgstr "" #: src/usr/local/www/services_dhcpv6.php:391 #, php-format msgid "" -"You must disable the DHCP relay on the %s interface before enabling the DHCP " +"The DHCP relay on the %s interface must be disabled before enabling the DHCP " "server." msgstr "" @@ -19199,12 +19466,12 @@ msgid "The DHCP range cannot overlap any static DHCP mappings." msgstr "" #: src/usr/local/www/services_dhcp.php:688 -#: src/usr/local/www/status_dhcp_leases.php:495 +#: src/usr/local/www/status_dhcp_leases.php:498 msgid "Pool Start" msgstr "" #: src/usr/local/www/services_dhcp.php:689 -#: src/usr/local/www/status_dhcp_leases.php:496 +#: src/usr/local/www/status_dhcp_leases.php:499 msgid "Pool End" msgstr "" @@ -19215,7 +19482,7 @@ msgid "" msgstr "" #: src/usr/local/www/services_dhcp.php:750 -#: src/usr/local/www/services_dhcpv6.php:530 +#: src/usr/local/www/services_dhcpv6.php:528 msgid "The static mapping configuration has been changed." msgstr "" @@ -19225,141 +19492,145 @@ msgid "" "IPv4 address. This system has none." msgstr "" -#: src/usr/local/www/services_dhcp.php:795 +#: src/usr/local/www/services_dhcp.php:791 #, php-format msgid "Enable DHCP server on %s interface" msgstr "" -#: src/usr/local/www/services_dhcp.php:799 +#: src/usr/local/www/services_dhcp.php:795 msgid "" "Editing pool-specific options. To return to the Interface, click its tab " "above." msgstr "" -#: src/usr/local/www/services_dhcp.php:804 +#: src/usr/local/www/services_dhcp.php:800 msgid "Deny unknown clients" msgstr "" -#: src/usr/local/www/services_dhcp.php:811 +#: src/usr/local/www/services_dhcp.php:807 msgid "Ignore denied clients" msgstr "" -#: src/usr/local/www/services_dhcp.php:814 +#: src/usr/local/www/services_dhcp.php:810 msgid "" "This option is not compatible with failover and cannot be enabled when a " "Failover Peer IP address is configured." msgstr "" -#: src/usr/local/www/services_dhcp.php:820 +#: src/usr/local/www/services_dhcp.php:816 msgid "Pool Description" msgstr "" -#: src/usr/local/www/services_dhcp.php:840 +#: src/usr/local/www/services_dhcp.php:836 msgid "In-use DHCP Pool Ranges:" msgstr "" -#: src/usr/local/www/services_dhcp.php:853 +#: src/usr/local/www/services_dhcp.php:849 msgid "Available range" msgstr "" -#: src/usr/local/www/services_dhcp.php:866 +#: src/usr/local/www/services_dhcp.php:862 #: src/usr/local/www/services_dhcpv6.php:657 msgid "Range" msgstr "" -#: src/usr/local/www/services_dhcp.php:885 +#: src/usr/local/www/services_dhcp.php:881 msgid "Additional Pools" msgstr "" -#: src/usr/local/www/services_dhcp.php:889 +#: src/usr/local/www/services_dhcp.php:885 msgid "Add pool" msgstr "" -#: src/usr/local/www/services_dhcp.php:896 +#: src/usr/local/www/services_dhcp.php:894 msgid "" -"If you need additional pools of addresses inside of this subnet outside the " -"above Range, they may be specified here" +"If additional pools of addresses are needed inside of this subnet outside " +"the above Range, they may be specified here." msgstr "" -#: src/usr/local/www/services_dhcp.php:912 -#: src/usr/local/www/vpn_openvpn_csc.php:563 +#: src/usr/local/www/services_dhcp.php:910 +#: src/usr/local/www/vpn_openvpn_csc.php:567 msgid "WINS servers" msgstr "" -#: src/usr/local/www/services_dhcp.php:925 +#: src/usr/local/www/services_dhcp.php:923 msgid "DNS servers" msgstr "" -#: src/usr/local/www/services_dhcp.php:927 +#: src/usr/local/www/services_dhcp.php:925 msgid "" -"Leave blank to use the system default DNS servers, use this interface's IP " -"if DNS Forwarder or Resolver is enabled, otherwise use the servers " -"configured on the General page" +"Leave blank to use the system default DNS servers: this interface's IP if " +"DNS Forwarder or Resolver is enabled, otherwise the servers configured on " +"the System / General Setup page." msgstr "" -#: src/usr/local/www/services_dhcp.php:932 +#: src/usr/local/www/services_dhcp.php:930 msgid "Other Options" msgstr "" -#: src/usr/local/www/services_dhcp.php:939 +#: src/usr/local/www/services_dhcp.php:937 msgid "" "The default is to use the IP on this interface of the firewall as the " "gateway. Specify an alternate gateway here if this is not the correct " -"gateway for your network. Type \"none\" for no gateway assignment" +"gateway for the network. Type \"none\" for no gateway assignment." msgstr "" -#: src/usr/local/www/services_dhcp.php:943 -#: src/usr/local/www/services_dhcp_edit.php:565 +#: src/usr/local/www/services_dhcp.php:941 +#: src/usr/local/www/services_dhcp_edit.php:567 +#: src/usr/local/www/services_dhcpv6.php:721 +#: src/usr/local/www/services_dyndns_edit.php:135 +#: src/usr/local/www/services_dyndns_edit.php:330 msgid "Domain name" msgstr "" -#: src/usr/local/www/services_dhcp.php:946 +#: src/usr/local/www/services_dhcp.php:944 msgid "" "The default is to use the domain name of this system as the default domain " -"name provided by DHCP. You may specify an alternate domain name here" +"name provided by DHCP. An alternate domain name may be specified here." msgstr "" -#: src/usr/local/www/services_dhcp.php:950 -#: src/usr/local/www/services_dhcp_edit.php:572 +#: src/usr/local/www/services_dhcp.php:948 +#: src/usr/local/www/services_dhcp_edit.php:574 #: src/usr/local/www/services_dhcpv6.php:728 -#: src/usr/local/www/services_router_advertisements.php:390 +#: src/usr/local/www/services_router_advertisements.php:421 msgid "Domain search list" msgstr "" -#: src/usr/local/www/services_dhcp.php:953 -#: src/usr/local/www/services_dhcp_edit.php:575 +#: src/usr/local/www/services_dhcp.php:951 +#: src/usr/local/www/services_dhcp_edit.php:577 #: src/usr/local/www/services_dhcpv6.php:731 msgid "" "The DHCP server can optionally provide a domain search list. Use the " -"semicolon character as separator" +"semicolon character as separator." msgstr "" -#: src/usr/local/www/services_dhcp.php:957 +#: src/usr/local/www/services_dhcp.php:955 #: src/usr/local/www/services_dhcpv6.php:735 msgid "Default lease time" msgstr "" -#: src/usr/local/www/services_dhcp.php:960 +#: src/usr/local/www/services_dhcp.php:958 msgid "" "This is used for clients that do not ask for a specific expiration time. The " -"default is 7200 seconds" +"default is 7200 seconds." msgstr "" -#: src/usr/local/www/services_dhcp.php:964 +#: src/usr/local/www/services_dhcp.php:962 msgid "Maximum lease time" msgstr "" -#: src/usr/local/www/services_dhcp.php:967 +#: src/usr/local/www/services_dhcp.php:965 +#: src/usr/local/www/services_dhcp_edit.php:591 msgid "" "This is the maximum lease time for clients that ask for a specific " -"expiration time. The default is 86400 seconds" +"expiration time. The default is 86400 seconds." msgstr "" -#: src/usr/local/www/services_dhcp.php:972 +#: src/usr/local/www/services_dhcp.php:970 msgid "Failover peer IP" msgstr "" -#: src/usr/local/www/services_dhcp.php:974 +#: src/usr/local/www/services_dhcp.php:972 msgid "" "Leave blank to disable. Enter the interface IP address of the other machine. " "Machines must be using CARP. Interface's advskew determines whether the " @@ -19367,42 +19638,42 @@ msgid "" "(and the other is > 20)." msgstr "" -#: src/usr/local/www/services_dhcp.php:981 -#: src/usr/local/www/services_dhcp.php:1315 -#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:93 +#: src/usr/local/www/services_dhcp.php:979 +#: src/usr/local/www/services_dhcp.php:1329 +#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:98 msgid "Static ARP" msgstr "" -#: src/usr/local/www/services_dhcp.php:984 +#: src/usr/local/www/services_dhcp.php:982 msgid "" "This option persists even if DHCP server is disabled. Only the machines " "listed below will be able to communicate with the firewall on this interface." msgstr "" -#: src/usr/local/www/services_dhcp.php:988 +#: src/usr/local/www/services_dhcp.php:986 msgid "Time format change" msgstr "" -#: src/usr/local/www/services_dhcp.php:991 +#: src/usr/local/www/services_dhcp.php:989 msgid "" "By default DHCP leases are displayed in UTC time.\tBy checking this box DHCP " "lease time will be displayed in local time and set to the time zone " -"selected. This will be used for all DHCP interfaces lease time" +"selected. This will be used for all DHCP interfaces lease time." msgstr "" -#: src/usr/local/www/services_dhcp.php:995 +#: src/usr/local/www/services_dhcp.php:993 msgid "Statistics graphs" msgstr "" -#: src/usr/local/www/services_dhcp.php:998 +#: src/usr/local/www/services_dhcp.php:996 msgid "" "Enable this to add DHCP leases statistics to the RRD graphs. Disabled by " "default." msgstr "" #: src/usr/local/www/services_dhcp.php:1023 -#: src/usr/local/www/services_dhcp_edit.php:612 -#: src/usr/local/www/services_dhcpv6.php:779 +#: src/usr/local/www/services_dhcp_edit.php:616 +#: src/usr/local/www/services_dhcpv6.php:781 msgid "DDNS Domain" msgstr "" @@ -19417,7 +19688,7 @@ msgid "Primary DDNS address" msgstr "" #: src/usr/local/www/services_dhcp.php:1033 -msgid "Primary domain name server IP address for the dynamic domain name" +msgid "Primary domain name server IP address for the dynamic domain name." msgstr "" #: src/usr/local/www/services_dhcp.php:1037 @@ -19427,7 +19698,7 @@ msgstr "" #: src/usr/local/www/services_dhcp.php:1040 msgid "" "Dynamic DNS domain key name which will be used to register client names in " -"the DNS server" +"the DNS server." msgstr "" #: src/usr/local/www/services_dhcp.php:1044 @@ -19437,188 +19708,188 @@ msgstr "" #: src/usr/local/www/services_dhcp.php:1047 msgid "" "Dynamic DNS domain key secret which will be used to register client names in " -"the DNS server" +"the DNS server." msgstr "" -#: src/usr/local/www/services_dhcp.php:1058 +#: src/usr/local/www/services_dhcp.php:1060 msgid "MAC address control" msgstr "" -#: src/usr/local/www/services_dhcp.php:1064 +#: src/usr/local/www/services_dhcp.php:1066 msgid "MAC Allow" msgstr "" -#: src/usr/local/www/services_dhcp.php:1067 +#: src/usr/local/www/services_dhcp.php:1069 msgid "" "List of partial MAC addresses to allow, comma separated, no spaces, e.g.: " "00:00:00,01:E5:FF" msgstr "" -#: src/usr/local/www/services_dhcp.php:1071 +#: src/usr/local/www/services_dhcp.php:1073 msgid "MAC Deny" msgstr "" -#: src/usr/local/www/services_dhcp.php:1074 +#: src/usr/local/www/services_dhcp.php:1076 msgid "" "List of partial MAC addresses to deny access, comma separated, no spaces, e." "g.: 00:00:00,01:E5:FF" msgstr "" -#: src/usr/local/www/services_dhcp.php:1091 -#: src/usr/local/www/services_dhcp_edit.php:653 -#: src/usr/local/www/services_dhcpv6.php:840 -#: src/usr/local/www/vpn_openvpn_server.php:1080 +#: src/usr/local/www/services_dhcp.php:1095 +#: src/usr/local/www/services_dhcp_edit.php:659 +#: src/usr/local/www/services_dhcpv6.php:844 +#: src/usr/local/www/vpn_openvpn_server.php:1085 msgid "NTP Server 1" msgstr "" -#: src/usr/local/www/services_dhcp.php:1097 -#: src/usr/local/www/services_dhcp_edit.php:661 -#: src/usr/local/www/services_dhcpv6.php:848 -#: src/usr/local/www/vpn_openvpn_server.php:1087 +#: src/usr/local/www/services_dhcp.php:1101 +#: src/usr/local/www/services_dhcp_edit.php:667 +#: src/usr/local/www/services_dhcpv6.php:852 +#: src/usr/local/www/vpn_openvpn_server.php:1092 msgid "NTP Server 2" msgstr "" -#: src/usr/local/www/services_dhcp.php:1110 +#: src/usr/local/www/services_dhcp.php:1116 msgid "TFTP" msgstr "" -#: src/usr/local/www/services_dhcp.php:1116 -#: src/usr/local/www/services_dhcp_edit.php:685 +#: src/usr/local/www/services_dhcp.php:1122 +#: src/usr/local/www/services_dhcp_edit.php:693 msgid "TFTP Server" msgstr "" -#: src/usr/local/www/services_dhcp.php:1118 +#: src/usr/local/www/services_dhcp.php:1124 msgid "" -"Leave blank to disable. Enter a full hostname or IP for the TFTP server" +"Leave blank to disable. Enter a full hostname or IP for the TFTP server." msgstr "" -#: src/usr/local/www/services_dhcp.php:1129 -#: src/usr/local/www/services_dhcpv6.php:866 +#: src/usr/local/www/services_dhcp.php:1137 +#: src/usr/local/www/services_dhcpv6.php:872 msgid "LDAP" msgstr "" -#: src/usr/local/www/services_dhcp.php:1135 +#: src/usr/local/www/services_dhcp.php:1143 msgid "LDAP Server URI" msgstr "" -#: src/usr/local/www/services_dhcp.php:1138 +#: src/usr/local/www/services_dhcp.php:1146 msgid "" "Leave blank to disable. Enter a full URI for the LDAP server in the form " "ldap://ldap.example.com/dc=example,dc=com " msgstr "" -#: src/usr/local/www/services_dhcp.php:1151 -#: src/usr/local/www/services_dhcp.php:1155 -#: src/usr/local/www/services_dhcpv6.php:911 +#: src/usr/local/www/services_dhcp.php:1159 +#: src/usr/local/www/services_dhcp.php:1165 +#: src/usr/local/www/services_dhcpv6.php:921 msgid "Additional BOOTP/DHCP Options" msgstr "" -#: src/usr/local/www/services_dhcp.php:1160 +#: src/usr/local/www/services_dhcp.php:1170 msgid "" -"Enter the DHCP option number and the value for each item you would like to " -"include in the DHCP lease information." +"Enter the DHCP option number and the value for each item to include in the " +"DHCP lease information." msgstr "" -#: src/usr/local/www/services_dhcp.php:1161 +#: src/usr/local/www/services_dhcp.php:1171 #, php-format msgid "For a list of available options please visit this %1$s URL%2$s" msgstr "" -#: src/usr/local/www/services_dhcp.php:1169 +#: src/usr/local/www/services_dhcp.php:1179 msgid "Text" msgstr "" -#: src/usr/local/www/services_dhcp.php:1169 +#: src/usr/local/www/services_dhcp.php:1179 msgid "String" msgstr "" -#: src/usr/local/www/services_dhcp.php:1169 +#: src/usr/local/www/services_dhcp.php:1179 msgid "Boolean" msgstr "" -#: src/usr/local/www/services_dhcp.php:1170 +#: src/usr/local/www/services_dhcp.php:1180 msgid "Unsigned 8-bit integer" msgstr "" -#: src/usr/local/www/services_dhcp.php:1170 +#: src/usr/local/www/services_dhcp.php:1180 msgid "Unsigned 16-bit integer" msgstr "" -#: src/usr/local/www/services_dhcp.php:1170 +#: src/usr/local/www/services_dhcp.php:1180 msgid "Unsigned 32-bit integer" msgstr "" -#: src/usr/local/www/services_dhcp.php:1171 +#: src/usr/local/www/services_dhcp.php:1181 msgid "Signed 8-bit integer" msgstr "" -#: src/usr/local/www/services_dhcp.php:1171 +#: src/usr/local/www/services_dhcp.php:1181 msgid "Signed 16-bit integer" msgstr "" -#: src/usr/local/www/services_dhcp.php:1171 +#: src/usr/local/www/services_dhcp.php:1181 msgid "Signed 32-bit integer" msgstr "" -#: src/usr/local/www/services_dhcp.php:1171 +#: src/usr/local/www/services_dhcp.php:1181 msgid "IP address or host" msgstr "" -#: src/usr/local/www/services_dhcp.php:1184 +#: src/usr/local/www/services_dhcp.php:1194 msgid "Option" msgstr "" -#: src/usr/local/www/services_dhcp.php:1231 +#: src/usr/local/www/services_dhcp.php:1245 msgid "Network Booting" msgstr "" -#: src/usr/local/www/services_dhcp.php:1242 +#: src/usr/local/www/services_dhcp.php:1256 msgid "Next Server" msgstr "" -#: src/usr/local/www/services_dhcp.php:1244 +#: src/usr/local/www/services_dhcp.php:1258 msgid "Enter the IP address of the next server" msgstr "" -#: src/usr/local/www/services_dhcp.php:1248 +#: src/usr/local/www/services_dhcp.php:1262 msgid "Default BIOS file name" msgstr "" -#: src/usr/local/www/services_dhcp.php:1255 +#: src/usr/local/www/services_dhcp.php:1269 msgid "UEFI 32 bit file name" msgstr "" -#: src/usr/local/www/services_dhcp.php:1262 +#: src/usr/local/www/services_dhcp.php:1276 msgid "UEFI 64 bit file name" msgstr "" -#: src/usr/local/www/services_dhcp.php:1265 +#: src/usr/local/www/services_dhcp.php:1279 msgid "" -"You need both a filename and a boot server configured for this to work! You " -"will need all three filenames and a boot server configured for UEFI to work! " +"Both a filename and a boot server must be configured for this to work! All " +"three filenames and a configured boot server are necessary for UEFI to work! " msgstr "" -#: src/usr/local/www/services_dhcp.php:1270 +#: src/usr/local/www/services_dhcp.php:1284 #: src/usr/local/www/services_dhcpv6_edit.php:289 msgid "Root path" msgstr "" -#: src/usr/local/www/services_dhcp.php:1273 +#: src/usr/local/www/services_dhcp.php:1287 msgid "string-format: iscsi:(servername):(protocol):(port):(LUN):targetname " msgstr "" -#: src/usr/local/www/services_dhcp.php:1310 +#: src/usr/local/www/services_dhcp.php:1324 msgid "DHCP Static Mappings for this Interface" msgstr "" -#: src/usr/local/www/services_dhcp.php:1350 -#: src/usr/local/www/services_dhcpv6.php:1030 -#: src/usr/local/www/status_dhcp_leases.php:470 +#: src/usr/local/www/services_dhcp.php:1364 +#: src/usr/local/www/services_dhcpv6.php:1044 +#: src/usr/local/www/status_dhcp_leases.php:473 msgid "Edit static mapping" msgstr "" -#: src/usr/local/www/services_dhcp.php:1351 -#: src/usr/local/www/services_dhcpv6.php:1031 +#: src/usr/local/www/services_dhcp.php:1365 +#: src/usr/local/www/services_dhcpv6.php:1045 msgid "Delete static mapping" msgstr "" @@ -19635,13 +19906,13 @@ msgstr "" #: src/usr/local/www/services_dhcpv6_edit.php:154 #: src/usr/local/www/services_dnsmasq_edit.php:119 #: src/usr/local/www/services_unbound_host_edit.php:120 -#: src/usr/local/www/system.php:170 +#: src/usr/local/www/system.php:171 msgid "" "A valid hostname is specified, but the domain name part should be omitted" msgstr "" #: src/usr/local/www/services_dhcp_edit.php:217 -msgid "Static ARP is enabled. You must specify an IP address." +msgid "Static ARP is enabled. An IP address must be specified." msgstr "" #: src/usr/local/www/services_dhcp_edit.php:234 @@ -19676,174 +19947,173 @@ msgstr "" msgid "The IP address cannot be the %s broadcast address." msgstr "" +#: src/usr/local/www/services_dhcp_edit.php:315 +msgid "" +"A valid IP address must be specified for the primary/secondary NTP servers." +msgstr "" + #: src/usr/local/www/services_dhcp_edit.php:414 #: src/usr/local/www/services_dhcpv6_edit.php:234 msgid "Edit Static Mapping" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:445 +#: src/usr/local/www/services_dhcp_edit.php:447 msgid "MAC address (6 hex octets separated by colons)" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:450 +#: src/usr/local/www/services_dhcp_edit.php:452 msgid "Client Identifier" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:459 +#: src/usr/local/www/services_dhcp_edit.php:461 msgid "" "If an IPv4 address is entered, the address must be outside of the pool.<br /" ">If no IPv4 address is given, one will be dynamically allocated from the " "pool." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:467 +#: src/usr/local/www/services_dhcp_edit.php:469 #: src/usr/local/www/services_dhcpv6_edit.php:270 msgid "Name of the host, without domain part." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:472 +#: src/usr/local/www/services_dhcp_edit.php:474 #: src/usr/local/www/services_dhcpv6_edit.php:282 msgid "Netboot filename" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:475 +#: src/usr/local/www/services_dhcp_edit.php:477 #: src/usr/local/www/services_dhcpv6_edit.php:285 msgid "" "Name of the file that should be loaded when this host boots off of the " "network, overrides setting on main page." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:479 +#: src/usr/local/www/services_dhcp_edit.php:481 msgid "Root Path" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:482 +#: src/usr/local/www/services_dhcp_edit.php:484 msgid "Enter the root-path-string, overrides setting on main page." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:494 +#: src/usr/local/www/services_dhcp_edit.php:496 msgid "ARP Table Static Entry" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:499 +#: src/usr/local/www/services_dhcp_edit.php:501 #: src/usr/local/www/vpn_ipsec_mobile.php:665 msgid "WINS Servers" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:518 +#: src/usr/local/www/services_dhcp_edit.php:520 #: src/usr/local/www/services_dhcpv6.php:704 #: src/usr/local/www/services_pppoe_edit.php:390 #: src/usr/local/www/vpn_ipsec_mobile.php:640 -#: src/usr/local/www/vpn_openvpn_csc.php:471 +#: src/usr/local/www/vpn_openvpn_csc.php:475 msgid "DNS Servers" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:552 +#: src/usr/local/www/services_dhcp_edit.php:554 msgid "" "Note: leave blank to use the system default DNS servers - this interface's " "IP if DNS Forwarder or Resolver is enabled, otherwise the servers configured " "on the General page." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:561 +#: src/usr/local/www/services_dhcp_edit.php:563 msgid "" "The default is to use the IP on this interface of the firewall as the " "gateway. Specify an alternate gateway here if this is not the correct " -"gateway for your network." +"gateway for the network." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:568 +#: src/usr/local/www/services_dhcp_edit.php:570 #: src/usr/local/www/services_dhcpv6.php:724 msgid "" "The default is to use the domain name of this system as the default domain " -"name provided by DHCP. You may specify an alternate domain name here. " +"name provided by DHCP. An alternate domain name may be specified here. " msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:579 +#: src/usr/local/www/services_dhcp_edit.php:581 msgid "Default lease time (Seconds)" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:582 +#: src/usr/local/www/services_dhcp_edit.php:584 msgid "" "Used for clients that do not ask for a specific expiration time. The default " "is 7200 seconds." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:586 +#: src/usr/local/www/services_dhcp_edit.php:588 msgid "Maximum lease time (Seconds)" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:589 -msgid "" -"This is the maximum lease time for clients that ask for a specific " -"expiration time. The default is 86400 seconds." -msgstr "" - -#: src/usr/local/www/services_dhcp_edit.php:605 -#: src/usr/local/www/services_dhcpv6.php:772 +#: src/usr/local/www/services_dhcp_edit.php:609 +#: src/usr/local/www/services_dhcpv6.php:774 #: src/usr/local/www/services_dnsmasq.php:244 -#: src/usr/local/www/services_unbound.php:352 +#: src/usr/local/www/services_unbound.php:358 msgid "DHCP Registration" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:615 -#: src/usr/local/www/services_dhcpv6.php:782 +#: src/usr/local/www/services_dhcp_edit.php:619 +#: src/usr/local/www/services_dhcpv6.php:784 msgid "" "Leave blank to disable dynamic DNS registration. Enter the dynamic DNS " "domain which will be used to register client names in the DNS server." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:619 -#: src/usr/local/www/services_dhcpv6.php:786 +#: src/usr/local/www/services_dhcp_edit.php:623 +#: src/usr/local/www/services_dhcpv6.php:788 msgid "DDNS Server IP" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:621 -#: src/usr/local/www/services_dhcpv6.php:788 +#: src/usr/local/www/services_dhcp_edit.php:625 +#: src/usr/local/www/services_dhcpv6.php:790 msgid "" "Enter the primary domain name server IP address for the dynamic domain name." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:625 -#: src/usr/local/www/services_dhcpv6.php:792 +#: src/usr/local/www/services_dhcp_edit.php:629 +#: src/usr/local/www/services_dhcpv6.php:794 msgid "DDNS Domain Key name" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:628 -#: src/usr/local/www/services_dhcpv6.php:795 +#: src/usr/local/www/services_dhcp_edit.php:632 +#: src/usr/local/www/services_dhcpv6.php:797 msgid "" "Enter the dynamic DNS domain key name which will be used to register client " "names in the DNS server." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:632 -#: src/usr/local/www/services_dhcpv6.php:799 +#: src/usr/local/www/services_dhcp_edit.php:636 +#: src/usr/local/www/services_dhcpv6.php:801 msgid "DDNS Domain Key secret" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:635 -#: src/usr/local/www/services_dhcpv6.php:802 +#: src/usr/local/www/services_dhcp_edit.php:639 +#: src/usr/local/www/services_dhcpv6.php:804 msgid "" "Enter the dynamic DNS domain key secret which will be used to register " "client names in the DNS server." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:645 -#: src/usr/local/www/services_dhcpv6.php:832 +#: src/usr/local/www/services_dhcp_edit.php:651 +#: src/usr/local/www/services_dhcpv6.php:836 msgid "NTP servers" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:649 -#: src/usr/local/www/services_dhcpv6.php:836 -#: src/usr/local/www/vpn_openvpn_csc.php:512 +#: src/usr/local/www/services_dhcp_edit.php:655 +#: src/usr/local/www/services_dhcpv6.php:840 +#: src/usr/local/www/vpn_openvpn_csc.php:516 msgid "NTP Servers" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:679 +#: src/usr/local/www/services_dhcp_edit.php:687 msgid "TFTP servers" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:688 +#: src/usr/local/www/services_dhcp_edit.php:696 msgid "" "Leave blank to disable. Enter a full hostname or IP for the TFTP server." msgstr "" @@ -19922,7 +20192,7 @@ msgid "A valid IPv6 address must be specified for the gateway." msgstr "" #: src/usr/local/www/services_dhcpv6.php:312 -#: src/usr/local/www/services_router_advertisements.php:189 +#: src/usr/local/www/services_router_advertisements.php:190 msgid "A valid IPv6 address must be specified for each of the DNS servers." msgstr "" @@ -19956,15 +20226,15 @@ msgid "" "while the DHCPv6 Relay is enabled on any interface." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:581 +#: src/usr/local/www/services_dhcpv6.php:579 msgid "" "The DHCPv6 Server can only be enabled on interfaces configured with a static " "IPv6 address. This system has none." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:590 -#: src/usr/local/www/services_router_advertisements.php:247 -#: src/usr/local/www/services_router_advertisements.php:289 +#: src/usr/local/www/services_dhcpv6.php:588 +#: src/usr/local/www/services_router_advertisements.php:249 +#: src/usr/local/www/services_router_advertisements.php:291 msgid "Router Advertisements" msgstr "" @@ -19997,7 +20267,7 @@ msgstr "" #: src/usr/local/www/services_dhcpv6.php:702 msgid "" -"You can define a Prefix range here for DHCP Prefix Delegation. This allows " +"A Prefix range can be defined here for DHCP Prefix Delegation. This allows " "for assigning networks to subrouters. The start and end of the range must " "end on boundaries of the prefix delegation size." msgstr "" @@ -20008,12 +20278,6 @@ msgid "" "DNS forwarder is enabled, or the servers configured on the \"General\" page." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:721 -#: src/usr/local/www/services_dyndns_edit.php:135 -#: src/usr/local/www/services_dyndns_edit.php:330 -msgid "Domain Name" -msgstr "" - #: src/usr/local/www/services_dhcpv6.php:738 msgid "" "Lease time in seconds. Used for clients that do not ask for a specific " @@ -20041,20 +20305,20 @@ msgid "" "selected. This will be used for all DHCPv6 interfaces lease time." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:809 +#: src/usr/local/www/services_dhcpv6.php:811 #: src/usr/local/www/services_unbound_acls.php:265 msgid "Allow" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:811 +#: src/usr/local/www/services_dhcpv6.php:813 msgid "Ignore" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:806 +#: src/usr/local/www/services_dhcpv6.php:808 msgid "DDNS Client Updates" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:812 +#: src/usr/local/www/services_dhcpv6.php:814 msgid "" "How Forward entries are handled when client indicates they wish to update " "DNS. Allow prevents DHCP from updating Forward entries, Deny indicates that " @@ -20063,49 +20327,49 @@ msgid "" "using a different domain name." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:819 +#: src/usr/local/www/services_dhcpv6.php:821 msgid "DDNS Reverse" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:872 +#: src/usr/local/www/services_dhcpv6.php:878 msgid "LDAP URI" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:885 -#: src/usr/local/www/services_dhcpv6.php:891 +#: src/usr/local/www/services_dhcpv6.php:893 +#: src/usr/local/www/services_dhcpv6.php:899 msgid "Network booting" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:898 +#: src/usr/local/www/services_dhcpv6.php:906 msgid "Bootfile URL" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:962 +#: src/usr/local/www/services_dhcpv6.php:974 msgid "Add Option" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:983 +#: src/usr/local/www/services_dhcpv6.php:997 #, php-format msgid "" -"The DNS servers entered in %1$sSystem: General setup%3$s (or the %2$sDNS " +"The DNS servers entered in %1$sSystem: General Setup%3$s (or the %2$sDNS " "forwarder%3$s if enabled) will be assigned to clients by the DHCP server." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:989 +#: src/usr/local/www/services_dhcpv6.php:1003 #, php-format msgid "" "The DHCP lease table can be viewed on the %1$sStatus: DHCPv6 leases%2$s page." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:997 +#: src/usr/local/www/services_dhcpv6.php:1011 msgid "DHCPv6 Static Mappings for this Interface" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:1002 +#: src/usr/local/www/services_dhcpv6.php:1016 #: src/usr/local/www/services_dhcpv6_edit.php:141 #: src/usr/local/www/services_dhcpv6_edit.php:249 #: src/usr/local/www/status_dhcpv6_leases.php:459 -#: src/usr/local/www/status_dhcpv6_leases.php:553 +#: src/usr/local/www/status_dhcpv6_leases.php:556 msgid "DUID" msgstr "" @@ -20126,8 +20390,8 @@ msgid "Enter a DUID in the following format: " msgstr "" #: src/usr/local/www/services_dhcpv6_edit.php:253 -#: src/usr/local/www/pkg_edit.php:1305 src/usr/local/www/pkg_edit.php:1311 -#: src/usr/local/www/pkg_edit.php:1316 +#: src/usr/local/www/pkg_edit.php:1333 src/usr/local/www/pkg_edit.php:1339 +#: src/usr/local/www/pkg_edit.php:1344 msgid "<br />" msgstr "" @@ -20179,8 +20443,8 @@ msgid "" msgstr "" #: src/usr/local/www/services_dnsmasq.php:141 -#: src/usr/local/www/system_advanced_admin.php:132 -msgid "You must specify a valid port number" +#: src/usr/local/www/services_unbound.php:180 +msgid "A valid port number must be specified." msgstr "" #: src/usr/local/www/services_dnsmasq.php:160 @@ -20196,7 +20460,7 @@ msgid "General DNS Forwarder Options" msgstr "" #: src/usr/local/www/services_dnsmasq.php:256 -#: src/usr/local/www/services_unbound.php:361 +#: src/usr/local/www/services_unbound.php:367 msgid "Static DHCP" msgstr "" @@ -20206,17 +20470,17 @@ msgstr "" #: src/usr/local/www/services_dnsmasq.php:275 #: src/usr/local/www/services_dnsmasq.php:279 -#: src/usr/local/www/services_unbound.php:345 +#: src/usr/local/www/services_unbound.php:351 msgid "DNS Query Forwarding" msgstr "" #: src/usr/local/www/services_dnsmasq.php:309 -#: src/usr/local/www/services_unbound.php:302 +#: src/usr/local/www/services_unbound.php:308 msgid "Listen Port" msgstr "" #: src/usr/local/www/services_dnsmasq.php:313 -#: src/usr/local/www/services_unbound.php:306 +#: src/usr/local/www/services_unbound.php:312 msgid "" "The port used for responding to DNS queries. It should normally be left " "blank unless another service needs to bind to TCP/UDP port 53." @@ -20243,107 +20507,91 @@ msgid "" msgstr "" #: src/usr/local/www/services_dnsmasq.php:337 -#: src/usr/local/www/services_unbound.php:370 -#: src/usr/local/www/services_unbound.php:376 -#: src/usr/local/www/services_unbound.php:382 +#: src/usr/local/www/services_unbound.php:375 +#: src/usr/local/www/services_unbound.php:389 #: src/usr/local/www/vpn_openvpn_client.php:777 -#: src/usr/local/www/vpn_openvpn_server.php:1158 +#: src/usr/local/www/vpn_openvpn_server.php:1163 msgid "Custom options" msgstr "" #: src/usr/local/www/services_dnsmasq.php:339 msgid "" -"Enter any additional options you would like to add to the dnsmasq " -"configuration here, separated by a space or newline" +"Enter any additional options to add to the dnsmasq configuration here, " +"separated by a space or newline." msgstr "" -#: src/usr/local/www/services_dnsmasq.php:349 -msgid "" -"If the DNS forwarder is enabled, the DHCP service (if enabled) will " -"automatically serve the LAN IP address as a DNS server to DHCP clients so " -"they will use the forwarder." -msgstr "" - -#: src/usr/local/www/services_dnsmasq.php:351 -#, php-format -msgid "" -"The DNS forwarder will use the DNS servers entered in %1$sSystem > General " -"Setup%2$s or those obtained via DHCP or PPP on WAN if "Allow DNS server " -"list to be overridden by DHCP/PPP on WAN" is checked. If you don't use " -"that option (or if you use a static IP address on WAN), you must manually " -"specify at least one DNS server on the %1$sSystem > General Setup%2$s page." -msgstr "" - -#: src/usr/local/www/services_dnsmasq.php:363 -msgid "" -"Entries in this section override individual results from the forwarders." -msgstr "" - -#: src/usr/local/www/services_dnsmasq.php:364 -msgid "Use these for changing DNS results or for adding custom DNS records." -msgstr "" - -#: src/usr/local/www/services_dnsmasq.php:369 -#: src/usr/local/www/services_unbound.php:433 +#: src/usr/local/www/services_dnsmasq.php:347 +#: src/usr/local/www/services_unbound.php:462 msgid "Host Overrides" msgstr "" -#: src/usr/local/www/services_dnsmasq.php:375 -#: src/usr/local/www/services_dnsmasq.php:455 +#: src/usr/local/www/services_dnsmasq.php:353 +#: src/usr/local/www/services_dnsmasq.php:427 #: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:100 #: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:167 #: src/usr/local/www/services_dnsmasq_edit.php:110 #: src/usr/local/www/services_dnsmasq_edit.php:254 #: src/usr/local/www/services_dnsmasq_edit.php:311 -#: src/usr/local/www/services_unbound.php:439 -#: src/usr/local/www/services_unbound.php:515 +#: src/usr/local/www/services_unbound.php:468 +#: src/usr/local/www/services_unbound.php:544 #: src/usr/local/www/services_unbound_domainoverride_edit.php:96 -#: src/usr/local/www/services_unbound_domainoverride_edit.php:155 +#: src/usr/local/www/services_unbound_domainoverride_edit.php:159 #: src/usr/local/www/services_unbound_host_edit.php:111 #: src/usr/local/www/services_unbound_host_edit.php:255 #: src/usr/local/www/services_unbound_host_edit.php:312 -#: src/usr/local/www/system.php:143 src/usr/local/www/system.php:383 +#: src/usr/local/www/system.php:144 src/usr/local/www/system.php:387 msgid "Domain" msgstr "" -#: src/usr/local/www/services_dnsmasq.php:399 -#: src/usr/local/www/services_dnsmasq.php:423 -#: src/usr/local/www/services_unbound.php:464 -#: src/usr/local/www/services_unbound.php:488 +#: src/usr/local/www/services_dnsmasq.php:377 +#: src/usr/local/www/services_dnsmasq.php:401 +#: src/usr/local/www/services_unbound.php:493 +#: src/usr/local/www/services_unbound.php:517 msgid "Edit host override" msgstr "" -#: src/usr/local/www/services_dnsmasq.php:400 -#: src/usr/local/www/services_unbound.php:465 +#: src/usr/local/www/services_dnsmasq.php:378 +#: src/usr/local/www/services_unbound.php:494 msgid "Delete host override" msgstr "" -#: src/usr/local/www/services_dnsmasq.php:416 -#: src/usr/local/www/services_unbound.php:481 +#: src/usr/local/www/services_dnsmasq.php:394 +#: src/usr/local/www/services_unbound.php:510 msgid "Alias for " msgstr "" -#: src/usr/local/www/services_dnsmasq.php:444 -msgid "" -"Entries in this area override an entire domain, and subdomains, by " -"specifying an authoritative DNS server to be queried for that domain." -msgstr "" - -#: src/usr/local/www/services_dnsmasq.php:450 -#: src/usr/local/www/services_unbound.php:510 +#: src/usr/local/www/services_dnsmasq.php:422 +#: src/usr/local/www/services_unbound.php:539 msgid "Domain Overrides" msgstr "" -#: src/usr/local/www/services_dnsmasq.php:477 -#: src/usr/local/www/services_unbound.php:538 +#: src/usr/local/www/services_dnsmasq.php:449 +#: src/usr/local/www/services_unbound.php:567 msgid "Edit domain override" msgstr "" -#: src/usr/local/www/services_dnsmasq.php:478 -#: src/usr/local/www/services_unbound.php:539 +#: src/usr/local/www/services_dnsmasq.php:450 +#: src/usr/local/www/services_unbound.php:568 msgid "Delete domain override" msgstr "" +#: src/usr/local/www/services_dnsmasq.php:471 +msgid "" +"If the DNS forwarder is enabled, the DHCP service (if enabled) will " +"automatically serve the LAN IP address as a DNS server to DHCP clients so " +"they will use the forwarder." +msgstr "" + +#: src/usr/local/www/services_dnsmasq.php:473 +#, php-format +msgid "" +"The DNS forwarder will use the DNS servers entered in %1$sSystem > General " +"Setup%2$s or those obtained via DHCP or PPP on WAN if "Allow DNS server " +"list to be overridden by DHCP/PPP on WAN" is checked. If that option is " +"not used (or if a static IP address is used on WAN), at least one DNS server " +"must be manually specified on the %1$sSystem > General Setup%2$s page." +msgstr "" + #: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:112 #: src/usr/local/www/services_unbound_domainoverride_edit.php:107 msgid "A valid domain must be specified after _msdcs." @@ -20381,7 +20629,7 @@ msgid "" "test or mycompany.localdomain or 1.168.192.in-addr.arpa" msgstr "" -#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:177 +#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:178 msgid "" "IP address of the authoritative DNS server for this domain<br />e.g.: " "192.168.100.100<br />Or enter # for an exclusion to pass through this host/" @@ -20389,18 +20637,18 @@ msgid "" "enter ! for lookups for this host/subdomain to NOT be forwarded anywhere." msgstr "" -#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:184 +#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:185 msgid "Source IP" msgstr "" -#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:186 +#: src/usr/local/www/services_dnsmasq_domainoverride_edit.php:187 msgid "" "Source IP address for queries to the DNS server for the override domain. " -"Leave blank unless your DNS server is accessed through a VPN tunnel." +"Leave blank unless the DNS server is accessed through a VPN tunnel." msgstr "" #: src/usr/local/www/services_dnsmasq_edit.php:116 -#: src/usr/local/www/system.php:167 +#: src/usr/local/www/system.php:168 msgid "" "The hostname can only contain the characters A-Z, 0-9 and '-'. It may not " "start or end with '-'." @@ -20470,9 +20718,9 @@ msgstr "" msgid "Host name" msgstr "" -#: src/usr/local/www/services_dnsmasq_edit.php:332 -#: src/usr/local/www/services_unbound_host_edit.php:333 -msgid "Add host name" +#: src/usr/local/www/services_dnsmasq_edit.php:334 +#: src/usr/local/www/services_unbound_host_edit.php:335 +msgid "Add Host Name" msgstr "" #: src/usr/local/www/services_dyndns.php:100 @@ -20492,9 +20740,9 @@ msgstr "" #: src/usr/local/www/services_dyndns.php:121 #: src/usr/local/www/services_ntpd_acls.php:240 -#: src/usr/local/www/status_openvpn.php:259 -#: src/usr/local/www/status_openvpn.php:315 -#: src/usr/local/www/status_services.php:130 +#: src/usr/local/www/status_openvpn.php:263 +#: src/usr/local/www/status_openvpn.php:319 +#: src/usr/local/www/status_services.php:120 #: src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php:129 #: src/usr/local/www/widgets/widgets/services_status.widget.php:108 msgid "Service" @@ -20530,7 +20778,7 @@ msgstr "" #: src/usr/local/www/services_dyndns.php:251 msgid "" -"You can force an update for an IP address on the edit page for that service." +"An update for an IP address can be forced on the edit page for that service." msgstr "" #: src/usr/local/www/services_dyndns_edit.php:124 @@ -20579,8 +20827,8 @@ msgstr "" #: src/usr/local/www/services_dyndns_edit.php:335 msgid "" "Enter the complete fully qualified domain name. Example: myhost.dyndns." -"org<br />he.net tunnelbroker: Enter your tunnel ID<br />GleSYS: Enter your " -"record ID<br />DNSimple: Enter only the domain name.<br />Namecheap: Enter " +"org<br />he.net tunnelbroker: Enter the tunnel ID.<br />GleSYS: Enter the " +"record ID.<br />DNSimple: Enter only the domain name.<br />Namecheap: Enter " "the hostname and the domain separately, with the domain being the domain or " "subdomain zone being handled by Namecheap." msgstr "" @@ -20591,8 +20839,8 @@ msgstr "" #: src/usr/local/www/services_dyndns_edit.php:348 msgid "" -"Note: With DynDNS service you can only use a hostname, not an IP address. " -"Set this option only if you need a special MX record. Not all services " +"Note: With DynDNS service only a hostname can be used, not an IP address. " +"Set this option only if a special MX record is needed. Not all services " "support this." msgstr "" @@ -20611,16 +20859,16 @@ msgstr "" #: src/usr/local/www/services_dyndns_edit.php:384 msgid "" "Username is required for all types except Namecheap, FreeDNS and Custom " -"Entries.<br />Route 53: Enter your Access Key ID.<br />GleSYS: Enter your " -"API user.<br />For Custom Entries, Username and Password represent HTTP " +"Entries.<br />Route 53: Enter the Access Key ID.<br />GleSYS: Enter the API " +"user.<br />For Custom Entries, Username and Password represent HTTP " "Authentication username and passwords." msgstr "" #: src/usr/local/www/services_dyndns_edit.php:394 msgid "" -"FreeDNS (freedns.afraid.org): Enter your \"Authentication Token\" provided " -"by FreeDNS.<br />Route 53: Enter your Secret Access Key.<br />GleSYS: Enter " -"your API key.<br />DNSimple: Enter your API token." +"FreeDNS (freedns.afraid.org): Enter the \"Authentication Token\" provided by " +"FreeDNS.<br />Route 53: Enter the Secret Access Key.<br />GleSYS: Enter the " +"API key.<br />DNSimple: Enter the API token." msgstr "" #: src/usr/local/www/services_dyndns_edit.php:401 @@ -20629,8 +20877,8 @@ msgstr "" #: src/usr/local/www/services_dyndns_edit.php:404 msgid "" -"Enter Zone ID that you received when you created your domain in Route 53." -"<br />DNSimple: Enter the Record ID of record to update." +"Enter Zone ID that was received when creating the domain in Route 53.<br /" +">DNSimple: Enter the Record ID of record to update." msgstr "" #: src/usr/local/www/services_dyndns_edit.php:412 @@ -20649,11 +20897,10 @@ msgid "TTL" msgstr "" #: src/usr/local/www/services_dyndns_edit.php:428 -msgid "Choose TTL for your dns record." +msgid "Choose TTL for the dns record." msgstr "" #: src/usr/local/www/services_dyndns_edit.php:447 -#: src/usr/local/www/services_rfc2136_edit.php:149 #: src/usr/local/www/services_rfc2136_edit.php:337 msgid "Save & Force Update" msgstr "" @@ -20673,8 +20920,8 @@ msgstr "" #: src/usr/local/www/services_igmpproxy.php:183 msgid "" "Please add the interface for upstream, the allowed subnets, and the " -"downstream interfaces you would like the proxy to allow. Only one \"upstream" -"\" interface can be configured." +"downstream interfaces for the proxy to allow. Only one \"upstream\" " +"interface can be configured." msgstr "" #: src/usr/local/www/services_igmpproxy_edit.php:103 @@ -20696,7 +20943,7 @@ msgstr "" #: src/usr/local/www/services_igmpproxy_edit.php:205 msgid "" "The upstream network interface is the outgoing interface which is " -"responsible for communicating to available multicast data sources .There can " +"responsible for communicating to available multicast data sources. There can " "only be one upstream interface.<br />Downstream network interfaces are the " "distribution\tinterfaces to the destination networks, where multicast " "clients can join groups and receive multicast data. One or more downstream " @@ -20714,8 +20961,7 @@ msgid "" "by default the threshold is 1." msgstr "" -#: src/usr/local/www/services_igmpproxy_edit.php:273 -#: src/usr/local/www/services_unbound_acls.php:311 +#: src/usr/local/www/services_igmpproxy_edit.php:275 msgid "Add network" msgstr "" @@ -20744,8 +20990,8 @@ msgstr "" #: src/usr/local/www/services_ntpd_gps.php:233 #: src/usr/local/www/services_ntpd_pps.php:136 #: src/usr/local/www/services_ntpd_pps.php:152 -#: src/usr/local/www/status_queues.php:197 -#: src/usr/local/www/status_queues.php:201 +#: src/usr/local/www/status_queues.php:196 +#: src/usr/local/www/status_queues.php:200 msgid "PPS" msgstr "" @@ -20764,82 +21010,82 @@ msgstr "" msgid "Time Servers" msgstr "" -#: src/usr/local/www/services_ntpd.php:296 +#: src/usr/local/www/services_ntpd.php:300 msgid "" "For best results three to five servers should be configured here.<br />The " "prefer option indicates that NTP should favor the use of this server more " -"than all others.<br />The noselect option indicates that NTP should not use " +"than all others.<br />The no select option indicates that NTP should not use " "this server for time, but stats for this server will be collected and " "displayed." msgstr "" -#: src/usr/local/www/services_ntpd.php:302 +#: src/usr/local/www/services_ntpd.php:306 msgid "Orphan Mode" msgstr "" -#: src/usr/local/www/services_ntpd.php:305 +#: src/usr/local/www/services_ntpd.php:309 msgid "" "Orphan mode allows the system clock to be used when no other clocks are " "available. The number here specifies the stratum reported during orphan mode " "and should normally be set to a number high enough to insure that any other " -"servers available to clients are preferred over this server. (default: 12)." +"servers available to clients are preferred over this server (default: 12)." msgstr "" -#: src/usr/local/www/services_ntpd.php:311 +#: src/usr/local/www/services_ntpd.php:315 msgid "NTP Graphs" msgstr "" -#: src/usr/local/www/services_ntpd.php:318 +#: src/usr/local/www/services_ntpd.php:322 msgid "Logging" msgstr "" -#: src/usr/local/www/services_ntpd.php:328 +#: src/usr/local/www/services_ntpd.php:332 msgid "" "These options enable additional messages from NTP to be written to the " "System Log <a href=\"status_logs.php?logfile=ntpd\">Status > System Logs > " -"NTP</a>" +"NTP</a>." msgstr "" -#: src/usr/local/www/services_ntpd.php:340 +#: src/usr/local/www/services_ntpd.php:346 msgid "Statistics Logging" msgstr "" -#: src/usr/local/www/services_ntpd.php:342 +#: src/usr/local/www/services_ntpd.php:348 msgid "" "Warning: These options will create persistent daily log files in /var/log/" "ntp." msgstr "" -#: src/usr/local/www/services_ntpd.php:374 +#: src/usr/local/www/services_ntpd.php:382 msgid "Leap seconds" msgstr "" -#: src/usr/local/www/services_ntpd.php:376 +#: src/usr/local/www/services_ntpd.php:384 msgid "" -"A leap second file allows NTP to advertize an upcoming leap second addition " +"A leap second file allows NTP to advertise an upcoming leap second addition " "or subtraction. Normally this is only useful if this server is a stratum 1 " "time server. " msgstr "" -#: src/usr/local/www/services_ntpd.php:383 -msgid "Enter Leap second configuration as text OR select a file to upload" +#: src/usr/local/www/services_ntpd.php:391 +msgid "Enter Leap second configuration as text OR select a file to upload." msgstr "" #: src/usr/local/www/services_ntpd_acls.php:122 #: src/usr/local/www/services_ntpd_acls.php:135 #: src/usr/local/www/services_unbound_acls.php:151 #: src/usr/local/www/services_unbound_acls.php:165 -msgid "You must enter a valid IP address for each row under Networks." +msgid "A valid IP address must be entered for each row under Networks." msgstr "" #: src/usr/local/www/services_ntpd_acls.php:126 #: src/usr/local/www/services_unbound_acls.php:156 -msgid "You must enter a valid IPv4 netmask for each IPv4 row under Networks." +msgid "A valid IPv4 netmask must be entered for each IPv4 row under Networks." msgstr "" #: src/usr/local/www/services_ntpd_acls.php:132 #: src/usr/local/www/services_unbound_acls.php:162 -msgid "You must enter a valid IPv6 netmask for each IPv6 row under Networks." +msgid "A valid IPv6 netmask must be entered for each IPv6 row under Networks." msgstr "" #: src/usr/local/www/services_ntpd_acls.php:215 @@ -20938,10 +21184,10 @@ msgstr "" #: src/usr/local/www/services_ntpd_gps.php:256 msgid "" -"This option allows you to select a predefined configuration. Default is the " +"This option allows a predefined configuration to be selected. Default is the " "configuration of pfSense 2.1 and earlier (not recommended). Select Generic " -"if your GPS is not listed.<br /><br />The predefined configurations assume " -"your GPS has already been set to NMEA mode." +"if the GPS is not listed.<br /><br />The predefined configurations assume " +"the GPS has already been set to NMEA mode." msgstr "" #: src/usr/local/www/services_ntpd_gps.php:272 @@ -20995,7 +21241,7 @@ msgstr "" #: src/usr/local/www/services_ntpd_gps.php:315 msgid "" "This may be used to change the GPS Clock stratum (default: 0). This may be " -"useful if, for some reason, you want ntpd to prefer a different clock" +"useful to, for some reason, have ntpd prefer a different clock." msgstr "" #: src/usr/local/www/services_ntpd_gps.php:319 @@ -21018,25 +21264,25 @@ msgstr "" msgid "This may be used to change the GPS Clock ID (default: GPS)." msgstr "" -#: src/usr/local/www/services_ntpd_gps.php:383 +#: src/usr/local/www/services_ntpd_gps.php:385 msgid "GPS Initialization" msgstr "" -#: src/usr/local/www/services_ntpd_gps.php:391 +#: src/usr/local/www/services_ntpd_gps.php:393 msgid "" "Commands entered here will be sent to the GPS during initialization. Please " -"read and understand your GPS documentation before making any changes here" +"read and understand the GPS documentation before making any changes here." msgstr "" -#: src/usr/local/www/services_ntpd_gps.php:393 +#: src/usr/local/www/services_ntpd_gps.php:395 msgid "NMEA Checksum Calculator" msgstr "" -#: src/usr/local/www/services_ntpd_gps.php:402 +#: src/usr/local/www/services_ntpd_gps.php:404 msgid "Calculate" msgstr "" -#: src/usr/local/www/services_ntpd_gps.php:417 +#: src/usr/local/www/services_ntpd_gps.php:421 msgid "" "Enter the text between "$" and "*" of a NMEA command " "string:" @@ -21059,20 +21305,20 @@ msgstr "" #: src/usr/local/www/services_ntpd_pps.php:191 msgid "" "Fudge time is used to specify the PPS signal offset from the actual second " -"such as the transmission delay between the transmitter and the receiver. " +"such as the transmission delay between the transmitter and the receiver " "(default: 0.0)." msgstr "" #: src/usr/local/www/services_ntpd_pps.php:195 -#: src/usr/local/www/status_ntpd.php:201 +#: src/usr/local/www/status_ntpd.php:302 msgid "Stratum" msgstr "" #: src/usr/local/www/services_ntpd_pps.php:198 msgid "" "This may be used to change the PPS Clock stratum (default: 0). This may be " -"useful if, for some reason, you want ntpd to prefer a different clock and " -"just monitor this source." +"useful to, for some reason, have ntpd prefer a different clock and just " +"monitor this source." msgstr "" #: src/usr/local/www/services_ntpd_pps.php:227 @@ -21084,7 +21330,7 @@ msgid "The PPPoE entry list has been changed." msgstr "" #: src/usr/local/www/services_pppoe.php:138 -#: src/usr/local/www/status_ipsec.php:134 +#: src/usr/local/www/status_ipsec.php:511 msgid "Local IP" msgstr "" @@ -21097,7 +21343,7 @@ msgid "Delete PPPoE instance" msgstr "" #: src/usr/local/www/services_pppoe_edit.php:142 -#: src/usr/local/www/vpn_l2tp.php:95 src/usr/local/www/vpn_l2tp.php:271 +#: src/usr/local/www/vpn_l2tp.php:95 src/usr/local/www/vpn_l2tp.php:268 msgid "Server address" msgstr "" @@ -21194,9 +21440,9 @@ msgstr "" #: src/usr/local/www/services_pppoe_edit.php:364 msgid "" "Enter the IP address the PPPoE server should give to clients for use as " -"their \"gateway\"<br />Typically this is set to an unused IP just outside of " -"the client range <br />NOTE: This should NOT be set to any IP address " -"currently in use on this firewall" +"their \"gateway\".<br />Typically this is set to an unused IP just outside " +"of the client range.<br />NOTE: This should NOT be set to any IP address " +"currently in use on this firewall." msgstr "" #: src/usr/local/www/services_pppoe_edit.php:370 @@ -21204,7 +21450,8 @@ msgid "Remote Address Range" msgstr "" #: src/usr/local/www/services_pppoe_edit.php:372 -msgid "Specify the starting address for the client IP address subnet" +#: src/usr/local/www/vpn_l2tp.php:280 +msgid "Specify the starting address for the client IP address subnet." msgstr "" #: src/usr/local/www/services_pppoe_edit.php:379 @@ -21214,21 +21461,22 @@ msgstr "" #: src/usr/local/www/services_pppoe_edit.php:399 msgid "" "If entered these servers will be given to all PPPoE clients, otherwise LAN " -"DNS and one WAN DNS will go to all clients" +"DNS and one WAN DNS will go to all clients." msgstr "" #: src/usr/local/www/services_pppoe_edit.php:406 msgid "" "Users will be authenticated using the RADIUS server specified below. The " -"local user database will not be used" +"local user database will not be used." msgstr "" #: src/usr/local/www/services_pppoe_edit.php:414 -msgid "Sends accounting packets to the RADIUS server" +#: src/usr/local/www/vpn_l2tp.php:338 +msgid "Sends accounting packets to the RADIUS server." msgstr "" #: src/usr/local/www/services_pppoe_edit.php:421 -msgid "If primary server fails all requests will be sent via backup server" +msgid "If primary server fails all requests will be sent via backup server." msgstr "" #: src/usr/local/www/services_pppoe_edit.php:425 @@ -21257,8 +21505,8 @@ msgstr "" #: src/usr/local/www/services_pppoe_edit.php:456 #: src/usr/local/www/services_pppoe_edit.php:489 -#: src/usr/local/www/system_authservers.php:228 -#: src/usr/local/www/system_authservers.php:721 +#: src/usr/local/www/system_authservers.php:294 +#: src/usr/local/www/system_authservers.php:789 msgid "Authentication port" msgstr "" @@ -21269,7 +21517,7 @@ msgstr "" #: src/usr/local/www/services_pppoe_edit.php:465 #: src/usr/local/www/services_pppoe_edit.php:498 -msgid "Standard ports are 1812 (authentication) and 1813 (accounting)" +msgid "Standard ports are 1812 (authentication) and 1813 (accounting)." msgstr "" #: src/usr/local/www/services_pppoe_edit.php:471 @@ -21277,7 +21525,7 @@ msgid "Primary RADIUS Server Shared Secret" msgstr "" #: src/usr/local/www/services_pppoe_edit.php:474 -#: src/usr/local/www/vpn_l2tp.php:354 +#: src/usr/local/www/vpn_l2tp.php:351 msgid "" "Enter the shared secret that will be used to authenticate to the RADIUS " "server." @@ -21301,11 +21549,11 @@ msgstr "" msgid "User table" msgstr "" -#: src/usr/local/www/services_pppoe_edit.php:568 +#: src/usr/local/www/services_pppoe_edit.php:570 msgid "Add user" msgstr "" -#: src/usr/local/www/services_pppoe_edit.php:601 +#: src/usr/local/www/services_pppoe_edit.php:605 msgid "" "Don't forget to add a firewall rule to permit traffic from PPPoE clients." msgstr "" @@ -21315,7 +21563,7 @@ msgid "RFC2136 Clients" msgstr "" #: src/usr/local/www/services_rfc2136.php:208 -#: src/usr/local/www/vpn_openvpn_client.php:843 +#: src/usr/local/www/vpn_openvpn_client.php:842 msgid "Edit client" msgstr "" @@ -21328,7 +21576,7 @@ msgid "Enable client" msgstr "" #: src/usr/local/www/services_rfc2136.php:217 -#: src/usr/local/www/vpn_openvpn_client.php:844 +#: src/usr/local/www/vpn_openvpn_client.php:843 msgid "Delete client" msgstr "" @@ -21365,7 +21613,7 @@ msgid "RFC 2136 Client" msgstr "" #: src/usr/local/www/services_rfc2136_edit.php:220 -msgid "Fully qualified hostname of the host to be updated" +msgid "Fully qualified hostname of the host to be updated." msgstr "" #: src/usr/local/www/services_rfc2136_edit.php:224 @@ -21398,10 +21646,10 @@ msgstr "" msgid "Record Type" msgstr "" -#: src/usr/local/www/services_rfc2136_edit.php:344 +#: src/usr/local/www/services_rfc2136_edit.php:346 #, php-format msgid "" -"You must configure a DNS server in %1$sSystem: General setup %2$sor allow " +"A DNS server must be configured in %1$sSystem: General Setup %2$sor allow " "the DNS server list to be overridden by DHCP/PPP on WAN for dynamic DNS " "updates to work." msgstr "" @@ -21416,31 +21664,31 @@ msgstr "" msgid "Only interfaces configured with a static IP will be shown." msgstr "" -#: src/usr/local/www/services_router_advertisements.php:142 +#: src/usr/local/www/services_router_advertisements.php:143 msgid "Router Only" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:143 +#: src/usr/local/www/services_router_advertisements.php:144 msgid "Unmanaged" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:144 +#: src/usr/local/www/services_router_advertisements.php:145 msgid "Managed" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:145 +#: src/usr/local/www/services_router_advertisements.php:146 msgid "Assisted" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:146 +#: src/usr/local/www/services_router_advertisements.php:147 msgid "Stateless DHCP" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:148 +#: src/usr/local/www/services_router_advertisements.php:149 msgid "Low" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:153 +#: src/usr/local/www/services_router_advertisements.php:154 msgid "" "Subnets are specified in CIDR format. Select the CIDR mask that pertains to " "each entry.\t/128 specifies a single IPv6 host; /64 specifies a normal IPv6 " @@ -21449,87 +21697,95 @@ msgid "" "assigned." msgstr "" -#: src/usr/local/www/services_router_advertisements.php:183 +#: src/usr/local/www/services_router_advertisements.php:184 #, php-format msgid "An invalid subnet or alias was specified. [%s/%s]" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:202 +#: src/usr/local/www/services_router_advertisements.php:203 msgid "" "A valid lifetime below 2 hrs will be ignored by clients (RFC 4862 Section " "5.5.3 point e)" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:297 +#: src/usr/local/www/services_router_advertisements.php:296 msgid "Advertisements" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:301 +#: src/usr/local/www/services_router_advertisements.php:300 msgid "Router mode" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:304 +#: src/usr/local/www/services_router_advertisements.php:303 msgid "" "Select the Operating Mode for the Router Advertisement (RA) Daemon. Use:<br /" "> <strong>Router Only</strong> to only advertise this router<br /> " "<strong>Unmanaged</strong> for Router Advertising with Stateless " "Autoconfig<br /> <strong>Managed</strong> for assignment through a " "DHCPv6 Server<br /> <strong>Assisted</strong> for DHCPv6 Server " -"assignment combined with Stateless Autoconfig.It is not required to activate " -"this DHCPv6 server when set to \"Managed\", this can be another host on the " -"network" +"assignment combined with Stateless Autoconfig. It is not required to " +"activate this DHCPv6 server when set to \"Managed\", this can be another " +"host on the network" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:313 +#: src/usr/local/www/services_router_advertisements.php:312 msgid "Router priority" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:316 +#: src/usr/local/www/services_router_advertisements.php:315 msgid "Select the Priority for the Router Advertisement (RA) Daemon." msgstr "" -#: src/usr/local/www/services_router_advertisements.php:320 +#: src/usr/local/www/services_router_advertisements.php:339 +msgid "RA Interface" +msgstr "" + +#: src/usr/local/www/services_router_advertisements.php:342 +msgid "Select the Interface for the Router Advertisement (RA) Daemon." +msgstr "" + +#: src/usr/local/www/services_router_advertisements.php:347 msgid "Default valid lifetime" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:323 +#: src/usr/local/www/services_router_advertisements.php:350 msgid "" "Seconds. The length of time in seconds (relative to the time the packet is " "sent) that the prefix is valid for the purpose of on-link determination. " "<br />The default is 86400 seconds." msgstr "" -#: src/usr/local/www/services_router_advertisements.php:328 +#: src/usr/local/www/services_router_advertisements.php:355 msgid "Default preferred lifetime" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:331 +#: src/usr/local/www/services_router_advertisements.php:358 msgid "" "Seconds. The length of time in seconds (relative to the time the packet is " "sent) that addresses generated from the prefix via stateless address " "autoconfiguration remain preferred. <br />The default is 14400 seconds." msgstr "" -#: src/usr/local/www/services_router_advertisements.php:335 +#: src/usr/local/www/services_router_advertisements.php:362 msgid "RA Subnets" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:351 +#: src/usr/local/www/services_router_advertisements.php:378 msgid "Subnets" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:378 +#: src/usr/local/www/services_router_advertisements.php:409 msgid "DNS Configuration" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:383 +#: src/usr/local/www/services_router_advertisements.php:414 msgid "Server " msgstr "" -#: src/usr/local/www/services_router_advertisements.php:393 +#: src/usr/local/www/services_router_advertisements.php:424 msgid "" "The RA server can optionally provide a domain search list. Use the semicolon " -"character as separator " +"character as separator." msgstr "" #: src/usr/local/www/services_snmp.php:117 @@ -21579,7 +21835,7 @@ msgid "SNMP Daemon Settings" msgstr "" #: src/usr/local/www/services_snmp.php:243 -msgid "Enter the port to accept polling events on (default 161)" +msgid "Enter the port to accept polling events on (default 161)." msgstr "" #: src/usr/local/www/services_snmp.php:247 @@ -21667,10 +21923,6 @@ msgstr "" msgid "One or more Outgoing Network Interfaces must be selected." msgstr "" -#: src/usr/local/www/services_unbound.php:180 -msgid "You must specify a valid port number." -msgstr "" - #: src/usr/local/www/services_unbound.php:198 msgid "" "The generated config file cannot be parsed by unbound. Please correct the " @@ -21682,8 +21934,8 @@ msgstr "" msgid "DNS Resolver configured." msgstr "" -#: src/usr/local/www/services_unbound.php:266 -#: src/usr/local/www/services_unbound.php:284 +#: src/usr/local/www/services_unbound.php:272 +#: src/usr/local/www/services_unbound.php:290 #: src/usr/local/www/services_unbound_acls.php:229 #: src/usr/local/www/services_unbound_advanced.php:238 #: src/usr/local/www/services_unbound_domainoverride_edit.php:145 @@ -21691,42 +21943,42 @@ msgstr "" msgid "General Settings" msgstr "" -#: src/usr/local/www/services_unbound.php:280 +#: src/usr/local/www/services_unbound.php:286 #: src/usr/local/www/services_unbound_acls.php:225 #: src/usr/local/www/services_unbound_advanced.php:234 msgid "The DNS resolver configuration has been changed." msgstr "" -#: src/usr/local/www/services_unbound.php:285 +#: src/usr/local/www/services_unbound.php:291 #: src/usr/local/www/services_unbound_acls.php:230 #: src/usr/local/www/services_unbound_advanced.php:221 #: src/usr/local/www/services_unbound_advanced.php:239 #: src/usr/local/www/vpn_ipsec.php:261 src/usr/local/www/vpn_ipsec_keys.php:122 #: src/usr/local/www/vpn_ipsec_mobile.php:459 -#: src/usr/local/www/vpn_ipsec_phase1.php:683 +#: src/usr/local/www/vpn_ipsec_phase1.php:681 #: src/usr/local/www/vpn_ipsec_phase2.php:526 #: src/usr/local/www/vpn_ipsec_settings.php:236 #: src/usr/local/www/vpn_ipsec_settings.php:269 msgid "Advanced Settings" msgstr "" -#: src/usr/local/www/services_unbound.php:286 +#: src/usr/local/www/services_unbound.php:292 #: src/usr/local/www/services_unbound_acls.php:208 #: src/usr/local/www/services_unbound_acls.php:231 #: src/usr/local/www/services_unbound_advanced.php:240 msgid "Access Lists" msgstr "" -#: src/usr/local/www/services_unbound.php:291 +#: src/usr/local/www/services_unbound.php:297 msgid "General DNS Resolver Options" msgstr "" -#: src/usr/local/www/services_unbound.php:312 -#: src/usr/local/www/system_advanced_network.php:233 +#: src/usr/local/www/services_unbound.php:318 +#: src/usr/local/www/system_advanced_network.php:232 msgid "Network Interfaces" msgstr "" -#: src/usr/local/www/services_unbound.php:316 +#: src/usr/local/www/services_unbound.php:322 msgid "" "Interface IPs used by the DNS Resolver for responding to queries from " "clients. If an interface has both IPv4 and IPv6 IPs, both are used. Queries " @@ -21734,45 +21986,54 @@ msgid "" "behavior is to respond to queries on every available IPv4 and IPv6 address." msgstr "" -#: src/usr/local/www/services_unbound.php:323 +#: src/usr/local/www/services_unbound.php:329 msgid "Outgoing Network Interfaces" msgstr "" -#: src/usr/local/www/services_unbound.php:327 +#: src/usr/local/www/services_unbound.php:333 msgid "" "Utilize different network interface(s) that the DNS Resolver will use to " "send queries to authoritative servers and receive their replies. By default " "all interfaces are used." msgstr "" -#: src/usr/local/www/services_unbound.php:331 +#: src/usr/local/www/services_unbound.php:337 msgid "System Domain Local Zone Type" msgstr "" -#: src/usr/local/www/services_unbound.php:334 +#: src/usr/local/www/services_unbound.php:340 msgid "" "The local-zone type used for the pfSense system domain (System | General " "Setup | Domain). Transparent is the default. Local-Zone type descriptions " "are available in the unbound.conf(5) manual pages." msgstr "" -#: src/usr/local/www/services_unbound.php:338 +#: src/usr/local/www/services_unbound.php:344 msgid "DNSSEC" msgstr "" -#: src/usr/local/www/services_unbound.php:384 +#: src/usr/local/www/services_unbound.php:383 +#: src/usr/local/www/services_unbound.php:419 +msgid "Display Custom Options" +msgstr "" + +#: src/usr/local/www/services_unbound.php:391 msgid "" "Enter any additional configuration parameters to add to the DNS Resolver " -"configuration here, separated by a newline" +"configuration here, separated by a newline." +msgstr "" + +#: src/usr/local/www/services_unbound.php:417 +msgid "Hide Custom Options" msgstr "" -#: src/usr/local/www/services_unbound.php:559 +#: src/usr/local/www/services_unbound.php:588 #, php-format msgid "" "If the DNS Resolver is enabled, the DHCP service (if enabled) will " "automatically serve the LAN IP address as a DNS server to DHCP clients so " "they will use the DNS Resolver. If Forwarding is enabled, the DNS Resolver " -"will use the DNS servers entered in %sSystem: General setup%s or those " +"will use the DNS servers entered in %sSystem: General Setup%s or those " "obtained via DHCP or PPP on WAN if "Allow DNS server list to be " "overridden by DHCP/PPP on WAN" is checked." msgstr "" @@ -21804,7 +22065,7 @@ msgstr "" msgid "" "%sAllow Snoop:%s Allow recursive and nonrecursive access from hosts within " "the netblock defined below. Used for cache snooping and ideally should only " -"be configured for your administrative host." +"be configured for the administrative host." msgstr "" #: src/usr/local/www/services_unbound_acls.php:238 @@ -21823,19 +22084,19 @@ msgstr "" msgid "Allow Snoop" msgstr "" -#: src/usr/local/www/services_unbound_acls.php:320 +#: src/usr/local/www/services_unbound_acls.php:324 msgid "Access Lists to Control Access to the DNS Resolver" msgstr "" -#: src/usr/local/www/services_unbound_acls.php:326 +#: src/usr/local/www/services_unbound_acls.php:330 msgid "Access List Name" msgstr "" -#: src/usr/local/www/services_unbound_acls.php:348 +#: src/usr/local/www/services_unbound_acls.php:352 msgid "Edit ACL" msgstr "" -#: src/usr/local/www/services_unbound_acls.php:349 +#: src/usr/local/www/services_unbound_acls.php:353 msgid "Delete ACL" msgstr "" @@ -21912,7 +22173,7 @@ msgstr "" msgid "" "When enabled, this option can cause an increase of around 10% more DNS " "traffic and load on the server, but frequently requested items will not " -"expire from the cache" +"expire from the cache." msgstr "" #: src/usr/local/www/services_unbound_advanced.php:270 @@ -21977,10 +22238,10 @@ msgstr "" msgid "" "Number of bytes size to advertise as the EDNS reassembly buffer size. This " "is the value that is used in UDP datagrams sent to peers. RFC recommendation " -"is 4096 (which is the default). If you have fragmentation reassemble " -"problems, usually seen as timeouts, then a value of 1480 should help. The " -"512 value bypasses most MTU path problems, but it can generate an excessive " -"amount of TCP fallback." +"is 4096 (which is the default). If fragmentation reassemble problems occur, " +"usually seen as timeouts, then a value of 1480 should help. The 512 value " +"bypasses most MTU path problems, but it can generate an excessive amount of " +"TCP fallback." msgstr "" #: src/usr/local/www/services_unbound_advanced.php:314 @@ -21991,7 +22252,7 @@ msgstr "" msgid "" "The number of queries that every thread will service simultaneously. If more " "queries arrive that need to be serviced, and no queries can be jostled, then " -"these queries are dropped" +"these queries are dropped." msgstr "" #: src/usr/local/www/services_unbound_advanced.php:321 @@ -22014,7 +22275,7 @@ msgid "" "The Maximum Time to Live for RRsets and messages in the cache. The default " "is 86400 seconds (1 day). When the internal TTL expires the cache item is " "expired. This can be configured to force the resolver to query for data more " -"often and not trust (very large) TTL values" +"often and not trust (very large) TTL values." msgstr "" #: src/usr/local/www/services_unbound_advanced.php:336 @@ -22099,7 +22360,7 @@ msgstr "" #: src/usr/local/www/services_unbound_advanced.php:390 msgid "" "See the implementation <a href=\"https://tools.ietf.org/html/draft-vixie-" -"dnsext-dns0x20-00\">draft dns-0x20</a> for more information: " +"dnsext-dns0x20-00\">draft dns-0x20</a> for more information." msgstr "" #: src/usr/local/www/services_unbound_domainoverride_edit.php:117 @@ -22112,20 +22373,20 @@ msgstr "" msgid "A valid IP address must be specified, for example 192.168.100.10." msgstr "" -#: src/usr/local/www/services_unbound_domainoverride_edit.php:151 +#: src/usr/local/www/services_unbound_domainoverride_edit.php:155 msgid "Domain Override" msgstr "" -#: src/usr/local/www/services_unbound_domainoverride_edit.php:158 +#: src/usr/local/www/services_unbound_domainoverride_edit.php:162 msgid "" -"Domain to override (NOTE: this does not have to be a valid TLD!) e.g.: " -"testormycompany.localdomainor1.168.192.in-addr.arpa" +"Domain to override (NOTE: this does not have to be a valid TLD!) e.g.: test " +"or mycompany.localdomain or 1.168.192.in-addr.arpa" msgstr "" -#: src/usr/local/www/services_unbound_domainoverride_edit.php:164 +#: src/usr/local/www/services_unbound_domainoverride_edit.php:168 msgid "" "IP address of the authoritative DNS server for this domain. e.g.: " -"192.168.100.100<br />To use a nondefault port for communication, append an " +"192.168.100.100<br />To use a non-default port for communication, append an " "'@' with the port number." msgstr "" @@ -22188,24 +22449,28 @@ msgstr "" msgid "Enter a MAC address in the following format: xx:xx:xx:xx:xx:xx" msgstr "" -#: src/usr/local/www/services_wol.php:191 +#: src/usr/local/www/services_wol.php:199 msgid "Wake-on-LAN Devices" msgstr "" -#: src/usr/local/www/services_wol.php:195 +#: src/usr/local/www/services_wol.php:203 msgid "Click the MAC address to wake up an individual device." msgstr "" -#: src/usr/local/www/services_wol.php:219 -msgid "Edit device" +#: src/usr/local/www/services_wol.php:227 +msgid "Edit Device" +msgstr "" + +#: src/usr/local/www/services_wol.php:228 +msgid "Delete Device" msgstr "" -#: src/usr/local/www/services_wol.php:220 -msgid "Delete device" +#: src/usr/local/www/services_wol.php:229 +msgid "Wake Device" msgstr "" -#: src/usr/local/www/services_wol.php:234 -msgid "Wake all devices" +#: src/usr/local/www/services_wol.php:245 +msgid "Wake All Devices" msgstr "" #: src/usr/local/www/services_wol_edit.php:155 @@ -22228,71 +22493,71 @@ msgstr "" msgid "Related log entries" msgstr "" -#: src/usr/local/www/status.php:166 +#: src/usr/local/www/status.php:168 msgid "System Status on " msgstr "" -#: src/usr/local/www/status.php:169 +#: src/usr/local/www/status.php:171 msgid "This status page includes the following information" msgstr "" -#: src/usr/local/www/status.php:286 +#: src/usr/local/www/status.php:290 msgid "" "Make sure all sensitive information is removed! (Passwords, etc.) before " "posting information from this page in public places (like mailing lists)." msgstr "" -#: src/usr/local/www/status.php:288 +#: src/usr/local/www/status.php:292 msgid "Common password fields in config.xml have been automatically redacted." msgstr "" -#: src/usr/local/www/status.php:290 +#: src/usr/local/www/status.php:294 msgid "Diagnostics > Command Prompt." msgstr "" -#: src/usr/local/www/status.php:295 +#: src/usr/local/www/status.php:299 msgid "Saving output to archive..." msgstr "" -#: src/usr/local/www/status.php:303 +#: src/usr/local/www/status.php:307 msgid "Done." msgstr "" #: src/usr/local/www/status_captiveportal.php:131 #: src/usr/local/www/status_captiveportal.php:140 -#: src/usr/local/www/status_captiveportal_expire.php:101 -#: src/usr/local/www/status_captiveportal_test.php:109 -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:97 -#: src/usr/local/www/status_captiveportal_vouchers.php:133 -msgid "Active Users" -msgstr "" - -#: src/usr/local/www/status_captiveportal.php:141 #: src/usr/local/www/status_captiveportal_expire.php:102 #: src/usr/local/www/status_captiveportal_test.php:110 #: src/usr/local/www/status_captiveportal_voucher_rolls.php:98 -#: src/usr/local/www/status_captiveportal_vouchers.php:85 #: src/usr/local/www/status_captiveportal_vouchers.php:134 -msgid "Active Vouchers" +msgid "Active Users" msgstr "" -#: src/usr/local/www/status_captiveportal.php:143 -#: src/usr/local/www/status_captiveportal_expire.php:104 -#: src/usr/local/www/status_captiveportal_test.php:86 -#: src/usr/local/www/status_captiveportal_test.php:112 -#: src/usr/local/www/status_captiveportal_test.php:118 -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:100 -#: src/usr/local/www/status_captiveportal_vouchers.php:136 -msgid "Test Vouchers" +#: src/usr/local/www/status_captiveportal.php:141 +#: src/usr/local/www/status_captiveportal_expire.php:103 +#: src/usr/local/www/status_captiveportal_test.php:111 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:99 +#: src/usr/local/www/status_captiveportal_vouchers.php:86 +#: src/usr/local/www/status_captiveportal_vouchers.php:135 +msgid "Active Vouchers" msgstr "" -#: src/usr/local/www/status_captiveportal.php:144 -#: src/usr/local/www/status_captiveportal_expire.php:86 +#: src/usr/local/www/status_captiveportal.php:143 #: src/usr/local/www/status_captiveportal_expire.php:105 -#: src/usr/local/www/status_captiveportal_expire.php:110 +#: src/usr/local/www/status_captiveportal_test.php:87 #: src/usr/local/www/status_captiveportal_test.php:113 +#: src/usr/local/www/status_captiveportal_test.php:119 #: src/usr/local/www/status_captiveportal_voucher_rolls.php:101 #: src/usr/local/www/status_captiveportal_vouchers.php:137 +msgid "Test Vouchers" +msgstr "" + +#: src/usr/local/www/status_captiveportal.php:144 +#: src/usr/local/www/status_captiveportal_expire.php:87 +#: src/usr/local/www/status_captiveportal_expire.php:106 +#: src/usr/local/www/status_captiveportal_expire.php:111 +#: src/usr/local/www/status_captiveportal_test.php:114 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:102 +#: src/usr/local/www/status_captiveportal_vouchers.php:138 msgid "Expire Vouchers" msgstr "" @@ -22305,104 +22570,115 @@ msgid "Display Zone" msgstr "" #: src/usr/local/www/status_captiveportal.php:177 -#: src/usr/local/www/widgets/include/captiveportal.inc:2 -msgid "Captive Portal Status" +#, php-format +msgid "Users Logged In (%d)" msgstr "" #: src/usr/local/www/status_captiveportal.php:192 -#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:133 +#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:134 msgid "Session start" msgstr "" #: src/usr/local/www/status_captiveportal.php:199 -#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:134 +#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:135 msgid "Last activity" msgstr "" -#: src/usr/local/www/status_captiveportal.php:252 -#: src/usr/local/www/status_interfaces.php:127 -#: src/usr/local/www/status_interfaces.php:128 -#: src/usr/local/www/status_interfaces.php:129 -#: src/usr/local/www/status_interfaces.php:130 -#: src/usr/local/www/status_ipsec.php:284 -#: src/usr/local/www/status_ipsec.php:393 -msgid "Disconnect" +#: src/usr/local/www/status_captiveportal.php:251 +msgid "Disconnect this User" msgstr "" -#: src/usr/local/www/status_captiveportal.php:265 +#: src/usr/local/www/status_captiveportal.php:264 #, php-format msgid "" -"No Captive Portal zones have been configured. You may add new zones here: " +"No Captive Portal zones have been configured. New zones may be added here: " "%1$sServices > Captive Portal%2$s." msgstr "" -#: src/usr/local/www/status_captiveportal.php:278 +#: src/usr/local/www/status_captiveportal.php:277 msgid "Don't show last activity" msgstr "" -#: src/usr/local/www/status_captiveportal.php:283 +#: src/usr/local/www/status_captiveportal.php:279 +msgid "Hide Last Activity" +msgstr "" + +#: src/usr/local/www/status_captiveportal.php:285 msgid "Show last activity" msgstr "" -#: src/usr/local/www/status_captiveportal_expire.php:93 +#: src/usr/local/www/status_captiveportal.php:287 +msgid "Show Last Activity" +msgstr "" + +#: src/usr/local/www/status_captiveportal_expire.php:94 msgid "Voucher(s) successfully marked." msgstr "" -#: src/usr/local/www/status_captiveportal_expire.php:95 +#: src/usr/local/www/status_captiveportal_expire.php:96 msgid "Voucher(s) could not be processed." msgstr "" -#: src/usr/local/www/status_captiveportal_expire.php:116 +#: src/usr/local/www/status_captiveportal_expire.php:117 msgid "" "Enter multiple vouchers separated by space or newline. All valid vouchers " "will be marked as expired." msgstr "" -#: src/usr/local/www/status_captiveportal_test.php:124 +#: src/usr/local/www/status_captiveportal_expire.php:130 +msgid "Expire" +msgstr "" + +#: src/usr/local/www/status_captiveportal_test.php:125 msgid "" "Enter multiple vouchers separated by space or newline. The remaining time, " "if valid, will be shown for each voucher." msgstr "" -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:109 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:110 msgid "Roll#" msgstr "" -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:113 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:114 msgid "used" msgstr "" -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:114 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:115 #: src/usr/local/www/status_dhcp_leases.php:176 #: src/usr/local/www/status_dhcpv6_leases.php:216 msgid "active" msgstr "" -#: src/usr/local/www/status_captiveportal_voucher_rolls.php:115 +#: src/usr/local/www/status_captiveportal_voucher_rolls.php:116 msgid "ready" msgstr "" -#: src/usr/local/www/status_captiveportal_vouchers.php:145 +#: src/usr/local/www/status_captiveportal_vouchers.php:143 +#, php-format +msgid "Vouchers in Use (%d)" +msgstr "" + +#: src/usr/local/www/status_captiveportal_vouchers.php:148 msgid "Voucher" msgstr "" -#: src/usr/local/www/status_captiveportal_vouchers.php:146 +#: src/usr/local/www/status_captiveportal_vouchers.php:149 msgid "Roll" msgstr "" -#: src/usr/local/www/status_captiveportal_vouchers.php:147 +#: src/usr/local/www/status_captiveportal_vouchers.php:150 msgid "Activated at" msgstr "" -#: src/usr/local/www/status_captiveportal_vouchers.php:148 +#: src/usr/local/www/status_captiveportal_vouchers.php:151 msgid "Expires in" msgstr "" -#: src/usr/local/www/status_captiveportal_vouchers.php:149 +#: src/usr/local/www/status_captiveportal_vouchers.php:152 msgid "Expires at" msgstr "" -#: src/usr/local/www/status_captiveportal_vouchers.php:160 +#: src/usr/local/www/status_captiveportal_vouchers.php:163 msgid "min" msgstr "" @@ -22422,7 +22698,7 @@ msgid "No CARP interfaces have been defined." msgstr "" #: src/usr/local/www/status_carp.php:164 -msgid "You can configure high availability sync settings here." +msgid "High availability sync settings can be configured here." msgstr "" #: src/usr/local/www/status_carp.php:179 @@ -22439,35 +22715,35 @@ msgstr "" msgid "Search the %1$sSystem Log%2$s for CARP demotion-related events." msgstr "" -#: src/usr/local/www/status_carp.php:186 +#: src/usr/local/www/status_carp.php:186 src/usr/local/www/status_carp.php:188 msgid "Reset CARP Demotion Status." msgstr "" -#: src/usr/local/www/status_carp.php:193 +#: src/usr/local/www/status_carp.php:195 msgid "Temporarily Disable CARP" msgstr "" -#: src/usr/local/www/status_carp.php:193 +#: src/usr/local/www/status_carp.php:195 msgid "Enable CARP" msgstr "" -#: src/usr/local/www/status_carp.php:194 +#: src/usr/local/www/status_carp.php:196 msgid "Leave Persistent CARP Maintenance Mode" msgstr "" -#: src/usr/local/www/status_carp.php:194 +#: src/usr/local/www/status_carp.php:196 msgid "Enter Persistent CARP Maintenance Mode" msgstr "" -#: src/usr/local/www/status_carp.php:199 +#: src/usr/local/www/status_carp.php:201 msgid "CARP Interfaces" msgstr "" -#: src/usr/local/www/status_carp.php:204 +#: src/usr/local/www/status_carp.php:206 msgid "CARP Interface" msgstr "" -#: src/usr/local/www/status_carp.php:253 +#: src/usr/local/www/status_carp.php:255 msgid "pfSync Nodes" msgstr "" @@ -22530,7 +22806,7 @@ msgstr "" #: src/usr/local/www/status_dhcp_leases.php:373 #: src/usr/local/www/status_dhcpv6_leases.php:451 -#: src/usr/local/www/status_ipsec.php:120 +#: src/usr/local/www/status_ipsec.php:497 #: src/usr/local/www/status_ipsec_leases.php:66 #: src/usr/local/www/status_ipsec_leases.php:74 #: src/usr/local/www/status_ipsec_sad.php:87 @@ -22540,7 +22816,7 @@ msgstr "" #: src/usr/local/www/status_dhcp_leases.php:384 #: src/usr/local/www/status_dhcpv6_leases.php:463 -#: src/usr/local/www/status_dhcpv6_leases.php:555 +#: src/usr/local/www/status_dhcpv6_leases.php:558 msgid "End" msgstr "" @@ -22550,8 +22826,8 @@ msgstr "" #: src/usr/local/www/status_gateways.php:171 #: src/usr/local/www/status_gateways.php:175 #: src/usr/local/www/status_ipsec_leases.php:87 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:250 -#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:90 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:262 +#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:96 msgid "Online" msgstr "" @@ -22560,45 +22836,45 @@ msgstr "" msgid "Lease Type" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:461 -#: src/usr/local/www/status_dhcp_leases.php:462 +#: src/usr/local/www/status_dhcp_leases.php:464 +#: src/usr/local/www/status_dhcp_leases.php:465 msgid "n/a" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:468 -#: src/usr/local/www/status_dhcpv6_leases.php:530 +#: src/usr/local/www/status_dhcp_leases.php:471 +#: src/usr/local/www/status_dhcpv6_leases.php:533 msgid "Add static mapping" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:472 -#: src/usr/local/www/status_dhcpv6_leases.php:532 +#: src/usr/local/www/status_dhcp_leases.php:475 +#: src/usr/local/www/status_dhcpv6_leases.php:535 msgid "Add WOL mapping" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:474 +#: src/usr/local/www/status_dhcp_leases.php:477 msgid "Send WOL packet" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:478 -#: src/usr/local/www/status_dhcpv6_leases.php:534 +#: src/usr/local/www/status_dhcp_leases.php:481 +#: src/usr/local/www/status_dhcpv6_leases.php:537 msgid "Delete lease" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:489 +#: src/usr/local/www/status_dhcp_leases.php:492 msgid "Leases in Use" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:497 +#: src/usr/local/www/status_dhcp_leases.php:500 msgid "# of leases in use" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:518 -#: src/usr/local/www/status_dhcpv6_leases.php:624 +#: src/usr/local/www/status_dhcp_leases.php:521 +#: src/usr/local/www/status_dhcpv6_leases.php:627 msgid "Show active and static leases only" msgstr "" -#: src/usr/local/www/status_dhcp_leases.php:520 -#: src/usr/local/www/status_dhcpv6_leases.php:626 +#: src/usr/local/www/status_dhcp_leases.php:523 +#: src/usr/local/www/status_dhcpv6_leases.php:629 msgid "Show all configured leases" msgstr "" @@ -22611,19 +22887,19 @@ msgid "No leases file found. Is the DHCPv6 server active?" msgstr "" #: src/usr/local/www/status_dhcpv6_leases.php:458 -#: src/usr/local/www/status_dhcpv6_leases.php:552 +#: src/usr/local/www/status_dhcpv6_leases.php:555 msgid "IAID" msgstr "" -#: src/usr/local/www/status_dhcpv6_leases.php:545 +#: src/usr/local/www/status_dhcpv6_leases.php:548 msgid "Delegated Prefixes" msgstr "" -#: src/usr/local/www/status_dhcpv6_leases.php:551 +#: src/usr/local/www/status_dhcpv6_leases.php:554 msgid "IPv6 Prefix" msgstr "" -#: src/usr/local/www/status_dhcpv6_leases.php:603 +#: src/usr/local/www/status_dhcpv6_leases.php:606 msgid "Routed To" msgstr "" @@ -22663,10 +22939,10 @@ msgstr "" #: src/usr/local/www/status_gateway_groups.php:90 #: src/usr/local/www/status_gateways.php:82 #: src/usr/local/www/system_gateway_groups.php:76 -#: src/usr/local/www/system_gateway_groups.php:124 -#: src/usr/local/www/system_gateway_groups.php:140 -#: src/usr/local/www/system_gateway_groups.php:144 -#: src/usr/local/www/system_gateway_groups_edit.php:180 +#: src/usr/local/www/system_gateway_groups.php:138 +#: src/usr/local/www/system_gateway_groups.php:154 +#: src/usr/local/www/system_gateway_groups.php:158 +#: src/usr/local/www/system_gateway_groups_edit.php:181 #: src/usr/local/www/system_gateways.php:264 #: src/usr/local/www/system_routes.php:264 msgid "Gateway Groups" @@ -22679,9 +22955,9 @@ msgstr "" #: src/usr/local/www/status_gateway_groups.php:152 #: src/usr/local/www/status_gateways.php:162 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:238 -#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:96 -#: src/usr/local/www/diag_smart.php:400 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:250 +#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:100 +#: src/usr/local/www/diag_smart.php:425 msgid "Offline" msgstr "" @@ -22708,7 +22984,7 @@ msgid "RTTsd" msgstr "" #: src/usr/local/www/status_gateways.php:98 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:92 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:93 msgid "Loss" msgstr "" @@ -22716,15 +22992,15 @@ msgstr "" #: src/usr/local/www/status_gateways.php:140 #: src/usr/local/www/status_gateways.php:151 #: src/usr/local/www/status_gateways.php:178 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:254 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:262 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:263 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:264 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:266 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:274 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:275 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:276 msgid "Pending" msgstr "" #: src/usr/local/www/status_gateways.php:159 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:235 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:247 msgid "Offline (forced)" msgstr "" @@ -22732,46 +23008,48 @@ msgstr "" msgid "Last checked" msgstr "" -#: src/usr/local/www/status_graph.php:157 +#: src/usr/local/www/status_graph.php:172 msgid "Graph Settings" msgstr "" -#: src/usr/local/www/status_graph.php:173 -#: src/usr/local/www/status_graph.php:275 +#: src/usr/local/www/status_graph.php:188 +#: src/usr/local/www/status_graph.php:290 msgid "Bandwidth In" msgstr "" -#: src/usr/local/www/status_graph.php:174 -#: src/usr/local/www/status_graph.php:276 +#: src/usr/local/www/status_graph.php:189 +#: src/usr/local/www/status_graph.php:291 msgid "Bandwidth Out" msgstr "" -#: src/usr/local/www/status_graph.php:183 +#: src/usr/local/www/status_graph.php:198 +#: src/usr/local/www/system_groupmanager.php:420 msgid "Local" msgstr "" -#: src/usr/local/www/status_graph.php:184 +#: src/usr/local/www/status_graph.php:199 +#: src/usr/local/www/system_groupmanager.php:420 msgid "Remote" msgstr "" -#: src/usr/local/www/status_graph.php:197 +#: src/usr/local/www/status_graph.php:212 msgid "FQDN" msgstr "" -#: src/usr/local/www/status_graph.php:199 +#: src/usr/local/www/status_graph.php:214 msgid "Display" msgstr "" -#: src/usr/local/www/status_graph.php:228 -#: src/usr/local/www/status_graph.php:229 +#: src/usr/local/www/status_graph.php:243 +#: src/usr/local/www/status_graph.php:244 msgid "Bits/sec" msgstr "" -#: src/usr/local/www/status_graph.php:274 +#: src/usr/local/www/status_graph.php:289 msgid "Host IP" msgstr "" -#: src/usr/local/www/status_graph.php:274 +#: src/usr/local/www/status_graph.php:289 msgid "Host Name or IP" msgstr "" @@ -22787,299 +23065,300 @@ msgstr "" #: src/usr/local/www/status_graph_cpu.php:80 #, php-format msgid "" -"If you cannot see the graph, you may have to install the %1$sAdobe SVG viewer" -"%2$s" +"If the graph cannot be seen, the %1$sAdobe SVG viewer%2$s may need to be " +"installed" msgstr "" -#: src/usr/local/www/status_interfaces.php:120 +#: src/usr/local/www/status_interfaces.php:123 msgid " Interface " msgstr "" -#: src/usr/local/www/status_interfaces.php:125 -#: src/usr/local/www/status_interfaces.php:126 +#: src/usr/local/www/status_interfaces.php:128 +#: src/usr/local/www/status_interfaces.php:129 msgid "Release" msgstr "" -#: src/usr/local/www/status_interfaces.php:125 -#: src/usr/local/www/status_interfaces.php:126 +#: src/usr/local/www/status_interfaces.php:128 +#: src/usr/local/www/status_interfaces.php:129 msgid "Renew" msgstr "" -#: src/usr/local/www/status_interfaces.php:127 -#: src/usr/local/www/status_interfaces.php:128 -#: src/usr/local/www/status_interfaces.php:129 #: src/usr/local/www/status_interfaces.php:130 -msgid "Connect" +#: src/usr/local/www/status_interfaces.php:131 +#: src/usr/local/www/status_interfaces.php:132 +#: src/usr/local/www/status_interfaces.php:133 +#: src/usr/local/www/status_ipsec.php:266 +#: src/usr/local/www/status_ipsec.php:378 +msgid "Disconnect" msgstr "" +#: src/usr/local/www/status_interfaces.php:130 #: src/usr/local/www/status_interfaces.php:131 -msgid "Uptime " +#: src/usr/local/www/status_interfaces.php:132 +#: src/usr/local/www/status_interfaces.php:133 +msgid "Connect" msgstr "" -#: src/usr/local/www/status_interfaces.php:132 +#: src/usr/local/www/status_interfaces.php:134 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:187 +msgid "Uptime" +msgstr "" + +#: src/usr/local/www/status_interfaces.php:135 msgid "Cell Signal (RSSI)" msgstr "" -#: src/usr/local/www/status_interfaces.php:133 +#: src/usr/local/www/status_interfaces.php:136 msgid "Cell Mode" msgstr "" -#: src/usr/local/www/status_interfaces.php:134 +#: src/usr/local/www/status_interfaces.php:137 msgid "Cell SIM State" msgstr "" -#: src/usr/local/www/status_interfaces.php:135 +#: src/usr/local/www/status_interfaces.php:138 msgid "Cell Service" msgstr "" -#: src/usr/local/www/status_interfaces.php:136 +#: src/usr/local/www/status_interfaces.php:139 msgid "Cell Upstream" msgstr "" -#: src/usr/local/www/status_interfaces.php:137 +#: src/usr/local/www/status_interfaces.php:140 msgid "Cell Downstream" msgstr "" -#: src/usr/local/www/status_interfaces.php:138 +#: src/usr/local/www/status_interfaces.php:141 msgid "Cell Current Up" msgstr "" -#: src/usr/local/www/status_interfaces.php:139 +#: src/usr/local/www/status_interfaces.php:142 msgid "Cell Current Down" msgstr "" -#: src/usr/local/www/status_interfaces.php:150 +#: src/usr/local/www/status_interfaces.php:153 msgid "Subnet mask IPv4" msgstr "" -#: src/usr/local/www/status_interfaces.php:152 +#: src/usr/local/www/status_interfaces.php:155 msgid "IPv6 Link Local" msgstr "" -#: src/usr/local/www/status_interfaces.php:153 +#: src/usr/local/www/status_interfaces.php:156 msgid "IPv6 Address" msgstr "" -#: src/usr/local/www/status_interfaces.php:154 +#: src/usr/local/www/status_interfaces.php:157 msgid "Subnet mask IPv6" msgstr "" -#: src/usr/local/www/status_interfaces.php:161 +#: src/usr/local/www/status_interfaces.php:164 msgid "ISP DNS servers" msgstr "" -#: src/usr/local/www/status_interfaces.php:168 +#: src/usr/local/www/status_interfaces.php:171 msgid "Media" msgstr "" -#: src/usr/local/www/status_interfaces.php:170 +#: src/usr/local/www/status_interfaces.php:173 msgid "LAGG Ports" msgstr "" -#: src/usr/local/www/status_interfaces.php:173 +#: src/usr/local/www/status_interfaces.php:176 msgid "BSSID" msgstr "" -#: src/usr/local/www/status_interfaces.php:175 +#: src/usr/local/www/status_interfaces.php:178 msgid "RSSI" msgstr "" -#: src/usr/local/www/status_interfaces.php:176 +#: src/usr/local/www/status_interfaces.php:179 msgid "In/out packets" msgstr "" -#: src/usr/local/www/status_interfaces.php:177 +#: src/usr/local/www/status_interfaces.php:181 msgid "In/out packets (pass)" msgstr "" -#: src/usr/local/www/status_interfaces.php:178 +#: src/usr/local/www/status_interfaces.php:183 msgid "In/out packets (block)" msgstr "" -#: src/usr/local/www/status_interfaces.php:179 +#: src/usr/local/www/status_interfaces.php:185 msgid "In/out errors" msgstr "" -#: src/usr/local/www/status_interfaces.php:180 +#: src/usr/local/www/status_interfaces.php:186 #: src/usr/local/www/widgets/widgets/interface_statistics.widget.php:79 msgid "Collisions" msgstr "" -#: src/usr/local/www/status_interfaces.php:183 +#: src/usr/local/www/status_interfaces.php:189 msgid "Bridge (" msgstr "" -#: src/usr/local/www/status_interfaces.php:200 +#: src/usr/local/www/status_interfaces.php:206 msgid "Total interrupts" msgstr "" -#: src/usr/local/www/status_interfaces.php:211 +#: src/usr/local/www/status_interfaces.php:217 msgid "" "Using dial-on-demand will bring the connection up again if any packet " "triggers it. To substantiate this point: disconnecting manually will " "<strong>not</strong> prevent dial-on-demand from making connections to the " -"outside! Don't use dial-on-demand if you want to make sure that the line is " -"kept disconnected." -msgstr "" - -#: src/usr/local/www/status_ipsec.php:70 src/usr/local/www/status_ipsec.php:119 -#: src/usr/local/www/status_ipsec_leases.php:73 -#: src/usr/local/www/status_ipsec_sad.php:86 -#: src/usr/local/www/status_ipsec_spd.php:79 -#: src/usr/local/www/widgets/widgets/ipsec.widget.php:205 -msgid "Overview" -msgstr "" - -#: src/usr/local/www/status_ipsec.php:121 -#: src/usr/local/www/status_ipsec_leases.php:75 -#: src/usr/local/www/status_ipsec_sad.php:69 -#: src/usr/local/www/status_ipsec_sad.php:88 -#: src/usr/local/www/status_ipsec_spd.php:81 -msgid "SADs" -msgstr "" - -#: src/usr/local/www/status_ipsec.php:122 -#: src/usr/local/www/status_ipsec_leases.php:76 -#: src/usr/local/www/status_ipsec_sad.php:89 -#: src/usr/local/www/status_ipsec_spd.php:72 -#: src/usr/local/www/status_ipsec_spd.php:82 -msgid "SPDs" +"outside! Don't use dial-on-demand if the line is to be kept disconnected." msgstr "" -#: src/usr/local/www/status_ipsec.php:127 -msgid "IPsec Status" +#: src/usr/local/www/status_ipsec.php:142 +#: src/usr/local/www/status_ipsec.php:175 +msgid "Any identifier" msgstr "" -#: src/usr/local/www/status_ipsec.php:133 -msgid "Local ID" +#: src/usr/local/www/status_ipsec.php:226 +#: src/usr/local/www/status_ipsec.php:248 +#: src/usr/local/www/status_ipsec.php:336 +#: src/usr/local/www/status_ipsec.php:337 +#: src/usr/local/www/status_ipsec.php:338 +msgid " seconds (" msgstr "" -#: src/usr/local/www/status_ipsec.php:135 -msgid "Remote ID" +#: src/usr/local/www/status_ipsec.php:248 +msgid ") ago" msgstr "" -#: src/usr/local/www/status_ipsec.php:136 -msgid "Remote IP" +#: src/usr/local/www/status_ipsec.php:257 +#: src/usr/local/www/status_ipsec.php:259 +#: src/usr/local/www/status_ipsec.php:478 +msgid "Connect VPN" msgstr "" -#: src/usr/local/www/status_ipsec.php:137 -msgid "Role" +#: src/usr/local/www/status_ipsec.php:264 +msgid "Disconnect VPN" msgstr "" -#: src/usr/local/www/status_ipsec.php:138 -msgid "Reauth" +#: src/usr/local/www/status_ipsec.php:281 +msgid "Show child SA entries" msgstr "" -#: src/usr/local/www/status_ipsec.php:139 -#: src/usr/local/www/status_ipsec.php:309 -msgid "Algo" +#: src/usr/local/www/status_ipsec.php:315 +msgid "Local: " msgstr "" -#: src/usr/local/www/status_ipsec.php:167 -#: src/usr/local/www/status_ipsec.php:200 -msgid "Any identifier" +#: src/usr/local/www/status_ipsec.php:319 +msgid "Remote: " msgstr "" -#: src/usr/local/www/status_ipsec.php:250 -#: src/usr/local/www/status_ipsec.php:270 -#: src/usr/local/www/status_ipsec.php:354 -#: src/usr/local/www/status_ipsec.php:355 -#: src/usr/local/www/status_ipsec.php:356 -msgid " seconds (" +#: src/usr/local/www/status_ipsec.php:336 +msgid "Rekey: " msgstr "" -#: src/usr/local/www/status_ipsec.php:277 -#: src/usr/local/www/status_ipsec.php:278 -#: src/usr/local/www/status_ipsec.php:494 -msgid "Connect VPN" +#: src/usr/local/www/status_ipsec.php:337 +msgid "Life: " msgstr "" -#: src/usr/local/www/status_ipsec.php:283 -msgid "Disconnect VPN" +#: src/usr/local/www/status_ipsec.php:338 +msgid "Install: " msgstr "" -#: src/usr/local/www/status_ipsec.php:298 -msgid "Show child SA entries" +#: src/usr/local/www/status_ipsec.php:359 +msgid "IPComp: " msgstr "" -#: src/usr/local/www/status_ipsec.php:305 -msgid "Local subnets" +#: src/usr/local/www/status_ipsec.php:369 +msgid "Bytes-In: " msgstr "" -#: src/usr/local/www/status_ipsec.php:306 -msgid "Local SPI(s)" +#: src/usr/local/www/status_ipsec.php:370 +msgid "Packets-In: " msgstr "" -#: src/usr/local/www/status_ipsec.php:307 -msgid "Remote subnets" +#: src/usr/local/www/status_ipsec.php:371 +msgid "Bytes-Out: " msgstr "" -#: src/usr/local/www/status_ipsec.php:308 -msgid "Times" +#: src/usr/local/www/status_ipsec.php:372 +msgid "Packets-Out: " msgstr "" -#: src/usr/local/www/status_ipsec.php:310 -msgid "Stats" +#: src/usr/local/www/status_ipsec.php:376 +msgid "Disconnect Child SA" msgstr "" -#: src/usr/local/www/status_ipsec.php:333 -msgid "Local: " +#: src/usr/local/www/status_ipsec.php:465 +msgid "Awaiting connections" msgstr "" -#: src/usr/local/www/status_ipsec.php:337 -msgid "Remote: " +#: src/usr/local/www/status_ipsec.php:473 +msgid "Disconnected" msgstr "" -#: src/usr/local/www/status_ipsec.php:354 -msgid "Rekey: " +#: src/usr/local/www/status_ipsec.php:490 +#: src/usr/local/www/status_ipsec.php:496 +#: src/usr/local/www/status_ipsec_leases.php:73 +#: src/usr/local/www/status_ipsec_sad.php:86 +#: src/usr/local/www/status_ipsec_spd.php:79 +#: src/usr/local/www/widgets/widgets/ipsec.widget.php:205 +msgid "Overview" msgstr "" -#: src/usr/local/www/status_ipsec.php:355 -msgid "Life: " +#: src/usr/local/www/status_ipsec.php:498 +#: src/usr/local/www/status_ipsec_leases.php:75 +#: src/usr/local/www/status_ipsec_sad.php:69 +#: src/usr/local/www/status_ipsec_sad.php:88 +#: src/usr/local/www/status_ipsec_spd.php:81 +msgid "SADs" msgstr "" -#: src/usr/local/www/status_ipsec.php:356 -msgid "Install: " +#: src/usr/local/www/status_ipsec.php:499 +#: src/usr/local/www/status_ipsec_leases.php:76 +#: src/usr/local/www/status_ipsec_sad.php:89 +#: src/usr/local/www/status_ipsec_spd.php:72 +#: src/usr/local/www/status_ipsec_spd.php:82 +msgid "SPDs" msgstr "" -#: src/usr/local/www/status_ipsec.php:375 -msgid "IPComp: " +#: src/usr/local/www/status_ipsec.php:504 +msgid "IPsec Status" msgstr "" -#: src/usr/local/www/status_ipsec.php:385 -msgid "Bytes-In: " +#: src/usr/local/www/status_ipsec.php:510 +msgid "Local ID" msgstr "" -#: src/usr/local/www/status_ipsec.php:386 -msgid "Packets-In: " +#: src/usr/local/www/status_ipsec.php:512 +msgid "Remote ID" msgstr "" -#: src/usr/local/www/status_ipsec.php:387 -msgid "Bytes-Out: " +#: src/usr/local/www/status_ipsec.php:513 +msgid "Remote IP" msgstr "" -#: src/usr/local/www/status_ipsec.php:388 -msgid "Packets-Out: " +#: src/usr/local/www/status_ipsec.php:514 +msgid "Role" msgstr "" -#: src/usr/local/www/status_ipsec.php:392 -msgid "Disconnect Child SA" +#: src/usr/local/www/status_ipsec.php:515 +msgid "Reauth" msgstr "" -#: src/usr/local/www/status_ipsec.php:482 -msgid "Awaiting connections" +#: src/usr/local/www/status_ipsec.php:516 +msgid "Algo" msgstr "" -#: src/usr/local/www/status_ipsec.php:490 -msgid "Disconnected" +#: src/usr/local/www/status_ipsec.php:524 +msgid "Collecting IPsec status information." msgstr "" -#: src/usr/local/www/status_ipsec.php:531 +#: src/usr/local/www/status_ipsec.php:541 #: src/usr/local/www/status_ipsec_leases.php:162 #: src/usr/local/www/status_ipsec_sad.php:161 #: src/usr/local/www/status_ipsec_spd.php:145 #, php-format -msgid "You can configure IPsec %1$shere%2$s." +msgid "IPsec can be configured %1$shere%2$s." +msgstr "" + +#: src/usr/local/www/status_ipsec.php:574 +msgid "No IPsec status information available." msgstr "" #: src/usr/local/www/status_ipsec_leases.php:86 @@ -23110,6 +23389,10 @@ msgstr "" msgid "Data" msgstr "" +#: src/usr/local/www/status_ipsec_sad.php:138 +msgid "Remove this SPD Entry" +msgstr "" + #: src/usr/local/www/status_ipsec_sad.php:149 msgid "No IPsec security associations." msgstr "" @@ -23156,7 +23439,7 @@ msgstr "" #: src/usr/local/www/status_lb_vs.php:131 #: src/usr/local/www/widgets/widgets/load_balancer_status.widget.php:105 -#: src/usr/local/www/system.php:558 +#: src/usr/local/www/system.php:584 msgid "Active" msgstr "" @@ -23224,14 +23507,14 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_keys_edit.php:155 #: src/usr/local/www/vpn_ipsec_mobile.php:339 #: src/usr/local/www/vpn_ipsec_phase1.php:664 -#: src/usr/local/www/vpn_ipsec_phase1.php:667 +#: src/usr/local/www/vpn_ipsec_phase1.php:666 #: src/usr/local/www/vpn_ipsec_phase2.php:441 #: src/usr/local/www/vpn_ipsec_phase2.php:444 #: src/usr/local/www/vpn_ipsec_settings.php:236 #: src/usr/local/www/vpn_l2tp.php:219 src/usr/local/www/vpn_l2tp_users.php:63 #: src/usr/local/www/vpn_l2tp_users_edit.php:63 #: src/usr/local/www/vpn_openvpn_client.php:426 -#: src/usr/local/www/vpn_openvpn_csc.php:308 +#: src/usr/local/www/vpn_openvpn_csc.php:312 #: src/usr/local/www/vpn_openvpn_server.php:592 msgid "VPN" msgstr "" @@ -23329,7 +23612,7 @@ msgstr "" #: src/usr/local/www/status_logs_common.inc:321 #: src/usr/local/www/status_logs_common.inc:529 -#: src/usr/local/www/status_logs_vpn.php:479 src/usr/local/www/system.php:539 +#: src/usr/local/www/status_logs_vpn.php:479 src/usr/local/www/system.php:559 msgid "Log Filter" msgstr "" @@ -23390,7 +23673,7 @@ msgstr "" #: src/usr/local/www/status_logs_common.inc:764 #: src/usr/local/www/status_logs_settings.php:200 -#: src/usr/local/www/system_advanced_admin.php:599 +#: src/usr/local/www/system_advanced_admin.php:600 msgid "webConfigurator configuration has changed. Restarting webConfigurator." msgstr "" @@ -23404,12 +23687,12 @@ msgid "Manage" msgstr "" #: src/usr/local/www/status_logs_common.inc:816 -#: src/usr/local/www/diag_nanobsd.php:162 +#: src/usr/local/www/diag_nanobsd.php:167 msgid " " msgstr "" #: src/usr/local/www/status_logs_common.inc:825 -#: src/usr/local/www/status_logs_settings.php:255 +#: src/usr/local/www/status_logs_settings.php:252 msgid "Forward/Reverse Display" msgstr "" @@ -23427,7 +23710,7 @@ msgstr "" #: src/usr/local/www/status_logs_common.inc:854 #: src/usr/local/www/status_logs_common.inc:859 -#: src/usr/local/www/status_logs_settings.php:262 +#: src/usr/local/www/status_logs_settings.php:259 msgid "GUI Log Entries" msgstr "" @@ -23439,7 +23722,7 @@ msgstr "" #: src/usr/local/www/status_logs_common.inc:868 #: src/usr/local/www/status_logs_common.inc:873 -#: src/usr/local/www/status_logs_settings.php:270 +#: src/usr/local/www/status_logs_settings.php:267 msgid "Log file size (Bytes)" msgstr "" @@ -23465,7 +23748,7 @@ msgid "" msgstr "" #: src/usr/local/www/status_logs_common.inc:917 -#: src/usr/local/www/status_logs_settings.php:306 +#: src/usr/local/www/status_logs_settings.php:303 msgid "Web Server Log" msgstr "" @@ -23476,7 +23759,7 @@ msgid "" msgstr "" #: src/usr/local/www/status_logs_common.inc:928 -#: src/usr/local/www/status_logs_settings.php:278 +#: src/usr/local/www/status_logs_settings.php:275 msgid "Log firewall default blocks" msgstr "" @@ -23494,31 +23777,31 @@ msgid "" msgstr "" #: src/usr/local/www/status_logs_common.inc:959 -#: src/usr/local/www/status_logs_settings.php:323 +#: src/usr/local/www/status_logs_settings.php:320 msgid "Dont load descriptions" msgstr "" #: src/usr/local/www/status_logs_common.inc:960 -#: src/usr/local/www/status_logs_settings.php:324 +#: src/usr/local/www/status_logs_settings.php:321 msgid "Display as column" msgstr "" #: src/usr/local/www/status_logs_common.inc:961 -#: src/usr/local/www/status_logs_settings.php:325 +#: src/usr/local/www/status_logs_settings.php:322 msgid "Display as second row" msgstr "" #: src/usr/local/www/status_logs_common.inc:956 -#: src/usr/local/www/status_logs_settings.php:320 +#: src/usr/local/www/status_logs_settings.php:317 msgid "Where to show rule descriptions" msgstr "" #: src/usr/local/www/status_logs_common.inc:963 -#: src/usr/local/www/status_logs_settings.php:327 +#: src/usr/local/www/status_logs_settings.php:324 msgid "" -"Show the applied rule description below or in the firewall log rows<br /" +"Show the applied rule description below or in the firewall log rows.<br /" ">Displaying rule descriptions for all lines in the log might affect " -"performance with large rule sets" +"performance with large rule sets." msgstr "" #: src/usr/local/www/status_logs_common.inc:983 @@ -23557,7 +23840,7 @@ msgid "Easy Rule: Add to Block List" msgstr "" #: src/usr/local/www/status_logs_filter.php:269 -msgid "Do you really want to add this BLOCK rule?" +msgid "Confirmation required to add this BLOCK rule." msgstr "" #: src/usr/local/www/status_logs_filter.php:278 @@ -23565,7 +23848,7 @@ msgid "Easy Rule: Pass this traffic" msgstr "" #: src/usr/local/www/status_logs_filter.php:278 -msgid "Do you really want to add this PASS rule?" +msgid "Confirmation required to add this PASS rule." msgstr "" #: src/usr/local/www/status_logs_filter_dynamic.php:414 @@ -23604,12 +23887,8 @@ msgstr "" msgid "Reverse Resolve with DNS" msgstr "" -#: src/usr/local/www/status_logs_filter_summary.php:210 -msgid "Lookup" -msgstr "" - #: src/usr/local/www/status_logs_settings.php:109 -#: src/usr/local/www/status_logs_settings.php:339 +#: src/usr/local/www/status_logs_settings.php:336 msgid "Reset Log Files" msgstr "" @@ -23646,9 +23925,9 @@ msgstr "" #: src/usr/local/www/status_logs_settings.php:214 msgid "" "NOTE: Log sizes are changed the next time a log file is cleared or deleted. " -"To immediately increase the size of the log files, you must first save the " -"options to set the size, then clear all logs using the \"Reset Log Files\" " -"option farther down this page. " +"To immediately increase the size of the log files, first save the options to " +"set the size, then clear all logs using the \"Reset Log Files\" option " +"farther down this page. " msgstr "" #: src/usr/local/www/status_logs_settings.php:215 @@ -23673,9 +23952,8 @@ msgstr "" #: src/usr/local/www/status_logs_settings.php:220 msgid "" -"If you pick a single IP, remote syslog servers must all be of that IP type. " -"If you wish to mix IPv4 and IPv6 remote syslog servers, you must bind to all " -"interfaces." +"If a single IP is picked, remote syslog servers must all be of that IP type. " +"To mix IPv4 and IPv6 remote syslog servers, bind to all interfaces." msgstr "" #: src/usr/local/www/status_logs_settings.php:222 @@ -23684,65 +23962,65 @@ msgid "" "will bind to all addresses." msgstr "" -#: src/usr/local/www/status_logs_settings.php:266 +#: src/usr/local/www/status_logs_settings.php:263 msgid "" "This is only the number of log entries displayed in the GUI. It does not " "affect how many entries are contained in the actual log files." msgstr "" -#: src/usr/local/www/status_logs_settings.php:281 +#: src/usr/local/www/status_logs_settings.php:278 msgid "" "Log packets that are <strong>blocked</strong> by the implicit default block " "rule. - Per-rule logging options are still respected." msgstr "" -#: src/usr/local/www/status_logs_settings.php:288 +#: src/usr/local/www/status_logs_settings.php:285 msgid "" "Log packets that are <strong>allowed</strong> by the implicit default pass " "rule. - Per-rule logging options are still respected. " msgstr "" -#: src/usr/local/www/status_logs_settings.php:309 +#: src/usr/local/www/status_logs_settings.php:306 msgid "" "If this is checked, errors from the web server process for the GUI or " -"Captive Portal will appear in the main system log" +"Captive Portal will appear in the main system log." msgstr "" -#: src/usr/local/www/status_logs_settings.php:313 +#: src/usr/local/www/status_logs_settings.php:310 msgid "Raw Logs" msgstr "" -#: src/usr/local/www/status_logs_settings.php:316 +#: src/usr/local/www/status_logs_settings.php:313 msgid "" "If this is checked, filter logs are shown as generated by the packet filter, " "without any formatting. This will reveal more detailed information, but it " -"is more difficult to read" +"is more difficult to read." msgstr "" -#: src/usr/local/www/status_logs_settings.php:332 +#: src/usr/local/www/status_logs_settings.php:329 msgid "Local Logging" msgstr "" -#: src/usr/local/www/status_logs_settings.php:340 +#: src/usr/local/www/status_logs_settings.php:339 msgid "" "Clears all local log files and reinitializes them as empty logs. This also " -"restarts the DHCP daemon. Use the Save button first if you have made any " -"setting changes." +"restarts the DHCP daemon. Use the Save button first if any setting changes " +"have been made." msgstr "" -#: src/usr/local/www/status_logs_settings.php:343 +#: src/usr/local/www/status_logs_settings.php:342 msgid "Remote Logging Options" msgstr "" -#: src/usr/local/www/status_logs_settings.php:348 +#: src/usr/local/www/status_logs_settings.php:347 msgid "Enable Remote Logging" msgstr "" -#: src/usr/local/www/status_logs_settings.php:357 +#: src/usr/local/www/status_logs_settings.php:356 msgid "Default (any)" msgstr "" -#: src/usr/local/www/status_logs_settings.php:365 +#: src/usr/local/www/status_logs_settings.php:364 msgid "" "This option is only used when a non-default address is chosen as the source " "above. This option only expresses a preference; If an IP address of the " @@ -23750,34 +24028,34 @@ msgid "" "tried." msgstr "" -#: src/usr/local/www/status_logs_settings.php:369 +#: src/usr/local/www/status_logs_settings.php:368 msgid "Remote log servers" msgstr "" -#: src/usr/local/www/status_logs_settings.php:374 -#: src/usr/local/www/vpn_openvpn_csc.php:484 -#: src/usr/local/www/vpn_openvpn_csc.php:525 -#: src/usr/local/www/vpn_openvpn_csc.php:575 +#: src/usr/local/www/status_logs_settings.php:373 +#: src/usr/local/www/vpn_openvpn_csc.php:488 +#: src/usr/local/www/vpn_openvpn_csc.php:529 +#: src/usr/local/www/vpn_openvpn_csc.php:579 msgid "Server 1" msgstr "" -#: src/usr/local/www/status_logs_settings.php:382 -#: src/usr/local/www/vpn_openvpn_csc.php:491 -#: src/usr/local/www/vpn_openvpn_csc.php:532 -#: src/usr/local/www/vpn_openvpn_csc.php:582 +#: src/usr/local/www/status_logs_settings.php:381 +#: src/usr/local/www/vpn_openvpn_csc.php:495 +#: src/usr/local/www/vpn_openvpn_csc.php:536 +#: src/usr/local/www/vpn_openvpn_csc.php:586 msgid "Server 2" msgstr "" -#: src/usr/local/www/status_logs_settings.php:390 -#: src/usr/local/www/vpn_openvpn_csc.php:498 +#: src/usr/local/www/status_logs_settings.php:389 +#: src/usr/local/www/vpn_openvpn_csc.php:502 msgid "Server 3" msgstr "" -#: src/usr/local/www/status_logs_settings.php:398 +#: src/usr/local/www/status_logs_settings.php:397 msgid "Remote Syslog Contents" msgstr "" -#: src/usr/local/www/status_logs_settings.php:464 +#: src/usr/local/www/status_logs_settings.php:463 msgid "" "Syslog sends UDP datagrams to port 514 on the specified remote syslog " "server, unless another port is specified. Be sure to set syslogd on the " @@ -23825,84 +24103,84 @@ msgstr "" msgid "Outlier" msgstr "" -#: src/usr/local/www/status_ntpd.php:193 +#: src/usr/local/www/status_ntpd.php:205 +#, php-format +msgid "" +"Statistics unavailable because ntpq and ntpdc queries are disabled in the " +"%sNTP service settings%s" +msgstr "" + +#: src/usr/local/www/status_ntpd.php:211 +#, php-format +msgid "No peers found, %sis the ntp service running?%s" +msgstr "" + +#: src/usr/local/www/status_ntpd.php:268 +msgid "in view " +msgstr "" + +#: src/usr/local/www/status_ntpd.php:275 +msgid "in use " +msgstr "" + +#: src/usr/local/www/status_ntpd.php:283 +msgid "Google Maps Link" +msgstr "" + +#: src/usr/local/www/status_ntpd.php:294 msgid "Network Time Protocol Status" msgstr "" -#: src/usr/local/www/status_ntpd.php:200 +#: src/usr/local/www/status_ntpd.php:301 msgid "Ref ID" msgstr "" -#: src/usr/local/www/status_ntpd.php:203 +#: src/usr/local/www/status_ntpd.php:304 msgid "When" msgstr "" -#: src/usr/local/www/status_ntpd.php:204 +#: src/usr/local/www/status_ntpd.php:305 msgid "Poll" msgstr "" -#: src/usr/local/www/status_ntpd.php:205 +#: src/usr/local/www/status_ntpd.php:306 msgid "Reach" msgstr "" -#: src/usr/local/www/status_ntpd.php:206 -#: src/usr/local/www/vpn_ipsec_phase1.php:932 +#: src/usr/local/www/status_ntpd.php:307 +#: src/usr/local/www/vpn_ipsec_phase1.php:930 msgid "Delay" msgstr "" -#: src/usr/local/www/status_ntpd.php:207 +#: src/usr/local/www/status_ntpd.php:308 msgid "Offset" msgstr "" -#: src/usr/local/www/status_ntpd.php:208 +#: src/usr/local/www/status_ntpd.php:309 msgid "Jitter" msgstr "" -#: src/usr/local/www/status_ntpd.php:217 -#, php-format -msgid "" -"Statistics unavailable because ntpq and ntpdc queries are disabled in the " -"%sNTP service settings%s" -msgstr "" - -#: src/usr/local/www/status_ntpd.php:225 -#, php-format -msgid "No peers found, %sis the ntp service running?%s" -msgstr "" - -#: src/usr/local/www/status_ntpd.php:266 +#: src/usr/local/www/status_ntpd.php:331 msgid "GPS Information" msgstr "" -#: src/usr/local/www/status_ntpd.php:272 +#: src/usr/local/www/status_ntpd.php:336 msgid "Clock Latitude" msgstr "" -#: src/usr/local/www/status_ntpd.php:275 +#: src/usr/local/www/status_ntpd.php:337 msgid "Clock Longitude" msgstr "" -#: src/usr/local/www/status_ntpd.php:281 +#: src/usr/local/www/status_ntpd.php:341 msgid "Clock Altitude" msgstr "" -#: src/usr/local/www/status_ntpd.php:290 +#: src/usr/local/www/status_ntpd.php:348 #: src/usr/local/www/widgets/widgets/ntp_status.widget.php:209 msgid "Satellites" msgstr "" -#: src/usr/local/www/status_ntpd.php:322 -msgid "in view " -msgstr "" - -#: src/usr/local/www/status_ntpd.php:329 -msgid "in use " -msgstr "" - -#: src/usr/local/www/status_ntpd.php:338 -msgid "Google Maps Link" -msgstr "" - #: src/usr/local/www/status_openvpn.php:115 #: src/usr/local/www/widgets/widgets/openvpn.widget.php:96 msgid "An error occurred." @@ -23913,40 +24191,40 @@ msgid "Client Connections" msgstr "" #: src/usr/local/www/status_openvpn.php:137 -#: src/usr/local/www/status_openvpn.php:204 -#: src/usr/local/www/system_camanager.php:627 -#: src/usr/local/www/system_certmanager.php:789 -#: src/usr/local/www/system_certmanager.php:904 -#: src/usr/local/www/vpn_openvpn_csc.php:670 +#: src/usr/local/www/status_openvpn.php:208 +#: src/usr/local/www/system_camanager.php:624 +#: src/usr/local/www/system_certmanager.php:748 +#: src/usr/local/www/system_certmanager.php:867 +#: src/usr/local/www/vpn_openvpn_csc.php:674 msgid "Common Name" msgstr "" #: src/usr/local/www/status_openvpn.php:138 -#: src/usr/local/www/status_openvpn.php:205 +#: src/usr/local/www/status_openvpn.php:209 msgid "Real Address" msgstr "" #: src/usr/local/www/status_openvpn.php:139 -#: src/usr/local/www/status_openvpn.php:255 -#: src/usr/local/www/status_openvpn.php:311 +#: src/usr/local/www/status_openvpn.php:259 +#: src/usr/local/www/status_openvpn.php:315 msgid "Virtual Address" msgstr "" #: src/usr/local/www/status_openvpn.php:140 -#: src/usr/local/www/status_openvpn.php:254 -#: src/usr/local/www/status_openvpn.php:310 +#: src/usr/local/www/status_openvpn.php:258 +#: src/usr/local/www/status_openvpn.php:314 msgid "Connected Since" msgstr "" #: src/usr/local/www/status_openvpn.php:141 -#: src/usr/local/www/status_openvpn.php:257 -#: src/usr/local/www/status_openvpn.php:313 +#: src/usr/local/www/status_openvpn.php:261 +#: src/usr/local/www/status_openvpn.php:317 msgid "Bytes Sent" msgstr "" #: src/usr/local/www/status_openvpn.php:142 -#: src/usr/local/www/status_openvpn.php:258 -#: src/usr/local/www/status_openvpn.php:314 +#: src/usr/local/www/status_openvpn.php:262 +#: src/usr/local/www/status_openvpn.php:318 msgid "Bytes Received" msgstr "" @@ -23957,54 +24235,55 @@ msgid "Kill client connection from %s" msgstr "" #: src/usr/local/www/status_openvpn.php:195 +#: src/usr/local/www/status_openvpn.php:197 msgid "Show Routing Table" msgstr "" -#: src/usr/local/www/status_openvpn.php:195 +#: src/usr/local/www/status_openvpn.php:199 msgid "Display OpenVPN's internal routing table for this server." msgstr "" -#: src/usr/local/www/status_openvpn.php:199 +#: src/usr/local/www/status_openvpn.php:203 msgid "Routing Table" msgstr "" -#: src/usr/local/www/status_openvpn.php:206 +#: src/usr/local/www/status_openvpn.php:210 msgid "Target Network" msgstr "" -#: src/usr/local/www/status_openvpn.php:207 +#: src/usr/local/www/status_openvpn.php:211 msgid "Last Used" msgstr "" -#: src/usr/local/www/status_openvpn.php:227 +#: src/usr/local/www/status_openvpn.php:231 msgid "" "An IP address followed by C indicates a host currently connected through the " "VPN." msgstr "" -#: src/usr/local/www/status_openvpn.php:247 +#: src/usr/local/www/status_openvpn.php:251 #: src/usr/local/www/widgets/widgets/openvpn.widget.php:158 msgid "Peer to Peer Server Instance Statistics" msgstr "" -#: src/usr/local/www/status_openvpn.php:256 -#: src/usr/local/www/status_openvpn.php:312 +#: src/usr/local/www/status_openvpn.php:260 +#: src/usr/local/www/status_openvpn.php:316 msgid "Remote Host" msgstr "" -#: src/usr/local/www/status_openvpn.php:303 +#: src/usr/local/www/status_openvpn.php:307 #: src/usr/local/www/widgets/widgets/openvpn.widget.php:208 msgid "Client Instance Statistics" msgstr "" -#: src/usr/local/www/status_openvpn.php:355 +#: src/usr/local/www/status_openvpn.php:359 msgid "" -"If you have custom options that override the management features of OpenVPN " +"If there are custom options that override the management features of OpenVPN " "on a client or server, they will cause that OpenVPN instance to not work " "correctly with this status page." msgstr "" -#: src/usr/local/www/status_openvpn.php:359 +#: src/usr/local/www/status_openvpn.php:363 msgid "No OpenVPN instances defined." msgstr "" @@ -24031,43 +24310,43 @@ msgstr "" msgid "No queue statistics could be read." msgstr "" -#: src/usr/local/www/status_queues.php:150 +#: src/usr/local/www/status_queues.php:149 msgid "Traffic shaping is not configured." msgstr "" -#: src/usr/local/www/status_queues.php:189 +#: src/usr/local/www/status_queues.php:188 msgid "Status Queues" msgstr "" -#: src/usr/local/www/status_queues.php:195 +#: src/usr/local/www/status_queues.php:194 msgid "Statistics" msgstr "" -#: src/usr/local/www/status_queues.php:203 +#: src/usr/local/www/status_queues.php:202 msgid "Borrows" msgstr "" -#: src/usr/local/www/status_queues.php:204 +#: src/usr/local/www/status_queues.php:203 msgid "Suspends" msgstr "" -#: src/usr/local/www/status_queues.php:205 +#: src/usr/local/www/status_queues.php:204 msgid "Drops" msgstr "" -#: src/usr/local/www/status_queues.php:206 +#: src/usr/local/www/status_queues.php:205 msgid "Length" msgstr "" -#: src/usr/local/www/status_queues.php:220 +#: src/usr/local/www/status_queues.php:219 msgid "Queue graphs take 5 seconds to sample data." msgstr "" -#: src/usr/local/www/status_queues.php:283 +#: src/usr/local/www/status_queues.php:282 msgid "Loading" msgstr "" -#: src/usr/local/www/status_services.php:198 +#: src/usr/local/www/status_services.php:188 msgid "No services found." msgstr "" @@ -24113,70 +24392,72 @@ msgid "" "time." msgstr "" -#: src/usr/local/www/system.php:175 +#: src/usr/local/www/system.php:176 msgid "The domain may only contain the characters a-z, 0-9, '-' and '.'." msgstr "" -#: src/usr/local/www/system.php:186 +#: src/usr/local/www/system.php:187 #, php-format msgid "A valid IP address must be specified for DNS server %s." msgstr "" -#: src/usr/local/www/system.php:192 +#: src/usr/local/www/system.php:193 #, php-format -msgid "You can not specify IPv6 gateway \"%1$s\" for IPv4 DNS server \"%2$s\"." +msgid "" +"The IPv6 gateway \"%1$s\" can not be specified for IPv4 DNS server \"%2$s\"." msgstr "" -#: src/usr/local/www/system.php:195 +#: src/usr/local/www/system.php:196 #, php-format -msgid "You can not specify IPv4 gateway \"%1$s\" for IPv6 DNS server \"%2$s\"." +msgid "" +"The IPv4 gateway \"%1$s\" can not be specified for IPv6 DNS server \"%2$s\"." msgstr "" -#: src/usr/local/www/system.php:206 +#: src/usr/local/www/system.php:207 msgid "" "Each configured DNS server must have a unique IP address. Remove the " "duplicated IP." msgstr "" -#: src/usr/local/www/system.php:217 +#: src/usr/local/www/system.php:218 #, php-format msgid "" -"You can not assign a gateway to DNS '%s' server which is on a directly " +"A gateway can not be assigned to DNS '%s' server which is on a directly " "connected network." msgstr "" -#: src/usr/local/www/system.php:229 +#: src/usr/local/www/system.php:230 msgid "" "A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'." msgstr "" -#: src/usr/local/www/system.php:380 +#: src/usr/local/www/system.php:384 msgid "Name of the firewall host, without domain part" msgstr "" -#: src/usr/local/www/system.php:387 +#: src/usr/local/www/system.php:391 msgid "" "Do not use 'local' as a domain name. It will cause local hosts running mDNS " "(avahi, bonjour, etc.) to be unable to resolve local hosts not running mDNS." msgstr "" -#: src/usr/local/www/system.php:392 +#: src/usr/local/www/system.php:396 msgid "DNS Server Settings" msgstr "" -#: src/usr/local/www/system.php:398 +#: src/usr/local/www/system.php:402 msgid "DNS Server " msgstr "" -#: src/usr/local/www/system.php:402 +#: src/usr/local/www/system.php:406 msgid "DNS Server" msgstr "" -#: src/usr/local/www/system.php:445 +#: src/usr/local/www/system.php:449 msgid "DNS Server Override" msgstr "" -#: src/usr/local/www/system.php:448 +#: src/usr/local/www/system.php:452 #, php-format msgid "" "If this option is set, %s will use DNS servers assigned by a DHCP/PPP server " @@ -24184,11 +24465,11 @@ msgid "" "will not be assigned to DHCP and PPTP VPN clients." msgstr "" -#: src/usr/local/www/system.php:455 +#: src/usr/local/www/system.php:459 msgid "Disable DNS Forwarder" msgstr "" -#: src/usr/local/www/system.php:458 +#: src/usr/local/www/system.php:462 msgid "" "By default localhost (127.0.0.1) will be used as the first DNS server where " "the DNS Forwarder or DNS Resolver is enabled and set to listen on Localhost, " @@ -24196,222 +24477,232 @@ msgid "" "box omits localhost from the list of DNS servers." msgstr "" -#: src/usr/local/www/system.php:465 +#: src/usr/local/www/system.php:469 msgid "Localization" msgstr "" -#: src/usr/local/www/system.php:468 +#: src/usr/local/www/system.php:472 msgid "Timezone" msgstr "" -#: src/usr/local/www/system.php:471 -msgid "Select the location closest to you" +#: src/usr/local/www/system.php:475 +msgid "" +"Select the timezone or location within the timezone to be used by this " +"system." msgstr "" -#: src/usr/local/www/system.php:474 +#: src/usr/local/www/system.php:478 msgid "Timeservers" msgstr "" -#: src/usr/local/www/system.php:477 +#: src/usr/local/www/system.php:481 msgid "" "Use a space to separate multiple hosts (only one required). Remember to set " -"up at least one DNS server if you enter a host name here!" +"up at least one DNS server if a host name is entered here!" msgstr "" -#: src/usr/local/www/system.php:481 +#: src/usr/local/www/system.php:485 msgid "Language" msgstr "" -#: src/usr/local/www/system.php:484 +#: src/usr/local/www/system.php:488 msgid "Choose a language for the webConfigurator" msgstr "" -#: src/usr/local/www/system.php:503 -#: src/usr/local/www/system_advanced_admin.php:339 -#: src/usr/local/www/system_certmanager.php:1075 +#: src/usr/local/www/system.php:523 +#: src/usr/local/www/system_advanced_admin.php:341 +#: src/usr/local/www/system_certmanager.php:1043 msgid "webConfigurator" msgstr "" -#: src/usr/local/www/system.php:507 +#: src/usr/local/www/system.php:527 msgid "Theme" msgstr "" -#: src/usr/local/www/system.php:510 +#: src/usr/local/www/system.php:530 +#, php-format msgid "" "Choose an alternative css file (if installed) to change the appearance of " -"the webConfigurator. css files are located in /usr/local/www/bootstrap/css" +"the webConfigurator. css files are located in /usr/local/www/css/%s" msgstr "" -#: src/usr/local/www/system.php:516 +#: src/usr/local/www/system.php:536 msgid "Scrolls with page" msgstr "" -#: src/usr/local/www/system.php:516 +#: src/usr/local/www/system.php:536 msgid "Fixed (Remains visible at top of page)" msgstr "" -#: src/usr/local/www/system.php:514 +#: src/usr/local/www/system.php:534 msgid "Top Navigation" msgstr "" -#: src/usr/local/www/system.php:517 +#: src/usr/local/www/system.php:537 msgid "The fixed option is intended for large screens only." msgstr "" -#: src/usr/local/www/system.php:521 +#: src/usr/local/www/system.php:541 msgid "Dashboard Columns" msgstr "" -#: src/usr/local/www/system.php:525 -msgid "<span class=\"badge\" title=\"This feature is in BETA\">BETA</span>" -msgstr "" - -#: src/usr/local/www/system.php:527 +#: src/usr/local/www/system.php:547 msgid "Associated Panels Show/Hide" msgstr "" -#: src/usr/local/www/system.php:534 +#: src/usr/local/www/system.php:554 msgid "Show the Available Widgets panel on the Dashboard." msgstr "" -#: src/usr/local/www/system.php:541 +#: src/usr/local/www/system.php:561 msgid "Show the Log Filter panel in System Logs." msgstr "" -#: src/usr/local/www/system.php:548 +#: src/usr/local/www/system.php:568 msgid "Show the Manage Log panel in System Logs." msgstr "" -#: src/usr/local/www/system.php:550 +#: src/usr/local/www/system.php:575 +msgid "Show the Settings panel in Status Monitoring." +msgstr "" + +#: src/usr/local/www/system.php:577 msgid "" "These options allow certain panels to be automatically hidden on page load. " -"A control is provided in the title bar to un-hide the panel.\n" -"<br /><span class=\"badge\" title=\"This feature is in BETA\">BETA</span>" +"A control is provided in the title bar to un-hide the panel." msgstr "" -#: src/usr/local/www/system.php:557 +#: src/usr/local/www/system.php:583 msgid "Left Column Labels" msgstr "" -#: src/usr/local/www/system.php:560 +#: src/usr/local/www/system.php:586 msgid "" "If selected, clicking a label in the left column will select/toggle the " -"first item of the group.<br /><span class=\"badge\" title=\"This feature is " -"in BETA\">BETA</span>" +"first item of the group." +msgstr "" + +#: src/usr/local/www/system.php:592 +#, php-format +msgid "%sUser-created themes are unsupported, use at your own risk." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:111 -msgid "You must specify a valid webConfigurator port number" +#: src/usr/local/www/system_advanced_admin.php:113 +msgid "A valid webConfigurator port number must be specified" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:117 +#: src/usr/local/www/system_advanced_admin.php:119 msgid "Max Processes must be a number 1 or greater" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:125 +#: src/usr/local/www/system_advanced_admin.php:127 #, php-format msgid "Alternate hostname %s is not a valid hostname." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:301 +#: src/usr/local/www/system_advanced_admin.php:134 +msgid "A valid port number must be specified" +msgstr "" + +#: src/usr/local/www/system_advanced_admin.php:303 #, php-format msgid "One moment...redirecting to %s in 20 seconds." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:316 -#: src/usr/local/www/system_advanced_admin.php:328 +#: src/usr/local/www/system_advanced_admin.php:318 +#: src/usr/local/www/system_advanced_admin.php:330 #: src/usr/local/www/system_advanced_firewall.php:415 -#: src/usr/local/www/system_advanced_misc.php:316 +#: src/usr/local/www/system_advanced_misc.php:333 #: src/usr/local/www/system_advanced_network.php:184 -#: src/usr/local/www/system_advanced_notifications.php:228 +#: src/usr/local/www/system_advanced_notifications.php:227 #: src/usr/local/www/system_advanced_sysctl.php:186 msgid "Admin Access" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:329 +#: src/usr/local/www/system_advanced_admin.php:331 #: src/usr/local/www/system_advanced_firewall.php:404 #: src/usr/local/www/system_advanced_firewall.php:416 -#: src/usr/local/www/system_advanced_misc.php:317 +#: src/usr/local/www/system_advanced_misc.php:334 #: src/usr/local/www/system_advanced_network.php:185 -#: src/usr/local/www/system_advanced_notifications.php:229 +#: src/usr/local/www/system_advanced_notifications.php:228 #: src/usr/local/www/system_advanced_sysctl.php:187 msgid "Firewall & NAT" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:331 +#: src/usr/local/www/system_advanced_admin.php:333 #: src/usr/local/www/system_advanced_firewall.php:418 -#: src/usr/local/www/system_advanced_misc.php:304 -#: src/usr/local/www/system_advanced_misc.php:319 +#: src/usr/local/www/system_advanced_misc.php:320 +#: src/usr/local/www/system_advanced_misc.php:336 #: src/usr/local/www/system_advanced_network.php:187 -#: src/usr/local/www/system_advanced_notifications.php:231 +#: src/usr/local/www/system_advanced_notifications.php:230 #: src/usr/local/www/system_advanced_sysctl.php:189 -#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:277 +#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:280 msgid "Miscellaneous" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:332 +#: src/usr/local/www/system_advanced_admin.php:334 #: src/usr/local/www/system_advanced_firewall.php:419 -#: src/usr/local/www/system_advanced_misc.php:320 +#: src/usr/local/www/system_advanced_misc.php:337 #: src/usr/local/www/system_advanced_network.php:188 -#: src/usr/local/www/system_advanced_notifications.php:232 +#: src/usr/local/www/system_advanced_notifications.php:231 #: src/usr/local/www/system_advanced_sysctl.php:166 #: src/usr/local/www/system_advanced_sysctl.php:190 #: src/usr/local/www/system_advanced_sysctl.php:197 msgid "System Tunables" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:333 +#: src/usr/local/www/system_advanced_admin.php:335 #: src/usr/local/www/system_advanced_firewall.php:420 -#: src/usr/local/www/system_advanced_misc.php:321 +#: src/usr/local/www/system_advanced_misc.php:338 #: src/usr/local/www/system_advanced_network.php:189 -#: src/usr/local/www/system_advanced_notifications.php:216 -#: src/usr/local/www/system_advanced_notifications.php:233 +#: src/usr/local/www/system_advanced_notifications.php:215 +#: src/usr/local/www/system_advanced_notifications.php:232 #: src/usr/local/www/system_advanced_sysctl.php:191 msgid "Notifications" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:359 +#: src/usr/local/www/system_advanced_admin.php:361 msgid "Create or Import" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:378 +#: src/usr/local/www/system_advanced_admin.php:379 msgid "TCP port" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:382 +#: src/usr/local/www/system_advanced_admin.php:383 msgid "" -"Enter a custom port number for the webConfigurator above if you want to " -"override the default (80 for HTTP, 443 for HTTPS). Changes will take effect " -"immediately after save." +"Enter a custom port number for the webConfigurator above to override the " +"default (80 for HTTP, 443 for HTTPS). Changes will take effect immediately " +"after save." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:388 +#: src/usr/local/www/system_advanced_admin.php:389 msgid "Max Processes" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:391 +#: src/usr/local/www/system_advanced_admin.php:392 msgid "" -"Enter the number of webConfigurator processes you want to run. This defaults " -"to 2. Increasing this will allow more users/browsers to access the GUI " +"Enter the number of webConfigurator processes to run. This defaults to 2. " +"Increasing this will allow more users/browsers to access the GUI " "concurrently." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:397 +#: src/usr/local/www/system_advanced_admin.php:398 msgid "WebGUI redirect" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:400 +#: src/usr/local/www/system_advanced_admin.php:401 msgid "" "When this is unchecked, access to the webConfigurator is always permitted " "even on port 80, regardless of the listening port configured. Check this box " "to disable this automatically added redirect rule." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:406 +#: src/usr/local/www/system_advanced_admin.php:407 msgid "WebGUI Login Autocomplete" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:409 +#: src/usr/local/www/system_advanced_admin.php:410 msgid "" "When this is checked, login credentials for the webConfigurator may be saved " "by the browser. While convenient, some security standards require this to be " @@ -24420,165 +24711,165 @@ msgid "" "this option)." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:417 +#: src/usr/local/www/system_advanced_admin.php:418 msgid "WebGUI login messages" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:420 +#: src/usr/local/www/system_advanced_admin.php:421 msgid "" "When this is checked, successful logins to the webConfigurator will not be " "logged." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:431 +#: src/usr/local/www/system_advanced_admin.php:432 msgid "Anti-lockout" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:434 +#: src/usr/local/www/system_advanced_admin.php:435 #, php-format msgid "" "When this is unchecked, access to the webConfigurator on the %s interface is " "always permitted, regardless of the user-defined firewall rule set. Check " "this box to disable this automatically added rule, so access to the " -"webConfigurator is controlled by the user-defined firewall rules (ensure you " -"have a firewall rule in place that allows you in, or you will lock yourself " -"out!)<em>Hint: the "Set interface(s) IP address" option in the " -"console menu resets this setting as well.</em>" +"webConfigurator is controlled by the user-defined firewall rules (ensure a " +"firewall rule is in place that allows access, to avoid being locked out!) " +"<em>Hint: the "Set interface(s) IP address" option in the console " +"menu resets this setting as well.</em>" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:444 +#: src/usr/local/www/system_advanced_admin.php:445 msgid "DNS Rebind Check" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:447 +#: src/usr/local/www/system_advanced_admin.php:448 msgid "" -"When this is unchecked, your system is protected against <a href=\"http://en." +"When this is unchecked, the system is protected against <a href=\"http://en." "wikipedia.org/wiki/DNS_rebinding\">DNS Rebinding attacks</a>. This blocks " -"private IP responses from your configured DNS servers. Check this box to " +"private IP responses from the configured DNS servers. Check this box to " "disable this protection if it interferes with webConfigurator access or name " -"resolution in your environment." +"resolution in the environment." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:455 +#: src/usr/local/www/system_advanced_admin.php:456 msgid "Alternate Hostnames" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:458 +#: src/usr/local/www/system_advanced_admin.php:459 msgid "" -"Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks. Here you can " -"specify alternate hostnames by which the router may be queried, to bypass " -"the DNS Rebinding Attack checks. Separate hostnames with spaces." +"Alternate Hostnames for DNS Rebinding and HTTP_REFERER Checks. Specify " +"alternate hostnames by which the router may be queried, to bypass the DNS " +"Rebinding Attack checks. Separate hostnames with spaces." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:464 +#: src/usr/local/www/system_advanced_admin.php:465 msgid "Browser HTTP_REFERER enforcement" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:467 +#: src/usr/local/www/system_advanced_admin.php:468 msgid "" "When this is unchecked, access to the webConfigurator is protected against " "HTTP_REFERER redirection attempts. Check this box to disable this protection " -"if you find that it interferes with webConfigurator access in certain corner " -"cases such as using external scripts to interact with this system. More " -"information on HTTP_REFERER is available from <a target=\"_blank\" href=" -"\"http://en.wikipedia.org/wiki/HTTP_referrer\">Wikipedia</a>." +"if it interferes with webConfigurator access in certain corner cases such as " +"using external scripts to interact with this system. More information on " +"HTTP_REFERER is available from <a target=\"_blank\" href=\"http://en." +"wikipedia.org/wiki/HTTP_referrer\">Wikipedia</a>." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:476 +#: src/usr/local/www/system_advanced_admin.php:477 msgid "Browser tab text" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:479 +#: src/usr/local/www/system_advanced_admin.php:480 msgid "" "When this is unchecked, the browser tab shows the host name followed by the " "current page. Check this box to display the current page followed by the " "host name." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:484 +#: src/usr/local/www/system_advanced_admin.php:485 msgid "Secure Shell" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:488 +#: src/usr/local/www/system_advanced_admin.php:489 msgid "Secure Shell Server" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:495 -#: src/usr/local/www/vpn_ipsec_phase1.php:740 +#: src/usr/local/www/system_advanced_admin.php:496 +#: src/usr/local/www/vpn_ipsec_phase1.php:738 msgid "Authentication Method" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:498 +#: src/usr/local/www/system_advanced_admin.php:499 msgid "" "When enabled, authorized keys need to be configured for each <a href=" "\"system_usermanager.php\">user</a> that has been granted secure shell " "access." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:504 +#: src/usr/local/www/system_advanced_admin.php:505 msgid "SSH port" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:508 +#: src/usr/local/www/system_advanced_admin.php:509 msgid "Note: Leave this blank for the default of 22." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:512 +#: src/usr/local/www/system_advanced_admin.php:513 msgid "Serial Communications" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:517 +#: src/usr/local/www/system_advanced_admin.php:518 msgid "Serial Terminal" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:520 +#: src/usr/local/www/system_advanced_admin.php:521 msgid "" "Note:\tThis will redirect the console output and messages to the serial " -"port. You can still access the console menu from the internal video card/" +"port. The console menu can still be accessed from the internal video card/" "keyboard. A <b>null modem</b> serial cable or adapter is required to use the " "serial console." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:528 +#: src/usr/local/www/system_advanced_admin.php:529 msgid "Serial Speed" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:531 +#: src/usr/local/www/system_advanced_admin.php:532 msgid "Allows selection of different speeds for the serial console port." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:539 +#: src/usr/local/www/system_advanced_admin.php:540 msgid "Serial Console" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:540 +#: src/usr/local/www/system_advanced_admin.php:541 msgid "VGA Console" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:536 +#: src/usr/local/www/system_advanced_admin.php:537 msgid "Primary Console" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:542 +#: src/usr/local/www/system_advanced_admin.php:543 msgid "" "Select the preferred console if multiple consoles are present. The preferred " "console will show pfSense boot script output. All consoles display OS boot " "messages, console messages, and the console menu." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:548 +#: src/usr/local/www/system_advanced_admin.php:549 msgid "Console Options" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:552 +#: src/usr/local/www/system_advanced_admin.php:553 msgid "Console menu" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:588 +#: src/usr/local/www/system_advanced_admin.php:589 msgid "secure shell configuration has changed. Stopping sshd." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:591 +#: src/usr/local/www/system_advanced_admin.php:592 msgid "secure shell configuration has changed. Restarting sshd." msgstr "" @@ -24707,7 +24998,7 @@ msgid "High-latency" msgstr "" #: src/usr/local/www/system_advanced_firewall.php:455 -#: src/usr/local/www/vpn_ipsec_phase1.php:749 +#: src/usr/local/www/vpn_ipsec_phase1.php:747 msgid "Aggressive" msgstr "" @@ -24731,8 +25022,8 @@ msgstr "" #, php-format msgid "" "Note: This converts %s into a routing only platform!<br/>Note: This will " -"also turn off NAT! If you only want to disable NAT, and not firewall rules, " -"visit the <a href=\"firewall_nat_out.php\">Outbound NAT</a> page." +"also turn off NAT! To only disable NAT, and not firewall rules, visit the <a " +"href=\"firewall_nat_out.php\">Outbound NAT</a> page." msgstr "" #: src/usr/local/www/system_advanced_firewall.php:472 @@ -24780,7 +25071,7 @@ msgstr "" #, php-format msgid "" "Maximum number of connections to hold in the firewall state table. <br/" -">Note: Leave this blank for the default. On your system the default size is: " +">Note: Leave this blank for the default. On this system the default size is: " "%d" msgstr "" @@ -24792,7 +25083,7 @@ msgstr "" #, php-format msgid "" "Maximum number of table entries for systems such as aliases, sshlockout, " -"snort, etc, combined.<br/>Note: Leave this blank for the default. On your " +"snort, etc, combined.<br/>Note: Leave this blank for the default. On this " "system the default size is: %d" msgstr "" @@ -24812,7 +25103,7 @@ msgstr "" #: src/usr/local/www/system_advanced_firewall.php:538 msgid "" -"This option only applies if you have defined one or more static routes. If " +"This option only applies if one or more static routes have been defined. If " "it is enabled, traffic that enters and leaves through the same interface " "will not be checked by the firewall. This may be desirable in some " "situations where multiple subnets are connected to the same interface." @@ -24828,9 +25119,9 @@ msgstr "" #: src/usr/local/www/system_advanced_firewall.php:555 msgid "" -"With Multi-WAN you generally want to ensure traffic leaves the same " +"With Multi-WAN it is generally desired to ensure traffic leaves the same " "interface it arrives on, hence reply-to is added automatically by default. " -"When using bridging, you must disable this behavior if the WAN gateway IP is " +"When using bridging, this behavior must be disabled if the WAN gateway IP is " "different from the gateway IP of the hosts behind the bridged interface." msgstr "" @@ -24840,79 +25131,79 @@ msgstr "" #: src/usr/local/www/system_advanced_firewall.php:565 msgid "" -"With Multi-WAN you generally want to ensure traffic reaches directly " -"connected networks and VPN networks when using policy routing. You can " -"disable this for special purposes but it requires manually creating rules " -"for these networks" +"With Multi-WAN it is generally desired to ensure traffic reaches directly " +"connected networks and VPN networks when using policy routing. This can be " +"disabled for special purposes but it requires manually creating rules for " +"these networks." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:572 +#: src/usr/local/www/system_advanced_firewall.php:571 msgid "Aliases Hostnames Resolve Interval" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:576 +#: src/usr/local/www/system_advanced_firewall.php:575 msgid "" "Interval, in seconds, that will be used to resolve hostnames configured on " -"aliases.. <br/>Note:\t Leave this blank for the default (300s)." +"aliases. <br/>Note:\t Leave this blank for the default (300s)." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:582 +#: src/usr/local/www/system_advanced_firewall.php:581 msgid "Check certificate of aliases URLs" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:585 +#: src/usr/local/www/system_advanced_firewall.php:584 msgid "" "Make sure the certificate is valid for all HTTPS addresses on aliases. If " "it's not valid or is revoked, do not download it." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:589 +#: src/usr/local/www/system_advanced_firewall.php:588 msgid "Bogon Networks" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:596 +#: src/usr/local/www/system_advanced_firewall.php:595 msgid "Monthly" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:597 +#: src/usr/local/www/system_advanced_firewall.php:596 msgid "Weekly" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:598 +#: src/usr/local/www/system_advanced_firewall.php:597 msgid "Daily" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:593 +#: src/usr/local/www/system_advanced_firewall.php:592 msgid "Update Frequency" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:600 +#: src/usr/local/www/system_advanced_firewall.php:599 msgid "" "The frequency of updating the lists of IP addresses that are reserved (but " "not RFC 1918) or not yet assigned by IANA." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:606 +#: src/usr/local/www/system_advanced_firewall.php:605 msgid "Network Address Translation" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:621 +#: src/usr/local/www/system_advanced_firewall.php:620 msgid "disabled" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:622 +#: src/usr/local/www/system_advanced_firewall.php:621 msgid "NAT + proxy" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:623 +#: src/usr/local/www/system_advanced_firewall.php:622 msgid "Pure NAT" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:618 +#: src/usr/local/www/system_advanced_firewall.php:617 msgid "NAT Reflection mode for port forwards" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:625 +#: src/usr/local/www/system_advanced_firewall.php:624 msgid "" "</span><ul class=\"help-block\"><li>The pure NAT mode uses a set of NAT " "rules to direct packets to the target of the port forward. It has better " @@ -24930,21 +25221,21 @@ msgid "" "configured to override this system setting on a per-rule basis." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:643 +#: src/usr/local/www/system_advanced_firewall.php:642 msgid "Reflection Timeout" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:647 +#: src/usr/local/www/system_advanced_firewall.php:646 msgid "" "Enter value for Reflection timeout in seconds.<br/>Note: Only applies to " "Reflection on port forwards in NAT + proxy mode." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:652 +#: src/usr/local/www/system_advanced_firewall.php:651 msgid "Enable NAT Reflection for 1:1 NAT" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:655 +#: src/usr/local/www/system_advanced_firewall.php:654 msgid "" "Note: Reflection on 1:1 mappings is only for the inbound component of the " "1:1 mappings. This functions the same as the pure NAT mode for port " @@ -24953,11 +25244,11 @@ msgid "" "rule basis." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:663 +#: src/usr/local/www/system_advanced_firewall.php:662 msgid "Enable automatic outbound NAT for Reflection" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:666 +#: src/usr/local/www/system_advanced_firewall.php:665 msgid "" "Required for full functionality of the pure NAT mode of NAT Reflection for " "port forwards or NAT Reflection for 1:1 NAT. Note: This only works for " @@ -24965,50 +25256,50 @@ msgid "" "outbound NAT rules that direct the reply packets back through the router." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:673 +#: src/usr/local/www/system_advanced_firewall.php:672 msgid "TFTP Proxy" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:677 -msgid "Choose the interfaces where you want TFTP proxy helper to be enabled." +#: src/usr/local/www/system_advanced_firewall.php:676 +msgid "Choose the interfaces on which to enable TFTP proxy helper." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:682 -msgid "State Timeouts in Seconds. (Leave blank for default)" +#: src/usr/local/www/system_advanced_firewall.php:681 +msgid "State Timeouts (seconds - blank for default)" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:689 +#: src/usr/local/www/system_advanced_firewall.php:688 msgid "TCP " msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:700 +#: src/usr/local/www/system_advanced_firewall.php:699 msgid "UDP " msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:711 +#: src/usr/local/www/system_advanced_firewall.php:710 msgid "ICMP " msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:722 +#: src/usr/local/www/system_advanced_firewall.php:721 msgid "Other " msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:745 +#: src/usr/local/www/system_advanced_firewall.php:744 msgid "The default optimization algorithm" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:747 +#: src/usr/local/www/system_advanced_firewall.php:746 msgid "" "Used for eg. satellite links. Expires idle connections later than default" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:749 +#: src/usr/local/www/system_advanced_firewall.php:748 msgid "" "Expires idle connections quicker. More efficient use of CPU and memory but " "can drop legitimate idle connections" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:751 +#: src/usr/local/www/system_advanced_firewall.php:750 msgid "" "Tries to avoid dropping any legitimate idle connections at the expense of " "increased memory usage and CPU utilization" @@ -25030,89 +25321,89 @@ msgstr "" msgid "AMD K8, K10 and K11 CPU on-die thermal sensor" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:125 +#: src/usr/local/www/system_advanced_misc.php:124 msgid "Please select a valid Cryptographic Accelerator." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:129 +#: src/usr/local/www/system_advanced_misc.php:128 msgid "Please select a valid Thermal Hardware Sensor." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:133 +#: src/usr/local/www/system_advanced_misc.php:132 msgid "/tmp Size must be numeric and should not be less than 40MiB." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:137 +#: src/usr/local/www/system_advanced_misc.php:136 msgid "/var Size must be numeric and should not be less than 60MiB." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:141 +#: src/usr/local/www/system_advanced_misc.php:140 msgid "Proxy port must be a valid port number, 1-65535." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:145 +#: src/usr/local/www/system_advanced_misc.php:144 msgid "Proxy URL must be a valid IP address or FQDN." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:149 +#: src/usr/local/www/system_advanced_misc.php:148 msgid "The proxy username contains invalid characters." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:153 +#: src/usr/local/www/system_advanced_misc.php:152 msgid "Proxy password and confirmation must match." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:325 +#: src/usr/local/www/system_advanced_misc.php:342 msgid "Proxy Support" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:329 +#: src/usr/local/www/system_advanced_misc.php:346 msgid "Proxy URL" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:332 +#: src/usr/local/www/system_advanced_misc.php:349 msgid "" "Hostname or IP address of proxy server this system will use for its outbound " "Internet access." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:337 +#: src/usr/local/www/system_advanced_misc.php:354 msgid "Proxy Port" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:340 +#: src/usr/local/www/system_advanced_misc.php:357 msgid "Port where proxy server is listening." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:344 +#: src/usr/local/www/system_advanced_misc.php:361 msgid "Proxy Username" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:347 +#: src/usr/local/www/system_advanced_misc.php:364 msgid "" "Username for authentication to proxy server. Optional, leave blank to not " "use authentication." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:352 +#: src/usr/local/www/system_advanced_misc.php:369 msgid "Proxy Password" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:355 +#: src/usr/local/www/system_advanced_misc.php:372 msgid "Password for authentication to proxy server." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:358 -#: src/usr/local/www/system_advanced_misc.php:360 +#: src/usr/local/www/system_advanced_misc.php:375 +#: src/usr/local/www/system_advanced_misc.php:377 msgid "Load Balancing" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:364 -#: src/usr/local/www/system_advanced_misc.php:365 +#: src/usr/local/www/system_advanced_misc.php:381 +#: src/usr/local/www/system_advanced_misc.php:382 msgid "Use sticky connections" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:367 +#: src/usr/local/www/system_advanced_misc.php:384 msgid "" "Successive connections will be redirected to the servers in a round-robin " "manner with connections from the same source being sent to the same web " @@ -25123,11 +25414,11 @@ msgid "" "Load Balancing service." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:377 +#: src/usr/local/www/system_advanced_misc.php:394 msgid "Source tracking timeout" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:381 +#: src/usr/local/www/system_advanced_misc.php:398 msgid "" "Set the source tracking timeout for sticky connections. By default this is " "0, so source tracking is removed as soon as the state expires. Setting this " @@ -25135,26 +25426,26 @@ msgid "" "longer periods of time." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:390 +#: src/usr/local/www/system_advanced_misc.php:407 msgid "Default gateway switching" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:393 +#: src/usr/local/www/system_advanced_misc.php:410 msgid "" "If the default gateway goes down, switch the default gateway to another " "available one. This is not enabled by default, as it's unnecessary in most " "all scenarios, which instead use gateway groups." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:398 +#: src/usr/local/www/system_advanced_misc.php:415 msgid "Power Savings" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:402 +#: src/usr/local/www/system_advanced_misc.php:419 msgid "PowerD" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:405 +#: src/usr/local/www/system_advanced_misc.php:422 msgid "" "The powerd utility monitors the system state and sets various power control " "options accordingly. It offers four modes (maximum, minimum, adaptive and " @@ -25171,201 +25462,209 @@ msgid "" "and keeps twice lower CPU load." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:420 +#: src/usr/local/www/system_advanced_misc.php:437 msgid "Hiadaptive" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:421 +#: src/usr/local/www/system_advanced_misc.php:438 msgid "Adaptive" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:422 +#: src/usr/local/www/system_advanced_misc.php:439 msgid "Minimum" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:423 +#: src/usr/local/www/system_advanced_misc.php:440 msgid "Maximum" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:428 +#: src/usr/local/www/system_advanced_misc.php:445 msgid "AC Power" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:435 +#: src/usr/local/www/system_advanced_misc.php:452 msgid "Battery Power" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:442 +#: src/usr/local/www/system_advanced_misc.php:459 msgid "Unknown Power" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:448 +#: src/usr/local/www/system_advanced_misc.php:465 msgid "Cryptographic & Thermal Hardware" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:452 +#: src/usr/local/www/system_advanced_misc.php:469 msgid "Cryptographic Hardware" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:455 +#: src/usr/local/www/system_advanced_misc.php:472 msgid "" "A cryptographic accelerator module will use hardware support to speed up " "some cryptographic functions on systems which have the chip. Do not enable " -"this option if you have a Hifn cryptographic acceleration card, as this will " -"take precedence and the Hifn card will not be used. Acceleration should be " -"automatic for IPsec when using a cipher supported by your chip, such as " +"this option with a Hifn cryptographic acceleration card, as this will take " +"precedence and the Hifn card will not be used. Acceleration should be " +"automatic for IPsec when using a cipher supported by the chip, such as " "AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled " -"for hardware acceleration.If you do not have a crypto chip in your system, " -"this option will have no effect. To unload the selected module, set this " -"option to \"none\" and then reboot." +"for hardware acceleration. If there is not a crypto chip in the system, this " +"option will have no effect. To unload the selected module, set this option " +"to \"none\" and then reboot." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:467 +#: src/usr/local/www/system_advanced_misc.php:484 #: src/usr/local/www/widgets/include/thermal_sensors.inc:14 -#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:277 +#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:280 msgid "Thermal Sensors" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:470 +#: src/usr/local/www/system_advanced_misc.php:487 msgid "" -"If you have a supported CPU, selecting a themal sensor will load the " -"appropriate driver to read its temperature. Setting this to \"None\" will " -"attempt to read the temperature from an ACPI-compliant motherboard sensor " -"instead, if one is present.If you do not have a supported thermal sensor " -"chip in your system, this option will have no effect. To unload the selected " -"module, set this option to \"none\" and then reboot." +"With a supported CPU, selecting a thermal sensor will load the appropriate " +"driver to read its temperature. Setting this to \"None\" will attempt to " +"read the temperature from an ACPI-compliant motherboard sensor instead, if " +"one is present. If there is not a supported thermal sensor chip in the " +"system, this option will have no effect. To unload the selected module, set " +"this option to \"none\" and then reboot." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:483 +#: src/usr/local/www/system_advanced_misc.php:500 msgid "Schedule States" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:486 +#: src/usr/local/www/system_advanced_misc.php:503 msgid "" "By default, when a schedule expires, connections permitted by that schedule " "are killed. This option overrides that behavior by not clearing states for " "existing connections." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:491 +#: src/usr/local/www/system_advanced_misc.php:508 #: src/usr/local/www/system_gateways_edit.php:667 msgid "Gateway Monitoring" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:495 +#: src/usr/local/www/system_advanced_misc.php:512 msgid "State Killing on Gateway Failure" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:498 +#: src/usr/local/www/system_advanced_misc.php:515 msgid "" "The monitoring process will flush all states when a gateway goes down if " "this box is checked." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:503 +#: src/usr/local/www/system_advanced_misc.php:520 msgid "Skip rules when gateway is down" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:506 +#: src/usr/local/www/system_advanced_misc.php:523 msgid "" "By default, when a rule has a gateway specified and this gateway is down, " "the rule is created omitting the gateway. This option overrides that " "behavior by omitting the entire rule instead." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:511 +#: src/usr/local/www/system_advanced_misc.php:528 msgid "RAM Disk Settings (Reboot to Apply Changes)" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:515 +#: src/usr/local/www/system_advanced_misc.php:532 msgid "Use RAM Disks" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:518 +#: src/usr/local/www/system_advanced_misc.php:535 msgid "" -"Set this if you wish to use /tmp and /var as RAM disks (memory file system " -"disks) on a full install rather than use the hard disk. Setting this will " -"cause the data in /tmp and /var to be lost at reboot, including log data. " -"RRD and DHCP Leases will be retained." +"Set this to use /tmp and /var as RAM disks (memory file system disks) on a " +"full install rather than use the hard disk. Setting this will cause the data " +"in /tmp and /var to be lost, including log data. RRD and DHCP Leases will be " +"retained. Changing this setting will cause the firewall to reboot after " +"clicking \"Save\"." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:525 +#: src/usr/local/www/system_advanced_misc.php:542 msgid "/tmp RAM Disk Size" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:529 +#: src/usr/local/www/system_advanced_misc.php:546 msgid "" "Set the size, in MiB, for the /tmp RAM disk. Leave blank for 40MiB. Do not " "set lower than 40." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:534 +#: src/usr/local/www/system_advanced_misc.php:551 msgid "/var RAM Disk Size" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:538 +#: src/usr/local/www/system_advanced_misc.php:555 msgid "" "Set the size, in MiB, for the /var RAM disk. Leave blank for 60MiB. Do not " "set lower than 60." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:543 +#: src/usr/local/www/system_advanced_misc.php:560 msgid "Periodic RRD Backup" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:547 +#: src/usr/local/www/system_advanced_misc.php:564 msgid "" "This will periodically backup the RRD data so it can be restored " "automatically on the next boot. Keep in mind that the more frequent the " -"backup, the more writes will happen to your media." +"backup, the more writes will happen to the media." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:553 +#: src/usr/local/www/system_advanced_misc.php:570 msgid "Periodic DHCP Leases Backup" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:557 +#: src/usr/local/www/system_advanced_misc.php:574 msgid "" "This will periodically backup the DHCP leases so it can be restored " "automatically on the next boot. Keep in mind that the more frequent the " -"backup, the more writes will happen to your media." +"backup, the more writes will happen to the media." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:564 +#: src/usr/local/www/system_advanced_misc.php:581 msgid "Hardware Settings" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:573 +#: src/usr/local/www/system_advanced_misc.php:590 msgid "Always on" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:571 +#: src/usr/local/www/system_advanced_misc.php:588 msgid "Hard disk standby time" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:574 +#: src/usr/local/www/system_advanced_misc.php:591 msgid "" "Puts the hard disk into standby mode when the selected number of minutes has " "elapsed since the last access.<br /><strong> Do not set this for CF cards.</" "strong>" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:580 +#: src/usr/local/www/system_advanced_misc.php:597 msgid "Installation Feedback" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:584 +#: src/usr/local/www/system_advanced_misc.php:601 msgid "Host UUID" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:587 +#: src/usr/local/www/system_advanced_misc.php:604 msgid "" "Enable this option to not send HOST UUID to pfSense as part of User-Agent " "header." msgstr "" +#: src/usr/local/www/system_advanced_misc.php:610 +msgid "" +"The \\\"Use Ramdisk\\\" setting has been changed. This will cause the " +"firewall\\nto reboot immediately after the new setting is saved.\\n\\nPlease " +"confirm." +msgstr "" + #: src/usr/local/www/system_advanced_network.php:89 -msgid "You must specify an IP address to NAT IPv6 packets." +msgid "An IP address to NAT IPv6 packets must be specified." msgstr "" #: src/usr/local/www/system_advanced_network.php:193 @@ -25377,7 +25676,6 @@ msgid "Allow IPv6" msgstr "" #: src/usr/local/www/system_advanced_network.php:200 -#: src/usr/local/www/system_advanced_network.php:209 msgid "" "NOTE: This does not disable any IPv6 features on the firewall, it only " "blocks traffic." @@ -25388,7 +25686,7 @@ msgstr "" msgid "IPv6 over IPv4 Tunneling" msgstr "" -#: src/usr/local/www/system_advanced_network.php:217 +#: src/usr/local/www/system_advanced_network.php:216 msgid "" "Enable IPv4 NAT encapsulation of IPv6 packets. <br/>This provides an RFC " "2893 compatibility mechanism that can be used to tunneling IPv6 packets over " @@ -25396,82 +25694,83 @@ msgid "" "rule to permit IPv6 packets." msgstr "" -#: src/usr/local/www/system_advanced_network.php:226 +#: src/usr/local/www/system_advanced_network.php:225 msgid "Prefer IPv4 over IPv6" msgstr "" -#: src/usr/local/www/system_advanced_network.php:229 +#: src/usr/local/www/system_advanced_network.php:228 msgid "" -"By default, if a hostname resolves IPv6 and IPv4 addresses IPv6 will be " -"used, if you check this option, IPv4 will be used instead of IPv6." +"By default, if IPv6 is configured and a hostname resolves IPv6 and IPv4 " +"addresses, IPv6 will be used. If this option is selected, IPv4 will be " +"preferred over IPv6." msgstr "" -#: src/usr/local/www/system_advanced_network.php:237 +#: src/usr/local/www/system_advanced_network.php:236 msgid "Device polling" msgstr "" -#: src/usr/local/www/system_advanced_network.php:240 +#: src/usr/local/www/system_advanced_network.php:239 #, php-format msgid "" "Device polling is a technique that lets the system periodically poll network " -"devices for new data instead of relying on interrupts. This prevents your " +"devices for new data instead of relying on interrupts. This prevents the " "webConfigurator, SSH, etc. from being inaccessible due to interrupt floods " "when under extreme load. Generally this is not recommended. Not all NICs " -"support polling; see the %s homepage for a list of supported cards" +"support polling; see the %s homepage for a list of supported cards." msgstr "" -#: src/usr/local/www/system_advanced_network.php:249 +#: src/usr/local/www/system_advanced_network.php:248 msgid "Hardware Checksum Offloading" msgstr "" -#: src/usr/local/www/system_advanced_network.php:252 +#: src/usr/local/www/system_advanced_network.php:251 msgid "" "Checking this option will disable hardware checksum offloading.<br/>Checksum " "offloading is broken in some hardware, particularly some Realtek cards. " "Rarely, drivers may have problems with checksum offloading and some specific " -"NICs.This will take effect after you reboot the machine or re-configure each " +"NICs. This will take effect after a machine reboot or re-configure of each " "interface." msgstr "" -#: src/usr/local/www/system_advanced_network.php:260 +#: src/usr/local/www/system_advanced_network.php:259 msgid "Hardware TCP Segmentation Offloading" msgstr "" -#: src/usr/local/www/system_advanced_network.php:263 +#: src/usr/local/www/system_advanced_network.php:262 msgid "" "Checking this option will disable hardware TCP segmentation offloading (TSO, " "TSO4, TSO6). This offloading is broken in some hardware drivers, and may " -"impact performance with some specific NICs.This will take effect after you " -"reboot the machine or re-configure each interface." +"impact performance with some specific NICs. This will take effect after a " +"machine reboot or re-configure of each interface." msgstr "" -#: src/usr/local/www/system_advanced_network.php:270 +#: src/usr/local/www/system_advanced_network.php:269 msgid "Hardware Large Receive Offloading" msgstr "" -#: src/usr/local/www/system_advanced_network.php:273 +#: src/usr/local/www/system_advanced_network.php:272 msgid "" "Checking this option will disable hardware large receive offloading (LRO). " "This offloading is broken in some hardware drivers, and may impact " -"performance with some specific NICs.This will take effect after you reboot " -"the machine or re-configure each interface." +"performance with some specific NICs. This will take effect after a machine " +"reboot or re-configure of each interface." msgstr "" -#: src/usr/local/www/system_advanced_network.php:280 +#: src/usr/local/www/system_advanced_network.php:279 msgid "ARP Handling" msgstr "" -#: src/usr/local/www/system_advanced_network.php:283 +#: src/usr/local/www/system_advanced_network.php:282 msgid "" "This option will suppress ARP log messages when multiple interfaces reside " -"on the same broadcast domain" +"on the same broadcast domain." msgstr "" -#: src/usr/local/www/system_advanced_network.php:289 +#: src/usr/local/www/system_advanced_network.php:288 msgid "Enable flowtable support" msgstr "" -#: src/usr/local/www/system_advanced_network.php:291 +#: src/usr/local/www/system_advanced_network.php:290 msgid "" "Enables infrastructure for caching flows as a means of accelerating L3 and " "L2 lookups as well as providing stateful load balancing when used with " @@ -25486,173 +25785,171 @@ msgstr "" msgid "SMTP passwords must match" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:203 +#: src/usr/local/www/system_advanced_notifications.php:202 #, php-format msgid "This is a test message from %s. It is safe to ignore this message." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:212 +#: src/usr/local/www/system_advanced_notifications.php:211 #, php-format msgid "This is a test message from %s. It is safe to ignore this message." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:238 +#: src/usr/local/www/system_advanced_notifications.php:237 msgid "Growl" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:242 +#: src/usr/local/www/system_advanced_notifications.php:241 msgid "Disable Growl" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:245 +#: src/usr/local/www/system_advanced_notifications.php:244 msgid "" "Check this option to disable growl notifications but preserve the settings " "below." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:250 +#: src/usr/local/www/system_advanced_notifications.php:249 msgid "Registration Name" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:254 +#: src/usr/local/www/system_advanced_notifications.php:253 msgid "Enter the name to register with the Growl server." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:258 +#: src/usr/local/www/system_advanced_notifications.php:257 msgid "Notification Name" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:263 -msgid "Enter a name for the Growl notifications" +#: src/usr/local/www/system_advanced_notifications.php:262 +msgid "Enter a name for the Growl notifications." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:270 -msgid "" -"This is the IP address that you would like to send growl notifications to." +#: src/usr/local/www/system_advanced_notifications.php:269 +msgid "This is the IP address to send growl notifications to." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:278 +#: src/usr/local/www/system_advanced_notifications.php:276 msgid "Enter the password of the remote growl notification device." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:282 -msgid "Test Growl" +#: src/usr/local/www/system_advanced_notifications.php:280 +msgid "Test Growl Settings" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:285 +#: src/usr/local/www/system_advanced_notifications.php:283 msgid "" "A test notification will be sent even if the service is marked as disabled." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:289 +#: src/usr/local/www/system_advanced_notifications.php:287 msgid "E-Mail" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:293 +#: src/usr/local/www/system_advanced_notifications.php:291 msgid "Disable SMTP" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:296 +#: src/usr/local/www/system_advanced_notifications.php:294 msgid "" "Check this option to disable SMTP notifications but preserve the settings " "below. Some other mechanisms, such as packages, may need these settings in " "place to function." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:302 +#: src/usr/local/www/system_advanced_notifications.php:300 msgid "E-Mail server" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:305 +#: src/usr/local/www/system_advanced_notifications.php:303 msgid "" "This is the FQDN or IP address of the SMTP E-Mail server to which " "notifications will be sent." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:310 +#: src/usr/local/www/system_advanced_notifications.php:308 msgid "SMTP Port of E-Mail server" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:313 +#: src/usr/local/www/system_advanced_notifications.php:311 msgid "" "This is the port of the SMTP E-Mail server, typically 25, 587 (submission) " -"or 465 (smtps)" +"or 465 (smtps)." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:316 +#: src/usr/local/www/system_advanced_notifications.php:314 msgid "Secure SMTP Connection" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:319 +#: src/usr/local/www/system_advanced_notifications.php:317 msgid "Enable SSL/TLS" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:326 +#: src/usr/local/www/system_advanced_notifications.php:324 msgid "Secure STARTTLS" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:335 +#: src/usr/local/www/system_advanced_notifications.php:333 msgid "From e-mail address" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:338 +#: src/usr/local/www/system_advanced_notifications.php:336 msgid "This is the e-mail address that will appear in the from field." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:342 +#: src/usr/local/www/system_advanced_notifications.php:340 msgid "Notification E-Mail address" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:345 -msgid "" -"Enter the e-mail address that you would like email notifications sent to." +#: src/usr/local/www/system_advanced_notifications.php:343 +msgid "Enter the e-mail address to send email notifications to." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:351 +#: src/usr/local/www/system_advanced_notifications.php:348 msgid "Notification E-Mail auth username (optional)" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:355 +#: src/usr/local/www/system_advanced_notifications.php:352 msgid "Enter the e-mail address username for SMTP authentication." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:359 +#: src/usr/local/www/system_advanced_notifications.php:356 msgid "Notification E-Mail auth password" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:362 +#: src/usr/local/www/system_advanced_notifications.php:359 msgid "Enter the e-mail account password for SMTP authentication." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:366 +#: src/usr/local/www/system_advanced_notifications.php:363 msgid "Notification E-Mail auth mechanism" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:369 +#: src/usr/local/www/system_advanced_notifications.php:366 msgid "" "Select the authentication mechanism used by the SMTP server. Most work with " "PLAIN, some servers like Exchange or Office365 might require LOGIN. " msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:373 -msgid "Test SMTP" +#: src/usr/local/www/system_advanced_notifications.php:370 +msgid "Test SMTP Settings" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:376 +#: src/usr/local/www/system_advanced_notifications.php:373 msgid "" "A test notification will be sent even if the service is marked as disabled. " "The last SAVED values will be used, not necessarily the values entered here." msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:381 +#: src/usr/local/www/system_advanced_notifications.php:378 msgid "Sounds" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:385 +#: src/usr/local/www/system_advanced_notifications.php:382 msgid "Startup/Shutdown Sound" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:388 +#: src/usr/local/www/system_advanced_notifications.php:385 msgid "When this is checked, startup and shutdown sounds will no longer play." msgstr "" @@ -25696,171 +25993,179 @@ msgstr "" msgid "Tunable" msgstr "" -#: src/usr/local/www/system_authservers.php:111 +#: src/usr/local/www/system_authservers.php:89 +msgid "Select LDAP containers for authentication" +msgstr "" + +#: src/usr/local/www/system_authservers.php:90 +#: src/usr/local/www/system_authservers.php:631 +msgid "Containers" +msgstr "" + +#: src/usr/local/www/system_authservers.php:177 #, php-format msgid "Authentication Server %s deleted." msgstr "" -#: src/usr/local/www/system_authservers.php:197 -#: src/usr/local/www/system_authservers.php:220 -#: src/usr/local/www/system_authservers.php:460 +#: src/usr/local/www/system_authservers.php:263 +#: src/usr/local/www/system_authservers.php:286 +#: src/usr/local/www/system_authservers.php:526 #: src/usr/local/www/system_camanager.php:202 #: src/usr/local/www/system_camanager.php:216 #: src/usr/local/www/system_camanager.php:231 -#: src/usr/local/www/system_camanager.php:499 +#: src/usr/local/www/system_camanager.php:496 #: src/usr/local/www/system_certmanager.php:262 #: src/usr/local/www/system_certmanager.php:275 #: src/usr/local/www/system_certmanager.php:293 #: src/usr/local/www/system_certmanager.php:506 -#: src/usr/local/www/system_certmanager.php:610 -#: src/usr/local/www/system_certmanager.php:668 -#: src/usr/local/www/system_certmanager.php:959 +#: src/usr/local/www/system_certmanager.php:626 +#: src/usr/local/www/system_certmanager.php:919 #: src/usr/local/www/system_crlmanager.php:232 #: src/usr/local/www/system_crlmanager.php:238 #: src/usr/local/www/system_crlmanager.php:396 #: src/usr/local/www/system_crlmanager.php:461 #: src/usr/local/www/system_usermanager.php:191 -#: src/usr/local/www/system_usermanager.php:783 +#: src/usr/local/www/system_usermanager.php:788 msgid "Descriptive name" msgstr "" -#: src/usr/local/www/system_authservers.php:199 -#: src/usr/local/www/system_authservers.php:222 +#: src/usr/local/www/system_authservers.php:265 +#: src/usr/local/www/system_authservers.php:288 msgid "Hostname or IP" msgstr "" -#: src/usr/local/www/system_authservers.php:200 -#: src/usr/local/www/system_authservers.php:491 +#: src/usr/local/www/system_authservers.php:266 +#: src/usr/local/www/system_authservers.php:557 msgid "Port value" msgstr "" -#: src/usr/local/www/system_authservers.php:202 -#: src/usr/local/www/system_authservers.php:527 +#: src/usr/local/www/system_authservers.php:268 +#: src/usr/local/www/system_authservers.php:593 msgid "Protocol version" msgstr "" -#: src/usr/local/www/system_authservers.php:203 +#: src/usr/local/www/system_authservers.php:269 msgid "Search level" msgstr "" -#: src/usr/local/www/system_authservers.php:204 +#: src/usr/local/www/system_authservers.php:270 msgid "User naming Attribute" msgstr "" -#: src/usr/local/www/system_authservers.php:205 +#: src/usr/local/www/system_authservers.php:271 msgid "Group naming Attribute" msgstr "" -#: src/usr/local/www/system_authservers.php:206 -#: src/usr/local/www/system_authservers.php:654 +#: src/usr/local/www/system_authservers.php:272 +#: src/usr/local/www/system_authservers.php:722 msgid "Group member attribute" msgstr "" -#: src/usr/local/www/system_authservers.php:207 +#: src/usr/local/www/system_authservers.php:273 msgid "Authentication container" msgstr "" -#: src/usr/local/www/system_authservers.php:212 +#: src/usr/local/www/system_authservers.php:278 msgid "Bind user DN" msgstr "" -#: src/usr/local/www/system_authservers.php:213 +#: src/usr/local/www/system_authservers.php:279 msgid "Bind Password" msgstr "" -#: src/usr/local/www/system_authservers.php:234 -#: src/usr/local/www/system_authservers.php:728 +#: src/usr/local/www/system_authservers.php:300 +#: src/usr/local/www/system_authservers.php:796 msgid "Accounting port" msgstr "" -#: src/usr/local/www/system_authservers.php:246 +#: src/usr/local/www/system_authservers.php:312 msgid "The host name contains invalid characters." msgstr "" -#: src/usr/local/www/system_authservers.php:250 +#: src/usr/local/www/system_authservers.php:316 msgid "An authentication server with the same name already exists." msgstr "" -#: src/usr/local/www/system_authservers.php:256 +#: src/usr/local/www/system_authservers.php:322 #, php-format msgid "%s Timeout value must be numeric and positive." msgstr "" -#: src/usr/local/www/system_authservers.php:377 -#: src/usr/local/www/system_authservers.php:397 -#: src/usr/local/www/system_authservers.php:403 -#: src/usr/local/www/system_groupmanager.php:292 -#: src/usr/local/www/system_groupmanager_addprivs.php:174 -#: src/usr/local/www/system_usermanager.php:486 +#: src/usr/local/www/system_authservers.php:443 +#: src/usr/local/www/system_authservers.php:463 +#: src/usr/local/www/system_authservers.php:469 +#: src/usr/local/www/system_groupmanager.php:308 +#: src/usr/local/www/system_groupmanager_addprivs.php:173 +#: src/usr/local/www/system_usermanager.php:487 #: src/usr/local/www/system_usermanager_addprivs.php:175 -#: src/usr/local/www/system_usermanager_settings.php:146 +#: src/usr/local/www/system_usermanager_settings.php:202 msgid "Authentication Servers" msgstr "" -#: src/usr/local/www/system_authservers.php:394 -#: src/usr/local/www/system_groupmanager.php:289 -#: src/usr/local/www/system_groupmanager_addprivs.php:171 -#: src/usr/local/www/system_usermanager.php:467 -#: src/usr/local/www/system_usermanager.php:483 -#: src/usr/local/www/system_usermanager.php:493 +#: src/usr/local/www/system_authservers.php:460 +#: src/usr/local/www/system_groupmanager.php:305 +#: src/usr/local/www/system_groupmanager_addprivs.php:170 +#: src/usr/local/www/system_usermanager.php:468 +#: src/usr/local/www/system_usermanager.php:484 +#: src/usr/local/www/system_usermanager.php:494 #: src/usr/local/www/system_usermanager_addprivs.php:70 #: src/usr/local/www/system_usermanager_addprivs.php:172 -#: src/usr/local/www/system_usermanager_settings.php:143 +#: src/usr/local/www/system_usermanager_settings.php:199 #: src/usr/local/www/vpn_l2tp.php:233 src/usr/local/www/vpn_l2tp_users.php:63 #: src/usr/local/www/vpn_l2tp_users.php:119 #: src/usr/local/www/vpn_l2tp_users_edit.php:63 msgid "Users" msgstr "" -#: src/usr/local/www/system_authservers.php:395 -#: src/usr/local/www/system_groupmanager.php:274 -#: src/usr/local/www/system_groupmanager.php:290 -#: src/usr/local/www/system_groupmanager.php:298 +#: src/usr/local/www/system_authservers.php:461 +#: src/usr/local/www/system_groupmanager.php:288 +#: src/usr/local/www/system_groupmanager.php:306 +#: src/usr/local/www/system_groupmanager.php:314 #: src/usr/local/www/system_groupmanager_addprivs.php:69 -#: src/usr/local/www/system_groupmanager_addprivs.php:172 -#: src/usr/local/www/system_usermanager.php:484 -#: src/usr/local/www/system_usermanager.php:503 +#: src/usr/local/www/system_groupmanager_addprivs.php:171 +#: src/usr/local/www/system_usermanager.php:485 +#: src/usr/local/www/system_usermanager.php:504 #: src/usr/local/www/system_usermanager_addprivs.php:173 -#: src/usr/local/www/system_usermanager_settings.php:144 +#: src/usr/local/www/system_usermanager_settings.php:200 msgid "Groups" msgstr "" -#: src/usr/local/www/system_authservers.php:409 +#: src/usr/local/www/system_authservers.php:475 msgid "Server Name" msgstr "" -#: src/usr/local/www/system_authservers.php:423 -#: src/usr/local/www/vpn_openvpn_server.php:1225 +#: src/usr/local/www/system_authservers.php:489 +#: src/usr/local/www/vpn_openvpn_server.php:1230 msgid "Edit server" msgstr "" -#: src/usr/local/www/system_authservers.php:424 -#: src/usr/local/www/vpn_openvpn_server.php:1226 +#: src/usr/local/www/system_authservers.php:490 +#: src/usr/local/www/vpn_openvpn_server.php:1231 msgid "Delete server" msgstr "" -#: src/usr/local/www/system_authservers.php:456 +#: src/usr/local/www/system_authservers.php:522 msgid "Server Settings" msgstr "" -#: src/usr/local/www/system_authservers.php:475 +#: src/usr/local/www/system_authservers.php:541 msgid "LDAP Server Settings" msgstr "" -#: src/usr/local/www/system_authservers.php:483 -#: src/usr/local/www/system_authservers.php:700 +#: src/usr/local/www/system_authservers.php:549 +#: src/usr/local/www/system_authservers.php:768 msgid "Hostname or IP address" msgstr "" -#: src/usr/local/www/system_authservers.php:486 +#: src/usr/local/www/system_authservers.php:552 msgid "" "NOTE: When using SSL, this hostname MUST match the Common Name (CN) of the " "LDAP server's SSL Certificate." msgstr "" -#: src/usr/local/www/system_authservers.php:506 -#: src/usr/local/www/system_authservers.php:518 -#: src/usr/local/www/vpn_ipsec_phase1.php:809 +#: src/usr/local/www/system_authservers.php:572 +#: src/usr/local/www/system_authservers.php:584 +#: src/usr/local/www/vpn_ipsec_phase1.php:807 #: src/usr/local/www/vpn_openvpn_client.php:612 #: src/usr/local/www/vpn_openvpn_client.php:618 #: src/usr/local/www/vpn_openvpn_server.php:735 @@ -25868,159 +26173,155 @@ msgstr "" msgid "Peer Certificate Authority" msgstr "" -#: src/usr/local/www/system_authservers.php:521 +#: src/usr/local/www/system_authservers.php:587 msgid "" "This option is used if 'SSL Encrypted' option is choosen. It must match with " "the CA in the AD otherwise problems will arise." msgstr "" -#: src/usr/local/www/system_authservers.php:534 +#: src/usr/local/www/system_authservers.php:600 msgid "Server Timeout" msgstr "" -#: src/usr/local/www/system_authservers.php:538 +#: src/usr/local/www/system_authservers.php:604 msgid "Timeout for LDAP operations (seconds)" msgstr "" -#: src/usr/local/www/system_authservers.php:540 -#: src/usr/local/www/system_authservers.php:558 +#: src/usr/local/www/system_authservers.php:606 +#: src/usr/local/www/system_authservers.php:624 msgid "Search scope" msgstr "" -#: src/usr/local/www/system_authservers.php:544 +#: src/usr/local/www/system_authservers.php:610 msgid "Level" msgstr "" -#: src/usr/local/www/system_authservers.php:551 +#: src/usr/local/www/system_authservers.php:617 msgid "Base DN" msgstr "" -#: src/usr/local/www/system_authservers.php:562 +#: src/usr/local/www/system_authservers.php:628 msgid "Authentication containers" msgstr "" -#: src/usr/local/www/system_authservers.php:565 -msgid "Containers" -msgstr "" - -#: src/usr/local/www/system_authservers.php:568 +#: src/usr/local/www/system_authservers.php:634 msgid "" "Note: Semi-Colon separated. This will be prepended to the search base dn " -"above or you can specify full container path containing a dc= component.<br/" -">Example: CN=Users;DC=example,DC=com or OU=Staff;OU=Freelancers" +"above or the full container path can be specified containing a dc= component." +"<br/>Example: CN=Users;DC=example,DC=com or OU=Staff;OU=Freelancers" msgstr "" -#: src/usr/local/www/system_authservers.php:574 +#: src/usr/local/www/system_authservers.php:640 msgid "Select a container" msgstr "" -#: src/usr/local/www/system_authservers.php:581 +#: src/usr/local/www/system_authservers.php:649 msgid "Extended query" msgstr "" -#: src/usr/local/www/system_authservers.php:586 -#: src/usr/local/www/system_authservers.php:591 +#: src/usr/local/www/system_authservers.php:654 +#: src/usr/local/www/system_authservers.php:659 msgid "Query" msgstr "" -#: src/usr/local/www/system_authservers.php:594 +#: src/usr/local/www/system_authservers.php:662 msgid "Example: &(objectClass=inetOrgPerson)(mail=*@example.com)" msgstr "" -#: src/usr/local/www/system_authservers.php:600 +#: src/usr/local/www/system_authservers.php:668 msgid "Bind anonymous" msgstr "" -#: src/usr/local/www/system_authservers.php:605 +#: src/usr/local/www/system_authservers.php:673 msgid "Bind credentials" msgstr "" -#: src/usr/local/www/system_authservers.php:610 +#: src/usr/local/www/system_authservers.php:678 msgid "User DN:" msgstr "" -#: src/usr/local/www/system_authservers.php:632 +#: src/usr/local/www/system_authservers.php:700 msgid "Initial Template" msgstr "" -#: src/usr/local/www/system_authservers.php:640 +#: src/usr/local/www/system_authservers.php:708 msgid "User naming attribute" msgstr "" -#: src/usr/local/www/system_authservers.php:647 +#: src/usr/local/www/system_authservers.php:715 msgid "Group naming attribute" msgstr "" -#: src/usr/local/www/system_authservers.php:661 +#: src/usr/local/www/system_authservers.php:729 msgid "RFC 2307 Groups" msgstr "" -#: src/usr/local/www/system_authservers.php:664 +#: src/usr/local/www/system_authservers.php:732 msgid "" "RFC 2307 style group membership has members listed on the group object " "rather than using groups listed on user object. Leave unchecked for Active " "Directory style group membership (RFC 2307bis)." msgstr "" -#: src/usr/local/www/system_authservers.php:670 +#: src/usr/local/www/system_authservers.php:738 msgid "Group Object Class" msgstr "" -#: src/usr/local/www/system_authservers.php:674 +#: src/usr/local/www/system_authservers.php:742 msgid "" "Object class used for groups in RFC2307 mode. Typically \"posixGroup\" or " "\"group\"." msgstr "" -#: src/usr/local/www/system_authservers.php:679 +#: src/usr/local/www/system_authservers.php:747 msgid "UTF8 Encode" msgstr "" -#: src/usr/local/www/system_authservers.php:682 +#: src/usr/local/www/system_authservers.php:750 msgid "" "Required to support international characters, but may not be supported by " "every LDAP server." msgstr "" -#: src/usr/local/www/system_authservers.php:687 +#: src/usr/local/www/system_authservers.php:755 msgid "Username Alterations" msgstr "" -#: src/usr/local/www/system_authservers.php:690 +#: src/usr/local/www/system_authservers.php:758 msgid "e.g. user@host becomes user when unchecked." msgstr "" -#: src/usr/local/www/system_authservers.php:695 +#: src/usr/local/www/system_authservers.php:763 msgid "RADIUS Server Settings" msgstr "" -#: src/usr/local/www/system_authservers.php:714 +#: src/usr/local/www/system_authservers.php:782 msgid "Services offered" msgstr "" -#: src/usr/local/www/system_authservers.php:735 +#: src/usr/local/www/system_authservers.php:803 msgid "Authentication Timeout" msgstr "" -#: src/usr/local/www/system_authservers.php:738 +#: src/usr/local/www/system_authservers.php:806 msgid "" "This value controls how long, in seconds, that the RADIUS server may take to " "respond to an authentication request. If left blank, the default value is 5 " -"seconds. NOTE: If you are using an interactive two-factor authentication " -"system, increase this timeout to account for how long it will take the user " -"to receive and enter a token." +"seconds. NOTE: If using an interactive two-factor authentication system, " +"increase this timeout to account for how long it will take the user to " +"receive and enter a token." msgstr "" -#: src/usr/local/www/system_authservers.php:766 -msgid "Please fill the required values." +#: src/usr/local/www/system_authservers.php:825 +msgid "LDAP containers" msgstr "" -#: src/usr/local/www/system_authservers.php:773 -msgid "Please fill the bind username/password." +#: src/usr/local/www/system_authservers.php:842 +msgid "Please fill the required values." msgstr "" -#: src/usr/local/www/system_authservers.php:795 -msgid "Popup blocker detected.\tAction aborted." +#: src/usr/local/www/system_authservers.php:849 +msgid "Please fill the bind username/password." msgstr "" #: src/usr/local/www/system_camanager.php:68 @@ -26041,9 +26342,9 @@ msgid "Certificate Authority %s and its CRLs (if any) successfully deleted." msgstr "" #: src/usr/local/www/system_camanager.php:203 -#: src/usr/local/www/system_camanager.php:520 +#: src/usr/local/www/system_camanager.php:517 #: src/usr/local/www/system_certmanager.php:263 -#: src/usr/local/www/system_certmanager.php:679 +#: src/usr/local/www/system_certmanager.php:637 msgid "Certificate data" msgstr "" @@ -26060,10 +26361,10 @@ msgstr "" #: src/usr/local/www/system_camanager.php:233 #: src/usr/local/www/system_certmanager.php:277 #: src/usr/local/www/system_certmanager.php:294 -#: src/usr/local/www/system_certmanager.php:720 -#: src/usr/local/www/system_certmanager.php:850 +#: src/usr/local/www/system_certmanager.php:679 +#: src/usr/local/www/system_certmanager.php:813 #: src/usr/local/www/system_usermanager.php:193 -#: src/usr/local/www/system_usermanager.php:797 +#: src/usr/local/www/system_usermanager.php:802 msgid "Key length" msgstr "" @@ -26071,7 +26372,7 @@ msgstr "" #: src/usr/local/www/system_camanager.php:234 #: src/usr/local/www/system_certmanager.php:279 #: src/usr/local/www/system_usermanager.php:194 -#: src/usr/local/www/system_usermanager.php:809 +#: src/usr/local/www/system_usermanager.php:814 #: src/usr/local/www/vpn_ipsec_phase2.php:703 msgid "Lifetime" msgstr "" @@ -26119,7 +26420,7 @@ msgid "Distinguished name Common Name" msgstr "" #: src/usr/local/www/system_camanager.php:232 -#: src/usr/local/www/system_camanager.php:554 +#: src/usr/local/www/system_camanager.php:551 msgid "Signing Certificate Authority" msgstr "" @@ -26167,9 +26468,9 @@ msgstr "" #: src/usr/local/www/system_camanager.php:395 #: src/usr/local/www/system_certmanager.php:559 #: src/usr/local/www/system_certmanager.php:576 -#: src/usr/local/www/system_certmanager.php:1000 +#: src/usr/local/www/system_certmanager.php:968 #: src/usr/local/www/system_crlmanager.php:375 -#: src/usr/local/www/system_crlmanager.php:616 +#: src/usr/local/www/system_crlmanager.php:618 msgid "Certificates" msgstr "" @@ -26185,142 +26486,142 @@ msgid "Certificate Authorities" msgstr "" #: src/usr/local/www/system_camanager.php:393 -#: src/usr/local/www/system_crlmanager.php:615 +#: src/usr/local/www/system_crlmanager.php:617 msgid "Internal" msgstr "" #: src/usr/local/www/system_camanager.php:394 -#: src/usr/local/www/system_certmanager.php:1007 +#: src/usr/local/www/system_certmanager.php:975 msgid "Issuer" msgstr "" #: src/usr/local/www/system_camanager.php:396 -#: src/usr/local/www/system_certmanager.php:1008 +#: src/usr/local/www/system_certmanager.php:976 msgid "Distinguished Name" msgstr "" #: src/usr/local/www/system_camanager.php:408 -#: src/usr/local/www/system_certmanager.php:1032 +#: src/usr/local/www/system_certmanager.php:1000 msgid "self-signed" msgstr "" #: src/usr/local/www/system_camanager.php:410 -#: src/usr/local/www/system_certmanager.php:1034 +#: src/usr/local/www/system_certmanager.php:1002 msgid "external" msgstr "" -#: src/usr/local/www/system_camanager.php:445 -#: src/usr/local/www/system_certmanager.php:1066 +#: src/usr/local/www/system_camanager.php:442 +#: src/usr/local/www/system_certmanager.php:1034 msgid "Valid From" msgstr "" -#: src/usr/local/www/system_camanager.php:445 -#: src/usr/local/www/system_certmanager.php:1066 +#: src/usr/local/www/system_camanager.php:442 +#: src/usr/local/www/system_certmanager.php:1034 msgid "Valid Until" msgstr "" -#: src/usr/local/www/system_camanager.php:449 +#: src/usr/local/www/system_camanager.php:446 msgid "Edit CA" msgstr "" -#: src/usr/local/www/system_camanager.php:450 +#: src/usr/local/www/system_camanager.php:447 msgid "Export CA" msgstr "" -#: src/usr/local/www/system_camanager.php:452 +#: src/usr/local/www/system_camanager.php:449 msgid "Export key" msgstr "" -#: src/usr/local/www/system_camanager.php:454 +#: src/usr/local/www/system_camanager.php:451 msgid "Delete CA" msgstr "" -#: src/usr/local/www/system_camanager.php:495 +#: src/usr/local/www/system_camanager.php:492 msgid "Create / Edit CA" msgstr "" -#: src/usr/local/www/system_camanager.php:507 -#: src/usr/local/www/system_certmanager.php:660 +#: src/usr/local/www/system_camanager.php:504 +#: src/usr/local/www/system_certmanager.php:618 #: src/usr/local/www/system_crlmanager.php:387 msgid "Method" msgstr "" -#: src/usr/local/www/system_camanager.php:515 +#: src/usr/local/www/system_camanager.php:512 msgid "Existing Certificate Authority" msgstr "" -#: src/usr/local/www/system_camanager.php:522 -#: src/usr/local/www/system_certmanager.php:681 +#: src/usr/local/www/system_camanager.php:519 +#: src/usr/local/www/system_certmanager.php:639 msgid "Paste a certificate in X.509 PEM format here." msgstr "" -#: src/usr/local/www/system_camanager.php:526 +#: src/usr/local/www/system_camanager.php:523 msgid "Certificate Private Key (optional)" msgstr "" -#: src/usr/local/www/system_camanager.php:528 +#: src/usr/local/www/system_camanager.php:525 msgid "" "Paste the private key for the above certificate here. This is optional in " -"most cases, but required if you need to generate a Certificate Revocation " -"List (CRL)." +"most cases, but is required when generating a Certificate Revocation List " +"(CRL)." msgstr "" -#: src/usr/local/www/system_camanager.php:534 +#: src/usr/local/www/system_camanager.php:531 msgid "Serial for next certificate" msgstr "" -#: src/usr/local/www/system_camanager.php:537 +#: src/usr/local/www/system_camanager.php:534 msgid "" "Enter a decimal number to be used as the serial number for the next " "certificate to be created using this CA." msgstr "" -#: src/usr/local/www/system_camanager.php:542 +#: src/usr/local/www/system_camanager.php:539 msgid "Internal Certificate Authority" msgstr "" -#: src/usr/local/www/system_camanager.php:566 +#: src/usr/local/www/system_camanager.php:563 msgid "Key length (bits)" msgstr "" -#: src/usr/local/www/system_camanager.php:573 -#: src/usr/local/www/system_certmanager.php:727 -#: src/usr/local/www/system_certmanager.php:857 +#: src/usr/local/www/system_camanager.php:570 +#: src/usr/local/www/system_certmanager.php:686 +#: src/usr/local/www/system_certmanager.php:820 msgid "Digest Algorithm" msgstr "" -#: src/usr/local/www/system_camanager.php:576 -#: src/usr/local/www/system_certmanager.php:730 +#: src/usr/local/www/system_camanager.php:573 +#: src/usr/local/www/system_certmanager.php:689 msgid "" "NOTE: It is recommended to use an algorithm stronger than SHA1 when possible." msgstr "" -#: src/usr/local/www/system_camanager.php:581 -#: src/usr/local/www/system_certmanager.php:743 +#: src/usr/local/www/system_camanager.php:578 +#: src/usr/local/www/system_certmanager.php:702 msgid "Lifetime (days)" msgstr "" -#: src/usr/local/www/system_camanager.php:588 -#: src/usr/local/www/system_certmanager.php:750 -#: src/usr/local/www/system_certmanager.php:865 +#: src/usr/local/www/system_camanager.php:585 +#: src/usr/local/www/system_certmanager.php:709 +#: src/usr/local/www/system_certmanager.php:828 msgid "Country Code" msgstr "" -#: src/usr/local/www/system_camanager.php:595 -#: src/usr/local/www/system_certmanager.php:757 -#: src/usr/local/www/system_certmanager.php:872 +#: src/usr/local/www/system_camanager.php:592 +#: src/usr/local/www/system_certmanager.php:716 +#: src/usr/local/www/system_certmanager.php:835 msgid "State or Province" msgstr "" -#: src/usr/local/www/system_camanager.php:603 -#: src/usr/local/www/system_certmanager.php:765 -#: src/usr/local/www/system_certmanager.php:880 +#: src/usr/local/www/system_camanager.php:600 +#: src/usr/local/www/system_certmanager.php:724 +#: src/usr/local/www/system_certmanager.php:843 msgid "City" msgstr "" -#: src/usr/local/www/system_camanager.php:611 -#: src/usr/local/www/system_certmanager.php:773 -#: src/usr/local/www/system_certmanager.php:888 +#: src/usr/local/www/system_camanager.php:608 +#: src/usr/local/www/system_certmanager.php:732 +#: src/usr/local/www/system_certmanager.php:851 msgid "Organization" msgstr "" @@ -26350,15 +26651,15 @@ msgid "Key data" msgstr "" #: src/usr/local/www/system_certmanager.php:276 -#: src/usr/local/www/system_certmanager.php:695 -#: src/usr/local/www/system_certmanager.php:712 +#: src/usr/local/www/system_certmanager.php:653 +#: src/usr/local/www/system_certmanager.php:671 #: src/usr/local/www/system_usermanager.php:192 -#: src/usr/local/www/system_usermanager.php:790 +#: src/usr/local/www/system_usermanager.php:795 msgid "Certificate authority" msgstr "" #: src/usr/local/www/system_certmanager.php:278 -#: src/usr/local/www/system_certmanager.php:735 +#: src/usr/local/www/system_certmanager.php:694 msgid "Certificate Type" msgstr "" @@ -26375,149 +26676,146 @@ msgstr "" msgid "The certificate modulus does not match the signing request modulus." msgstr "" -#: src/usr/local/www/system_certmanager.php:597 -msgid "Complete Signing Request" -msgstr "" - -#: src/usr/local/www/system_certmanager.php:617 -#: src/usr/local/www/system_certmanager.php:966 -msgid "Signing request data" -msgstr "" - -#: src/usr/local/www/system_certmanager.php:619 -#: src/usr/local/www/system_certmanager.php:970 -msgid "" -"Copy the certificate signing data from here and forward it to your " -"certificate authority for signing." -msgstr "" - -#: src/usr/local/www/system_certmanager.php:624 -#: src/usr/local/www/system_certmanager.php:974 -msgid "Final certificate data" -msgstr "" - -#: src/usr/local/www/system_certmanager.php:626 -#: src/usr/local/www/system_certmanager.php:977 -msgid "Paste the certificate received from your certificate authority here." -msgstr "" - -#: src/usr/local/www/system_certmanager.php:655 +#: src/usr/local/www/system_certmanager.php:613 msgid "Add a New Certificate" msgstr "" -#: src/usr/local/www/system_certmanager.php:674 +#: src/usr/local/www/system_certmanager.php:632 msgid "Import Certificate" msgstr "" -#: src/usr/local/www/system_certmanager.php:685 +#: src/usr/local/www/system_certmanager.php:643 msgid "Private key data" msgstr "" -#: src/usr/local/www/system_certmanager.php:687 +#: src/usr/local/www/system_certmanager.php:645 msgid "Paste a private key in X.509 PEM format here." msgstr "" -#: src/usr/local/www/system_certmanager.php:690 +#: src/usr/local/www/system_certmanager.php:648 msgid "Internal Certificate" msgstr "" -#: src/usr/local/www/system_certmanager.php:696 -msgid "No internal Certificate Authorities have been defined. You must " +#: src/usr/local/www/system_certmanager.php:654 +msgid "No internal Certificate Authorities have been defined. " msgstr "" -#: src/usr/local/www/system_certmanager.php:697 -msgid " create" +#: src/usr/local/www/system_certmanager.php:655 +msgid "" +"An internal CA must be defined in order to create an internal certificate. " +msgstr "" + +#: src/usr/local/www/system_certmanager.php:656 +msgid "Create" msgstr "" -#: src/usr/local/www/system_certmanager.php:698 -msgid " an internal CA before creating an internal certificate." +#: src/usr/local/www/system_certmanager.php:657 +msgid " an internal CA." msgstr "" -#: src/usr/local/www/system_certmanager.php:738 +#: src/usr/local/www/system_certmanager.php:697 msgid "" "Type of certificate to generate. Used for placing restrictions on the usage " "of the generated certificate." msgstr "" -#: src/usr/local/www/system_certmanager.php:806 +#: src/usr/local/www/system_certmanager.php:765 msgid "Alternative Names" msgstr "" -#: src/usr/local/www/system_certmanager.php:813 +#: src/usr/local/www/system_certmanager.php:772 msgid "FQDN or Hostname" msgstr "" -#: src/usr/local/www/system_certmanager.php:815 +#: src/usr/local/www/system_certmanager.php:774 msgid "URI" msgstr "" -#: src/usr/local/www/system_certmanager.php:816 +#: src/usr/local/www/system_certmanager.php:775 msgid "email address" msgstr "" -#: src/usr/local/www/system_certmanager.php:845 +#: src/usr/local/www/system_certmanager.php:808 msgid "External Signing Request" msgstr "" -#: src/usr/local/www/system_certmanager.php:860 +#: src/usr/local/www/system_certmanager.php:823 msgid "" "NOTE: It is recommended to use an algorithm stronger than SHA1 when possible" msgstr "" -#: src/usr/local/www/system_certmanager.php:911 +#: src/usr/local/www/system_certmanager.php:874 msgid "Choose an Existing Certificate" msgstr "" -#: src/usr/local/www/system_certmanager.php:941 +#: src/usr/local/www/system_certmanager.php:903 msgid "Existing Certificates" msgstr "" -#: src/usr/local/www/system_certmanager.php:955 +#: src/usr/local/www/system_certmanager.php:915 msgid "Complete Signing Request for " msgstr "" -#: src/usr/local/www/system_certmanager.php:1042 +#: src/usr/local/www/system_certmanager.php:926 +msgid "Signing request data" +msgstr "" + +#: src/usr/local/www/system_certmanager.php:930 +msgid "" +"Copy the certificate signing data from here and forward it to a certificate " +"authority for signing." +msgstr "" + +#: src/usr/local/www/system_certmanager.php:934 +msgid "Final certificate data" +msgstr "" + +#: src/usr/local/www/system_certmanager.php:937 +msgid "Paste the certificate received from the certificate authority here." +msgstr "" + +#: src/usr/local/www/system_certmanager.php:1010 msgid "external - signature pending" msgstr "" -#: src/usr/local/www/system_certmanager.php:1078 +#: src/usr/local/www/system_certmanager.php:1046 msgid "User Cert" msgstr "" -#: src/usr/local/www/system_certmanager.php:1081 +#: src/usr/local/www/system_certmanager.php:1049 msgid "OpenVPN Server" msgstr "" -#: src/usr/local/www/system_certmanager.php:1084 +#: src/usr/local/www/system_certmanager.php:1052 msgid "OpenVPN Client" msgstr "" -#: src/usr/local/www/system_certmanager.php:1087 +#: src/usr/local/www/system_certmanager.php:1055 msgid "IPsec Tunnel" msgstr "" -#: src/usr/local/www/system_certmanager.php:1114 +#: src/usr/local/www/system_certmanager.php:1082 msgid "Export Certificate" msgstr "" -#: src/usr/local/www/system_certmanager.php:1115 -#: src/usr/local/www/system_certmanager.php:1120 +#: src/usr/local/www/system_certmanager.php:1083 +#: src/usr/local/www/system_certmanager.php:1088 msgid "Export Key" msgstr "" -#: src/usr/local/www/system_certmanager.php:1116 +#: src/usr/local/www/system_certmanager.php:1084 msgid "Export P12" msgstr "" -#: src/usr/local/www/system_certmanager.php:1118 +#: src/usr/local/www/system_certmanager.php:1086 msgid "Update CSR" msgstr "" -#: src/usr/local/www/system_certmanager.php:1119 +#: src/usr/local/www/system_certmanager.php:1087 msgid "Export Request" msgstr "" -#: src/usr/local/www/system_certmanager.php:1123 +#: src/usr/local/www/system_certmanager.php:1091 msgid "Delete Certificate" msgstr "" @@ -26631,12 +26929,8 @@ msgstr "" msgid "Revoked At" msgstr "" -#: src/usr/local/www/system_crlmanager.php:529 -msgid "Do you really want to delete this Certificate from the CRL?" -msgstr "" - #: src/usr/local/www/system_crlmanager.php:530 -msgid "Delete this certificate from the CRL " +msgid "Delete this certificate from the CRL" msgstr "" #: src/usr/local/www/system_crlmanager.php:554 @@ -26648,7 +26942,7 @@ msgid "Choose a Certificate to Revoke" msgstr "" #: src/usr/local/www/system_crlmanager.php:564 -#: src/usr/local/www/system_usermanager.php:733 +#: src/usr/local/www/system_usermanager.php:738 #: src/usr/local/www/vpn_ipsec_phase1.php:253 #: src/usr/local/www/vpn_openvpn_server.php:426 msgid "Certificate" @@ -26658,25 +26952,25 @@ msgstr "" msgid "Reason" msgstr "" -#: src/usr/local/www/system_crlmanager.php:609 +#: src/usr/local/www/system_crlmanager.php:611 msgid "Additional Certificate Revocation Lists" msgstr "" -#: src/usr/local/www/system_crlmanager.php:648 -#: src/usr/local/www/system_crlmanager.php:654 +#: src/usr/local/www/system_crlmanager.php:651 +#: src/usr/local/www/system_crlmanager.php:658 msgid "Add or Import CRL" msgstr "" -#: src/usr/local/www/system_crlmanager.php:675 +#: src/usr/local/www/system_crlmanager.php:678 msgid "Export CRL" msgstr "" -#: src/usr/local/www/system_crlmanager.php:680 -#: src/usr/local/www/system_crlmanager.php:686 +#: src/usr/local/www/system_crlmanager.php:681 +#: src/usr/local/www/system_crlmanager.php:685 msgid "Edit CRL" msgstr "" -#: src/usr/local/www/system_crlmanager.php:692 +#: src/usr/local/www/system_crlmanager.php:689 msgid "Delete CRL" msgstr "" @@ -26685,12 +26979,12 @@ msgstr "" msgid "removed gateway group %s" msgstr "" -#: src/usr/local/www/system_gateway_groups.php:134 +#: src/usr/local/www/system_gateway_groups.php:148 #: src/usr/local/www/system_gateways.php:258 msgid "The gateway configuration has been changed." msgstr "" -#: src/usr/local/www/system_gateway_groups.php:139 +#: src/usr/local/www/system_gateway_groups.php:153 #: src/usr/local/www/system_gateways.php:263 #: src/usr/local/www/system_routes.php:77 #: src/usr/local/www/system_routes.php:246 @@ -26700,19 +26994,19 @@ msgstr "" msgid "Static Routes" msgstr "" -#: src/usr/local/www/system_gateway_groups.php:186 +#: src/usr/local/www/system_gateway_groups.php:204 msgid "Edit gateway group" msgstr "" -#: src/usr/local/www/system_gateway_groups.php:187 +#: src/usr/local/www/system_gateway_groups.php:205 msgid "Copy gateway group" msgstr "" -#: src/usr/local/www/system_gateway_groups.php:188 +#: src/usr/local/www/system_gateway_groups.php:206 msgid "Delete gateway group" msgstr "" -#: src/usr/local/www/system_gateway_groups.php:209 +#: src/usr/local/www/system_gateway_groups.php:227 msgid "" "Remember to use these Gateway Groups in firewall rules in order to enable " "load balancing, failover, or policy-based routing.<br />Without rules " @@ -26724,12 +27018,12 @@ msgid "Member Down" msgstr "" #: src/usr/local/www/system_gateway_groups_edit.php:77 -#: src/usr/local/www/system_gateway_groups_edit.php:334 +#: src/usr/local/www/system_gateway_groups_edit.php:363 msgid "Packet Loss" msgstr "" #: src/usr/local/www/system_gateway_groups_edit.php:78 -#: src/usr/local/www/system_gateway_groups_edit.php:335 +#: src/usr/local/www/system_gateway_groups_edit.php:364 msgid "High Latency" msgstr "" @@ -26737,66 +27031,65 @@ msgstr "" msgid "Packet Loss or High Latency" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:114 +#: src/usr/local/www/system_gateway_groups_edit.php:115 msgid "A valid gateway group name must be specified." msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:117 -#: src/usr/local/www/system_gateways_edit.php:150 -msgid "The gateway name must not contain invalid characters." +#: src/usr/local/www/system_gateway_groups_edit.php:118 +msgid "gateway group" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:126 +#: src/usr/local/www/system_gateway_groups_edit.php:127 msgid "Changing name on a gateway group is not allowed." msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:132 +#: src/usr/local/www/system_gateway_groups_edit.php:133 #, php-format msgid "A gateway group with this name \"%s\" already exists." msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:149 +#: src/usr/local/www/system_gateway_groups_edit.php:150 #, php-format msgid "" "A gateway group cannot have the same name as a gateway \"%s\" please choose " "another name." msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:154 +#: src/usr/local/www/system_gateway_groups_edit.php:155 msgid "No gateway(s) have been selected to be used in this group" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:223 +#: src/usr/local/www/system_gateway_groups_edit.php:238 msgid "Edit Gateway Group Entry" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:235 +#: src/usr/local/www/system_gateway_groups_edit.php:250 msgid "Gateway Priority" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:275 -#: src/usr/local/www/system_gateway_groups_edit.php:278 -#: src/usr/local/www/system_gateway_groups_edit.php:311 +#: src/usr/local/www/system_gateway_groups_edit.php:304 +#: src/usr/local/www/system_gateway_groups_edit.php:307 +#: src/usr/local/www/system_gateway_groups_edit.php:340 msgid "Tier" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:317 +#: src/usr/local/www/system_gateway_groups_edit.php:346 msgid "Link Priority" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:333 +#: src/usr/local/www/system_gateway_groups_edit.php:362 msgid "Member down" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:336 +#: src/usr/local/www/system_gateway_groups_edit.php:365 msgid "Packet Loss or High latency" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:330 +#: src/usr/local/www/system_gateway_groups_edit.php:359 msgid "Trigger Level" msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:338 +#: src/usr/local/www/system_gateway_groups_edit.php:367 msgid "When to trigger exclusion of a member" msgstr "" @@ -26837,7 +27130,7 @@ msgstr "" #: src/usr/local/www/system_gateways.php:279 #: src/usr/local/www/system_gateways_edit.php:672 -#: src/usr/local/www/widgets/widgets/gateways.widget.php:134 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:139 msgid "Monitor IP" msgstr "" @@ -26865,6 +27158,10 @@ msgstr "" msgid "Delete gateway" msgstr "" +#: src/usr/local/www/system_gateways_edit.php:150 +msgid "gateway" +msgstr "" + #: src/usr/local/www/system_gateways_edit.php:179 msgid "A valid gateway IP address must be specified." msgstr "" @@ -26946,8 +27243,8 @@ msgstr "" #: src/usr/local/www/system_gateways_edit.php:305 #, php-format msgid "" -"The monitor IP address \"%s\" is already in use. You must choose a different " -"monitor IP." +"The monitor IP address \"%s\" is already in use. A different monitor IP must " +"be chosen." msgstr "" #: src/usr/local/www/system_gateways_edit.php:317 @@ -27077,7 +27374,7 @@ msgid "Default Gateway" msgstr "" #: src/usr/local/www/system_gateways_edit.php:670 -msgid "This will consider this gateway as always being up" +msgid "This will consider this gateway as always being up." msgstr "" #: src/usr/local/www/system_gateways_edit.php:683 @@ -27092,238 +27389,248 @@ msgid "Force state" msgstr "" #: src/usr/local/www/system_gateways_edit.php:694 -msgid "This will force this gateway to be considered Down" +msgid "This will force this gateway to be considered down." +msgstr "" + +#: src/usr/local/www/system_gateways_edit.php:701 +msgid "A description may be entered here for reference (not parsed)." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:744 +#: src/usr/local/www/system_gateways_edit.php:728 msgid "Weight for this gateway when used in a Gateway Group." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:748 +#: src/usr/local/www/system_gateways_edit.php:732 msgid "Data Payload" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:752 +#: src/usr/local/www/system_gateways_edit.php:736 msgid "Define data payload to send on ICMP packets to gateway monitor IP." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:754 +#: src/usr/local/www/system_gateways_edit.php:738 msgid "Latency thresholds" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:769 +#: src/usr/local/www/system_gateways_edit.php:753 #, php-format msgid "" "Low and high thresholds for latency in milliseconds.\n" "\tDefault is %d/%d." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:774 +#: src/usr/local/www/system_gateways_edit.php:758 msgid "Packet Loss thresholds" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:789 +#: src/usr/local/www/system_gateways_edit.php:773 #, php-format msgid "" "Low and high thresholds for packet loss in %%.\n" "\tDefault is %d/%d." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:795 +#: src/usr/local/www/system_gateways_edit.php:779 msgid "Probe Interval" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:802 +#: src/usr/local/www/system_gateways_edit.php:786 #, php-format msgid "How often an ICMP probe will be sent in milliseconds. Default is %d." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:806 +#: src/usr/local/www/system_gateways_edit.php:790 msgid "Loss Interval" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:810 +#: src/usr/local/www/system_gateways_edit.php:794 #, php-format msgid "" "Time interval in milliseconds before packets are treated as lost. Default is " "%d." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:813 +#: src/usr/local/www/system_gateways_edit.php:797 msgid "Time Period" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:823 +#: src/usr/local/www/system_gateways_edit.php:807 #, php-format msgid "" "Time period in milliseconds over which results are averaged. Default is %d." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:827 +#: src/usr/local/www/system_gateways_edit.php:811 msgid "Alert interval" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:837 +#: src/usr/local/www/system_gateways_edit.php:821 #, php-format msgid "" "Time interval in milliseconds between checking for an alert condition. " "Default is %d." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:842 +#: src/usr/local/www/system_gateways_edit.php:826 msgid "Additional information" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:844 +#: src/usr/local/www/system_gateways_edit.php:828 msgid "" "The time period, probe interval and loss interval are closely related. The " "ratio between these values control the accuracy of the numbers reported and " "the timeliness of alerts." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:848 +#: src/usr/local/www/system_gateways_edit.php:832 msgid "" -"A longer time period will will provide smoother results for round trip time " -"and loss, but will increase the time before a latency or loss alert is " -"triggered." +"A longer time period will provide smoother results for round trip time and " +"loss, but will increase the time before a latency or loss alert is triggered." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:851 +#: src/usr/local/www/system_gateways_edit.php:835 msgid "" "A shorter probe interval will decrease the time required before a latency or " "loss alert is triggered, but will use more network resource. Longer probe " "intervals will degrade the accuracy of the quality graphs." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:855 +#: src/usr/local/www/system_gateways_edit.php:839 msgid "" "The ratio of the probe interval to the time period (minus the loss interval) " "also controls the resolution of loss reporting. To determine the resolution, " "the following formula can be used:" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:859 -msgid "    100 * probe interval / (time period - loss interval)" +#: src/usr/local/www/system_gateways_edit.php:843 +msgid "" +" 100 * probe interval / (time period - loss interval)" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:861 +#: src/usr/local/www/system_gateways_edit.php:845 msgid "" "Rounding up to the nearest whole number will yield the resolution of loss " "reporting in percent. The default values provide a resolution of 1%." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:864 +#: src/usr/local/www/system_gateways_edit.php:848 msgid "" -"The default settings are recommended for most use cases. However if you " -"change the settings, please observe the following restrictions:" +"The default settings are recommended for most use cases. However if changing " +"the settings, please observe the following restrictions:" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:867 +#: src/usr/local/www/system_gateways_edit.php:851 msgid "" "- The time period must be greater than twice the probe interval plus the " "loss interval. This guarantees there is at least one completed probe at all " "times. " msgstr "" -#: src/usr/local/www/system_gateways_edit.php:870 +#: src/usr/local/www/system_gateways_edit.php:854 msgid "" "- The alert interval must be greater than or equal to the probe interval. " "There is no point checking for alerts more often than probes are done." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:873 +#: src/usr/local/www/system_gateways_edit.php:857 msgid "" "- The loss interval must be greater than or equal to the high latency " "threshold." msgstr "" -#: src/usr/local/www/system_gateways_edit.php:879 +#: src/usr/local/www/system_gateways_edit.php:863 msgid "Use non-local gateway" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:882 +#: src/usr/local/www/system_gateways_edit.php:866 msgid "" "This will allow use of a gateway outside of this interface's subnet. This is " "usually indicative of a configuration error, but is required for some " "scenarios." msgstr "" -#: src/usr/local/www/system_groupmanager.php:114 +#: src/usr/local/www/system_groupmanager.php:115 #, php-format msgid "Group %s successfully deleted." msgstr "" -#: src/usr/local/www/system_groupmanager.php:138 +#: src/usr/local/www/system_groupmanager.php:139 #, php-format msgid "Privilege %s successfully deleted." msgstr "" -#: src/usr/local/www/system_groupmanager.php:165 +#: src/usr/local/www/system_groupmanager.php:166 msgid "Selected groups removed successfully." msgstr "" -#: src/usr/local/www/system_groupmanager.php:181 -msgid "The group name contains invalid characters." +#: src/usr/local/www/system_groupmanager.php:183 +#: src/usr/local/www/system_groupmanager.php:187 +#, php-format +msgid "The (%s) group name contains invalid characters." msgstr "" -#: src/usr/local/www/system_groupmanager.php:185 +#: src/usr/local/www/system_groupmanager.php:193 msgid "The group name is longer than 16 characters." msgstr "" -#: src/usr/local/www/system_groupmanager.php:192 +#: src/usr/local/www/system_groupmanager.php:200 msgid "Another entry with the same group name already exists." msgstr "" -#: src/usr/local/www/system_groupmanager.php:258 -#: src/usr/local/www/system_usermanager.php:399 +#: src/usr/local/www/system_groupmanager.php:272 +#: src/usr/local/www/system_usermanager.php:400 msgid "Delete Privilege" msgstr "" -#: src/usr/local/www/system_groupmanager.php:304 -#: src/usr/local/www/system_groupmanager.php:392 +#: src/usr/local/www/system_groupmanager.php:320 +#: src/usr/local/www/system_groupmanager.php:401 msgid "Group name" msgstr "" -#: src/usr/local/www/system_groupmanager.php:306 +#: src/usr/local/www/system_groupmanager.php:322 msgid "Member Count" msgstr "" -#: src/usr/local/www/system_groupmanager.php:381 +#: src/usr/local/www/system_groupmanager.php:397 msgid "Group Properties" msgstr "" -#: src/usr/local/www/system_groupmanager.php:385 -#: src/usr/local/www/system_usermanager.php:607 -msgid "Defined by" +#: src/usr/local/www/system_groupmanager.php:411 +#: src/usr/local/www/system_groupmanager.php:418 +msgid "Scope" msgstr "" -#: src/usr/local/www/system_groupmanager.php:406 -msgid "Group description, for your own information only" +#: src/usr/local/www/system_groupmanager.php:429 +msgid "Group description, for administrative information only" msgstr "" -#: src/usr/local/www/system_groupmanager.php:412 -#: src/usr/local/www/system_usermanager.php:677 +#: src/usr/local/www/system_groupmanager.php:436 +#: src/usr/local/www/system_usermanager.php:678 msgid "Group membership" msgstr "" -#: src/usr/local/www/system_groupmanager.php:433 +#: src/usr/local/www/system_groupmanager.php:457 msgid "Not members" msgstr "" -#: src/usr/local/www/system_groupmanager.php:449 -msgid "Move to \"Members\" >" +#: src/usr/local/www/system_groupmanager.php:473 +msgid "Move to \"Members\"" msgstr "" -#: src/usr/local/www/system_groupmanager.php:454 -msgid "< Move to \"Not members" +#: src/usr/local/www/system_groupmanager.php:480 +msgid "Move to \"Not members" msgstr "" -#: src/usr/local/www/system_groupmanager.php:457 -#: src/usr/local/www/system_usermanager.php:726 -msgid "Hold down CTRL (pc)/COMMAND (mac) key to select multiple items" +#: src/usr/local/www/system_groupmanager.php:485 +#: src/usr/local/www/system_groupmanager_addprivs.php:195 +#: src/usr/local/www/system_groupmanager_addprivs.php:204 +#: src/usr/local/www/system_usermanager.php:731 +#: src/usr/local/www/system_usermanager_addprivs.php:189 +#: src/usr/local/www/system_usermanager_addprivs.php:198 +msgid "Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items." msgstr "" -#: src/usr/local/www/system_groupmanager.php:463 +#: src/usr/local/www/system_groupmanager.php:491 msgid "Assigned Privileges" msgstr "" @@ -27332,41 +27639,31 @@ msgstr "" msgid "Add Privileges" msgstr "" -#: src/usr/local/www/system_groupmanager_addprivs.php:100 +#: src/usr/local/www/system_groupmanager_addprivs.php:99 #: src/usr/local/www/system_usermanager_addprivs.php:104 msgid "Selected privileges" msgstr "" -#: src/usr/local/www/system_groupmanager_addprivs.php:187 +#: src/usr/local/www/system_groupmanager_addprivs.php:186 msgid "Add Privileges for " msgstr "" -#: src/usr/local/www/system_groupmanager_addprivs.php:191 +#: src/usr/local/www/system_groupmanager_addprivs.php:190 #: src/usr/local/www/system_usermanager_addprivs.php:184 msgid "Assigned privileges" msgstr "" -#: src/usr/local/www/system_groupmanager_addprivs.php:196 -msgid "Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items." -msgstr "" - -#: src/usr/local/www/system_groupmanager_addprivs.php:200 +#: src/usr/local/www/system_groupmanager_addprivs.php:199 #: src/usr/local/www/system_usermanager_addprivs.php:193 msgid "Shadow" msgstr "" -#: src/usr/local/www/system_groupmanager_addprivs.php:205 -#: src/usr/local/www/system_usermanager_addprivs.php:189 -#: src/usr/local/www/system_usermanager_addprivs.php:198 -msgid "Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items" -msgstr "" - -#: src/usr/local/www/system_groupmanager_addprivs.php:212 +#: src/usr/local/www/system_groupmanager_addprivs.php:211 #: src/usr/local/www/system_usermanager_addprivs.php:205 msgid "Show only the choices containing this term" msgstr "" -#: src/usr/local/www/system_groupmanager_addprivs.php:240 +#: src/usr/local/www/system_groupmanager_addprivs.php:239 #: src/usr/local/www/system_usermanager_addprivs.php:243 msgid "Select a privilege from the list above for a description" msgstr "" @@ -27411,9 +27708,9 @@ msgstr "" #: src/usr/local/www/system_hasync.php:172 msgid "" "If Synchronize States is enabled this interface will be used for " -"communication.<br />We recommend setting this to an interface other than " -"LAN! A dedicated interface works the best.<br />You must define an IP on " -"each machine participating in this failover group.<br />You must have an IP " +"communication.<br />It is recommended to set this to an interface other than " +"LAN! A dedicated interface works the best.<br />An IP must be defined on " +"each machine participating in this failover group.<br />An IP must be " "assigned to the interface on any participating sync nodes." msgstr "" @@ -27452,7 +27749,7 @@ msgstr "" #: src/usr/local/www/system_hasync.php:204 msgid "" "Enter the webConfigurator username of the system entered above for " -"synchronizing your configuration.<br />Do not use the Synchronize Config to " +"synchronizing the configuration.<br />Do not use the Synchronize Config to " "IP and username option on backup cluster members!" msgstr "" @@ -27463,7 +27760,7 @@ msgstr "" #: src/usr/local/www/system_hasync.php:212 msgid "" "Enter the webConfigurator password of the system entered above for " -"synchronizing your configuration.<br />Do not use the Synchronize Config to " +"synchronizing the configuration.<br />Do not use the Synchronize Config to " "IP and password option on backup cluster members!" msgstr "" @@ -27611,7 +27908,7 @@ msgstr "" #: src/usr/local/www/system_routes_edit.php:129 msgid "" -"The gateway is disabled but the route is not. You must disable the route in " +"The gateway is disabled but the route is not. The route must be disabled in " "order to choose a disabled gateway." msgstr "" @@ -27655,69 +27952,65 @@ msgid "" "list." msgstr "" -#: src/usr/local/www/system_update_settings.php:123 -msgid "Firmware Branch" +#: src/usr/local/www/system_update_settings.php:105 +msgid "Changes have been saved successfully" msgstr "" -#: src/usr/local/www/system_update_settings.php:129 -msgid "Stable" -msgstr "" - -#: src/usr/local/www/system_update_settings.php:129 -msgid "Development" +#: src/usr/local/www/system_update_settings.php:161 +msgid "Firmware Branch" msgstr "" -#: src/usr/local/www/system_update_settings.php:127 +#: src/usr/local/www/system_update_settings.php:165 msgid "Branch" msgstr "" -#: src/usr/local/www/system_update_settings.php:130 +#: src/usr/local/www/system_update_settings.php:168 msgid "" "Please select the stable, or the development branch from which to update the " "system firmware. <br />Use of the development version is at your own risk!" msgstr "" -#: src/usr/local/www/system_update_settings.php:135 +#: src/usr/local/www/system_update_settings.php:173 msgid "Updates" msgstr "" -#: src/usr/local/www/system_update_settings.php:146 +#: src/usr/local/www/system_update_settings.php:177 msgid "Dashboard check" msgstr "" -#: src/usr/local/www/system_update_settings.php:154 +#: src/usr/local/www/system_update_settings.php:185 msgid "GitSync" msgstr "" -#: src/usr/local/www/system_update_settings.php:158 +#: src/usr/local/www/system_update_settings.php:189 msgid "Auto sync on update" msgstr "" -#: src/usr/local/www/system_update_settings.php:161 -#: src/usr/local/www/system_update_settings.php:159 -msgid "After updating, sync with the following repository/branch before reboot" +#: src/usr/local/www/system_update_settings.php:192 +msgid "" +"After updating, sync with the following repository/branch before reboot." msgstr "" -#: src/usr/local/www/system_update_settings.php:173 +#: src/usr/local/www/system_update_settings.php:204 msgid "Repository URL" msgstr "" -#: src/usr/local/www/system_update_settings.php:176 +#: src/usr/local/www/system_update_settings.php:207 #, php-format msgid "" "The most recently used repository was %s. This repository will be used if " "the field is left blank." msgstr "" -#: src/usr/local/www/system_update_settings.php:194 +#: src/usr/local/www/system_update_settings.php:225 msgid "Branch name" msgstr "" -#: src/usr/local/www/system_update_settings.php:197 +#: src/usr/local/www/system_update_settings.php:228 #, php-format msgid "" "The most recently used branch was \"%s\". (Usually the branch name is " -"master)<br />Note: Sync will not be performed if a branch is not specified" +"master)<br />Note: Sync will not be performed if a branch is not specified." msgstr "" #: src/usr/local/www/system_usermanager.php:119 @@ -27774,35 +28067,35 @@ msgstr "" msgid "Inherited from" msgstr "" -#: src/usr/local/www/system_usermanager.php:429 +#: src/usr/local/www/system_usermanager.php:430 msgid "CA" msgstr "" -#: src/usr/local/www/system_usermanager.php:448 +#: src/usr/local/www/system_usermanager.php:449 msgid "Remove this certificate association? (Certificate will not be deleted)" msgstr "" -#: src/usr/local/www/system_usermanager.php:501 -#: src/usr/local/www/system_usermanager.php:659 +#: src/usr/local/www/system_usermanager.php:502 +#: src/usr/local/www/system_usermanager.php:660 msgid "Full name" msgstr "" -#: src/usr/local/www/system_usermanager.php:530 +#: src/usr/local/www/system_usermanager.php:531 #: src/usr/local/www/vpn_ipsec_keys.php:164 #: src/usr/local/www/vpn_l2tp_users.php:145 msgid "Edit user" msgstr "" -#: src/usr/local/www/system_usermanager.php:532 +#: src/usr/local/www/system_usermanager.php:533 #: src/usr/local/www/vpn_l2tp_users.php:146 msgid "Delete user" msgstr "" -#: src/usr/local/www/system_usermanager.php:548 +#: src/usr/local/www/system_usermanager.php:549 msgid "Delete selected users" msgstr "" -#: src/usr/local/www/system_usermanager.php:556 +#: src/usr/local/www/system_usermanager.php:557 msgid "" "Additional users can be added here. User permissions for accessing the " "webConfigurator can be assigned directly or inherited from group " @@ -27810,79 +28103,83 @@ msgid "" "be deleted." msgstr "" -#: src/usr/local/www/system_usermanager.php:559 +#: src/usr/local/www/system_usermanager.php:560 msgid "" "Accounts added here are also used for other parts of the system such as " "OpenVPN, IPsec, and Captive Portal." msgstr "" -#: src/usr/local/www/system_usermanager.php:604 +#: src/usr/local/www/system_usermanager.php:605 msgid "User Properties" msgstr "" -#: src/usr/local/www/system_usermanager.php:651 +#: src/usr/local/www/system_usermanager.php:608 +msgid "Defined by" +msgstr "" + +#: src/usr/local/www/system_usermanager.php:652 msgid "Confirm Password" msgstr "" -#: src/usr/local/www/system_usermanager.php:662 -msgid "User's full name, for your own information only" +#: src/usr/local/www/system_usermanager.php:663 +msgid "User's full name, for administrative information only" msgstr "" -#: src/usr/local/www/system_usermanager.php:670 +#: src/usr/local/www/system_usermanager.php:671 msgid "Expiration date" msgstr "" -#: src/usr/local/www/system_usermanager.php:673 +#: src/usr/local/www/system_usermanager.php:674 msgid "" "Leave blank if the account shouldn't expire, otherwise enter the expiration " "date" msgstr "" -#: src/usr/local/www/system_usermanager.php:702 +#: src/usr/local/www/system_usermanager.php:703 msgid "Not member of" msgstr "" -#: src/usr/local/www/system_usermanager.php:710 +#: src/usr/local/www/system_usermanager.php:711 msgid "Member of" msgstr "" -#: src/usr/local/www/system_usermanager.php:718 -msgid "Move to \"Member of\" list >" +#: src/usr/local/www/system_usermanager.php:719 +msgid "Move to \"Member of\" list" msgstr "" -#: src/usr/local/www/system_usermanager.php:723 -msgid "< Move to \"Not member of\" list" +#: src/usr/local/www/system_usermanager.php:726 +msgid "Move to \"Not member of\" list" msgstr "" -#: src/usr/local/www/system_usermanager.php:746 +#: src/usr/local/www/system_usermanager.php:751 msgid "Effective Privileges" msgstr "" -#: src/usr/local/www/system_usermanager.php:756 +#: src/usr/local/www/system_usermanager.php:761 msgid "User Certificates" msgstr "" -#: src/usr/local/www/system_usermanager.php:768 +#: src/usr/local/www/system_usermanager.php:773 msgid "Create Certificate for User" msgstr "" -#: src/usr/local/www/system_usermanager.php:820 +#: src/usr/local/www/system_usermanager.php:825 msgid "Keys" msgstr "" -#: src/usr/local/www/system_usermanager.php:824 +#: src/usr/local/www/system_usermanager.php:829 msgid "Authorized keys" msgstr "" -#: src/usr/local/www/system_usermanager.php:831 +#: src/usr/local/www/system_usermanager.php:836 msgid "Authorized SSH Keys" msgstr "" -#: src/usr/local/www/system_usermanager.php:833 +#: src/usr/local/www/system_usermanager.php:838 msgid "Enter authorized SSH keys for this user" msgstr "" -#: src/usr/local/www/system_usermanager.php:837 +#: src/usr/local/www/system_usermanager.php:842 msgid "IPsec Pre-Shared Key" msgstr "" @@ -27899,7 +28196,7 @@ msgid "Password successfully changed." msgstr "" #: src/usr/local/www/system_usermanager_passwordmg.php:124 -msgid "Sorry, you cannot change the password for a non-local user." +msgid "The password cannot be changed for a non-local user." msgstr "" #: src/usr/local/www/system_usermanager_passwordmg.php:131 @@ -27914,94 +28211,76 @@ msgstr "" msgid "Select a new password" msgstr "" -#: src/usr/local/www/system_usermanager_settings.php:86 -msgid "Session timeout must be an integer value." -msgstr "" - -#: src/usr/local/www/system_usermanager_settings.php:91 -msgid "" -"Settings have been saved, but the test was not performed because it is not " -"supported for local databases." -msgstr "" - -#: src/usr/local/www/system_usermanager_settings.php:101 -msgid "" -"Settings have been saved, but the test was not performed because it is " -"supported only for LDAP based backends." -msgstr "" - -#: src/usr/local/www/system_usermanager_settings.php:137 -msgid "Popup blocker detected. Action aborted." -msgstr "" - -#: src/usr/local/www/system_usermanager_settings.php:164 -msgid "" -"Time in minutes to expire idle management sessions. The default is 4 hours " -"(240 minutes).Enter 0 to never expire sessions. NOTE: This is a security " -"risk!" +#: src/usr/local/www/system_usermanager_settings.php:77 +#, php-format +msgid "%sError: Could not find settings for %s%s" msgstr "" -#: src/usr/local/www/system_usermanager_settings.php:182 -msgid "Save & Test" +#: src/usr/local/www/system_usermanager_settings.php:84 +#, php-format +msgid "Attempting connection to %s%s%s" msgstr "" -#: src/usr/local/www/system_usermanager_settings_ldapacpicker.php:131 -msgid "" -"Could not connect to the LDAP server. Please check your LDAP configuration." +#: src/usr/local/www/system_usermanager_settings.php:86 +#: src/usr/local/www/system_usermanager_settings.php:90 +#: src/usr/local/www/system_usermanager_settings.php:96 +#: src/usr/local/www/uploadconfig.php:82 +msgid "OK" msgstr "" -#: src/usr/local/www/system_usermanager_settings_ldapacpicker.php:134 -msgid "Please select which containers to Authenticate against:" +#: src/usr/local/www/system_usermanager_settings.php:88 +#, php-format +msgid "Attempting bind to %s%s%s" msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:77 -msgid "Test Authentication server" +#: src/usr/local/www/system_usermanager_settings.php:92 +#, php-format +msgid "Attempting to fetch Organizational Units from %s%s%s" msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:87 -#, php-format -msgid "Could not find settings for %s%s" +#: src/usr/local/www/system_usermanager_settings.php:100 +msgid "Organization units found" msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:89 -#, php-format -msgid "Testing %s LDAP settings... One moment please..." +#: src/usr/local/www/system_usermanager_settings.php:110 +#: src/usr/local/www/system_usermanager_settings.php:116 +#: src/usr/local/www/system_usermanager_settings.php:120 +msgid "failed" msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:93 -#, php-format -msgid "Attempting connection to %s%s%s" +#: src/usr/local/www/system_usermanager_settings.php:151 +msgid "Session timeout must be an integer value." msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:95 -#: src/usr/local/www/system_usermanager_settings_test.php:99 -#: src/usr/local/www/system_usermanager_settings_test.php:104 -#: src/usr/local/www/uploadconfig.php:82 -msgid "OK" +#: src/usr/local/www/system_usermanager_settings.php:156 +msgid "" +"Settings have been saved, but the test was not performed because it is not " +"supported for local databases." msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:97 -#, php-format -msgid "Attempting bind to %s%s%s" +#: src/usr/local/www/system_usermanager_settings.php:166 +msgid "" +"Settings have been saved, but the test was not performed because it is " +"supported only for LDAP based backends." msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:101 -#, php-format -msgid "Attempting to fetch Organizational Units from %s%s%s" +#: src/usr/local/www/system_usermanager_settings.php:220 +msgid "" +"Time in minutes to expire idle management sessions. The default is 4 hours " +"(240 minutes). Enter 0 to never expire sessions. NOTE: This is a security " +"risk!" msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:108 -msgid "Organization units found" +#: src/usr/local/www/system_usermanager_settings.php:238 +msgid "Save & Test" msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:115 -#: src/usr/local/www/system_usermanager_settings_test.php:121 -#: src/usr/local/www/system_usermanager_settings_test.php:125 -msgid "failed" +#: src/usr/local/www/system_usermanager_settings.php:245 +msgid "LDAP settings" msgstr "" -#: src/usr/local/www/system_usermanager_settings_test.php:133 -msgid "Return" +#: src/usr/local/www/system_usermanager_settings.php:248 +msgid "Test results" msgstr "" #: src/usr/local/www/uploadconfig.php:76 @@ -28019,8 +28298,8 @@ msgstr "" #: src/usr/local/www/vpn_ipsec.php:252 src/usr/local/www/vpn_ipsec.php:258 #: src/usr/local/www/vpn_ipsec_keys.php:119 #: src/usr/local/www/vpn_ipsec_mobile.php:456 -#: src/usr/local/www/vpn_ipsec_phase1.php:667 -#: src/usr/local/www/vpn_ipsec_phase1.php:680 +#: src/usr/local/www/vpn_ipsec_phase1.php:666 +#: src/usr/local/www/vpn_ipsec_phase1.php:678 #: src/usr/local/www/vpn_ipsec_phase2.php:444 #: src/usr/local/www/vpn_ipsec_phase2.php:523 #: src/usr/local/www/vpn_ipsec_settings.php:266 @@ -28032,7 +28311,7 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_mobile.php:339 #: src/usr/local/www/vpn_ipsec_mobile.php:457 #: src/usr/local/www/vpn_ipsec_phase1.php:664 -#: src/usr/local/www/vpn_ipsec_phase1.php:681 +#: src/usr/local/www/vpn_ipsec_phase1.php:679 #: src/usr/local/www/vpn_ipsec_phase2.php:441 #: src/usr/local/www/vpn_ipsec_phase2.php:524 #: src/usr/local/www/vpn_ipsec_settings.php:267 @@ -28044,7 +28323,7 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_keys.php:127 #: src/usr/local/www/vpn_ipsec_keys_edit.php:155 #: src/usr/local/www/vpn_ipsec_mobile.php:458 -#: src/usr/local/www/vpn_ipsec_phase1.php:682 +#: src/usr/local/www/vpn_ipsec_phase1.php:680 #: src/usr/local/www/vpn_ipsec_phase2.php:525 #: src/usr/local/www/vpn_ipsec_settings.php:268 msgid "Pre-Shared Keys" @@ -28064,7 +28343,7 @@ msgid "IKE" msgstr "" #: src/usr/local/www/vpn_ipsec.php:283 -#: src/usr/local/www/vpn_ipsec_phase1.php:721 +#: src/usr/local/www/vpn_ipsec_phase1.php:719 msgid "Remote Gateway" msgstr "" @@ -28107,7 +28386,7 @@ msgstr "" #: src/usr/local/www/vpn_ipsec.php:418 #, php-format -msgid "Show %s Phase-2 entries" +msgid "Show Phase 2 Entries (%s)" msgstr "" #: src/usr/local/www/vpn_ipsec.php:427 @@ -28172,7 +28451,7 @@ msgstr "" #: src/usr/local/www/vpn_ipsec.php:560 #, php-format -msgid "You can check your IPsec status at %s%s%s." +msgid "The IPsec status can be checked at %s%s%s." msgstr "" #: src/usr/local/www/vpn_ipsec.php:560 @@ -28193,12 +28472,12 @@ msgstr "" msgid "IPsec can be set to prefer older SAs at %s%s%s." msgstr "" -#: src/usr/local/www/vpn_ipsec.php:580 -msgid "Are you sure you wish to delete this P1 entry?" +#: src/usr/local/www/vpn_ipsec.php:587 +msgid "Confirmation required to delete this P1 entry." msgstr "" -#: src/usr/local/www/vpn_ipsec.php:586 -msgid "Are you sure you wish to delete this P2 entry?" +#: src/usr/local/www/vpn_ipsec.php:593 +msgid "Confirmation required to delete this P2 entry." msgstr "" #: src/usr/local/www/vpn_ipsec_keys.php:98 @@ -28224,7 +28503,7 @@ msgid "Delete key" msgstr "" #: src/usr/local/www/vpn_ipsec_keys.php:206 -#: src/usr/local/www/vpn_ipsec_keys_edit.php:201 +#: src/usr/local/www/vpn_ipsec_keys_edit.php:203 msgid "PSK for any user can be set by using an identifier of any." msgstr "" @@ -28260,7 +28539,7 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_keys_edit.php:172 msgid "" "This can be either an IP address, fully qualified domain name or an e-mail " -"address" +"address." msgstr "" #: src/usr/local/www/vpn_ipsec_keys_edit.php:176 @@ -28416,9 +28695,9 @@ msgid "" msgstr "" #: src/usr/local/www/vpn_ipsec_mobile.php:594 -#: src/usr/local/www/vpn_openvpn_csc.php:451 -#: src/usr/local/www/vpn_openvpn_server.php:1017 -#: src/usr/local/www/vpn_openvpn_server.php:1024 +#: src/usr/local/www/vpn_openvpn_csc.php:455 +#: src/usr/local/www/vpn_openvpn_server.php:1022 +#: src/usr/local/www/vpn_openvpn_server.php:1029 msgid "DNS Default Domain" msgstr "" @@ -28482,14 +28761,14 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_phase1.php:276 msgid "" -"A valid remote gateway IPv4 address must be specified or you need to change " -"protocol to IPv6" +"A valid remote gateway IPv4 address must be specified or protocol needs to " +"be changed to IPv6" msgstr "" #: src/usr/local/www/vpn_ipsec_phase1.php:278 msgid "" -"A valid remote gateway IPv6 address must be specified or you need to change " -"protocol to IPv4" +"A valid remote gateway IPv6 address must be specified or protocol needs to " +"be changed to IPv4" msgstr "" #: src/usr/local/www/vpn_ipsec_phase1.php:288 @@ -28498,11 +28777,11 @@ msgid "The remote gateway \"%1$s\" is already used by phase1 \"%2$s\"." msgstr "" #: src/usr/local/www/vpn_ipsec_phase1.php:299 -msgid "There is a Phase 2 using IPv6, you cannot use IPv4." +msgid "There is a Phase 2 using IPv6, cannot use IPv4." msgstr "" #: src/usr/local/www/vpn_ipsec_phase1.php:303 -msgid "There is a Phase 2 using IPv4, you cannot use IPv6." +msgid "There is a Phase 2 using IPv4, cannot use IPv6." msgstr "" #: src/usr/local/www/vpn_ipsec_phase1.php:317 @@ -28616,171 +28895,171 @@ msgid "GW Group %s" msgstr "" #: src/usr/local/www/vpn_ipsec_phase1.php:664 -#: src/usr/local/www/vpn_ipsec_phase1.php:667 +#: src/usr/local/www/vpn_ipsec_phase1.php:666 msgid "Edit Phase 1" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:688 +#: src/usr/local/www/vpn_ipsec_phase1.php:686 #: src/usr/local/www/vpn_ipsec_phase2.php:531 #: src/usr/local/www/vpn_openvpn_client.php:458 -#: src/usr/local/www/vpn_openvpn_csc.php:336 +#: src/usr/local/www/vpn_openvpn_csc.php:340 #: src/usr/local/www/vpn_openvpn_server.php:626 msgid "General Information" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:699 +#: src/usr/local/www/vpn_ipsec_phase1.php:697 msgid "Key Exchange version" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:702 +#: src/usr/local/www/vpn_ipsec_phase1.php:700 msgid "" "Select the Internet Key Exchange protocol version to be used. Auto uses " "IKEv2 when initiator, and accepts either IKEv1 or IKEv2 as responder." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:706 +#: src/usr/local/www/vpn_ipsec_phase1.php:704 msgid "Internet Protocol" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:709 +#: src/usr/local/www/vpn_ipsec_phase1.php:707 msgid "Select the Internet Protocol family." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:716 +#: src/usr/local/www/vpn_ipsec_phase1.php:714 msgid "Select the interface for the local endpoint of this phase1 entry." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:724 -msgid "Enter the public IP address or host name of the remote gateway" +#: src/usr/local/www/vpn_ipsec_phase1.php:722 +msgid "Enter the public IP address or host name of the remote gateway." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:736 +#: src/usr/local/www/vpn_ipsec_phase1.php:734 msgid "Phase 1 Proposal (Authentication)" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:743 -#: src/usr/local/www/vpn_ipsec_phase1.php:841 -#: src/usr/local/www/vpn_ipsec_phase1.php:848 +#: src/usr/local/www/vpn_ipsec_phase1.php:741 +#: src/usr/local/www/vpn_ipsec_phase1.php:839 +#: src/usr/local/www/vpn_ipsec_phase1.php:846 msgid "Must match the setting chosen on the remote side." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:749 +#: src/usr/local/www/vpn_ipsec_phase1.php:747 msgid "Main" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:747 +#: src/usr/local/www/vpn_ipsec_phase1.php:745 msgid "Negotiation mode" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:750 +#: src/usr/local/www/vpn_ipsec_phase1.php:748 msgid "Aggressive is more flexible, but less secure." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:752 +#: src/usr/local/www/vpn_ipsec_phase1.php:750 msgid "My identifier" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:770 +#: src/usr/local/www/vpn_ipsec_phase1.php:768 msgid "Peer identifier" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:788 +#: src/usr/local/www/vpn_ipsec_phase1.php:786 msgid "" "This is known as the \"group\" setting on some VPN client implementations" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:798 -msgid "Enter your Pre-Shared Key string." +#: src/usr/local/www/vpn_ipsec_phase1.php:796 +msgid "Enter the Pre-Shared Key string." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:802 +#: src/usr/local/www/vpn_ipsec_phase1.php:800 msgid "My Certificate" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:805 +#: src/usr/local/www/vpn_ipsec_phase1.php:803 msgid "Select a certificate previously configured in the Certificate Manager." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:812 +#: src/usr/local/www/vpn_ipsec_phase1.php:810 msgid "" "Select a certificate authority previously configured in the Certificate " "Manager." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:816 +#: src/usr/local/www/vpn_ipsec_phase1.php:814 msgid "Phase 1 Proposal (Algorithms)" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:818 +#: src/usr/local/www/vpn_ipsec_phase1.php:816 #: src/usr/local/www/vpn_openvpn_client.php:661 #: src/usr/local/www/vpn_openvpn_server.php:809 msgid "Encryption Algorithm" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:838 +#: src/usr/local/www/vpn_ipsec_phase1.php:836 msgid "Hash Algorithm" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:845 +#: src/usr/local/www/vpn_ipsec_phase1.php:843 msgid "DH Group" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:852 +#: src/usr/local/www/vpn_ipsec_phase1.php:850 msgid "Lifetime (Seconds)" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:863 +#: src/usr/local/www/vpn_ipsec_phase1.php:861 msgid "Disable rekey" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:870 +#: src/usr/local/www/vpn_ipsec_phase1.php:868 msgid "Disable Reauth" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:877 +#: src/usr/local/www/vpn_ipsec_phase1.php:875 msgid "Responder Only" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:886 +#: src/usr/local/www/vpn_ipsec_phase1.php:884 msgid "Force" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:884 +#: src/usr/local/www/vpn_ipsec_phase1.php:882 msgid "NAT Traversal" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:887 +#: src/usr/local/www/vpn_ipsec_phase1.php:885 msgid "" "Set this option to enable the use of NAT-T (i.e. the encapsulation of ESP in " "UDP packets) if needed, which can help with clients that are behind " "restrictive firewalls." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:892 +#: src/usr/local/www/vpn_ipsec_phase1.php:890 msgid "MOBIKE" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:895 +#: src/usr/local/www/vpn_ipsec_phase1.php:893 msgid "Set this option to control the use of MOBIKE" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:899 +#: src/usr/local/www/vpn_ipsec_phase1.php:897 msgid "Split connections" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:925 +#: src/usr/local/www/vpn_ipsec_phase1.php:923 msgid "Dead Peer Detection" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:935 +#: src/usr/local/www/vpn_ipsec_phase1.php:933 msgid "Delay between requesting peer acknowledgement." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:939 +#: src/usr/local/www/vpn_ipsec_phase1.php:937 msgid "Max failures" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:942 +#: src/usr/local/www/vpn_ipsec_phase1.php:940 msgid "Number of consecutive failures allowed before disconnect. " msgstr "" @@ -28810,14 +29089,14 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:190 msgid "" -"A valid local network IPv4 address must be specified or you need to change " -"Mode to IPv6" +"A valid local network IPv4 address must be specified or Mode needs to be " +"changed to IPv6" msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:192 msgid "" -"A valid local network IPv6 address must be specified or you need to change " -"Mode to IPv4" +"A valid local network IPv6 address must be specified or Mode needs to be " +"changed to IPv4" msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:203 @@ -28837,7 +29116,7 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:214 msgid "" -"You cannot configure a network type address for NAT while only an address " +"A network type address cannot be configured for NAT while only an address " "type is selected for local source." msgstr "" @@ -28847,14 +29126,14 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:220 msgid "" -"A valid NAT local network IPv4 address must be specified or you need to " -"change Mode to IPv6" +"A valid NAT local network IPv4 address must be specified or Mode needs to be " +"changed to IPv6" msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:222 msgid "" -"A valid NAT local network IPv6 address must be specified or you need to " -"change Mode to IPv4" +"A valid NAT local network IPv6 address must be specified or Mode needs to be " +"changed to IPv4" msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:241 @@ -28867,14 +29146,14 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:247 msgid "" -"A valid remote network IPv4 address must be specified or you need to change " -"Mode to IPv6" +"A valid remote network IPv4 address must be specified or Mode needs to be " +"changed to IPv6" msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:249 msgid "" -"A valid remote network IPv6 address must be specified or you need to change " -"Mode to IPv4" +"A valid remote network IPv6 address must be specified or Mode needs to be " +"changed to IPv4" msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:275 @@ -28942,8 +29221,8 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:670 msgid "" -"Use 3DES for best compatibility or if you have a hardware crypto accelerator " -"card. Blowfish is usually the fastest in software encryption." +"Use 3DES for best compatibility or for a hardware crypto accelerator card. " +"Blowfish is usually the fastest in software encryption." msgstr "" #: src/usr/local/www/vpn_ipsec_phase2.php:677 @@ -28977,17 +29256,17 @@ msgid "An integer between 576 and 65535 must be specified for Maximum MSS" msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:274 -msgid "Start IPsec in Debug Mode Based on Sections Selected" +msgid "IPsec Logging Controls" msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:286 msgid "" -"Launches IPsec in debug mode so that more verbose logs will be generated to " -"aid in troubleshooting." +"Changes the log verbosity for the IPsec daemon, so that more detail will be " +"generated to aid in troubleshooting." msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:291 -msgid "IPsec Advanced Settings" +msgid "Advanced IPsec Settings" msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:295 @@ -29034,12 +29313,12 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:328 msgid "" "Some implementations send the third Main Mode message unencrypted, probably " -"to find the PSKs for the specified ID for authentication.This is very " +"to find the PSKs for the specified ID for authentication. This is very " "similar to Aggressive Mode, and has the same security implications: A " "passive attacker can sniff the negotiated Identity, and start brute forcing " -"the PSK using the HASH payload.It is recommended to keep this option to no, " -"unless you know exactly what the implications are and require compatibility " -"to such devices (for example, some SonicWall boxes)." +"the PSK using the HASH payload. It is recommended to keep this option to no, " +"unless the exact implications are known and compatibility is required for " +"such devices (for example, some SonicWall boxes)." msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:336 @@ -29083,11 +29362,11 @@ msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:379 msgid "" -"instead of a break-before-make scheme. Make-before-break uses overlapping " +"Instead of a break-before-make scheme. Make-before-break uses overlapping " "IKE and CHILD_SA during reauthentication by first recreating all new SAs " "before deleting the old ones. This behavior can be beneficial to avoid " "connectivity gaps during reauthentication, but requires support for " -"overlapping SAs by the peer" +"overlapping SAs by the peer." msgstr "" #: src/usr/local/www/vpn_ipsec_settings.php:385 @@ -29120,11 +29399,11 @@ msgstr "" msgid "The specified server address is equal to the LAN interface address." msgstr "" -#: src/usr/local/www/vpn_l2tp.php:241 +#: src/usr/local/www/vpn_l2tp.php:238 msgid "Enable L2TP" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:274 +#: src/usr/local/www/vpn_l2tp.php:271 msgid "" "Enter the IP address the L2TP server should give to clients for use as their " "\"gateway\". <br />Typically this is set to an unused IP just outside of the " @@ -29132,63 +29411,55 @@ msgid "" "currently in use on this firewall." msgstr "" -#: src/usr/local/www/vpn_l2tp.php:280 +#: src/usr/local/www/vpn_l2tp.php:277 msgid "Remote address range" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:283 -msgid "Specify the starting address for the client IP address subnet." -msgstr "" - -#: src/usr/local/www/vpn_l2tp.php:287 +#: src/usr/local/www/vpn_l2tp.php:284 msgid "Number of L2TP users" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:294 src/usr/local/www/vpn_l2tp.php:351 +#: src/usr/local/www/vpn_l2tp.php:291 src/usr/local/www/vpn_l2tp.php:348 msgid "Secret" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:297 +#: src/usr/local/www/vpn_l2tp.php:294 msgid "" "Specify optional secret shared between peers. Required on some devices/" "setups." msgstr "" -#: src/usr/local/www/vpn_l2tp.php:301 +#: src/usr/local/www/vpn_l2tp.php:298 msgid "Authentication type" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:308 +#: src/usr/local/www/vpn_l2tp.php:305 msgid "Specifies the protocol to use for authentication." msgstr "" -#: src/usr/local/www/vpn_l2tp.php:312 -msgid "Primary L2TM DNS server" +#: src/usr/local/www/vpn_l2tp.php:309 +msgid "Primary L2TP DNS server" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:319 -msgid "Secondary L2TM DNS server" +#: src/usr/local/www/vpn_l2tp.php:316 +msgid "Secondary L2TP DNS server" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:334 +#: src/usr/local/www/vpn_l2tp.php:331 msgid "" "When set, all users will be authenticated using the RADIUS server specified " "below. The local user database will not be used." msgstr "" -#: src/usr/local/www/vpn_l2tp.php:341 -msgid "Sends accounting packets to the RADIUS server." -msgstr "" - -#: src/usr/local/www/vpn_l2tp.php:347 +#: src/usr/local/www/vpn_l2tp.php:344 msgid "Enter the IP address of the RADIUS server." msgstr "" -#: src/usr/local/www/vpn_l2tp.php:358 +#: src/usr/local/www/vpn_l2tp.php:355 msgid "RADIUS issued IPs" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:369 +#: src/usr/local/www/vpn_l2tp.php:366 msgid "" "Don't forget to add a firewall rule to permit traffic from L2TP clients." msgstr "" @@ -29202,7 +29473,7 @@ msgid "The L2TP user list has been modified." msgstr "" #: src/usr/local/www/vpn_l2tp_users.php:113 -msgid "You must apply the changes in order for them to take effect" +msgid "The changes must be applied for them to take effect" msgstr "" #: src/usr/local/www/vpn_l2tp_users.php:113 @@ -29222,12 +29493,11 @@ msgid "The IP address entered is not valid." msgstr "" #: src/usr/local/www/vpn_l2tp_users_edit.php:202 -msgid "If you want to change the users password, enter it here." +msgid "To change the users password, enter it here." msgstr "" #: src/usr/local/www/vpn_l2tp_users_edit.php:211 -msgid "" -"If you want the user to be assigned a specific IP address, enter it here." +msgid "To assign the user a specific IP address, enter it here." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:123 @@ -29237,15 +29507,15 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:220 #: src/usr/local/www/vpn_openvpn_server.php:289 msgid "" -"Protocol and IP address families do not match. You cannot select an IPv6 " -"protocol and an IPv4 IP address." +"Protocol and IP address families do not match. An IPv6 protocol and an IPv4 " +"IP address cannot be selected." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:222 #: src/usr/local/www/vpn_openvpn_server.php:291 msgid "" -"Protocol and IP address families do not match. You cannot select an IPv4 " -"protocol and an IPv6 IP address." +"Protocol and IP address families do not match. An IPv4 protocol and an IPv6 " +"IP address cannot be selected." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:224 @@ -29304,21 +29574,21 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:426 #: src/usr/local/www/vpn_openvpn_client.php:449 -#: src/usr/local/www/vpn_openvpn_csc.php:327 +#: src/usr/local/www/vpn_openvpn_csc.php:331 #: src/usr/local/www/vpn_openvpn_server.php:615 msgid "Clients" msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:450 -#: src/usr/local/www/vpn_openvpn_csc.php:308 -#: src/usr/local/www/vpn_openvpn_csc.php:328 +#: src/usr/local/www/vpn_openvpn_csc.php:312 +#: src/usr/local/www/vpn_openvpn_csc.php:332 #: src/usr/local/www/vpn_openvpn_server.php:616 msgid "Client Specific Overrides" msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:465 msgid "" -"Set this option to disable this client without removing it from the list" +"Set this option to disable this client without removing it from the list." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:469 @@ -29338,8 +29608,8 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:501 msgid "" -"Set this option if you would like to bind to a specific port. Leave this " -"blank or enter 0 for a random dynamic port." +"Set this option to bind to a specific port. Leave this blank or enter 0 for " +"a random dynamic port." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:505 @@ -29403,7 +29673,7 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:648 #: src/usr/local/www/vpn_openvpn_server.php:724 #: src/usr/local/www/vpn_openvpn_server.php:805 -msgid "Paste your shared key here" +msgid "Paste the shared key here" msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:626 @@ -29444,7 +29714,7 @@ msgid "Hardware Crypto" msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:682 -#: src/usr/local/www/vpn_openvpn_csc.php:386 +#: src/usr/local/www/vpn_openvpn_csc.php:390 #: src/usr/local/www/vpn_openvpn_server.php:845 msgid "Tunnel Settings" msgstr "" @@ -29457,7 +29727,7 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:689 msgid "" "This is the IPv4 virtual network used for private communications between " -"this client and the server expressed using CIDR (eg. 10.0.8.0/24). The " +"this client and the server expressed using CIDR (e.g. 10.0.8.0/24). The " "second network address will be assigned to the client virtual interface." msgstr "" @@ -29469,7 +29739,7 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:698 msgid "" "This is the IPv6 virtual network used for private communications between " -"this client and the server expressed using CIDR (eg. fe80::/64). The second " +"this client and the server expressed using CIDR (e.g. fe80::/64). The second " "network address will be assigned to the client virtual interface." msgstr "" @@ -29484,8 +29754,8 @@ msgid "" "IPv4 networks that will be routed through the tunnel, so that a site-to-site " "VPN can be established without manually changing the routing tables. " "Expressed as a comma-separated list of one or more CIDR ranges. If this is a " -"site-to-site VPN, enter the remote LAN/s here. You may leave this blank if " -"you don't want a site-to-site VPN." +"site-to-site VPN, enter the remote LAN/s here. May be left blank for non " +"site-to-site VPN." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:713 @@ -29499,8 +29769,8 @@ msgid "" "These are the IPv6 networks that will be routed through the tunnel, so that " "a site-to-site VPN can be established without manually changing the routing " "tables. Expressed as a comma-separated list of one or more IP/PREFIX. If " -"this is a site-to-site VPN, enter the remote LAN/s here. You may leave this " -"blank if you don't want a site-to-site VPN." +"this is a site-to-site VPN, enter the remote LAN/s here. May be left blank " +"for non site-to-site VPN." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:722 @@ -29515,6 +29785,7 @@ msgid "" msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:733 +#: src/usr/local/www/vpn_openvpn_server.php:955 msgid "" "Compress tunnel packets using the LZO algorithm. Adaptive compression will " "dynamically disable compression for a period of time if OpenVPN detects that " @@ -29555,34 +29826,32 @@ msgid "Don't add/remove routes" msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:768 -msgid "Pass routes to --route-upscript using environmental variables" +msgid "Pass routes to --route-upscript using environmental variables." msgstr "" #: src/usr/local/www/vpn_openvpn_client.php:779 -#: src/usr/local/www/vpn_openvpn_server.php:1160 msgid "" -"Enter any additional options you would like to add to the OpenVPN server " -"configuration here, separated by semicolon<br />EXAMPLE: push \"route " -"10.0.0.0 255.255.255.0\"" +"Enter any additional options to add to the OpenVPN client configuration " +"here, separated by semicolon." msgstr "" -#: src/usr/local/www/vpn_openvpn_client.php:784 -#: src/usr/local/www/vpn_openvpn_server.php:1165 +#: src/usr/local/www/vpn_openvpn_client.php:783 +#: src/usr/local/www/vpn_openvpn_server.php:1170 msgid "Verbosity level" msgstr "" -#: src/usr/local/www/vpn_openvpn_client.php:787 -#: src/usr/local/www/vpn_openvpn_server.php:1168 +#: src/usr/local/www/vpn_openvpn_client.php:786 +#: src/usr/local/www/vpn_openvpn_server.php:1173 msgid "" "Each level shows all info from the previous levels. Level 3 is recommended " -"if you want a good summary of what's happening without being swamped by " -"output<br /><br />None: Only fatal errors<br />Default: Normal usage " +"for a good summary of what's happening without being swamped by output.<br /" +"><br />None: Only fatal errors<br />Default through 4: Normal usage " "range<br />5: Output R and W characters to the console for each packet read " -"and write, uppercase is used for TCP/UDP packets and lowercase is used for " -"TUN/TAP packets<br />6: Debug info range" +"and write. Uppercase is used for TCP/UDP packets and lowercase is used for " +"TUN/TAP packets.<br />6-11: Debug info range" msgstr "" -#: src/usr/local/www/vpn_openvpn_client.php:814 +#: src/usr/local/www/vpn_openvpn_client.php:813 msgid "OpenVPN Clients" msgstr "" @@ -29647,174 +29916,174 @@ msgid "" "address" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:342 +#: src/usr/local/www/vpn_openvpn_csc.php:346 #, php-format msgid "OpenVPN Server %d: %s" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:353 +#: src/usr/local/www/vpn_openvpn_csc.php:357 msgid "" "Select the servers for which the override will apply. Selecting no servers " "will also apply the override to all servers." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:361 +#: src/usr/local/www/vpn_openvpn_csc.php:365 msgid "" "Set this option to disable this client-specific override without removing it " "from the list." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:365 +#: src/usr/local/www/vpn_openvpn_csc.php:369 msgid "Common name" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:368 +#: src/usr/local/www/vpn_openvpn_csc.php:372 msgid "Enter the client's X.509 common name." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:379 +#: src/usr/local/www/vpn_openvpn_csc.php:383 msgid "Connection blocking" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:382 +#: src/usr/local/www/vpn_openvpn_csc.php:386 msgid "" "Don't use this option to permanently disable a client due to a compromised " "key or password. Use a CRL (certificate revocation list) instead. " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:390 -#: src/usr/local/www/vpn_openvpn_server.php:1202 +#: src/usr/local/www/vpn_openvpn_csc.php:394 +#: src/usr/local/www/vpn_openvpn_server.php:1207 msgid "Tunnel Network" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:393 +#: src/usr/local/www/vpn_openvpn_csc.php:397 msgid "" "This is the virtual network used for private communications between this " -"client and the server expressed using CIDR (eg. 10.0.8.0/24). The first " +"client and the server expressed using CIDR (e.g. 10.0.8.0/24). The first " "network address is assumed to be the server address and the second network " "address will be assigned to the client virtual interface. " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:398 +#: src/usr/local/www/vpn_openvpn_csc.php:402 msgid "IPv4 Local Network/s" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:401 +#: src/usr/local/www/vpn_openvpn_csc.php:405 msgid "" "These are the IPv4 networks that will be accessible from this particular " "client. Expressed as a comma-separated list of one or more CIDR ranges. <br /" -">NOTE: You do not need to specify networks here if they have already been " +">NOTE: Networks do not need to be specified here if they have already been " "defined on the main server configuration." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:406 +#: src/usr/local/www/vpn_openvpn_csc.php:410 msgid "IPv6 Local Network/s" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:409 +#: src/usr/local/www/vpn_openvpn_csc.php:413 msgid "" "These are the IPv4 networks that will be accessible from this particular " "client. Expressed as a comma-separated list of one or more IP/PREFIX " -"networks.<br />NOTE: You do not need to specify networks here if they have " +"networks.<br />NOTE: Networks do not need to be specified here if they have " "already been defined on the main server configuration." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:414 +#: src/usr/local/www/vpn_openvpn_csc.php:418 msgid "IPv4 Remote Network/s" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:417 +#: src/usr/local/www/vpn_openvpn_csc.php:421 msgid "" "These are the IPv4 networks that will be routed to this client specifically " "using iroute, so that a site-to-site VPN can be established. Expressed as a " -"comma-separated list of one or more CIDR ranges. You may leave this blank if " -"there are no client-side networks to be routed.<br />NOTE: Remember to add " -"these subnets to the IPv4 Remote Networks list on the corresponding OpenVPN " -"server settings." +"comma-separated list of one or more CIDR ranges. May be left blank if there " +"are no client-side networks to be routed.<br />NOTE: Remember to add these " +"subnets to the IPv4 Remote Networks list on the corresponding OpenVPN server " +"settings." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:423 +#: src/usr/local/www/vpn_openvpn_csc.php:427 msgid "IPv6 Remote Network/s" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:426 +#: src/usr/local/www/vpn_openvpn_csc.php:430 msgid "" "These are the IPv4 networks that will be routed to this client specifically " "using iroute, so that a site-to-site VPN can be established. Expressed as a " -"comma-separated list of one or more IP/PREFIX networks. You may leave this " -"blank if there are no client-side networks to be routed.<br />NOTE: Remember " -"to add these subnets to the IPv6 Remote Networks list on the corresponding " -"OpenVPN server settings." +"comma-separated list of one or more IP/PREFIX networks. May be left blank if " +"there are no client-side networks to be routed.<br />NOTE: Remember to add " +"these subnets to the IPv6 Remote Networks list on the corresponding OpenVPN " +"server settings." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:432 +#: src/usr/local/www/vpn_openvpn_csc.php:436 #: src/usr/local/www/vpn_openvpn_server.php:901 msgid "Redirect Gateway" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:439 +#: src/usr/local/www/vpn_openvpn_csc.php:443 #: src/usr/local/www/vpn_openvpn_server.php:989 msgid "Client Settings" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:444 +#: src/usr/local/www/vpn_openvpn_csc.php:448 msgid "Server Definitions" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:456 -#: src/usr/local/www/vpn_openvpn_csc.php:461 +#: src/usr/local/www/vpn_openvpn_csc.php:460 +#: src/usr/local/www/vpn_openvpn_csc.php:465 msgid "DNS Domain" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:505 +#: src/usr/local/www/vpn_openvpn_csc.php:509 msgid "Server 4" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:540 +#: src/usr/local/www/vpn_openvpn_csc.php:544 msgid "NetBIOS Options" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:543 +#: src/usr/local/www/vpn_openvpn_csc.php:547 msgid "" "If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) " "will be disabled. " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:547 -#: src/usr/local/www/vpn_openvpn_server.php:1101 +#: src/usr/local/www/vpn_openvpn_csc.php:551 +#: src/usr/local/www/vpn_openvpn_server.php:1106 msgid "Node Type" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:550 +#: src/usr/local/www/vpn_openvpn_csc.php:554 msgid "" "Possible options: b-node (broadcasts), p-node (point-to-point name queries " "to a WINS server), m-node (broadcast then query name server), and h-node " "(query name server, then broadcast). " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:558 +#: src/usr/local/www/vpn_openvpn_csc.php:562 msgid "" "A NetBIOS Scope ID provides an extended naming service for NetBIOS over TCP/" "IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to " "only those nodes with the same NetBIOS scope ID. " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:592 +#: src/usr/local/www/vpn_openvpn_csc.php:596 msgid "" -"Enter any additional options you would like to add for this client specific " -"override, separated by a semicolon. <br />EXAMPLE: push \"route 10.0.0.0 " +"Enter any additional options to add for this client specific override, " +"separated by a semicolon. <br />EXAMPLE: push \"route 10.0.0.0 " "255.255.255.0\"; " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:664 +#: src/usr/local/www/vpn_openvpn_csc.php:668 msgid "CSC Overrides" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:692 +#: src/usr/local/www/vpn_openvpn_csc.php:696 msgid "Edit CSC Override" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:693 +#: src/usr/local/www/vpn_openvpn_csc.php:697 msgid "Delete CSC Override" msgstr "" @@ -29824,7 +30093,7 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:305 msgid "" -"You must select a Backend for Authentication if the server mode requires " +"A Backend for Authentication must be selected if the server mode requires " "User Auth." msgstr "" @@ -29863,7 +30132,7 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:633 msgid "" -"Set this option to disable this server without removing it from the list" +"Set this option to disable this server without removing it from the list." msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:658 @@ -29871,14 +30140,14 @@ msgid "Backend for authentication" msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:766 -#: src/usr/local/www/vpn_openvpn_server.php:1589 +#: src/usr/local/www/vpn_openvpn_server.php:1607 msgid "" "Warning: The selected server certificate was not created as an SSL Server " "certificate and may not work as expected" msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:770 -msgid "No Certificates defined. You may create one here: " +msgid "No Certificates defined. One may be created here: " msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:770 @@ -29921,19 +30190,19 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:852 msgid "" "This is the IPv4 virtual network used for private communications between " -"this server and client hosts expressed using CIDR (eg. 10.0.8.0/24). The " +"this server and client hosts expressed using CIDR (e.g. 10.0.8.0/24). The " "first network address will be assigned to the server virtual interface. The " -"remaining network addresses can optionally be assigned to connecting " -"clients. (see Address Pool)" +"remaining network addresses can optionally be assigned to connecting clients " +"(see Address Pool)." msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:862 msgid "" "This is the IPv6 virtual network used for private communications between " -"this server and client hosts expressed using CIDR (eg. fe80::/64). The first " -"network address will be assigned to the server virtual interface. The " -"remaining network addresses can optionally be assigned to connecting " -"clients. (see Address Pool)" +"this server and client hosts expressed using CIDR (e.g. fe80::/64). The " +"first network address will be assigned to the server virtual interface. The " +"remaining network addresses can optionally be assigned to connecting clients " +"(see Address Pool)." msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:869 @@ -29946,8 +30215,8 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:879 msgid "" -"The interface to which this tap instance will be bridged. This is not done " -"automatically. You must assign this interface and create the bridge " +"The interface to which this TAP instance will be bridged. This is not done " +"automatically. This interface must be assigned and the bridge created " "separately. This setting controls which existing IP address and subnet mask " "are used by OpenVPN for the bridge. Setting this to \"none\" will cause the " "Server Bridge DHCP settings below to be ignored." @@ -29959,8 +30228,8 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:888 msgid "" -"When using tap mode as a multi-point server, you may optionally supply a " -"DHCP range to use on the interface to which this tap instance is bridged. If " +"When using TAP mode as a multi-point server, a DHCP range may optionally be " +"supplied to use on the interface to which this TAP instance is bridged. If " "these settings are left blank, DHCP will be passed through to the LAN, and " "the interface setting above will be ignored." msgstr "" @@ -29976,9 +30245,9 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:911 msgid "" "IPv4 networks that will be accessible from the remote endpoint. Expressed as " -"a comma-separated list of one or more CIDR ranges. You may leave this blank " -"if you don't want to add a route to the local network through this tunnel on " -"the remote machine. This is generally set to your LAN network." +"a comma-separated list of one or more CIDR ranges. This may be left blank if " +"not adding a route to the local network through this tunnel on the remote " +"machine. This is generally set to the LAN network." msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:918 @@ -29988,9 +30257,9 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:921 msgid "" "IPv6 networks that will be accessible from the remote endpoint. Expressed as " -"a comma-separated list of one or more IP/PREFIX. You may leave this blank if " -"you don't want to add a route to the local network through this tunnel on " -"the remote machine. This is generally set to your LAN network." +"a comma-separated list of one or more IP/PREFIX. This may be left blank if " +"not adding a route to the local network through this tunnel on the remote " +"machine. This is generally set to the LAN network." msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:945 @@ -30003,13 +30272,6 @@ msgid "" "this server." msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:955 -msgid "" -"Compress tunnel packets using the LZO algorithm. Adaptive compression will " -"dynamically disable compression for a period of time if OpenVPN detects that " -"the data in the packets is not being compressed efficiently\"" -msgstr "" - #: src/usr/local/www/vpn_openvpn_server.php:968 msgid "Inter-client communication" msgstr "" @@ -30034,106 +30296,121 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:1011 msgid "" "Specifies the method used to supply a virtual adapter IP address to clients " -"when using tun mode on IPv4.\").<br />Some clients may require this be set " -"to \"subnet\" even for IPv6, such as OpenVPN Connect (iOS/Android). Older " +"when using TUN mode on IPv4.<br />Some clients may require this be set to " +"\"subnet\" even for IPv6, such as OpenVPN Connect (iOS/Android). Older " "versions of OpenVPN (before 2.0.9) or clients such as Yealink phones may " "require \"net30\"." msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1031 +#: src/usr/local/www/vpn_openvpn_server.php:1017 +msgid "Advanced Client Settings" +msgstr "" + +#: src/usr/local/www/vpn_openvpn_server.php:1036 msgid "DNS Server enable" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1038 +#: src/usr/local/www/vpn_openvpn_server.php:1043 msgid "DNS Server 1" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1045 +#: src/usr/local/www/vpn_openvpn_server.php:1050 msgid "DNS Server 2" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1052 +#: src/usr/local/www/vpn_openvpn_server.php:1057 msgid "DNS Server 3" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1059 +#: src/usr/local/www/vpn_openvpn_server.php:1064 msgid "DNS Server 4" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1066 +#: src/usr/local/www/vpn_openvpn_server.php:1071 msgid "Force DNS cache update" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1069 +#: src/usr/local/www/vpn_openvpn_server.php:1074 msgid "This is known to kick Windows into recognizing pushed DNS servers." msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1073 +#: src/usr/local/www/vpn_openvpn_server.php:1078 msgid "NTP Server enable" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1094 +#: src/usr/local/www/vpn_openvpn_server.php:1099 msgid "NetBIOS enable" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1097 +#: src/usr/local/www/vpn_openvpn_server.php:1102 msgid "" "If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) " -"will be disabled" +"will be disabled." msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1104 +#: src/usr/local/www/vpn_openvpn_server.php:1109 msgid "" "Possible options: b-node (broadcasts), p-node (point-to-point name queries " "to a WINS server), m-node (broadcast then query name server), and h-node " "(query name server, then broadcast)" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1109 +#: src/usr/local/www/vpn_openvpn_server.php:1114 msgid "Scope ID" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1112 +#: src/usr/local/www/vpn_openvpn_server.php:1117 msgid "" "A NetBIOS Scope ID provides an extended naming service for NetBIOS over TCP/" "IP. The NetBIOS scope ID isolates NetBIOS traffic on a single network to " "only those nodes with the same NetBIOS scope ID" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1118 +#: src/usr/local/www/vpn_openvpn_server.php:1123 msgid "WINS server enable" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1125 +#: src/usr/local/www/vpn_openvpn_server.php:1130 msgid "WINS Server 1" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1132 +#: src/usr/local/www/vpn_openvpn_server.php:1137 msgid "WINS Server 2" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1139 +#: src/usr/local/www/vpn_openvpn_server.php:1144 msgid "Enable custom port " msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1146 +#: src/usr/local/www/vpn_openvpn_server.php:1151 msgid "Management port" msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1149 +#: src/usr/local/www/vpn_openvpn_server.php:1154 msgid "" "The default port is 166. Specify a different port if the client machines " "need to select from multiple OpenVPN links." msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1196 -msgid "OpenVPN Servers" +#: src/usr/local/www/vpn_openvpn_server.php:1165 +msgid "" +"Enter any additional options to add to the OpenVPN server configuration " +"here, separated by semicolon.<br />EXAMPLE: push \"route 10.0.0.0 " +"255.255.255.0\"" msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:1201 +msgid "OpenVPN Servers" +msgstr "" + +#: src/usr/local/www/vpn_openvpn_server.php:1206 msgid "Protocol / Port" msgstr "" +#: src/usr/local/www/widgets/include/captiveportal.inc:2 +msgid "Captive Portal Status" +msgstr "" + #: src/usr/local/www/widgets/include/carp_status.inc:4 msgid "CARP Status" msgstr "" @@ -30174,15 +30451,15 @@ msgstr "" msgid "Wake-on-Lan" msgstr "" -#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:150 +#: src/usr/local/www/widgets/widgets/captive_portal_status.widget.php:151 msgid "delete" msgstr "" -#: src/usr/local/www/widgets/widgets/carp_status.widget.php:117 +#: src/usr/local/www/widgets/widgets/carp_status.widget.php:125 msgid "No CARP Interfaces Defined." msgstr "" -#: src/usr/local/www/widgets/widgets/carp_status.widget.php:117 +#: src/usr/local/www/widgets/widgets/carp_status.widget.php:125 #, php-format msgid "Click %1$shere%2$s to configure CARP." msgstr "" @@ -30199,23 +30476,24 @@ msgstr "" msgid "Updated gateways widget settings via dashboard." msgstr "" -#: src/usr/local/www/widgets/widgets/gateways.widget.php:133 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:136 msgid "Gateway IP" msgstr "" -#: src/usr/local/www/widgets/widgets/gateways.widget.php:137 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:145 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:147 msgid "Save Settings" msgstr "" -#: src/usr/local/www/widgets/widgets/gateways.widget.php:241 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:253 msgid "Packetloss" msgstr "" -#: src/usr/local/www/widgets/widgets/gateways.widget.php:244 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:256 msgid "Latency" msgstr "" -#: src/usr/local/www/widgets/widgets/gateways.widget.php:248 +#: src/usr/local/www/widgets/widgets/gateways.widget.php:260 msgid "Online <br/>(unmonitored)" msgstr "" @@ -30225,7 +30503,7 @@ msgstr "" #: src/usr/local/www/widgets/widgets/installed_packages.widget.php:76 msgid "" -"You can install packages <a href=\"pkg_mgr.php\" class=\"alert-link\">here</" +"Packages can be installed <a href=\"pkg_mgr.php\" class=\"alert-link\">here</" "a>." msgstr "" @@ -30302,7 +30580,7 @@ msgid "There are no configured IPsec Tunnels" msgstr "" #: src/usr/local/www/widgets/widgets/ipsec.widget.php:264 -msgid "You can configure your IPsec <a href=\"vpn_ipsec.php\">here</a>." +msgid "IPsec can be configured <a href=\"vpn_ipsec.php\">here</a>." msgstr "" #: src/usr/local/www/widgets/widgets/log.widget.php:103 @@ -30389,16 +30667,6 @@ msgid "Remote/Virtual IP" msgstr "" #: src/usr/local/www/widgets/widgets/openvpn.widget.php:259 -msgid "NOTE" -msgstr "" - -#: src/usr/local/www/widgets/widgets/openvpn.widget.php:259 -msgid "" -"You need to bind each OpenVPN client to enable its management daemon: use " -"'Local port' setting in the OpenVPN client screen" -msgstr "" - -#: src/usr/local/www/widgets/widgets/openvpn.widget.php:263 msgid "No OpenVPN instances defined" msgstr "" @@ -30430,143 +30698,143 @@ msgstr "" msgid "Saved Service Status Filter via Dashboard" msgstr "" -#: src/usr/local/www/widgets/widgets/services_status.widget.php:137 +#: src/usr/local/www/widgets/widgets/services_status.widget.php:140 msgid "No services found" msgstr "" -#: src/usr/local/www/widgets/widgets/services_status.widget.php:148 +#: src/usr/local/www/widgets/widgets/services_status.widget.php:151 msgid "Hidden services" msgstr "" -#: src/usr/local/www/widgets/widgets/smart_status.widget.php:70 +#: src/usr/local/www/widgets/widgets/smart_status.widget.php:71 msgid "Drive" msgstr "" -#: src/usr/local/www/widgets/widgets/smart_status.widget.php:71 +#: src/usr/local/www/widgets/widgets/smart_status.widget.php:72 msgid "Ident" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:69 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:73 msgid "<i>Unable to check for updates</i>" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:76 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:80 msgid "<i>Error in version information</i>" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:87 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:91 msgid "Version " msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:88 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:92 msgid "is available." msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:94 -msgid "You are on the latest version." +#: src/usr/local/www/widgets/widgets/system_information.widget.php:98 +msgid "The system is on the latest version." msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:97 -msgid "You are on a later version than<br />the official release." +#: src/usr/local/www/widgets/widgets/system_information.widget.php:101 +msgid "The system is on a later version than<br />the official release." msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:100 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:104 msgid "<i>Error comparing installed version<br />with latest available</i>" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:122 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:126 msgid "built on" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:129 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:133 msgid "Obtaining update status " msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:135 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:139 msgid "Platform" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:153 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:157 msgid "NanoBSD Boot Slice" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:157 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:161 msgid "Next Boot" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:164 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:168 msgid "CPU Type" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:171 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:175 msgid "CPUs" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:178 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:182 msgid "Hardware crypto" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:183 -msgid "Uptime" -msgstr "" - -#: src/usr/local/www/widgets/widgets/system_information.widget.php:187 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:191 msgid "Current date/time" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:191 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:195 msgid "DNS server(s)" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:205 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:209 msgid "Last config change" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:210 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:214 msgid "State table size" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:220 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:224 msgid "Show states" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:224 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:228 msgid "MBUF Usage" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:239 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:243 msgid "Temperature" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:248 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:255 msgid "Load average" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:250 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:257 msgid "Last 1, 5 and 15 minutes" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:254 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:261 msgid "CPU usage" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:260 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:267 msgid "(Updating in 10 seconds)" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:264 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:271 msgid "Memory usage" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:277 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:284 msgid "SWAP usage" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:289 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:298 msgid "Disk usage" msgstr "" -#: src/usr/local/www/widgets/widgets/system_information.widget.php:295 +#: src/usr/local/www/widgets/widgets/system_information.widget.php:304 +msgid " of " +msgstr "" + +#: src/usr/local/www/widgets/widgets/system_information.widget.php:304 msgid "in RAM" msgstr "" @@ -30614,11 +30882,11 @@ msgstr "" msgid "Core Critical:" msgstr "" -#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:276 -msgid "* You can configure a proper Thermal Sensor / Module under" +#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:279 +msgid "* A proper Thermal Sensor / Module can be configured under" msgstr "" -#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:277 +#: src/usr/local/www/widgets/widgets/thermal_sensors.widget.php:280 msgid "section" msgstr "" @@ -30654,15 +30922,15 @@ msgstr "" msgid "Wake" msgstr "" -#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:101 +#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:105 msgid "Wake up!" msgstr "" -#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:105 +#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:111 msgid "No saved WoL addresses" msgstr "" -#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:110 +#: src/usr/local/www/widgets/widgets/wake_on_lan.widget.php:117 msgid "DHCP Leases Status" msgstr "" @@ -30697,7 +30965,7 @@ msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:83 #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:86 -msgid "You need to specify the number of connections." +msgid "The number of connections must be specified." msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:88 @@ -30708,22 +30976,23 @@ msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:113 #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:132 #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:139 -msgid "You have less interfaces than number of connections!" +msgid "There are less interfaces than number of connections!" msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:325 -msgid "You cannot specify bandwidth smaller than 1!" +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:356 +msgid "The specified bandwidth cannot be less than 1." msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:336 #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:369 -msgid "You cannot select the same interface for local and outside." +msgid "The same interface cannot be selected for local and outside." msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:515 #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:619 #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:568 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:685 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:686 msgid "" "Address must be a valid IP address or Firewall Alias. Please correct this " "value to continue." @@ -30731,72 +31000,68 @@ msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:607 #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:636 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:673 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:700 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:674 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:701 msgid "Only percentage bandwidth specification is allowed." msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:790 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:855 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:856 msgid "" "Custom Bandwidths are greater than 30%. Please lower them for the wizard to " "continue." msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1174 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1253 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1255 msgid "" "Custom Bandwidths are greater than 40%. Please lower them for the wizard to " "continue." msgstr "" -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1476 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1561 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1479 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1566 msgid "Penalty Box" msgstr "" -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1483 -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1503 -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1517 -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1534 -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1553 -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1577 -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1656 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1568 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1589 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1603 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1620 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1639 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1663 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1690 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1743 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1486 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1506 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1520 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1537 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1556 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1580 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1659 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1573 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1594 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1608 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1625 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1644 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1668 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1695 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1748 msgid "Traffic Shaper Wizard" msgstr "" -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1495 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1581 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1498 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1586 msgid "Connections From Upstream SIP Server" msgstr "" -#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1509 -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1595 +#: src/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc:1512 +#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:1600 msgid "Connections To Upstream SIP Server" msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:97 -msgid "You need to specify the number of LAN type interfaces." +msgid "The number of LAN type interfaces must be specified." msgstr "" #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:102 msgid "The number of LAN type interfaces should be greater than 1." msgstr "" -#: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:356 -msgid "You cannot specify 0 bandwidth!" -msgstr "" - #: src/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc:378 -msgid "You cannot select the same interface twice on local interfaces." +msgid "The same interface cannot be selected twice on local interfaces." msgstr "" #: src/usr/local/www/xmlrpc.php:93 @@ -30875,31 +31140,31 @@ msgstr "" msgid "Basic XMLRPC wrapper for rc.reboot." msgstr "" -#: src/etc/inc/shaper.inc:783 src/etc/inc/shaper.inc:1369 +#: src/etc/inc/shaper.inc:832 src/etc/inc/shaper.inc:1440 msgid "Enable/disable discipline and its children" msgstr "" -#: src/etc/inc/shaper.inc:2283 +#: src/etc/inc/shaper.inc:2326 msgid "Upper Limit" msgstr "" -#: src/etc/inc/shaper.inc:2316 +#: src/etc/inc/shaper.inc:2359 msgid "Real Time" msgstr "" -#: src/etc/inc/shaper.inc:2348 +#: src/etc/inc/shaper.inc:2391 msgid "Link Share" msgstr "" -#: src/etc/inc/shaper.inc:2839 +#: src/etc/inc/shaper.inc:2836 msgid "Borrow from other queues when available" msgstr "" -#: src/etc/inc/shaper.inc:3884 +#: src/etc/inc/shaper.inc:3852 msgid "Enable limiter and its children" msgstr "" -#: src/etc/inc/shaper.inc:4206 +#: src/etc/inc/shaper.inc:4174 msgid "Enable this queue" msgstr "" @@ -30917,25 +31182,21 @@ msgstr "" msgid "Encrypt this configuration file." msgstr "" -#: src/usr/local/www/diag_backup.php:697 +#: src/usr/local/www/diag_backup.php:699 msgid "Configuration file is encrypted." msgstr "" -#: src/usr/local/www/diag_nanobsd.php:199 -msgid "Keep media mounted read/write at all times. " -msgstr "" - -#: src/usr/local/www/diag_nanobsd.php:228 +#: src/usr/local/www/diag_nanobsd.php:255 msgid "" "These options have been relocated to the <a href=\"system_advanced_misc.php" "\">System > Advanced, Miscellaneous</a> tab." msgstr "" -#: src/usr/local/www/diag_packet_capture.php:309 -msgid "Packet capture will be performed using promiscuous mode" +#: src/usr/local/www/diag_packet_capture.php:321 +msgid "Enable promiscuous mode" msgstr "" -#: src/usr/local/www/diag_packet_capture.php:381 +#: src/usr/local/www/diag_packet_capture.php:394 msgid "Do reverse DNS lookup" msgstr "" @@ -30943,43 +31204,43 @@ msgstr "" msgid "Automatically refresh the output below" msgstr "" -#: src/usr/local/www/diag_resetstate.php:136 +#: src/usr/local/www/diag_resetstate.php:129 msgid "Reset the firewall state table" msgstr "" -#: src/usr/local/www/diag_resetstate.php:144 +#: src/usr/local/www/diag_resetstate.php:137 msgid "Reset firewall source tracking" msgstr "" -#: src/usr/local/www/diag_smart.php:322 +#: src/usr/local/www/diag_smart.php:345 msgid "Info" msgstr "" -#: src/usr/local/www/diag_smart.php:330 +#: src/usr/local/www/diag_smart.php:353 msgid "Health" msgstr "" -#: src/usr/local/www/diag_smart.php:338 +#: src/usr/local/www/diag_smart.php:361 msgid "S.M.A.R.T. Capabilities" msgstr "" -#: src/usr/local/www/diag_smart.php:346 +#: src/usr/local/www/diag_smart.php:369 msgid "Attributes" msgstr "" -#: src/usr/local/www/diag_smart.php:408 +#: src/usr/local/www/diag_smart.php:433 msgid "Short" msgstr "" -#: src/usr/local/www/diag_smart.php:416 +#: src/usr/local/www/diag_smart.php:441 msgid "Long" msgstr "" -#: src/usr/local/www/diag_smart.php:424 +#: src/usr/local/www/diag_smart.php:449 msgid "Conveyance" msgstr "" -#: src/usr/local/www/diag_smart.php:479 +#: src/usr/local/www/diag_smart.php:506 msgid "Self-test" msgstr "" @@ -30987,37 +31248,37 @@ msgstr "" msgid "Show remote text" msgstr "" -#: src/usr/local/www/firewall_aliases_edit.php:700 +#: src/usr/local/www/firewall_aliases_edit.php:697 msgid "<span class=\"helptext\">" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:405 -msgid "This rule will be excluded from the NAT" +#: src/usr/local/www/firewall_nat_1to1_edit.php:402 +#: src/usr/local/www/firewall_nat_edit.php:668 +#: src/usr/local/www/firewall_nat_npt_edit.php:226 +#: src/usr/local/www/firewall_nat_out_edit.php:452 +#: src/usr/local/www/firewall_rules_edit.php:1153 +msgid "Disable this rule" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:412 -#: src/usr/local/www/firewall_nat_edit.php:677 -msgid "Disable redirection for traffic matching this rule" +#: src/usr/local/www/firewall_nat_1to1_edit.php:409 +msgid "Do not perform binat for the specified address" msgstr "" -#: src/usr/local/www/firewall_nat_1to1_edit.php:463 -#: src/usr/local/www/firewall_nat_1to1_edit.php:490 +#: src/usr/local/www/firewall_nat_1to1_edit.php:460 +#: src/usr/local/www/firewall_nat_1to1_edit.php:487 #: src/usr/local/www/firewall_nat_npt_edit.php:241 #: src/usr/local/www/firewall_nat_npt_edit.php:255 #: src/usr/local/www/firewall_nat_out_edit.php:558 msgid "Not" msgstr "" -#: src/usr/local/www/firewall_nat_edit.php:670 -#: src/usr/local/www/firewall_nat_npt_edit.php:226 -#: src/usr/local/www/firewall_nat_out_edit.php:452 -#: src/usr/local/www/firewall_rules_edit.php:1137 -msgid "Disable this rule" +#: src/usr/local/www/firewall_nat_edit.php:675 +msgid "Disable redirection for traffic matching this rule" msgstr "" #: src/usr/local/www/firewall_nat_edit.php:743 #: src/usr/local/www/firewall_nat_edit.php:810 -#: src/usr/local/www/firewall_rules_edit.php:1284 +#: src/usr/local/www/firewall_rules_edit.php:1300 msgid "Invert match." msgstr "" @@ -31031,401 +31292,384 @@ msgid "" "stop processing Outbound NAT rules" msgstr "" -#: src/usr/local/www/firewall_nat_out_edit.php:621 +#: src/usr/local/www/firewall_nat_out_edit.php:620 msgid "Static port" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1146 +#: src/usr/local/www/firewall_rules_edit.php:1162 msgid "Apply the action immediately on match." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1164 +#: src/usr/local/www/firewall_rules_edit.php:1180 msgid "" -"<span class=\"help-block\">This is associated with a NAT rule.<br/>You " -"cannot edit the interface, protocol, source, or destination of associated " -"filter rules." +"<span class=\"help-block\">This is associated with a NAT rule.<br/>Editing " +"the interface, protocol, source, or destination of associated filter rules " +"is not permitted." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1412 +#: src/usr/local/www/firewall_rules_edit.php:1430 msgid "Log packets that are handled by this rule" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1464 +#: src/usr/local/www/firewall_rules_edit.php:1480 msgid "" "Allow packets with IP options to pass. Otherwise they are blocked by " "default. This is usually only seen with multicast traffic." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1472 +#: src/usr/local/www/firewall_rules_edit.php:1488 msgid "Disable auto generated reply-to for this rule." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1550 +#: src/usr/local/www/firewall_rules_edit.php:1566 msgid "Prevent states created by this rule to be sync'ed over pfsync." msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1570 +#: src/usr/local/www/firewall_rules_edit.php:1586 msgid "" "Prevent the rule on Master from automatically syncing to other CARP members" msgstr "" -#: src/usr/local/www/firewall_rules_edit.php:1704 -#: src/usr/local/www/firewall_rules_edit.php:1711 +#: src/usr/local/www/firewall_rules_edit.php:1720 +#: src/usr/local/www/firewall_rules_edit.php:1727 msgid "<b>" msgstr "" -#: src/usr/local/www/firewall_virtual_ip_edit.php:416 +#: src/usr/local/www/firewall_virtual_ip_edit.php:425 msgid "" "Disable expansion of this entry into IPs on NAT lists (e.g. 192.168.1.0/24 " "expands to 256 entries.) " msgstr "" -#: src/usr/local/www/interfaces.php:1715 +#: src/usr/local/www/interfaces.php:1721 msgid "Enable interface" msgstr "" -#: src/usr/local/www/interfaces.php:1857 src/usr/local/www/interfaces.php:3169 +#: src/usr/local/www/interfaces.php:1869 src/usr/local/www/interfaces.php:3176 msgid "Default gateway" msgstr "" -#: src/usr/local/www/interfaces.php:1918 src/usr/local/www/interfaces.php:2101 +#: src/usr/local/www/interfaces.php:1934 src/usr/local/www/interfaces.php:2117 msgid "Configuration Override" msgstr "" -#: src/usr/local/www/interfaces.php:1999 +#: src/usr/local/www/interfaces.php:2015 msgid "FreeBSD default" msgstr "" -#: src/usr/local/www/interfaces.php:2015 +#: src/usr/local/www/interfaces.php:2031 msgid "pfSense Default" msgstr "" -#: src/usr/local/www/interfaces.php:2023 +#: src/usr/local/www/interfaces.php:2039 msgid "Saved Cfg" msgstr "" -#: src/usr/local/www/interfaces.php:2110 +#: src/usr/local/www/interfaces.php:2126 msgid "Request a IPv6 prefix/information through the IPv4 connectivity link" msgstr "" -#: src/usr/local/www/interfaces.php:2117 +#: src/usr/local/www/interfaces.php:2133 msgid "Only request an IPv6 prefix, do not request an IPv6 address" msgstr "" -#: src/usr/local/www/interfaces.php:2131 +#: src/usr/local/www/interfaces.php:2147 msgid "" "Send an IPv6 prefix hint to indicate the desired prefix size for delegation" msgstr "" -#: src/usr/local/www/interfaces.php:2138 +#: src/usr/local/www/interfaces.php:2154 msgid "Start DHCP6 client in debug mode" msgstr "" -#: src/usr/local/www/interfaces.php:2162 +#: src/usr/local/www/interfaces.php:2178 msgid "Exchange Information Only" msgstr "" -#: src/usr/local/www/interfaces.php:2198 +#: src/usr/local/www/interfaces.php:2214 msgid "Non-Temporary Address Allocation" msgstr "" -#: src/usr/local/www/interfaces.php:2238 +#: src/usr/local/www/interfaces.php:2254 msgid "Prefix Delegation " msgstr "" -#: src/usr/local/www/interfaces.php:2579 src/usr/local/www/interfaces.php:2715 +#: src/usr/local/www/interfaces.php:2596 src/usr/local/www/interfaces.php:2727 msgid "Enable Dial-On-Demand mode " msgstr "" -#: src/usr/local/www/interfaces.php:2637 +#: src/usr/local/www/interfaces.php:2654 msgid "Reset at each month (\"0 0 1 * *\")" msgstr "" -#: src/usr/local/www/interfaces.php:2645 +#: src/usr/local/www/interfaces.php:2662 msgid "Reset at each week (\"0 0 * * 0\")" msgstr "" -#: src/usr/local/www/interfaces.php:2653 +#: src/usr/local/www/interfaces.php:2670 msgid "Reset at each day (\"0 0 * * *\")" msgstr "" -#: src/usr/local/www/interfaces.php:2661 +#: src/usr/local/www/interfaces.php:2678 msgid "Reset at each hour (\"0 * * * *\")" msgstr "" -#: src/usr/local/www/interfaces.php:2671 src/usr/local/www/interfaces.php:2739 -msgid "<a href=\"/interfaces_ppps_edit.php?id=" -msgstr "" - -#: src/usr/local/www/interfaces.php:2676 -msgid "" -"<a href=\"/interfaces_ppps_edit.php\" class=\"navlnk\">Click here for " -"additional PPPoE configuration options and for MLPPP configuration.</a>" -msgstr "" - -#: src/usr/local/www/interfaces.php:2744 -msgid "" -"<a href=\"/interfaces_ppps_edit.php\" class=\"navlnk\">Click here for " -"additional PPTP and L2TP configuration options.</a>" -msgstr "" - -#: src/usr/local/www/interfaces.php:2758 +#: src/usr/local/www/interfaces.php:2765 msgid "" "Preserve common wireless configuration through interface deletions and " "reassignments." msgstr "" -#: src/usr/local/www/interfaces.php:2958 +#: src/usr/local/www/interfaces.php:2965 msgid "" "Allow packets to pass between wireless clients directly when operating as an " "access point" msgstr "" -#: src/usr/local/www/interfaces.php:2966 +#: src/usr/local/www/interfaces.php:2973 msgid "Force the card to use WME (wireless QoS)" msgstr "" -#: src/usr/local/www/interfaces.php:2974 +#: src/usr/local/www/interfaces.php:2981 msgid "" "Disable broadcasting of the SSID for this network (This may cause problems " "for some clients, and the SSID may still be discovered by other means.)" msgstr "" -#: src/usr/local/www/interfaces.php:2987 +#: src/usr/local/www/interfaces.php:2994 msgid "Enable WPA" msgstr "" -#: src/usr/local/www/interfaces.php:3039 +#: src/usr/local/www/interfaces.php:3046 msgid "Force the AP to rekey whenever a client disassociates" msgstr "" -#: src/usr/local/www/interfaces.php:3051 +#: src/usr/local/www/interfaces.php:3058 msgid "Enable 802.1X authentication" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:242 -#: src/usr/local/www/interfaces_gre_edit.php:236 +#: src/usr/local/www/interfaces_gif_edit.php:246 +#: src/usr/local/www/interfaces_gre_edit.php:242 msgid "" "Specify if route caching can be enabled. (Be careful with these settings on " "dynamic networks.)" msgstr "" -#: src/usr/local/www/interfaces_gif_edit.php:249 -#: src/usr/local/www/interfaces_gre_edit.php:243 +#: src/usr/local/www/interfaces_gif_edit.php:253 +#: src/usr/local/www/interfaces_gre_edit.php:249 msgid "" "ECN friendly behavior violates RFC2893. This should be used in mutual " "agreement with the peer. " msgstr "" -#: src/usr/local/www/interfaces_gre_edit.php:250 +#: src/usr/local/www/interfaces_gre_edit.php:256 msgid "" "Check this box for WCCP encapsulation version 2, or leave unchecked for " "version 1." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:717 +#: src/usr/local/www/interfaces_ppps_edit.php:727 msgid "Enable persistent logging of connection uptime. " msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:734 +#: src/usr/local/www/interfaces_ppps_edit.php:744 msgid "Configure NULL service name" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:789 +#: src/usr/local/www/interfaces_ppps_edit.php:799 msgid "Monthly (0 0 1 * *)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:797 +#: src/usr/local/www/interfaces_ppps_edit.php:807 msgid "Weekly (0 0 * * 0)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:805 +#: src/usr/local/www/interfaces_ppps_edit.php:815 msgid "Daily (0 0 * * *)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:813 +#: src/usr/local/www/interfaces_ppps_edit.php:823 msgid "Hourly (0 * * * *)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:840 +#: src/usr/local/www/interfaces_ppps_edit.php:852 msgid "Enable Dial-on-Demand mode. " msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:857 +#: src/usr/local/www/interfaces_ppps_edit.php:869 msgid "Disable vjcomp (compression, auto-negotiated by default)." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:867 +#: src/usr/local/www/interfaces_ppps_edit.php:879 msgid "Disable tcpmssfix (enabled by default)." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:878 +#: src/usr/local/www/interfaces_ppps_edit.php:890 msgid "Disable shortseq (auto-negotiated by default)." msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:886 +#: src/usr/local/www/interfaces_ppps_edit.php:898 msgid "Disable ACF compression (auto-negotiated by default)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:893 +#: src/usr/local/www/interfaces_ppps_edit.php:905 msgid "Disable Protocol compression (auto-negotiated by default)" msgstr "" -#: src/usr/local/www/interfaces_ppps_edit.php:939 +#: src/usr/local/www/interfaces_ppps_edit.php:951 msgid "<span id=\"linkparamhelp\">" msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:284 +#: src/usr/local/www/interfaces_qinq_edit.php:281 msgid "Adds interface to QinQ interface groups" msgstr "" -#: src/usr/local/www/interfaces_qinq_edit.php:297 +#: src/usr/local/www/interfaces_qinq_edit.php:294 msgid "" -"You can specify ranges in the inputs below. Enter a range (2-3) or " +"Ranges can be specified in the inputs below. Enter a range (2-3) or " "individual numbers.<br />Click \"Duplicate\" as many times as needed to add " -"new inputs" +"new inputs." msgstr "" -#: src/usr/local/www/load_balancer_pool_edit.php:404 +#: src/usr/local/www/load_balancer_pool_edit.php:396 msgid "" -"Please add a monitor IP address on the monitors tab if you wish to use this " -"feature.\"" +"Please add a monitor IP address on the monitors tab to use this feature.\"" msgstr "" -#: src/usr/local/www/load_balancer_virtual_server_edit.php:241 -#: src/usr/local/www/load_balancer_virtual_server_edit.php:261 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:243 +#: src/usr/local/www/load_balancer_virtual_server_edit.php:263 msgid "Please add a pool on the \"Pools\" tab to use this feature. " msgstr "" -#: src/usr/local/www/services_captiveportal.php:578 +#: src/usr/local/www/services_captiveportal.php:579 msgid "Enable Captive Portal" msgstr "" -#: src/usr/local/www/services_captiveportal.php:626 +#: src/usr/local/www/services_captiveportal.php:635 msgid "Enable waiting period reset on attempted access" msgstr "" -#: src/usr/local/www/services_captiveportal.php:633 +#: src/usr/local/www/services_captiveportal.php:642 msgid "Enable logout popup window" msgstr "" -#: src/usr/local/www/services_captiveportal.php:662 +#: src/usr/local/www/services_captiveportal.php:671 msgid "Disable Concurrent user logins" msgstr "" -#: src/usr/local/www/services_captiveportal.php:670 +#: src/usr/local/www/services_captiveportal.php:679 msgid "Disable MAC filtering" msgstr "" -#: src/usr/local/www/services_captiveportal.php:679 +#: src/usr/local/www/services_captiveportal.php:688 msgid "Enable Pass-through MAC automatic additions" msgstr "" -#: src/usr/local/www/services_captiveportal.php:689 +#: src/usr/local/www/services_captiveportal.php:698 msgid "Enable Pass-through MAC automatic addition with username" msgstr "" -#: src/usr/local/www/services_captiveportal.php:698 +#: src/usr/local/www/services_captiveportal.php:707 msgid "Enable per-user bandwidth restriction" msgstr "" -#: src/usr/local/www/services_captiveportal.php:727 +#: src/usr/local/www/services_captiveportal.php:736 msgid "No Authentication" msgstr "" -#: src/usr/local/www/services_captiveportal.php:735 +#: src/usr/local/www/services_captiveportal.php:744 msgid "Local User Manager / Vouchers" msgstr "" -#: src/usr/local/www/services_captiveportal.php:743 +#: src/usr/local/www/services_captiveportal.php:752 msgid "RADIUS Authentication" msgstr "" -#: src/usr/local/www/services_captiveportal.php:753 +#: src/usr/local/www/services_captiveportal.php:762 msgid "Allow only users/groups with \"Captive portal login\" privilege set" msgstr "" -#: src/usr/local/www/services_captiveportal.php:763 +#: src/usr/local/www/services_captiveportal.php:772 msgid "PAP" msgstr "" -#: src/usr/local/www/services_captiveportal.php:771 +#: src/usr/local/www/services_captiveportal.php:780 msgid "CHAP-MD5" msgstr "" -#: src/usr/local/www/services_captiveportal.php:779 +#: src/usr/local/www/services_captiveportal.php:788 msgid "MSCHAPv1" msgstr "" -#: src/usr/local/www/services_captiveportal.php:787 +#: src/usr/local/www/services_captiveportal.php:796 msgid "MSCHAPv2" msgstr "" -#: src/usr/local/www/services_captiveportal.php:907 +#: src/usr/local/www/services_captiveportal.php:916 msgid "Send RADIUS accounting packets to the primary RADIUS server." msgstr "" -#: src/usr/local/www/services_captiveportal.php:923 +#: src/usr/local/www/services_captiveportal.php:932 msgid "No updates" msgstr "" -#: src/usr/local/www/services_captiveportal.php:931 +#: src/usr/local/www/services_captiveportal.php:940 msgid "Stop/Start" msgstr "" -#: src/usr/local/www/services_captiveportal.php:939 +#: src/usr/local/www/services_captiveportal.php:948 msgid "Stop/Start (FreeRADIUS)" msgstr "" -#: src/usr/local/www/services_captiveportal.php:947 +#: src/usr/local/www/services_captiveportal.php:956 msgid "Interim" msgstr "" -#: src/usr/local/www/services_captiveportal.php:962 +#: src/usr/local/www/services_captiveportal.php:971 msgid "Reauthenticate connected users every minute" msgstr "" -#: src/usr/local/www/services_captiveportal.php:970 +#: src/usr/local/www/services_captiveportal.php:979 msgid "Enable RADIUS MAC authentication" msgstr "" -#: src/usr/local/www/services_captiveportal.php:992 +#: src/usr/local/www/services_captiveportal.php:1001 msgid "Use RADIUS Session-Timeout attributes" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1008 +#: src/usr/local/www/services_captiveportal.php:1017 msgid "Invert Acct-Input-Octets and Acct-Output-Octets" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1041 +#: src/usr/local/www/services_captiveportal.php:1050 msgid "Enable HTTPS login" msgstr "" -#: src/usr/local/www/services_captiveportal.php:1065 +#: src/usr/local/www/services_captiveportal.php:1074 msgid "Disable HTTPS Forwards" msgstr "" -#: src/usr/local/www/services_captiveportal_vouchers.php:515 +#: src/usr/local/www/services_captiveportal_vouchers.php:516 msgid "Enable the creation, generation and activation of rolls with vouchers" msgstr "" -#: src/usr/local/www/services_dhcp.php:805 +#: src/usr/local/www/services_dhcp.php:801 msgid "Only the clients defined below will get DHCP leases from this server." msgstr "" -#: src/usr/local/www/services_dhcp.php:812 +#: src/usr/local/www/services_dhcp.php:808 msgid "Denied clients will be ignored rather than rejected." msgstr "" -#: src/usr/local/www/services_dhcp.php:982 +#: src/usr/local/www/services_dhcp.php:980 msgid "Enable Static ARP entries" msgstr "" -#: src/usr/local/www/services_dhcp.php:989 +#: src/usr/local/www/services_dhcp.php:987 msgid "Change DHCP display lease time from UTC to local time" msgstr "" -#: src/usr/local/www/services_dhcp.php:996 +#: src/usr/local/www/services_dhcp.php:994 msgid "Enable RRD statistics graphs" msgstr "" @@ -31433,34 +31677,20 @@ msgstr "" msgid "Enable registration of DHCP client names in DNS" msgstr "" -#: src/usr/local/www/services_dhcp.php:1160 +#: src/usr/local/www/services_dhcp.php:1170 msgid "<div class=\"alert alert-info\"> " msgstr "" -#: src/usr/local/www/services_dhcp.php:1236 +#: src/usr/local/www/services_dhcp.php:1250 msgid "Enables network booting" msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:495 +#: src/usr/local/www/services_dhcp_edit.php:497 msgid "Create an ARP Table Static Entry for this MAC & IP Address pair." msgstr "" -#: src/usr/local/www/services_dhcp_edit.php:600 -#: src/usr/local/www/services_dhcp_edit.php:646 -#: src/usr/local/www/services_dhcp_edit.php:680 -#: src/usr/local/www/services_dhcpv6.php:767 -#: src/usr/local/www/services_dhcpv6.php:833 -#: src/usr/local/www/services_dhcpv6.php:867 -#: src/usr/local/www/services_dhcpv6.php:886 -#: src/usr/local/www/services_dhcpv6.php:912 -#: src/usr/local/www/services_ntpd_gps.php:384 -#: src/usr/local/www/services_pppoe_edit.php:575 -#: src/usr/local/www/services_unbound.php:377 -msgid " " -msgstr "" - -#: src/usr/local/www/services_dhcp_edit.php:606 -#: src/usr/local/www/services_dhcpv6.php:773 +#: src/usr/local/www/services_dhcp_edit.php:610 +#: src/usr/local/www/services_dhcpv6.php:775 msgid "Enable registration of DHCP client names in DNS." msgstr "" @@ -31489,11 +31719,11 @@ msgstr "" msgid "Change DHCPv6 display lease time from UTC to local time" msgstr "" -#: src/usr/local/www/services_dhcpv6.php:820 +#: src/usr/local/www/services_dhcpv6.php:822 msgid "Add reverse dynamic DNS entries." msgstr "" -#: src/usr/local/www/services_dhcpv6.php:892 +#: src/usr/local/www/services_dhcpv6.php:900 msgid "Enable Network Booting" msgstr "" @@ -31550,27 +31780,27 @@ msgstr "" msgid "Verify SSL peer" msgstr "" -#: src/usr/local/www/services_ntpd.php:312 +#: src/usr/local/www/services_ntpd.php:316 msgid "Enable RRD graphs of NTP statistics (default: disabled)." msgstr "" -#: src/usr/local/www/services_ntpd.php:319 +#: src/usr/local/www/services_ntpd.php:323 msgid "Log peer messages (default: disabled)." msgstr "" -#: src/usr/local/www/services_ntpd.php:326 +#: src/usr/local/www/services_ntpd.php:330 msgid "Log system messages (default: disabled)." msgstr "" -#: src/usr/local/www/services_ntpd.php:347 +#: src/usr/local/www/services_ntpd.php:353 msgid "Log reference clock statistics (default: disabled)." msgstr "" -#: src/usr/local/www/services_ntpd.php:354 +#: src/usr/local/www/services_ntpd.php:360 msgid "Log clock discipline statistics (default: disabled)." msgstr "" -#: src/usr/local/www/services_ntpd.php:361 +#: src/usr/local/www/services_ntpd.php:367 msgid "Log NTP peer statistics (default: disabled)." msgstr "" @@ -31685,6 +31915,10 @@ msgstr "" msgid "Assign IP Addresses to users via RADIUS server reply attributes" msgstr "" +#: src/usr/local/www/services_pppoe_edit.php:579 +msgid " " +msgstr "" + #: src/usr/local/www/services_rfc2136_edit.php:281 msgid "Use TCP instead of UDP" msgstr "" @@ -31703,7 +31937,7 @@ msgstr "" msgid "AAAA (IPv6)" msgstr "" -#: src/usr/local/www/services_router_advertisements.php:398 +#: src/usr/local/www/services_router_advertisements.php:429 msgid "Use same settings as DHCPv6 server" msgstr "" @@ -31739,23 +31973,23 @@ msgstr "" msgid "Regex" msgstr "" -#: src/usr/local/www/services_unbound.php:296 +#: src/usr/local/www/services_unbound.php:302 msgid "Enable DNS resolver" msgstr "" -#: src/usr/local/www/services_unbound.php:339 +#: src/usr/local/www/services_unbound.php:345 msgid "Enable DNSSEC Support" msgstr "" -#: src/usr/local/www/services_unbound.php:346 +#: src/usr/local/www/services_unbound.php:352 msgid "Enable Forwarding Mode" msgstr "" -#: src/usr/local/www/services_unbound.php:353 +#: src/usr/local/www/services_unbound.php:359 msgid "Register DHCP leases in the DNS Resolver" msgstr "" -#: src/usr/local/www/services_unbound.php:362 +#: src/usr/local/www/services_unbound.php:368 msgid "Register DHCP static mappings in the DNS Resolver" msgstr "" @@ -31784,7 +32018,7 @@ msgid "DNSSEC data is required for trust-anchored zones." msgstr "" #: src/usr/local/www/services_unbound_advanced.php:380 -msgid "disable the automatically-added access control entries" +msgid "Disable the automatically-added access control entries" msgstr "" #: src/usr/local/www/services_unbound_advanced.php:388 @@ -31814,137 +32048,141 @@ msgid "Formatted" msgstr "" #: src/usr/local/www/status_logs_common.inc:918 -#: src/usr/local/www/status_logs_settings.php:307 +#: src/usr/local/www/status_logs_settings.php:304 msgid "Log errors from the web server process" msgstr "" #: src/usr/local/www/status_logs_common.inc:929 -#: src/usr/local/www/status_logs_settings.php:279 +#: src/usr/local/www/status_logs_settings.php:276 msgid "Log packets matched from the default block rules in the ruleset" msgstr "" #: src/usr/local/www/status_logs_common.inc:936 -#: src/usr/local/www/status_logs_settings.php:286 +#: src/usr/local/www/status_logs_settings.php:283 msgid "Log packets matched from the default pass rules put in the ruleset" msgstr "" #: src/usr/local/www/status_logs_common.inc:943 -#: src/usr/local/www/status_logs_settings.php:293 +#: src/usr/local/www/status_logs_settings.php:290 msgid "Log packets blocked by 'Block Bogon Networks' rules" msgstr "" #: src/usr/local/www/status_logs_common.inc:950 -#: src/usr/local/www/status_logs_settings.php:300 +#: src/usr/local/www/status_logs_settings.php:297 msgid "Log packets blocked by 'Block Private Networks' rules" msgstr "" -#: src/usr/local/www/status_logs_settings.php:256 +#: src/usr/local/www/status_logs_settings.php:253 msgid "Show log entries in reverse order (newest entries on top)" msgstr "" -#: src/usr/local/www/status_logs_settings.php:314 +#: src/usr/local/www/status_logs_settings.php:311 msgid "Show raw filter logs" msgstr "" -#: src/usr/local/www/status_logs_settings.php:333 +#: src/usr/local/www/status_logs_settings.php:330 msgid "Disable writing log files to the local disk" msgstr "" -#: src/usr/local/www/status_logs_settings.php:349 +#: src/usr/local/www/status_logs_settings.php:348 msgid "Send log messages to remote syslog server" msgstr "" -#: src/usr/local/www/status_logs_settings.php:404 +#: src/usr/local/www/status_logs_settings.php:403 msgid "Everything" msgstr "" -#: src/usr/local/www/status_logs_settings.php:411 +#: src/usr/local/www/status_logs_settings.php:410 msgid "System Events" msgstr "" -#: src/usr/local/www/status_logs_settings.php:418 +#: src/usr/local/www/status_logs_settings.php:417 msgid "Firewall Events" msgstr "" -#: src/usr/local/www/status_logs_settings.php:425 +#: src/usr/local/www/status_logs_settings.php:424 msgid "DHCP service events" msgstr "" -#: src/usr/local/www/status_logs_settings.php:432 +#: src/usr/local/www/status_logs_settings.php:431 msgid "Portal Auth events" msgstr "" -#: src/usr/local/www/status_logs_settings.php:439 +#: src/usr/local/www/status_logs_settings.php:438 msgid "VPN (PPTP, IPsec, OpenVPN) events" msgstr "" -#: src/usr/local/www/status_logs_settings.php:446 +#: src/usr/local/www/status_logs_settings.php:445 msgid "Gateway Monitor events" msgstr "" -#: src/usr/local/www/status_logs_settings.php:453 +#: src/usr/local/www/status_logs_settings.php:452 msgid "Server Load Balancer events" msgstr "" -#: src/usr/local/www/status_logs_settings.php:460 +#: src/usr/local/www/status_logs_settings.php:459 msgid "Wireless events" msgstr "" -#: src/usr/local/www/system.php:446 +#: src/usr/local/www/system.php:450 msgid "Allow DNS server list to be overridden by DHCP/PPP on WAN" msgstr "" -#: src/usr/local/www/system.php:456 +#: src/usr/local/www/system.php:460 msgid "Do not use the DNS Forwarder as a DNS server for the firewall" msgstr "" -#: src/usr/local/www/system.php:546 +#: src/usr/local/www/system.php:566 msgid "Manage Log" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:398 +#: src/usr/local/www/system.php:573 +msgid "Monitoring Settings" +msgstr "" + +#: src/usr/local/www/system_advanced_admin.php:399 msgid "Disable webConfigurator redirect rule" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:407 +#: src/usr/local/www/system_advanced_admin.php:408 msgid "Enable webConfigurator login autocomplete" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:418 +#: src/usr/local/www/system_advanced_admin.php:419 msgid "Disable logging of webConfigurator successful logins" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:432 +#: src/usr/local/www/system_advanced_admin.php:433 msgid "Disable webConfigurator anti-lockout rule" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:445 +#: src/usr/local/www/system_advanced_admin.php:446 msgid "Disable DNS Rebinding Checks" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:465 +#: src/usr/local/www/system_advanced_admin.php:466 msgid "Disable HTTP_REFERER enforcement check" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:477 +#: src/usr/local/www/system_advanced_admin.php:478 msgid "Display page name first in browser tab" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:489 +#: src/usr/local/www/system_advanced_admin.php:490 msgid "Enable Secure Shell" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:496 +#: src/usr/local/www/system_advanced_admin.php:497 msgid "Disable password login for Secure Shell (RSA/DSA key only)" msgstr "" -#: src/usr/local/www/system_advanced_admin.php:518 +#: src/usr/local/www/system_advanced_admin.php:519 msgid "" "Enables the first serial port with 115200/8/N/1 by default, or another speed " "selectable below." msgstr "" -#: src/usr/local/www/system_advanced_admin.php:553 +#: src/usr/local/www/system_advanced_admin.php:554 msgid "Password protect the console menu" msgstr "" @@ -31983,47 +32221,47 @@ msgstr "" msgid "Disable Negate rule on policy routing rules" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:583 +#: src/usr/local/www/system_advanced_firewall.php:582 msgid "Verify HTTPS certificates when downloading alias URLs" msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:653 +#: src/usr/local/www/system_advanced_firewall.php:652 msgid "" -"Automatic creation of additional NAT redirect rules from within your " -"internal networks." +"Automatic creation of additional NAT redirect rules from within the internal " +"networks." msgstr "" -#: src/usr/local/www/system_advanced_firewall.php:664 +#: src/usr/local/www/system_advanced_firewall.php:663 msgid "" "Automatic create outbound NAT rules that direct traffic back out to the same " "subnet it originated from." msgstr "" -#: src/usr/local/www/system_advanced_misc.php:391 +#: src/usr/local/www/system_advanced_misc.php:408 msgid "Enable default gateway switching" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:403 +#: src/usr/local/www/system_advanced_misc.php:420 msgid "Enable PowerD" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:484 +#: src/usr/local/www/system_advanced_misc.php:501 msgid "Do not kill connections when schedule expires" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:496 +#: src/usr/local/www/system_advanced_misc.php:513 msgid "Flush all states when a gateway goes down" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:504 +#: src/usr/local/www/system_advanced_misc.php:521 msgid "Do not create rules when gateway is down" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:516 +#: src/usr/local/www/system_advanced_misc.php:533 msgid "Use memory file system for /tmp and /var" msgstr "" -#: src/usr/local/www/system_advanced_misc.php:585 +#: src/usr/local/www/system_advanced_misc.php:602 msgid "Do NOT send HOST UUID with user agent" msgstr "" @@ -32036,94 +32274,94 @@ msgstr "" msgid "Enable IPv4 NAT encapsulation of IPv6 packets" msgstr "" -#: src/usr/local/www/system_advanced_network.php:227 +#: src/usr/local/www/system_advanced_network.php:226 msgid "Prefer to use IPv4 even if IPv6 is available" msgstr "" -#: src/usr/local/www/system_advanced_network.php:238 +#: src/usr/local/www/system_advanced_network.php:237 msgid "Enable device polling" msgstr "" -#: src/usr/local/www/system_advanced_network.php:250 +#: src/usr/local/www/system_advanced_network.php:249 msgid "Disable hardware checksum offload" msgstr "" -#: src/usr/local/www/system_advanced_network.php:261 +#: src/usr/local/www/system_advanced_network.php:260 msgid "Disable hardware TCP segmentation offload" msgstr "" -#: src/usr/local/www/system_advanced_network.php:271 +#: src/usr/local/www/system_advanced_network.php:270 msgid "Disable hardware large receive offload" msgstr "" -#: src/usr/local/www/system_advanced_network.php:281 +#: src/usr/local/www/system_advanced_network.php:280 msgid "Suppress ARP messages" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:243 +#: src/usr/local/www/system_advanced_notifications.php:242 msgid "Disable Growl Notifications" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:294 +#: src/usr/local/www/system_advanced_notifications.php:292 msgid "Disable SMTP Notifications" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:320 +#: src/usr/local/www/system_advanced_notifications.php:318 msgid "Enable SMTP over SSL/TLS" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:327 +#: src/usr/local/www/system_advanced_notifications.php:325 msgid "Enable STARTTLS" msgstr "" -#: src/usr/local/www/system_advanced_notifications.php:386 +#: src/usr/local/www/system_advanced_notifications.php:383 msgid "Disable the startup/shutdown beep" msgstr "" -#: src/usr/local/www/system_authservers.php:507 +#: src/usr/local/www/system_authservers.php:573 msgid "" "No Certificate Authorities defined.<br/>Create one under <a href=" "\"system_camanager.php\">System > Cert. Manager</a>." msgstr "" -#: src/usr/local/www/system_authservers.php:559 +#: src/usr/local/www/system_authservers.php:625 msgid "Level " msgstr "" -#: src/usr/local/www/system_authservers.php:582 +#: src/usr/local/www/system_authservers.php:650 msgid "Enable extended query" msgstr "" -#: src/usr/local/www/system_authservers.php:601 +#: src/usr/local/www/system_authservers.php:669 msgid "Use anonymous binds to resolve distinguished names" msgstr "" -#: src/usr/local/www/system_authservers.php:662 +#: src/usr/local/www/system_authservers.php:730 msgid "LDAP Server uses RFC 2307 style group membership" msgstr "" -#: src/usr/local/www/system_authservers.php:680 +#: src/usr/local/www/system_authservers.php:748 msgid "UTF8 encode LDAP parameters before sending them to the server." msgstr "" -#: src/usr/local/www/system_authservers.php:688 +#: src/usr/local/www/system_authservers.php:756 msgid "Do not strip away parts of the username after the @ symbol" msgstr "" -#: src/usr/local/www/system_certmanager.php:697 +#: src/usr/local/www/system_certmanager.php:656 msgid "<a href=\"system_camanager.php?act=new&method=internal\"> " msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:318 +#: src/usr/local/www/system_gateway_groups_edit.php:347 msgid "" "The priority selected here defines in what order failover and balancing of " "links will be done. Multiple links of the same priority will balance " "connections until all links in the priority will be exhausted. If all links " -"in a priority level are exhausted we will use the next available link(s) in " -"the next priority level." +"in a priority level are exhausted then the next available link(s) in the " +"next priority level will be used." msgstr "" -#: src/usr/local/www/system_gateway_groups_edit.php:325 +#: src/usr/local/www/system_gateway_groups_edit.php:354 msgid "" "The virtual IP field selects which (virtual) IP should be used when this " "group applies to a local Dynamic DNS, IPsec or OpenVPN endpoint." @@ -32134,7 +32372,7 @@ msgid "Disable this gateway" msgstr "" #: src/usr/local/www/system_gateways_edit.php:661 -msgid "This will select the above gateway as the default gateway" +msgid "This will select the above gateway as the default gateway." msgstr "" #: src/usr/local/www/system_gateways_edit.php:668 @@ -32145,11 +32383,11 @@ msgstr "" msgid "Mark Gateway as Down" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:843 +#: src/usr/local/www/system_gateways_edit.php:827 msgid "<span class=\"help-block\">" msgstr "" -#: src/usr/local/www/system_gateways_edit.php:880 +#: src/usr/local/www/system_gateways_edit.php:864 msgid "Use non-local gateway through interface specific route." msgstr "" @@ -32235,22 +32473,31 @@ msgstr "" msgid "Disable this static route" msgstr "" -#: src/usr/local/www/system_update_settings.php:147 +#: src/usr/local/www/system_update_settings.php:178 msgid "Disable the automatic dashboard auto-update check" msgstr "" -#: src/usr/local/www/system_usermanager.php:621 +#: src/usr/local/www/system_update_settings.php:190 +msgid "Enable repository/branch sync before reboot" +msgstr "" + +#: src/usr/local/www/system_usermanager.php:622 msgid "This user cannot login" msgstr "" -#: src/usr/local/www/system_usermanager.php:734 +#: src/usr/local/www/system_usermanager.php:739 msgid "Click to create a user certificate" msgstr "" -#: src/usr/local/www/system_usermanager.php:825 +#: src/usr/local/www/system_usermanager.php:830 msgid "Click to paste an authorized key" msgstr "" +#: src/usr/local/www/system_usermanager_settings.php:249 +msgid "" +"<span id=\"ldaptestop\">Testing pfSense LDAP settings... One moment please..." +msgstr "" + #: src/usr/local/www/vpn_ipsec_mobile.php:507 msgid "Provide a virtual IP address to clients" msgstr "" @@ -32268,8 +32515,8 @@ msgid "Allow clients to save Xauth passwords (Cisco VPN client only)." msgstr "" #: src/usr/local/www/vpn_ipsec_mobile.php:595 -#: src/usr/local/www/vpn_openvpn_csc.php:452 -#: src/usr/local/www/vpn_openvpn_server.php:1018 +#: src/usr/local/www/vpn_openvpn_csc.php:456 +#: src/usr/local/www/vpn_openvpn_server.php:1023 msgid "Provide a default domain name to clients" msgstr "" @@ -32280,14 +32527,14 @@ msgid "" msgstr "" #: src/usr/local/www/vpn_ipsec_mobile.php:641 -#: src/usr/local/www/vpn_openvpn_csc.php:472 -#: src/usr/local/www/vpn_openvpn_server.php:1032 +#: src/usr/local/www/vpn_openvpn_csc.php:476 +#: src/usr/local/www/vpn_openvpn_server.php:1037 msgid "Provide a DNS server list to clients" msgstr "" #: src/usr/local/www/vpn_ipsec_mobile.php:666 -#: src/usr/local/www/vpn_openvpn_csc.php:564 -#: src/usr/local/www/vpn_openvpn_server.php:1119 +#: src/usr/local/www/vpn_openvpn_csc.php:568 +#: src/usr/local/www/vpn_openvpn_server.php:1124 msgid "Provide a WINS server list to clients" msgstr "" @@ -32301,35 +32548,35 @@ msgstr "" msgid "Provide a login banner to clients" msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:693 +#: src/usr/local/www/vpn_ipsec_phase1.php:691 msgid "" "Set this option to disable this phase1 without removing it from the list. " msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:864 +#: src/usr/local/www/vpn_ipsec_phase1.php:862 msgid "Disables renegotiation when a connection is about to expire." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:871 +#: src/usr/local/www/vpn_ipsec_phase1.php:869 msgid "" "Whether rekeying of an IKE_SA should also reauthenticate the peer. In IKEv1, " "reauthentication is always done." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:878 +#: src/usr/local/www/vpn_ipsec_phase1.php:876 msgid "" "Enable this option to never initiate this connection from this side, only " "respond to incoming requests." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:900 +#: src/usr/local/www/vpn_ipsec_phase1.php:898 msgid "" "Enable this to split connection entries with multiple phase 2 " "configurations. Required for remote endpoints that support only a single " "traffic selector per child SA." msgstr "" -#: src/usr/local/www/vpn_ipsec_phase1.php:926 +#: src/usr/local/www/vpn_ipsec_phase1.php:924 msgid "Enable DPD" msgstr "" @@ -32369,19 +32616,19 @@ msgstr "" msgid "Enable bypass for LAN interface IP" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:246 +#: src/usr/local/www/vpn_l2tp.php:243 msgid "Enable LT2P server" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:332 +#: src/usr/local/www/vpn_l2tp.php:329 msgid "Use a RADIUS server for authentication" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:339 +#: src/usr/local/www/vpn_l2tp.php:336 msgid "Enable RADIUS accounting" msgstr "" -#: src/usr/local/www/vpn_l2tp.php:359 +#: src/usr/local/www/vpn_l2tp.php:356 msgid "Issue IP Addresses via RADIUS server." msgstr "" @@ -32424,30 +32671,30 @@ msgstr "" msgid "Don't add or remove routes automatically" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:359 +#: src/usr/local/www/vpn_openvpn_csc.php:363 msgid "Disable this override" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:380 +#: src/usr/local/www/vpn_openvpn_csc.php:384 msgid "Block this client connection based on its common name. " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:433 +#: src/usr/local/www/vpn_openvpn_csc.php:437 #: src/usr/local/www/vpn_openvpn_server.php:902 msgid "Force all client generated traffic through the tunnel." msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:445 +#: src/usr/local/www/vpn_openvpn_csc.php:449 msgid "Prevent this client from receiving any server-defined client settings. " msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:513 -#: src/usr/local/www/vpn_openvpn_server.php:1074 +#: src/usr/local/www/vpn_openvpn_csc.php:517 +#: src/usr/local/www/vpn_openvpn_server.php:1079 msgid "Provide an NTP server list to clients" msgstr "" -#: src/usr/local/www/vpn_openvpn_csc.php:541 -#: src/usr/local/www/vpn_openvpn_server.php:1095 +#: src/usr/local/www/vpn_openvpn_csc.php:545 +#: src/usr/local/www/vpn_openvpn_server.php:1100 msgid "Enable NetBIOS over TCP/IP" msgstr "" @@ -32476,19 +32723,19 @@ msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:995 msgid "" "Allow connected clients to retain their connections if their IP address " -"changes" +"changes." msgstr "" #: src/usr/local/www/vpn_openvpn_server.php:1002 -msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)" +msgid "Provide a virtual adapter IP address to clients (see Tunnel Network)." msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1067 +#: src/usr/local/www/vpn_openvpn_server.php:1072 msgid "" "Run \"net stop dnscache\", \"net start dnscache\", \"ipconfig /flushdns\" " "and \"ipconfig /registerdns\" on connection initiation." msgstr "" -#: src/usr/local/www/vpn_openvpn_server.php:1140 +#: src/usr/local/www/vpn_openvpn_server.php:1145 msgid "Use a different management port for clients." msgstr "" diff --git a/src/usr/local/share/pfSense/pre_upgrade_command b/src/usr/local/share/pfSense/pre_upgrade_command index 8c141a4..e36a2e8 100644 --- a/src/usr/local/share/pfSense/pre_upgrade_command +++ b/src/usr/local/share/pfSense/pre_upgrade_command @@ -12,6 +12,55 @@ echo $PRIOR_VERSION > /tmp/pre_upgrade_version # De-activate sync on the root slice only. This will not match NanoBSD since it already has sync,noatime /usr/bin/sed -i '' 's/^\(\/.*[[:space:]]*\/[[:space:]]*ufs[[:space:]]*\)rw,sync\([[:space:]]*[[:digit:]][[:space:]]*[[:digit:]]\)$/\1rw\2/' /etc/fstab +# Uninstall all packages before upgrade to 2.3 +PFSENSE_VERSION=$(cat /etc/version) + +if echo "$PFSENSE_VERSION" | grep -q '^1.2'; then + UNINSTALL="uninstall_package_from_name" +else + UNINSTALL="uninstall_package" +fi + +cat >/tmp/remove_all_packages.php <<EOD +#!/usr/local/bin/php +<?php + +require_once("pkg-utils.inc"); + +global \$pkg_interface; +\$pkg_interface = "console"; + +if (!isset(\$config['installedpackages']['package'])) { + exit(0); +} + +if (!is_array(\$config['installedpackages']['package'])) { + exit(0); +} + +\$removed_packages = array(); +foreach (\$config['installedpackages']['package'] as \$package) { + if (isset(\$package['internal_name'])) { + \$removed_packages[] = \$package['internal_name']; + } else { + \$rename_arr = array("Quagga OSPF" => "Quagga_OSPF", "System Patches" => "System_Patches"); + if (key_exists(\$package['name'], \$rename_arr)) { + \$removed_packages[] = \$rename_arr[\$package['name']]; + } else { + \$removed_packages[] = \$package['name']; + } + } + ${UNINSTALL}(\$package['name']); +} + +@file_put_contents("{\$g['cf_conf_path']}/packages_to_reinstall_after_upgrade.txt", implode("\\n",\$removed_packages)); + +?> +EOD + +/usr/local/bin/php /tmp/remove_all_packages.php +rm -f /tmp/remove_all_packages.php + # Cleanup PBIs if which pbi_info >/dev/null 2>&1; then for pbi in $(pbi_info); do diff --git a/src/usr/local/share/pfSense/ssl/openssl.cnf b/src/usr/local/share/pfSense/ssl/openssl.cnf new file mode 100644 index 0000000..6119a73 --- /dev/null +++ b/src/usr/local/share/pfSense/ssl/openssl.cnf @@ -0,0 +1,398 @@ +# $FreeBSD$ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# + +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . +RANDFILE = $ENV::HOME/.rnd + +# pfSense: default SAN value if $ENV::SAN is not defined +# +SAN = + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +# Policies used by the TSA examples. +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several ctificates with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key +RANDFILE = $dir/private/.rand # private random number file + +x509_extensions = usr_cert # The extentions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +prompt = no +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extentions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString (PKIX recommendation before 2004) +# utf8only: only UTF8Strings (PKIX recommendation after 2004). +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. +string_mask = nombstr + +req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = AU +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Some-State + +localityName = Locality Name (eg, city) + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = Internet Widgits Pty Ltd + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +challengePassword_min = 4 +challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated User Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always +extendedKeyUsage=clientAuth + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This is required for TSA certificates. +# extendedKeyUsage = critical,timeStamping + +[ usr_cert_san ] + +# copy of [ usr_cert ] plus nonempty Subject Alternative Names +basicConstraints = CA:FALSE +nsComment = "OpenSSL Generated User Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +extendedKeyUsage = clientAuth +subjectAltName = $ENV::SAN + +[ server ] + +# Make a cert with nsCertType=server +basicConstraints = CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +extendedKeyUsage = serverAuth,1.3.6.1.5.5.8.2.2 +keyUsage = digitalSignature, keyEncipherment + +[ server_san ] + +# copy of [ server ] plus nonempty Subject Alternative Names +basicConstraints = CA:FALSE +nsCertType = server +nsComment = "OpenSSL Generated Server Certificate" +subjectKeyIdentifier = hash +authorityKeyIdentifier = keyid,issuer:always +extendedKeyUsage = serverAuth,1.3.6.1.5.5.8.2.2 +keyUsage = digitalSignature, keyEncipherment +subjectAltName = $ENV::SAN + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer:always + +# This is what PKIX recommends but some broken software chokes on critical +# extensions. +#basicConstraints = critical,CA:true +# So we do this instead. +basicConstraints = CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ v3_ca_san ] + +# copy of [ v3_ca ] plus nonempty Subject Alternative Names +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer:always +basicConstraints=CA:true +subjectAltName=$ENV::SAN + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always,issuer:always + +[ proxy_cert_ext ] +# These extensions should be added when creating a proxy certificate + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This really needs to be in place for it to be a proxy certificate. +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo + +#################################################################### +[ tsa ] + +default_tsa = tsa_config1 # the default TSA section + +[ tsa_config1 ] + +# These are used by the TSA reply generation only. +dir = ./demoCA # TSA root directory +serial = $dir/tsaserial # The current serial number (mandatory) +crypto_device = builtin # OpenSSL engine to use for signing +signer_cert = $dir/tsacert.pem # The TSA signing certificate + # (optional) +certs = $dir/cacert.pem # Certificate chain to include in reply + # (optional) +signer_key = $dir/private/tsakey.pem # The TSA private key (optional) + +default_policy = tsa_policy1 # Policy if request did not specify it + # (optional) +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) +digests = md5, sha1 # Acceptable message digests (mandatory) +accuracy = secs:1, millisecs:500, microsecs:100 # (optional) +clock_precision_digits = 0 # number of digits after dot. (optional) +ordering = yes # Is ordering defined for timestamps? + # (optional, default: no) +tsa_name = yes # Must the TSA name be included in the reply? + # (optional, default: no) +ess_cert_id_chain = no # Must the ESS cert id chain be included? + # (optional, default: no) diff --git a/src/usr/local/www/classes/Form/Checkbox.class.php b/src/usr/local/www/classes/Form/Checkbox.class.php index d94c210..0601779 100644 --- a/src/usr/local/www/classes/Form/Checkbox.class.php +++ b/src/usr/local/www/classes/Form/Checkbox.class.php @@ -66,6 +66,6 @@ class Form_Checkbox extends Form_Input if (!isset($this->_description)) return $input; - return '<label>'. $input .' '. htmlspecialchars(gettext($this->_description)) .'</label>'; + return '<label class="chkboxlbl">'. $input .' '. htmlspecialchars(gettext($this->_description)) .'</label>'; } }
\ No newline at end of file diff --git a/src/usr/local/www/classes/Form/Input.class.php b/src/usr/local/www/classes/Form/Input.class.php index 4cdfb28..036a1df 100644 --- a/src/usr/local/www/classes/Form/Input.class.php +++ b/src/usr/local/www/classes/Form/Input.class.php @@ -246,7 +246,7 @@ class Form_Input extends Form_Element if (isset($this->_help)) { /* Strings longer than this will break gettext. */ - if (strlen($this->_help) < 7620) { + if (strlen($this->_help) < 4096) { $help = gettext($this->_help); } else { $help = $this->_help; diff --git a/src/usr/local/www/classes/Form/IpAddress.class.php b/src/usr/local/www/classes/Form/IpAddress.class.php index be2f4c1..72f885f 100644 --- a/src/usr/local/www/classes/Form/IpAddress.class.php +++ b/src/usr/local/www/classes/Form/IpAddress.class.php @@ -31,11 +31,23 @@ class Form_IpAddress extends Form_Input { protected $_mask; - public function __construct($name, $title, $value) + public function __construct($name, $title, $value, $type = "BOTH") { parent::__construct($name, $title, 'text', $value); - $this->_attributes['pattern'] = '[a-f0-9:.]*'; + switch ($type) { + case "BOTH": + $this->_attributes['pattern'] = '[a-f0-9:.]*'; + break; + + case "V4": + $this->_attributes['pattern'] = '[a-f0-9.]*'; + break; + + case "V6": + $this->_attributes['pattern'] = '[a-f0-9:]*'; + break; + } } // $min is provided to allow for VPN masks in which '0' is valid @@ -58,7 +70,7 @@ class Form_IpAddress extends Form_Input return parent::setIsRepeated(); } - + protected function _getInput() { $input = parent::_getInput(); diff --git a/src/usr/local/www/crash_reporter.php b/src/usr/local/www/crash_reporter.php index 3542d96..e8918b3 100644 --- a/src/usr/local/www/crash_reporter.php +++ b/src/usr/local/www/crash_reporter.php @@ -96,7 +96,7 @@ $crash_report_header .= php_uname("r") . "\n"; $crash_report_header .= php_uname("v") . "\n"; $crash_report_header .= "\nCrash report details:\n"; -exec("/usr/bin/grep -vi warning /tmp/PHP_errors.log", $php_errors); +exec("/bin/cat /tmp/PHP_errors.log", $php_errors); if ($_POST['Submit'] == "Yes") { echo gettext("Processing..."); diff --git a/src/usr/local/www/css/Compact-RED.css b/src/usr/local/www/css/Compact-RED.css new file mode 100644 index 0000000..7c88722 --- /dev/null +++ b/src/usr/local/www/css/Compact-RED.css @@ -0,0 +1,139 @@ + +/* Compact-RED theme for pfSense by PiBa-NL */ + +@import url("/css/pfSense.css"); + +body { + font-size: 12px; +} + +.form-control { + font-size: 12px; +} + +.container.fixed { + padding-top: 40px; +} + +/* navigation */ +.navbar { + margin-bottom: 2px; + min-height:30px; +} + +.navbar-inverse { + background-color: #600; +} + +.navbar-brand > img { + max-height: 26px; +} + +.navbar-brand { + padding: 2px 0 0 5px; + height: 30px; +} + +.navbar-inverse .navbar-nav >li>a { + border-bottom: 5px solid #212121; + color: #fff; +} +.navbar-inverse .navbar-nav >li>a:hover{ + color: #ccc; +} +.text-muted { + color: #BDBDBD; +} +.text-muted > a:hover { + color: #ccc; +} + +.nav>li>a { + padding: 5px 19px 0px 19px; +} +.navbar-inverse .navbar-nav >li>a { + border-bottom: 5px solid #600; +} + +.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover { + color: #fff; + background-color: #600; +} +.nav-pills { + margin-bottom: 0px; +} + +.dropdown-menu>li>a { + padding: 0px 20px; +} + +.navbar-right>li>a { + padding: 2px 15px 1px 15px; +} + +.navbar-toggle { + margin-top:0px; + margin-bottom:0px; +} +.panel-default>.panel-heading { + background-color: #900; +} + +.form-control { + margin-bottom: 2px; +} + +.form-group { + padding: 2px 5px 2px 5px; +} +.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th { + padding:2px; +} + +.header .context-links { + top: 1px; +} + +.breadcrumb { + margin-bottom: 2px; + padding: 0px 15px; + font-size: 14px; +} + +/** Page footer */ +.footer { + height: 40px; + background-color: #600; +} + +.btn +{ + padding: 2px 12px; +} + +.dropdown-menu { + font-size:12px; +} + +.form-horizontal .checkbox { + padding: 2px 16px; +} + +.chkboxlbl { + padding-top: 0px; +} + +.form-horizontal .checkbox,.form-horizontal .radio { + min-height:20px; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 4px; + } +} + +/* Experimental styles to correct vertical alignment in forms */ +.col-sm-10 { + padding-top: 0px; +}
\ No newline at end of file diff --git a/src/usr/local/www/css/pfSense.css b/src/usr/local/www/css/pfSense.css index 9f62caa..71ad28a 100644 --- a/src/usr/local/www/css/pfSense.css +++ b/src/usr/local/www/css/pfSense.css @@ -276,7 +276,7 @@ tr.disabled th { margin: 10px 0 20px 0; box-shadow: 0px 1px 10px rgba(0,0,0,.3); margin-bottom: 10px; - background-color: #E0E0E0; + background-color: #E0E0E0; } .header .context-links { @@ -474,7 +474,7 @@ footer a { .bg-info { color: #01579B; - background-color: #E1F5FE; + background-color: #B3E5FC; } .bg-danger { @@ -489,7 +489,7 @@ footer a { .bg-success { color: #1B5E20; - background-color: #E8F5E9; + background-color: #C8E6C9; } .btn-success { @@ -792,8 +792,8 @@ ul.tree li .over{ width: 50%; } - .breadcrumb li:not(:last-child), .breadcrumb>li+li:before { - display: none; + .breadcrumb li:not(:last-child), .breadcrumb>li+li:before { + display: none; } } @@ -905,4 +905,13 @@ svg { #chart .nvtooltip > h3 { font-size: 14px; -}
\ No newline at end of file +} + +/* Experimental styles to correct vertical alignment in forms */ +.col-sm-10 { + padding-top: 7px; +} + +.chkboxlbl { + padding-top: 4px; +} diff --git a/src/usr/local/www/diag_arp.php b/src/usr/local/www/diag_arp.php index 91c2063..69bc740 100644 --- a/src/usr/local/www/diag_arp.php +++ b/src/usr/local/www/diag_arp.php @@ -387,7 +387,7 @@ events.push(function() { <div class="infoblock blockopen"> <?php -print_info_box(gettext("Local IPv6 peers use ") . '<a href="diag_ndp.php">' . gettext("NDP") . '</a>' . gettext(" instead of ARP"), 'info', false); +print_info_box(gettext("Local IPv6 peers use ") . '<a href="diag_ndp.php">' . gettext("NDP") . '</a>' . gettext(" instead of ARP."), 'info', false); ?> </div> diff --git a/src/usr/local/www/diag_authentication.php b/src/usr/local/www/diag_authentication.php index 5e6813a..1cfe158 100644 --- a/src/usr/local/www/diag_authentication.php +++ b/src/usr/local/www/diag_authentication.php @@ -125,7 +125,7 @@ $section->addInput(new Form_Select( 'Authentication Server', $pconfig['authmode'], $serverlist -))->setHelp('Select the authentication server to test against'); +))->setHelp('Select the authentication server to test against.'); $section->addInput(new Form_Input( 'username', diff --git a/src/usr/local/www/diag_command.php b/src/usr/local/www/diag_command.php index 660fab6..2562e9c 100644 --- a/src/usr/local/www/diag_command.php +++ b/src/usr/local/www/diag_command.php @@ -71,7 +71,7 @@ $allowautocomplete = true; require("guiconfig.inc"); -if (($_POST['submit'] == "DOWNLOAD") && file_exists($_POST['dlPath'])) { +if ($_POST['submit'] == "DOWNLOAD" && file_exists($_POST['dlPath'])) { session_cache_limiter('public'); $fd = fopen($_POST['dlPath'], "rb"); header("Content-Type: application/octet-stream"); @@ -88,10 +88,9 @@ if (($_POST['submit'] == "DOWNLOAD") && file_exists($_POST['dlPath'])) { fpassthru($fd); exit; -} else if (($_POST['submit'] == "UPLOAD") && is_uploaded_file($_FILES['ulfile']['tmp_name'])) { +} else if ($_POST['submit'] == "UPLOAD" && is_uploaded_file($_FILES['ulfile']['tmp_name'])) { move_uploaded_file($_FILES['ulfile']['tmp_name'], "/tmp/" . $_FILES['ulfile']['name']); $ulmsg = sprintf(gettext('Uploaded file to /tmp/%s.'), htmlentities($_FILES['ulfile']['name'])); - unset($_POST['txtCommand']); } if ($_POST) { @@ -221,7 +220,7 @@ if (isBlank($_POST['txtCommand']) && isBlank($_POST['txtPHPCommand']) && isBlank print_callout(gettext("The capabilities offered here can be dangerous. No support is available. Use them at your own risk!"), 'danger', gettext('Advanced Users Only')); } -if (!isBlank($_POST['txtCommand'])):?> +if ($_POST['submit'] == "EXEC" && !isBlank($_POST['txtCommand'])):?> <div class="panel panel-success responsive"> <div class="panel-heading"><h2 class="panel-title"><?=sprintf(gettext('Shell Output - %s'), htmlspecialchars($_POST['txtCommand']))?></h2></div> <div class="panel-body"> @@ -253,7 +252,7 @@ if (!isBlank($_POST['txtCommand'])):?> <button type="button" class="btn btn-success btn-sm" name="btnRecallPrev" onclick="btnRecall_onClick( this.form, -1 );" title="<?=gettext("Recall Previous Command")?>"> <i class="fa fa-angle-double-left"></i> </button> - <button type="submit" class="btn btn-warning btn-sm" value="EXEC" title="<?=gettext("Execute the entered command")?>"> + <button name="submit" type="submit" class="btn btn-warning btn-sm" value="EXEC" title="<?=gettext("Execute the entered command")?>"> <i class="fa fa-bolt"></i> <?=gettext("Execute"); ?> </button> @@ -304,7 +303,7 @@ if (!isBlank($_POST['txtCommand'])):?> <?php // Experimental version. Writes the user's php code to a file and executes it via a new instance of PHP // This is intended to prevent bad code from breaking the GUI - if (!isBlank($_POST['txtPHPCommand'])) { + if ($_POST['submit'] == "EXECPHP" && !isBlank($_POST['txtPHPCommand'])) { puts("<div class=\"panel panel-success responsive\"><div class=\"panel-heading\"><h2 class=\"panel-title\">PHP Response</h2></div>"); $tmpname = tempnam("/tmp", ""); @@ -344,7 +343,7 @@ if (!isBlank($_POST['txtCommand'])):?> <div class="content"> <textarea id="txtPHPCommand" placeholder="Command" name="txtPHPCommand" rows="9" cols="80"><?=htmlspecialchars($_POST['txtPHPCommand'])?></textarea> <br /> - <button type="submit" class="btn btn-warning btn-sm" value="<?=gettext("Execute")?>" title="<?=gettext("Execute this PHP Code")?>"> + <button name="submit" type="submit" class="btn btn-warning btn-sm" value="EXECPHP" title="<?=gettext("Execute this PHP Code")?>"> <i class="fa fa-bolt"></i> <?=gettext("Execute")?> </button> diff --git a/src/usr/local/www/diag_nanobsd.php b/src/usr/local/www/diag_nanobsd.php index 921ed2f..4627e79 100644 --- a/src/usr/local/www/diag_nanobsd.php +++ b/src/usr/local/www/diag_nanobsd.php @@ -174,11 +174,13 @@ if ($mounted_rw) { /* refcount_read returns -1 when shared memory section does not exist */ /* refcount can be zero here when the user has set nanobsd_force_rw */ /* refcount 1 is normal, so only display the count for abnormal values */ + /* if ($refcount == 1 || $refcount == 0 || $refcount == -1) { $refdisplay = ""; } else { $refdisplay = " ". sprintf(gettext("(Reference count %s)"), $refcount); } + */ $lbl = gettext("Read/Write") . $refdisplay; $btnlbl = gettext("Switch to Read-Only"); } else { @@ -188,6 +190,7 @@ if ($mounted_rw) { // Only show the changero button if force read/write is off, or the file system is not in writable state, or there is an unusual refcount. // If force read/write is on, and the file system is in writable state, and refcount is normal then the user has no reason to mess about. +/* if (!isset($config['system']['nanobsd_force_rw']) || !$mounted_rw || ($refcount > 1)) { $robtn = new Form_Button( 'changero', @@ -198,12 +201,14 @@ if (!isset($config['system']['nanobsd_force_rw']) || !$mounted_rw || ($refcount $robtn->addClass(($mounted_rw) ? 'btn-success' : 'btn-warning' . ' btn-sm'); $lbl .= ' ' . $robtn; } - +*/ $section->addInput(new Form_StaticText( 'Read/Write status', $lbl -))->setHelp('This setting is only temporary, and can be switched dynamically in the background.'); +))->setHelp('NanoBSD is now always read-write to avoid read-write to read-only mount problems.'); +//))->setHelp('This setting is only temporary, and can be switched dynamically in the background.'); +/* $section->addInput(new Form_Checkbox( 'nanobsd_force_rw', 'Permanent Read/Write', @@ -223,6 +228,7 @@ $section->addInput(new Form_StaticText( null, $permbtn )); +*/ $section->addInput(new Form_Input( 'destslice', diff --git a/src/usr/local/www/diag_packet_capture.php b/src/usr/local/www/diag_packet_capture.php index fa1b545..9659e84 100644 --- a/src/usr/local/www/diag_packet_capture.php +++ b/src/usr/local/www/diag_packet_capture.php @@ -318,9 +318,10 @@ $section->addInput(new Form_Select( $section->addInput(new Form_Checkbox( 'promiscuous', 'Promiscuous', - 'Packet capture will be performed using promiscuous mode', + 'Enable promiscuous mode', $promiscuous -))->setHelp('Note: Some network adapters do not support or work well in promiscuous mode.'. '<br />' . +))->setHelp('The packet capture will be performed using promiscuous mode.<br />' . + 'Note: Some network adapters do not support or work well in promiscuous mode.'. '<br />' . 'More: ' . '<a target="_blank" href="http://www.freebsd.org/cgi/man.cgi?query=tcpdump&apropos=0&sektion=0&manpath=FreeBSD+8.3-stable&arch=default&format=html">' . 'Packet capture' . '</a>'); @@ -332,7 +333,7 @@ $section->addInput(new Form_Select( 'ip' => gettext('IPv4 Only'), 'ip6' => gettext('IPv6 Only') ) -))->setHelp('Select the type of traffic to be captured'); +))->setHelp('Select the type of traffic to be captured.'); $section->addInput(new Form_Select( 'proto', @@ -392,7 +393,7 @@ $section->addInput(new Form_Checkbox( 'Reverse DNS Lookup', 'Do reverse DNS lookup', $_POST['dnsquery'] -))->setHelp('This check box will cause the packet capture to perform a reverse DNS lookup associated with all IP addresses.' . '<br />' . +))->setHelp('The packet capture will perform a reverse DNS lookup associated with all IP addresses.' . '<br />' . 'This option can cause delays for large packet captures.'); $form->add($section); diff --git a/src/usr/local/www/diag_ping.php b/src/usr/local/www/diag_ping.php index 7cf8301..e974a3d 100644 --- a/src/usr/local/www/diag_ping.php +++ b/src/usr/local/www/diag_ping.php @@ -179,14 +179,14 @@ $section->addInput(new Form_Select( 'Source address', $sourceip, array('' => gettext('Automatically selected (default)')) + get_possible_traffic_source_addresses(true) -))->setHelp('Select source address for the ping'); +))->setHelp('Select source address for the ping.'); $section->addInput(new Form_Select( 'count', 'Maximum number of pings', $count, array_combine(range(1, MAX_COUNT), range(1, MAX_COUNT)) -))->setHelp('Select the maximum number of pings'); +))->setHelp('Select the maximum number of pings.'); $form->add($section); diff --git a/src/usr/local/www/diag_resetstate.php b/src/usr/local/www/diag_resetstate.php index eb2e98c..a62ef67 100644 --- a/src/usr/local/www/diag_resetstate.php +++ b/src/usr/local/www/diag_resetstate.php @@ -101,7 +101,7 @@ $statetablehelp = sprintf(gettext('Resetting the state tables will remove all en 'will be broken and will have to be re-established. This may be necessary after making substantial changes to the ' . 'firewall and/or NAT rules, especially if there are IP protocol mappings (e.g. for PPTP or IPv6) with open connections.%s' . 'The firewall will normally leave the state tables intact when changing rules.%s' . - '%sNOTE:%s Resetting the firewall state table, may cause the browser session to appear hung after clicking "Reset". ' . + '%sNOTE:%s Resetting the firewall state table may cause the browser session to appear hung after clicking "Reset". ' . 'Simply refresh the page to continue.'), "<br /><br />", "<br /><br />", "<strong>", "</strong>"); $sourcetablehelp = sprintf(gettext('Resetting the source tracking table will remove all source/destination associations. ' . diff --git a/src/usr/local/www/diag_routes.php b/src/usr/local/www/diag_routes.php index 5ba3c2b..250c3f5 100644 --- a/src/usr/local/www/diag_routes.php +++ b/src/usr/local/www/diag_routes.php @@ -80,7 +80,7 @@ if (isset($_REQUEST['isAjax'])) { } if (!empty($_REQUEST['filter'])) { - $netstat .= " | /usr/bin/sed -e '1,3d; 5,\$ { /" . escapeshellarg(htmlspecialchars($_REQUEST['filter'])) . "/!d; };'"; + $netstat .= " | /usr/bin/sed -e " . escapeshellarg("1,3d; 5,\$ { /" . htmlspecialchars($_REQUEST['filter']) . "/!d; };"); } else { $netstat .= " | /usr/bin/sed -e '1,3d'"; } @@ -129,7 +129,7 @@ $section->addInput(new Form_Input( 'Filter', 'text', $host -))->setHelp('Use a regular expression to filter IP address or hostnames'); +))->setHelp('Use a regular expression to filter IP address or hostnames.'); $form->add($section); diff --git a/src/usr/local/www/diag_smart.php b/src/usr/local/www/diag_smart.php index baeef54..e7be8de 100644 --- a/src/usr/local/www/diag_smart.php +++ b/src/usr/local/www/diag_smart.php @@ -100,13 +100,21 @@ function add_colors($string) { // Edits smartd.conf file, adds or removes email for failed disk reporting function update_email($email) { + /* Bail if an e-mail address is invalid */ + if (!empty($email) && (filter_var($email, FILTER_VALIDATE_EMAIL) === false)) { + return; + } + + if (!file_exists("/usr/local/etc/smartd.conf") && file_exists("/usr/local/etc/smartd.conf.sample")) { + copy("/usr/local/etc/smartd.conf.sample", "/usr/local/etc/smartd.conf"); + } // Did they pass an email? if (!empty($email)) { // Put it in the smartd.conf file - shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN -H -m " . escapeshellarg($email) . "/' /usr/local/etc/smartd.conf"); + shell_exec("/usr/bin/sed -i .old " . escapeshellarg("s/^DEVICESCAN.*/DEVICESCAN -H -m {$email}/") . " /usr/local/etc/smartd.conf"); } else { // Remove email flags in smartd.conf - shell_exec("/usr/bin/sed -i old 's/^DEVICESCAN.*/DEVICESCAN/' /usr/local/etc/smartd.conf"); + shell_exec("/usr/bin/sed -i .old 's/^DEVICESCAN.*/DEVICESCAN/' /usr/local/etc/smartd.conf"); } } @@ -254,27 +262,27 @@ switch ($action) { smartmonctl("start"); $style = 'warning'; } else if (isset($_POST['save'])) { - $config['system']['smartmonemail'] = $_POST['smartmonemail']; - write_config(); - - // Don't know what all this means, but it adds the config changed header when config is saved - $retval = 0; - config_lock(); - if (stristr($retval, "error") != true) { - $savemsg = get_std_save_message($retval); - $style = 'success'; + if (!empty($_POST['smartmonemail']) && (filter_var($_POST['smartmonemail'], FILTER_VALIDATE_EMAIL) === false)) { + $savemsg = "The supplied e-mail address is invalid."; + $style = 'danger'; } else { - $savemsg = $retval; - $style='danger'; + $config['system']['smartmonemail'] = $_POST['smartmonemail']; + write_config(); + $retval = 0; + config_lock(); + if (stristr($retval, "error") != true) { + $savemsg = get_std_save_message($retval); + $style = 'success'; + } else { + $savemsg = $retval; + $style='danger'; + } + config_unlock(); + // Write the changes to the smartd.conf file + update_email($_POST['smartmonemail']); + // Send sig HUP to smartd, rereads the config file + shell_exec("/usr/bin/killall -HUP smartd"); } - - config_unlock(); - - // Write the changes to the smartd.conf file - update_email($_POST['smartmonemail']); - - // Send sig HUP to smartd, rereads the config file - shell_exec("/usr/bin/killall -HUP smartd"); } // Was the config changed? if so, print the message @@ -451,7 +459,7 @@ switch ($action) { 'conveyance' ))->displayAsRadio(); - $group->setHelp('Select "Conveyance" for ATA disks only'); + $group->setHelp('Select "Conveyance" for ATA disks only.'); $section->add($group); $section->addInput(new Form_Select( diff --git a/src/usr/local/www/diag_testport.php b/src/usr/local/www/diag_testport.php index 58444c0..f247b4e 100644 --- a/src/usr/local/www/diag_testport.php +++ b/src/usr/local/www/diag_testport.php @@ -285,7 +285,7 @@ $section->addInput(new Form_Select( 'Source Address', $sourceip, ['' => 'Any'] + get_possible_traffic_source_addresses(true) -))->setHelp('Select source address for the trace'); +))->setHelp('Select source address for the trace.'); $section->addInput(new Form_Select( 'ipprotocol', diff --git a/src/usr/local/www/diag_traceroute.php b/src/usr/local/www/diag_traceroute.php index b130871..342a723 100644 --- a/src/usr/local/www/diag_traceroute.php +++ b/src/usr/local/www/diag_traceroute.php @@ -160,21 +160,21 @@ $section->addInput(new Form_Select( 'IP Protocol', $ipproto, array('ipv4' => 'IPv4', 'ipv6' => 'IPv6') -))->setHelp('Select the protocol to use'); +))->setHelp('Select the protocol to use.'); $section->addInput(new Form_Select( 'sourceip', 'Source Address', $sourceip, array('any' => gettext('Any')) + get_possible_traffic_source_addresses(true) -))->setHelp('Select source address for the trace'); +))->setHelp('Select source address for the trace.'); $section->addInput(new Form_Select( 'ttl', - 'Maximum nuber of hops', + 'Maximum number of hops', $ttl, array_combine(range(1, MAX_TTL), range(1, MAX_TTL)) -))->setHelp('Select the maximum number of network hops to trace'); +))->setHelp('Select the maximum number of network hops to trace.'); $section->addInput(new Form_Checkbox( 'resolve', diff --git a/src/usr/local/www/firewall_aliases_edit.php b/src/usr/local/www/firewall_aliases_edit.php index 5d2ac60..ea60a73 100755 --- a/src/usr/local/www/firewall_aliases_edit.php +++ b/src/usr/local/www/firewall_aliases_edit.php @@ -175,16 +175,10 @@ if ($_POST) { do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); - $x = is_validaliasname($_POST['name']); - if (!isset($x)) { - $input_errors[] = gettext("Reserved word used for alias name."); - } else if ($_POST['type'] == "port" && (getservbyname($_POST['name'], "tcp") || getservbyname($_POST['name'], "udp"))) { - $input_errors[] = gettext("Reserved word used for alias name."); - } else { - if (is_validaliasname($_POST['name']) == false) { - $input_errors[] = sprintf(gettext("The alias name must be less than 32 characters long, may not consist of only numbers, may not consist of only underscores, and may only contain the following characters: %s"), 'a-z, A-Z, 0-9, _'); - } + if (!is_validaliasname($_POST['name'])) { + $input_errors[] = invalidaliasnamemsg($_POST['name']); } + /* check for name conflicts */ foreach ($a_aliases as $key => $alias) { if (($alias['name'] == $_POST['name']) && (empty($a_aliases[$id]) || ($key != $id))) { @@ -212,6 +206,7 @@ if ($_POST) { $address = array(); $final_address_details = array(); $alias['name'] = $_POST['name']; + $alias['type'] = $_POST['type']; if (preg_match("/urltable/i", $_POST['type'])) { $address = ""; @@ -225,7 +220,7 @@ if ($_POST) { $alias['updatefreq'] = $_POST['address_subnet0'] ? $_POST['address_subnet0'] : 7; if (!is_URL($alias['url']) || empty($alias['url'])) { $input_errors[] = gettext("A valid URL must be provided."); - } elseif (!process_alias_urltable($alias['name'], $alias['url'], 0, true, true)) { + } elseif (!process_alias_urltable($alias['name'], $alias['type'], $alias['url'], 0, true, true)) { $input_errors[] = gettext("Unable to fetch usable data from URL") . " " . htmlspecialchars($alias['url']); } if ($_POST["detail0"] <> "") { @@ -607,10 +602,13 @@ $help = array( // Tab type specific patterns. // Intentionally loose (valid character check only, no pattern recognition). -// Can be tightend up with pattern recognition as desired for each tab type. +// Can be tightened up with pattern recognition as desired for each tab type. +// Network and host types allow an optional CIDR following the address or an address range using dash separator, +// and there may be multiple items separated by spaces - "192.168.1.0/24 192.168.2.4-192.168.2.19" +// On submit, strings like that are parsed and expanded into the appropriate individual entries and then validated. $pattern_str = array( - 'network' => '[a-zA-Z0-9_:.-]+', // Alias Name, Host Name, IP Address, FQDN, Network or IP Address Range - 'host' => '[a-zA-Z0-9_:.-]+', // Alias Name, Host Name, IP Address, FQDN + 'network' => '[a-zA-Z0-9_:.-]+(/[0-9]+)?( [a-zA-Z0-9_:.-]+(/[0-9]+)?)*', // Alias Name, Host Name, IP Address, FQDN, Network or IP Address Range + 'host' => '[a-zA-Z0-9_:.-]+(/[0-9]+)?( [a-zA-Z0-9_:.-]+(/[0-9]+)?)*', // Alias Name, Host Name, IP Address, FQDN 'port' => '[a-zA-Z0-9_:]+', // Alias Name, Port Number, or Port Number Range 'url' => '.*', // Alias Name or URL 'url_ports' => '.*', // Alias Name or URL @@ -730,7 +728,7 @@ while ($counter < count($addresses)) { $group->add(new Form_IpAddress( 'address' . $counter, - 'Address', + $tab == 'port' ? 'Port':'Address', $address ))->addMask('address_subnet' . $counter, $address_subnet)->setWidth(4)->setPattern($pattern_str[$tab]); @@ -777,8 +775,12 @@ events.push(function() { disable_subnets = (tab == 'host') || (tab == 'port') || (tab == 'url') || (tab == 'url_ports'); + // Enable/disable address_subnet so its value gets POSTed or not, as appropriate. $("[id^='address_subnet']").prop("disabled", disable_subnets); + // Show or hide the slash plus address_subnet field so the user does not even see it if it is not relevant. + hideMask('address_subnet', disable_subnets); + // Set the help text to match the tab var helparray = <?=json_encode($help);?>; $('.helptext').html(helparray[tab]); diff --git a/src/usr/local/www/firewall_aliases_import.php b/src/usr/local/www/firewall_aliases_import.php index 77b2adf..9912948 100755 --- a/src/usr/local/www/firewall_aliases_import.php +++ b/src/usr/local/www/firewall_aliases_import.php @@ -94,8 +94,8 @@ if ($_POST['aliasimport'] != "") { do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); - if (is_validaliasname($_POST['name']) == false) { - $input_errors[] = sprintf(gettext("The alias name may only consist of the characters %s"), "a-z, A-Z, 0-9, _."); + if (!is_validaliasname($_POST['name'])) { + $input_errors[] = invalidaliasnamemsg($_POST['name']); } /* check for name duplicates */ @@ -216,7 +216,7 @@ $section->addInput(new Form_Textarea( $_POST["aliasimport"] ))->setHelp('Paste in the aliases to '. 'import separated by a carriage return. Common examples are lists of IPs, '. - 'networks, blacklists, etc.The list may contain IP addresses, with or without '. + 'networks, blacklists, etc. The list may contain IP addresses, with or without '. 'CIDR prefix, IP ranges, blank lines (ignored) and an optional description after '. 'each IP. e.g.:</span><ul><li>172.16.1.2</li><li>172.16.0.0/24</li><li>10.11.12.100-'. '10.11.12.200</li><li>192.168.1.254 Home router</li><li>10.20.0.0/16 Office '. diff --git a/src/usr/local/www/firewall_nat.php b/src/usr/local/www/firewall_nat.php index e7f370e..6158c02 100644 --- a/src/usr/local/www/firewall_nat.php +++ b/src/usr/local/www/firewall_nat.php @@ -264,11 +264,22 @@ foreach ($a_nat as $natent): display_separator($separators, $nnats, $columns_in_table); } + $localport = $natent['local-port']; + + list($dstbeginport, $dstendport) = explode("-", $natent['destination']['port']); + + if ($dstendport) { + $localendport = $natent['local-port'] + $dstendport - $dstbeginport; + $localport .= '-' . $localendport; + } + $alias = rule_columns_with_alias( $natent['source']['address'], pprint_port($natent['source']['port']), $natent['destination']['address'], - pprint_port($natent['destination']['port']) + pprint_port($natent['destination']['port']), + $natent['target'], + $localport ); /* if user does not have access to edit an interface skip on to the next record */ @@ -397,22 +408,40 @@ foreach ($a_nat as $natent): endif; ?> </td> + <td> +<?php + if (isset($alias['target'])): +?> + <a href="/firewall_aliases_edit.php?id=<?=$alias['target']?>" data-toggle="popover" data-trigger="hover focus" title="<?=gettext('Alias details')?>" data-content="<?=alias_info_popup($alias['target'])?>" data-html="true"> +<?php + endif; +?> - <td > <?=str_replace('_', ' ', htmlspecialchars($natent['target']))?> +<?php + if (isset($alias['target'])): +?> + </a> +<?php + endif; +?> </td> <td> <?php - $localport = $natent['local-port']; - - list($dstbeginport, $dstendport) = explode("-", $natent['destination']['port']); - - if ($dstendport) { - $localendport = $natent['local-port'] + $dstendport - $dstbeginport; - $localport .= '-' . $localendport; - } + if (isset($alias['targetport'])): +?> + <a href="/firewall_aliases_edit.php?id=<?=$alias['targetport']?>" data-toggle="popover" data-trigger="hover focus" title="<?=gettext('Alias details')?>" data-content="<?=alias_info_popup($alias['targetport'])?>" data-html="true"> +<?php + endif; ?> <?=str_replace('_', ' ', htmlspecialchars(pprint_port($localport)))?> +<?php + if (isset($alias['targetport'])): +?> + </a> +<?php + endif; +?> </td> <td> diff --git a/src/usr/local/www/firewall_nat_1to1.php b/src/usr/local/www/firewall_nat_1to1.php index 22aae72..4ec0a24 100644 --- a/src/usr/local/www/firewall_nat_1to1.php +++ b/src/usr/local/www/firewall_nat_1to1.php @@ -286,7 +286,7 @@ display_top_tabs($tab_array); <div class="infoblock"> <?php print_info_box(gettext('Depending on the way the WAN connection is setup, this may also need a ') . '<a href="firewall_virtual_ip.php">' . - gettext("Virtual IP") . '</a>' . '<br />' . + gettext("Virtual IP") . '</a>.' . '<br />' . gettext('If a 1:1 NAT entry is added for any of the interface IPs on this system, ' . 'it will make this system inaccessible on that IP address. i.e. if ' . 'the WAN IP address is used, any services on this system (IPsec, OpenVPN server, etc.) ' . diff --git a/src/usr/local/www/firewall_nat_edit.php b/src/usr/local/www/firewall_nat_edit.php index 3a77963..e36e33b 100644 --- a/src/usr/local/www/firewall_nat_edit.php +++ b/src/usr/local/www/firewall_nat_edit.php @@ -289,6 +289,10 @@ if ($_POST) { $input_errors[] = sprintf(gettext("\"%s\" is not a valid redirect target IP address or host alias."), $_POST['localip']); } + if ($_POST['localip'] && is_ipaddrv6($_POST['localip'])) { + $input_errors[] = sprintf(gettext("Redirect target IP must be IPv4.")); + } + if ($_POST['srcbeginport'] && !is_portoralias($_POST['srcbeginport'])) { $input_errors[] = sprintf(gettext("%s is not a valid start source port. It must be a port alias or integer between 1 and 65535."), $_POST['srcbeginport']); } @@ -316,6 +320,9 @@ if ($_POST) { if (($_POST['src'] && !is_ipaddroralias($_POST['src']))) { $input_errors[] = sprintf(gettext("%s is not a valid source IP address or alias."), $_POST['src']); } + if ($_POST['src'] && is_ipaddrv6($_POST['src'])) { + $input_errors[] = sprintf(gettext("Source must be IPv4.")); + } if (($_POST['srcmask'] && !is_numericint($_POST['srcmask']))) { $input_errors[] = gettext("A valid source bit count must be specified."); } @@ -325,6 +332,9 @@ if ($_POST) { if (($_POST['dst'] && !is_ipaddroralias($_POST['dst']))) { $input_errors[] = sprintf(gettext("%s is not a valid destination IP address or alias."), $_POST['dst']); } + if ($_POST['dst'] && is_ipaddrv6($_POST['dst'])) { + $input_errors[] = sprintf(gettext("Destination must be IPv4.")); + } if (($_POST['dstmask'] && !is_numericint($_POST['dstmask']))) { $input_errors[] = gettext("A valid destination bit count must be specified."); } @@ -597,6 +607,9 @@ function build_dsttype_list() { if (is_array($config['virtualip']['vip'])) { foreach ($config['virtualip']['vip'] as $sn) { + if (is_ipaddrv6($sn['subnet'])) { + continue; + } if ($sn['mode'] == "proxyarp" && $sn['type'] == "network") { if (isset($sn['noexpand'])) { continue; diff --git a/src/usr/local/www/firewall_nat_npt_edit.php b/src/usr/local/www/firewall_nat_npt_edit.php index 907b55a..4ce89be 100644 --- a/src/usr/local/www/firewall_nat_npt_edit.php +++ b/src/usr/local/www/firewall_nat_npt_edit.php @@ -245,7 +245,8 @@ $section->addInput(new Form_Checkbox( $section->addInput(new Form_IpAddress( 'src', 'Address', - $pconfig['src'] + $pconfig['src'], + 'V6' ))->addMask('srcmask', $pconfig['srcmask'])->setHelp('Internal (LAN) ULA IPv6 Prefix for the Network Prefix translation. ' . 'The prefix size specified for the internal IPv6 prefix will be applied to the external prefix.'); @@ -259,7 +260,8 @@ $section->addInput(new Form_Checkbox( $section->addInput(new Form_IpAddress( 'dst', 'Address', - $pconfig['dst'] + $pconfig['dst'], + 'V6' ))->addMask('dstmask', $pconfig['dstmask'])->setHelp('Global Unicast routable IPv6 prefix'); $section->addInput(new Form_Input( diff --git a/src/usr/local/www/firewall_nat_out_edit.php b/src/usr/local/www/firewall_nat_out_edit.php index c713988..c0c448a 100644 --- a/src/usr/local/www/firewall_nat_out_edit.php +++ b/src/usr/local/www/firewall_nat_out_edit.php @@ -717,6 +717,9 @@ events.push(function() { if ($('#destination_type').find(":selected").val() == "network") { disableInput('destination', false); disableInput('destination_subnet', false); + $('#destination, #source').autocomplete({ + source: addressarray + }); } else { $('#destination').val(""); disableInput('destination', true); @@ -801,7 +804,7 @@ events.push(function() { source: addressarray }); - $('#dstbeginport_cust, #sourceport, #destination, #dstport').autocomplete({ + $('#sourceport, #dstport').autocomplete({ source: customarray }); }); diff --git a/src/usr/local/www/firewall_rules.php b/src/usr/local/www/firewall_rules.php index 641e50d..4b24d6b 100644 --- a/src/usr/local/www/firewall_rules.php +++ b/src/usr/local/www/firewall_rules.php @@ -660,8 +660,8 @@ foreach ($a_filter as $filteri => $filterent): $sched_caption_escaped . '" data-html="true">'; $schedule_span_end = "</a>"; } + $idx++; } - $idx++; } $printicon = false; $alttext = ""; @@ -889,7 +889,7 @@ if ($seprows[$nrules]) { } printf(gettext("%sClick the anchor icon %s to move checked rules before the clicked row. Hold down " . - "the shift key and click to move the rules after the clicked row"), '<br /><br />', '<i class="fa fa-anchor"></i>') + "the shift key and click to move the rules after the clicked row."), '<br /><br />', '<i class="fa fa-anchor"></i>') ?> </div> </div> diff --git a/src/usr/local/www/firewall_rules_edit.php b/src/usr/local/www/firewall_rules_edit.php index 49d93f6..39cc9f0 100644 --- a/src/usr/local/www/firewall_rules_edit.php +++ b/src/usr/local/www/firewall_rules_edit.php @@ -2065,7 +2065,7 @@ events.push(function() { // ---------- Autocomplete -------------------------------------------------------------------- - var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "urltable"))) ?>; + var addressarray = <?= json_encode(get_alias_list(array("host", "network", "openvpn", "url", "urltable"))) ?>; var customarray = <?= json_encode(get_alias_list(array("port", "url_ports", "urltable_ports"))) ?>; $('#src, #dst').autocomplete({ diff --git a/src/usr/local/www/firewall_schedule_edit.php b/src/usr/local/www/firewall_schedule_edit.php index 5ef540e..2a81be7 100644 --- a/src/usr/local/www/firewall_schedule_edit.php +++ b/src/usr/local/www/firewall_schedule_edit.php @@ -125,13 +125,8 @@ if ($_POST) { $input_errors[] = gettext("Schedule name cannot be blank."); } - $x = is_validaliasname($_POST['name']); - if (!isset($x)) { - $input_errors[] = gettext("Reserved word used for schedule name."); - } else { - if (is_validaliasname($_POST['name']) == false) { - $input_errors[] = sprintf(gettext("The schedule name must be less than 32 characters long, may not consist of only numbers, may not consist of only underscores, and may only contain the following characters: %s"), 'a-z, A-Z, 0-9, _'); - } + if (!is_validaliasname($_POST['name'])) { + $input_errors[] = invalidaliasnamemsg($_POST['name'], gettext("schedule")); } /* check for name conflicts */ @@ -629,21 +624,21 @@ if ($getSchedule) { null, 'text', $tempFriendlyTime - ))->setWidth(2)->setHelp($counter == $maxrows ? 'Day(s)':''); + ))->setWidth(2)->setReadonly()->setHelp($counter == $maxrows ? 'Day(s)':''); $group->add(new Form_Input( 'starttime' . $counter, null, 'text', $starttime - ))->setWidth(2)->setHelp($counter == $maxrows ? 'Start time':''); + ))->setWidth(2)->setReadonly()->setHelp($counter == $maxrows ? 'Start time':''); $group->add(new Form_Input( 'stoptime' . $counter, null, 'text', $stoptime - ))->setWidth(2)->setHelp($counter == $maxrows ? 'Stop time':''); + ))->setWidth(2)->setReadonly()->setHelp($counter == $maxrows ? 'Stop time':''); $group->add(new Form_Input( 'timedescr' . $counter, @@ -1132,15 +1127,15 @@ function insertElements(tempFriendlyTime, starttimehour, starttimemin, stoptimeh '<div class="form-group schedulegrp' + counter + '">' + '<label for="tempFriendlyTime@" class="col-sm-2 control-label"></label>' + '<div class="col-sm-2">' + - '<input class="form-control" name="tempFriendlyTime@" id="tempFriendlyTime@" type="text" value="' + tempFriendlyTime + '"/>' + + '<input class="form-control" name="tempFriendlyTime@" id="tempFriendlyTime@" type="text" readonly="readonly" value="' + tempFriendlyTime + '"/>' + '<span class="help-block">Day(s)</span>' + '</div>' + '<div class="col-sm-2">' + - '<input class="form-control" name="starttime@" id="starttime@" type="text" value="' + starttimehour + ':' + starttimemin + '"/>' + + '<input class="form-control" name="starttime@" id="starttime@" type="text" readonly="readonly" value="' + starttimehour + ':' + starttimemin + '"/>' + '<span class="help-block">Start time</span>' + '</div>' + '<div class="col-sm-2">' + - '<input class="form-control" name="stoptime@" id="stoptime@" type="text" value="' + stoptimehour + ':' + stoptimemin + '"/>' + + '<input class="form-control" name="stoptime@" id="stoptime@" type="text" readonly="readonly" value="' + stoptimehour + ':' + stoptimemin + '"/>' + '<span class="help-block">Stop time</span>' + '</div>' + '<div class="col-sm-2">' + diff --git a/src/usr/local/www/firewall_shaper_queues.php b/src/usr/local/www/firewall_shaper_queues.php index 283f776..1c6964b 100644 --- a/src/usr/local/www/firewall_shaper_queues.php +++ b/src/usr/local/www/firewall_shaper_queues.php @@ -91,6 +91,7 @@ foreach ($qlist as $queue => $qkey) { } } $tree .= "</ul>"; +$output = ""; if ($_GET) { if ($_GET['queue']) { diff --git a/src/usr/local/www/firewall_shaper_vinterface.php b/src/usr/local/www/firewall_shaper_vinterface.php index 0830382..6a87e75 100644 --- a/src/usr/local/www/firewall_shaper_vinterface.php +++ b/src/usr/local/www/firewall_shaper_vinterface.php @@ -257,7 +257,7 @@ if ($_POST) { if ($addnewpipe) { if (!empty($dummynet_pipe_list[$qname])) { - $input_errors[] = gettext("A child queue cannot be named the same as a parent limiter"); + $input_errors[] = gettext("A child queue cannot be named the same as a parent limiter."); } else { $dnpipe =& new dnpipe_class(); @@ -283,7 +283,7 @@ if ($_POST) { } } else if ($parentqueue) { /* Add a new queue */ if (!empty($dummynet_pipe_list[$qname])) { - $input_errors[] = gettext("A child queue cannot be named the same as a parent limiter"); + $input_errors[] = gettext("A child queue cannot be named the same as a parent limiter."); } else if ($dnpipe) { $tmppath =& $dnpipe->GetLink(); array_push($tmppath, $qname); @@ -432,9 +432,7 @@ display_top_tabs($tab_array); <td> <?php -if ($dfltmsg) { - print_info_box($dn_default_shaper_msg, 'info'); -} else { +if (!$dfltmsg) { // Add global buttons if (!$dontshow || $newqueue) { if ($can_add && ($action != "add")) { @@ -481,7 +479,17 @@ if ($dfltmsg) { </tbody> </table> </div> - +<?php +if ($dfltmsg) { +?> +<div> + <div class="infoblock"> + <?php print_info_box($dn_default_shaper_msg, 'info', false); ?> + </div> +</div> +<?php +} +?> <script type="text/javascript"> //<![CDATA[ events.push(function() { diff --git a/src/usr/local/www/guiconfig.inc b/src/usr/local/www/guiconfig.inc index 7e1645a..578364b 100644 --- a/src/usr/local/www/guiconfig.inc +++ b/src/usr/local/www/guiconfig.inc @@ -1129,7 +1129,7 @@ function alias_info_popup($alias_id) { return $content; } -function rule_columns_with_alias($src, $srcport, $dst, $dstport) { +function rule_columns_with_alias($src, $srcport, $dst, $dstport, $target="", $targetport="") { global $config; if ($config['aliases']['alias'] == "" || !is_array($config['aliases']['alias'])) { @@ -1150,6 +1150,12 @@ function rule_columns_with_alias($src, $srcport, $dst, $dstport) { if ($alias_name['name'] == $dstport) { $columns['dstport'] = $alias_id; } + if ($alias_name['name'] == $target) { + $columns['target'] = $alias_id; + } + if ($alias_name['name'] == $targetport) { + $columns['targetport'] = $alias_id; + } } return $columns; diff --git a/src/usr/local/www/head.inc b/src/usr/local/www/head.inc index 4aa2963..8c3b980 100644 --- a/src/usr/local/www/head.inc +++ b/src/usr/local/www/head.inc @@ -74,7 +74,7 @@ if (isset($config['system']['webgui']['webguicss'])) { } } -// set default colmns to two if unset +// set default columns to two if unset if (!isset($config['system']['webgui']['dashboardcolumns'])) { $config['system']['webgui']['dashboardcolumns'] = 2; } @@ -285,6 +285,7 @@ $services_menu = array(); $services_menu[] = array(gettext("Captive Portal"), "/services_captiveportal.php"); $services_menu[] = array(gettext("DNS Forwarder"), "/services_dnsmasq.php"); $services_menu[] = array(gettext("DNS Resolver"), "/services_unbound.php"); +$services_menu[] = array(gettext("DNS Resolver Overrides"), "/services_unbound_overrides.php"); $services_menu[] = array(gettext("DHCP Relay"), "/services_dhcp_relay.php"); $services_menu[] = array(gettext("DHCPv6 Relay"), "/services_dhcpv6_relay.php"); @@ -444,7 +445,7 @@ if (($pagename === "index.php") && ($numColumns > 2)) { <span class="icon-bar"></span> <span class="icon-bar"></span> </button> - <a class="navbar-brand" href="/"><img src="/logo.png" alt="pfSense" /></a> + <a class="navbar-brand" href="/"><img src="/logo.png" alt="pfSense" title="<?=$config['system']['hostname'] . '.' . $config['system']['domain']?>"/></a> </div> <div class="collapse navbar-collapse" id="pf-navbar"> <ul class="nav navbar-nav"> @@ -665,10 +666,10 @@ if (are_notices_pending()):?> <li> <b> <?php if (!empty($notice['url'])):?> - <a href="<?=$notice['url']?>"><?=$notice['id']?></a> - + <a href="<?=htmlspecialchars($notice['url'])?>"><?=htmlspecialchars($notice['id'])?></a> - <?php endif;?> </b> - <?=$notice['notice']?> + <?=htmlspecialchars($notice['notice'])?> <i>@ <?=date('Y-m-d H:i:s', $notice['time'])?></i> </li> <?php endforeach;?> diff --git a/src/usr/local/www/index.php b/src/usr/local/www/index.php index f53769d..1f2eac0 100644 --- a/src/usr/local/www/index.php +++ b/src/usr/local/www/index.php @@ -90,7 +90,7 @@ if ($g['disablecrashreporter'] != true) { // Check to see if we have a crash report $x = 0; if (file_exists("/tmp/PHP_errors.log")) { - $total = `/usr/bin/grep -vi warning /tmp/PHP_errors.log | /usr/bin/wc -l | /usr/bin/awk '{ print $1 }'`; + $total = `/bin/cat /tmp/PHP_errors.log | /usr/bin/wc -l | /usr/bin/awk '{ print $1 }'`; if ($total > 0) { $x++; } diff --git a/src/usr/local/www/interfaces.php b/src/usr/local/www/interfaces.php index dc7814f..9a76f94 100644 --- a/src/usr/local/www/interfaces.php +++ b/src/usr/local/www/interfaces.php @@ -456,7 +456,7 @@ if ($_POST['apply']) { /* call interface_track6_configure with linkup true so IPv6 IPs are added back. dhcp6c needs a HUP. Can't just call interface_configure with linkup true as - that skips bridge membership addition. + that skips bridge membership addition. */ $wancfg = $config['interfaces'][$ifapply]; interface_track6_configure($ifapply, $wancfg, true); @@ -1788,7 +1788,7 @@ if (count($mediaopts_list) > 0) { $section->addInput(new Form_Select( 'mediaopt', 'Speed and Duplex', - rtrim($mediaopt_from_config), + rtrim($config['interfaces'][$if]['media'] . ' ' . $config['interfaces'][$if]['mediaopt']), build_mediaopts_list() ))->setHelp('Explicitly set speed and duplex mode for this interface.' . '<br />' . 'WARNING: MUST be set to autoselect (automatically negotiate speed) unless the port this interface connects to has its speed and duplex forced.'); @@ -1822,7 +1822,7 @@ $group->add(new Form_Button( ))->setAttribute('type','button')->addClass('btn-success')->setAttribute('data-target', '#newgateway')->setAttribute('data-toggle', 'modal'); $group->setHelp('If this interface is an Internet connection, select an existing Gateway from the list or add a new one using the "Add" button.' . '<br />' . - 'On local LANs the upstream gateway should be "none". ' . + 'On local area network interfaces the upstream gateway should be "none". ' . gettext('Gateways can be managed by ') . '<a target="_blank" href="system_gateways.php">' . gettext(" clicking here") . '</a>.'); $section->add($group); @@ -2454,7 +2454,7 @@ $section->addInput(new Form_Select( 'IPv6 Interface', $pconfig['track6-interface'], build_ipv6interface_list() -))->setHelp('selects the dynamic IPv6 WAN interface to track for configuration'); +))->setHelp('Selects the dynamic IPv6 WAN interface to track for configuration.'); if ($pconfig['track6-prefix-id'] == "") { $pconfig['track6-prefix-id'] = 0; @@ -2521,7 +2521,7 @@ $section->addInput(new Form_Input( 'Phone number', 'text', $pconfig['phone'] -))->setHelp('Typically *99# for GSM networks and #777 for CDMA networks'); +))->setHelp('Typically *99# for GSM networks and #777 for CDMA networks.'); $section->addInput(new Form_Input( 'apn', @@ -2561,7 +2561,7 @@ $section->addInput(new Form_Button( 'Advanced PPP', isset($pconfig['pppid']) ? 'interfaces_ppps_edit.php?id=' . htmlspecialchars($pconfig['pppid']) : 'interfaces_ppps_edit.php', 'fa-cog' -))->setAttribute('type','button')->addClass('btn-info')->setAttribute('id')->setHelp('Create a new PPP configuration'); +))->setAttribute('type','button')->addClass('btn-info')->setAttribute('id')->setHelp('Create a new PPP configuration.'); $form->add($section); @@ -2588,7 +2588,7 @@ $section->addInput(new Form_Input( 'Service name', 'text', $pconfig['provider'] -))->setHelp('This field can usually be left empty'); +))->setHelp('This field can usually be left empty.'); $section->addInput(new Form_Checkbox( 'pppoe_dialondemand', @@ -2612,7 +2612,7 @@ $section->addInput(new Form_Select( 'Periodic reset', $pconfig['pppoe-reset-type'], ['' => gettext('Disabled'), 'custom' => gettext('Custom'), 'preset' => gettext('Pre-set')] -))->setHelp('Select a reset timing type'); +))->setHelp('Select a reset timing type.'); $group = new Form_Group('Custom reset'); $group->addClass('pppoecustom'); @@ -2633,7 +2633,6 @@ $group->add(new Form_Input( [min => 0, max => 59] ))->setHelp('Minutes (0-59)'); -// ToDo: Need a date-picker here $group->add(new Form_Input( 'pppoe_resetdate', null, @@ -3671,6 +3670,8 @@ events.push(function() { setPresets($('input[name=adv_dhcp_pt_values]:checked').val()); }); + $('#pppoe_resetdate').datepicker(); + }); //]]> </script> diff --git a/src/usr/local/www/interfaces_assign.php b/src/usr/local/www/interfaces_assign.php index 3b82106..73d4839 100644 --- a/src/usr/local/www/interfaces_assign.php +++ b/src/usr/local/www/interfaces_assign.php @@ -500,11 +500,11 @@ if (file_exists("/var/run/interface_mismatch_reboot_needed")) { $savemsg = gettext("The system is now rebooting. Please wait."); $class = "success"; } else { - $savemsg = gettext("Reboot is needed. Please apply the settings in order to reboot."); + $applymsg = gettext("Reboot is needed. Please apply the settings in order to reboot."); $class = "warning"; } } else { - $savemsg = gettext("Interface mismatch detected. Please resolve the mismatch and click 'Apply Changes'. The firewall will reboot afterwards."); + $applymsg = gettext("Interface mismatch detected. Please resolve the mismatch and click 'Apply Changes'. The firewall will reboot afterwards."); $class = "warning"; } } @@ -513,6 +513,8 @@ if (file_exists("/tmp/reload_interfaces")) { echo "<p>\n"; print_apply_box(gettext("The interface configuration has been changed.") . "<br />" . gettext("The changes must be applied for them to take effect.")); echo "<br /></p>\n"; +} elseif ($applymsg) { + print_apply_box($applymsg); } elseif ($savemsg) { print_info_box($savemsg, $class); } diff --git a/src/usr/local/www/interfaces_bridge_edit.php b/src/usr/local/www/interfaces_bridge_edit.php index 59e19c9..438c930 100644 --- a/src/usr/local/www/interfaces_bridge_edit.php +++ b/src/usr/local/www/interfaces_bridge_edit.php @@ -435,7 +435,7 @@ $section->addInput(new Form_Select( $memberslist['selected'], $memberslist['list'], true // Allow multiples -))->setHelp('Interfaces participating in the bridge'); +))->setHelp('Interfaces participating in the bridge.'); $section->addInput(new Form_Input( 'descr', @@ -470,14 +470,14 @@ $section->addInput(new Form_Input( 'Cache Size', 'text', $pconfig['maxaddr'] -))->setHelp('Set the size of the bridge address cache. The default is 2000 entries'); +))->setHelp('Set the size of the bridge address cache. The default is 2000 entries.'); $section->addInput(new Form_Input( 'timeout', 'Cache expire time', 'text', $pconfig['timeout'] -))->setHelp('Set the timeout of address cache entries to this number of seconds. If seconds is zero, then address cache entries will not be expired. The default is 1200 seconds'); +))->setHelp('Set the timeout of address cache entries to this number of seconds. If seconds is zero, then address cache entries will not be expired. The default is 1200 seconds.'); $spanlist = build_port_list($pconfig['span']); @@ -487,7 +487,7 @@ $section->addInput(new Form_Select( $spanlist['selected'], $spanlist['list'], true -))->setHelp('Add the interface named by interface as a span port on the bridge. Span ports transmit a copy of every frame received by the bridge.' . +))->setHelp('Add the interface named by interface as a span port on the bridge. Span ports transmit a copy of every frame received by the bridge. ' . 'This is most useful for snooping a bridged network passively on another host connected to one of the span ports of the bridge. <br />' . '%sThe span interface cannot be part of the bridge member interfaces.%s', ['<strong>', '</strong>']); @@ -584,7 +584,7 @@ $section->addInput(new Form_Select( $edgelist['selected'], $edgelist['list'], true -))->setHelp('Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has support for the IEEE 802.1D Spanning Tree Protocol (STP).' . +))->setHelp('Enable Spanning Tree Protocol on interface. The if_bridge(4) driver has support for the IEEE 802.1D Spanning Tree Protocol (STP). ' . 'STP is used to detect and remove loops in a network topology.'); $section->addInput(new Form_Input( @@ -609,7 +609,7 @@ $section->addInput(new Form_Input( 'number', $pconfig['hellotime'], ['placeholder' => 2, 'min' => 1, 'max' => 2, 'step' => '0.1'] -))->setHelp('Set the time in seconds between broadcasting of Spanning Tree Protocol configuration messages. The hello time may only be changed when operating in legacy STP mode.' . +))->setHelp('Set the time in seconds between broadcasting of Spanning Tree Protocol configuration messages. The hello time may only be changed when operating in legacy STP mode. ' . 'The default is 2 seconds. The minimum is 1 second and the maximum is 2 seconds.'); $section->addInput(new Form_Input( diff --git a/src/usr/local/www/interfaces_gif_edit.php b/src/usr/local/www/interfaces_gif_edit.php index e602070..43d3a4b 100644 --- a/src/usr/local/www/interfaces_gif_edit.php +++ b/src/usr/local/www/interfaces_gif_edit.php @@ -238,7 +238,7 @@ $section->addInput(new Form_Select( 'GIF tunnel subnet', $pconfig['tunnel-remote-net'], array_combine(range(128, 1, -1), range(128, 1, -1)) -))->setHelp('The subnet is used for determining the network that is tunnelled'); +))->setHelp('The subnet is used for determining the network that is tunnelled.'); $section->addInput(new Form_Checkbox( 'link0', diff --git a/src/usr/local/www/interfaces_gre_edit.php b/src/usr/local/www/interfaces_gre_edit.php index 3e379ab..637f806 100644 --- a/src/usr/local/www/interfaces_gre_edit.php +++ b/src/usr/local/www/interfaces_gre_edit.php @@ -234,7 +234,7 @@ $section->addInput(new Form_Select( 'GRE tunnel subnet', $pconfig['tunnel-remote-net'], array_combine(range(128, 1, -1), range(128, 1, -1)) -))->setHelp('The subnet is used for determining the network that is tunnelled'); +))->setHelp('The subnet is used for determining the network that is tunnelled.'); $section->addInput(new Form_Checkbox( 'link0', diff --git a/src/usr/local/www/interfaces_groups_edit.php b/src/usr/local/www/interfaces_groups_edit.php index 4fcaab6..cae5fb8 100644 --- a/src/usr/local/www/interfaces_groups_edit.php +++ b/src/usr/local/www/interfaces_groups_edit.php @@ -206,19 +206,6 @@ if ($input_errors) { ?> <div id="inputerrors"></div> <?php -$tab_array = array(); -$tab_array[0] = array(gettext("Interface Assignments"), false, "interfaces_assign.php"); -$tab_array[1] = array(gettext("Interface Groups"), true, "interfaces_groups.php"); -$tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php"); -$tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php"); -$tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php"); -$tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php"); -$tab_array[7] = array(gettext("GRE"), false, "interfaces_gre.php"); -$tab_array[8] = array(gettext("GIF"), false, "interfaces_gif.php"); -$tab_array[9] = array(gettext("Bridges"), false, "interfaces_bridge.php"); -$tab_array[10] = array(gettext("LAGG"), false, "interfaces_lagg.php"); -display_top_tabs($tab_array); - $form = new Form; $section = new Form_Section('Interface Group Configuration'); @@ -229,7 +216,7 @@ $section->addInput(new Form_Input( $pconfig['ifname'], ['placeholder' => 'Group Name'] ))->setWidth(6)->setHelp('No numbers or spaces are allowed. '. - 'Only characters in a-zA-Z'); + 'Only characters: a-zA-Z'); $section->addInput(new Form_Input( 'descr', @@ -238,7 +225,7 @@ $section->addInput(new Form_Input( $pconfig['descr'], ['placeholder' => 'Group Description'] ))->setWidth(6)->setHelp('A group description may be entered '. - 'here for administrative reference (not parsed)'); + 'here for administrative reference (not parsed).'); $section->addInput(new Form_Select( 'members', diff --git a/src/usr/local/www/interfaces_lagg_edit.php b/src/usr/local/www/interfaces_lagg_edit.php index 926ef3e..f82d99f 100644 --- a/src/usr/local/www/interfaces_lagg_edit.php +++ b/src/usr/local/www/interfaces_lagg_edit.php @@ -77,7 +77,7 @@ $protohelp = '<li>' . '<strong>' . $laggprotosuc[0] . '</strong><br />' . gettext('This protocol is intended to do nothing: it disables any ' . - 'traffic without disabling the lagg interface itself') . + 'traffic without disabling the lagg interface itself.') . '</li>' . '<li>' . '<strong>' . $laggprotosuc[1] . '</strong><br />' . @@ -113,13 +113,13 @@ $protohelp = 'does not negotiate aggregation with the peer or exchange ' . 'frames to monitor the link. The hash includes the Ethernet ' . 'source and destination address, and, if available, the VLAN ' . - 'tag, and the IP source and destination address') . + 'tag, and the IP source and destination address.') . '</li>' . '<li>' . '<strong>' . $laggprotosuc[5] . '</strong><br />' . gettext('Distributes outgoing traffic using a round-robin scheduler ' . 'through all active ports and accepts incoming traffic from ' . - 'any active port') . + 'any active port.') . '</li>' . '</ul>'; @@ -288,7 +288,7 @@ $section->addInput(new Form_Input( 'Description', 'text', $pconfig['descr'] -))->setHelp("Enter a description here for reference only. (Not parsed)"); +))->setHelp("Enter a description here for reference only (Not parsed)."); $section->addInput(new Form_Input( 'laggif', diff --git a/src/usr/local/www/interfaces_ppps_edit.php b/src/usr/local/www/interfaces_ppps_edit.php index 4d282bd..a451e80 100644 --- a/src/usr/local/www/interfaces_ppps_edit.php +++ b/src/usr/local/www/interfaces_ppps_edit.php @@ -97,7 +97,9 @@ if (isset($_POST['id']) && is_numericint($_POST['id'])) { if (isset($id) && $a_ppps[$id]) { $pconfig['ptpid'] = $a_ppps[$id]['ptpid']; - $pconfig['type'] = $a_ppps[$id]['type']; + if (!isset($_REQUEST['type'])) { + $pconfig['type'] = $a_ppps[$id]['type']; + } $pconfig['interfaces'] = explode(",", $a_ppps[$id]['ports']); $pconfig['username'] = $a_ppps[$id]['username']; $pconfig['password'] = base64_decode($a_ppps[$id]['password']); @@ -396,8 +398,6 @@ if (isset($_POST) && is_array($_POST) && count($_POST) > 0) { } $ppp['phone'] = $_POST['phone']; - $ppp['localip'] = implode(',', $port_data['localip']); - $ppp['gateway'] = implode(',', $port_data['gateway']); if (!empty($_POST['connect-timeout'])) { $ppp['connect-timeout'] = $_POST['connect-timeout']; } else { @@ -861,7 +861,7 @@ $section->addInput(new Form_Input( 'Idle Timeout', 'text', $pconfig['idletimeout'] -))->setHelp('If no incoming or outgoing packets are transmitted for the entered number of seconds the connection is brought down.' . +))->setHelp('If no incoming or outgoing packets are transmitted for the entered number of seconds the connection is brought down.' . " " . 'When the idle timeout occurs, if the dial-on-demand option is enabled, mpd goes back into dial-on-demand mode. ' . 'Otherwise, the interface is brought down and all associated routes removed.'); @@ -871,7 +871,7 @@ $section->addInput(new Form_Checkbox( 'Disable vjcomp (compression, auto-negotiated by default).', $pconfig['vjcomp'] ))->setHelp('Disable vjcomp(compression) (auto-negotiated by default).' . '<br />' . - 'This option enables Van Jacobson TCP header compression, which saves several bytes per TCP data packet.' . + 'This option enables Van Jacobson TCP header compression, which saves several bytes per TCP data packet.' . " " . 'This option is almost always required. Compression is not effective for TCP connections with enabled modern extensions like time ' . 'stamping or SACK, which modify TCP options between sequential packets.'); @@ -1202,6 +1202,8 @@ events.push(function() { if ($('providerplan').size() == 0) { hideInput('providerplan', true); } + + $('#pppoe_resetdate').datepicker(); }); //]]> diff --git a/src/usr/local/www/interfaces_qinq_edit.php b/src/usr/local/www/interfaces_qinq_edit.php index 6c4d04c..ae98a76 100644 --- a/src/usr/local/www/interfaces_qinq_edit.php +++ b/src/usr/local/www/interfaces_qinq_edit.php @@ -280,7 +280,7 @@ $section->addInput(new Form_Checkbox( 'Option(s)', 'Adds interface to QinQ interface groups', $pconfig['autogroup'] -))->setHelp('Allows rules to be written more easily'); +))->setHelp('Allows rules to be written more easily.'); $section->addInput(new Form_Input( 'descr', @@ -292,7 +292,7 @@ $section->addInput(new Form_Input( $section->addInput(new Form_StaticText( 'Member(s)', 'Ranges can be specified in the inputs below. Enter a range (2-3) or individual numbers.' . '<br />' . - 'Click "Duplicate" as many times as needed to add new inputs' + 'Click "Duplicate" as many times as needed to add new inputs.' )); if (isset($id) && $a_qinqs[$id]) { diff --git a/src/usr/local/www/js/pfSenseHelpers.js b/src/usr/local/www/js/pfSenseHelpers.js index a675cc6..dadcf9f 100644 --- a/src/usr/local/www/js/pfSenseHelpers.js +++ b/src/usr/local/www/js/pfSenseHelpers.js @@ -138,6 +138,19 @@ function hideLabel(text, hide) { element.parent('div').removeClass('hidden'); } +// Hides the '/' and the subnet mask of an Ip_Address/subnet_mask group +function hideMask(name, hide) { + if(hide) { + $('[id^=' + name + ']').hide(); + $('[id^=' + name + ']').prev('span').hide(); + $('[id^=' + name + ']').parent('div').removeClass('input-group'); + } else { + $('[id^=' + name + ']').show(); + $('[id^=' + name + ']').prev('span').show(); + $('[id^=' + name + ']').parent('div').addClass('input-group'); + } +} + // Toggle table row checkboxes and background colors on the pages that use sortable tables: // /usr/local/www/firewall_nat.php // /usr/local/www/firewall_nat_1to1.php diff --git a/src/usr/local/www/load_balancer_virtual_server_edit.php b/src/usr/local/www/load_balancer_virtual_server_edit.php index 9e49154..97ea70b 100644 --- a/src/usr/local/www/load_balancer_virtual_server_edit.php +++ b/src/usr/local/www/load_balancer_virtual_server_edit.php @@ -234,7 +234,7 @@ $section->addInput(new Form_Input( 'number', $pconfig['port'] ))->setHelp('Port that the clients will connect to. All connections to this port will be forwarded to the pool cluster. ' . - 'If left blank listening ports from the pool will be used.' . + 'If left blank listening ports from the pool will be used.' . " " . 'A port alias listed in Firewall -> Aliases may also be specified here.'); if (count($config['load_balancer']['lbpool']) == 0) { diff --git a/src/usr/local/www/pkg.php b/src/usr/local/www/pkg.php index 2a34885..c06d613 100755 --- a/src/usr/local/www/pkg.php +++ b/src/usr/local/www/pkg.php @@ -515,18 +515,23 @@ if ($savemsg) { } else if ($column['type'] == "interface") { echo $column['prefix'] . $iflist[$fieldname] . $column['suffix']; } else { + $display_text = ""; #Check if columnitem has an encoding field declared if ($column['encoding'] == "base64") { - echo $column['prefix'] . base64_decode($fieldname) . $column['suffix']; + $display_text = $column['prefix'] . base64_decode($fieldname) . $column['suffix']; #Check if there is a custom info to show when $fieldname is not empty } else if ($column['listmodeon'] && $fieldname != "") { - echo $column['prefix'] . gettext($column['listmodeon']). $column['suffix']; + $display_text = $column['prefix'] . gettext($column['listmodeon']). $column['suffix']; #Check if there is a custom info to show when $fieldname is empty } else if ($column['listmodeoff'] && $fieldname == "") { - echo $column['prefix'] .gettext($column['listmodeoff']). $column['suffix']; + $display_text = $column['prefix'] .gettext($column['listmodeoff']). $column['suffix']; } else { - echo $column['prefix'] . $fieldname ." ". $column['suffix']; + $display_text = $column['prefix'] . $fieldname ." ". $column['suffix']; } + if (!isset($column['allow_html'])) { + $display_text = htmlspecialchars($display_text); + } + echo $display_text; } ?> </td> diff --git a/src/usr/local/www/pkg_edit.php b/src/usr/local/www/pkg_edit.php index 651f115..1048f34 100644 --- a/src/usr/local/www/pkg_edit.php +++ b/src/usr/local/www/pkg_edit.php @@ -301,7 +301,7 @@ function bootstrapTable($text) { * the specified element to $group */ function display_row($trc, $value, $fieldname, $type, $rowhelper, $description, $ewidth = null) { - global $text, $group; + global $text, $group, $config; switch ($type) { case "input": diff --git a/src/usr/local/www/pkg_mgr.php b/src/usr/local/www/pkg_mgr.php index 7ce9821..6eb6bc8 100644 --- a/src/usr/local/www/pkg_mgr.php +++ b/src/usr/local/www/pkg_mgr.php @@ -144,7 +144,7 @@ function get_pkg_table() { $pkgtbl .= '</td>' . "\n"; $pkgtbl .= '<td>' . "\n"; - $pkgtbl .= '<a title="' . gettext("Click to install") . '" href="pkg_mgr_install.php?id=' . $index['name'] . '" class="btn btn-success btn-sm"><i class="fa fa-plus icon-embed-btn"></i>Install</a>' . "\n"; + $pkgtbl .= '<a title="' . gettext("Click to install") . '" href="pkg_mgr_install.php?pkg=' . $index['name'] . '" class="btn btn-success btn-sm"><i class="fa fa-plus icon-embed-btn"></i>Install</a>' . "\n"; if (!$g['disablepackageinfo'] && $index['pkginfolink'] && $index['pkginfolink'] != $index['www']) { $pkgtbl .= '<a target="_blank" title="' . gettext("View more information") . '" href="' . htmlspecialchars($index['pkginfolink']) . '" class="btn btn-default btn-sm">info</a>' . "\n"; diff --git a/src/usr/local/www/pkg_mgr_install.php b/src/usr/local/www/pkg_mgr_install.php index 10d58f3..fe683b5 100644 --- a/src/usr/local/www/pkg_mgr_install.php +++ b/src/usr/local/www/pkg_mgr_install.php @@ -10,29 +10,29 @@ * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. + * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. * * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgment: - * "This product includes software developed by the pfSense Project - * for use in the pfSense software distribution. (http://www.pfsense.org/). + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution. (http://www.pfsense.org/). * * 4. The names "pfSense" and "pfSense Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * coreteam@pfsense.org. + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. * * 5. Products derived from this software may not be called "pfSense" - * nor may "pfSense" appear in their names without prior written - * permission of the Electric Sheep Fencing, LLC. + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. * * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: + * acknowledgment: * * "This product includes software developed by the pfSense Project * for use in the pfSense software distribution (http://www.pfsense.org/). @@ -97,6 +97,14 @@ if ($_REQUEST['ajax']) { $response = ""; $code = 0; + // If this is an ajax call to get the installed and newst versions, call that function, + // JSON encode the result, print it and exit + if ($_REQUEST['getversion']) { + $firmwareversions = get_system_pkg_version(true); + print(json_encode($firmwareversions)); + exit; + } + // Check to see if our process is still running $pidfile = $g['varrun_path'] . '/' . $g['product_name'] . '-upgrade.pid'; $running = "running"; @@ -169,7 +177,7 @@ if ($_REQUEST['ajax']) { if ($JSONfile != FALSE) { while (($logline = fgets($JSONfile)) !== false) { - if (!feof($JSONfile) && (strpos($logline, 'INFO_PROGRESS_TICK') !== false)) { + if (!feof($JSONfile) && (strpos($logline, 'INFO_PROGRESS_TICK') !== false)) { if (strpos($logline, '}}') !== false) { $progress = $logline; } @@ -212,31 +220,50 @@ function waitfor_string_in_file($filename, $string, $timeout) { return(false); } -if ($_POST) { - if (empty($_POST['id']) && $_POST['mode'] != 'reinstallall') { +$pkgmode = ''; +if (!empty($_REQUEST['mode'])) { + $valid_modes = array( + 'reinstallall', + 'reinstallpkg', + 'delete', + 'installed' + ); + + if (!in_array($_REQUEST['mode'], $valid_modes)) { header("Location: pkg_mgr_installed.php"); return; } - if (isset($_POST['pkgcancel']) || (empty($_POST['id']) && $_POST['mode'] != 'reinstallall')) { + $pkgmode = $_REQUEST['mode']; +} + +$confirmed = isset($_POST['confirmed']) && $_POST['confirmed'] == 'true'; +$completed = isset($_POST['completed']) && $_POST['completed'] == 'true'; + +if (!empty($_REQUEST['id'])) { + if ($_REQUEST['id'] != "firmware") { header("Location: pkg_mgr_installed.php"); return; } -} else if ($_GET && !$_GET['id']) { - if (empty($_GET['pkg']) && ($_GET['mode'] != 'reinstallall')) { + $firmwareupdate = true; +} elseif (!$completed && empty($_REQUEST['pkg']) && $pkgmode != 'reinstallall') { + header("Location: pkg_mgr_installed.php"); + return; +} + +$pkgname = ''; +if (!empty($_REQUEST['pkg'])) { + $pkgname = $_REQUEST['pkg']; + + if (!pkg_valid_name($pkgname)) { header("Location: pkg_mgr_installed.php"); return; } } -if ($_GET && $_GET['id'] == "firmware") { - $firmwareupdate = true; - $firmwareversion = get_system_pkg_version(); -} - $tab_array = array(); -if ($firmwareupdate || ($_POST['id'] == "firmware")) { +if ($firmwareupdate) { $pgtitle = array(gettext("System"), gettext("Update"), gettext("System Update")); $tab_array[] = array(gettext("System Update"), true, ""); $tab_array[] = array(gettext("Update Settings"), false, "system_update_settings.php"); @@ -248,12 +275,11 @@ if ($firmwareupdate || ($_POST['id'] == "firmware")) { } include("head.inc"); +?> + +<div id="final" class="alert" role="alert" style="display: none;"></div> -if (!empty($_POST['id']) || $_POST['mode'] == "reinstallall") { - ?> - <div id="final" class="alert" role="alert" style=":display: none;"></div> <?php -} display_top_tabs($tab_array); if ($input_errors) { @@ -262,17 +288,10 @@ if ($input_errors) { ?> <form action="pkg_mgr_install.php" method="post" class="form-horizontal"> -<?php if (($POST['complete'] != "true") && (empty($_GET['mode']) && $_GET['id']) || (!empty($_GET['mode']) && (!empty($_GET['pkg']) || $_GET['mode'] == 'reinstallall'))): - if (empty($_GET['mode']) && $_GET['id']) { - $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['id'], ENT_QUOTES | ENT_HTML401)); - $pkgmode = 'installed'; - } else if (!empty($_GET['mode']) && !empty($_GET['pkg'])) { - $pkgname = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['pkg'], ENT_QUOTES | ENT_HTML401)); - $pkgmode = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_GET['mode'], ENT_QUOTES | ENT_HTML401)); - } else if ($_GET['mode'] == 'reinstallall') { - $pkgmode = 'reinstallall'; - } +<?php +if (!$confirmed && !$completed && + ($firmwareupdate || $pkgmode == 'reinstallall' || !empty($pkgname))): switch ($pkgmode) { case 'reinstallpkg': $pkgtxt = sprintf(gettext('Confirmation Required to reinstall package %s.'), $pkgname); @@ -290,132 +309,127 @@ if ($input_errors) { <div class="panel-heading"> <h2 class="panel-title"> <?php - if ($pkgmode == 'reinstallall') { + if ($pkgmode == 'reinstallall'): ?> <?=gettext("Confirmation Required to reinstall all packages.");?> <?php - } else if ($_GET['from'] && $_GET['to']) { + elseif ($_GET['from'] && $_GET['to']): ?> <?=sprintf(gettext('Confirmation Required to upgrade package %1$s from %2$s to %3$s.'), $pkgname, $_GET['from'], $_GET['to'])?> <?php - } else if ($firmwareupdate) { + elseif ($firmwareupdate): ?> <?=sprintf(gettext('Confirmation Required to update %s system.'), $g['product_name'])?> <?php - } else { + else: ?> <?=$pkgtxt;?> <?php - } + endif; ?> </h2> </div> <div class="panel-body"> <div class="content"> - <input type="hidden" name="mode" value="<?=$pkgmode;?>" /> + <input type="hidden" name="mode" value="<?=$pkgmode;?>" /> <?php - if ($firmwareupdate) { + if ($firmwareupdate): ?> - <div class="form-group"> - <label class="col-sm-2 control-label"> - <?=gettext("Current Base System")?> - </label> - <div class="col-sm-10"> - <?=$firmwareversion['installed_version']?> - </div> - </div> - - <div class="form-group"> - <label class="col-sm-2 control-label"> - <?=gettext("Latest Base System")?> - </label> - <div class="col-sm-10"> - <?=$firmwareversion['version']?> - </div> - </div> + <div class="form-group"> + <label class="col-sm-2 control-label"> + <?=gettext("Current Base System")?> + </label> + <div class="col-sm-10" id="installed_version"> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-2 control-label"> + <?=gettext("Latest Base System")?> + </label> + <div class="col-sm-10" id="version"> + </div> + </div> + + <div class="form-group" id="confirm"> + <label class="col-sm-2 control-label" id="confirmlabel"> + <?=gettext("Retrieving")?> + </label> + <div class="col-sm-10"> + <input type="hidden" name="id" value="firmware" /> + <input type="hidden" name="confirmed" value="true" /> + <button type="submit" class="btn btn-success" name="pkgconfirm" id="pkgconfirm" value="<?=gettext("Confirm")?>" style="display: none"> + <i class="fa fa-check icon-embed-btn"></i> + <?=gettext("Confirm")?> + </button> + <span id="uptodate"><i class="fa fa-cog fa-spin fa-lg text-warning"></i></span> + </div> + </div> <?php - if ($firmwareversion['version'] != $firmwareversion['installed_version']) { + else: ?> - <div class="form-group"> - <label class="col-sm-2 control-label"> - <?=gettext("Confirm Update")?> - </label> - <div class="col-sm-10"> - <input type="hidden" name="id" value="firmware" /> + <input type="hidden" name="pkg" value="<?=$pkgname;?>" /> + <input type="hidden" name="confirmed" value="true" /> <button type="submit" class="btn btn-success" name="pkgconfirm" id="pkgconfirm" value="<?=gettext("Confirm")?>"> <i class="fa fa-check icon-embed-btn"></i> <?=gettext("Confirm")?> </button> - </div> - </div> <?php - } else { + endif; ?> - <div class="form-group"> - <label class="col-sm-2 control-label"> - </label> - <div class="col-sm-10"> - <?=($firmwareversion) ? gettext("System is up to date") : ""?> </div> </div> + </div> <?php - } - } else { +endif; ?> - <input type="hidden" name="id" value="<?=$pkgname;?>" /> - <button type="submit" class="btn btn-success" name="pkgconfirm" id="pkgconfirm" value="<?=gettext("Confirm")?>"> - <i class="fa fa-check icon-embed-btn"></i> - <?=gettext("Confirm")?> - </button> -<?php - } - ?> - </div> - </div> + <div id="unable" style="display: none"> + <?=print_info_box(gettext("Unable to retrieve system versions."), 'danger')?> </div> -<?php endif; - -if ($firmwareupdate && !$firmwareversion) { - print_info_box(gettext("Unable to retrieve system versions."), 'danger'); -} +<?php if ($_POST) { - $pkgid = str_replace(array("<", ">", ";", "&", "'", '"', '.', '/'), "", htmlspecialchars_decode($_POST['id'], ENT_QUOTES | ENT_HTML401)); - if ($pkgid == "firmware") { + if ($firmwareupdate) { $logfilename = $g['cf_conf_path'] . '/upgrade_log'; } else { - $logfilename = $g['cf_conf_path'] . '/pkg_log_' . $pkgid; + $logfilename = $g['cf_conf_path'] . '/pkg_log_' . $pkgname; } } -if ($_POST['mode'] == 'delete') { +if ($pkgmode == 'delete') { $panel_heading_txt = gettext("Package Removal"); - $pkg_success_txt = sprintf(gettext('<b>%1$s</b> removal successfully completed.'), $pkgid); - $pkg_fail_txt = sprintf(gettext('<b>%1$s</b> removal failed!'), $pkgid); - $pkg_wait_txt = sprintf(gettext('Please wait while the removal of <b>%1$s</b> completes.'), $pkgid); -} else if (($_POST['mode'] == 'reinstallpkg') || ($_POST['mode'] == 'reinstallall')) { + $pkg_success_txt = sprintf(gettext('<b>%1$s</b> removal successfully completed.'), $pkgname); + $pkg_fail_txt = sprintf(gettext('<b>%1$s</b> removal failed!'), $pkgname); + $pkg_wait_txt = sprintf(gettext('Please wait while the removal of <b>%1$s</b> completes.'), $pkgname); +} else if ($pkgmode == 'reinstallall') { + $panel_heading_txt = gettext("Packages Reinstallation"); + $pkg_success_txt = gettext('All packages reinstallation successfully completed.'); + $pkg_fail_txt = gettext('All packages reinstallation failed!'); + $pkg_wait_txt = gettext('Please wait while the reinstallation of all packages completes.'); +} else if ($pkgmode == 'reinstallpkg') { $panel_heading_txt = gettext("Package Reinstallation"); - $pkg_success_txt = sprintf(gettext('<b>%1$s</b> reinstallation successfully completed.'), $pkgid); - $pkg_fail_txt = sprintf(gettext('<b>%1$s</b> reinstallation failed!'), $pkgid); - $pkg_wait_txt = sprintf(gettext('Please wait while the reinstallation of <b>%1$s</b> completes.'), $pkgid); + $pkg_success_txt = sprintf(gettext('<b>%1$s</b> reinstallation successfully completed.'), $pkgname); + $pkg_fail_txt = sprintf(gettext('<b>%1$s</b> reinstallation failed!'), $pkgname); + $pkg_wait_txt = sprintf(gettext('Please wait while the reinstallation of <b>%1$s</b> completes.'), $pkgname); } else { $panel_heading_txt = gettext("Package Installation"); - $pkg_success_txt = sprintf(gettext('<b>%1$s</b> installation successfully completed.'), $pkgid); - $pkg_fail_txt = sprintf(gettext('<b>%1$s</b> installation failed!'), $pkgid); - $pkg_wait_txt = sprintf(gettext('Please wait while the installation of <b>%1$s</b> completes.'), $pkgid); + $pkg_success_txt = sprintf(gettext('<b>%1$s</b> installation successfully completed.'), $pkgname); + $pkg_fail_txt = sprintf(gettext('<b>%1$s</b> installation failed!'), $pkgname); + $pkg_wait_txt = sprintf(gettext('Please wait while the installation of <b>%1$s</b> completes.'), $pkgname); } -if (!empty($_POST['id']) || $_POST['mode'] == "reinstallall"): - // What if the user navigates away from this page and then come back via his/her "Back" button? +if ($confirmed): + // XXX: What if the user navigates away from this page and then comes back via his/her "Back" button? $pidfile = $g['varrun_path'] . '/' . $g['product_name'] . '-upgrade.pid'; if (isvalidpid($pidfile)) { $start_polling = true; } ?> - <input type="hidden" name="id" value="<?=htmlspecialchars($_POST['id'])?>" /> - <input type="hidden" name="mode" value="<?=htmlspecialchars($_POST['mode'])?>" /> + <input type="hidden" name="id" value="<?=$_REQUEST['id']?>" /> + <input type="hidden" name="mode" value="<?=$pkgmode?>" /> <input type="hidden" name="completed" value="true" /> + <input type="hidden" name="confirmed" value="true" /> <input type="hidden" id="reboot_needed" name="reboot_needed" value="no" /> <div id="countdown" class="text-center"></div> @@ -426,36 +440,42 @@ if (!empty($_POST['id']) || $_POST['mode'] == "reinstallall"): <br /> <div class="panel panel-default"> <div class="panel-heading"> -<?php if ($firmwareupdate) { +<?php + if ($firmwareupdate): ?> <h2 class="panel-title" id="status"><?=gettext("Updating System")?></h2> -<?php } else { +<?php + else: ?> <h2 class="panel-title" id="status"><?=$panel_heading_txt?></h2> - <?php } ?> +<?php + endif; +?> </div> <div class="panel-body"> <textarea rows="15" class="form-control" id="output" name="output"><?=$_POST['output']?></textarea> </div> </div> -<?php endif?> +<?php +endif; +?> </form> <?php ob_flush(); -if ($_POST && ($_POST['completed'] != "true")) { +if ($confirmed && !$completed) { /* Write out configuration to create a backup prior to pkg install. */ write_config(gettext("Creating restore point before package installation.")); $progbar = true; $upgrade_script = "/usr/local/sbin/{$g['product_name']}-upgrade -y -l {$logfilename}.txt -p {$g['tmp_path']}/{$g['product_name']}-upgrade.sock"; - switch ($_POST['mode']) { + switch ($pkgmode) { case 'delete': - mwexec_bg("{$upgrade_script} -r {$pkgid}"); + mwexec_bg("{$upgrade_script} -r {$pkgname}"); $start_polling = true; break; @@ -468,27 +488,32 @@ if ($_POST && ($_POST['completed'] != "true")) { break; case 'reinstallpkg': - mwexec_bg("{$upgrade_script} -i {$pkgid} -f"); + mwexec_bg("{$upgrade_script} -i {$pkgname} -f"); $start_polling = true; break; case 'installed': default: - if ($pkgid == 'firmware') { + if ($firmwareupdate) { mwexec_bg("{$upgrade_script}"); } else { - mwexec_bg("{$upgrade_script} -i {$pkgid}"); + mwexec_bg("{$upgrade_script} -i {$pkgname}"); } $start_polling = true; break; } } -// $_POST['completed'] just means that we are refreshing the page to update any new menu items +$uptodatemsg = gettext("Up to date."); +$confirmlabel = gettext("Confirm Update"); +$sysmessage = gettext("Status"); + +// $completed just means that we are refreshing the page to update any new menu items // that were installed -if ($_POST && $_POST['completed'] == "true"): +if ($completed): unlink_if_exists($logfilename . ".json"); - if (($pkgid == 'firmware') && ($_POST['reboot_needed'] == "yes")): + if (($firmwareupdate) && ($_POST['reboot_needed'] == "yes")): + ?> <script> //<![CDATA[ @@ -520,8 +545,8 @@ function setProgress(barName, percent, transition) { // Display a success banner function show_success() { $('#final').removeClass("alert-info").addClass("alert-success"); - if ("<?=$_POST['mode']?>" != "reinstallall") { - if ("<?=$pkgid?>" == "firmware") { + if ("<?=$pkgmode?>" != "reinstallall") { + if ("<?=$firmwareupdate?>") { $('#final').html("<?=gettext('System update successfully completed.')?>"); } else { $('#final').html("<?=$pkg_success_txt?>"); @@ -537,7 +562,7 @@ function show_success() { function show_failure() { $('#final').removeClass("alert-info"); $('#final').addClass("alert-danger"); - if ("<?=$_POST['mode']?>" != "reinstallall") { + if ("<?=$pkgmode?>" != "reinstallall") { $('#final').html("<?=$pkg_fail_txt?>"); } else { $('#final').html("<?=gettext('Reinstallation of all packages failed.')?>"); @@ -548,7 +573,7 @@ function show_failure() { // Ask the user to wait a bit function show_info() { $('#final').addClass("alert-info"); - if ("<?=$_POST['mode']?>" != "reinstallall") { + if ("<?=$pkgmode?>" != "reinstallall") { $('#final').html("<p><?=$pkg_wait_txt?>" + "</p><p>" + "<?=gettext("This may take several minutes!")?>" + "</p>"); } else { @@ -558,6 +583,43 @@ function show_info() { $('#final').show(); } +function get_firmware_versions() +{ + var ajaxVersionRequest; + + // Retrieve the version information + ajaxVersionRequest = $.ajax({ + url: "pkg_mgr_install.php", + type: "post", + data: { + ajax: "ajax", + getversion: "yes" + } + }); + + // Deal with the results of the above ajax call + ajaxVersionRequest.done(function (response, textStatus, jqXHR) { + var json = new Object; + + json = jQuery.parseJSON(response); + + if(json) { + $('#installed_version').text(json.installed_version); + $('#version').text(json.version); + + // If the installed and latest versions are the same, print an "Up to date" message + if (json.installed_version == json.version) { + $('#confirmlabel').text("<?=$sysmessage?>"); + $('#uptodate').html('<span class="text-success">' + '<?=$uptodatemsg?>' + "</span>"); + } else { // If they differ display the "Confirm" button + $('#uptodate').hide(); + $('#confirmlabel').text( "<?=$confirmlabel?>"); + $('#pkgconfirm').show(); + } + } + }); +} + function getLogsStatus() { var ajaxRequest; var repeat; @@ -571,7 +633,7 @@ function getLogsStatus() { data: { ajax: "ajax", logfilename: "<?=$logfilename?>", next_log_line: "0" - } + } }); // Deal with the results of the above ajax call @@ -618,7 +680,10 @@ function getLogsStatus() { $('#reboot_needed').val("yes"); } - $('form').submit(); + setProgress('progressbar', 100, false); + $('#progressbar').addClass("progress-bar-success"); + show_success(); + setTimeout(scrollToBottom, 200); } if ((json.pid == "stopped") && ((progress != 0) || (json.exitstatus != 0))) { @@ -642,7 +707,7 @@ var time = 0; function checkonline() { $.ajax({ - url : "/index.php", // or other resource + url : "/index.php", // or other resource type : "HEAD" }) .done(function() { @@ -675,13 +740,8 @@ events.push(function() { show_info(); } - // If we are just re-drawing the page after a successful install/remove/reinstall, - // we only meed to re-populate the progress indicator and the status banner - if ("<?=$_POST['completed']?>" == "true") { - setProgress('progressbar', 100, false); - $('#progressbar').addClass("progress-bar-success"); - show_success(); - setTimeout(scrollToBottom, 200); + if ("<?=$firmwareupdate?>") { + get_firmware_versions(); } }); diff --git a/src/usr/local/www/services_captiveportal.php b/src/usr/local/www/services_captiveportal.php index ed2d52b..02672b3 100644 --- a/src/usr/local/www/services_captiveportal.php +++ b/src/usr/local/www/services_captiveportal.php @@ -82,6 +82,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { header("Location: services_captiveportal_zones.php"); @@ -620,6 +621,14 @@ $section->addInput(new Form_Input( 'the client can only log in with valid credentials until the waiting period specified below has expired. Recommended to set ' . 'a hard timeout and/or idle timeout when using this for it to be effective.'); +$section->addInput(new Form_Input( + 'freelogins_resettimeout', + 'Waiting period to restore pass-through credits. (Hours)', + 'number', + $pconfig['freelogins_resettimeout'] +))->setHelp('Clients will have their available pass-through credits restored to the original count after this amount of time since using the first one. ' . + 'This must be above 0 hours if pass-through credits are enabled.'); + $section->addInput(new Form_Checkbox( 'freelogins_updatetimeouts', 'Reset waiting period', @@ -647,7 +656,7 @@ $section->addInput(new Form_Input( 'After authentication Redirection URL', 'text', $pconfig['redirurl'] -))->setHelp('Clients will be redirected to this URL instead of the one they initially tried to access after they\'ve authenticated'); +))->setHelp('Clients will be redirected to this URL instead of the one they initially tried to access after they\'ve authenticated.'); $section->addInput(new Form_Input( 'blockedmacsurl', @@ -680,7 +689,7 @@ $section->addInput(new Form_Checkbox( $pconfig['passthrumacadd'] ))->setHelp(sprintf('When enabled, a MAC passthrough entry is automatically added after the user has successfully authenticated. Users of that MAC address will ' . 'never have to authenticate again. To remove the passthrough MAC entry either log in and remove it manually from the ' . - '%s or send a POST from another system.' . + '%s or send a POST from another system. ' . 'If this is enabled, RADIUS MAC authentication cannot be used. Also, the logout window will not be shown.', '<a href="services_captiveportal_mac.php">MAC tab</a>')); $section->addInput(new Form_Checkbox( @@ -958,7 +967,7 @@ $section->addClass('Radius'); $section->addInput(new Form_Checkbox( 'reauthenticate', - 'Reathentication', + 'Reauthentication', 'Reauthenticate connected users every minute', $pconfig['reauthenticate'] ))->setHelp('If reauthentication is enabled, Access-Requests will be sent to the RADIUS server for each user that is logged in every minute. ' . @@ -1249,6 +1258,7 @@ events.push(function() { hideInput('idletimeout', hide); hideInput('timeout', hide); hideInput('freelogins_count', hide); + hideInput('freelogins_resettimeout', hide); hideCheckbox('freelogins_updatetimeouts', hide); hideCheckbox('logoutwin_enable', hide); hideInput('preauthurl', hide); diff --git a/src/usr/local/www/services_captiveportal_filemanager.php b/src/usr/local/www/services_captiveportal_filemanager.php index 39a839a..7e9737d 100644 --- a/src/usr/local/www/services_captiveportal_filemanager.php +++ b/src/usr/local/www/services_captiveportal_filemanager.php @@ -85,6 +85,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone)) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/services_captiveportal_hostname.php b/src/usr/local/www/services_captiveportal_hostname.php index a9b2b50..1834f03 100644 --- a/src/usr/local/www/services_captiveportal_hostname.php +++ b/src/usr/local/www/services_captiveportal_hostname.php @@ -63,7 +63,7 @@ $directionicons = array('to' => '→', 'from' => '←', 'both' => '⇄'); $notestr = - gettext('Adding new hostnames will allow a DNS hostname access to/from the captive portal without being taken to the portal page.' . + gettext('Adding new hostnames will allow a DNS hostname access to/from the captive portal without being taken to the portal page. ' . 'This can be used for a web server serving images for the portal page, or a DNS server on another network, for example. ' . 'By specifying <em>from</em> addresses, it may be used to always allow pass-through access from a client behind the captive portal.'); @@ -77,6 +77,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/services_captiveportal_hostname_edit.php b/src/usr/local/www/services_captiveportal_hostname_edit.php index 9ab00e5..1e623a0 100644 --- a/src/usr/local/www/services_captiveportal_hostname_edit.php +++ b/src/usr/local/www/services_captiveportal_hostname_edit.php @@ -81,6 +81,8 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); + $cpzoneid = $config['captiveportal'][$cpzone]['zoneid']; if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { diff --git a/src/usr/local/www/services_captiveportal_ip.php b/src/usr/local/www/services_captiveportal_ip.php index c844347..b3f8198 100644 --- a/src/usr/local/www/services_captiveportal_ip.php +++ b/src/usr/local/www/services_captiveportal_ip.php @@ -76,6 +76,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/services_captiveportal_ip_edit.php b/src/usr/local/www/services_captiveportal_ip_edit.php index 5a7b48d..e32b82b 100644 --- a/src/usr/local/www/services_captiveportal_ip_edit.php +++ b/src/usr/local/www/services_captiveportal_ip_edit.php @@ -84,6 +84,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { header("Location: services_captiveportal_zones.php"); @@ -113,6 +114,7 @@ $a_allowedips =& $config['captiveportal'][$cpzone]['allowedip']; if (isset($id) && $a_allowedips[$id]) { $pconfig['ip'] = $a_allowedips[$id]['ip']; $pconfig['sn'] = $a_allowedips[$id]['sn']; + $pconfig['dir'] = $a_allowedips[$id]['dir']; $pconfig['bw_up'] = $a_allowedips[$id]['bw_up']; $pconfig['bw_down'] = $a_allowedips[$id]['bw_down']; $pconfig['descr'] = $a_allowedips[$id]['descr']; diff --git a/src/usr/local/www/services_captiveportal_mac.php b/src/usr/local/www/services_captiveportal_mac.php index d80600b..aee5d72 100644 --- a/src/usr/local/www/services_captiveportal_mac.php +++ b/src/usr/local/www/services_captiveportal_mac.php @@ -77,6 +77,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { header("Location: services_captiveportal_zones.php"); @@ -91,8 +92,8 @@ $a_cp =& $config['captiveportal']; $pgtitle = array(gettext("Services"), gettext("Captive Portal"), $a_cp[$cpzone]['zone'], gettext("MACs")); $shortcut_section = "captiveportal"; -$actsmbl = array('pass' => '<font color="green" size="4">✔</font> ' . gettext("Pass"), - 'block' => '<font color="red" size="4">✘</font> ' . gettext("Block")); +$actsmbl = array('pass' => '<i class="fa fa-check text-success"></i> ' . gettext("Pass"), + 'block' => '<i class="fa fa-times text-danger"></i> ' . gettext("Block")); if ($_POST) { $pconfig = $_POST; @@ -236,7 +237,7 @@ foreach ($a_cp[$cpzone]['passthrumac'] as $mac): ?> <?php $i++; endforeach; ?> - <tbody> + </tbody> </table> <?php else: diff --git a/src/usr/local/www/services_captiveportal_mac_edit.php b/src/usr/local/www/services_captiveportal_mac_edit.php index a838292..20ad744 100644 --- a/src/usr/local/www/services_captiveportal_mac_edit.php +++ b/src/usr/local/www/services_captiveportal_mac_edit.php @@ -87,6 +87,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/services_captiveportal_vouchers.php b/src/usr/local/www/services_captiveportal_vouchers.php index 2fd9f83..237c527 100644 --- a/src/usr/local/www/services_captiveportal_vouchers.php +++ b/src/usr/local/www/services_captiveportal_vouchers.php @@ -77,6 +77,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if ($_REQUEST['generatekey']) { exec("/usr/bin/openssl genrsa 64 > /tmp/key64.private"); @@ -251,7 +252,7 @@ if ($_POST) { if (!$_POST['vouchersyncusername']) { // Check for form errors - if ($_POST['charset'] && (strlen($_POST['charset'] < 2))) { + if ($_POST['charset'] && (strlen($_POST['charset']) < 2)) { $input_errors[] = gettext("Need at least 2 characters to create vouchers."); } if ($_POST['charset'] && (strpos($_POST['charset'], "\"") > 0)) { diff --git a/src/usr/local/www/services_captiveportal_vouchers_edit.php b/src/usr/local/www/services_captiveportal_vouchers_edit.php index 698d7e5..de96c32 100644 --- a/src/usr/local/www/services_captiveportal_vouchers_edit.php +++ b/src/usr/local/www/services_captiveportal_vouchers_edit.php @@ -72,6 +72,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/services_captiveportal_zones_edit.php b/src/usr/local/www/services_captiveportal_zones_edit.php index 12fbc0e..8f19000 100644 --- a/src/usr/local/www/services_captiveportal_zones_edit.php +++ b/src/usr/local/www/services_captiveportal_zones_edit.php @@ -121,7 +121,7 @@ $section = new Form_Section('Add Captive Portal Zone'); $section->addInput(new Form_Input( 'zone', 'Zone name' -))->setPattern('[0-9A-Za-z_]+')->setHelp('Zone name. Can only contain letters, digits, and underscores (_).'); +))->setPattern('^[A-Za-z_][0-9A-Za-z_]+')->setHelp('Zone name. Can only contain letters, digits, and underscores (_) and may not start with a digit.'); $section->addInput(new Form_Input( 'descr', diff --git a/src/usr/local/www/services_dhcp.php b/src/usr/local/www/services_dhcp.php index 031b62c..401f2f5 100644 --- a/src/usr/local/www/services_dhcp.php +++ b/src/usr/local/www/services_dhcp.php @@ -679,7 +679,7 @@ if ($act == "del") { // Build an HTML table that can be inserted into a Form_StaticText element function build_pooltable() { - global $a_pools; + global $a_pools, $if; $pooltbl = '<div class="table-responsive">'; $pooltbl .= '<table class="table table-striped table-hover table-condensed">'; @@ -1030,21 +1030,21 @@ $section->addInput(new Form_IpAddress( 'ddnsdomainprimary', 'Primary DDNS address', $pconfig['ddnsdomainprimary'] -))->setHelp('Primary domain name server IP address for the dynamic domain name'); +))->setHelp('Primary domain name server IP address for the dynamic domain name.'); $section->addInput(new Form_Input( 'ddnsdomainkeyname', 'DNS Domain key', 'text', $pconfig['ddnsdomainkeyname'] -))->setHelp('Dynamic DNS domain key name which will be used to register client names in the DNS server'); +))->setHelp('Dynamic DNS domain key name which will be used to register client names in the DNS server.'); $section->addInput(new Form_Input( 'ddnsdomainkey', 'DNS Domain key secret', 'text', $pconfig['ddnsdomainkey'] -))->setHelp('Dynamic DNS domain key secret which will be used to register client names in the DNS server'); +))->setHelp('Dynamic DNS domain key secret which will be used to register client names in the DNS server.'); // Advanced MAC $btnadv = new Form_Button( @@ -1121,7 +1121,7 @@ $section->addInput(new Form_IpAddress( 'tftp', 'TFTP Server', $pconfig['tftp'] -))->setHelp('Leave blank to disable. Enter a full hostname or IP for the TFTP server.')->setPattern('[.a-zA-Z0-9_]+'); +))->setHelp('Leave blank to disable. Enter a full hostname or IP for the TFTP server.')->setPattern('[.a-zA-Z0-9_-]+'); // Advanced LDAP $btnadv = new Form_Button( @@ -1323,7 +1323,7 @@ if (!is_numeric($pool) && !($act == "newpool")) { <div class="panel panel-default"> <div class="panel-heading"><h2 class="panel-title"><?=gettext("DHCP Static Mappings for this Interface")?></h2></div> <div class="table-responsive"> - <table class="table table-striped table-hover table-condensed"> + <table class="table table-striped table-hover table-condensed sortable-theme-bootstrap" data-sortable> <thead> <tr> <th><?=gettext("Static ARP")?></th> diff --git a/src/usr/local/www/services_dhcpv6.php b/src/usr/local/www/services_dhcpv6.php index 4cbc02b..f63fcf7 100644 --- a/src/usr/local/www/services_dhcpv6.php +++ b/src/usr/local/www/services_dhcpv6.php @@ -718,7 +718,7 @@ $section->add($group); $section->addInput(new Form_Input( 'domain', - 'Domain Name', + 'Domain name', 'text', $pconfig['domain'] ))->setHelp('The default is to use the domain name of this system as the default domain name provided by DHCP. An alternate domain name may be specified here. '); @@ -728,7 +728,7 @@ $section->addInput(new Form_Input( 'Domain search list', 'text', $pconfig['domainsearchlist'] -))->setHelp('The DHCP server can optionally provide a domain search list. Use the semicolon character as separator'); +))->setHelp('The DHCP server can optionally provide a domain search list. Use the semicolon character as separator.'); $section->addInput(new Form_Input( 'deftime', @@ -994,7 +994,7 @@ print($form); <?php print_info_box( sprintf( - gettext('The DNS servers entered in %1$sSystem: General setup%3$s (or the %2$sDNS forwarder%3$s if enabled) will be assigned to clients by the DHCP server.'), + gettext('The DNS servers entered in %1$sSystem: General Setup%3$s (or the %2$sDNS forwarder%3$s if enabled) will be assigned to clients by the DHCP server.'), '<a href="system.php">', '<a href="services_dnsmasq.php"/>', '</a>') . diff --git a/src/usr/local/www/services_dnsmasq.php b/src/usr/local/www/services_dnsmasq.php index 8b0b555..f850023 100644 --- a/src/usr/local/www/services_dnsmasq.php +++ b/src/usr/local/www/services_dnsmasq.php @@ -247,7 +247,7 @@ $section->addInput(new Form_Checkbox( ))->setHelp(sprintf("If this option is set, then machines that specify". " their hostname when requesting a DHCP lease will be registered". " in the DNS forwarder, so that their name can be resolved.". - " The domain in %sSystem: General setup%s should also". + " The domain in %sSystem: General Setup%s should also". " be set to the proper value.",'<a href="system.php">','</a>')) ->addClass('toggle-dhcp'); @@ -258,7 +258,7 @@ $section->addInput(new Form_Checkbox( $pconfig['regdhcpstatic'] ))->setHelp(sprintf("If this option is set, then DHCP static mappings will ". "be registered in the DNS forwarder, so that their name can be ". - "resolved. The domain in %sSystem: General setup%s should also ". + "resolved. The domain in %sSystem: General Setup%s should also ". "be set to the proper value.",'<a href="system.php">','</a>')) ->addClass('toggle-dhcp'); diff --git a/src/usr/local/www/services_dnsmasq_domainoverride_edit.php b/src/usr/local/www/services_dnsmasq_domainoverride_edit.php index 806a0f0..9e4670a 100644 --- a/src/usr/local/www/services_dnsmasq_domainoverride_edit.php +++ b/src/usr/local/www/services_dnsmasq_domainoverride_edit.php @@ -174,7 +174,8 @@ $section->addInput(new Form_IpAddress( 'ip', 'IP Address', $pconfig['ip'] -))->setHelp('IP address of the authoritative DNS server for this domain' . '<br />' . +))->setPattern('[a-f0-9:.#!]*') + ->setHelp('IP address of the authoritative DNS server for this domain' . '<br />' . 'e.g.: 192.168.100.100' . '<br />' . 'Or enter # for an exclusion to pass through this host/subdomain to standard nameservers instead of a previous override.' . '<br />' . 'Or enter ! for lookups for this host/subdomain to NOT be forwarded anywhere.'); diff --git a/src/usr/local/www/services_dyndns_edit.php b/src/usr/local/www/services_dyndns_edit.php index d7e26d0..03130ec 100644 --- a/src/usr/local/www/services_dyndns_edit.php +++ b/src/usr/local/www/services_dyndns_edit.php @@ -132,7 +132,7 @@ if ($_POST) { $reqdfieldsn[] = gettext("Username"); if ($pconfig['type'] == "namecheap") { $reqdfields[] = "domainname"; - $reqdfieldsn[] = gettext("Domain Name"); + $reqdfieldsn[] = gettext("Domain name"); } } else { $reqdfields[] = "updateurl"; @@ -327,7 +327,7 @@ $group->add(new Form_Input( )); $group->add(new Form_Input( 'domainname', - 'Domain Name', + 'Domain name', 'text', $pconfig['domainname'] )); diff --git a/src/usr/local/www/services_igmpproxy_edit.php b/src/usr/local/www/services_igmpproxy_edit.php index c26cd9f..a6770ab 100644 --- a/src/usr/local/www/services_igmpproxy_edit.php +++ b/src/usr/local/www/services_igmpproxy_edit.php @@ -202,7 +202,7 @@ $section->addInput(new Form_Select( 'Type', $pconfig['type'], ['upstream' => gettext('Upstream Interface'), 'downstream' => gettext('Downstream Interface')] -))->setHelp('The upstream network interface is the outgoing interface which is responsible for communicating to available multicast data sources .' . +))->setHelp('The upstream network interface is the outgoing interface which is responsible for communicating to available multicast data sources. ' . 'There can only be one upstream interface.' . '<br />' . 'Downstream network interfaces are the distribution interfaces to the destination networks, where multicast clients can join groups and '. 'receive multicast data. One or more downstream interfaces must be configured.'); diff --git a/src/usr/local/www/services_ntpd.php b/src/usr/local/www/services_ntpd.php index e335992..fc790f1 100644 --- a/src/usr/local/www/services_ntpd.php +++ b/src/usr/local/www/services_ntpd.php @@ -299,7 +299,7 @@ $section->addInput(new Form_StaticText( $btnaddrow ))->setHelp('For best results three to five servers should be configured here.' . '<br />' . 'The prefer option indicates that NTP should favor the use of this server more than all others.' . '<br />' . - 'The noselect option indicates that NTP should not use this server for time, but stats for this server will be collected and displayed.'); + 'The no select option indicates that NTP should not use this server for time, but stats for this server will be collected and displayed.'); $section->addInput(new Form_Input( 'ntporphan', @@ -308,7 +308,7 @@ $section->addInput(new Form_Input( $pconfig['ntporphan'] ))->setHelp('Orphan mode allows the system clock to be used when no other clocks are available. ' . 'The number here specifies the stratum reported during orphan mode and should normally be set to a number high enough ' . - 'to insure that any other servers available to clients are preferred over this server. (default: 12).'); + 'to insure that any other servers available to clients are preferred over this server (default: 12).'); $section->addInput(new Form_Checkbox( 'statsgraph', @@ -381,7 +381,7 @@ $btnadv->setAttribute('type','button')->addClass('btn-info btn-sm'); $section->addInput(new Form_StaticText( 'Leap seconds', $btnadv -))->setHelp('A leap second file allows NTP to advertize an upcoming leap second addition or subtraction. ' . +))->setHelp('A leap second file allows NTP to advertise an upcoming leap second addition or subtraction. ' . 'Normally this is only useful if this server is a stratum 1 time server. '); $section->addInput(new Form_Textarea( diff --git a/src/usr/local/www/services_ntpd_gps.php b/src/usr/local/www/services_ntpd_gps.php index c776ff9..2ea87f6 100644 --- a/src/usr/local/www/services_ntpd_gps.php +++ b/src/usr/local/www/services_ntpd_gps.php @@ -278,7 +278,7 @@ if (!empty($serialports)) { 'gpsspeed', null, $pconfig['speed'], - [0 => '4800', 15 => '9600', 32 => '19200', 48 => '38400', 64 => '57600', 80 => '115200'] + [0 => '4800', 16 => '9600', 32 => '19200', 48 => '38400', 64 => '57600', 80 => '115200'] ))->setHelp('A higher baud rate is generally only helpful if the GPS is sending too many sentences. ' . 'It is recommended to configure the GPS to send only one sentence at a baud rate of 4800 or 9600.'); diff --git a/src/usr/local/www/services_ntpd_pps.php b/src/usr/local/www/services_ntpd_pps.php index 8858ea9..0f53e27 100644 --- a/src/usr/local/www/services_ntpd_pps.php +++ b/src/usr/local/www/services_ntpd_pps.php @@ -188,7 +188,7 @@ $section->addInput(new Form_Input( 'Fudge Time', 'text', $pconfig['fudge1'] -))->setHelp('Fudge time is used to specify the PPS signal offset from the actual second such as the transmission delay between the transmitter and the receiver. (default: 0.0).'); +))->setHelp('Fudge time is used to specify the PPS signal offset from the actual second such as the transmission delay between the transmitter and the receiver (default: 0.0).'); $section->addInput(new Form_Input( 'ppsstratum', diff --git a/src/usr/local/www/services_rfc2136_edit.php b/src/usr/local/www/services_rfc2136_edit.php index a8ef2d0..2699d37 100644 --- a/src/usr/local/www/services_rfc2136_edit.php +++ b/src/usr/local/www/services_rfc2136_edit.php @@ -146,7 +146,7 @@ if ($_POST) { write_config(gettext("New/Edited RFC2136 dnsupdate entry was posted.")); - if ($_POST['Submit'] == gettext("Save & Force Update")) { + if ($_POST['force']) { $retval = services_dnsupdate_process("", $rfc2136['host'], true); } else { $retval = services_dnsupdate_process(); @@ -217,7 +217,7 @@ $section->addInput(new Form_Input( 'Hostname', 'text', $pconfig['host'] -))->setHelp('Fully qualified hostname of the host to be updated'); +))->setHelp('Fully qualified hostname of the host to be updated.'); $section->addInput(new Form_Input( 'ttl', @@ -344,7 +344,7 @@ $form->add($section); print($form); print_info_box(sprintf(gettext('A DNS server must be configured in %1$sSystem: ' . - 'General setup %2$sor allow the DNS server list to be overridden ' . + 'General Setup %2$sor allow the DNS server list to be overridden ' . 'by DHCP/PPP on WAN for dynamic DNS updates to work.'), '<a href="system.php">', '</a>')); include("foot.inc"); diff --git a/src/usr/local/www/services_router_advertisements.php b/src/usr/local/www/services_router_advertisements.php index 6852d13..921b299 100644 --- a/src/usr/local/www/services_router_advertisements.php +++ b/src/usr/local/www/services_router_advertisements.php @@ -304,7 +304,7 @@ $section->addInput(new Form_Select( ' <strong>Router Only</strong> to only advertise this router' . '<br />' . ' <strong>Unmanaged</strong> for Router Advertising with Stateless Autoconfig' . '<br />' . ' <strong>Managed</strong> for assignment through a DHCPv6 Server' . '<br />' . - ' <strong>Assisted</strong> for DHCPv6 Server assignment combined with Stateless Autoconfig.' . + ' <strong>Assisted</strong> for DHCPv6 Server assignment combined with Stateless Autoconfig. ' . 'It is not required to activate this DHCPv6 server when set to "Managed", this can be another host on the network'); $section->addInput(new Form_Select( @@ -421,7 +421,7 @@ $section->addInput(new Form_Input( 'Domain search list', 'text', $pconfig['radomainsearchlist'] -))->setHelp('The RA server can optionally provide a domain search list. Use the semicolon character as separator '); +))->setHelp('The RA server can optionally provide a domain search list. Use the semicolon character as separator.'); $section->addInput(new Form_Checkbox( 'rasamednsasdhcp6', diff --git a/src/usr/local/www/services_unbound.php b/src/usr/local/www/services_unbound.php index 7e40e87..5dfbb64 100644 --- a/src/usr/local/www/services_unbound.php +++ b/src/usr/local/www/services_unbound.php @@ -360,7 +360,7 @@ $section->addInput(new Form_Checkbox( $pconfig['regdhcp'] ))->setHelp(sprintf('If this option is set, then machines that specify their hostname when requesting a DHCP lease will be registered'. ' in the DNS Resolver, so that their name can be resolved.'. - ' The domain in %sSystem: General setup%s should also be set to the proper value.','<a href="system.php">','</a>')); + ' The domain in %sSystem: General Setup%s should also be set to the proper value.','<a href="system.php">','</a>')); $section->addInput(new Form_Checkbox( 'regdhcpstatic', @@ -368,7 +368,7 @@ $section->addInput(new Form_Checkbox( 'Register DHCP static mappings in the DNS Resolver', $pconfig['regdhcpstatic'] ))->setHelp(sprintf('If this option is set, then DHCP static mappings will be registered in the DNS Resolver, so that their name can be resolved. '. - 'The domain in %sSystem: General setup%s should also be set to the proper value.','<a href="system.php">','</a>')); + 'The domain in %sSystem: General Setup%s should also be set to the proper value.','<a href="system.php">','</a>')); $btnadv = new Form_Button( 'btnadvcustom', @@ -589,7 +589,7 @@ endforeach; " service (if enabled) will automatically serve the LAN IP". " address as a DNS server to DHCP clients so they will use". " the DNS Resolver. If Forwarding is enabled, the DNS Resolver will use the DNS servers". - " entered in %sSystem: General setup%s". + " entered in %sSystem: General Setup%s". " or those obtained via DHCP or PPP on WAN if "Allow". " DNS server list to be overridden by DHCP/PPP on WAN"". " is checked."), '<a href="system.php">', '</a>'), 'info', false); ?> diff --git a/src/usr/local/www/services_unbound_advanced.php b/src/usr/local/www/services_unbound_advanced.php index 7d976cc..3b6c57f 100644 --- a/src/usr/local/www/services_unbound_advanced.php +++ b/src/usr/local/www/services_unbound_advanced.php @@ -377,7 +377,7 @@ $section->addInput(new Form_Select( $section->addInput(new Form_Checkbox( 'disable_auto_added_access_control', 'Disable Auto-added Access Control', - 'disable the automatically-added access control entries', + 'Disable the automatically-added access control entries', $pconfig['disable_auto_added_access_control'] ))->setHelp('By default, IPv4 and IPv6 networks residing on internal interfaces of this system are permitted. ' . 'Allowed networks must be manually configured on the Access Lists tab if the auto-added entries are disabled.'); diff --git a/src/usr/local/www/services_unbound_domainoverride_edit.php b/src/usr/local/www/services_unbound_domainoverride_edit.php index 360f319..cb01888 100644 --- a/src/usr/local/www/services_unbound_domainoverride_edit.php +++ b/src/usr/local/www/services_unbound_domainoverride_edit.php @@ -86,6 +86,8 @@ if (isset($id) && $a_domainOverrides[$id]) { $pconfig['descr'] = $a_domainOverrides[$id]['descr']; } +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php'); + if ($_POST) { unset($input_errors); @@ -120,6 +122,10 @@ if ($_POST) { $input_errors[] = gettext("A valid IP address must be specified, for example 192.168.100.10."); } } + + if ($_POST['referer']) { + $referer = $_POST['referer']; + } if (!$input_errors) { $doment = array(); @@ -136,8 +142,12 @@ if ($_POST) { mark_subsystem_dirty('unbound'); write_config(); - - header("Location: services_unbound.php"); + + if ($referer == '/services_unbound_overrides.php') { + header("Location: services_unbound_overrides.php"); + } else { + header("Location: services_unbound.php"); + } exit; } } @@ -146,6 +156,10 @@ $pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("General $shortcut_section = "resolver"; include("head.inc"); +if ($input_errors) { + print_input_errors($input_errors); +} + $form = new Form(); $section = new Form_Section('Domain Override'); @@ -155,14 +169,14 @@ $section->addInput(new Form_Input( 'Domain', 'text', $pconfig['domain'] -))->setHelp('Domain to override (NOTE: this does not have to be a valid TLD!) e.g.: testormycompany.localdomainor1.168.192.in-addr.arpa'); +))->setHelp('Domain to override (NOTE: this does not have to be a valid TLD!) e.g.: test or mycompany.localdomain or 1.168.192.in-addr.arpa'); $section->addInput(new Form_IpAddress( 'ip', 'IP Address', $pconfig['ip'] ))->setHelp('IP address of the authoritative DNS server for this domain. e.g.: 192.168.100.100' . '<br />' . - 'To use a nondefault port for communication, append an \'@\' with the port number.'); + 'To use a non-default port for communication, append an \'@\' with the port number.')->setPattern('[a-zA-Z0-9\@\.\:]+'); $section->addInput(new Form_Input( 'descr', @@ -180,6 +194,13 @@ if (isset($id) && $a_domainOverrides[$id]) { )); } +$section->addInput(new Form_Input( + 'referer', + null, + 'hidden', + $referer +)); + $form->add($section); print $form; diff --git a/src/usr/local/www/services_unbound_host_edit.php b/src/usr/local/www/services_unbound_host_edit.php index fadc451..4fd5c50 100644 --- a/src/usr/local/www/services_unbound_host_edit.php +++ b/src/usr/local/www/services_unbound_host_edit.php @@ -102,6 +102,8 @@ if (isset($id) && $a_hosts[$id]) { $pconfig['aliases'] = $a_hosts[$id]['aliases']; } +$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_unbound.php'); + if ($_POST) { unset($input_errors); $pconfig = $_POST; @@ -187,6 +189,10 @@ if ($_POST) { break; } } + + if ($_POST['referer']) { + $referer = $_POST['referer']; + } if (!$input_errors) { $hostent = array(); @@ -207,7 +213,11 @@ if ($_POST) { write_config(); - header("Location: services_unbound.php"); + if ($referer == '/services_unbound_overrides.php') { + header("Location: services_unbound_overrides.php"); + } else { + header("Location: services_unbound.php"); + } exit; } } @@ -337,6 +347,13 @@ $form->addGlobal(new Form_Button( 'fa-plus' ))->removeClass('btn-primary')->addClass('btn-success addbtn'); +$section->addInput(new Form_Input( + 'referer', + null, + 'hidden', + $referer +)); + $form->add($section); print($form); diff --git a/src/usr/local/www/services_unbound_overrides.php b/src/usr/local/www/services_unbound_overrides.php new file mode 100644 index 0000000..d5cb111 --- /dev/null +++ b/src/usr/local/www/services_unbound_overrides.php @@ -0,0 +1,277 @@ +<?php +/* + services_unbound.php +*/ +/* ==================================================================== + * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. + * Copyright (c) 2014 Warren Baker (warren@pfsense.org) + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution. (http://www.pfsense.org/). + * + * 4. The names "pfSense" and "pfSense Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. + * + * 5. Products derived from this software may not be called "pfSense" + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution (http://www.pfsense.org/). + * + * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ==================================================================== + * + */ + +##|+PRIV +##|*IDENT=page-services-dnsresolver-overrides +##|*NAME=Services: DNS Resolver Overrides +##|*DESCR=Allow access to the 'Services: DNS Resolver' Overrides page. +##|*MATCH=services_unbound_overrides.php* +##|-PRIV + +require_once("guiconfig.inc"); +require_once("unbound.inc"); +require_once("system.inc"); + +if (!is_array($config['unbound'])) { + $config['unbound'] = array(); +} + +$a_unboundcfg =& $config['unbound']; + +if (!is_array($a_unboundcfg['hosts'])) { + $a_unboundcfg['hosts'] = array(); +} + +$a_hosts =& $a_unboundcfg['hosts']; + +if (!is_array($a_unboundcfg['domainoverrides'])) { + $a_unboundcfg['domainoverrides'] = array(); +} + +$a_domainOverrides = &$a_unboundcfg['domainoverrides']; + +if ($_POST) { + if ($_POST['apply']) { + $retval = services_unbound_configure(); + $savemsg = get_std_save_message($retval); + if ($retval == 0) { + clear_subsystem_dirty('unbound'); + } + /* Update resolv.conf in case the interface bindings exclude localhost. */ + system_resolvconf_generate(); + /* Start or restart dhcpleases when it's necessary */ + system_dhcpleases_configure(); + } +} + +if ($_GET['act'] == "del") { + if ($_GET['type'] == 'host') { + if ($a_hosts[$_GET['id']]) { + unset($a_hosts[$_GET['id']]); + write_config(); + mark_subsystem_dirty('unbound'); + header("Location: services_unbound_overrides.php"); + exit; + } + } elseif ($_GET['type'] == 'doverride') { + if ($a_domainOverrides[$_GET['id']]) { + unset($a_domainOverrides[$_GET['id']]); + write_config(); + mark_subsystem_dirty('unbound'); + header("Location: services_unbound_overrides.php"); + exit; + } + } +} + +$pgtitle = array(gettext("Services"), gettext("DNS Resolver"), gettext("Overrides")); +$shortcut_section = "resolver"; + +include_once("head.inc"); + +if ($input_errors) { + print_input_errors($input_errors); +} + +if ($savemsg) { + print_info_box($savemsg, 'success'); +} + +if (is_subsystem_dirty('unbound')) { + print_apply_box(gettext("The DNS resolver configuration has been changed.") . "<br />" . gettext("The changes must be applied for them to take effect.")); +} + + +?> + +<div class="panel panel-default"> + <div class="panel-heading"><h2 class="panel-title"><?=gettext("Host Overrides")?></h2></div> + <div class="panel-body table-responsive"> + <table class="table table-striped table-hover table-condensed sortable-theme-bootstrap" data-sortable> + <thead> + <tr> + <th><?=gettext("Host")?></th> + <th><?=gettext("Domain")?></th> + <th><?=gettext("IP")?></th> + <th><?=gettext("Description")?></th> + <th><?=gettext("Actions")?></th> + </tr> + </thead> + <tbody> +<?php +$i = 0; +foreach ($a_hosts as $hostent): +?> + <tr> + <td> + <?=$hostent['host']?> + </td> + <td> + <?=$hostent['domain']?> + </td> + <td> + <?=$hostent['ip']?> + </td> + <td> + <?=htmlspecialchars($hostent['descr'])?> + </td> + <td> + <a class="fa fa-pencil" title="<?=gettext('Edit host override')?>" href="services_unbound_host_edit.php?id=<?=$i?>"></a> + <a class="fa fa-trash" title="<?=gettext('Delete host override')?>" href="services_unbound_overrides.php?type=host&act=del&id=<?=$i?>"></a> + </td> + </tr> + +<?php + if ($hostent['aliases']['item'] && is_array($hostent['aliases']['item'])): + foreach ($hostent['aliases']['item'] as $alias): +?> + <tr> + <td> + <?=$alias['host']?> + </td> + <td> + <?=$alias['domain']?> + </td> + <td> + <?=gettext("Alias for ");?><?=$hostent['host'] ? $hostent['host'] . '.' . $hostent['domain'] : $hostent['domain']?> + </td> + <td> + <i class="fa fa-angle-double-right text-info"></i> + <?=htmlspecialchars($alias['description'])?> + </td> + <td> + <a a class="fa fa-pencil" title="<?=gettext('Edit host override')?>" href="services_unbound_host_edit.php?id=<?=$i?>"></a> + </td> + </tr> +<?php + endforeach; + endif; + $i++; +endforeach; +?> + </tbody> + </table> + </div> +</div> + +<nav class="action-buttons"> + <a href="services_unbound_host_edit.php" class="btn btn-sm btn-success"> + <i class="fa fa-plus icon-embed-btn"></i> + <?=gettext('Add')?> + </a> +</nav> + +<div class="panel panel-default"> + <div class="panel-heading"><h2 class="panel-title"><?=gettext("Domain Overrides")?></h2></div> + <div class="panel-body table-responsive"> + <table class="table table-striped table-hover table-condensed sortable-theme-bootstrap" data-sortable> + <thead> + <tr> + <th><?=gettext("Domain")?></th> + <th><?=gettext("IP")?></th> + <th><?=gettext("Description")?></th> + <th><?=gettext("Actions")?></th> + </tr> + </thead> + + <tbody> +<?php +$i = 0; +foreach ($a_domainOverrides as $doment): +?> + <tr> + <td> + <?=$doment['domain']?> + </td> + <td> + <?=$doment['ip']?> + </td> + <td> + <?=htmlspecialchars($doment['descr'])?> + </td> + <td> + <a class="fa fa-pencil" title="<?=gettext('Edit domain override')?>" href="services_unbound_domainoverride_edit.php?id=<?=$i?>"></a> + <a class="fa fa-trash" title="<?=gettext('Delete domain override')?>" href="services_unbound_overrides.php?act=del&type=doverride&id=<?=$i?>"></a> + </td> + </tr> +<?php + $i++; +endforeach; +?> + </tbody> + </table> + </div> +</div> + +<nav class="action-buttons"> + <a href="services_unbound_domainoverride_edit.php" class="btn btn-sm btn-success"> + <i class="fa fa-plus icon-embed-btn"></i> + <?=gettext('Add')?> + </a> +</nav> + +<div class="infoblock"> + <?php print_info_box(sprintf(gettext("If the DNS Resolver is enabled, the DHCP". + " service (if enabled) will automatically serve the LAN IP". + " address as a DNS server to DHCP clients so they will use". + " the DNS Resolver. If Forwarding is enabled, the DNS Resolver will use the DNS servers". + " entered in %sSystem: General setup%s". + " or those obtained via DHCP or PPP on WAN if "Allow". + " DNS server list to be overridden by DHCP/PPP on WAN"". + " is checked."), '<a href="system.php">', '</a>'), 'info', false); ?> +</div> + +<?php include("foot.inc"); diff --git a/src/usr/local/www/status.php b/src/usr/local/www/status.php index 0f1790c..5431e54 100755 --- a/src/usr/local/www/status.php +++ b/src/usr/local/www/status.php @@ -106,7 +106,15 @@ function doCmdT($title, $command) { while (!feof($fd)) { $line = fgets($fd); /* remove sensitive contents */ + $line = preg_replace("/<authorizedkeys>.*?<\\/authorizedkeys>/", "<authorizedkeys>xxxxx</authorizedkeys>", $line); + $line = preg_replace("/<bcrypt-hash>.*?<\\/bcrypt-hash>/", "<bcrypt-hash>xxxxx</bcrypt-hash>", $line); $line = preg_replace("/<password>.*?<\\/password>/", "<password>xxxxx</password>", $line); + $line = preg_replace("/<auth_user>.*?<\\/auth_user>/", "<auth_user>xxxxx</auth_user>", $line); + $line = preg_replace("/<auth_pass>.*?<\\/auth_pass>/", "<auth_pass>xxxxx</auth_pass>", $line); + $line = preg_replace("/<proxy_user>.*?<\\/proxy_user>/", "<proxy_user>xxxxx</proxy_user>", $line); + $line = preg_replace("/<proxy_passwd>.*?<\\/proxy_passwd>/", "<proxy_passwd>xxxxx</proxy_passwd>", $line); + $line = preg_replace("/<proxyuser>.*?<\\/proxyuser>/", "<proxyuser>xxxxx</proxyuser>", $line); + $line = preg_replace("/<proxypass>.*?<\\/proxypass>/", "<proxypass>xxxxx</proxypass>", $line); $line = preg_replace("/<pre-shared-key>.*?<\\/pre-shared-key>/", "<pre-shared-key>xxxxx</pre-shared-key>", $line); $line = preg_replace("/<rocommunity>.*?<\\/rocommunity>/", "<rocommunity>xxxxx</rocommunity>", $line); $line = preg_replace("/<prv>.*?<\\/prv>/", "<prv>xxxxx</prv>", $line); diff --git a/src/usr/local/www/status_captiveportal.php b/src/usr/local/www/status_captiveportal.php index 36abe13..f1e0b94 100644 --- a/src/usr/local/www/status_captiveportal.php +++ b/src/usr/local/www/status_captiveportal.php @@ -73,7 +73,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } - +$cpzone = strtolower($cpzone); if (!is_array($config['captiveportal'])) { $config['captiveportal'] = array(); diff --git a/src/usr/local/www/status_captiveportal_expire.php b/src/usr/local/www/status_captiveportal_expire.php index 7d7bc7c..ba57a93 100644 --- a/src/usr/local/www/status_captiveportal_expire.php +++ b/src/usr/local/www/status_captiveportal_expire.php @@ -72,6 +72,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone)) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/status_captiveportal_test.php b/src/usr/local/www/status_captiveportal_test.php index 8d447cd..9fb614b 100644 --- a/src/usr/local/www/status_captiveportal_test.php +++ b/src/usr/local/www/status_captiveportal_test.php @@ -72,6 +72,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone)) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/status_captiveportal_voucher_rolls.php b/src/usr/local/www/status_captiveportal_voucher_rolls.php index ca2b60d..d1c869d 100644 --- a/src/usr/local/www/status_captiveportal_voucher_rolls.php +++ b/src/usr/local/www/status_captiveportal_voucher_rolls.php @@ -72,6 +72,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone)) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/status_captiveportal_vouchers.php b/src/usr/local/www/status_captiveportal_vouchers.php index 4a18d46..cf311d1 100644 --- a/src/usr/local/www/status_captiveportal_vouchers.php +++ b/src/usr/local/www/status_captiveportal_vouchers.php @@ -72,6 +72,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (empty($cpzone)) { header("Location: services_captiveportal_zones.php"); diff --git a/src/usr/local/www/status_interfaces.php b/src/usr/local/www/status_interfaces.php index 5131c54..0fe706f 100644 --- a/src/usr/local/www/status_interfaces.php +++ b/src/usr/local/www/status_interfaces.php @@ -130,7 +130,7 @@ foreach ($ifdescrs as $ifdescr => $ifname): showDefBtn($ifinfo['pppoelink'], 'PPPoE', $ifinfo['pppoelink'], $ifdescr, $ifinfo['pppoelink'] == "up" ? gettext("Disconnect") : gettext("Connect")); showDefBtn($ifinfo['pptplink'], 'PPTP', $ifinfo['pptplink'], $ifdescr, $ifinfo['pptplink'] == "up" ? gettext("Disconnect") : gettext("Connect")); showDefBtn($ifinfo['l2tplink'], 'L2TP', $ifinfo['l2tplink'], $ifdescr, $ifinfo['l2tplink'] == "up" ? gettext("Disconnect") : gettext("Connect")); - showDefBtn($ifinfo['ppplink'], 'L2TP', $ifinfo['ppplink'], $ifdescr, ($ifinfo['ppplink'] == "up" && !$ifinfo['nodevice']) ? gettext("Disconnect") : gettext("Connect")); + showDefBtn($ifinfo['ppplink'], 'PPP', $ifinfo['ppplink'], $ifdescr, ($ifinfo['ppplink'] == "up" && !$ifinfo['nodevice']) ? gettext("Disconnect") : gettext("Connect")); showDef($ifinfo['ppp_uptime'] || $ifinfo['ppp_uptime_accumulated'], gettext("Uptime") . ' ' . ($ifinfo['ppp_uptime_accumulated'] ? '(historical)':''), $ifinfo['ppp_uptime'] . $ifinfo['ppp_uptime_accumulated']); showDef($ifinfo['cell_rssi'], gettext("Cell Signal (RSSI)"), $ifinfo['cell_rssi']); showDef($ifinfo['cell_mode'], gettext("Cell Mode"), $ifinfo['cell_mode']); @@ -161,7 +161,7 @@ foreach ($ifdescrs as $ifdescr => $ifname): $dns_servers = get_dns_servers(); $dnscnt = 0; foreach ($dns_servers as $dns) { - showDef(true, $dnscnt == 0 ? gettext('ISP DNS servers'):'', $dns); + showDef(true, $dnscnt == 0 ? gettext('DNS servers'):'', $dns); $dnscnt++; } } diff --git a/src/usr/local/www/status_ipsec.php b/src/usr/local/www/status_ipsec.php index 4ca13d7..4968d31 100644 --- a/src/usr/local/www/status_ipsec.php +++ b/src/usr/local/www/status_ipsec.php @@ -520,8 +520,8 @@ display_top_tabs($tab_array); </thead> <tbody id="ipsec-body"> <tr> - <td colspan="9"> - <?=print_info_box(gettext("Collecting IPsec status information"), warning, "")?> + <td colspan="10"> + <?=print_info_box(gettext("Collecting IPsec status information."), warning, "")?> </td> </tr> </tbody> @@ -569,6 +569,11 @@ events.push(function() { // Deal with the results of the above ajax call ajaxRequest.done(function (response, textStatus, jqXHR) { + + if (!response) { + response = '<tr><td colspan="10"><?=print_info_box(gettext("No IPsec status information available."), warning, "")?></td></tr>'; + } + $('#ipsec-body').html(response); ajax_lock = false; diff --git a/src/usr/local/www/status_lb_pool.php b/src/usr/local/www/status_lb_pool.php index 5de3cbf..2fb2593 100644 --- a/src/usr/local/www/status_lb_pool.php +++ b/src/usr/local/www/status_lb_pool.php @@ -265,23 +265,26 @@ endforeach; </table> </div> </div> -</form> <?php if ($rowsprinted > 0) { ?> - <nav class="action-buttons"> - <button name="Submit" type="submit" class="btn btn-primary btn-sm" value="<?= gettext("Save"); ?>" > - <i class="fa fa-save icon-embed-btn"></i> - <?=gettext("Save")?> - </button> + <nav class="action-buttons"> + <button name="Submit" type="submit" class="btn btn-primary btn-sm" value="<?= gettext("Save"); ?>" > + <i class="fa fa-save icon-embed-btn"></i> + <?=gettext("Save")?> + </button> - <button name="Reset" type="reset" class="btn btn-danger btn-sm" value="<?= gettext("Reset"); ?>"> - <i class="fa fa-undo icon-embed-btn"></i> - <?=gettext("Reset")?> - </button> - </nav> + <button name="Reset" type="reset" class="btn btn-danger btn-sm" value="<?= gettext("Reset"); ?>"> + <i class="fa fa-undo icon-embed-btn"></i> + <?=gettext("Reset")?> + </button> + </nav> <?php } +?> +</form> + +<?php include("foot.inc"); diff --git a/src/usr/local/www/status_logs_common.inc b/src/usr/local/www/status_logs_common.inc index 1a23c9c..75422ba 100644 --- a/src/usr/local/www/status_logs_common.inc +++ b/src/usr/local/www/status_logs_common.inc @@ -960,8 +960,8 @@ function manage_log_section() { '1' => gettext('Display as column'), '2' => gettext('Display as second row') ) - ))->setHelp('Show the applied rule description below or in the firewall log rows' . '<br />' . - 'Displaying rule descriptions for all lines in the log might affect performance with large rule sets'); + ))->setHelp('Show the applied rule description below or in the firewall log rows.' . '<br />' . + 'Displaying rule descriptions for all lines in the log might affect performance with large rule sets.'); } diff --git a/src/usr/local/www/status_logs_settings.php b/src/usr/local/www/status_logs_settings.php index 0e97ff0..155f527 100644 --- a/src/usr/local/www/status_logs_settings.php +++ b/src/usr/local/www/status_logs_settings.php @@ -94,6 +94,7 @@ $pconfig['rawfilter'] = isset($config['syslog']['rawfilter']); $pconfig['filterdescriptions'] = $config['syslog']['filterdescriptions']; $pconfig['disablelocallogging'] = isset($config['syslog']['disablelocallogging']); $pconfig['logfilesize'] = $config['syslog']['logfilesize']; +$pconfig['igmpxverbose'] = isset($config['syslog']['igmpxverbose']); if (!$pconfig['nentries']) { $pconfig['nentries'] = 50; @@ -170,11 +171,14 @@ if ($_POST['resetlogs'] == gettext("Reset Log Files")) { $config['syslog']['nologprivatenets'] = $_POST['logprivatenets'] ? false : true; $config['syslog']['nolognginx'] = $_POST['lognginx'] ? false : true; $config['syslog']['rawfilter'] = $_POST['rawfilter'] ? true : false; + $config['syslog']['igmpxverbose'] = $_POST['igmpxverbose'] ? true : false; + if (is_numeric($_POST['filterdescriptions']) && $_POST['filterdescriptions'] > 0) { $config['syslog']['filterdescriptions'] = $_POST['filterdescriptions']; } else { unset($config['syslog']['filterdescriptions']); } + if ($config['syslog']['enable'] == false) { unset($config['syslog']['remoteserver']); unset($config['syslog']['remoteserver2']); @@ -216,7 +220,7 @@ $logfilesizeHelp = gettext("Logs are held in constant-size circular log files. T gettext("Disk space currently used by log files is: ") . exec("/usr/bin/du -sh /var/log | /usr/bin/awk '{print $1;}'") . gettext(" Remaining disk space for log files: ") . exec("/bin/df -h /var/log | /usr/bin/awk '{print $4;}'"); -$remoteloghelp = gettext("This option will allow the logging daemon to bind to a single IP address, rather than all IP addresses.") . +$remoteloghelp = gettext("This option will allow the logging daemon to bind to a single IP address, rather than all IP addresses.") . " " . gettext("If a single IP is picked, remote syslog servers must all be of that IP type. To mix IPv4 and IPv6 remote syslog servers, bind to all interfaces.") . "<br /><br />" . gettext("NOTE: If an IP address cannot be located on the chosen interface, the daemon will bind to all addresses."); @@ -303,14 +307,21 @@ $section->addInput(new Form_Checkbox( 'Web Server Log', 'Log errors from the web server process', $pconfig['lognginx'] -))->setHelp('If this is checked, errors from the web server process for the GUI or Captive Portal will appear in the main system log'); +))->setHelp('If this is checked, errors from the web server process for the GUI or Captive Portal will appear in the main system log.'); $section->addInput(new Form_Checkbox( 'rawfilter', 'Raw Logs', 'Show raw filter logs', $pconfig['rawfilter'] -))->setHelp(gettext('If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information, but it is more difficult to read')); +))->setHelp(gettext('If this is checked, filter logs are shown as generated by the packet filter, without any formatting. This will reveal more detailed information, but it is more difficult to read.')); + +$section->addINput(new Form_Checkbox( + 'igmpxverbose', + 'IGMP Proxy', + 'Enable verbose logging (Default is terse logging)', + $pconfig['igmpxverbose'] +)); $section->addInput(new Form_Select( 'filterdescriptions', @@ -321,8 +332,8 @@ $section->addInput(new Form_Select( '1' => gettext('Display as column'), '2' => gettext('Display as second row') ) -))->setHelp('Show the applied rule description below or in the firewall log rows' . '<br />' . - 'Displaying rule descriptions for all lines in the log might affect performance with large rule sets'); +))->setHelp('Show the applied rule description below or in the firewall log rows.' . '<br />' . + 'Displaying rule descriptions for all lines in the log might affect performance with large rule sets.'); $section->addInput(new Form_Checkbox( 'disablelocallogging', diff --git a/src/usr/local/www/status_queues.php b/src/usr/local/www/status_queues.php index 15baf2d..52d6773 100644 --- a/src/usr/local/www/status_queues.php +++ b/src/usr/local/www/status_queues.php @@ -121,12 +121,11 @@ if ($_REQUEST['getactivity']) { } $finscript = ""; foreach ($statistics as $q) { - if ($stat_type == "0") { + if ($stat_type == "0" && $bigger_stat != "0") { $packet_s = round(100 * ($q->pps / $bigger_stat), 0); - } else { + } else if ($bigger_stat != "0") { $packet_s = round(100 * ($q->bandwidth / $bigger_stat), 0); - } - if ($packet_s < 0) { + } else { $packet_s = 0; } $finscript .= "$('#queue{$q->queuename}width').css('width','{$packet_s}%');"; diff --git a/src/usr/local/www/system.php b/src/usr/local/www/system.php index da791dc..8105d07 100644 --- a/src/usr/local/www/system.php +++ b/src/usr/local/www/system.php @@ -75,7 +75,7 @@ list($pconfig['dns1'], $pconfig['dns2'], $pconfig['dns3'], $pconfig['dns4']) = $ $arr_gateways = return_gateways_array(); -// set default colmns to two if unset +// set default columns to two if unset if (!isset($config['system']['webgui']['dashboardcolumns'])) { $config['system']['webgui']['dashboardcolumns'] = 2; } @@ -490,13 +490,31 @@ $section->addInput(new Form_Select( $form->add($section); $csslist = array(); -$css = glob("/usr/local/www/css/*.css"); -foreach ($css as $file) { - $file = basename($file); - $csslist[$file] = pathinfo($file, PATHINFO_FILENAME); -} -asort($csslist); +// List pfSense files, then any BETA files followed by any user-contributed files +$cssfiles = glob("/usr/local/www/css/*.css"); + +if(is_array($cssfiles)) { + arsort($cssfiles); + $usrcss = $pfscss = $betacss = array(); + + foreach ($cssfiles as $css) { + if (strpos($css, "BETA") != 0) { + array_push($betacss, $css); + } else if (strpos($css, "pfSense") != 0) { + array_push($pfscss, $css); + } else { + array_push($usrcss, $css); + } + } + + $css = array_merge($pfscss, $betacss, $usrcss); + + foreach ($css as $file) { + $file = basename($file); + $csslist[$file] = pathinfo($file, PATHINFO_FILENAME); + } +} if (!isset($pconfig['webguicss']) || !isset($csslist[$pconfig['webguicss']])) { $pconfig['webguicss'] = "pfSense.css"; diff --git a/src/usr/local/www/system_advanced_admin.php b/src/usr/local/www/system_advanced_admin.php index 7bc8b4c..820fa47 100644 --- a/src/usr/local/www/system_advanced_admin.php +++ b/src/usr/local/www/system_advanced_admin.php @@ -437,7 +437,7 @@ $section->addInput(new Form_Checkbox( 'permitted, regardless of the user-defined firewall rule set. Check this box to '. 'disable this automatically added rule, so access to the webConfigurator is '. 'controlled by the user-defined firewall rules (ensure a firewall rule is '. - 'in place that allows access, to avoid being locked out!)<em>Hint: the "Set interface(s) IP address" '. + 'in place that allows access, to avoid being locked out!) <em>Hint: the "Set interface(s) IP address" '. 'option in the console menu resets this setting as well.</em>', [$lockout_interface]); $section->addInput(new Form_Checkbox( diff --git a/src/usr/local/www/system_advanced_firewall.php b/src/usr/local/www/system_advanced_firewall.php index 168ac93..67ceed5 100644 --- a/src/usr/local/www/system_advanced_firewall.php +++ b/src/usr/local/www/system_advanced_firewall.php @@ -573,7 +573,7 @@ $section->addInput(new Form_Input( $pconfig['aliasesresolveinterval'], ['placeholder' => '300'] ))->setHelp('Interval, in seconds, that will be used to resolve hostnames '. - 'configured on aliases.. <br/>Note: Leave this blank for the default '. + 'configured on aliases. <br/>Note: Leave this blank for the default '. '(300s).'); $section->addInput(new Form_Checkbox( @@ -678,7 +678,7 @@ if (count($config['interfaces']) > 1) { $form->add($section); } -$section = new Form_Section('State Timeouts in Seconds. (Leave blank for default)'); +$section = new Form_Section('State Timeouts (seconds - blank for default)'); $tcpTimeouts = array('First', 'Opening', 'Established', 'Closing', 'FIN Wait', 'Closed'); foreach ($tcpTimeouts as $name) { diff --git a/src/usr/local/www/system_advanced_misc.php b/src/usr/local/www/system_advanced_misc.php index d690d38..897418d 100644 --- a/src/usr/local/www/system_advanced_misc.php +++ b/src/usr/local/www/system_advanced_misc.php @@ -322,6 +322,7 @@ include("head.inc"); if ($input_errors) { print_input_errors($input_errors); + unset($pconfig['doreboot']); } if ($savemsg) { diff --git a/src/usr/local/www/system_advanced_network.php b/src/usr/local/www/system_advanced_network.php index 950e3a6..459974d 100644 --- a/src/usr/local/www/system_advanced_network.php +++ b/src/usr/local/www/system_advanced_network.php @@ -95,7 +95,7 @@ if ($_POST) { if ($_POST['ipv6nat_enable'] == "yes") { $config['diag']['ipv6nat']['enable'] = true; - $config['diag']['ipv6nat']['ipaddr'] = $_POST['ip-address']; + $config['diag']['ipv6nat']['ipaddr'] = $_POST['ipv6nat_ipaddr']; } else { if ($config['diag']) { if ($config['diag']['ipv6nat']) { @@ -215,7 +215,7 @@ $group->add(new Form_Input( $pconfig['ipv6nat_ipaddr'] ))->setHelp('Enable IPv4 NAT encapsulation of IPv6 packets. <br/>This provides an '. 'RFC 2893 compatibility mechanism that can be used to tunneling IPv6 packets over '. - 'IPv4 routing infrastructures. If enabled, don"t forget to add a firewall rule to '. + 'IPv4 routing infrastructures. If enabled, don\'t forget to add a firewall rule to '. 'permit IPv6 packets.'); $section->add($group); @@ -261,7 +261,7 @@ $section->addInput(new Form_Checkbox( isset($config['system']['disablesegmentationoffloading']) ))->setHelp('Checking this option will disable hardware TCP segmentation '. 'offloading (TSO, TSO4, TSO6). This offloading is broken in some hardware '. - 'drivers, and may impact performance with some specific NICs.This will take '. + 'drivers, and may impact performance with some specific NICs. This will take '. 'effect after a machine reboot or re-configure of each interface.'); $section->addInput(new Form_Checkbox( @@ -271,7 +271,7 @@ $section->addInput(new Form_Checkbox( isset($config['system']['disablelargereceiveoffloading']) ))->setHelp('Checking this option will disable hardware large receive offloading '. '(LRO). This offloading is broken in some hardware drivers, and may impact '. - 'performance with some specific NICs.This will take effect after a machine reboot '. + 'performance with some specific NICs. This will take effect after a machine reboot '. 'or re-configure of each interface.'); $section->addInput(new Form_Checkbox( diff --git a/src/usr/local/www/system_advanced_sysctl.php b/src/usr/local/www/system_advanced_sysctl.php index 109326e..6467f25 100644 --- a/src/usr/local/www/system_advanced_sysctl.php +++ b/src/usr/local/www/system_advanced_sysctl.php @@ -142,8 +142,8 @@ if ($_POST) { if (!$_POST['tunable'] || !isset($_POST['value'])) { $input_errors[] = gettext("Both a name and a value must be specified."); - } else if (!ctype_alnum($_POST['value'])) { - $input_errors[] = gettext("The value may contain alphanumeric characters only."); + } else if (preg_match("/[^a-zA-Z0-9.\-_]/", $_POST['value'])) { + $input_errors[] = gettext("The value may only contain alphanumeric characters, - and _."); } else { $tunableent['tunable'] = htmlspecialchars($_POST['tunable']); $tunableent['value'] = htmlspecialchars($_POST['value']); diff --git a/src/usr/local/www/system_gateway_groups_edit.php b/src/usr/local/www/system_gateway_groups_edit.php index d130a69..f1a3045 100644 --- a/src/usr/local/www/system_gateway_groups_edit.php +++ b/src/usr/local/www/system_gateway_groups_edit.php @@ -115,7 +115,7 @@ if ($_POST) { $input_errors[] = gettext("A valid gateway group name must be specified."); } if (!is_validaliasname($_POST['name'])) { - $input_errors[] = gettext("The gateway name must not contain invalid characters."); + $input_errors[] = invalidaliasnamemsg($_POST['name'], gettext("gateway group")); } if (isset($_POST['name'])) { diff --git a/src/usr/local/www/system_gateways_edit.php b/src/usr/local/www/system_gateways_edit.php index f483979..f6042a3 100644 --- a/src/usr/local/www/system_gateways_edit.php +++ b/src/usr/local/www/system_gateways_edit.php @@ -147,7 +147,7 @@ if ($_POST) { $input_errors[] = "A valid gateway name must be specified."; } if (!is_validaliasname($_POST['name'])) { - $input_errors[] = gettext("The gateway name must not contain invalid characters."); + $input_errors[] = invalidaliasnamemsg($_POST['name'], gettext("gateway")); } else if (isset($_POST['disabled'])) { // We have a valid gateway name that the user wants to mark as disabled. // Check if the gateway name is used in any gateway group. @@ -829,7 +829,7 @@ $section->addInput(new Form_StaticText( 'ratio between these values control the accuracy of the numbers reported and ' . 'the timeliness of alerts.') . '<br/><br/>' . - gettext('A longer time period will will provide smoother results for round trip time ' . + gettext('A longer time period will provide smoother results for round trip time ' . 'and loss, but will increase the time before a latency or loss alert is triggered.') . '<br/><br/>' . gettext('A shorter probe interval will decrease the time required before a latency ' . diff --git a/src/usr/local/www/system_groupmanager.php b/src/usr/local/www/system_groupmanager.php index dc6b7cd..9510084 100644 --- a/src/usr/local/www/system_groupmanager.php +++ b/src/usr/local/www/system_groupmanager.php @@ -188,11 +188,17 @@ if (isset($_POST['save'])) { } } - if (strlen($_POST['groupname']) > 16) { $input_errors[] = gettext("The group name is longer than 16 characters."); } + /* Check the POSTed members to ensure they are valid and exist */ + foreach ($_POST['members'] as $newmember) { + if (!is_numeric($newmember) || empty(getUserEntryByUID($newmember))) { + $input_errors[] = gettext("One or more invalid group members was submitted."); + } + } + if (!$input_errors && !(isset($id) && $a_group[$id])) { /* make sure there are no dupes */ foreach ($a_group as $group) { @@ -482,7 +488,7 @@ if ($pconfig['gid'] != 1998) { // all users group 'fa-angle-double-left' ))->setAttribute('type','button')->removeClass('btn-primary')->addClass('btn-info btn-sm'); - $group->setHelp('Hold down CTRL (pc)/COMMAND (mac) key to select multiple items'); + $group->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items.'); $section->add($group); } diff --git a/src/usr/local/www/system_groupmanager_addprivs.php b/src/usr/local/www/system_groupmanager_addprivs.php index 5c58092..534dcb7 100644 --- a/src/usr/local/www/system_groupmanager_addprivs.php +++ b/src/usr/local/www/system_groupmanager_addprivs.php @@ -201,7 +201,7 @@ $section->addInput(new Form_Select( build_priv_list(), true ))->addClass('shadowselect') - ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items'); + ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items.'); $section->addInput(new Form_Input( 'filtertxt', diff --git a/src/usr/local/www/system_update_settings.php b/src/usr/local/www/system_update_settings.php index 8c7a6f2..79a9b00 100644 --- a/src/usr/local/www/system_update_settings.php +++ b/src/usr/local/www/system_update_settings.php @@ -72,10 +72,8 @@ if ($_POST) { if ($_POST['fwbranch']) { if (($_POST['fwbranch'] == "development") && !is_pkg_installed($g['product_name'] . "-repo-devel")) { pkg_switch_repo(true); - pkg_update(true); } else if (($_POST['fwbranch'] == "stable") && !is_pkg_installed($g['product_name'] . "-repo")) { pkg_switch_repo(false); - pkg_update(true); } } @@ -189,9 +187,9 @@ if (file_exists("/usr/local/bin/git") && $g['platform'] == $g['product_name']) { $section->addInput(new Form_Checkbox( 'synconupgrade', 'Auto sync on update', - 'After updating, sync with the following repository/branch before reboot', + 'Enable repository/branch sync before reboot', isset($gitcfg['synconupgrade']) - ))->setHelp('After updating, sync with the following repository/branch before reboot'); + ))->setHelp('After updating, sync with the following repository/branch before reboot.'); if (is_dir("/root/pfsense/pfSenseGITREPO/pfSenseGITREPO")) { exec("cd /root/pfsense/pfSenseGITREPO/pfSenseGITREPO && git config remote.origin.url", $output_str); @@ -228,7 +226,7 @@ if (file_exists("/usr/local/bin/git") && $g['platform'] == $g['product_name']) { 'text', ($gitcfg['branch'] ? $gitcfg['branch'] : '') ))->setHelp('The most recently used branch was "%s". (Usually the branch name is master)' . - '<br />Note: Sync will not be performed if a branch is not specified', [$lastbranch]); + '<br />Note: Sync will not be performed if a branch is not specified.', [$lastbranch]); $form->add($section); } // e-o-if(file_exista() diff --git a/src/usr/local/www/system_usermanager.php b/src/usr/local/www/system_usermanager.php index 2df24be..988ad28 100644 --- a/src/usr/local/www/system_usermanager.php +++ b/src/usr/local/www/system_usermanager.php @@ -213,6 +213,13 @@ if ($_POST['save']) { $input_errors[] = gettext("IPsec Pre-Shared Key contains invalid characters."); } + /* Check the POSTed groups to ensure they are valid and exist */ + foreach ($_POST['groups'] as $newgroup) { + if (empty(getGroupEntry($newgroup))) { + $input_errors[] = gettext("One or more invalid groups was submitted."); + } + } + if (isset($id) && $a_user[$id]) { $oldusername = $a_user[$id]['name']; } else { @@ -669,7 +676,7 @@ if ($act == "new" || $act == "edit" || $input_errors): $section->addInput(new Form_Input( 'expires', 'Expiration date', - 'date', + 'text', $pconfig['expires'] ))->setHelp('Leave blank if the account shouldn\'t expire, otherwise enter '. 'the expiration date'); @@ -728,7 +735,7 @@ if ($act == "new" || $act == "edit" || $input_errors): 'fa-angle-double-left' ))->setAttribute('type','button')->removeClass('btn-primary')->addClass('btn-info btn-sm'); - $group->setHelp('Hold down CTRL (pc)/COMMAND (mac) key to select multiple items'); + $group->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items.'); $section->add($group); // ==== Button for adding user certificate ================================ @@ -888,6 +895,7 @@ events.push(function() { } }); + $('#expires').datepicker(); // ---------- On initial page load ------------------------------------------------------------ diff --git a/src/usr/local/www/system_usermanager_addprivs.php b/src/usr/local/www/system_usermanager_addprivs.php index da7b942..b0f4400 100644 --- a/src/usr/local/www/system_usermanager_addprivs.php +++ b/src/usr/local/www/system_usermanager_addprivs.php @@ -186,7 +186,7 @@ $section->addInput(new Form_Select( build_priv_list(), true ))->addClass('multiselect') - ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items'); + ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items.'); $section->addInput(new Form_Select( 'shadow', @@ -195,7 +195,7 @@ $section->addInput(new Form_Select( build_priv_list(), true ))->addClass('shadowselect') - ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items'); + ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items.'); $section->addInput(new Form_Input( 'filtertxt', diff --git a/src/usr/local/www/system_usermanager_settings.php b/src/usr/local/www/system_usermanager_settings.php index 3bdca81..fb1a0bd 100644 --- a/src/usr/local/www/system_usermanager_settings.php +++ b/src/usr/local/www/system_usermanager_settings.php @@ -218,7 +218,7 @@ $section->addInput(new Form_Input( $pconfig['session_timeout'], [min => 0] ))->setHelp('Time in minutes to expire idle management sessions. The default is 4 '. - 'hours (240 minutes).Enter 0 to never expire sessions. NOTE: This is a security '. + 'hours (240 minutes). Enter 0 to never expire sessions. NOTE: This is a security '. 'risk!'); $auth_servers = array(); diff --git a/src/usr/local/www/vendor/d3/d3.min.js b/src/usr/local/www/vendor/d3/d3.min.js index 7b7b9b1..1664873 100644 --- a/src/usr/local/www/vendor/d3/d3.min.js +++ b/src/usr/local/www/vendor/d3/d3.min.js @@ -1,5 +1,5 @@ -!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null!=n&&!isNaN(n)}function e(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function r(n){return n.length}function u(n){for(var t=1;n*t%1;)t*=10;return t}function i(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function o(){}function a(n){return ha+n in this}function c(n){return n=ha+n,n in this&&delete this[n]}function s(){var n=[];return this.forEach(function(t){n.push(t)}),n}function l(){var n=0;for(var t in this)t.charCodeAt(0)===ga&&++n;return n}function f(){for(var n in this)if(n.charCodeAt(0)===ga)return!1;return!0}function h(){}function g(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function p(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=pa.length;r>e;++e){var u=pa[e]+t;if(u in n)return u}}function v(){}function d(){}function m(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new o;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function y(){Go.event.preventDefault()}function x(){for(var n,t=Go.event;n=t.sourceEvent;)t=n;return t}function M(n){for(var t=new d,e=0,r=arguments.length;++e<r;)t[arguments[e]]=m(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Go.event;u.target=n,Go.event=u,t[u.type].apply(e,r)}finally{Go.event=i}}},t}function _(n){return da(n,_a),n}function b(n){return"function"==typeof n?n:function(){return ma(n,this)}}function w(n){return"function"==typeof n?n:function(){return ya(n,this)}}function S(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Go.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function k(n){return n.trim().replace(/\s+/g," ")}function E(n){return new RegExp("(?:^|\\s+)"+Go.requote(n)+"(?:\\s+|$)","g")}function N(n){return n.trim().split(/^|\s+/)}function A(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=N(n).map(C);var u=n.length;return"function"==typeof t?r:e}function C(n){var t=E(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",k(u+" "+n))):e.setAttribute("class",k(u.replace(t," ")))}}function L(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function T(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function q(n){return"function"==typeof n?n:(n=Go.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function z(n){return{__data__:n}}function R(n){return function(){return Ma(this,n)}}function D(t){return arguments.length||(t=n),function(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}}function P(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function U(n){return da(n,wa),n}function j(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function H(){var n=this.__transition__;n&&++n.active}function F(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,Qo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Go.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=O;a>0&&(n=n.substring(0,a));var s=ka.get(n);return s&&(n=s,c=Y),a?t?u:r:t?v:i}function O(n,t){return function(e){var r=Go.event;Go.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Go.event=r}}}function Y(n,t){var e=O(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function I(){var n=".dragsuppress-"+ ++Na,t="click"+n,e=Go.select(ea).on("touchmove"+n,y).on("dragstart"+n,y).on("selectstart"+n,y);if(Ea){var r=ta.style,u=r[Ea];r[Ea]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),Ea&&(r[Ea]=u),i&&(e.on(t,function(){y(),o()},!0),setTimeout(o,0))}}function Z(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var u=n.getBoundingClientRect();return[t.clientX-u.left-n.clientLeft,t.clientY-u.top-n.clientTop]}function V(){return Go.event.changedTouches[0].identifier}function $(){return Go.event.target}function X(){return ea}function B(n){return n>0?1:0>n?-1:0}function J(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function W(n){return n>1?0:-1>n?Aa:Math.acos(n)}function G(n){return n>1?La:-1>n?-La:Math.asin(n)}function K(n){return((n=Math.exp(n))-1/n)/2}function Q(n){return((n=Math.exp(n))+1/n)/2}function nt(n){return((n=Math.exp(2*n))-1)/(n+1)}function tt(n){return(n=Math.sin(n/2))*n}function et(){}function rt(n,t,e){return new ut(n,t,e)}function ut(n,t,e){this.h=n,this.s=t,this.l=e}function it(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,yt(u(n+120),u(n),u(n-120))}function ot(n,t,e){return new at(n,t,e)}function at(n,t,e){this.h=n,this.c=t,this.l=e}function ct(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),st(e,Math.cos(n*=za)*t,Math.sin(n)*t)}function st(n,t,e){return new lt(n,t,e)}function lt(n,t,e){this.l=n,this.a=t,this.b=e}function ft(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=gt(u)*Za,r=gt(r)*Va,i=gt(i)*$a,yt(vt(3.2404542*u-1.5371385*r-.4985314*i),vt(-.969266*u+1.8760108*r+.041556*i),vt(.0556434*u-.2040259*r+1.0572252*i))}function ht(n,t,e){return n>0?ot(Math.atan2(e,t)*Ra,Math.sqrt(t*t+e*e),n):ot(0/0,0/0,n)}function gt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function pt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function vt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function dt(n){return yt(n>>16,255&n>>8,255&n)}function mt(n){return dt(n)+""}function yt(n,t,e){return new xt(n,t,e)}function xt(n,t,e){this.r=n,this.g=t,this.b=e}function Mt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _t(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(kt(u[0]),kt(u[1]),kt(u[2]))}return(i=Ja.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.substring(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function bt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),rt(r,u,c)}function wt(n,t,e){n=St(n),t=St(t),e=St(e);var r=pt((.4124564*n+.3575761*t+.1804375*e)/Za),u=pt((.2126729*n+.7151522*t+.072175*e)/Va),i=pt((.0193339*n+.119192*t+.9503041*e)/$a);return st(116*u-16,500*(r-u),200*(u-i))}function St(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function kt(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function Et(n){return"function"==typeof n?n:function(){return n}}function Nt(n){return n}function At(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Ct(t,e,n,r)}}function Ct(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Go.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,s=null;return!ea.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Go.event;Go.event=n;try{o.progress.call(i,c)}finally{Go.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(s=n,i):s},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Qo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var l in a)c.setRequestHeader(l,a[l]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=s&&(c.responseType=s),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Go.rebind(i,o,"on"),null==r?i:i.get(Lt(r))}function Lt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Tt(){var n=qt(),t=zt()-n;t>24?(isFinite(t)&&(clearTimeout(Qa),Qa=setTimeout(Tt,t)),Ka=0):(Ka=1,tc(Tt))}function qt(){var n=Date.now();for(nc=Wa;nc;)n>=nc.t&&(nc.f=nc.c(n-nc.t)),nc=nc.n;return n}function zt(){for(var n,t=Wa,e=1/0;t;)t.f?t=n?n.n=t.n:Wa=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return Ga=n,e}function Rt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Dt(n,t){var e=Math.pow(10,3*fa(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Pt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];t>0&&o>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:Nt;return function(n){var e=rc.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",s=e[5],l=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(s||"0"===r&&"="===o)&&(s=r="0",o="=",f&&(l-=Math.floor((l-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=uc.get(g)||Ut;var y=s&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Go.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!s&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=l>b?new Array(b=l-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function Ut(n){return n+""}function jt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ht(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new oc(e-1)),1),e}function i(n,e){return t(n=new oc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{oc=jt;var r=new jt;return r._=n,o(r,t,e)}finally{oc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Ft(n);return c.floor=c,c.round=Ft(r),c.ceil=Ft(u),c.offset=Ft(i),c.range=a,n}function Ft(n){return function(t,e){try{oc=jt;var r=new jt;return r._=t,n(r,e)._}finally{oc=Date}}}function Ot(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.substring(c,a)),null!=(u=cc[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=A[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.substring(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&oc!==jt,o=new(i?jt:oc);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+Math.floor(r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,s=e.length;c>a;){if(r>=s)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=C[o in cc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.substring(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.substring(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.substring(e));return r?(n.m=N.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.substring(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function c(n,t,r){return e(n,A.x.toString(),t,r)}function s(n,t,r){return e(n,A.X.toString(),t,r)}function l(n,t,e){var r=x.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{oc=jt;var t=new oc;return t._=n,r(t)}finally{oc=Date}}var r=t(n);return e.parse=function(n){try{oc=jt;var t=r.parse(n);return t&&t._}finally{oc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ae;var x=Go.map(),M=It(v),_=Zt(v),b=It(d),w=Zt(d),S=It(m),k=Zt(m),E=It(y),N=Zt(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Yt(n.getDate(),t,2)},e:function(n,t){return Yt(n.getDate(),t,2)},H:function(n,t){return Yt(n.getHours(),t,2)},I:function(n,t){return Yt(n.getHours()%12||12,t,2)},j:function(n,t){return Yt(1+ic.dayOfYear(n),t,3)},L:function(n,t){return Yt(n.getMilliseconds(),t,3)},m:function(n,t){return Yt(n.getMonth()+1,t,2)},M:function(n,t){return Yt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Yt(n.getSeconds(),t,2)},U:function(n,t){return Yt(ic.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Yt(ic.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Yt(n.getFullYear()%100,t,2)},Y:function(n,t){return Yt(n.getFullYear()%1e4,t,4)},Z:ie,"%":function(){return"%"}},C={a:r,A:u,b:i,B:o,c:a,d:Qt,e:Qt,H:te,I:te,j:ne,L:ue,m:Kt,M:ee,p:l,S:re,U:$t,w:Vt,W:Xt,x:c,X:s,y:Jt,Y:Bt,Z:Wt,"%":oe};return t}function Yt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function It(n){return new RegExp("^(?:"+n.map(Go.requote).join("|")+")","i")}function Zt(n){for(var t=new o,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Vt(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function $t(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function Xt(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Bt(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Jt(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+2));return r?(n.y=Gt(+r[0]),e+r[0].length):-1}function Wt(n,t,e){return/^[+-]\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=+t,e+5):-1}function Gt(n){return n+(n>68?1900:2e3)}function Kt(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qt(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function ne(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function te(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ee(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function re(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ue(n,t,e){sc.lastIndex=0;var r=sc.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ie(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(fa(t)/60),u=fa(t)%60;return e+Yt(r,"0",2)+Yt(u,"0",2)}function oe(n,t,e){lc.lastIndex=0;var r=lc.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function ae(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ce(){}function se(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function le(n,t){n&&pc.hasOwnProperty(n.type)&&pc[n.type](n,t)}function fe(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function he(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)fe(n[e],t,1);t.polygonEnd()}function ge(){function n(n,t){n*=za,t=t*za/2+Aa/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),s=Math.sin(t),l=i*s,f=u*c+l*Math.cos(a),h=l*o*Math.sin(a);dc.add(Math.atan2(h,f)),r=n,u=c,i=s}var t,e,r,u,i;mc.point=function(o,a){mc.point=n,r=(t=o)*za,u=Math.cos(a=(e=a)*za/2+Aa/4),i=Math.sin(a)},mc.lineEnd=function(){n(t,e)}}function pe(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function ve(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function de(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function me(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ye(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function xe(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function Me(n){return[Math.atan2(n[1],n[0]),G(n[2])]}function _e(n,t){return fa(n[0]-t[0])<Ta&&fa(n[1]-t[1])<Ta}function be(n,t){n*=za;var e=Math.cos(t*=za);we(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function we(n,t,e){++yc,Mc+=(n-Mc)/yc,_c+=(t-_c)/yc,bc+=(e-bc)/yc}function Se(){function n(n,u){n*=za;var i=Math.cos(u*=za),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),s=Math.atan2(Math.sqrt((s=e*c-r*a)*s+(s=r*o-t*c)*s+(s=t*a-e*o)*s),t*o+e*a+r*c);xc+=s,wc+=s*(t+(t=o)),Sc+=s*(e+(e=a)),kc+=s*(r+(r=c)),we(t,e,r)}var t,e,r;Cc.point=function(u,i){u*=za;var o=Math.cos(i*=za);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),Cc.point=n,we(t,e,r)}}function ke(){Cc.point=be}function Ee(){function n(n,t){n*=za;var e=Math.cos(t*=za),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),s=u*c-i*a,l=i*o-r*c,f=r*a-u*o,h=Math.sqrt(s*s+l*l+f*f),g=r*o+u*a+i*c,p=h&&-W(g)/h,v=Math.atan2(h,g);Ec+=p*s,Nc+=p*l,Ac+=p*f,xc+=v,wc+=v*(r+(r=o)),Sc+=v*(u+(u=a)),kc+=v*(i+(i=c)),we(r,u,i)}var t,e,r,u,i;Cc.point=function(o,a){t=o,e=a,Cc.point=n,o*=za;var c=Math.cos(a*=za);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),we(r,u,i)},Cc.lineEnd=function(){n(t,e),Cc.lineEnd=ke,Cc.point=be}}function Ne(){return!0}function Ae(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(_e(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Le(e,n,null,!0),s=new Le(e,null,c,!1);c.o=s,i.push(c),o.push(s),c=new Le(r,n,null,!1),s=new Le(r,null,c,!0),c.o=s,i.push(c),o.push(s)}}),o.sort(t),Ce(i),Ce(o),i.length){for(var a=0,c=e,s=o.length;s>a;++a)o[a].e=c=!c;for(var l,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;l=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,s=l.length;s>a;++a)u.point((f=l[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){l=g.p.z;for(var a=l.length-1;a>=0;--a)u.point((f=l[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,l=g.z,p=!p}while(!g.v);u.lineEnd()}}}function Ce(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function Le(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Te(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function s(){y.point=o,d.lineEnd()}function l(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){l(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r){if(1&t){n=e[0];var u,r=n.length-1,o=-1;for(i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);return i.lineEnd(),void 0}r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(qe))}}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:s,polygonStart:function(){y.point=l,y.lineStart=f,y.lineEnd=h,g=[],p=[],i.polygonStart()},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=s,g=Go.merge(g);var n=De(m,p);g.length?Ae(g,Re,n,e,i):n&&(i.lineStart(),e(null,null,1,i),i.lineEnd()),i.polygonEnd(),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=ze(),M=t(x);return y}}function qe(n){return n.length>1}function ze(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:v,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Re(n,t){return((n=n.x)[0]<0?n[1]-La-Ta:La-n[1])-((t=t.x)[0]<0?t[1]-La-Ta:La-t[1])}function De(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;dc.reset();for(var a=0,c=t.length;c>a;++a){var s=t[a],l=s.length;if(l)for(var f=s[0],h=f[0],g=f[1]/2+Aa/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===l&&(d=0),n=s[d];var m=n[0],y=n[1]/2+Aa/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>Aa,k=p*x;if(dc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*Ca:_,S^h>=e^m>=e){var E=de(pe(f),pe(n));xe(E);var N=de(u,E);xe(N);var A=(S^_>=0?-1:1)*G(N[2]);(r>A||r===A&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-Ta>i||Ta>i&&0>dc)^1&o}function Pe(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Aa:-Aa,c=fa(i-e);fa(c-Aa)<Ta?(n.point(e,r=(r+o)/2>0?La:-La),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Aa&&(fa(e-u)<Ta&&(e-=u*Ta),fa(i-a)<Ta&&(i-=a*Ta),r=Ue(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function Ue(n,t,e,r){var u,i,o=Math.sin(n-e);return fa(o)>Ta?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function je(n,t,e,r){var u;if(null==n)u=e*La,r.point(-Aa,u),r.point(0,u),r.point(Aa,u),r.point(Aa,0),r.point(Aa,-u),r.point(0,-u),r.point(-Aa,-u),r.point(-Aa,0),r.point(-Aa,u);else if(fa(n[0]-t[0])>Ta){var i=n[0]<t[0]?Aa:-Aa;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function He(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,s,l;return{lineStart:function(){s=c=!1,l=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Aa:-Aa),h):0;if(!e&&(s=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(_e(e,g)||_e(p,g))&&(p[0]+=Ta,p[1]+=Ta,v=t(p[0],p[1]))),v!==c)l=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(l=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&_e(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return l|(s&&c)<<1}}}function r(n,t,e){var r=pe(n),u=pe(t),o=[1,0,0],a=de(r,u),c=ve(a,a),s=a[0],l=c-s*s;if(!l)return!e&&n;var f=i*c/l,h=-i*s/l,g=de(o,a),p=ye(o,f),v=ye(a,h);me(p,v);var d=g,m=ve(p,d),y=ve(d,d),x=m*m-y*(ve(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=ye(d,(-m-M)/y);if(me(_,p),_=Me(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var N=S-w,A=fa(N-Aa)<Ta,C=A||Ta>N;if(!A&&k>E&&(b=k,k=E,E=b),C?A?k+E>0^_[1]<(fa(_[0]-w)<Ta?k:E):k<=_[1]&&_[1]<=E:N>Aa^(w<=_[0]&&_[0]<=S)){var L=ye(d,(-m+M)/y);return me(L,p),[_,Me(L)]}}}function u(t,e){var r=o?n:Aa-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=fa(i)>Ta,c=gr(n,6*za);return Te(t,e,c,o?[0,-n]:[-Aa,n-Aa])}function Fe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,s=o.y,l=a.x,f=a.y,h=0,g=1,p=l-c,v=f-s;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-s,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-s,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:s+h*v}),1>g&&(u.b={x:c+g*p,y:s+g*v}),u}}}}}}function Oe(n,t,e,r){function u(r,u){return fa(r[0]-n)<Ta?u>0?0:3:fa(r[0]-e)<Ta?u>0?2:1:fa(r[1]-t)<Ta?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,s=a[0];c>o;++o)i=a[o],s[1]<=r?i[1]>r&&J(s,i,n)>0&&++t:i[1]<=r&&J(s,i,n)<0&&--t,s=i;return 0!==t}function s(i,a,c,s){var l=0,f=0;if(null==i||(l=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do s.point(0===l||3===l?n:e,l>1?r:t);while((l=(l+c+4)%4)!==f)}else s.point(a[0],a[1])}function l(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){l(n,t)&&a.point(n,t)}function h(){C.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&N.rejoin(),v.push(N.buffer())),C.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Tc,Math.min(Tc,n)),t=Math.max(-Tc,Math.min(Tc,t));var e=l(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,N=ze(),A=Fe(n,t,e,r),C={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=N,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Go.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),s(null,null,1,a),a.lineEnd()),u&&Ae(v,i,t,s,a),a.polygonEnd()),v=d=m=null}};return C}}function Ye(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function Ie(n){var t=0,e=Aa/3,r=ir(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Aa/180,e=n[1]*Aa/180):[180*(t/Aa),180*(e/Aa)]},u}function Ze(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,G((i-(n*n+e*e)*u*u)/(2*u))]},e}function Ve(){function n(n,t){zc+=u*n-r*t,r=n,u=t}var t,e,r,u;jc.point=function(i,o){jc.point=n,t=r=i,e=u=o},jc.lineEnd=function(){n(t,e)}}function $e(n,t){Rc>n&&(Rc=n),n>Pc&&(Pc=n),Dc>t&&(Dc=t),t>Uc&&(Uc=t)}function Xe(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Be(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Be(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Be(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Je(n,t){Mc+=n,_c+=t,++bc}function We(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);wc+=o*(t+n)/2,Sc+=o*(e+r)/2,kc+=o,Je(t=n,e=r)}var t,e;Fc.point=function(r,u){Fc.point=n,Je(t=r,e=u)}}function Ge(){Fc.point=Je}function Ke(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);wc+=o*(r+n)/2,Sc+=o*(u+t)/2,kc+=o,o=u*n-r*t,Ec+=o*(r+n),Nc+=o*(u+t),Ac+=3*o,Je(r=n,u=t)}var t,e,r,u;Fc.point=function(i,o){Fc.point=n,Je(t=r=i,e=u=o)},Fc.lineEnd=function(){n(t,e)}}function Qe(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,Ca)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:v};return a}function nr(n){function t(n){return(a?r:e)(n)}function e(t){return rr(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=pe([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=s,S.lineEnd=l}function s(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function l(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,s,l,f,h,g,p,v,d,m){var y=l-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=s+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=fa(fa(w)-1)<Ta||fa(r-h)<Ta?(r+h)/2:Math.atan2(b,_),N=n(E,k),A=N[0],C=N[1],L=A-t,T=C-e,q=x*L-y*T;(q*q/M>i||fa((y*L+x*T)/M-.5)>.3||o>a*g+c*p+s*v)&&(u(t,e,r,a,c,s,A,C,E,_/=S,b/=S,w,d,m),m.point(A,C),u(A,C,E,_,b,w,l,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*za),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function tr(n){var t=nr(function(t,e){return n([t*Ra,e*Ra])});return function(n){return or(t(n))}}function er(n){this.stream=n}function rr(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function ur(n){return ir(function(){return n})()}function ir(n){function t(n){return n=a(n[0]*za,n[1]*za),[n[0]*h+c,s-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(s-n[1])/h),n&&[n[0]*Ra,n[1]*Ra]}function r(){a=Ye(o=sr(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,s=p+n[1]*h,u()}function u(){return l&&(l.valid=!1,l=null),t}var i,o,a,c,s,l,f=nr(function(n,t){return n=i(n,t),[n[0]*h+c,s-n[1]*h] -}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Lc,_=Nt,b=null,w=null;return t.stream=function(n){return l&&(l.valid=!1),l=or(M(o,f(_(n)))),l.valid=!0,l},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Lc):He((b=+n)*za),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Oe(n[0][0],n[0][1],n[1][0],n[1][1]):Nt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*za,d=n[1]%360*za,r()):[v*Ra,d*Ra]},t.rotate=function(n){return arguments.length?(m=n[0]%360*za,y=n[1]%360*za,x=n.length>2?n[2]%360*za:0,r()):[m*Ra,y*Ra,x*Ra]},Go.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function or(n){return rr(n,function(t,e){n.point(t*za,e*za)})}function ar(n,t){return[n,t]}function cr(n,t){return[n>Aa?n-Ca:-Aa>n?n+Ca:n,t]}function sr(n,t,e){return n?t||e?Ye(fr(n),hr(t,e)):fr(n):t||e?hr(t,e):cr}function lr(n){return function(t,e){return t+=n,[t>Aa?t-Ca:-Aa>t?t+Ca:t,e]}}function fr(n){var t=lr(n);return t.invert=lr(-n),t}function hr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*r+a*u;return[Math.atan2(c*i-l*o,a*r-s*u),G(l*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*i-c*o;return[Math.atan2(c*i+s*o,a*r+l*u),G(l*r-a*u)]},e}function gr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=pr(e,u),i=pr(e,i),(o>0?i>u:u>i)&&(u+=o*Ca)):(u=n+o*Ca,i=n-.5*c);for(var s,l=u;o>0?l>i:i>l;l-=c)a.point((s=Me([e,-r*Math.cos(l),-r*Math.sin(l)]))[0],s[1])}}function pr(n,t){var e=pe(t);e[0]-=n,xe(e);var r=W(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Ta)%(2*Math.PI)}function vr(n,t,e){var r=Go.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function dr(n,t,e){var r=Go.range(n,t-Ta,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function mr(n){return n.source}function yr(n){return n.target}function xr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),s=u*Math.sin(n),l=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(tt(r-t)+u*o*tt(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*l,u=e*s+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ra,Math.atan2(o,Math.sqrt(r*r+u*u))*Ra]}:function(){return[n*Ra,t*Ra]};return p.distance=h,p}function Mr(){function n(n,u){var i=Math.sin(u*=za),o=Math.cos(u),a=fa((n*=za)-t),c=Math.cos(a);Oc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Yc.point=function(u,i){t=u*za,e=Math.sin(i*=za),r=Math.cos(i),Yc.point=n},Yc.lineEnd=function(){Yc.point=Yc.lineEnd=v}}function _r(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function br(n,t){function e(n,t){o>0?-La+Ta>t&&(t=-La+Ta):t>La-Ta&&(t=La-Ta);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Aa/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=B(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-La]},e):Sr}function wr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return fa(u)<Ta?ar:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-B(u)*Math.sqrt(n*n+e*e)]},e)}function Sr(n,t){return[n,Math.log(Math.tan(Aa/4+t/2))]}function kr(n){var t,e=ur(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=Aa*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Er(n,t){return[Math.log(Math.tan(Aa/4+t/2)),-n]}function Nr(n){return n[0]}function Ar(n){return n[1]}function Cr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&J(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function Lr(n,t){return n[0]-t[0]||n[1]-t[1]}function Tr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function qr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],s=e[1],l=t[1]-c,f=r[1]-s,h=(a*(c-s)-f*(u-i))/(f*o-a*l);return[u+h*o,c+h*l]}function zr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Rr(){tu(this),this.edge=this.site=this.circle=null}function Dr(n){var t=ns.pop()||new Rr;return t.site=n,t}function Pr(n){$r(n),Gc.remove(n),ns.push(n),tu(n)}function Ur(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Pr(n);for(var c=i;c.circle&&fa(e-c.circle.x)<Ta&&fa(r-c.circle.cy)<Ta;)i=c.P,a.unshift(c),Pr(c),c=i;a.unshift(c),$r(c);for(var s=o;s.circle&&fa(e-s.circle.x)<Ta&&fa(r-s.circle.cy)<Ta;)o=s.N,a.push(s),Pr(s),s=o;a.push(s),$r(s);var l,f=a.length;for(l=1;f>l;++l)s=a[l],c=a[l-1],Kr(s.edge,c.site,s.site,u);c=a[0],s=a[f-1],s.edge=Wr(c.site,s.site,null,u),Vr(c),Vr(s)}function jr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Gc._;a;)if(r=Hr(a,o)-i,r>Ta)a=a.L;else{if(u=i-Fr(a,o),!(u>Ta)){r>-Ta?(t=a.P,e=a):u>-Ta?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Dr(n);if(Gc.insert(t,c),t||e){if(t===e)return $r(t),e=Dr(t.site),Gc.insert(c,e),c.edge=e.edge=Wr(t.site,c.site),Vr(t),Vr(e),void 0;if(!e)return c.edge=Wr(t.site,c.site),void 0;$r(t),$r(e);var s=t.site,l=s.x,f=s.y,h=n.x-l,g=n.y-f,p=e.site,v=p.x-l,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+l,y:(h*x-v*y)/m+f};Kr(e.edge,s,p,M),c.edge=Wr(s,n,null,M),e.edge=Wr(n,p,null,M),Vr(t),Vr(e)}}function Hr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,s=c-t;if(!s)return a;var l=a-r,f=1/i-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+u-i/2)))/f+r:(r+a)/2}function Fr(n,t){var e=n.N;if(e)return Hr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Or(n){this.site=n,this.edges=[]}function Yr(n){for(var t,e,r,u,i,o,a,c,s,l,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Wc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)l=a[o].end(),r=l.x,u=l.y,s=a[++o%c].start(),t=s.x,e=s.y,(fa(r-t)>Ta||fa(u-e)>Ta)&&(a.splice(o,0,new Qr(Gr(i.site,l,fa(r-f)<Ta&&p-u>Ta?{x:f,y:fa(t-f)<Ta?e:p}:fa(u-p)<Ta&&h-r>Ta?{x:fa(e-p)<Ta?t:h,y:p}:fa(r-h)<Ta&&u-g>Ta?{x:h,y:fa(t-h)<Ta?e:g}:fa(u-g)<Ta&&r-f>Ta?{x:fa(e-g)<Ta?t:f,y:g}:null),i.site,null)),++c)}function Ir(n,t){return t.angle-n.angle}function Zr(){tu(this),this.x=this.y=this.arc=this.site=this.cy=null}function Vr(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,s=r.y-a,l=i.x-o,f=i.y-a,h=2*(c*f-s*l);if(!(h>=-qa)){var g=c*c+s*s,p=l*l+f*f,v=(f*g-s*p)/h,d=(c*p-l*g)/h,f=d+a,m=ts.pop()||new Zr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=Qc._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}Qc.insert(y,m),y||(Kc=m)}}}}function $r(n){var t=n.circle;t&&(t.P||(Kc=t.N),Qc.remove(t),ts.push(t),tu(t),n.circle=null)}function Xr(n){for(var t,e=Jc,r=Fe(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Br(t,n)||!r(t)||fa(t.a.x-t.b.x)<Ta&&fa(t.a.y-t.b.y)<Ta)&&(t.a=t.b=null,e.splice(u,1))}function Br(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],s=t[1][1],l=n.l,f=n.r,h=l.x,g=l.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=s)return}else i={x:d,y:c};e={x:d,y:s}}else{if(i){if(i.y<c)return}else i={x:d,y:s};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=s)return}else i={x:(c-u)/r,y:c};e={x:(s-u)/r,y:s}}else{if(i){if(i.y<c)return}else i={x:(s-u)/r,y:s};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Jr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Wr(n,t,e,r){var u=new Jr(n,t);return Jc.push(u),e&&Kr(u,n,t,e),r&&Kr(u,t,n,r),Wc[n.i].edges.push(new Qr(u,n,t)),Wc[t.i].edges.push(new Qr(u,t,n)),u}function Gr(n,t,e){var r=new Jr(n,null);return r.a=t,r.b=e,Jc.push(r),r}function Kr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Qr(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function nu(){this._=null}function tu(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function eu(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ru(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function uu(n){for(;n.L;)n=n.L;return n}function iu(n,t){var e,r,u,i=n.sort(ou).pop();for(Jc=[],Wc=new Array(n.length),Gc=new nu,Qc=new nu;;)if(u=Kc,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Wc[i.i]=new Or(i),jr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;Ur(u.arc)}t&&(Xr(t),Yr(t));var o={cells:Wc,edges:Jc};return Gc=Qc=Jc=Wc=null,o}function ou(n,t){return t.y-n.y||t.x-n.x}function au(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function cu(n){return n.x}function su(n){return n.y}function lu(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function fu(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&fu(n,c[0],e,r,o,a),c[1]&&fu(n,c[1],o,r,u,a),c[2]&&fu(n,c[2],e,a,o,i),c[3]&&fu(n,c[3],o,a,u,i)}}function hu(n,t){n=Go.rgb(n),t=Go.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+Mt(Math.round(e+i*n))+Mt(Math.round(r+o*n))+Mt(Math.round(u+a*n))}}function gu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=du(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function pu(n,t){return t-=n=+n,function(e){return n+t*e}}function vu(n,t){var e,r,u,i,o,a=0,c=0,s=[],l=[];for(n+="",t+="",rs.lastIndex=0,r=0;e=rs.exec(t);++r)e.index&&s.push(t.substring(a,c=e.index)),l.push({i:s.length,x:e[0]}),s.push(null),a=rs.lastIndex;for(a<t.length&&s.push(t.substring(a)),r=0,i=l.length;(e=rs.exec(n))&&i>r;++r)if(o=l[r],o.x==e[0]){if(o.i)if(null==s[o.i+1])for(s[o.i-1]+=o.x,s.splice(o.i,1),u=r+1;i>u;++u)l[u].i--;else for(s[o.i-1]+=o.x+s[o.i+1],s.splice(o.i,2),u=r+1;i>u;++u)l[u].i-=2;else if(null==s[o.i+1])s[o.i]=o.x;else for(s[o.i]=o.x+s[o.i+1],s.splice(o.i+1,1),u=r+1;i>u;++u)l[u].i--;l.splice(r,1),i--,r--}else o.x=pu(parseFloat(e[0]),parseFloat(o.x));for(;i>r;)o=l.pop(),null==s[o.i+1]?s[o.i]=o.x:(s[o.i]=o.x+s[o.i+1],s.splice(o.i+1,1)),i--;return 1===s.length?null==s[0]?(o=l[0].x,function(n){return o(n)+""}):function(){return t}:function(n){for(r=0;i>r;++r)s[(o=l[r]).i]=o.x(n);return s.join("")}}function du(n,t){for(var e,r=Go.interpolators.length;--r>=0&&!(e=Go.interpolators[r](n,t)););return e}function mu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(du(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function yu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function xu(n){return function(t){return 1-n(1-t)}}function Mu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function _u(n){return n*n}function bu(n){return n*n*n}function wu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Su(n){return function(t){return Math.pow(t,n)}}function ku(n){return 1-Math.cos(n*La)}function Eu(n){return Math.pow(2,10*(n-1))}function Nu(n){return 1-Math.sqrt(1-n*n)}function Au(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ca*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ca/t)}}function Cu(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Lu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Tu(n,t){n=Go.hcl(n),t=Go.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function qu(n,t){n=Go.hsl(n),t=Go.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return it(e+i*n,r+o*n,u+a*n)+""}}function zu(n,t){n=Go.lab(n),t=Go.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ft(e+i*n,r+o*n,u+a*n)+""}}function Ru(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Du(n){var t=[n.a,n.b],e=[n.c,n.d],r=Uu(t),u=Pu(t,e),i=Uu(ju(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ra,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*Ra:0}function Pu(n,t){return n[0]*t[0]+n[1]*t[1]}function Uu(n){var t=Math.sqrt(Pu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function ju(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Hu(n,t){var e,r=[],u=[],i=Go.transform(n),o=Go.transform(t),a=i.translate,c=o.translate,s=i.rotate,l=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:pu(a[0],c[0])},{i:3,x:pu(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),s!=l?(s-l>180?l+=360:l-s>180&&(s+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:pu(s,l)})):l&&r.push(r.pop()+"rotate("+l+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:pu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:pu(g[0],p[0])},{i:e-2,x:pu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Fu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Ou(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function Yu(n){for(var t=n.source,e=n.target,r=Zu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Iu(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Zu(n,t){if(n===t)return n;for(var e=Iu(n),r=Iu(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Vu(n){n.fixed|=2}function $u(n){n.fixed&=-7}function Xu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Bu(n){n.fixed&=-5}function Ju(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Ju(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var s=t*e[n.point.index];n.charge+=n.pointCharge=s,r+=s*n.point.x,u+=s*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Wu(n,t){return Go.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=ni,n}function Gu(n){return n.children}function Ku(n){return n.value}function Qu(n,t){return t.value-n.value}function ni(n){return Go.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ti(n){return n.x}function ei(n){return n.y}function ri(n,t,e){n.y0=t,n.y=e}function ui(n){return Go.range(n.length)}function ii(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function oi(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function ai(n){return n.reduce(ci,0)}function ci(n,t){return n+t[1]}function si(n,t){return li(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function li(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function fi(n){return[Go.min(n),Go.max(n)]}function hi(n,t){return n.parent==t.parent?1:2}function gi(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}function pi(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree.thread}function vi(n,t){var e=n.children;if(e&&(u=e.length))for(var r,u,i=-1;++i<u;)t(r=vi(e[i],t),n)>0&&(n=r);return n}function di(n,t){return n.x-t.x}function mi(n,t){return t.x-n.x}function yi(n,t){return n.depth-t.depth}function xi(n,t){function e(n,r){var u=n.children;if(u&&(o=u.length))for(var i,o,a=null,c=-1;++c<o;)i=u[c],e(i,a),a=i;t(n,r)}e(n,null)}function Mi(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i]._tree,t.prelim+=e,t.mod+=e,e+=t.shift+(r+=t.change)}function _i(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.change+=r,t.change-=r,t.shift+=e,t.prelim+=e,t.mod+=e}function bi(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ancestor:e}function wi(n,t){return n.value-t.value}function Si(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function ki(n,t){n._pack_next=t,t._pack_prev=n}function Ei(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function Ni(n){function t(n){l=Math.min(n.x-n.r,l),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(s=e.length)){var e,r,u,i,o,a,c,s,l=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(Ai),r=e[0],r.x=-r.r,r.y=0,t(r),s>1&&(u=e[1],u.x=u.r,u.y=0,t(u),s>2))for(i=e[2],Ti(r,u,i),t(i),Si(r,i),r._pack_prev=i,Si(i,u),u=r._pack_next,o=3;s>o;o++){Ti(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(Ei(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!Ei(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?ki(r,u=a):ki(r=c,u),o--):(Si(r,i),u=i,t(i))}var m=(l+f)/2,y=(h+g)/2,x=0;for(o=0;s>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(Ci)}}function Ai(n){n._pack_next=n._pack_prev=n}function Ci(n){delete n._pack_next,delete n._pack_prev}function Li(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)Li(u[i],t,e,r)}function Ti(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),s=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+s*i,e.y=n.y+c*i-s*u}else e.x=n.x+r,e.y=n.y}function qi(n){return 1+Go.max(n,function(n){return n.y})}function zi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ri(n){var t=n.children;return t&&t.length?Ri(t[0]):n}function Di(n){var t,e=n.children;return e&&(t=e.length)?Di(e[t-1]):n}function Pi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ui(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function ji(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Hi(n){return n.rangeExtent?n.rangeExtent():ji(n.range())}function Fi(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Oi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Yi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ps}function Ii(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Go.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Zi(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Ii:Fi,c=r?Ou:Fu;return o=u(n,t,c,e),a=u(t,n,c,du),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Ru)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Bi(n,t)},i.tickFormat=function(t,e){return Ji(n,t,e)},i.nice=function(t){return $i(n,t),u()},i.copy=function(){return Zi(n,t,e,r)},u()}function Vi(n,t){return Go.rebind(n,t,"range","rangeRound","interpolate","clamp")}function $i(n,t){return Oi(n,Yi(Xi(n,t)[2]))}function Xi(n,t){null==t&&(t=10);var e=ji(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Bi(n,t){return Go.range.apply(Go,Xi(n,t))}function Ji(n,t,e){var r=Xi(n,t);if(e){var u=rc.exec(e);if(u.shift(),"s"===u[8]){var i=Go.formatPrefix(Math.max(fa(r[0]),fa(r[1])));return u[7]||(u[7]="."+Wi(i.scale(r[2]))),u[8]="f",e=Go.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Gi(u[8],r)),e=u.join("")}else e=",."+Wi(r[2])+"f";return Go.format(e)}function Wi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Gi(n,t){var e=Wi(t[2]);return n in vs?Math.abs(e-Wi(Math.max(fa(t[0]),fa(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Ki(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Oi(r.map(u),e?Math:ms);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=ji(r),o=[],a=n[0],c=n[1],s=Math.floor(u(a)),l=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(l-s)){if(e){for(;l>s;s++)for(var h=1;f>h;h++)o.push(i(s)*h);o.push(i(s))}else for(o.push(i(s));s++<l;)for(var h=f-1;h>0;h--)o.push(i(s)*h);for(s=0;o[s]<a;s++);for(l=o.length;o[l-1]>c;l--);o=o.slice(s,l)}return o},o.tickFormat=function(n,t){if(!arguments.length)return ds;arguments.length<2?t=ds:"function"!=typeof t&&(t=Go.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Ki(n.copy(),t,e,r)},Vi(o,n)}function Qi(n,t,e){function r(t){return n(u(t))}var u=no(t),i=no(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Bi(e,n)},r.tickFormat=function(n,t){return Ji(e,n,t)},r.nice=function(n){return r.domain($i(e,n))},r.exponent=function(o){return arguments.length?(u=no(t=o),i=no(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Qi(n.copy(),t,e)},Vi(r,n)}function no(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function to(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Go.range(n.length).map(function(n){return t+e*n})}var u,i,a;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new o;for(var i,a=-1,c=r.length;++a<c;)u.has(i=r[a])||u.set(i,n.push(i));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(i=n,a=0,t={t:"range",a:arguments},e):i},e.rangePoints=function(u,o){arguments.length<2&&(o=0);var c=u[0],s=u[1],l=(s-c)/(Math.max(1,n.length-1)+o);return i=r(n.length<2?(c+s)/2:c+l*o/2,l),a=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=(f-l)/(n.length-o+2*c);return i=r(l+h*c,h),s&&i.reverse(),a=h*(1-o),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,o,c){arguments.length<2&&(o=0),arguments.length<3&&(c=o);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=Math.floor((f-l)/(n.length-o+2*c)),g=f-l-(n.length-o)*h;return i=r(l+Math.round(g/2),h),s&&i.reverse(),a=Math.round(h*(1-o)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return ji(t.a[0])},e.copy=function(){return to(n,t)},e.domain(n)}function eo(t,e){function r(){var n=0,r=e.length;for(i=[];++n<r;)i[n-1]=Go.quantile(t,n/r);return u}function u(n){return isNaN(n=+n)?void 0:e[Go.bisect(i,n)]}var i;return u.domain=function(e){return arguments.length?(t=e.filter(function(n){return!isNaN(n)}).sort(n),r()):t},u.range=function(n){return arguments.length?(e=n,r()):e},u.quantiles=function(){return i},u.invertExtent=function(n){return n=e.indexOf(n),0>n?[0/0,0/0]:[n>0?i[n-1]:t[0],n<i.length?i[n]:t[t.length-1]]},u.copy=function(){return eo(t,e)},r()}function ro(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return ro(n,t,e)},u()}function uo(n,t){function e(e){return e>=e?t[Go.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return uo(n,t)},e}function io(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Bi(n,t)},t.tickFormat=function(t,e){return Ji(n,t,e)},t.copy=function(){return io(n)},t}function oo(n){return n.innerRadius}function ao(n){return n.outerRadius}function co(n){return n.startAngle}function so(n){return n.endAngle}function lo(n){function t(t){function o(){s.push("M",i(n(l),a))}for(var c,s=[],l=[],f=-1,h=t.length,g=Et(e),p=Et(r);++f<h;)u.call(this,c=t[f],f)?l.push([+g.call(this,c,f),+p.call(this,c,f)]):l.length&&(o(),l=[]);return l.length&&o(),s.length?s.join(""):null}var e=Nr,r=Ar,u=Ne,i=fo,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=Ss.get(n)||fo).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function fo(n){return n.join("L")}function ho(n){return fo(n)+"Z"}function go(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function po(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function vo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function mo(n,t){return n.length<4?fo(n):n[1]+Mo(n.slice(1,n.length-1),_o(n,t))}function yo(n,t){return n.length<3?fo(n):n[0]+Mo((n.push(n[0]),n),_o([n[n.length-2]].concat(n,[n[1]]),t))}function xo(n,t){return n.length<3?fo(n):n[0]+Mo(n,_o(n,t))}function Mo(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return fo(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var s=2;s<t.length;s++,c++)i=n[c],a=t[s],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var l=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+l[0]+","+l[1]}return r}function _o(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function bo(n){if(n.length<3)return fo(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",Eo(Ns,o),",",Eo(Ns,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),No(c,o,a);return n.pop(),c.push("L",r),c.join("")}function wo(n){if(n.length<4)return fo(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(Eo(Ns,i)+","+Eo(Ns,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),No(e,i,o);return e.join("")}function So(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[Eo(Ns,o),",",Eo(Ns,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),No(t,o,a);return t.join("")}function ko(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,s=-1;++s<=e;)r=n[s],u=s/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return bo(n)}function Eo(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function No(n,t,e){n.push("C",Eo(ks,t),",",Eo(ks,e),",",Eo(Es,t),",",Eo(Es,e),",",Eo(Ns,t),",",Eo(Ns,e))}function Ao(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Co(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=Ao(u,i);++t<e;)r[t]=(o+(o=Ao(u=i,i=n[t+1])))/2;return r[t]=o,r}function Lo(n){for(var t,e,r,u,i=[],o=Co(n),a=-1,c=n.length-1;++a<c;)t=Ao(n[a],n[a+1]),fa(t)<Ta?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function To(n){return n.length<3?fo(n):n[0]+Mo(n,Lo(n))}function qo(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+bs,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function zo(n){function t(t){function c(){v.push("M",a(n(m),f),l,s(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=Et(e),_=Et(u),b=e===r?function(){return g}:Et(r),w=u===i?function(){return p}:Et(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=Nr,r=Nr,u=0,i=Ar,o=Ne,a=fo,c=a.key,s=a,l="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=Ss.get(n)||fo).key,s=a.reverse||a,l=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Ro(n){return n.radius}function Do(n){return[n.x,n.y]}function Po(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+bs;return[e*Math.cos(r),e*Math.sin(r)]}}function Uo(){return 64}function jo(){return"circle"}function Ho(n){var t=Math.sqrt(n/Aa);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Fo(n,t){return da(n,zs),n.id=t,n}function Oo(n,t,e,r){var u=n.id;return P(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Yo(n){return null==n&&(n=""),function(){this.textContent=n}}function Io(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),i=u[e];if(!i){var a=r.time;i=u[e]={tween:new o,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,Go.timer(function(r){function o(r){return u.active>e?s():(u.active=e,i.event&&i.event.start.call(n,l,t),i.tween.forEach(function(e,r){(r=r.call(n,l,t))&&v.push(r)}),Go.timer(function(){return p.c=c(r||1)?Ne:c,1},0,a),void 0)}function c(r){if(u.active!==e)return s();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a);return o>=1?(i.event&&i.event.end.call(n,l,t),s()):void 0}function s(){return--u.count?delete u[e]:delete n.__transition__,1}var l=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=nc,v=[];return p.t=h+a,r>=h?o(r-h):(p.c=o,void 0) -},0,a)}}function Zo(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function Vo(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function $o(n){return n.toISOString()}function Xo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Go.bisect(Ys,u);return i==Ys.length?[t.year,Xi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Ys[i-1]<Ys[i]/u?i-1:i]:[Vs,Xi(n,e)[2]]}return r.invert=function(t){return Bo(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Bo)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Bo(+e+1),t).length}var i=r.domain(),o=ji(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Oi(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Bo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Bo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=ji(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Bo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Xo(n.copy(),t,e)},Vi(r,n)}function Bo(n){return new Date(n)}function Jo(n){return JSON.parse(n.responseText)}function Wo(n){var t=na.createRange();return t.selectNode(na.body),t.createContextualFragment(n.responseText)}var Go={version:"3.4.4"};Date.now||(Date.now=function(){return+new Date});var Ko=[].slice,Qo=function(n){return Ko.call(n)},na=document,ta=na.documentElement,ea=window;try{Qo(ta.childNodes)[0].nodeType}catch(ra){Qo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{na.createElement("div").style.setProperty("opacity",0,"")}catch(ua){var ia=ea.Element.prototype,oa=ia.setAttribute,aa=ia.setAttributeNS,ca=ea.CSSStyleDeclaration.prototype,sa=ca.setProperty;ia.setAttribute=function(n,t){oa.call(this,n,t+"")},ia.setAttributeNS=function(n,t,e){aa.call(this,n,t,e+"")},ca.setProperty=function(n,t,e){sa.call(this,n,t+"",e)}}Go.ascending=n,Go.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Go.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Go.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Go.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Go.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},Go.mean=function(n,e){var r,u=n.length,i=0,o=-1,a=0;if(1===arguments.length)for(;++o<u;)t(r=n[o])&&(i+=(r-i)/++a);else for(;++o<u;)t(r=e.call(n,n[o],o))&&(i+=(r-i)/++a);return a?i:void 0},Go.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Go.median=function(e,r){return arguments.length>1&&(e=e.map(r)),e=e.filter(t),e.length?Go.quantile(e.sort(n),.5):void 0};var la=e(n);Go.bisectLeft=la.left,Go.bisect=Go.bisectRight=la.right,Go.bisector=function(t){return e(1===t.length?function(e,r){return n(t(e),r)}:t)},Go.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Go.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Go.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Go.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,t=Go.min(arguments,r),e=new Array(t);++n<t;)for(var u,i=-1,o=e[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return e},Go.transpose=function(n){return Go.zip.apply(Go,n)},Go.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Go.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Go.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Go.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var fa=Math.abs;Go.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,i=[],o=u(fa(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)i.push(r/o);else for(;(r=n+e*++a)<t;)i.push(r/o);return i},Go.map=function(n){var t=new o;if(n instanceof o)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},i(o,{has:a,get:function(n){return this[ha+n]},set:function(n,t){return this[ha+n]=t},remove:c,keys:s,values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===ga&&n.call(this,t.substring(1),this[t])}});var ha="\x00",ga=ha.charCodeAt(0);Go.nest=function(){function n(t,a,c){if(c>=i.length)return r?r.call(u,a):e?a.sort(e):a;for(var s,l,f,h,g=-1,p=a.length,v=i[c++],d=new o;++g<p;)(h=d.get(s=v(l=a[g])))?h.push(l):d.set(s,[l]);return t?(l=t(),f=function(e,r){l.set(e,n(t,r,c))}):(l={},f=function(e,r){l[e]=n(t,r,c)}),d.forEach(f),l}function t(n,e){if(e>=i.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Go.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Go.set=function(n){var t=new h;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},i(h,{has:a,add:function(n){return this[ha+n]=!0,n},remove:function(n){return n=ha+n,n in this&&delete this[n]},values:s,size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===ga&&n.call(this,t.substring(1))}}),Go.behavior={},Go.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=g(n,t,t[e]);return n};var pa=["webkit","ms","moz","Moz","o","O"];Go.dispatch=function(){for(var n=new d,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=m(n);return n},d.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Go.event=null,Go.requote=function(n){return n.replace(va,"\\$&")};var va=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,da={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ma=function(n,t){return t.querySelector(n)},ya=function(n,t){return t.querySelectorAll(n)},xa=ta[p(ta,"matchesSelector")],Ma=function(n,t){return xa.call(n,t)};"function"==typeof Sizzle&&(ma=function(n,t){return Sizzle(n,t)[0]||null},ya=Sizzle,Ma=Sizzle.matchesSelector),Go.selection=function(){return Sa};var _a=Go.selection.prototype=[];_a.select=function(n){var t,e,r,u,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,s=r.length;++c<s;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return _(i)},_a.selectAll=function(n){var t,e,r=[];n=w(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Qo(n.call(e,e.__data__,a,u))),t.parentNode=e);return _(r)};var ba={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Go.ns={prefix:ba,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),ba.hasOwnProperty(e)?{space:ba[e],local:n}:n}},_a.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Go.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(S(t,n[t]));return this}return this.each(S(n,t))},_a.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=N(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!E(n[u]).test(t))return!1;return!0}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},_a.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(L(e,n[e],t));return this}if(2>r)return ea.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(L(n,t,e))},_a.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(T(t,n[t]));return this}return this.each(T(n,t))},_a.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},_a.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},_a.append=function(n){return n=q(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},_a.insert=function(n,t){return n=q(n),t=b(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},_a.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},_a.data=function(n,t){function e(n,e){var r,u,i,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new o,y=new o,x=[];for(r=-1;++r<a;)d=t.call(u=n[r],u.__data__,r),m.has(d)?v[r]=u:m.set(d,u),x.push(d);for(r=-1;++r<f;)d=t.call(e,i=e[r],r),(u=m.get(d))?(g[r]=u,u.__data__=i):y.has(d)||(p[r]=z(i)),y.set(d,i),m.remove(d);for(r=-1;++r<a;)m.has(x[r])&&(v[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],i=e[r],u?(u.__data__=i,g[r]=u):p[r]=z(i);for(;f>r;++r)p[r]=z(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),s.push(g),l.push(v)}var r,u,i=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++i<a;)(u=r[i])&&(n[i]=u.__data__);return n}var c=U([]),s=_([]),l=_([]);if("function"==typeof n)for(;++i<a;)e(r=this[i],n.call(r,r.parentNode.__data__,i));else for(;++i<a;)e(r=this[i],n);return s.enter=function(){return c},s.exit=function(){return l},s},_a.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},_a.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return _(u)},_a.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},_a.sort=function(n){n=D.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},_a.each=function(n){return P(this,function(t,e,r){n.call(t,t.__data__,e,r)})},_a.call=function(n){var t=Qo(arguments);return n.apply(t[0]=this,t),this},_a.empty=function(){return!this.node()},_a.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},_a.size=function(){var n=0;return this.each(function(){++n}),n};var wa=[];Go.selection.enter=U,Go.selection.enter.prototype=wa,wa.append=_a.append,wa.empty=_a.empty,wa.node=_a.node,wa.call=_a.call,wa.size=_a.size,wa.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var s=-1,l=u.length;++s<l;)(i=u[s])?(t.push(r[s]=e=n.call(u.parentNode,i.__data__,s,a)),e.__data__=i.__data__):t.push(null)}return _(o)},wa.insert=function(n,t){return arguments.length<2&&(t=j(this)),_a.insert.call(this,n,t)},_a.transition=function(){for(var n,t,e=Cs||++Rs,r=[],u=Ls||{time:Date.now(),ease:wu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,s=a.length;++c<s;)(t=a[c])&&Io(t,c,e,u),n.push(t)}return Fo(r,e)},_a.interrupt=function(){return this.each(H)},Go.select=function(n){var t=["string"==typeof n?ma(n,na):n];return t.parentNode=ta,_([t])},Go.selectAll=function(n){var t=Qo("string"==typeof n?ya(n,na):n);return t.parentNode=ta,_([t])};var Sa=Go.select(ta);_a.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(F(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(F(n,t,e))};var ka=Go.map({mouseenter:"mouseover",mouseleave:"mouseout"});ka.forEach(function(n){"on"+n in na&&ka.remove(n)});var Ea="onselectstart"in na?null:p(ta.style,"userSelect"),Na=0;Go.mouse=function(n){return Z(n,x())},Go.touches=function(n,t){return arguments.length<2&&(t=x().touches),t?Qo(t).map(function(t){var e=Z(n,t);return e.identifier=t.identifier,e}):[]},Go.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+s[0],y:r[1]+s[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Go.event.target===f),g({type:"dragend"}))}var s,l=this,f=Go.event.target,h=l.parentNode,g=e.of(l,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Go.select(u()).on(i+d,a).on(o+d,c),y=I(),x=t(h,v);r?(s=r.apply(l,arguments),s=[s.x-x[0],s.y-x[1]]):s=[0,0],g({type:"dragstart"})}}var e=M(n,"drag","dragstart","dragend"),r=null,u=t(v,Go.mouse,X,"mousemove","mouseup"),i=t(V,Go.touch,$,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Go.rebind(n,e,"on")};var Aa=Math.PI,Ca=2*Aa,La=Aa/2,Ta=1e-6,qa=Ta*Ta,za=Aa/180,Ra=180/Aa,Da=Math.SQRT2,Pa=2,Ua=4;Go.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Q(v),o=i/(Pa*h)*(e*nt(Da*t+v)-K(v));return[r+o*s,u+o*l,i*e/Q(Da*t+v)]}return[r+n*s,u+n*l,i*Math.exp(Da*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],s=o-r,l=a-u,f=s*s+l*l,h=Math.sqrt(f),g=(c*c-i*i+Ua*f)/(2*i*Pa*h),p=(c*c-i*i-Ua*f)/(2*c*Pa*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Da;return e.duration=1e3*y,e},Go.behavior.zoom=function(){function n(n){n.on(N,s).on(Fa+".zoom",f).on(A,h).on("dblclick.zoom",g).on(L,l)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function s(){function n(){l=1,u(Go.mouse(r),g),a(s)}function e(){f.on(A,ea===r?h:null).on(C,null),p(l&&Go.event.target===i),c(s)}var r=this,i=Go.event.target,s=T.of(r,arguments),l=0,f=Go.select(ea).on(A,n).on(C,e),g=t(Go.mouse(r)),p=I();H.call(r),o(s)}function l(){function n(){var n=Go.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){for(var t=Go.event.changedTouches,e=0,i=t.length;i>e;++e)v[t[e].identifier]=null;var o=n(),c=Date.now();if(1===o.length){if(500>c-m){var s=o[0],l=v[s.identifier];r(2*S.k),u(s,l),y(),a(p)}m=c}else if(o.length>1){var s=o[0],f=o[1],h=s[0]-f[0],g=s[1]-f[1];d=h*h+g*g}}function i(){for(var n,t,e,i,o=Go.touches(g),c=0,s=o.length;s>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var l=(l=e[0]-n[0])*l+(l=e[1]-n[1])*l,f=d&&Math.sqrt(l/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Go.event.touches.length){for(var t=Go.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}b.on(x,null),w.on(N,s).on(L,l),k(),c(p)}var h,g=this,p=T.of(g,arguments),v={},d=0,x=".zoom-"+Go.event.changedTouches[0].identifier,M="touchmove"+x,_="touchend"+x,b=Go.select(Go.event.target).on(M,i).on(_,f),w=Go.select(g).on(N,null).on(L,e),k=I();H.call(g),e(),o(p)}function f(){var n=T.of(this,arguments);d?clearTimeout(d):(H.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),y();var e=v||Go.mouse(this);p||(p=t(e)),r(Math.pow(2,.002*ja())*S.k),u(e,p),a(n)}function h(){p=null}function g(){var n=T.of(this,arguments),e=Go.mouse(this),i=t(e),s=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Go.event.shiftKey?Math.ceil(s)-1:Math.floor(s)+1)),u(e,i),a(n),c(n)}var p,v,d,m,x,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=Ha,N="mousedown.zoom",A="mousemove.zoom",C="mouseup.zoom",L="touchstart.zoom",T=M(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=T.of(this,arguments),t=S;Cs?Go.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Go.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?Ha:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,x=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Go.rebind(n,T,"on")};var ja,Ha=[0,1/0],Fa="onwheel"in na?(ja=function(){return-Go.event.deltaY*(Go.event.deltaMode?120:1)},"wheel"):"onmousewheel"in na?(ja=function(){return Go.event.wheelDelta},"mousewheel"):(ja=function(){return-Go.event.detail},"MozMousePixelScroll");et.prototype.toString=function(){return this.rgb()+""},Go.hsl=function(n,t,e){return 1===arguments.length?n instanceof ut?rt(n.h,n.s,n.l):_t(""+n,bt,rt):rt(+n,+t,+e)};var Oa=ut.prototype=new et;Oa.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),rt(this.h,this.s,this.l/n)},Oa.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),rt(this.h,this.s,n*this.l)},Oa.rgb=function(){return it(this.h,this.s,this.l)},Go.hcl=function(n,t,e){return 1===arguments.length?n instanceof at?ot(n.h,n.c,n.l):n instanceof lt?ht(n.l,n.a,n.b):ht((n=wt((n=Go.rgb(n)).r,n.g,n.b)).l,n.a,n.b):ot(+n,+t,+e)};var Ya=at.prototype=new et;Ya.brighter=function(n){return ot(this.h,this.c,Math.min(100,this.l+Ia*(arguments.length?n:1)))},Ya.darker=function(n){return ot(this.h,this.c,Math.max(0,this.l-Ia*(arguments.length?n:1)))},Ya.rgb=function(){return ct(this.h,this.c,this.l).rgb()},Go.lab=function(n,t,e){return 1===arguments.length?n instanceof lt?st(n.l,n.a,n.b):n instanceof at?ct(n.l,n.c,n.h):wt((n=Go.rgb(n)).r,n.g,n.b):st(+n,+t,+e)};var Ia=18,Za=.95047,Va=1,$a=1.08883,Xa=lt.prototype=new et;Xa.brighter=function(n){return st(Math.min(100,this.l+Ia*(arguments.length?n:1)),this.a,this.b)},Xa.darker=function(n){return st(Math.max(0,this.l-Ia*(arguments.length?n:1)),this.a,this.b)},Xa.rgb=function(){return ft(this.l,this.a,this.b)},Go.rgb=function(n,t,e){return 1===arguments.length?n instanceof xt?yt(n.r,n.g,n.b):_t(""+n,yt,it):yt(~~n,~~t,~~e)};var Ba=xt.prototype=new et;Ba.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),yt(Math.min(255,~~(t/n)),Math.min(255,~~(e/n)),Math.min(255,~~(r/n)))):yt(u,u,u)},Ba.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),yt(~~(n*this.r),~~(n*this.g),~~(n*this.b))},Ba.hsl=function(){return bt(this.r,this.g,this.b)},Ba.toString=function(){return"#"+Mt(this.r)+Mt(this.g)+Mt(this.b)};var Ja=Go.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ja.forEach(function(n,t){Ja.set(n,dt(t))}),Go.functor=Et,Go.xhr=At(Nt),Go.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=Ct(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(l>=s)return o;if(u)return u=!1,i;var t=l;if(34===n.charCodeAt(t)){for(var e=t;e++<s;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}l=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++l):10===r&&(u=!0),n.substring(t+1,e).replace(/""/g,'"')}for(;s>l;){var r=n.charCodeAt(l++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(l)&&(++l,++a);else if(r!==c)continue;return n.substring(t,l-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],s=n.length,l=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new h,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Go.csv=Go.dsv(",","text/csv"),Go.tsv=Go.dsv(" ","text/tab-separated-values"),Go.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=x().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return Z(n,r)};var Wa,Ga,Ka,Qa,nc,tc=ea[p(ea,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Go.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Ga?Ga.n=i:Wa=i,Ga=i,Ka||(Qa=clearTimeout(Qa),Ka=1,tc(Tt))},Go.timer.flush=function(){qt(),zt()},Go.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var ec=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Dt);Go.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Go.round(n,Rt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),ec[8+e/3]};var rc=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,uc=Go.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Go.round(n,Rt(n,t))).toFixed(Math.max(0,Math.min(20,Rt(n*(1+1e-15),t))))}}),ic=Go.time={},oc=Date;jt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ac.setUTCDate.apply(this._,arguments)},setDay:function(){ac.setUTCDay.apply(this._,arguments)},setFullYear:function(){ac.setUTCFullYear.apply(this._,arguments)},setHours:function(){ac.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ac.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ac.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ac.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ac.setUTCSeconds.apply(this._,arguments)},setTime:function(){ac.setTime.apply(this._,arguments)}};var ac=Date.prototype;ic.year=Ht(function(n){return n=ic.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ic.years=ic.year.range,ic.years.utc=ic.year.utc.range,ic.day=Ht(function(n){var t=new oc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ic.days=ic.day.range,ic.days.utc=ic.day.utc.range,ic.dayOfYear=function(n){var t=ic.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ic[n]=Ht(function(n){return(n=ic.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ic.year(n).getDay();return Math.floor((ic.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ic[n+"s"]=e.range,ic[n+"s"].utc=e.utc.range,ic[n+"OfYear"]=function(n){var e=ic.year(n).getDay();return Math.floor((ic.dayOfYear(n)+(e+t)%7)/7)}}),ic.week=ic.sunday,ic.weeks=ic.sunday.range,ic.weeks.utc=ic.sunday.utc.range,ic.weekOfYear=ic.sundayOfYear;var cc={"-":"",_:" ",0:"0"},sc=/^\s*\d+/,lc=/^%/;Go.locale=function(n){return{numberFormat:Pt(n),timeFormat:Ot(n)}};var fc=Go.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Go.format=fc.numberFormat,Go.geo={},ce.prototype={s:0,t:0,add:function(n){se(n,this.t,hc),se(hc.s,this.s,this),this.s?this.t+=hc.t:this.s=hc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var hc=new ce;Go.geo.stream=function(n,t){n&&gc.hasOwnProperty(n.type)?gc[n.type](n,t):le(n,t)};var gc={Feature:function(n,t){le(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)le(e[r].geometry,t)}},pc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){fe(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)fe(e[r],t,0)},Polygon:function(n,t){he(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)he(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)le(e[r],t)}};Go.geo.area=function(n){return vc=0,Go.geo.stream(n,mc),vc};var vc,dc=new ce,mc={sphere:function(){vc+=4*Aa},point:v,lineStart:v,lineEnd:v,polygonStart:function(){dc.reset(),mc.lineStart=ge},polygonEnd:function(){var n=2*dc;vc+=0>n?4*Aa+n:n,mc.lineStart=mc.lineEnd=mc.point=v}};Go.geo.bounds=function(){function n(n,t){x.push(M=[l=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=pe([t*za,e*za]);if(m){var u=de(m,r),i=[u[1],-u[0],0],o=de(i,u);xe(o),o=Me(o);var c=t-p,s=c>0?1:-1,v=o[0]*Ra*s,d=fa(c)>180;if(d^(v>s*p&&s*t>v)){var y=o[1]*Ra;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>s*p&&s*t>v)){var y=-o[1]*Ra;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t):h>=l?(l>t&&(l=t),t>h&&(h=t)):t>p?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=l,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=fa(r)>180?r+(r>0?360:-360):r}else v=n,d=e;mc.point(n,e),t(n,e)}function i(){mc.lineStart()}function o(){u(v,d),mc.lineEnd(),fa(y)>Ta&&(l=-(h=180)),M[0]=l,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function s(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var l,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,mc.polygonStart()},polygonEnd:function(){mc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>dc?(l=-(h=180),f=-(g=90)):y>Ta?g=90:-Ta>y&&(f=-90),M[0]=l,M[1]=h -}};return function(n){g=h=-(l=f=1/0),x=[],Go.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],s(e[0],u)||s(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,l=e[0],h=u[1])}return x=M=null,1/0===l||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[l,f],[h,g]]}}(),Go.geo.centroid=function(n){yc=xc=Mc=_c=bc=wc=Sc=kc=Ec=Nc=Ac=0,Go.geo.stream(n,Cc);var t=Ec,e=Nc,r=Ac,u=t*t+e*e+r*r;return qa>u&&(t=wc,e=Sc,r=kc,Ta>xc&&(t=Mc,e=_c,r=bc),u=t*t+e*e+r*r,qa>u)?[0/0,0/0]:[Math.atan2(e,t)*Ra,G(r/Math.sqrt(u))*Ra]};var yc,xc,Mc,_c,bc,wc,Sc,kc,Ec,Nc,Ac,Cc={sphere:v,point:be,lineStart:Se,lineEnd:ke,polygonStart:function(){Cc.lineStart=Ee},polygonEnd:function(){Cc.lineStart=Se}},Lc=Te(Ne,Pe,je,[-Aa,-Aa/2]),Tc=1e9;Go.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Oe(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Go.geo.conicEqualArea=function(){return Ie(Ze)}).raw=Ze,Go.geo.albers=function(){return Go.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Go.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Go.geo.albers(),o=Go.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Go.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var s=i.scale(),l=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[l-.455*s,f-.238*s],[l+.455*s,f+.238*s]]).stream(c).point,r=o.translate([l-.307*s,f+.201*s]).clipExtent([[l-.425*s+Ta,f+.12*s+Ta],[l-.214*s-Ta,f+.234*s-Ta]]).stream(c).point,u=a.translate([l-.205*s,f+.212*s]).clipExtent([[l-.214*s+Ta,f+.166*s+Ta],[l-.115*s-Ta,f+.234*s-Ta]]).stream(c).point,n},n.scale(1070)};var qc,zc,Rc,Dc,Pc,Uc,jc={point:v,lineStart:v,lineEnd:v,polygonStart:function(){zc=0,jc.lineStart=Ve},polygonEnd:function(){jc.lineStart=jc.lineEnd=jc.point=v,qc+=fa(zc/2)}},Hc={point:$e,lineStart:v,lineEnd:v,polygonStart:v,polygonEnd:v},Fc={point:Je,lineStart:We,lineEnd:Ge,polygonStart:function(){Fc.lineStart=Ke},polygonEnd:function(){Fc.point=Je,Fc.lineStart=We,Fc.lineEnd=Ge}};Go.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Go.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return qc=0,Go.geo.stream(n,u(jc)),qc},n.centroid=function(n){return Mc=_c=bc=wc=Sc=kc=Ec=Nc=Ac=0,Go.geo.stream(n,u(Fc)),Ac?[Ec/Ac,Nc/Ac]:kc?[wc/kc,Sc/kc]:bc?[Mc/bc,_c/bc]:[0/0,0/0]},n.bounds=function(n){return Pc=Uc=-(Rc=Dc=1/0),Go.geo.stream(n,u(Hc)),[[Rc,Dc],[Pc,Uc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||tr(n):Nt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Xe:new Qe(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Go.geo.albersUsa()).context(null)},Go.geo.transform=function(n){return{stream:function(t){var e=new er(t);for(var r in n)e[r]=n[r];return e}}},er.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Go.geo.projection=ur,Go.geo.projectionMutator=ir,(Go.geo.equirectangular=function(){return ur(ar)}).raw=ar.invert=ar,Go.geo.rotation=function(n){function t(t){return t=n(t[0]*za,t[1]*za),t[0]*=Ra,t[1]*=Ra,t}return n=sr(n[0]%360*za,n[1]*za,n.length>2?n[2]*za:0),t.invert=function(t){return t=n.invert(t[0]*za,t[1]*za),t[0]*=Ra,t[1]*=Ra,t},t},cr.invert=ar,Go.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=sr(-n[0]*za,-n[1]*za,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ra,n[1]*=Ra}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=gr((t=+r)*za,u*za),n):t},n.precision=function(r){return arguments.length?(e=gr(t*za,(u=+r)*za),n):u},n.angle(90)},Go.geo.distance=function(n,t){var e,r=(t[0]-n[0])*za,u=n[1]*za,i=t[1]*za,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),s=Math.cos(u),l=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=s*l-c*f*a)*e),c*l+s*f*a)},Go.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Go.range(Math.ceil(i/d)*d,u,d).map(h).concat(Go.range(Math.ceil(s/m)*m,c,m).map(g)).concat(Go.range(Math.ceil(r/p)*p,e,p).filter(function(n){return fa(n%d)>Ta}).map(l)).concat(Go.range(Math.ceil(a/v)*v,o,v).filter(function(n){return fa(n%m)>Ta}).map(f))}var e,r,u,i,o,a,c,s,l,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(s).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],s=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),s>c&&(t=s,s=c,c=t),n.precision(y)):[[i,s],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,l=vr(a,o,90),f=dr(r,e,y),h=vr(s,c,90),g=dr(i,u,y),n):y},n.majorExtent([[-180,-90+Ta],[180,90-Ta]]).minorExtent([[-180,-80-Ta],[180,80+Ta]])},Go.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=mr,u=yr;return n.distance=function(){return Go.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Go.geo.interpolate=function(n,t){return xr(n[0]*za,n[1]*za,t[0]*za,t[1]*za)},Go.geo.length=function(n){return Oc=0,Go.geo.stream(n,Yc),Oc};var Oc,Yc={sphere:v,point:v,lineStart:Mr,lineEnd:v,polygonStart:v,polygonEnd:v},Ic=_r(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Go.geo.azimuthalEqualArea=function(){return ur(Ic)}).raw=Ic;var Zc=_r(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},Nt);(Go.geo.azimuthalEquidistant=function(){return ur(Zc)}).raw=Zc,(Go.geo.conicConformal=function(){return Ie(br)}).raw=br,(Go.geo.conicEquidistant=function(){return Ie(wr)}).raw=wr;var Vc=_r(function(n){return 1/n},Math.atan);(Go.geo.gnomonic=function(){return ur(Vc)}).raw=Vc,Sr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-La]},(Go.geo.mercator=function(){return kr(Sr)}).raw=Sr;var $c=_r(function(){return 1},Math.asin);(Go.geo.orthographic=function(){return ur($c)}).raw=$c;var Xc=_r(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Go.geo.stereographic=function(){return ur(Xc)}).raw=Xc,Er.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-La]},(Go.geo.transverseMercator=function(){var n=kr(Er),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[-n[1],n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},n.rotate([0,0])}).raw=Er,Go.geom={},Go.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=Et(e),i=Et(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(Lr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var s=Cr(a),l=Cr(c),f=l[0]===s[0],h=l[l.length-1]===s[s.length-1],g=[];for(t=s.length-1;t>=0;--t)g.push(n[a[s[t]][2]]);for(t=+f;t<l.length-h;++t)g.push(n[a[l[t]][2]]);return g}var e=Nr,r=Ar;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Go.geom.polygon=function(n){return da(n,Bc),n};var Bc=Go.geom.polygon.prototype=[];Bc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Bc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Bc.clip=function(n){for(var t,e,r,u,i,o,a=zr(n),c=-1,s=this.length-zr(this),l=this[s-1];++c<s;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Tr(o,l,u)?(Tr(i,l,u)||n.push(qr(i,o,l,u)),n.push(o)):Tr(i,l,u)&&n.push(qr(i,o,l,u)),i=o;a&&n.push(n[0]),l=u}return n};var Jc,Wc,Gc,Kc,Qc,ns=[],ts=[];Or.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ir),t.length},Qr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},nu.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=uu(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(eu(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ru(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(ru(this,e),n=e,e=n.U),e.C=!1,r.C=!0,eu(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?uu(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,eu(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ru(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,eu(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,ru(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,eu(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,ru(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Go.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return iu(e(n),a).cells.forEach(function(e,a){var c=e.edges,s=e.site,l=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):s.x>=r&&s.x<=i&&s.y>=u&&s.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];l.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Ta)*Ta,y:Math.round(o(n,t)/Ta)*Ta,i:t}})}var r=Nr,u=Ar,i=r,o=u,a=es;return n?t(n):(t.links=function(n){return iu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return iu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Ir),c=-1,s=a.length,l=a[s-1].edge,f=l.l===o?l.r:l.l;++c<s;)u=l,i=f,l=a[c].edge,f=l.l===o?l.r:l.l,r<i.i&&r<f.i&&au(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=Et(r=n),t):r},t.y=function(n){return arguments.length?(o=Et(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?es:n,t):a===es?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===es?null:a&&a[1]},t)};var es=[[-1e6,-1e6],[1e6,1e6]];Go.geom.delaunay=function(n){return Go.geom.voronoi().triangles(n)},Go.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,l=n.y;if(null!=c)if(fa(c-e)+fa(l-r)<.01)s(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,s(n,f,c,l,u,i,o,a),s(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else s(n,t,e,r,u,i,o,a)}function s(n,t,e,r,u,o,a,c){var s=.5*(u+a),l=.5*(o+c),f=e>=s,h=r>=l,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=lu()),f?u=s:a=s,h?o=l:c=l,i(n,t,e,r,u,o,a,c)}var l,f,h,g,p,v,d,m,y,x=Et(a),M=Et(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)l=n[g],l.x<v&&(v=l.x),l.y<d&&(d=l.y),l.x>m&&(m=l.x),l.y>y&&(y=l.y),f.push(l.x),h.push(l.y);else for(g=0;p>g;++g){var _=+x(l=n[g],g),b=+M(l,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=lu();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){fu(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=l=null,k}var o,a=Nr,c=Ar;return(o=arguments.length)?(a=cu,c=su,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Go.interpolateRgb=hu,Go.interpolateObject=gu,Go.interpolateNumber=pu,Go.interpolateString=vu;var rs=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;Go.interpolate=du,Go.interpolators=[function(n,t){var e=typeof t;return("string"===e?Ja.has(t)||/^(#|rgb\(|hsl\()/.test(t)?hu:vu:t instanceof et?hu:Array.isArray(t)?mu:"object"===e&&isNaN(t)?gu:pu)(n,t)}],Go.interpolateArray=mu;var us=function(){return Nt},is=Go.map({linear:us,poly:Su,quad:function(){return _u},cubic:function(){return bu},sin:function(){return ku},exp:function(){return Eu},circle:function(){return Nu},elastic:Au,back:Cu,bounce:function(){return Lu}}),os=Go.map({"in":Nt,out:xu,"in-out":Mu,"out-in":function(n){return Mu(xu(n))}});Go.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=is.get(e)||us,r=os.get(r)||Nt,yu(r(e.apply(null,Ko.call(arguments,1))))},Go.interpolateHcl=Tu,Go.interpolateHsl=qu,Go.interpolateLab=zu,Go.interpolateRound=Ru,Go.transform=function(n){var t=na.createElementNS(Go.ns.prefix.svg,"g");return(Go.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Du(e?e.matrix:as)})(n)},Du.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var as={a:1,b:0,c:0,d:1,e:0,f:0};Go.interpolateTransform=Hu,Go.layout={},Go.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Yu(n[e]));return t}},Go.layout.chord=function(){function n(){var n,s,f,h,g,p={},v=[],d=Go.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(s=0,g=-1;++g<i;)s+=u[h][g];v.push(s),m.push(Go.range(i)),n+=s}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(Ca-l*i)/n,s=0,h=-1;++h<i;){for(f=s,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=s,b=s+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:s,value:(s-f)/n},s+=l}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,s={},l=0;return s.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,s):u},s.padding=function(n){return arguments.length?(l=n,e=r=null,s):l},s.sortGroups=function(n){return arguments.length?(o=n,e=r=null,s):o},s.sortSubgroups=function(n){return arguments.length?(a=n,e=null,s):a},s.sortChords=function(n){return arguments.length?(c=n,e&&t(),s):c},s.chords=function(){return e||n(),e},s.groups=function(){return r||n(),r},s},Go.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var s=t.charge/c;n.px-=i*s,n.py-=o*s}return!0}if(t.point&&c&&p>c){var s=t.pointCharge/c;n.px-=i*s,n.py-=o*s}}return!t.charge}}function t(n){n.px=Go.event.x,n.py=Go.event.y,a.resume()}var e,r,u,i,o,a={},c=Go.dispatch("start","tick","end"),s=[1,1],l=.9,f=cs,h=ss,g=-30,p=ls,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=s[0]/2,M=s[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Ju(t=Go.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*l,a.y-=(a.py-(a.py=a.y))*l);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(s=n,a):s},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(l=+n,a):l},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Go.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,s=o.length;++a<s;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,l=y.length,p=s[0],v=s[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;l>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;l>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;l>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;l>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;l>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Go.behavior.drag().origin(Nt).on("dragstart.force",Vu).on("drag.force",t).on("dragend.force",$u)),arguments.length?(this.on("mouseover.force",Xu).on("mouseout.force",Bu).call(e),void 0):e},Go.rebind(a,c,"on")};var cs=20,ss=1,ls=1/0;Go.layout.hierarchy=function(){function n(t,o,a){var c=u.call(e,t,o);if(t.depth=o,a.push(t),c&&(s=c.length)){for(var s,l,f=-1,h=t.children=new Array(s),g=0,p=o+1;++f<s;)l=h[f]=n(c[f],p,a),l.parent=t,g+=l.value;r&&h.sort(r),i&&(t.value=g)}else delete t.children,i&&(t.value=+i.call(e,t,o)||0);return t}function t(n,r){var u=n.children,o=0;if(u&&(a=u.length))for(var a,c=-1,s=r+1;++c<a;)o+=t(u[c],s);else i&&(o=+i.call(e,n,r)||0);return i&&(n.value=o),o}function e(t){var e=[];return n(t,0,e),e}var r=Qu,u=Gu,i=Ku;return e.sort=function(n){return arguments.length?(r=n,e):r},e.children=function(n){return arguments.length?(u=n,e):u},e.value=function(n){return arguments.length?(i=n,e):i},e.revalue=function(n){return t(n,0),n},e},Go.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,s=-1;for(r=t.value?r/t.value:0;++s<o;)n(a=i[s],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Go.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Wu(e,r)},Go.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Go.sum(o),s=Go.range(i.length);null!=e&&s.sort(e===fs?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var l=[];return s.forEach(function(n){var t;l[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),l}var t=Number,e=fs,r=0,u=Ca;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var fs={};Go.layout.stack=function(){function n(a,c){var s=a.map(function(e,r){return t.call(n,e,r)}),l=s.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,l,c);s=Go.permute(s,f),l=Go.permute(l,f);var h,g,p,v=r.call(n,l,c),d=s.length,m=s[0].length;for(g=0;m>g;++g)for(u.call(n,s[0][g],p=v[g],l[0][g][1]),h=1;d>h;++h)u.call(n,s[h][g],p+=l[h-1][g][1],l[h][g][1]);return a}var t=Nt,e=ui,r=ii,u=ri,i=ti,o=ei;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:hs.get(t)||ui,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:gs.get(t)||ii,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var hs=Go.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(oi),i=n.map(ai),o=Go.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,s=[],l=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],s.push(e)):(c+=i[e],l.push(e));return l.reverse().concat(s)},reverse:function(n){return Go.range(n.length).reverse()},"default":ui}),gs=Go.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,s,l=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=s=0,e=1;h>e;++e){for(t=0,u=0;l>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];l>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,s>c&&(s=c)}for(e=0;h>e;++e)g[e]-=s;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ii});Go.layout.histogram=function(){function n(n,i){for(var o,a,c=[],s=n.map(e,this),l=r.call(this,s,i),f=u.call(this,l,s,i),i=-1,h=s.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=s[i],a>=l[0]&&a<=l[1]&&(o=c[Go.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=fi,u=si;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=Et(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return li(n,t)}:Et(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Go.layout.tree=function(){function n(n,i){function o(n,t){var r=n.children,u=n._tree;if(r&&(i=r.length)){for(var i,a,s,l=r[0],f=l,h=-1;++h<i;)s=r[h],o(s,a),f=c(s,a,f),a=s;Mi(n);var g=.5*(l._tree.prelim+s._tree.prelim);t?(u.prelim=t._tree.prelim+e(n,t),u.mod=u.prelim-g):u.prelim=g}else t&&(u.prelim=t._tree.prelim+e(n,t))}function a(n,t){n.x=n._tree.prelim+t;var e=n.children;if(e&&(r=e.length)){var r,u=-1;for(t+=n._tree.mod;++u<r;)a(e[u],t)}}function c(n,t,r){if(t){for(var u,i=n,o=n,a=t,c=n.parent.children[0],s=i._tree.mod,l=o._tree.mod,f=a._tree.mod,h=c._tree.mod;a=pi(a),i=gi(i),a&&i;)c=gi(c),o=pi(o),o._tree.ancestor=n,u=a._tree.prelim+f-i._tree.prelim-s+e(a,i),u>0&&(_i(bi(a,n,r),n,u),s+=u,l+=u),f+=a._tree.mod,s+=i._tree.mod,h+=c._tree.mod,l+=o._tree.mod;a&&!pi(o)&&(o._tree.thread=a,o._tree.mod+=f-l),i&&!gi(c)&&(c._tree.thread=i,c._tree.mod+=s-h,r=n)}return r}var s=t.call(this,n,i),l=s[0];xi(l,function(n,t){n._tree={ancestor:n,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),o(l),a(l,-l._tree.prelim);var f=vi(l,mi),h=vi(l,di),g=vi(l,yi),p=f.x-e(f,h)/2,v=h.x+e(h,f)/2,d=g.depth||1;return xi(l,u?function(n){n.x*=r[0],n.y=n.depth*r[1],delete n._tree}:function(n){n.x=(n.x-p)/(v-p)*r[0],n.y=n.depth/d*r[1],delete n._tree}),s}var t=Go.layout.hierarchy().sort(null).value(null),e=hi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Wu(n,t)},Go.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],s=u[1],l=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,xi(a,function(n){n.r=+l(n.value)}),xi(a,Ni),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/s))/2;xi(a,function(n){n.r+=f}),xi(a,Ni),xi(a,function(n){n.r-=f})}return Li(a,c/2,s/2,t?1:1/Math.max(2*a.r/c,2*a.r/s)),o}var t,e=Go.layout.hierarchy().sort(wi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Wu(n,e)},Go.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],s=0;xi(c,function(n){var t=n.children;t&&t.length?(n.x=zi(t),n.y=qi(t)):(n.x=o?s+=e(n,o):0,n.y=0,o=n)});var l=Ri(c),f=Di(c),h=l.x-e(l,f)/2,g=f.x+e(f,l)/2;return xi(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Go.layout.hierarchy().sort(null).value(null),e=hi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Wu(n,t)},Go.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,s=f(e),l=[],h=i.slice(),p=1/0,v="slice"===g?s.dx:"dice"===g?s.dy:"slice-dice"===g?1&e.depth?s.dy:s.dx:Math.min(s.dx,s.dy);for(n(h,s.dx*s.dy/e.value),l.area=0;(c=h.length)>0;)l.push(o=h[c-1]),l.area+=o.area,"squarify"!==g||(a=r(l,v))<=p?(h.pop(),p=a):(l.area-=l.pop().area,u(l,v,s,!1),v=Math.min(s.dx,s.dy),l.length=l.area=0,p=1/0);l.length&&(u(l,v,s,!0),l.length=l.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,s=e.y,l=t?c(n.area/t):0;if(t==e.dx){for((r||l>e.dy)&&(l=e.dy);++i<o;)u=n[i],u.x=a,u.y=s,u.dy=l,a+=u.dx=Math.min(e.x+e.dx-a,l?c(u.area/l):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=l,e.dy-=l}else{for((r||l>e.dx)&&(l=e.dx);++i<o;)u=n[i],u.x=a,u.y=s,u.dx=l,s+=u.dy=Math.min(e.y+e.dy-s,l?c(u.area/l):0);u.z=!1,u.dy+=e.y+e.dy-s,e.x+=l,e.dx-=l}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=s[0],i.dy=s[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Go.layout.hierarchy(),c=Math.round,s=[1,1],l=null,f=Pi,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(s=n,i):s},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Pi(t):Ui(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ui(t,n)}if(!arguments.length)return l;var r;return f=null==(l=n)?Pi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Wu(i,a)},Go.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Go.random.normal.apply(Go,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Go.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Go.scale={};var ps={floor:Nt,ceil:Nt};Go.scale.linear=function(){return Zi([0,1],[0,1],du,!1)};var vs={s:1,g:1,p:1,r:1,e:1};Go.scale.log=function(){return Ki(Go.scale.linear().domain([0,1]),10,!0,[1,10])};var ds=Go.format(".0e"),ms={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Go.scale.pow=function(){return Qi(Go.scale.linear(),1,[0,1])},Go.scale.sqrt=function(){return Go.scale.pow().exponent(.5)},Go.scale.ordinal=function(){return to([],{t:"range",a:[[]]})},Go.scale.category10=function(){return Go.scale.ordinal().range(ys)},Go.scale.category20=function(){return Go.scale.ordinal().range(xs)},Go.scale.category20b=function(){return Go.scale.ordinal().range(Ms)},Go.scale.category20c=function(){return Go.scale.ordinal().range(_s)};var ys=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(mt),xs=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(mt),Ms=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(mt),_s=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(mt);Go.scale.quantile=function(){return eo([],[]) -},Go.scale.quantize=function(){return ro(0,1,[0,1])},Go.scale.threshold=function(){return uo([.5],[0,1])},Go.scale.identity=function(){return io([0,1])},Go.svg={},Go.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+bs,a=u.apply(this,arguments)+bs,c=(o>a&&(c=o,o=a,a=c),a-o),s=Aa>c?"0":"1",l=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a);return c>=ws?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+s+",0 "+n*l+","+n*f+"Z":"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=oo,e=ao,r=co,u=so;return n.innerRadius=function(e){return arguments.length?(t=Et(e),n):t},n.outerRadius=function(t){return arguments.length?(e=Et(t),n):e},n.startAngle=function(t){return arguments.length?(r=Et(t),n):r},n.endAngle=function(t){return arguments.length?(u=Et(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+bs;return[Math.cos(i)*n,Math.sin(i)*n]},n};var bs=-La,ws=Ca-Ta;Go.svg.line=function(){return lo(Nt)};var Ss=Go.map({linear:fo,"linear-closed":ho,step:go,"step-before":po,"step-after":vo,basis:bo,"basis-open":wo,"basis-closed":So,bundle:ko,cardinal:xo,"cardinal-open":mo,"cardinal-closed":yo,monotone:To});Ss.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var ks=[0,2/3,1/3,0],Es=[0,1/3,2/3,0],Ns=[0,1/6,2/3,1/6];Go.svg.line.radial=function(){var n=lo(qo);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},po.reverse=vo,vo.reverse=po,Go.svg.area=function(){return zo(Nt)},Go.svg.area.radial=function(){var n=zo(qo);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Go.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),s=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,s)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,s.r,s.p0)+r(s.r,s.p1,s.a1-s.a0)+u(s.r,s.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+bs,l=s.call(n,u,r)+bs;return{r:i,a0:o,a1:l,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(l),i*Math.sin(l)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Aa)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=mr,o=yr,a=Ro,c=co,s=so;return n.radius=function(t){return arguments.length?(a=Et(t),n):a},n.source=function(t){return arguments.length?(i=Et(t),n):i},n.target=function(t){return arguments.length?(o=Et(t),n):o},n.startAngle=function(t){return arguments.length?(c=Et(t),n):c},n.endAngle=function(t){return arguments.length?(s=Et(t),n):s},n},Go.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=mr,e=yr,r=Do;return n.source=function(e){return arguments.length?(t=Et(e),n):t},n.target=function(t){return arguments.length?(e=Et(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Go.svg.diagonal.radial=function(){var n=Go.svg.diagonal(),t=Do,e=n.projection;return n.projection=function(n){return arguments.length?e(Po(t=n)):t},n},Go.svg.symbol=function(){function n(n,r){return(As.get(t.call(this,n,r))||Ho)(e.call(this,n,r))}var t=jo,e=Uo;return n.type=function(e){return arguments.length?(t=Et(e),n):t},n.size=function(t){return arguments.length?(e=Et(t),n):e},n};var As=Go.map({circle:Ho,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*qs)),e=t*qs;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Ts),e=t*Ts/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Ts),e=t*Ts/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Go.svg.symbolTypes=As.keys();var Cs,Ls,Ts=Math.sqrt(3),qs=Math.tan(30*za),zs=[],Rs=0;zs.call=_a.call,zs.empty=_a.empty,zs.node=_a.node,zs.size=_a.size,Go.transition=function(n){return arguments.length?Cs?n.transition():n:Sa.transition()},Go.transition.prototype=zs,zs.select=function(n){var t,e,r,u=this.id,i=[];n=b(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],s=-1,l=c.length;++s<l;)(r=c[s])&&(e=n.call(r,r.__data__,s,o))?("__data__"in r&&(e.__data__=r.__data__),Io(e,s,u,r.__transition__[u]),t.push(e)):t.push(null)}return Fo(i,u)},zs.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=w(n);for(var c=-1,s=this.length;++c<s;)for(var l=this[c],f=-1,h=l.length;++f<h;)if(r=l[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Io(u,g,o,i),t.push(u)}return Fo(a,o)},zs.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=R(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Fo(u,this.id)},zs.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):P(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},zs.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Hu:du,a=Go.ns.qualify(n);return Oo(this,"attr."+n,t,a.local?i:u)},zs.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Go.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},zs.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=ea.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=du(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Oo(this,"style."+n,t,u)},zs.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,ea.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},zs.text=function(n){return Oo(this,"text",n,Yo)},zs.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},zs.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Go.ease.apply(Go,arguments)),P(this,function(e){e.__transition__[t].ease=n}))},zs.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},zs.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},zs.each=function(n,t){var e=this.id;if(arguments.length<2){var r=Ls,u=Cs;Cs=e,P(this,function(t,r,u){Ls=t.__transition__[e],n.call(t,t.__data__,r,u)}),Ls=r,Cs=u}else P(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Go.dispatch("start","end"))).on(n,t)});return this},zs.transition=function(){for(var n,t,e,r,u=this.id,i=++Rs,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],s=0,l=t.length;l>s;s++)(e=t[s])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Io(e,s,i,r)),n.push(e)}return Fo(o,i)},Go.svg.axis=function(){function n(n){n.each(function(){var n,s=Go.select(this),l=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):Nt:t,p=s.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Ta),d=Go.transition(p.exit()).style("opacity",Ta).remove(),m=Go.transition(p.order()).style("opacity",1),y=Hi(f),x=s.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Go.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=Zo,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=Zo,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=Vo,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=Vo,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,N=E.rangeBand()/2;l=f=function(n){return E(n)+N}}else l.rangeBand?l=f:d.call(n,f);v.call(n,l),m.call(n,f)})}var t,e=Go.scale.linear(),r=Ds,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Ps?t+"":Ds,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Ds="bottom",Ps={top:1,right:1,bottom:1,left:1};Go.svg.brush=function(){function n(i){i.each(function(){var i=Go.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,Nt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Us[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,f=Go.transition(i),h=Go.transition(o);c&&(l=Hi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),e(f)),s&&(l=Hi(s),h.attr("y",l[0]).attr("height",l[1]-l[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+l[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",l[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",l[1]-l[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Go.event.keyCode&&(A||(x=null,L[0]-=l[1],L[1]-=f[1],A=2),y())}function p(){32==Go.event.keyCode&&2==A&&(L[0]+=l[1],L[1]+=f[1],A=0,y())}function v(){var n=Go.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),A||(Go.event.altKey?(x||(x=[(l[0]+l[1])/2,(f[0]+f[1])/2]),L[0]=l[+(n[0]<x[0])],L[1]=f[+(n[1]<x[1])]):x=null),E&&d(n,c,0)&&(e(S),u=!0),N&&d(n,s,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:A?"move":"resize"}))}function d(n,t,e){var r,u,a=Hi(t),c=a[0],s=a[1],p=L[e],v=e?f:l,d=v[1]-v[0];return A&&(c-=p,s-=d+p),r=(e?g:h)?Math.max(c,Math.min(s,n[e])):n[e],A?u=(r+=p)+d:(x&&(p=Math.max(c,Math.min(s,2*x[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Go.select("body").style("cursor",null),T.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),C(),w({type:"brushend"})}var x,M,_=this,b=Go.select(Go.event.target),w=a.of(_,arguments),S=Go.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,N=!/^(e|w)$/.test(k)&&s,A=b.classed("extent"),C=I(),L=Go.mouse(_),T=Go.select(ea).on("keydown.brush",u).on("keyup.brush",p);if(Go.event.changedTouches?T.on("touchmove.brush",v).on("touchend.brush",m):T.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),A)L[0]=l[0]-L[0],L[1]=f[0]-L[1];else if(k){var q=+/w$/.test(k),z=+/^n/.test(k);M=[l[1-q]-L[0],f[1-z]-L[1]],L[0]=l[q],L[1]=f[z]}else Go.event.altKey&&(x=L.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Go.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=M(n,"brushstart","brush","brushend"),c=null,s=null,l=[0,0],f=[0,0],h=!0,g=!0,p=js[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:l,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Cs?Go.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,l=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=mu(l,t.x),r=mu(f,t.y);return i=o=null,function(u){l=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=js[!c<<1|!s],n):c},n.y=function(t){return arguments.length?(s=t,p=js[!c<<1|!s],n):s},n.clamp=function(t){return arguments.length?(c&&s?(h=!!t[0],g=!!t[1]):c?h=!!t:s&&(g=!!t),n):c&&s?[h,g]:c?h:s?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=l[0]||r!=l[1])&&(l=[e,r])),s&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],s.invert&&(u=s(u),a=s(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=l[0],r=l[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),s&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],s.invert&&(u=s.invert(u),a=s.invert(a)),u>a&&(h=u,u=a,a=h))),c&&s?[[e,u],[r,a]]:c?[e,r]:s&&[u,a])},n.clear=function(){return n.empty()||(l=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&l[0]==l[1]||!!s&&f[0]==f[1]},Go.rebind(n,a,"on")};var Us={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},js=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Hs=ic.format=fc.timeFormat,Fs=Hs.utc,Os=Fs("%Y-%m-%dT%H:%M:%S.%LZ");Hs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?$o:Os,$o.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},$o.toString=Os.toString,ic.second=Ht(function(n){return new oc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ic.seconds=ic.second.range,ic.seconds.utc=ic.second.utc.range,ic.minute=Ht(function(n){return new oc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ic.minutes=ic.minute.range,ic.minutes.utc=ic.minute.utc.range,ic.hour=Ht(function(n){var t=n.getTimezoneOffset()/60;return new oc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ic.hours=ic.hour.range,ic.hours.utc=ic.hour.utc.range,ic.month=Ht(function(n){return n=ic.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ic.months=ic.month.range,ic.months.utc=ic.month.utc.range;var Ys=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Is=[[ic.second,1],[ic.second,5],[ic.second,15],[ic.second,30],[ic.minute,1],[ic.minute,5],[ic.minute,15],[ic.minute,30],[ic.hour,1],[ic.hour,3],[ic.hour,6],[ic.hour,12],[ic.day,1],[ic.day,2],[ic.week,1],[ic.month,1],[ic.month,3],[ic.year,1]],Zs=Hs.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",Ne]]),Vs={range:function(n,t,e){return Go.range(Math.ceil(n/e)*e,+t,e).map(Bo)},floor:Nt,ceil:Nt};Is.year=ic.year,ic.scale=function(){return Xo(Go.scale.linear(),Is,Zs)};var $s=Is.map(function(n){return[n[0].utc,n[1]]}),Xs=Fs.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",Ne]]);$s.year=ic.year.utc,ic.scale.utc=function(){return Xo(Go.scale.linear(),$s,Xs)},Go.text=At(function(n){return n.responseText}),Go.json=function(n,t){return Ct(n,"application/json",Jo,t)},Go.html=function(n,t){return Ct(n,"text/html",Wo,t)},Go.xml=At(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Go):"object"==typeof module&&module.exports?module.exports=Go:this.d3=Go}();
\ No newline at end of file +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){ +r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){ +return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
\ No newline at end of file diff --git a/src/usr/local/www/vendor/nvd3/nv.d3.css b/src/usr/local/www/vendor/nvd3/nv.d3.css index 252f472..bca7ab6 100644 --- a/src/usr/local/www/vendor/nvd3/nv.d3.css +++ b/src/usr/local/www/vendor/nvd3/nv.d3.css @@ -1,4 +1,4 @@ -/* nvd3 version 1.8.2 (https://github.com/novus/nvd3) 2016-01-24 */ +/* nvd3 version 1.8.3 (https://github.com/novus/nvd3) 2016-04-26 */ .nvd3 .nv-axis { pointer-events:none; opacity: 1; @@ -164,6 +164,18 @@ } +.nv-force-node { + stroke: #fff; + stroke-width: 1.5px; +} +.nv-force-link { + stroke: #999; + stroke-opacity: .6; +} +.nv-force-node text { + stroke-width: 0px +} + .nvd3 .nv-legend .nv-disabled rect { /*fill-opacity: 0;*/ } @@ -333,6 +345,16 @@ svg.nvd3-svg { fill-opacity: .7; } +/********** +* Print +*/ + +@media print { + .nvd3 text { + stroke-width: 0; + fill-opacity: 1; + } +} .nvd3.nv-ohlcBar .nv-ticks .nv-tick { stroke-width: 1px; @@ -373,7 +395,7 @@ svg.nvd3-svg { .nvd3 .nv-parallelCoordinates .hover { fill-opacity: 1; - stroke-width: 3px; + stroke-width: 3px; } diff --git a/src/usr/local/www/vendor/nvd3/nv.d3.js b/src/usr/local/www/vendor/nvd3/nv.d3.js index 3f7b3c3..149621d 100644 --- a/src/usr/local/www/vendor/nvd3/nv.d3.js +++ b/src/usr/local/www/vendor/nvd3/nv.d3.js @@ -1,4 +1,4 @@ -/* nvd3 version 1.8.2 (https://github.com/novus/nvd3) 2016-01-24 */ +/* nvd3 version 1.8.3 (https://github.com/novus/nvd3) 2016-04-26 */ (function(){ // set up main nv object @@ -13,6 +13,11 @@ nv.charts = {}; //stores all the ready to use charts nv.logs = {}; //stores some statistics and potential error messages nv.dom = {}; //DOM manipulation functions +// Node/CommonJS - require D3 +if (typeof(module) !== 'undefined' && typeof(exports) !== 'undefined' && typeof(d3) == 'undefined') { + d3 = require('d3'); +} + nv.dispatch = d3.dispatch('render_start', 'render_end'); // Function bind polyfill @@ -157,7 +162,7 @@ if (typeof(window) !== 'undefined') { */ nv.dom.write = function(callback) { if (window.fastdom !== undefined) { - return fastdom.write(callback); + return fastdom.mutate(callback); } return callback(); }; @@ -170,10 +175,11 @@ nv.dom.write = function(callback) { */ nv.dom.read = function(callback) { if (window.fastdom !== undefined) { - return fastdom.read(callback); + return fastdom.measure(callback); } return callback(); -};/* Utility class to handle creation of an interactive layer. +}; +/* Utility class to handle creation of an interactive layer. This places a rectangle on top of the chart. When you mouse move over it, it sends a dispatch containing the X-coordinate. It can also render a vertical line where the mouse is located. @@ -258,7 +264,8 @@ nv.interactiveGuideline = function() { /* If mouseX/Y is outside of the chart's bounds, trigger a mouseOut event. */ - if (mouseX < 0 || mouseY < 0 + if (d3.event.type === 'mouseout' + || mouseX < 0 || mouseY < 0 || mouseX > availableWidth || mouseY > availableHeight || (d3.event.relatedTarget && d3.event.relatedTarget.ownerSVGElement === undefined) || mouseOutAnyReason @@ -642,11 +649,11 @@ nv.models.tooltip = function() { var dataSeriesExists = function(d) { if (d && d.series) { - if (d.series instanceof Array) { - return !!d.series.length; + if (nv.utils.isArray(d.series)) { + return true; } // if object, it's okay just convert to array of the object - if (d.series instanceof Object) { + if (nv.utils.isObject(d.series)) { d.series = [d.series]; return true; } @@ -754,18 +761,23 @@ nv.models.tooltip = function() { // Creates new tooltip container, or uses existing one on DOM. function initTooltip() { - if (!tooltip) { + if (!tooltip || !tooltip.node()) { var container = chartContainer ? chartContainer : document.body; - // Create new tooltip div if it doesn't exist on DOM. - tooltip = d3.select(container).append("div") - .attr("class", "nvtooltip " + (classes ? classes : "xy-tooltip")) - .attr("id", id); - tooltip.style("top", 0).style("left", 0); - tooltip.style('opacity', 0); - tooltip.style('position', 'fixed'); - tooltip.selectAll("div, table, td, tr").classed(nvPointerEventsClass, true); - tooltip.classed(nvPointerEventsClass, true); + + var data = [1]; + tooltip = d3.select(container).selectAll('.nvtooltip').data(data); + + tooltip.enter().append('div') + .attr("class", "nvtooltip " + (classes ? classes : "xy-tooltip")) + .attr("id", id) + .style("top", 0).style("left", 0) + .style('opacity', 0) + .style('position', 'fixed') + .selectAll("div, table, td, tr").classed(nvPointerEventsClass, true) + .classed(nvPointerEventsClass, true); + + tooltip.exit().remove() } } @@ -884,6 +896,25 @@ nv.utils.windowSize = function() { return (size); }; + +/* handle dumb browser quirks... isinstance breaks if you use frames +typeof returns 'object' for null, NaN is a number, etc. + */ +nv.utils.isArray = Array.isArray; +nv.utils.isObject = function(a) { + return a !== null && typeof a === 'object'; +}; +nv.utils.isFunction = function(a) { + return typeof a === 'function'; +}; +nv.utils.isDate = function(a) { + return toString.call(a) === '[object Date]'; +}; +nv.utils.isNumber = function(a) { + return !isNaN(a) && typeof a === 'number'; +}; + + /* Binds callback function to run when window is resized */ @@ -915,8 +946,7 @@ nv.utils.getColor = function(color) { return nv.utils.defaultColor(); //if passed an array, turn it into a color scale - // use isArray, instanceof fails if d3 range is created in an iframe - } else if(Array.isArray(color)) { + } else if(nv.utils.isArray(color)) { var color_scale = d3.scale.ordinal().range(color); return function(d, i) { var key = i === undefined ? d : i; @@ -956,7 +986,7 @@ nv.utils.customTheme = function(dictionary, getKey, defaultColors) { return function(series, index) { var key = getKey(series); - if (typeof dictionary[key] === 'function') { + if (nv.utils.isFunction(dictionary[key])) { return dictionary[key](); } else if (dictionary[key] !== undefined) { return dictionary[key]; @@ -1010,12 +1040,10 @@ Most common instance is when the element is in a display:none; container. Forumla is : text.length * font-size * constant_factor */ nv.utils.calcApproxTextWidth = function (svgTextElem) { - if (typeof svgTextElem.style === 'function' - && typeof svgTextElem.text === 'function') { - + if (nv.utils.isFunction(svgTextElem.style) && nv.utils.isFunction(svgTextElem.text)) { var fontSize = parseInt(svgTextElem.style("font-size").replace("px",""), 10); var textLength = svgTextElem.text().length; - return textLength * fontSize * 0.5; + return nv.utils.NaNtoZero(textLength * fontSize * 0.5); } return 0; }; @@ -1025,7 +1053,7 @@ nv.utils.calcApproxTextWidth = function (svgTextElem) { Numbers that are undefined, null or NaN, convert them to zeros. */ nv.utils.NaNtoZero = function(n) { - if (typeof n !== 'number' + if (!nv.utils.isNumber(n) || isNaN(n) || n === null || n === Infinity @@ -1143,9 +1171,9 @@ nv.utils.deepExtend = function(dst){ var sources = arguments.length > 1 ? [].slice.call(arguments, 1) : []; sources.forEach(function(source) { for (var key in source) { - var isArray = dst[key] instanceof Array; - var isObject = typeof dst[key] === 'object'; - var srcObj = typeof source[key] === 'object'; + var isArray = nv.utils.isArray(dst[key]); + var isObject = nv.utils.isObject(dst[key]); + var srcObj = nv.utils.isObject(source[key]); if (isObject && !isArray && srcObj) { nv.utils.deepExtend(dst[key], source[key]); @@ -1244,7 +1272,7 @@ chart.options = nv.utils.optionsFunc.bind(chart); nv.utils.optionsFunc = function(args) { if (args) { d3.map(args).forEach((function(key,value) { - if (typeof this[key] === "function") { + if (nv.utils.isFunction(this[key])) { this[key](value); } }).bind(this)); @@ -1560,6 +1588,7 @@ nv.utils.arrayEquals = function (array1, array2) { , isOrdinal = false , ticks = null , axisLabelDistance = 0 + , fontSize = undefined , duration = 250 , dispatch = d3.dispatch('renderEnd') ; @@ -1607,6 +1636,11 @@ nv.utils.arrayEquals = function (array1, array2) { .data([axisLabelText || null]); axisLabel.exit().remove(); + //only skip when fontSize is undefined so it can be cleared with a null or blank string + if (fontSize !== undefined) { + g.selectAll('g').select("text").style('font-size', fontSize); + } + var xLabelMargin; var axisMaxMin; var w; @@ -1657,6 +1691,8 @@ nv.utils.arrayEquals = function (array1, array2) { var xTicks = g.selectAll('g').select("text"); var rotateLabelsRule = ''; if (rotateLabels%360) { + //Reset transform on ticks so textHeight can be calculated correctly + xTicks.attr('transform', ''); //Calculate the longest xTick width xTicks.each(function(d,i){ var box = this.getBoundingClientRect(); @@ -1896,6 +1932,7 @@ nv.utils.arrayEquals = function (array1, array2) { height: {get: function(){return height;}, set: function(_){height=_;}}, ticks: {get: function(){return ticks;}, set: function(_){ticks=_;}}, width: {get: function(){return width;}, set: function(_){width=_;}}, + fontSize: {get: function(){return fontSize;}, set: function(_){fontSize=_;}}, // options that require extra logic in the setter margin: {get: function(){return margin;}, set: function(_){ @@ -1929,30 +1966,36 @@ nv.models.boxPlot = function() { // Public Variables with Default Settings //------------------------------------------------------------ - var margin = {top: 0, right: 0, bottom: 0, left: 0} - , width = 960 - , height = 500 - , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one - , x = d3.scale.ordinal() - , y = d3.scale.linear() - , getX = function(d) { return d.x } - , getY = function(d) { return d.y } - , color = nv.utils.defaultColor() - , container = null - , xDomain - , yDomain - , xRange - , yRange - , dispatch = d3.dispatch('elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd') - , duration = 250 - , maxBoxWidth = null - ; + var margin = {top: 0, right: 0, bottom: 0, left: 0}, + width = 960, + height = 500, + id = Math.floor(Math.random() * 10000), // Create semi-unique ID in case user doesn't select one + xScale = d3.scale.ordinal(), + yScale = d3.scale.linear(), + getX = function(d) { return d.label }, // Default data model selectors. + getQ1 = function(d) { return d.values.Q1 }, + getQ2 = function(d) { return d.values.Q2 }, + getQ3 = function(d) { return d.values.Q3 }, + getWl = function(d) { return d.values.whisker_low }, + getWh = function(d) { return d.values.whisker_high }, + getColor = function(d) { return d.color }, + getOlItems = function(d) { return d.values.outliers }, + getOlValue = function(d, i, j) { return d }, + getOlLabel = function(d, i, j) { return d }, + getOlColor = function(d, i, j) { return undefined }, + color = nv.utils.defaultColor(), + container = null, + xDomain, xRange, + yDomain, yRange, + dispatch = d3.dispatch('elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd'), + duration = 250, + maxBoxWidth = null; //============================================================ // Private Variables //------------------------------------------------------------ - var x0, y0; + var xScale0, yScale0; var renderWatch = nv.utils.renderWatch(dispatch, duration); function chart(selection) { @@ -1965,45 +2008,38 @@ nv.models.boxPlot = function() { nv.utils.initSVG(container); // Setup Scales - x .domain(xDomain || data.map(function(d,i) { return getX(d,i); })) - .rangeBands(xRange || [0, availableWidth], .1); + xScale.domain(xDomain || data.map(function(d,i) { return getX(d,i); })) + .rangeBands(xRange || [0, availableWidth], 0.1); // if we know yDomain, no need to calculate var yData = [] if (!yDomain) { // (y-range is based on quartiles, whiskers and outliers) - - // lower values - var yMin = d3.min(data.map(function(d) { - var min_arr = []; - - min_arr.push(d.values.Q1); - if (d.values.hasOwnProperty('whisker_low') && d.values.whisker_low !== null) { min_arr.push(d.values.whisker_low); } - if (d.values.hasOwnProperty('outliers') && d.values.outliers !== null) { min_arr = min_arr.concat(d.values.outliers); } - - return d3.min(min_arr); - })); - - // upper values - var yMax = d3.max(data.map(function(d) { - var max_arr = []; - - max_arr.push(d.values.Q3); - if (d.values.hasOwnProperty('whisker_high') && d.values.whisker_high !== null) { max_arr.push(d.values.whisker_high); } - if (d.values.hasOwnProperty('outliers') && d.values.outliers !== null) { max_arr = max_arr.concat(d.values.outliers); } - - return d3.max(max_arr); - })); - + var values = [], yMin, yMax; + data.forEach(function (d, i) { + var q1 = getQ1(d), q3 = getQ3(d), wl = getWl(d), wh = getWh(d); + var olItems = getOlItems(d); + if (olItems) { + olItems.forEach(function (e, i) { + values.push(getOlValue(e, i, undefined)); + }); + } + if (wl) { values.push(wl) } + if (q1) { values.push(q1) } + if (q3) { values.push(q3) } + if (wh) { values.push(wh) } + }); + yMin = d3.min(values); + yMax = d3.max(values); yData = [ yMin, yMax ] ; } - y.domain(yDomain || yData); - y.range(yRange || [availableHeight, 0]); + yScale.domain(yDomain || yData); + yScale.range(yRange || [availableHeight, 0]); //store old scales if they exist - x0 = x0 || x; - y0 = y0 || y.copy().range([y(0),y(0)]); + xScale0 = xScale0 || xScale; + yScale0 = yScale0 || yScale.copy().range([yScale(0),yScale(0)]); // Setup containers and skeleton of chart var wrap = container.selectAll('g.nv-wrap').data([data]); @@ -2014,15 +2050,15 @@ nv.models.boxPlot = function() { var boxEnter = boxplots.enter().append('g').style('stroke-opacity', 1e-6).style('fill-opacity', 1e-6); boxplots .attr('class', 'nv-boxplot') - .attr('transform', function(d,i,j) { return 'translate(' + (x(getX(d,i)) + x.rangeBand() * .05) + ', 0)'; }) + .attr('transform', function(d,i,j) { return 'translate(' + (xScale(getX(d,i)) + xScale.rangeBand() * 0.05) + ', 0)'; }) .classed('hover', function(d) { return d.hover }); boxplots .watchTransition(renderWatch, 'nv-boxplot: boxplots') .style('stroke-opacity', 1) - .style('fill-opacity', .75) + .style('fill-opacity', 0.75) .delay(function(d,i) { return i * duration / data.length }) .attr('transform', function(d,i) { - return 'translate(' + (x(getX(d,i)) + x.rangeBand() * .05) + ', 0)'; + return 'translate(' + (xScale(getX(d,i)) + xScale.rangeBand() * 0.05) + ', 0)'; }); boxplots.exit().remove(); @@ -2030,97 +2066,62 @@ nv.models.boxPlot = function() { // conditionally append whisker lines boxEnter.each(function(d,i) { - var box = d3.select(this); - - ['low', 'high'].forEach(function(key) { - if (d.values.hasOwnProperty('whisker_' + key) && d.values['whisker_' + key] !== null) { - box.append('line') - .style('stroke', (d.color) ? d.color : color(d,i)) - .attr('class', 'nv-boxplot-whisker nv-boxplot-' + key); - - box.append('line') - .style('stroke', (d.color) ? d.color : color(d,i)) - .attr('class', 'nv-boxplot-tick nv-boxplot-' + key); - } - }); - }); - - // outliers - // TODO: support custom colors here - var outliers = boxplots.selectAll('.nv-boxplot-outlier').data(function(d) { - if (d.values.hasOwnProperty('outliers') && d.values.outliers !== null) { return d.values.outliers; } - else { return []; } - }); - outliers.enter().append('circle') - .style('fill', function(d,i,j) { return color(d,j) }).style('stroke', function(d,i,j) { return color(d,j) }) - .on('mouseover', function(d,i,j) { - d3.select(this).classed('hover', true); - dispatch.elementMouseover({ - series: { key: d, color: color(d,j) }, - e: d3.event - }); - }) - .on('mouseout', function(d,i,j) { - d3.select(this).classed('hover', false); - dispatch.elementMouseout({ - series: { key: d, color: color(d,j) }, - e: d3.event - }); - }) - .on('mousemove', function(d,i) { - dispatch.elementMousemove({e: d3.event}); + var box = d3.select(this); + [getWl, getWh].forEach(function (f) { + if (f(d)) { + var key = (f === getWl) ? 'low' : 'high'; + box.append('line') + .style('stroke', getColor(d) || color(d,i)) + .attr('class', 'nv-boxplot-whisker nv-boxplot-' + key); + box.append('line') + .style('stroke', getColor(d) || color(d,i)) + .attr('class', 'nv-boxplot-tick nv-boxplot-' + key); + } }); + }); - outliers.attr('class', 'nv-boxplot-outlier'); - outliers - .watchTransition(renderWatch, 'nv-boxplot: nv-boxplot-outlier') - .attr('cx', x.rangeBand() * .45) - .attr('cy', function(d,i,j) { return y(d); }) - .attr('r', '3'); - outliers.exit().remove(); - - var box_width = function() { return (maxBoxWidth === null ? x.rangeBand() * .9 : Math.min(75, x.rangeBand() * .9)); }; - var box_left = function() { return x.rangeBand() * .45 - box_width()/2; }; - var box_right = function() { return x.rangeBand() * .45 + box_width()/2; }; + var box_width = function() { return (maxBoxWidth === null ? xScale.rangeBand() * 0.9 : Math.min(75, xScale.rangeBand() * 0.9)); }; + var box_left = function() { return xScale.rangeBand() * 0.45 - box_width()/2; }; + var box_right = function() { return xScale.rangeBand() * 0.45 + box_width()/2; }; // update whisker lines and ticks - ['low', 'high'].forEach(function(key) { - var endpoint = (key === 'low') ? 'Q1' : 'Q3'; - - boxplots.select('line.nv-boxplot-whisker.nv-boxplot-' + key) - .watchTransition(renderWatch, 'nv-boxplot: boxplots') - .attr('x1', x.rangeBand() * .45 ) - .attr('y1', function(d,i) { return y(d.values['whisker_' + key]); }) - .attr('x2', x.rangeBand() * .45 ) - .attr('y2', function(d,i) { return y(d.values[endpoint]); }); - - boxplots.select('line.nv-boxplot-tick.nv-boxplot-' + key) - .watchTransition(renderWatch, 'nv-boxplot: boxplots') - .attr('x1', box_left ) - .attr('y1', function(d,i) { return y(d.values['whisker_' + key]); }) - .attr('x2', box_right ) - .attr('y2', function(d,i) { return y(d.values['whisker_' + key]); }); + [getWl, getWh].forEach(function (f) { + var key = (f === getWl) ? 'low' : 'high'; + var endpoint = (f === getWl) ? getQ1 : getQ3; + boxplots.select('line.nv-boxplot-whisker.nv-boxplot-' + key) + .watchTransition(renderWatch, 'nv-boxplot: boxplots') + .attr('x1', xScale.rangeBand() * 0.45 ) + .attr('y1', function(d,i) { return yScale(f(d)); }) + .attr('x2', xScale.rangeBand() * 0.45 ) + .attr('y2', function(d,i) { return yScale(endpoint(d)); }); + boxplots.select('line.nv-boxplot-tick.nv-boxplot-' + key) + .watchTransition(renderWatch, 'nv-boxplot: boxplots') + .attr('x1', box_left ) + .attr('y1', function(d,i) { return yScale(f(d)); }) + .attr('x2', box_right ) + .attr('y2', function(d,i) { return yScale(f(d)); }); }); - ['low', 'high'].forEach(function(key) { - boxEnter.selectAll('.nv-boxplot-' + key) - .on('mouseover', function(d,i,j) { - d3.select(this).classed('hover', true); - dispatch.elementMouseover({ - series: { key: d.values['whisker_' + key], color: color(d,j) }, - e: d3.event - }); - }) - .on('mouseout', function(d,i,j) { - d3.select(this).classed('hover', false); - dispatch.elementMouseout({ - series: { key: d.values['whisker_' + key], color: color(d,j) }, - e: d3.event - }); - }) - .on('mousemove', function(d,i) { - dispatch.elementMousemove({e: d3.event}); - }); + [getWl, getWh].forEach(function (f) { + var key = (f === getWl) ? 'low' : 'high'; + boxEnter.selectAll('.nv-boxplot-' + key) + .on('mouseover', function(d,i,j) { + d3.select(this).classed('hover', true); + dispatch.elementMouseover({ + series: { key: f(d), color: getColor(d) || color(d,j) }, + e: d3.event + }); + }) + .on('mouseout', function(d,i,j) { + d3.select(this).classed('hover', false); + dispatch.elementMouseout({ + series: { key: f(d), color: getColor(d) || color(d,j) }, + e: d3.event + }); + }) + .on('mousemove', function(d,i) { + dispatch.elementMousemove({e: d3.event}); + }); }); // boxes @@ -2130,12 +2131,12 @@ nv.models.boxPlot = function() { .on('mouseover', function(d,i) { d3.select(this).classed('hover', true); dispatch.elementMouseover({ - key: d.label, - value: d.label, + key: getX(d), + value: getX(d), series: [ - { key: 'Q3', value: d.values.Q3, color: d.color || color(d,i) }, - { key: 'Q2', value: d.values.Q2, color: d.color || color(d,i) }, - { key: 'Q1', value: d.values.Q1, color: d.color || color(d,i) } + { key: 'Q3', value: getQ3(d), color: getColor(d) || color(d,i) }, + { key: 'Q2', value: getQ2(d), color: getColor(d) || color(d,i) }, + { key: 'Q1', value: getQ1(d), color: getColor(d) || color(d,i) } ], data: d, index: i, @@ -2145,12 +2146,12 @@ nv.models.boxPlot = function() { .on('mouseout', function(d,i) { d3.select(this).classed('hover', false); dispatch.elementMouseout({ - key: d.label, - value: d.label, + key: getX(d), + value: getX(d), series: [ - { key: 'Q3', value: d.values.Q3, color: d.color || color(d,i) }, - { key: 'Q2', value: d.values.Q2, color: d.color || color(d,i) }, - { key: 'Q1', value: d.values.Q1, color: d.color || color(d,i) } + { key: 'Q3', value: getQ3(d), color: getColor(d) || color(d,i) }, + { key: 'Q2', value: getQ2(d), color: getColor(d) || color(d,i) }, + { key: 'Q1', value: getQ1(d), color: getColor(d) || color(d,i) } ], data: d, index: i, @@ -2164,13 +2165,12 @@ nv.models.boxPlot = function() { // box transitions boxplots.select('rect.nv-boxplot-box') .watchTransition(renderWatch, 'nv-boxplot: boxes') - .attr('y', function(d,i) { return y(d.values.Q3); }) + .attr('y', function(d,i) { return yScale(getQ3(d)); }) .attr('width', box_width) .attr('x', box_left ) - - .attr('height', function(d,i) { return Math.abs(y(d.values.Q3) - y(d.values.Q1)) || 1 }) - .style('fill', function(d,i) { return d.color || color(d,i) }) - .style('stroke', function(d,i) { return d.color || color(d,i) }); + .attr('height', function(d,i) { return Math.abs(yScale(getQ3(d)) - yScale(getQ1(d))) || 1 }) + .style('fill', function(d,i) { return getColor(d) || color(d,i) }) + .style('stroke', function(d,i) { return getColor(d) || color(d,i) }); // median line boxEnter.append('line').attr('class', 'nv-boxplot-median'); @@ -2178,13 +2178,46 @@ nv.models.boxPlot = function() { boxplots.select('line.nv-boxplot-median') .watchTransition(renderWatch, 'nv-boxplot: boxplots line') .attr('x1', box_left) - .attr('y1', function(d,i) { return y(d.values.Q2); }) + .attr('y1', function(d,i) { return yScale(getQ2(d)); }) .attr('x2', box_right) - .attr('y2', function(d,i) { return y(d.values.Q2); }); + .attr('y2', function(d,i) { return yScale(getQ2(d)); }); + + // outliers + var outliers = boxplots.selectAll('.nv-boxplot-outlier').data(function(d) { + return getOlItems(d) || []; + }); + outliers.enter().append('circle') + .style('fill', function(d,i,j) { return getOlColor(d,i,j) || color(d,j) }) + .style('stroke', function(d,i,j) { return getOlColor(d,i,j) || color(d,j) }) + .style('z-index', 9000) + .on('mouseover', function(d,i,j) { + d3.select(this).classed('hover', true); + dispatch.elementMouseover({ + series: { key: getOlLabel(d,i,j), color: getOlColor(d,i,j) || color(d,j) }, + e: d3.event + }); + }) + .on('mouseout', function(d,i,j) { + d3.select(this).classed('hover', false); + dispatch.elementMouseout({ + series: { key: getOlLabel(d,i,j), color: getOlColor(d,i,j) || color(d,j) }, + e: d3.event + }); + }) + .on('mousemove', function(d,i) { + dispatch.elementMousemove({e: d3.event}); + }); + outliers.attr('class', 'nv-boxplot-outlier'); + outliers + .watchTransition(renderWatch, 'nv-boxplot: nv-boxplot-outlier') + .attr('cx', xScale.rangeBand() * 0.45) + .attr('cy', function(d,i,j) { return yScale(getOlValue(d,i,j)); }) + .attr('r', '3'); + outliers.exit().remove(); //store old scales for use in transitions on update - x0 = x.copy(); - y0 = y.copy(); + xScale0 = xScale.copy(); + yScale0 = yScale.copy(); }); renderWatch.renderEnd('nv-boxplot immediate'); @@ -2200,20 +2233,37 @@ nv.models.boxPlot = function() { chart._options = Object.create({}, { // simple options, just get/set the necessary values - width: {get: function(){return width;}, set: function(_){width=_;}}, - height: {get: function(){return height;}, set: function(_){height=_;}}, + width: {get: function(){return width;}, set: function(_){width=_;}}, + height: {get: function(){return height;}, set: function(_){height=_;}}, maxBoxWidth: {get: function(){return maxBoxWidth;}, set: function(_){maxBoxWidth=_;}}, - x: {get: function(){return getX;}, set: function(_){getX=_;}}, - y: {get: function(){return getY;}, set: function(_){getY=_;}}, - xScale: {get: function(){return x;}, set: function(_){x=_;}}, - yScale: {get: function(){return y;}, set: function(_){y=_;}}, + x: {get: function(){return getX;}, set: function(_){getX=_;}}, + q1: {get: function(){return getQ1;}, set: function(_){getQ1=_;}}, + q2: {get: function(){return getQ2;}, set: function(_){getQ2=_;}}, + q3: {get: function(){return getQ3;}, set: function(_){getQ3=_;}}, + wl: {get: function(){return getWl;}, set: function(_){getWl=_;}}, + wh: {get: function(){return getWh;}, set: function(_){getWh=_;}}, + itemColor: {get: function(){return getColor;}, set: function(_){getColor=_;}}, + outliers: {get: function(){return getOlItems;}, set: function(_){getOlItems=_;}}, + outlierValue: {get: function(){return getOlValue;}, set: function(_){getOlValue=_;}}, + outlierLabel: {get: function(){return getOlLabel;}, set: function(_){getOlLabel=_;}}, + outlierColor: {get: function(){return getOlColor;}, set: function(_){getOlColor=_;}}, + xScale: {get: function(){return xScale;}, set: function(_){xScale=_;}}, + yScale: {get: function(){return yScale;}, set: function(_){yScale=_;}}, xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}}, yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}}, xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}}, yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}}, id: {get: function(){return id;}, set: function(_){id=_;}}, // rectClass: {get: function(){return rectClass;}, set: function(_){rectClass=_;}}, - + y: { + get: function() { + console.warn('BoxPlot \'y\' chart option is deprecated. Please use model overrides instead.'); + return {}; + }, + set: function(_) { + console.warn('BoxPlot \'y\' chart option is deprecated. Please use model overrides instead.'); + } + }, // options that require extra logic in the setter margin: {get: function(){return margin;}, set: function(_){ margin.top = _.top !== undefined ? _.top : margin.top; @@ -2241,26 +2291,23 @@ nv.models.boxPlotChart = function() { // Public Variables with Default Settings //------------------------------------------------------------ - var boxplot = nv.models.boxPlot() - , xAxis = nv.models.axis() - , yAxis = nv.models.axis() - ; + var boxplot = nv.models.boxPlot(), + xAxis = nv.models.axis(), + yAxis = nv.models.axis(); - var margin = {top: 15, right: 10, bottom: 50, left: 60} - , width = null - , height = null - , color = nv.utils.getColor() - , showXAxis = true - , showYAxis = true - , rightAlignYAxis = false - , staggerLabels = false - , tooltip = nv.models.tooltip() - , x - , y - , noData = "No Data Available." - , dispatch = d3.dispatch('beforeUpdate', 'renderEnd') - , duration = 250 - ; + var margin = {top: 15, right: 10, bottom: 50, left: 60}, + width = null, + height = null, + color = nv.utils.getColor(), + showXAxis = true, + showYAxis = true, + rightAlignYAxis = false, + staggerLabels = false, + tooltip = nv.models.tooltip(), + x, y, + noData = 'No Data Available.', + dispatch = d3.dispatch('beforeUpdate', 'renderEnd'), + duration = 250; xAxis .orient('bottom') @@ -2287,13 +2334,10 @@ nv.models.boxPlotChart = function() { if (showYAxis) renderWatch.models(yAxis); selection.each(function(data) { - var container = d3.select(this), - that = this; + var container = d3.select(this), that = this; nv.utils.initSVG(container); - var availableWidth = (width || parseInt(container.style('width')) || 960) - - margin.left - margin.right, - availableHeight = (height || parseInt(container.style('height')) || 400) - - margin.top - margin.bottom; + var availableWidth = (width || parseInt(container.style('width')) || 960) - margin.left - margin.right; + var availableHeight = (height || parseInt(container.style('height')) || 400) - margin.top - margin.bottom; chart.update = function() { dispatch.beforeUpdate(); @@ -2301,9 +2345,9 @@ nv.models.boxPlotChart = function() { }; chart.container = this; - // Display No Data message if there's nothing to show. (quartiles required at minimum) - if (!data || !data.length || - !data.filter(function(d) { return d.values.hasOwnProperty("Q1") && d.values.hasOwnProperty("Q2") && d.values.hasOwnProperty("Q3"); }).length) { + // TODO still need to find a way to validate quartile data presence using boxPlot callbacks. + // Display No Data message if there's nothing to show. (quartiles required at minimum). + if (!data || !data.length) { var noDataText = container.selectAll('.nv-noData').data([noData]); noDataText.enter().append('text') @@ -2337,25 +2381,21 @@ nv.models.boxPlotChart = function() { .append('line'); gEnter.append('g').attr('class', 'nv-barsWrap'); - g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); if (rightAlignYAxis) { - g.select(".nv-y.nv-axis") - .attr("transform", "translate(" + availableWidth + ",0)"); + g.select('.nv-y.nv-axis') + .attr('transform', 'translate(' + availableWidth + ',0)'); } // Main Chart Component(s) - boxplot - .width(availableWidth) - .height(availableHeight); + boxplot.width(availableWidth).height(availableHeight); var barsWrap = g.select('.nv-barsWrap') .datum(data.filter(function(d) { return !d.disabled })) barsWrap.transition().call(boxplot); - defsEnter.append('clipPath') .attr('id', 'nv-x-label-clip-' + boxplot.id()) .append('rect'); @@ -2379,7 +2419,7 @@ nv.models.boxPlotChart = function() { if (staggerLabels) { xTicks .selectAll('text') - .attr('transform', function(d,i,j) { return 'translate(0,' + (j % 2 == 0 ? '5' : '17') + ')' }) + .attr('transform', function(d,i,j) { return 'translate(0,' + (j % 2 === 0 ? '5' : '17') + ')' }) } } @@ -2393,11 +2433,11 @@ nv.models.boxPlotChart = function() { } // Zero line - g.select(".nv-zeroLine line") - .attr("x1",0) - .attr("x2",availableWidth) - .attr("y1", y(0)) - .attr("y2", y(0)) + g.select('.nv-zeroLine line') + .attr('x1',0) + .attr('x2',availableWidth) + .attr('y1', y(0)) + .attr('y2', y(0)) ; //============================================================ @@ -2504,8 +2544,19 @@ nv.models.bullet = function() { , tickFormat = null , color = nv.utils.getColor(['#1f77b4']) , dispatch = d3.dispatch('elementMouseover', 'elementMouseout', 'elementMousemove') + , defaultRangeLabels = ["Maximum", "Mean", "Minimum"] + , legacyRangeClassNames = ["Max", "Avg", "Min"] ; + function sortLabels(labels, values){ + var lz = labels.slice(); + labels.sort(function(a, b){ + var iA = lz.indexOf(a); + var iB = lz.indexOf(b); + return d3.descending(values[iA], values[iB]); + }); + }; + function chart(selection) { selection.each(function(d, i) { var availableWidth = width - margin.left - margin.right, @@ -2514,13 +2565,23 @@ nv.models.bullet = function() { container = d3.select(this); nv.utils.initSVG(container); - var rangez = ranges.call(this, d, i).slice().sort(d3.descending), - markerz = markers.call(this, d, i).slice().sort(d3.descending), - measurez = measures.call(this, d, i).slice().sort(d3.descending), + var rangez = ranges.call(this, d, i).slice(), + markerz = markers.call(this, d, i).slice(), + measurez = measures.call(this, d, i).slice(), rangeLabelz = rangeLabels.call(this, d, i).slice(), markerLabelz = markerLabels.call(this, d, i).slice(), measureLabelz = measureLabels.call(this, d, i).slice(); + // Sort labels according to their sorted values + sortLabels(rangeLabelz, rangez); + sortLabels(markerLabelz, markerz); + sortLabels(measureLabelz, measurez); + + // sort values descending + rangez.sort(d3.descending); + markerz.sort(d3.descending); + measurez.sort(d3.descending); + // Setup Scales // Compute the new x-scale. var x1 = d3.scale.linear() @@ -2545,9 +2606,14 @@ nv.models.bullet = function() { var gEnter = wrapEnter.append('g'); var g = wrap.select('g'); - gEnter.append('rect').attr('class', 'nv-range nv-rangeMax'); - gEnter.append('rect').attr('class', 'nv-range nv-rangeAvg'); - gEnter.append('rect').attr('class', 'nv-range nv-rangeMin'); + for(var i=0,il=rangez.length; i<il; i++){ + var rangeClassNames = 'nv-range nv-range'+i; + if(i <= 2){ + rangeClassNames = rangeClassNames + ' nv-range'+legacyRangeClassNames[i]; + } + gEnter.append('rect').attr('class', rangeClassNames); + } + gEnter.append('rect').attr('class', 'nv-measure'); wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); @@ -2557,25 +2623,14 @@ nv.models.bullet = function() { var xp0 = function(d) { return d < 0 ? x0(d) : x0(0) }, xp1 = function(d) { return d < 0 ? x1(d) : x1(0) }; - g.select('rect.nv-rangeMax') - .attr('height', availableHeight) - .attr('width', w1(rangeMax > 0 ? rangeMax : rangeMin)) - .attr('x', xp1(rangeMax > 0 ? rangeMax : rangeMin)) - .datum(rangeMax > 0 ? rangeMax : rangeMin) - - g.select('rect.nv-rangeAvg') - .attr('height', availableHeight) - .attr('width', w1(rangeAvg)) - .attr('x', xp1(rangeAvg)) - .datum(rangeAvg) - - g.select('rect.nv-rangeMin') - .attr('height', availableHeight) - .attr('width', w1(rangeMax)) - .attr('x', xp1(rangeMax)) - .attr('width', w1(rangeMax > 0 ? rangeMin : rangeMax)) - .attr('x', xp1(rangeMax > 0 ? rangeMin : rangeMax)) - .datum(rangeMax > 0 ? rangeMin : rangeMax) + for(var i=0,il=rangez.length; i<il; i++){ + var range = rangez[i]; + g.select('rect.nv-range'+i) + .attr('height', availableHeight) + .attr('width', w1(range)) + .attr('x', xp1(range)) + .datum(range) + } g.select('rect.nv-measure') .style('fill', color) @@ -2649,7 +2704,7 @@ nv.models.bullet = function() { wrap.selectAll('.nv-range') .on('mouseover', function(d,i) { - var label = rangeLabelz[i] || (!i ? "Maximum" : i == 1 ? "Mean" : "Minimum"); + var label = rangeLabelz[i] || defaultRangeLabels[i]; dispatch.elementMouseover({ value: d, label: label, @@ -2664,7 +2719,7 @@ nv.models.bullet = function() { }) }) .on('mouseout', function(d,i) { - var label = rangeLabelz[i] || (!i ? "Maximum" : i == 1 ? "Mean" : "Minimum"); + var label = rangeLabelz[i] || defaultRangeLabels[i]; dispatch.elementMouseout({ value: d, label: label, @@ -3365,7 +3420,9 @@ nv.models.cumulativeLineChart = function() { gEnter.append('g').attr('class', 'nv-controlsWrap'); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { legend.width(availableWidth); g.select('.nv-legendWrap') @@ -3382,7 +3439,9 @@ nv.models.cumulativeLineChart = function() { } // Controls - if (showControls) { + if (!showControls) { + g.select('.nv-controlsWrap').selectAll('*').remove(); + } else { var controlsData = [ { key: 'Re-scale y-axis', disabled: !rescaleY } ]; @@ -4158,8 +4217,11 @@ nv.models.discreteBarChart = function() { gEnter.append('g').attr('class', 'nv-legendWrap'); g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); - - if (showLegend) { + + // Legend + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { legend.width(availableWidth); g.select('.nv-legendWrap') @@ -4180,11 +4242,6 @@ nv.models.discreteBarChart = function() { .attr("transform", "translate(" + availableWidth + ",0)"); } - if (rightAlignYAxis) { - g.select(".nv-y.nv-axis") - .attr("transform", "translate(" + availableWidth + ",0)"); - } - // Main Chart Component(s) discretebar .width(availableWidth) @@ -4494,6 +4551,195 @@ nv.models.distribution = function() { return chart; } +nv.models.forceDirectedGraph = function() { + "use strict"; + + //============================================================ + // Public Variables with Default Settings + //------------------------------------------------------------ + var margin = {top: 2, right: 0, bottom: 2, left: 0} + , width = 400 + , height = 32 + , container = null + , dispatch = d3.dispatch('renderEnd') + , color = nv.utils.getColor(['#000']) + , tooltip = nv.models.tooltip() + , noData = null + // Force directed graph specific parameters [default values] + , linkStrength = 0.1 + , friction = 0.9 + , linkDist = 30 + , charge = -120 + , gravity = 0.1 + , theta = 0.8 + , alpha = 0.1 + , radius = 5 + // These functions allow to add extra attributes to ndes and links + ,nodeExtras = function(nodes) { /* Do nothing */ } + ,linkExtras = function(links) { /* Do nothing */ } + ; + + + //============================================================ + // Private Variables + //------------------------------------------------------------ + + var renderWatch = nv.utils.renderWatch(dispatch); + + function chart(selection) { + renderWatch.reset(); + + selection.each(function(data) { + container = d3.select(this); + nv.utils.initSVG(container); + + var availableWidth = nv.utils.availableWidth(width, container, margin), + availableHeight = nv.utils.availableHeight(height, container, margin); + + container + .attr("width", availableWidth) + .attr("height", availableHeight); + + // Display No Data message if there's nothing to show. + if (!data || !data.links || !data.nodes) { + nv.utils.noData(chart, container) + return chart; + } else { + container.selectAll('.nv-noData').remove(); + } + container.selectAll('*').remove(); + + // Collect names of all fields in the nodes + var nodeFieldSet = new Set(); + data.nodes.forEach(function(node) { + var keys = Object.keys(node); + keys.forEach(function(key) { + nodeFieldSet.add(key); + }); + }); + + var force = d3.layout.force() + .nodes(data.nodes) + .links(data.links) + .size([availableWidth, availableHeight]) + .linkStrength(linkStrength) + .friction(friction) + .linkDistance(linkDist) + .charge(charge) + .gravity(gravity) + .theta(theta) + .alpha(alpha) + .start(); + + var link = container.selectAll(".link") + .data(data.links) + .enter().append("line") + .attr("class", "nv-force-link") + .style("stroke-width", function(d) { return Math.sqrt(d.value); }); + + var node = container.selectAll(".node") + .data(data.nodes) + .enter() + .append("g") + .attr("class", "nv-force-node") + .call(force.drag); + + node + .append("circle") + .attr("r", radius) + .style("fill", function(d) { return color(d) } ) + .on("mouseover", function(evt) { + container.select('.nv-series-' + evt.seriesIndex + ' .nv-distx-' + evt.pointIndex) + .attr('y1', evt.py); + container.select('.nv-series-' + evt.seriesIndex + ' .nv-disty-' + evt.pointIndex) + .attr('x2', evt.px); + + // Add 'series' object to + var nodeColor = color(evt); + evt.series = []; + nodeFieldSet.forEach(function(field) { + evt.series.push({ + color: nodeColor, + key: field, + value: evt[field] + }); + }); + tooltip.data(evt).hidden(false); + }) + .on("mouseout", function(d) { + tooltip.hidden(true); + }); + + tooltip.headerFormatter(function(d) {return "Node";}); + + // Apply extra attributes to nodes and links (if any) + linkExtras(link); + nodeExtras(node); + + force.on("tick", function() { + link.attr("x1", function(d) { return d.source.x; }) + .attr("y1", function(d) { return d.source.y; }) + .attr("x2", function(d) { return d.target.x; }) + .attr("y2", function(d) { return d.target.y; }); + + node.attr("transform", function(d) { + return "translate(" + d.x + ", " + d.y + ")"; + }); + }); + }); + + return chart; + } + + //============================================================ + // Expose Public Variables + //------------------------------------------------------------ + + chart.options = nv.utils.optionsFunc.bind(chart); + + chart._options = Object.create({}, { + // simple options, just get/set the necessary values + width: {get: function(){return width;}, set: function(_){width=_;}}, + height: {get: function(){return height;}, set: function(_){height=_;}}, + + // Force directed graph specific parameters + linkStrength:{get: function(){return linkStrength;}, set: function(_){linkStrength=_;}}, + friction: {get: function(){return friction;}, set: function(_){friction=_;}}, + linkDist: {get: function(){return linkDist;}, set: function(_){linkDist=_;}}, + charge: {get: function(){return charge;}, set: function(_){charge=_;}}, + gravity: {get: function(){return gravity;}, set: function(_){gravity=_;}}, + theta: {get: function(){return theta;}, set: function(_){theta=_;}}, + alpha: {get: function(){return alpha;}, set: function(_){alpha=_;}}, + radius: {get: function(){return radius;}, set: function(_){radius=_;}}, + + //functor options + x: {get: function(){return getX;}, set: function(_){getX=d3.functor(_);}}, + y: {get: function(){return getY;}, set: function(_){getY=d3.functor(_);}}, + + // options that require extra logic in the setter + margin: {get: function(){return margin;}, set: function(_){ + margin.top = _.top !== undefined ? _.top : margin.top; + margin.right = _.right !== undefined ? _.right : margin.right; + margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom; + margin.left = _.left !== undefined ? _.left : margin.left; + }}, + color: {get: function(){return color;}, set: function(_){ + color = nv.utils.getColor(_); + }}, + noData: {get: function(){return noData;}, set: function(_){noData=_;}}, + nodeExtras: {get: function(){return nodeExtras;}, set: function(_){ + nodeExtras = _; + }}, + linkExtras: {get: function(){return linkExtras;}, set: function(_){ + linkExtras = _; + }} + }); + + chart.dispatch = dispatch; + chart.tooltip = tooltip; + nv.utils.initOptions(chart); + return chart; +}; nv.models.furiousLegend = function() { "use strict"; @@ -4675,13 +4921,13 @@ nv.models.furiousLegend = function() { var seriesWidths = []; series.each(function(d,i) { var legendText; - if (getKey(d).length > maxKeyLength) { + if (getKey(d) && (getKey(d).length > maxKeyLength)) { var trimmedKey = getKey(d).substring(0, maxKeyLength); legendText = d3.select(this).select('text').text(trimmedKey + "..."); d3.select(this).append("svg:title").text(getKey(d)); } else { legendText = d3.select(this).select('text'); - } + } var nodeTextLength; try { nodeTextLength = legendText.node().getComputedTextLength(); @@ -5180,7 +5426,9 @@ nv.models.historicalBarChart = function(bar_model) { gEnter.append('g').attr('class', 'nv-interactive'); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { legend.width(availableWidth); g.select('.nv-legendWrap') @@ -5534,7 +5782,7 @@ nv.models.legend = function() { .attr('class','nv-legend-symbol') .attr('r', 5); - seriesShape = series.select('circle'); + seriesShape = series.select('.nv-legend-symbol'); } else if (vers == 'furious') { seriesEnter.append('rect') .style('stroke-width', 2) @@ -5651,13 +5899,13 @@ nv.models.legend = function() { var seriesWidths = []; series.each(function(d,i) { var legendText; - if (getKey(d).length > maxKeyLength) { + if (getKey(d) && (getKey(d).length > maxKeyLength)) { var trimmedKey = getKey(d).substring(0, maxKeyLength); legendText = d3.select(this).select('text').text(trimmedKey + "..."); d3.select(this).append("svg:title").text(getKey(d)); } else { legendText = d3.select(this).select('text'); - } + } var nodeTextLength; try { nodeTextLength = legendText.node().getComputedTextLength(); @@ -6104,6 +6352,7 @@ nv.models.lineChart = function() { , width = null , height = null , showLegend = true + , legendPosition = 'top' , showXAxis = true , showYAxis = true , rightAlignYAxis = false @@ -6254,20 +6503,27 @@ nv.models.lineChart = function() { contextEnter.append('g').attr('class', 'nv-x nv-brush'); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { legend.width(availableWidth); g.select('.nv-legendWrap') .datum(data) .call(legend); - if ( margin.top != legend.height()) { - margin.top = legend.height(); - availableHeight1 = nv.utils.availableHeight(height, container, margin) - (focusEnable ? focusHeight : 0); - } + if (legendPosition === 'bottom') { + wrap.select('.nv-legendWrap') + .attr('transform', 'translate(0,' + (availableHeight1) +')'); + } else if (legendPosition === 'top') { + if ( margin.top != legend.height()) { + margin.top = legend.height(); + availableHeight1 = nv.utils.availableHeight(height, container, margin) - (focusEnable ? focusHeight : 0); + } - wrap.select('.nv-legendWrap') - .attr('transform', 'translate(0,' + (-margin.top) +')'); + wrap.select('.nv-legendWrap') + .attr('transform', 'translate(0,' + (-margin.top) +')'); + } } wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); @@ -6491,11 +6747,13 @@ nv.models.lineChart = function() { allData[indexToHighlight].highlight = true; } + var defaultValueFormatter = function(d,i) { + return d == null ? "N/A" : yAxis.tickFormat()(d); + }; + interactiveLayer.tooltip .chartContainer(chart.container.parentNode) - .valueFormatter(function(d,i) { - return d === null ? "N/A" : yAxis.tickFormat()(d); - }) + .valueFormatter(interactiveLayer.tooltip.valueFormatter() || defaultValueFormatter) .data({ value: chart.x()( singlePoint,pointIndex ), index: pointIndex, @@ -6669,6 +6927,7 @@ nv.models.lineChart = function() { width: {get: function(){return width;}, set: function(_){width=_;}}, height: {get: function(){return height;}, set: function(_){height=_;}}, showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}}, + legendPosition: {get: function(){return legendPosition;}, set: function(_){legendPosition=_;}}, showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}}, showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}}, focusEnable: {get: function(){return focusEnable;}, set: function(_){focusEnable=_;}}, @@ -6749,8 +7008,7 @@ nv.models.lineWithFocusChart = function() { return nv.models.lineChart() .margin({ bottom: 30 }) .focusEnable( true ); -}; -nv.models.linePlusBarChart = function() { +};nv.models.linePlusBarChart = function() { "use strict"; //============================================================ @@ -6822,15 +7080,15 @@ nv.models.linePlusBarChart = function() { //------------------------------------------------------------ var getBarsAxis = function() { - return switchYAxisOrder - ? { main: y1Axis, focus: y3Axis } - : { main: y2Axis, focus: y4Axis } + return !switchYAxisOrder + ? { main: y2Axis, focus: y4Axis } + : { main: y1Axis, focus: y3Axis } } var getLinesAxis = function() { - return switchYAxisOrder - ? { main: y2Axis, focus: y4Axis } - : { main: y1Axis, focus: y3Axis } + return !switchYAxisOrder + ? { main: y1Axis, focus: y3Axis } + : { main: y2Axis, focus: y4Axis } } var stateGetter = function(data) { @@ -6900,7 +7158,12 @@ nv.models.linePlusBarChart = function() { var dataBars = data.filter(function(d) { return !d.disabled && d.bar }); var dataLines = data.filter(function(d) { return !d.bar }); // removed the !d.disabled clause here to fix Issue #240 - x = bars.xScale(); + if (dataBars.length && !switchYAxisOrder) { + x = bars.xScale(); + } else { + x = lines.xScale(); + } + x2 = x2Axis.scale(); // select the scales and series based on the position of the yAxis @@ -6959,7 +7222,9 @@ nv.models.linePlusBarChart = function() { // Legend //------------------------------------------------------------ - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { var legendWidth = legend.align() ? availableWidth / 2 : availableWidth; var legendXPosition = legend.align() ? legendWidth : 0; @@ -7234,8 +7499,14 @@ nv.models.linePlusBarChart = function() { .tickSize(-availableWidth, 0); y2Axis .scale(y2) - ._ticks( nv.utils.calcTicksY(availableHeight1/36, data) ) - .tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none + ._ticks( nv.utils.calcTicksY(availableHeight1/36, data) ); + + // Show the y2 rules only if y1 has none + if(!switchYAxisOrder) { + y2Axis.tickSize(dataBars.length ? 0 : -availableWidth, 0); + } else { + y2Axis.tickSize(dataLines.length ? 0 : -availableWidth, 0); + } // Calculate opacity of the axis var barsOpacity = dataBars.length ? 1 : 0; @@ -7379,11 +7650,20 @@ nv.models.linePlusBarChart = function() { switchYAxisOrder: {get: function(){return switchYAxisOrder;}, set: function(_){ // Switch the tick format for the yAxis if(switchYAxisOrder !== _) { - var tickFormat = y1Axis.tickFormat(); - y1Axis.tickFormat(y2Axis.tickFormat()); - y2Axis.tickFormat(tickFormat); + var y1 = y1Axis; + y1Axis = y2Axis; + y2Axis = y1; + + var y3 = y3Axis; + y3Axis = y4Axis; + y4Axis = y3; } switchYAxisOrder=_; + + y1Axis.orient('left'); + y2Axis.orient('right'); + y3Axis.orient('left'); + y4Axis.orient('right'); }} }); @@ -7495,7 +7775,7 @@ nv.models.multiBar = function() { }); // HACK for negative value stacking - if (stacked) { + if (stacked && data.length > 0) { data[0].values.map(function(d,i) { var posBase = 0, negBase = 0; data.map(function(d, idx) { @@ -7819,7 +8099,8 @@ nv.models.multiBar = function() { nv.utils.initOptions(chart); return chart; -};nv.models.multiBarChart = function() { +}; +nv.models.multiBarChart = function() { "use strict"; //============================================================ @@ -7979,7 +8260,9 @@ nv.models.multiBar = function() { gEnter.append('g').attr('class', 'nv-interactive'); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { legend.width(availableWidth - controlWidth()); g.select('.nv-legendWrap') @@ -7996,7 +8279,9 @@ nv.models.multiBar = function() { } // Controls - if (showControls) { + if (!showControls) { + g.select('.nv-controlsWrap').selectAll('*').remove(); + } else { var controlsData = [ { key: controlLabels.grouped || 'Grouped', disabled: multibar.stacked() }, { key: controlLabels.stacked || 'Stacked', disabled: !multibar.stacked() } @@ -8480,10 +8765,13 @@ nv.models.multiBarHorizontal = function() { }); }) .on('click', function(d,i) { + var element = this; dispatch.elementClick({ data: d, index: i, - color: d3.select(this).style("fill") + color: d3.select(this).style("fill"), + event: d3.event, + element: element }); d3.event.stopPropagation(); }) @@ -8807,7 +9095,9 @@ nv.models.multiBarHorizontalChart = function() { gEnter.append('g').attr('class', 'nv-controlsWrap'); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { legend.width(availableWidth - controlWidth()); g.select('.nv-legendWrap') @@ -8824,7 +9114,9 @@ nv.models.multiBarHorizontalChart = function() { } // Controls - if (showControls) { + if (!showControls) { + g.select('.nv-controlsWrap').selectAll('*').remove(); + } else { var controlsData = [ { key: controlLabels.grouped || 'Grouped', disabled: multibar.stacked() }, { key: controlLabels.stacked || 'Stacked', disabled: !multibar.stacked() } @@ -9044,7 +9336,7 @@ nv.models.multiChart = function() { yDomain2, getX = function(d) { return d.x }, getY = function(d) { return d.y}, - interpolate = 'monotone', + interpolate = 'linear', useVoronoi = true, interactiveLayer = nv.interactiveGuideline(), useInteractiveGuideline = false, @@ -9124,7 +9416,7 @@ nv.models.multiChart = function() { }) }); - x .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return getX(d) })) + x .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return d.x })) .range([0, availableWidth]); var wrap = container.selectAll('g.wrap.multiChart').data([data]); @@ -9150,7 +9442,10 @@ nv.models.multiChart = function() { return data[i].color || color(d, i); }); - if (showLegend) { + // Legend + if (!showLegend) { + g.select('.legendWrap').selectAll('*').remove(); + } else { var legendWidth = legend.align() ? availableWidth / 2 : availableWidth; var legendXPosition = legend.align() ? legendWidth : 0; @@ -9203,10 +9498,12 @@ nv.models.multiChart = function() { stack1 .width(availableWidth) .height(availableHeight) + .interpolate(interpolate) .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'area'})); stack2 .width(availableWidth) .height(availableHeight) + .interpolate(interpolate) .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'area'})); g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); @@ -9323,6 +9620,9 @@ nv.models.multiChart = function() { }; tooltip .duration(0) + .headerFormatter(function(d, i) { + return xAxis.tickFormat()(d, i); + }) .valueFormatter(function(d, i) { return yaxis.tickFormat()(d, i); }) @@ -9340,6 +9640,9 @@ nv.models.multiChart = function() { }; tooltip .duration(100) + .headerFormatter(function(d, i) { + return xAxis.tickFormat()(d, i); + }) .valueFormatter(function(d, i) { return yaxis.tickFormat()(d, i); }) @@ -9353,6 +9656,9 @@ nv.models.multiChart = function() { evt.point['y'] = stack1.y()(evt.point); tooltip .duration(0) + .headerFormatter(function(d, i) { + return xAxis.tickFormat()(d, i); + }) .valueFormatter(function(d, i) { return yaxis.tickFormat()(d, i); }) @@ -9371,6 +9677,9 @@ nv.models.multiChart = function() { }; tooltip .duration(0) + .headerFormatter(function(d, i) { + return xAxis.tickFormat()(d, i); + }) .valueFormatter(function(d, i) { return yaxis.tickFormat()(d, i); }) @@ -9433,6 +9742,9 @@ nv.models.multiChart = function() { interactiveLayer.tooltip .chartContainer(chart.container.parentNode) + .headerFormatter(function(d, i) { + return xAxis.tickFormat()(d, i); + }) .valueFormatter(function(d,i) { var yAxis = allData[i].yAxis; return d === null ? "N/A" : yAxis.tickFormat()(d); @@ -9835,8 +10147,11 @@ nv.models.parallelCoordinates = function() { var margin = {top: 30, right: 0, bottom: 10, left: 0} , width = null , height = null + , availableWidth = null + , availableHeight = null , x = d3.scale.ordinal() , y = {} + , undefinedValuesLabel = "undefined values" , dimensionData = [] , enabledDimensions = [] , dimensionNames = [] @@ -9859,19 +10174,17 @@ nv.models.parallelCoordinates = function() { // Private Variables //------------------------------------------------------------ - var renderWatch = nv.utils.renderWatch(dispatch); function chart(selection) { renderWatch.reset(); selection.each(function(data) { var container = d3.select(this); - var availableWidth = nv.utils.availableWidth(width, container, margin), - availableHeight = nv.utils.availableHeight(height, container, margin); + availableWidth = nv.utils.availableWidth(width, container, margin); + availableHeight = nv.utils.availableHeight(height, container, margin); nv.utils.initSVG(container); - //Convert old data to new format (name, values) if (data[0].values === undefined) { var newData = []; @@ -9892,7 +10205,6 @@ nv.models.parallelCoordinates = function() { dimensionNames = dimensionData.sort(function (a, b) { return a.currentPosition - b.currentPosition; }).map(function (d) { return d.key }); enabledDimensions = dimensionData.filter(function (d) { return !d.disabled; }); - // Setup Scales x.rangePoints([0, availableWidth], 1).domain(enabledDimensions.map(function (d) { return d.key; })); @@ -9900,7 +10212,8 @@ nv.models.parallelCoordinates = function() { // Extract the list of dimensions and create a scale for each. var oldDomainMaxValue = {}; var displayMissingValuesline = false; - + var currentTicks = []; + dimensionNames.forEach(function(d) { var extent = d3.extent(dataValues, function (p) { return +p[d]; }); var min = extent[0]; @@ -9943,7 +10256,6 @@ nv.models.parallelCoordinates = function() { .range([(availableHeight - 12) * 0.9, 0]); axisWithUndefinedValues = []; - y[d].brush = d3.svg.brush().y(y[d]).on('brushstart', brushstart).on('brush', brush).on('brushend', brushend); }); @@ -9980,8 +10292,8 @@ nv.models.parallelCoordinates = function() { .attr("y2", function(d) { return d[3]; }); //Add the text "undefined values" under the missing value line - missingValueslineText = wrap.select('.missingValuesline').selectAll('text').data(["undefined values"]); - missingValueslineText.append('text').data(["undefined values"]); + missingValueslineText = wrap.select('.missingValuesline').selectAll('text').data([undefinedValuesLabel]); + missingValueslineText.append('text').data([undefinedValuesLabel]); missingValueslineText.enter().append('text'); missingValueslineText.exit().remove(); missingValueslineText.attr("y", availableHeight) @@ -10007,7 +10319,9 @@ nv.models.parallelCoordinates = function() { d3.select(this).classed('hover', true).style("stroke-width", d.strokeWidth + 2 + "px").style("stroke-opacity", 1); dispatch.elementMouseover({ label: d.name, - color: d.color || color(d, i) + color: d.color || color(d, i), + values: d.values, + dimensions: enabledDimensions }); }); @@ -10035,13 +10349,14 @@ nv.models.parallelCoordinates = function() { // Add an axis and title. dimensionsEnter.append('text') - .attr('class', 'nv-label') + .attr('class', 'nv-label') .style("cursor", "move") .attr('dy', '-1em') .attr('text-anchor', 'middle') .on("mouseover", function(d, i) { dispatch.elementMouseover({ - label: d.tooltip || d.key + label: d.tooltip || d.key, + color: d.color }); }) .on("mouseout", function(d, i) { @@ -10057,10 +10372,6 @@ nv.models.parallelCoordinates = function() { dimensionsEnter.append('g').attr('class', 'nv-brushBackground'); dimensions.exit().remove(); dimensions.select('.nv-label').text(function (d) { return d.key }); - dimensions.select('.nv-axis') - .each(function (d, i) { - d3.select(this).call(axis.scale(y[d.key]).tickFormat(d3.format(d.format))); - }); // Add and store a brush for each axis. restoreBrush(displayBrush); @@ -10138,27 +10449,30 @@ nv.models.parallelCoordinates = function() { }); dimensions.select('.nv-brushBackground') - .each(function (d) { - d3.select(this).call(y[d.key].brush); + .each(function (d) { + d3.select(this).call(y[d.key].brush); - }) - .selectAll('rect') - .attr('x', -8) - .attr('width', 16); + }) + .selectAll('rect') + .attr('x', -8) + .attr('width', 16); + + updateTicks(); } // Handles a brush event, toggling the display of foreground lines. function brushstart() { //If brush aren't visible, show it before brushing again. if (displayBrush === false) { + displayBrush = true; restoreBrush(true); } } // Handles a brush event, toggling the display of foreground lines. function brush() { - actives = dimensionNames.filter(function (p) { return !y[p].brush.empty(); }), - extents = actives.map(function(p) { return y[p].brush.extent(); }); + actives = dimensionNames.filter(function (p) { return !y[p].brush.empty(); }); + extents = actives.map(function(p) { return y[p].brush.extent(); }); filters = []; //erase current filters actives.forEach(function(d,i) { @@ -10179,7 +10493,9 @@ nv.models.parallelCoordinates = function() { if (isActive) active.push(d); return isActive ? null : 'none'; }); - + + updateTicks(); + dispatch.brush({ filters: filters, active: active @@ -10194,13 +10510,30 @@ nv.models.parallelCoordinates = function() { f.hasOnlyNaN = true; }); dispatch.brushEnd(active, hasActiveBrush); + } + function updateTicks() { + dimensions.select('.nv-axis') + .each(function (d, i) { + var f = filters.filter(function (k) { return k.dimension == d.key; }); + currentTicks[d.key] = y[d.key].domain(); + + //If brush are available, display brush extent + if (f.length != 0 && displayBrush) + { + currentTicks[d.key] = []; + if (f[0].extent[1] > y[d.key].domain()[0]) + currentTicks[d.key] = [f[0].extent[1]]; + if (f[0].extent[0] >= y[d.key].domain()[0]) + currentTicks[d.key].push(f[0].extent[0]); + } + + d3.select(this).call(axis.scale(y[d.key]).tickFormat(d.format).tickValues(currentTicks[d.key])); + }); } function dragStart(d) { dragging[d.key] = this.parentNode.__origin__ = x(d.key); background.attr("visibility", "hidden"); - } - function dragMove(d) { dragging[d.key] = Math.min(availableWidth, Math.max(0, this.parentNode.__origin__ += d3.event.x)); foreground.attr("d", path); @@ -10209,7 +10542,6 @@ nv.models.parallelCoordinates = function() { x.domain(enabledDimensions.map(function (d) { return d.key; })); dimensions.attr("transform", function(d) { return "translate(" + dimensionPosition(d.key) + ")"; }); } - function dragEnd(d, i) { delete this.parentNode.__origin__; delete dragging[d.key]; @@ -10222,22 +10554,11 @@ nv.models.parallelCoordinates = function() { dispatch.dimensionsOrder(enabledDimensions); } - function resetBrush() { - filters = []; - active = []; - dispatch.stateChange(); - } - function resetDrag() { - dimensionName.map(function (d, i) { return d.currentPosition = d.originalPosition; }); - dispatch.stateChange(); - } - function dimensionPosition(d) { var v = dragging[d]; return v == null ? x(d) : v; } }); - return chart; } @@ -10257,7 +10578,8 @@ nv.models.parallelCoordinates = function() { filters: { get: function () { return filters; }, set: function (_) { filters = _; } }, active: { get: function () { return active; }, set: function (_) { active = _; } }, lineTension: {get: function(){return lineTension;}, set: function(_){lineTension = _;}}, - + undefinedValuesLabel : {get: function(){return undefinedValuesLabel;}, set: function(_){undefinedValuesLabel=_;}}, + // deprecated options dimensions: {get: function () { return dimensionData.map(function (d){return d.key}); }, set: function (_) { // deprecated after 1.8.1 @@ -10267,8 +10589,7 @@ nv.models.parallelCoordinates = function() { } else { _.forEach(function (k, i) { dimensionData[i].key= k }) } - } - }, + }}, dimensionNames: {get: function () { return dimensionData.map(function (d){return d.key}); }, set: function (_) { // deprecated after 1.8.1 nv.deprecated('dimensionNames', 'use dimensionData instead'); @@ -10290,7 +10611,6 @@ nv.models.parallelCoordinates = function() { } }}, - // options that require extra logic in the setter margin: {get: function(){return margin;}, set: function(_){ margin.top = _.top !== undefined ? _.top : margin.top; @@ -10302,7 +10622,6 @@ nv.models.parallelCoordinates = function() { color = nv.utils.getColor(_); }} }); - nv.utils.initOptions(chart); return chart; }; @@ -10324,10 +10643,10 @@ nv.models.parallelCoordinatesChart = function () { , color = nv.utils.defaultColor() , state = nv.utils.state() , dimensionData = [] - , dimensionNames = [] , displayBrush = true , defaultState = null , noData = null + , nanValue = "undefined" , dispatch = d3.dispatch('dimensionsOrder', 'brushEnd', 'stateChange', 'changeState', 'renderEnd') , controlWidth = function () { return showControls ? 180 : 0 } ; @@ -10358,6 +10677,20 @@ nv.models.parallelCoordinatesChart = function () { } }; + tooltip.contentGenerator(function(data) { + var str = '<table><thead><tr><td class="legend-color-guide"><div style="background-color:' + data.color + '"></div></td><td><strong>' + data.key + '</strong></td></tr></thead>'; + if(data.series.length !== 0) + { + str = str + '<tbody><tr><td height ="10px"></td></tr>'; + data.series.forEach(function(d){ + str = str + '<tr><td class="legend-color-guide"><div style="background-color:' + d.color + '"></div></td><td class="key">' + d.key + '</td><td class="value">' + d.value + '</td></tr>'; + }); + str = str + '</tbody>'; + } + str = str + '</table>'; + return str; + }); + //============================================================ // Chart function //------------------------------------------------------------ @@ -10392,21 +10725,6 @@ nv.models.parallelCoordinatesChart = function () { d.currentPosition = isNaN(d.currentPosition) ? i : d.currentPosition; }); - var currentDimensions = dimensionNames.map(function (d) { return d.key; }); - var newDimensions = dimensionData.map(function (d) { return d.key; }); - dimensionData.forEach(function (k, i) { - var idx = currentDimensions.indexOf(k.key); - if (idx < 0) { - dimensionNames.splice(i, 0, k); - } else { - var gap = dimensionNames[idx].currentPosition - dimensionNames[idx].originalPosition; - dimensionNames[idx].originalPosition = k.originalPosition; - dimensionNames[idx].currentPosition = k.originalPosition + gap; - } - }); - //Remove old dimensions - dimensionNames = dimensionNames.filter(function (d) { return newDimensions.indexOf(d.key) >= 0; }); - if (!defaultState) { var key; defaultState = {}; @@ -10442,12 +10760,14 @@ nv.models.parallelCoordinatesChart = function () { .attr("height", (availableHeight > 0) ? availableHeight : 0); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { legend.width(availableWidth) .color(function (d) { return "rgb(188,190,192)"; }); g.select('.nv-legendWrap') - .datum(dimensionNames.sort(function (a, b) { return a.originalPosition - b.originalPosition; })) + .datum(dimensionData.sort(function (a, b) { return a.originalPosition - b.originalPosition; })) .call(legend); if (margin.top != legend.height()) { @@ -10459,14 +10779,11 @@ nv.models.parallelCoordinatesChart = function () { } wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); - - - // Main Chart Component(s) parallelCoordinates .width(availableWidth) .height(availableHeight) - .dimensionData(dimensionNames) + .dimensionData(dimensionData) .displayBrush(displayBrush); var parallelCoordinatesWrap = g.select('.nv-parallelCoordinatesWrap ') @@ -10498,21 +10815,21 @@ nv.models.parallelCoordinatesChart = function () { //Update dimensions order and display reset sorting button parallelCoordinates.dispatch.on('dimensionsOrder', function (e) { - dimensionNames.sort(function (a, b) { return a.currentPosition - b.currentPosition; }); + dimensionData.sort(function (a, b) { return a.currentPosition - b.currentPosition; }); var isSorted = false; - dimensionNames.forEach(function (d, i) { + dimensionData.forEach(function (d, i) { d.currentPosition = i; if (d.currentPosition !== d.originalPosition) isSorted = true; }); - dispatch.dimensionsOrder(dimensionNames, isSorted); + dispatch.dimensionsOrder(dimensionData, isSorted); }); // Update chart from a state object passed to event handler dispatch.on('changeState', function (e) { if (typeof e.disabled !== 'undefined') { - dimensionNames.forEach(function (series, i) { + dimensionData.forEach(function (series, i) { series.disabled = e.disabled[i]; }); state.disabled = e.disabled; @@ -10530,11 +10847,27 @@ nv.models.parallelCoordinatesChart = function () { //------------------------------------------------------------ parallelCoordinates.dispatch.on('elementMouseover.tooltip', function (evt) { - evt['series'] = { + var tp = { key: evt.label, - color: evt.color - }; - tooltip.data(evt).hidden(false); + color: evt.color, + series: [] + } + if(evt.values){ + Object.keys(evt.values).forEach(function (d) { + var dim = evt.dimensions.filter(function (dd) {return dd.key === d;})[0]; + if(dim){ + var v; + if (isNaN(evt.values[d]) || isNaN(parseFloat(evt.values[d]))) { + v = nanValue; + } else { + v = dim.format(evt.values[d]); + } + tp.series.push({ idx: dim.currentPosition, key: d, value: v, color: dim.color }); + } + }); + tp.series.sort(function(a,b) {return a.idx - b.idx}); + } + tooltip.data(tp).hidden(false); }); parallelCoordinates.dispatch.on('elementMouseout.tooltip', function(evt) { @@ -10553,7 +10886,6 @@ nv.models.parallelCoordinatesChart = function () { chart.parallelCoordinates = parallelCoordinates; chart.legend = legend; chart.tooltip = tooltip; - chart.options = nv.utils.optionsFunc.bind(chart); chart._options = Object.create({}, { @@ -10565,7 +10897,8 @@ nv.models.parallelCoordinatesChart = function () { dimensionData: { get: function () { return dimensionData; }, set: function (_) { dimensionData = _; } }, displayBrush: { get: function () { return displayBrush; }, set: function (_) { displayBrush = _; } }, noData: { get: function () { return noData; }, set: function (_) { noData = _; } }, - + nanValue: { get: function () { return nanValue; }, set: function (_) { nanValue = _; } }, + // options that require extra logic in the setter margin: { get: function () { return margin; }, @@ -10587,7 +10920,8 @@ nv.models.parallelCoordinatesChart = function () { nv.utils.initOptions(chart); return chart; - };nv.models.pie = function() { + }; +nv.models.pie = function() { "use strict"; //============================================================ @@ -10649,9 +10983,15 @@ nv.models.parallelCoordinatesChart = function () { arcsRadiusInner.push(inner); } } else { - arcsRadiusOuter = arcsRadius.map(function (d) { return (d.outer - d.outer / 5) * radius; }); - arcsRadiusInner = arcsRadius.map(function (d) { return (d.inner - d.inner / 5) * radius; }); - donutRatio = d3.min(arcsRadius.map(function (d) { return (d.inner - d.inner / 5); })); + if(growOnHover){ + arcsRadiusOuter = arcsRadius.map(function (d) { return (d.outer - d.outer / 5) * radius; }); + arcsRadiusInner = arcsRadius.map(function (d) { return (d.inner - d.inner / 5) * radius; }); + donutRatio = d3.min(arcsRadius.map(function (d) { return (d.inner - d.inner / 5); })); + } else { + arcsRadiusOuter = arcsRadius.map(function (d) { return d.outer * radius; }); + arcsRadiusInner = arcsRadius.map(function (d) { return d.inner * radius; }); + donutRatio = d3.min(arcsRadius.map(function (d) { return d.inner; })); + } } nv.utils.initSVG(container); @@ -11119,7 +11459,9 @@ nv.models.pieChart = function() { gEnter.append('g').attr('class', 'nv-legendWrap'); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { if (legendPosition === "top") { legend.width( availableWidth ).key(pie.x()); @@ -11219,6 +11561,8 @@ nv.models.pieChart = function() { // use Object get/set functionality to map between vars and chart functions chart._options = Object.create({}, { // simple options, just get/set the necessary values + width: {get: function(){return width;}, set: function(_){width=_;}}, + height: {get: function(){return height;}, set: function(_){height=_;}}, noData: {get: function(){return noData;}, set: function(_){noData=_;}}, showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}}, legendPosition: {get: function(){return legendPosition;}, set: function(_){legendPosition=_;}}, @@ -11288,6 +11632,7 @@ nv.models.scatter = function() { , useVoronoi = true , duration = 250 , interactiveUpdateDelay = 300 + , showLabels = false ; @@ -11300,8 +11645,34 @@ nv.models.scatter = function() { , needsUpdate = false // Flag for when the points are visually updating, but the interactive layer is behind, to disable tooltips , renderWatch = nv.utils.renderWatch(dispatch, duration) , _sizeRange_def = [16, 256] + , _caches ; + function getCache(d) { + var cache, i; + cache = _caches = _caches || {}; + i = d[0].series; + cache = cache[i] = cache[i] || {}; + i = d[1]; + cache = cache[i] = cache[i] || {}; + return cache; + } + + function getDiffs(d) { + var i, key, + point = d[0], + cache = getCache(d), + diffs = false; + for (i = 1; i < arguments.length; i ++) { + key = arguments[i]; + if (cache[key] !== point[key] || !cache.hasOwnProperty(key)) { + cache[key] = point[key]; + diffs = true; + } + } + return diffs; + } + function chart(selection) { renderWatch.reset(); selection.each(function(data) { @@ -11319,6 +11690,7 @@ nv.models.scatter = function() { }); // Setup Scales + var logScale = chart.yScale().name === d3.scale.log().name ? true : false; // remap and flatten the data for use in calculating the scales' domains var seriesData = (xDomain && yDomain && sizeDomain) ? [] : // if we know xDomain and yDomain and sizeDomain, no need to calculate.... if Size is constant remember to set sizeDomain to speed up performance d3.merge( @@ -11337,7 +11709,7 @@ nv.models.scatter = function() { else x.range(xRange || [0, availableWidth]); - if (chart.yScale().name === "o") { + if (logScale) { var min = d3.min(seriesData.map(function(d) { if (d.y !== 0) return d.y; })); y.clamp(true) .domain(yDomain || d3.extent(seriesData.map(function(d) { @@ -11378,6 +11750,8 @@ nv.models.scatter = function() { y0 = y0 || y; z0 = z0 || z; + var scaleDiff = x(1) !== x0(1) || y(1) !== y0(1) || z(1) !== z0(1); + // Setup containers and skeleton of chart var wrap = container.selectAll('g.nv-wrap.nv-scatter').data([data]); var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatter nv-chart-' + id); @@ -11421,8 +11795,8 @@ nv.models.scatter = function() { var pX = getX(point,pointIndex); var pY = getY(point,pointIndex); - return [x(pX)+ Math.random() * 1e-4, - y(pY)+ Math.random() * 1e-4, + return [nv.utils.NaNtoZero(x(pX))+ Math.random() * 1e-4, + nv.utils.NaNtoZero(y(pY))+ Math.random() * 1e-4, groupIndex, pointIndex, point]; //temp hack to add noise until I think of a better way so there are no duplicates }) @@ -11621,6 +11995,7 @@ nv.models.scatter = function() { .attr('class', function(d,i) { return (d.classed || '') + ' nv-group nv-series-' + i; }) + .classed('nv-noninteractive', !interactive) .classed('hover', function(d) { return d.hover }); groups.watchTransition(renderWatch, 'scatter: groups') .style('fill', function(d,i) { return color(d, i) }) @@ -11640,6 +12015,9 @@ nv.models.scatter = function() { }) }); points.enter().append('path') + .attr('class', function (d) { + return 'nv-point nv-point-' + d[1]; + }) .style('fill', function (d) { return d.color }) .style('stroke', function (d) { return d.color }) .attr('transform', function(d) { @@ -11657,25 +12035,66 @@ nv.models.scatter = function() { return 'translate(' + nv.utils.NaNtoZero(x(getX(d[0],d[1]))) + ',' + nv.utils.NaNtoZero(y(getY(d[0],d[1]))) + ')' }) .remove(); - points.each(function(d) { - d3.select(this) - .classed('nv-point', true) - .classed('nv-point-' + d[1], true) - .classed('nv-noninteractive', !interactive) - .classed('hover',false) - ; - }); - points + points.filter(function (d) { return scaleDiff || getDiffs(d, 'x', 'y'); }) .watchTransition(renderWatch, 'scatter points') .attr('transform', function(d) { //nv.log(d, getX(d[0],d[1]), x(getX(d[0],d[1]))); return 'translate(' + nv.utils.NaNtoZero(x(getX(d[0],d[1]))) + ',' + nv.utils.NaNtoZero(y(getY(d[0],d[1]))) + ')' - }) + }); + points.filter(function (d) { return scaleDiff || getDiffs(d, 'shape', 'size'); }) + .watchTransition(renderWatch, 'scatter points') .attr('d', nv.utils.symbol() .type(function(d) { return getShape(d[0]); }) .size(function(d) { return z(getSize(d[0],d[1])) }) ); + + // add label a label to scatter chart + if(showLabels) + { + var titles = groups.selectAll('.nv-label') + .data(function(d) { + return d.values.map( + function (point, pointIndex) { + return [point, pointIndex] + }).filter( + function(pointArray, pointIndex) { + return pointActive(pointArray[0], pointIndex) + }) + }); + + titles.enter().append('text') + .style('fill', function (d,i) { + return d.color }) + .style('stroke-opacity', 0) + .style('fill-opacity', 1) + .attr('transform', function(d) { + var dx = nv.utils.NaNtoZero(x0(getX(d[0],d[1]))) + Math.sqrt(z(getSize(d[0],d[1]))/Math.PI) + 2; + return 'translate(' + dx + ',' + nv.utils.NaNtoZero(y0(getY(d[0],d[1]))) + ')'; + }) + .text(function(d,i){ + return d[0].label;}); + + titles.exit().remove(); + groups.exit().selectAll('path.nv-label') + .watchTransition(renderWatch, 'scatter exit') + .attr('transform', function(d) { + var dx = nv.utils.NaNtoZero(x(getX(d[0],d[1])))+ Math.sqrt(z(getSize(d[0],d[1]))/Math.PI)+2; + return 'translate(' + dx + ',' + nv.utils.NaNtoZero(y(getY(d[0],d[1]))) + ')'; + }) + .remove(); + titles.each(function(d) { + d3.select(this) + .classed('nv-label', true) + .classed('nv-label-' + d[1], false) + .classed('hover',false); + }); + titles.watchTransition(renderWatch, 'scatter labels') + .attr('transform', function(d) { + var dx = nv.utils.NaNtoZero(x(getX(d[0],d[1])))+ Math.sqrt(z(getSize(d[0],d[1]))/Math.PI)+2; + return 'translate(' + dx + ',' + nv.utils.NaNtoZero(y(getY(d[0],d[1]))) + ')' + }); + } // Delay updating the invisible interactive layer for smoother animation if( interactiveUpdateDelay ) @@ -11758,7 +12177,7 @@ nv.models.scatter = function() { showVoronoi: {get: function(){return showVoronoi;}, set: function(_){showVoronoi=_;}}, id: {get: function(){return id;}, set: function(_){id=_;}}, interactiveUpdateDelay: {get:function(){return interactiveUpdateDelay;}, set: function(_){interactiveUpdateDelay=_;}}, - + showLabels: {get: function(){return showLabels;}, set: function(_){ showLabels = _;}}, // simple functor options x: {get: function(){return getX;}, set: function(_){getX = d3.functor(_);}}, @@ -11826,6 +12245,7 @@ nv.models.scatterChart = function() { , dispatch = d3.dispatch('stateChange', 'changeState', 'renderEnd') , noData = null , duration = 250 + , showLabels = false ; scatter.xScale(x).yScale(y); @@ -11947,7 +12367,9 @@ nv.models.scatterChart = function() { } // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { var legendWidth = availableWidth; legend.width(legendWidth); @@ -11973,7 +12395,8 @@ nv.models.scatterChart = function() { .color(data.map(function(d,i) { d.color = d.color || color(d, i); return d.color; - }).filter(function(d,i) { return !data[i].disabled })); + }).filter(function(d,i) { return !data[i].disabled })) + .showLabels(showLabels); wrap.select('.nv-scatterWrap') .datum(data.filter(function(d) { return !d.disabled })) @@ -12151,6 +12574,7 @@ nv.models.scatterChart = function() { defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}}, noData: {get: function(){return noData;}, set: function(_){noData=_;}}, duration: {get: function(){return duration;}, set: function(_){duration=_;}}, + showLabels: {get: function(){return showLabels;}, set: function(_){showLabels=_;}}, // options that require extra logic in the setter margin: {get: function(){return margin;}, set: function(_){ @@ -12197,6 +12621,8 @@ nv.models.sparkline = function() { , yDomain , xRange , yRange + , showMinMaxPoints = true + , showCurrentPoint = true , dispatch = d3.dispatch('renderEnd') ; @@ -12257,7 +12683,7 @@ nv.models.sparkline = function() { var maxPoint = pointIndex(yValues.lastIndexOf(y.domain()[1])), minPoint = pointIndex(yValues.indexOf(y.domain()[0])), currentPoint = pointIndex(yValues.length - 1); - return [minPoint, maxPoint, currentPoint].filter(function (d) {return d != null;}); + return [(showMinMaxPoints ? minPoint : null), (showMinMaxPoints ? maxPoint : null), (showCurrentPoint ? currentPoint : null)].filter(function (d) {return d != null;}); }); points.enter().append('circle'); points.exit().remove(); @@ -12283,15 +12709,17 @@ nv.models.sparkline = function() { chart._options = Object.create({}, { // simple options, just get/set the necessary values - width: {get: function(){return width;}, set: function(_){width=_;}}, - height: {get: function(){return height;}, set: function(_){height=_;}}, - xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}}, - yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}}, - xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}}, - yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}}, - xScale: {get: function(){return x;}, set: function(_){x=_;}}, - yScale: {get: function(){return y;}, set: function(_){y=_;}}, - animate: {get: function(){return animate;}, set: function(_){animate=_;}}, + width: {get: function(){return width;}, set: function(_){width=_;}}, + height: {get: function(){return height;}, set: function(_){height=_;}}, + xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}}, + yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}}, + xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}}, + yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}}, + xScale: {get: function(){return x;}, set: function(_){x=_;}}, + yScale: {get: function(){return y;}, set: function(_){y=_;}}, + animate: {get: function(){return animate;}, set: function(_){animate=_;}}, + showMinMaxPoints: {get: function(){return showMinMaxPoints;}, set: function(_){showMinMaxPoints=_;}}, + showCurrentPoint: {get: function(){return showCurrentPoint;}, set: function(_){showCurrentPoint=_;}}, //functor options x: {get: function(){return getX;}, set: function(_){getX=d3.functor(_);}}, @@ -12646,7 +13074,6 @@ nv.models.stackedArea = function() { .y(function(d) { if (d.display !== undefined) { return d.display.y + d.display.y0; } }) - .forceY([0]) .color(data.map(function(d,i) { d.color = d.color || color(d, d.seriesIndex); return d.color; @@ -13021,7 +13448,9 @@ nv.models.stackedAreaChart = function() { g.select("rect").attr("width",availableWidth).attr("height",availableHeight); // Legend - if (showLegend) { + if (!showLegend) { + g.select('.nv-legendWrap').selectAll('*').remove(); + } else { var legendWidth = (showControls) ? availableWidth - controlWidth : availableWidth; legend.width(legendWidth); @@ -13037,7 +13466,9 @@ nv.models.stackedAreaChart = function() { } // Controls - if (showControls) { + if (!showControls) { + g.select('.nv-controlsWrap').selectAll('*').remove(); + } else { var controlsData = [ { key: controlLabels.stacked || 'Stacked', @@ -13231,7 +13662,7 @@ nv.models.stackedAreaChart = function() { key: series.key, value: tooltipValue, color: color(series,series.seriesIndex), - stackedValue: point.display + point: point }); if (showTotalInTooltip && stacked.style() != 'expand') { @@ -13250,8 +13681,8 @@ nv.models.stackedAreaChart = function() { //To handle situation where the stacked area chart is negative, we need to use absolute values //when checking if the mouse Y value is within the stack area. yValue = Math.abs(yValue); - var stackedY0 = Math.abs(series.stackedValue.y0); - var stackedY = Math.abs(series.stackedValue.y); + var stackedY0 = Math.abs(series.point.display.y0); + var stackedY = Math.abs(series.point.display.y); if ( yValue >= stackedY0 && yValue <= (stackedY + stackedY0)) { indexToHighlight = i; @@ -13423,70 +13854,208 @@ nv.models.sunburst = function() { //------------------------------------------------------------ var margin = {top: 0, right: 0, bottom: 0, left: 0} - , width = null - , height = null + , width = 600 + , height = 600 , mode = "count" - , modes = {count: function(d) { return 1; }, size: function(d) { return d.size }} + , modes = {count: function(d) { return 1; }, value: function(d) { return d.value || d.size }, size: function(d) { return d.value || d.size }} , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one , container = null , color = nv.utils.defaultColor() + , showLabels = false + , labelFormat = function(d){if(mode === 'count'){return d.name + ' #' + d.value}else{return d.name + ' ' + (d.value || d.size)}} + , labelThreshold = 0.02 + , sort = function(d1, d2){return d1.name > d2.name;} + , key = function(d,i){return d.name;} , groupColorByParent = true , duration = 500 - , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMousemove', 'elementMouseover', 'elementMouseout', 'renderEnd') - ; + , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMousemove', 'elementMouseover', 'elementMouseout', 'renderEnd'); + + //============================================================ + // aux functions and setup + //------------------------------------------------------------ var x = d3.scale.linear().range([0, 2 * Math.PI]); var y = d3.scale.sqrt(); - var partition = d3.layout.partition() - .sort(null) - .value(function(d) { return 1; }); + var partition = d3.layout.partition().sort(sort); + + var node, availableWidth, availableHeight, radius; + var prevPositions = {}; var arc = d3.svg.arc() - .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); }) - .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); }) - .innerRadius(function(d) { return Math.max(0, y(d.y)); }) - .outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); }); + .startAngle(function(d) {return Math.max(0, Math.min(2 * Math.PI, x(d.x))) }) + .endAngle(function(d) {return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))) }) + .innerRadius(function(d) {return Math.max(0, y(d.y)) }) + .outerRadius(function(d) {return Math.max(0, y(d.y + d.dy)) }); + + function rotationToAvoidUpsideDown(d) { + var centerAngle = computeCenterAngle(d); + if(centerAngle > 90){ + return 180; + } + else { + return 0; + } + } + + function computeCenterAngle(d) { + var startAngle = Math.max(0, Math.min(2 * Math.PI, x(d.x))); + var endAngle = Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); + var centerAngle = (((startAngle + endAngle) / 2) * (180 / Math.PI)) - 90; + return centerAngle; + } + + function labelThresholdMatched(d) { + var startAngle = Math.max(0, Math.min(2 * Math.PI, x(d.x))); + var endAngle = Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); + + var size = endAngle - startAngle; + return size > labelThreshold; + } + + // When zooming: interpolate the scales. + function arcTweenZoom(e,i) { + var xd = d3.interpolate(x.domain(), [node.x, node.x + node.dx]), + yd = d3.interpolate(y.domain(), [node.y, 1]), + yr = d3.interpolate(y.range(), [node.y ? 20 : 0, radius]); - // Keep track of the current and previous node being displayed as the root. - var node, prevNode; - // Keep track of the root node - var rootNode; + if (i === 0) { + return function() {return arc(e);} + } + else { + return function (t) { + x.domain(xd(t)); + y.domain(yd(t)).range(yr(t)); + return arc(e); + } + }; + } + + function arcTweenUpdate(d) { + var ipo = d3.interpolate({x: d.x0, dx: d.dx0, y: d.y0, dy: d.dy0}, d); + + return function (t) { + var b = ipo(t); + + d.x0 = b.x; + d.dx0 = b.dx; + d.y0 = b.y; + d.dy0 = b.dy; + + return arc(b); + }; + } + + function updatePrevPosition(node) { + var k = key(node); + if(! prevPositions[k]) prevPositions[k] = {}; + var pP = prevPositions[k]; + pP.dx = node.dx; + pP.x = node.x; + pP.dy = node.dy; + pP.y = node.y; + } + + function storeRetrievePrevPositions(nodes) { + nodes.forEach(function(n){ + var k = key(n); + var pP = prevPositions[k]; + //console.log(k,n,pP); + if( pP ){ + n.dx0 = pP.dx; + n.x0 = pP.x; + n.dy0 = pP.dy; + n.y0 = pP.y; + } + else { + n.dx0 = n.dx; + n.x0 = n.x; + n.dy0 = n.dy; + n.y0 = n.y; + } + updatePrevPosition(n); + }); + } + + function zoomClick(d) { + var labels = container.selectAll('text') + var path = container.selectAll('path') + + // fade out all text elements + labels.transition().attr("opacity",0); + + // to allow reference to the new center node + node = d; + + path.transition() + .duration(duration) + .attrTween("d", arcTweenZoom) + .each('end', function(e) { + // partially taken from here: http://bl.ocks.org/metmajer/5480307 + // check if the animated element's data e lies within the visible angle span given in d + if(e.x >= d.x && e.x < (d.x + d.dx) ){ + if(e.depth >= d.depth){ + // get a selection of the associated text element + var parentNode = d3.select(this.parentNode); + var arcText = parentNode.select('text'); + + // fade in the text element and recalculate positions + arcText.transition().duration(duration) + .text( function(e){return labelFormat(e) }) + .attr("opacity", function(d){ + if(labelThresholdMatched(d)) { + return 1; + } + else { + return 0; + } + }) + .attr("transform", function() { + var width = this.getBBox().width; + if(e.depth === 0) + return "translate(" + (width / 2 * - 1) + ",0)"; + else if(e.depth === d.depth){ + return "translate(" + (y(e.y) + 5) + ",0)"; + } + else { + var centerAngle = computeCenterAngle(e); + var rotation = rotationToAvoidUpsideDown(e); + if (rotation === 0) { + return 'rotate('+ centerAngle +')translate(' + (y(e.y) + 5) + ',0)'; + } + else { + return 'rotate('+ centerAngle +')translate(' + (y(e.y) + width + 5) + ',0)rotate(' + rotation + ')'; + } + } + }); + } + } + }) + } //============================================================ // chart function //------------------------------------------------------------ - var renderWatch = nv.utils.renderWatch(dispatch); function chart(selection) { renderWatch.reset(); + selection.each(function(data) { container = d3.select(this); - var availableWidth = nv.utils.availableWidth(width, container, margin); - var availableHeight = nv.utils.availableHeight(height, container, margin); - var radius = Math.min(availableWidth, availableHeight) / 2; - var path; + availableWidth = nv.utils.availableWidth(width, container, margin); + availableHeight = nv.utils.availableHeight(height, container, margin); + radius = Math.min(availableWidth, availableHeight) / 2; - nv.utils.initSVG(container); + y.range([0, radius]); // Setup containers and skeleton of chart - var wrap = container.selectAll('.nv-wrap.nv-sunburst').data(data); - var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sunburst nv-chart-' + id); - - var g = wrapEnter.selectAll('nv-sunburst'); - - chart.update = function() { - if ( duration === 0 ) { - container.call(chart); - } else { - container.transition().duration(duration).call(chart); - } - }; - chart.container = this; - - - wrap.attr('transform', 'translate(' + availableWidth / 2 + ',' + availableHeight / 2 + ')'); + var wrap = container.select('g.nvd3.nv-wrap.nv-sunburst'); + if( !wrap[0][0] ) { + wrap = container.append('g') + .attr('class', 'nvd3 nv-wrap nv-sunburst nv-chart-' + id) + .attr('transform', 'translate(' + availableWidth / 2 + ',' + availableHeight / 2 + ')'); + } container.on('click', function (d, i) { dispatch.chartClick({ @@ -13497,13 +14066,21 @@ nv.models.sunburst = function() { }); }); - y.range([0, radius]); - - node = node || data; - rootNode = data[0]; partition.value(modes[mode] || modes["count"]); - path = g.data(partition.nodes).enter() - .append("path") + + //reverse the drawing order so that the labels of inner + //arcs are drawn on top of the outer arcs. + var nodes = partition.nodes(data[0]).reverse() + + storeRetrievePrevPositions(nodes); + var cG = wrap.selectAll('.arc-container').data(nodes, key) + + //handle new datapoints + var cGE = cG.enter() + .append("g") + .attr("class",'arc-container') + + cGE.append("path") .attr("d", arc) .style("fill", function (d) { if (d.color) { @@ -13517,22 +14094,7 @@ nv.models.sunburst = function() { } }) .style("stroke", "#FFF") - .on("click", function(d) { - if (prevNode !== node && node !== d) prevNode = node; - node = d; - path.transition() - .duration(duration) - .attrTween("d", arcTweenZoom(d)); - }) - .each(stash) - .on("dblclick", function(d) { - if (prevNode.parent == d) { - path.transition() - .duration(duration) - .attrTween("d", arcTweenZoom(rootNode)); - } - }) - .each(stash) + .on("click", zoomClick) .on('mouseover', function(d,i){ d3.select(this).classed('hover', true).style('opacity', 0.8); dispatch.elementMouseover({ @@ -13552,58 +14114,68 @@ nv.models.sunburst = function() { }); }); + ///Iterating via each and selecting based on the this + ///makes it work ... a cG.selectAll('path') doesn't. + ///Without iteration the data (in the element) didn't update. + cG.each(function(d){ + d3.select(this).select('path') + .transition() + .duration(duration) + .attrTween('d', arcTweenUpdate); + }); + if(showLabels){ + //remove labels first and add them back + cG.selectAll('text').remove(); - // Setup for switching data: stash the old values for transition. - function stash(d) { - d.x0 = d.x; - d.dx0 = d.dx; + //this way labels are on top of newly added arcs + cG.append('text') + .text( function(e){ return labelFormat(e)}) + .transition() + .duration(duration) + .attr("opacity", function(d){ + if(labelThresholdMatched(d)) { + return 1; + } + else { + return 0; + } + }) + .attr("transform", function(d) { + var width = this.getBBox().width; + if(d.depth === 0){ + return "rotate(0)translate(" + (width / 2 * -1) + ",0)"; + } + else { + var centerAngle = computeCenterAngle(d); + var rotation = rotationToAvoidUpsideDown(d); + if (rotation === 0) { + return 'rotate('+ centerAngle +')translate(' + (y(d.y) + 5) + ',0)'; + } + else { + return 'rotate('+ centerAngle +')translate(' + (y(d.y) + width + 5) + ',0)rotate(' + rotation + ')'; + } + } + }); } - // When switching data: interpolate the arcs in data space. - function arcTweenData(a, i) { - var oi = d3.interpolate({x: a.x0, dx: a.dx0}, a); - - function tween(t) { - var b = oi(t); - a.x0 = b.x; - a.dx0 = b.dx; - return arc(b); - } + //zoom out to the center when the data is updated. + zoomClick(nodes[nodes.length - 1]) - if (i == 0) { - // If we are on the first arc, adjust the x domain to match the root node - // at the current zoom level. (We only need to do this once.) - var xd = d3.interpolate(x.domain(), [node.x, node.x + node.dx]); - return function (t) { - x.domain(xd(t)); - return tween(t); - }; - } else { - return tween; - } - } - - // When zooming: interpolate the scales. - function arcTweenZoom(d) { - var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]), - yd = d3.interpolate(y.domain(), [d.y, 1]), - yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]); - return function (d, i) { - return i - ? function (t) { - return arc(d); - } - : function (t) { - x.domain(xd(t)); - y.domain(yd(t)).range(yr(t)); - return arc(d); - }; - }; - } + //remove unmatched elements ... + cG.exit() + .transition() + .duration(duration) + .attr('opacity',0) + .each('end',function(d){ + var k = key(d); + prevPositions[k] = undefined; + }) + .remove(); }); + renderWatch.renderEnd('sunburst immediate'); return chart; } @@ -13623,7 +14195,11 @@ nv.models.sunburst = function() { id: {get: function(){return id;}, set: function(_){id=_;}}, duration: {get: function(){return duration;}, set: function(_){duration=_;}}, groupColorByParent: {get: function(){return groupColorByParent;}, set: function(_){groupColorByParent=!!_;}}, - + showLabels: {get: function(){return showLabels;}, set: function(_){showLabels=!!_}}, + labelFormat: {get: function(){return labelFormat;}, set: function(_){labelFormat=_}}, + labelThreshold: {get: function(){return labelThreshold;}, set: function(_){labelThreshold=_}}, + sort: {get: function(){return sort;}, set: function(_){sort=_}}, + key: {get: function(){return key;}, set: function(_){key=_}}, // options that require extra logic in the setter margin: {get: function(){return margin;}, set: function(_){ margin.top = _.top != undefined ? _.top : margin.top; @@ -13657,21 +14233,19 @@ nv.models.sunburstChart = function() { , defaultState = null , noData = null , duration = 250 - , dispatch = d3.dispatch('stateChange', 'changeState','renderEnd') - ; + , dispatch = d3.dispatch('stateChange', 'changeState','renderEnd'); - tooltip.duration(0); //============================================================ // Private Variables //------------------------------------------------------------ var renderWatch = nv.utils.renderWatch(dispatch); + tooltip + .duration(0) .headerEnabled(false) - .valueFormatter(function(d, i) { - return d; - }); + .valueFormatter(function(d){return d;}); //============================================================ // Chart function @@ -13683,11 +14257,11 @@ nv.models.sunburstChart = function() { selection.each(function(data) { var container = d3.select(this); + nv.utils.initSVG(container); - var that = this; - var availableWidth = nv.utils.availableWidth(width, container, margin), - availableHeight = nv.utils.availableHeight(height, container, margin); + var availableWidth = nv.utils.availableWidth(width, container, margin); + var availableHeight = nv.utils.availableHeight(height, container, margin); chart.update = function() { if (duration === 0) { @@ -13696,7 +14270,7 @@ nv.models.sunburstChart = function() { container.transition().duration(duration).call(chart); } }; - chart.container = this; + chart.container = container; // Display No Data message if there's nothing to show. if (!data || !data.length) { @@ -13706,20 +14280,8 @@ nv.models.sunburstChart = function() { container.selectAll('.nv-noData').remove(); } - // Setup containers and skeleton of chart - var wrap = container.selectAll('g.nv-wrap.nv-sunburstChart').data(data); - var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sunburstChart').append('g'); - var g = wrap.select('g'); - - gEnter.append('g').attr('class', 'nv-sunburstWrap'); - - wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); - - // Main Chart Component(s) sunburst.width(availableWidth).height(availableHeight); - var sunWrap = g.select('.nv-sunburstWrap').datum(data); - d3.transition(sunWrap).call(sunburst); - + container.call(sunburst); }); renderWatch.renderEnd('sunburstChart immediate'); @@ -13731,9 +14293,9 @@ nv.models.sunburstChart = function() { //------------------------------------------------------------ sunburst.dispatch.on('elementMouseover.tooltip', function(evt) { - evt['series'] = { + evt.series = { key: evt.data.name, - value: evt.data.size, + value: (evt.data.value || evt.data.size), color: evt.color }; tooltip.data(evt).hidden(false); @@ -13783,7 +14345,8 @@ nv.models.sunburstChart = function() { nv.utils.inheritOptions(chart, sunburst); nv.utils.initOptions(chart); return chart; + }; -nv.version = "1.8.2"; +nv.version = "1.8.3"; })();
\ No newline at end of file diff --git a/src/usr/local/www/vpn_ipsec.php b/src/usr/local/www/vpn_ipsec.php index 03d30a4..e26d1d7 100644 --- a/src/usr/local/www/vpn_ipsec.php +++ b/src/usr/local/www/vpn_ipsec.php @@ -355,7 +355,7 @@ display_top_tabs($tab_array); <td id="frd<?=$i?>"> <?=$spans?> <?php - if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == "ikev1") { + if (empty($ph1ent['iketype']) || $ph1ent['iketype'] == "ikev1" || $ph1ent['iketype'] == "auto") { echo "{$ph1ent['mode']}"; } ?> diff --git a/src/usr/local/www/vpn_ipsec_keys_edit.php b/src/usr/local/www/vpn_ipsec_keys_edit.php index 92994c7..05fb97d 100644 --- a/src/usr/local/www/vpn_ipsec_keys_edit.php +++ b/src/usr/local/www/vpn_ipsec_keys_edit.php @@ -169,7 +169,7 @@ $section->addInput(new Form_Input( 'Identifier', 'text', $pconfig['ident'] -))->setHelp('This can be either an IP address, fully qualified domain name or an e-mail address'); +))->setHelp('This can be either an IP address, fully qualified domain name or an e-mail address.'); $section->addInput(new Form_Select( 'type', diff --git a/src/usr/local/www/vpn_ipsec_phase1.php b/src/usr/local/www/vpn_ipsec_phase1.php index 29d521f..92a6c48 100644 --- a/src/usr/local/www/vpn_ipsec_phase1.php +++ b/src/usr/local/www/vpn_ipsec_phase1.php @@ -455,7 +455,7 @@ if ($_POST) { if (!$input_errors) { $ph1ent['ikeid'] = $pconfig['ikeid']; $ph1ent['iketype'] = $pconfig['iketype']; - if ($pconfig['iketype'] != 'ikev1') { + if ($pconfig['iketype'] == 'ikev2') { unset($ph1ent['mode']); } else { $ph1ent['mode'] = $pconfig['mode']; @@ -662,10 +662,8 @@ function build_eal_list() { if ($pconfig['mobile']) { $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Mobile Clients"), gettext("Edit Phase 1")); - $editing_mobile = true; } else { $pgtitle = array(gettext("VPN"), gettext("IPsec"), gettext("Tunnels"), gettext("Edit Phase 1")); - $editing_mobile = false; } $shortcut_section = "ipsec"; @@ -677,8 +675,8 @@ if ($input_errors) { } $tab_array = array(); -$tab_array[] = array(gettext("Tunnels"), !$editing_mobile, "vpn_ipsec.php"); -$tab_array[] = array(gettext("Mobile Clients"), $editing_mobile, "vpn_ipsec_mobile.php"); +$tab_array[] = array(gettext("Tunnels"), true, "vpn_ipsec.php"); +$tab_array[] = array(gettext("Mobile Clients"), false, "vpn_ipsec_mobile.php"); $tab_array[] = array(gettext("Pre-Shared Keys"), false, "vpn_ipsec_keys.php"); $tab_array[] = array(gettext("Advanced Settings"), false, "vpn_ipsec_settings.php"); display_top_tabs($tab_array); @@ -721,7 +719,7 @@ if (!$pconfig['mobile']) { 'Remote Gateway', 'text', $pconfig['remotegw'] - ))->setHelp('Enter the public IP address or host name of the remote gateway'); + ))->setHelp('Enter the public IP address or host name of the remote gateway.'); } $section->addInput(new Form_Input( @@ -1136,17 +1134,17 @@ events.push(function() { //}); // Peer identifier - $('#peerid_type').click(function () { + $('#peerid_type').change(function () { peeridsel_change(); }); // My identifier - $('#myid_type').click(function () { + $('#myid_type').change(function () { myidsel_change(); }); // ike type - $('#iketype').click(function () { + $('#iketype').change(function () { iketype_change(); }); @@ -1156,7 +1154,7 @@ events.push(function() { }); // authentication method - $('#ealgo').click(function () { + $('#ealgo').change(function () { ealgosel_change(<?=$keyset?>); }); diff --git a/src/usr/local/www/vpn_ipsec_settings.php b/src/usr/local/www/vpn_ipsec_settings.php index 3c75716..d256de8 100644 --- a/src/usr/local/www/vpn_ipsec_settings.php +++ b/src/usr/local/www/vpn_ipsec_settings.php @@ -325,9 +325,9 @@ $section->addInput(new Form_Checkbox( 'Accept unencrypted ID and HASH payloads in IKEv1 Main Mode', $pconfig['acceptunencryptedmainmode'] ))->setHelp( - 'Some implementations send the third Main Mode message unencrypted, probably to find the PSKs for the specified ID for authentication.' . + 'Some implementations send the third Main Mode message unencrypted, probably to find the PSKs for the specified ID for authentication. ' . 'This is very similar to Aggressive Mode, and has the same security implications: ' . - 'A passive attacker can sniff the negotiated Identity, and start brute forcing the PSK using the HASH payload.' . + 'A passive attacker can sniff the negotiated Identity, and start brute forcing the PSK using the HASH payload. ' . 'It is recommended to keep this option to no, unless the exact implications are known and compatibility is required for such devices (for example, some SonicWall boxes).' ); @@ -376,9 +376,9 @@ $section->addInput(new Form_Checkbox( 'Make before Break', 'Initiate IKEv2 reauthentication with a make-before-break', $pconfig['makebeforebreak'] -))->setHelp('instead of a break-before-make scheme. Make-before-break uses overlapping IKE and CHILD_SA during reauthentication ' . +))->setHelp('Instead of a break-before-make scheme. Make-before-break uses overlapping IKE and CHILD_SA during reauthentication ' . 'by first recreating all new SAs before deleting the old ones. This behavior can be beneficial to avoid connectivity gaps ' . - 'during reauthentication, but requires support for overlapping SAs by the peer'); + 'during reauthentication, but requires support for overlapping SAs by the peer.'); $section->addInput(new Form_Checkbox( 'autoexcludelanaddress', diff --git a/src/usr/local/www/vpn_l2tp.php b/src/usr/local/www/vpn_l2tp.php index 7bc0d68..ec1a4d9 100644 --- a/src/usr/local/www/vpn_l2tp.php +++ b/src/usr/local/www/vpn_l2tp.php @@ -79,7 +79,7 @@ $pconfig['radiusenable'] = isset($l2tpcfg['radius']['enable']); $pconfig['radacct_enable'] = isset($l2tpcfg['radius']['accounting']); $pconfig['radiusserver'] = $l2tpcfg['radius']['server']; $pconfig['radiussecret'] = $l2tpcfg['radius']['secret']; -$pconfig['radiusissueips'] = $l2tpcfg['radius']['radiusissueips']; +$pconfig['radiusissueips'] = isset($l2tpcfg['radius']['radiusissueips']); $pconfig['n_l2tp_units'] = $l2tpcfg['n_l2tp_units']; $pconfig['paporchap'] = $l2tpcfg['paporchap']; $pconfig['secret'] = $l2tpcfg['secret']; @@ -306,14 +306,14 @@ $section->addInput(new Form_Select( $section->addInput(new Form_Input( 'l2tp_dns1', - 'Primary L2TM DNS server', + 'Primary L2TP DNS server', 'text', $pconfig['l2tp_dns1'] )); $section->addInput(new Form_Input( 'l2tp_dns2', - 'Secondary L2TM DNS server', + 'Secondary L2TP DNS server', 'text', $pconfig['l2tp_dns2'] )); diff --git a/src/usr/local/www/vpn_openvpn_client.php b/src/usr/local/www/vpn_openvpn_client.php index 5a25af0..58f6c63 100644 --- a/src/usr/local/www/vpn_openvpn_client.php +++ b/src/usr/local/www/vpn_openvpn_client.php @@ -462,7 +462,7 @@ if ($act=="new" || $act=="edit"): 'Disabled', 'Disable this client', $pconfig['disable'] - ))->setHelp('Set this option to disable this client without removing it from the list'); + ))->setHelp('Set this option to disable this client without removing it from the list.'); $section->addInput(new Form_Select( 'mode', @@ -521,6 +521,13 @@ if ($act=="new" || $act=="edit"): $pconfig['proxy_addr'] )); + $section->addInput(new Form_Input( + 'proxy_port', + 'Proxy port', + number, + $pconfig['proxy_port'] + )); + $section->addInput(new Form_Select( 'proxy_authtype', 'Proxy Auth. - Extra options', @@ -687,7 +694,7 @@ if ($act=="new" || $act=="edit"): 'text', $pconfig['tunnel_network'] ))->setHelp('This is the IPv4 virtual network used for private communications between this client and the server ' . - 'expressed using CIDR (eg. 10.0.8.0/24). The second network address will be assigned to ' . + 'expressed using CIDR (e.g. 10.0.8.0/24). The second network address will be assigned to ' . 'the client virtual interface.'); $section->addInput(new Form_Input( @@ -696,7 +703,7 @@ if ($act=="new" || $act=="edit"): 'text', $pconfig['tunnel_networkv6'] ))->setHelp('This is the IPv6 virtual network used for private ' . - 'communications between this client and the server expressed using CIDR (eg. fe80::/64). ' . + 'communications between this client and the server expressed using CIDR (e.g. fe80::/64). ' . 'The second network address will be assigned to the client virtual interface.'); $section->addInput(new Form_Input( @@ -765,7 +772,7 @@ if ($act=="new" || $act=="edit"): 'Don\'t add/remove routes', 'Don\'t add or remove routes automatically', $pconfig['route_no_exec'] - ))->setHelp('Pass routes to --route-upscript using environmental variables'); + ))->setHelp('Pass routes to --route-upscript using environmental variables.'); $form->add($section); @@ -776,17 +783,17 @@ if ($act=="new" || $act=="edit"): 'custom_options', 'Custom options', $pconfig['custom_options'] - ))->setHelp('Enter any additional options to add to the OpenVPN client configuration here, separated by semicolon'); + ))->setHelp('Enter any additional options to add to the OpenVPN client configuration here, separated by semicolon.'); $section->addInput(new Form_Select( 'verbosity_level', 'Verbosity level', $pconfig['verbosity_level'], $openvpn_verbosity_level - ))->setHelp('Each level shows all info from the previous levels. Level 3 is recommended for a good summary of what\'s happening without being swamped by output' . '<br /><br />' . + ))->setHelp('Each level shows all info from the previous levels. Level 3 is recommended for a good summary of what\'s happening without being swamped by output.' . '<br /><br />' . 'None: Only fatal errors' . '<br />' . 'Default through 4: Normal usage range' . '<br />' . - '5: Output R and W characters to the console for each packet read and write, uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets' .'<br />' . + '5: Output R and W characters to the console for each packet read and write. Uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets.' .'<br />' . '6-11: Debug info range'); $section->addInput(new Form_Input( diff --git a/src/usr/local/www/vpn_openvpn_csc.php b/src/usr/local/www/vpn_openvpn_csc.php index 66422da..0ad064d 100644 --- a/src/usr/local/www/vpn_openvpn_csc.php +++ b/src/usr/local/www/vpn_openvpn_csc.php @@ -394,7 +394,7 @@ if ($act == "new" || $act == "edit"): 'Tunnel Network', 'text', $pconfig['tunnel_network'] - ))->setHelp('This is the virtual network used for private communications between this client and the server expressed using CIDR (eg. 10.0.8.0/24). ' . + ))->setHelp('This is the virtual network used for private communications between this client and the server expressed using CIDR (e.g. 10.0.8.0/24). ' . 'The first network address is assumed to be the server address and the second network address will be assigned to the client virtual interface. '); $section->addInput(new Form_Input( diff --git a/src/usr/local/www/vpn_openvpn_server.php b/src/usr/local/www/vpn_openvpn_server.php index 3af8448..12a883c 100644 --- a/src/usr/local/www/vpn_openvpn_server.php +++ b/src/usr/local/www/vpn_openvpn_server.php @@ -630,7 +630,7 @@ if ($act=="new" || $act=="edit"): 'Disabled', 'Disable this server', $pconfig['disable'] - ))->setHelp('Set this option to disable this server without removing it from the list'); + ))->setHelp('Set this option to disable this server without removing it from the list.'); $section->addInput(new Form_Select( 'mode', @@ -850,9 +850,9 @@ if ($act=="new" || $act=="edit"): 'text', $pconfig['tunnel_network'] ))->setHelp('This is the IPv4 virtual network used for private communications between this server and client ' . - 'hosts expressed using CIDR (eg. 10.0.8.0/24). The first network address will be assigned to ' . + 'hosts expressed using CIDR (e.g. 10.0.8.0/24). The first network address will be assigned to ' . 'the server virtual interface. The remaining network addresses can optionally be assigned ' . - 'to connecting clients. (see Address Pool)'); + 'to connecting clients (see Address Pool).'); $section->addInput(new Form_Input( 'tunnel_networkv6', @@ -860,9 +860,9 @@ if ($act=="new" || $act=="edit"): 'text', $pconfig['tunnel_networkv6'] ))->setHelp('This is the IPv6 virtual network used for private ' . - 'communications between this server and client hosts expressed using CIDR (eg. fe80::/64). ' . + 'communications between this server and client hosts expressed using CIDR (e.g. fe80::/64). ' . 'The first network address will be assigned to the server virtual interface. The remaining ' . - 'network addresses can optionally be assigned to connecting clients. (see Address Pool)'); + 'network addresses can optionally be assigned to connecting clients (see Address Pool).'); $section->addInput(new Form_Checkbox( 'serverbridge_dhcp', @@ -876,7 +876,7 @@ if ($act=="new" || $act=="edit"): 'Bridge Interface', $pconfig['serverbridge_interface'], openvpn_build_bridge_list() - ))->setHelp('The interface to which this tap instance will be bridged. This is not done automatically. This interface must be assigned ' . + ))->setHelp('The interface to which this TAP instance will be bridged. This is not done automatically. This interface must be assigned ' . 'and the bridge created separately. This setting controls which existing IP address and subnet ' . 'mask are used by OpenVPN for the bridge. Setting this to "none" will cause the Server Bridge DHCP settings below to be ignored.'); @@ -885,8 +885,8 @@ if ($act=="new" || $act=="edit"): 'Server Bridge DHCP Start', 'text', $pconfig['serverbridge_dhcp_start'] - ))->setHelp('When using tap mode as a multi-point server, a DHCP range may optionally be supplied to use on the ' . - 'interface to which this tap instance is bridged. If these settings are left blank, DHCP will be passed ' . + ))->setHelp('When using TAP mode as a multi-point server, a DHCP range may optionally be supplied to use on the ' . + 'interface to which this TAP instance is bridged. If these settings are left blank, DHCP will be passed ' . 'through to the LAN, and the interface setting above will be ignored.'); $section->addInput(new Form_Input( @@ -992,14 +992,14 @@ if ($act=="new" || $act=="edit"): $section->addInput(new Form_Checkbox( 'dynamic_ip', 'Dynamic IP', - 'Allow connected clients to retain their connections if their IP address changes', + 'Allow connected clients to retain their connections if their IP address changes.', $pconfig['dynamic_ip'] )); $section->addInput(new Form_Checkbox( 'pool_enable', 'Address Pool', - 'Provide a virtual adapter IP address to clients (see Tunnel Network)', + 'Provide a virtual adapter IP address to clients (see Tunnel Network).', $pconfig['pool_enable'] )); @@ -1008,7 +1008,7 @@ if ($act=="new" || $act=="edit"): 'Topology', $pconfig['topology'], $openvpn_topologies - ))->setHelp('Specifies the method used to supply a virtual adapter IP address to clients when using tun mode on IPv4.' . '<br />' . + ))->setHelp('Specifies the method used to supply a virtual adapter IP address to clients when using TUN mode on IPv4.' . '<br />' . 'Some clients may require this be set to "subnet" even for IPv6, such as OpenVPN Connect (iOS/Android). ' . 'Older versions of OpenVPN (before 2.0.9) or clients such as Yealink phones may require "net30".'); @@ -1099,7 +1099,7 @@ if ($act=="new" || $act=="edit"): 'NetBIOS enable', 'Enable NetBIOS over TCP/IP', $pconfig['netbios_enable'] - ))->setHelp('If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled'); + ))->setHelp('If this option is not set, all NetBIOS-over-TCP/IP options (including WINS) will be disabled.'); $section->addInput(new Form_Select( 'netbios_ntype', @@ -1162,7 +1162,7 @@ if ($act=="new" || $act=="edit"): 'custom_options', 'Custom options', $pconfig['custom_options'] - ))->setHelp('Enter any additional options to add to the OpenVPN server configuration here, separated by semicolon' . '<br />' . + ))->setHelp('Enter any additional options to add to the OpenVPN server configuration here, separated by semicolon.' . '<br />' . 'EXAMPLE: push "route 10.0.0.0 255.255.255.0"'); $section->addInput(new Form_Select( @@ -1170,10 +1170,10 @@ if ($act=="new" || $act=="edit"): 'Verbosity level', $pconfig['verbosity_level'], $openvpn_verbosity_level - ))->setHelp('Each level shows all info from the previous levels. Level 3 is recommended for a good summary of what\'s happening without being swamped by output' . '<br /><br />' . + ))->setHelp('Each level shows all info from the previous levels. Level 3 is recommended for a good summary of what\'s happening without being swamped by output.' . '<br /><br />' . 'None: Only fatal errors' . '<br />' . 'Default through 4: Normal usage range' . '<br />' . - '5: Output R and W characters to the console for each packet read and write, uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets' .'<br />' . + '5: Output R and W characters to the console for each packet read and write. Uppercase is used for TCP/UDP packets and lowercase is used for TUN/TAP packets.' .'<br />' . '6-11: Debug info range'); $section->addInput(new Form_Input( @@ -1589,7 +1589,7 @@ events.push(function() { }); // Mode - $('#mode').click(function () { + $('#mode').change(function () { mode_change(); tuntap_change(); }); diff --git a/src/usr/local/www/widgets/widgets/captive_portal_status.widget.php b/src/usr/local/www/widgets/widgets/captive_portal_status.widget.php index dc322cb..f610cf0 100644 --- a/src/usr/local/www/widgets/widgets/captive_portal_status.widget.php +++ b/src/usr/local/www/widgets/widgets/captive_portal_status.widget.php @@ -74,6 +74,7 @@ $cpzone = $_GET['zone']; if (isset($_POST['zone'])) { $cpzone = $_POST['zone']; } +$cpzone = strtolower($cpzone); if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) { $cpzoneid = $a_cp[$cpzone]['zoneid']; @@ -155,4 +156,4 @@ if ($_GET['order']) { endforeach; ?> </tbody> -</table>
\ No newline at end of file +</table> diff --git a/src/usr/local/www/widgets/widgets/carp_status.widget.php b/src/usr/local/www/widgets/widgets/carp_status.widget.php index 567a3db..8a7ba85 100644 --- a/src/usr/local/www/widgets/widgets/carp_status.widget.php +++ b/src/usr/local/www/widgets/widgets/carp_status.widget.php @@ -68,9 +68,9 @@ $carp_enabled = get_carp_status(); <table class="table table-striped table-hover"> <thead> <tr> - <th>CARP Interface</th> - <th>IP Address</th> - <th>Status</th> + <th><?=gettext("CARP Interface")?></th> + <th><?=gettext("IP Address")?></th> + <th><?=gettext("Status")?></th> </tr> </thead> <tbody> diff --git a/src/usr/local/www/widgets/widgets/gateways.widget.php b/src/usr/local/www/widgets/widgets/gateways.widget.php index fd8aa8f..422c0ab 100644 --- a/src/usr/local/www/widgets/widgets/gateways.widget.php +++ b/src/usr/local/www/widgets/widgets/gateways.widget.php @@ -131,14 +131,22 @@ if ($_POST) { } } ?> - <input name="display_type" class="radio" type="radio" id="display_type_gw_ip" value="gw_ip" <?=$display_type_gw_ip;?> onchange="updateGatewayDisplays();" /> <span><?=gettext('Gateway IP')?></span> - <input name="display_type" class="radio" type="radio" id="display_type_monitor_ip" value="monitor_ip" <?=$display_type_monitor_ip;?> onchange="updateGatewayDisplays();" /> <span><?=gettext('Monitor IP')?></span> - <input name="display_type" class="radio" type="radio" id="display_type_both_ip" value="both_ip" <?=$display_type_both_ip;?> onchange="updateGatewayDisplays();" /> <span><?=gettext('Both')?></span> - <br /><br /> + + <div class="radio"> + <label><input name="display_type" type="radio" id="display_type_gw_ip" value="gw_ip" <?=$display_type_gw_ip;?> onchange="updateGatewayDisplays();" /> <?=gettext('Gateway IP')?></label> + </div> + <div class="radio"> + <label><input name="display_type" type="radio" id="display_type_monitor_ip" value="monitor_ip" <?=$display_type_monitor_ip;?> onchange="updateGatewayDisplays();" /><?=gettext('Monitor IP')?></label> + </div> + <div class="radio"> + <label><input name="display_type" type="radio" id="display_type_both_ip" value="both_ip" <?=$display_type_both_ip;?> onchange="updateGatewayDisplays();" /><?=gettext('Both')?></label> + </div> + <br /> <button id="submit_settings" name="submit_settings" type="submit" onclick="return updatePref();" class="btn btn-primary btn-sm" value="<?=gettext('Save Settings')?>"> <i class="fa fa-save icon-embed-btn"></i> <?=gettext('Save Settings')?> </button> + </form> </div> diff --git a/src/usr/local/www/widgets/widgets/smart_status.widget.php b/src/usr/local/www/widgets/widgets/smart_status.widget.php index 42feb40..571cf31 100644 --- a/src/usr/local/www/widgets/widgets/smart_status.widget.php +++ b/src/usr/local/www/widgets/widgets/smart_status.widget.php @@ -61,7 +61,7 @@ require_once("guiconfig.inc"); require_once("pfsense-utils.inc"); require_once("functions.inc"); require_once("/usr/local/www/widgets/include/smart_status.inc"); - +$specplatform = system_identify_specific_platform(); ?> <table class="table table-striped table-hover"> diff --git a/src/usr/local/www/widgets/widgets/system_information.widget.php b/src/usr/local/www/widgets/widgets/system_information.widget.php index 28189e3..aa1ea06 100644 --- a/src/usr/local/www/widgets/widgets/system_information.widget.php +++ b/src/usr/local/www/widgets/widgets/system_information.widget.php @@ -120,7 +120,7 @@ $filesystems = get_mounted_filesystems(); <tr> <th><?=gettext("Version");?></th> <td> - <strong><?=$g['product_version']?></strong> + <strong><?=$g['product_version_string']?></strong> (<?php echo php_uname("m"); ?>) <br /> <?=gettext('built on')?> <?php readfile("/etc/version.buildtime"); ?> @@ -242,9 +242,12 @@ $filesystems = get_mounted_filesystems(); <tr> <th><?=gettext("Temperature");?></th> <td> - <?php $TempMeter = $temp = get_temp(); ?> - <div id="tempPB"></div> - <span id="tempmeter"><?= $temp."°C"; ?></span> + <?php $temp_deg_c = get_temp(); ?> + <div class="progress"> + <div id="tempPB" class="progress-bar progress-bar-striped" role="progressbar" aria-valuenow="<?=$temp_deg_c?>" aria-valuemin="0" aria-valuemax="100" style="width: <?=$temp_deg_c?>%"> + </div> + </div> + <span id="tempmeter"><?= $temp_deg_c . "°C"; ?></span> </td> </tr> <?php endif; ?> @@ -399,7 +402,7 @@ function updateMemory(x) { function updateMbuf(x) { if ($('#mbuf')) { - $("#mbuf").html(x); + $("#mbuf").html('(' + x + ')'); } } @@ -429,10 +432,10 @@ function updateCPU(x) { function updateTemp(x) { if ($("#tempmeter")) { - $("#tempmeter").html(x + '\u00B0' + 'C'); + $("#tempmeter").html(x + '°' + 'C'); } if ($('#tempPB')) { - $("#tempPB").progressbar( { value: parseInt(x) } ); + setProgress('tempPB', parseInt(x)); } } diff --git a/src/usr/local/www/wizards/setup_wizard.xml b/src/usr/local/www/wizards/setup_wizard.xml index 5abcab5..59253eb 100644 --- a/src/usr/local/www/wizards/setup_wizard.xml +++ b/src/usr/local/www/wizards/setup_wizard.xml @@ -74,7 +74,7 @@ <id>2</id> <title>Bling your pfSense with pfSense Gold</title> <disableheader>true</disableheader> - <description>Feel the power of a pfSense Gold subscription. Receive special benefits while supporting ongoing development of the Open Source pfSense project.<br/> <br/> Benefits include access to our AutoConfigBackup secure cloud based backup service for up to 10 hosts, pre-publication access to the updated pfSense: The Definitive Guide book in PDF, fully updated for the pfSense 2.1 release, and a monthly online MeetUp! Video conference to discuss and demonstrate advanced features and architectures using pfSense. <br/> <br/> Go to <a href="https://www.pfsense.org/gold" target="_blank"> pfSense Gold Subscriptions</a> to sign up now <br/> <br/> </description> + <description>Feel the power of a pfSense Gold subscription. Receive special benefits while supporting ongoing development of the Open Source pfSense project.<br/> <br/> Benefits include access to our AutoConfigBackup secure cloud based backup service for up to 10 hosts, pre-publication access to the updated pfSense: The Definitive Guide book in PDF, fully updated for the pfSense 2.1 release, and a monthly online MeetUp! Video conference to discuss and demonstrate advanced features and architectures using pfSense. <br/> <br/> Go to <a href="https://www.pfsense.org/gold" target="_blank"> pfSense Gold Subscriptions</a> to sign up now. <br/> <br/> </description> <fields> <field> <name>Next</name> @@ -589,8 +589,9 @@ $_POST['ipaddress'] = $_POST['selectedtype']; $config['interfaces']['wan']['ipaddr'] = $_POST['selectedtype']; write_config(); - if(!$config['interfaces']['lan']) - header("Location: /wizard.php?xml=setup_wizard.xml&stepid=6&next=Next"); + } + if(!$config['interfaces']['lan']) { + header("Location: /wizard.php?xml=setup_wizard.xml&stepid=6&next=Next"); } ]]> </stepsubmitbeforesave> @@ -789,10 +790,10 @@ </stepbeforeformdisplay> <description> <![CDATA[ - Congratulations! pfSense is now configured.<p/> - Please consider contributing back to the project!<p/> - Click <a target='_new' href='https://www.pfsense.org/get-involved/index.html'>here</a> to purchase services offered by the pfSense team and find other ways to contribute.<p/> - Click <a href='$myurl'>here</a> to continue on to pfSense webConfigurator. + Congratulations! pfSense is now configured.<p> + Please consider contributing back to the project!</p><p> + Click <a target='_blank' href='https://www.pfsense.org/get-involved/index.html'>here</a> to purchase services offered by the pfSense team and find other ways to contribute.</p><p> + Click <a href='$myurl'>here</a> to continue on to pfSense webConfigurator.</p> ]]> </description> </step> |