commit c8bb92627b517ca3076c29faf1398310f79ebdba
Author: Simeon Keske <git@n0emis.eu>
Date:   Wed Jul 22 22:06:45 2020 +0200

    initial commit

diff --git a/bin/ash b/bin/ash
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/ash
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/board_detect b/bin/board_detect
new file mode 100755
index 0000000..ee04b9e
--- /dev/null
+++ b/bin/board_detect
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+[ -d "/etc/board.d/" -a ! -f "/etc/board.json" ] && {
+	for a in `ls /etc/board.d/*`; do
+		[ -x $a ] || continue;
+		$(. $a)
+	done
+}
+
+[ -f "/etc/board.json" ] || return 1
+[ -f "/etc/config/network" ] || {
+	touch /etc/config/network
+	/bin/config_generate
+}
diff --git a/bin/busybox b/bin/busybox
new file mode 100755
index 0000000..d8f32bb
Binary files /dev/null and b/bin/busybox differ
diff --git a/bin/cat b/bin/cat
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/cat
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/chgrp b/bin/chgrp
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/chgrp
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/chmod b/bin/chmod
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/chmod
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/chown b/bin/chown
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/chown
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/config_generate b/bin/config_generate
new file mode 100755
index 0000000..7bec566
--- /dev/null
+++ b/bin/config_generate
@@ -0,0 +1,172 @@
+#!/bin/sh
+
+CFG=/etc/board.json
+
+. /usr/share/libubox/jshn.sh
+
+[ -f $CFG ] || exit 1
+
+generate_static_network() {
+	uci -q batch <<EOF
+delete network.loopback
+set network.loopback='interface'
+set network.loopback.ifname='lo'
+set network.loopback.proto='static'
+set network.loopback.ipaddr='127.0.0.1'
+set network.loopback.netmask='255.0.0.0'
+delete network.globals
+set network.globals='globals'
+set network.globals.ula_prefix='auto'
+EOF
+}
+
+next_vlan=3
+generate_network() {
+	local vlan
+
+	json_select network
+	json_select $1
+	json_get_vars ifname create_vlan macaddr
+	json_select ..
+	json_select ..
+
+	[ -n "$ifname" ] || return
+	[ "$create_vlan" -eq 1 ] && case $1 in
+	lan) vlan=1;;
+	wan) vlan=2;;
+	*)
+		vlan=$next_vlan
+		next_vlan=$((next_vlan + 1))
+		;;
+	esac
+	[ -n "$vlan" ] && ifname=${ifname}.${vlan}
+	uci -q batch <<EOF
+delete network.$1
+set network.$1='interface'
+set network.$1.ifname='$ifname'
+set network.$1.force_link=1
+set network.$1.proto='none'
+set network.$1.macaddr='$macaddr'
+EOF
+
+	case $1 in
+	lan) uci -q batch <<EOF
+set network.$1.type='bridge'
+set network.$1.proto='static'
+set network.$1.ipaddr='192.168.1.1'
+set network.$1.netmask='255.255.255.0'
+set network.$1.ip6assign='60'
+EOF
+		;;
+	wan) uci -q batch <<EOF
+set network.$1.proto='dhcp'
+delete network.wan6
+set network.wan6='interface'
+set network.wan6.ifname='$ifname'
+set network.wan6.proto='dhcpv6'
+EOF
+		;;
+	esac
+}
+
+generate_switch_vlan() {
+	local device=$1
+	local vlan=$2
+	local cpu_port=$3
+
+	case $vlan in
+	lan)	vlan=1;;
+	wan)	vlan=2;;
+	*)	vlan=${vlan##vlan};;
+	esac
+
+	json_select vlans
+	json_select $2
+	json_get_values ports
+	json_select ..
+	json_select ..
+
+	uci -q batch <<EOF
+add network switch_vlan
+set network.@switch_vlan[-1].device='$device'
+set network.@switch_vlan[-1].vlan='$vlan'
+set network.@switch_vlan[-1].ports='$ports ${cpu_port}t'
+EOF
+}
+
+generate_switch() {
+	local key=$1
+	local vlans
+
+	json_select switch
+	json_select $key
+	json_get_vars enable reset blinkrate cpu_port
+
+	uci -q batch <<EOF
+add network switch
+set network.@switch[-1].name='$key'
+set network.@switch[-1].reset='$reset'
+set network.@switch[-1].enable_vlan='$enable'
+set network.@switch[-1].blinkrate='$blinkrate'
+EOF
+	[ -n "$cpu_port" ] && {
+		json_get_keys vlans vlans
+		for vlan in $vlans; do generate_switch_vlan $1 $vlan $cpu_port; done
+	}
+	json_select ..
+	json_select ..
+}
+
+generate_led() {
+	local key=$1
+	local cfg="led_$key"
+
+	json_select led
+	json_select $key
+	json_get_vars name sysfs type trigger device interface default
+	json_select ..
+	json_select ..
+
+	uci -q batch <<EOF
+delete system.$cfg
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.dev='$device'
+set system.$cfg.trigger='$trigger'
+set system.$cfg.port_mask='$port_mask'
+set system.$cfg.default='$default'
+EOF
+	case $type in
+	netdev)
+		uci -q batch <<EOF
+set system.$cfg.trigger='netdev'
+set system.$cfg.mode='link tx rx'
+EOF
+	;;
+
+	usb)
+		uci -q batch <<EOF
+set system.$cfg.trigger='usbdev'
+set system.$cfg.interval='50'
+EOF
+	;;
+
+	esac
+}
+
+json_init
+json_load "$(cat ${CFG})"
+
+generate_static_network
+
+json_get_keys keys network
+for key in $keys; do generate_network $key; done
+
+json_get_keys keys switch
+for key in $keys; do generate_switch $key; done
+
+json_get_keys keys led
+for key in $keys; do generate_led $key; done
+
+uci commit
diff --git a/bin/cp b/bin/cp
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/cp
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/date b/bin/date
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/date
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/dd b/bin/dd
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/dd
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/df b/bin/df
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/df
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/dmesg b/bin/dmesg
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/dmesg
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/echo b/bin/echo
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/echo
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/egrep b/bin/egrep
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/egrep
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/false b/bin/false
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/false
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/fgrep b/bin/fgrep
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/fgrep
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/fsync b/bin/fsync
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/fsync
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/grep b/bin/grep
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/grep
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/gunzip b/bin/gunzip
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/gunzip
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/gzip b/bin/gzip
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/gzip
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/ipcalc.sh b/bin/ipcalc.sh
new file mode 100755
index 0000000..5d5eac3
--- /dev/null
+++ b/bin/ipcalc.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+awk -f - $* <<EOF
+function bitcount(c) {
+	c=and(rshift(c, 1),0x55555555)+and(c,0x55555555)
+	c=and(rshift(c, 2),0x33333333)+and(c,0x33333333)
+	c=and(rshift(c, 4),0x0f0f0f0f)+and(c,0x0f0f0f0f)
+	c=and(rshift(c, 8),0x00ff00ff)+and(c,0x00ff00ff)
+	c=and(rshift(c,16),0x0000ffff)+and(c,0x0000ffff)
+	return c
+}
+
+function ip2int(ip) {
+	for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x])
+	return ret
+}
+
+function int2ip(ip,ret,x) {
+	ret=and(ip,255)
+	ip=rshift(ip,8)
+	for(;x<3;ret=and(ip,255)"."ret,ip=rshift(ip,8),x++);
+	return ret
+}
+
+function compl32(v) {
+	ret=xor(v, 0xffffffff)
+	return ret
+}
+
+BEGIN {
+	slpos=index(ARGV[1],"/")
+	if (slpos == 0) {
+		ipaddr=ip2int(ARGV[1])
+		dotpos=index(ARGV[2],".")
+		if (dotpos == 0)
+			netmask=compl32(2**(32-int(ARGV[2]))-1)
+		else
+			netmask=ip2int(ARGV[2])
+	} else {
+		ipaddr=ip2int(substr(ARGV[1],0,slpos-1))
+		netmask=compl32(2**(32-int(substr(ARGV[1],slpos+1)))-1)
+		ARGV[4]=ARGV[3]
+		ARGV[3]=ARGV[2]
+	}
+
+	network=and(ipaddr,netmask)
+	broadcast=or(network,compl32(netmask))
+
+	start=or(network,and(ip2int(ARGV[3]),compl32(netmask)))
+	limit=network+1
+	if (start<limit) start=limit
+
+	end=start+ARGV[4]
+	limit=or(network,compl32(netmask))-1
+	if (end>limit) end=limit
+
+	print "IP="int2ip(ipaddr)
+	print "NETMASK="int2ip(netmask)
+	print "BROADCAST="int2ip(broadcast)
+	print "NETWORK="int2ip(network)
+	print "PREFIX="32-bitcount(compl32(netmask))
+
+	# range calculations:
+	# ipcalc <ip> <netmask> <start> <num>
+
+	if (ARGC > 3) {
+		print "START="int2ip(start)
+		print "END="int2ip(end)
+	}
+}
+EOF
diff --git a/bin/kill b/bin/kill
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/kill
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/ln b/bin/ln
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/ln
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/lock b/bin/lock
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/lock
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/login.sh b/bin/login.sh
new file mode 100755
index 0000000..754d290
--- /dev/null
+++ b/bin/login.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Copyright (C) 2006-2011 OpenWrt.org
+
+if ( ! grep -qsE '^root:[!x]?:' /etc/shadow || \
+     ! grep -qsE '^root:[!x]?:' /etc/passwd ) && \
+   [ -z "$FAILSAFE" ]
+then
+	echo "Login failed."
+	exit 0
+else
+cat << EOF
+ === IMPORTANT ============================
+  Use 'passwd' to set your login password!
+ ------------------------------------------
+EOF
+fi
+
+exec /bin/ash --login
diff --git a/bin/ls b/bin/ls
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/ls
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/mkdir b/bin/mkdir
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/mkdir
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/mknod b/bin/mknod
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/mknod
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/mktemp b/bin/mktemp
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/mktemp
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/mount b/bin/mount
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/mount
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/mv b/bin/mv
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/mv
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/net-snmp-config b/bin/net-snmp-config
new file mode 100755
index 0000000..e71f2cf
--- /dev/null
+++ b/bin/net-snmp-config
@@ -0,0 +1,700 @@
+#!/bin/sh
+#
+# $Id$
+#
+# this shell script is designed to merely dump the configuration
+# information about how the net-snmp package was compiled.  The
+# information is particularly useful for applications that need to
+# link against the net-snmp libraries and hence must know about any
+# other libraries that must be linked in as well.
+
+check_build_dir()
+{
+      build_dir=$1
+
+      if test "x$build_dir" = "x" ; then
+         echo "You must specify a build directory."
+         exit 1
+      fi
+      # is it the src dir?
+      if test -f $build_dir/net-snmp-config.in ; then
+         return
+      fi
+      # make sure we can find build dir
+      if test ! -d $build_dir/snmplib/.libs ; then
+         echo "$build_dir does not appear to be a build directory."
+         exit 1
+      fi
+}
+
+# usage: index n arguments
+# effect: returns the (n+1)th argument
+index()
+{
+    eval echo \$`expr $1 + 1`
+}
+
+# usage: count arguments
+# effect: returns the number of arguments
+count()
+{
+    echo $#
+}
+
+prefix=/usr
+exec_prefix=/usr
+includedir=${prefix}/include
+libdir=${exec_prefix}/lib
+datarootdir=${prefix}/share
+NSC_LDFLAGS="-L/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/usr/lib -L/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/lib -L/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/usr/lib -L/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/lib -L/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/usr/lib "
+
+NSC_LIBS="-lm "
+NSC_LNETSNMPLIBS=""
+NSC_LAGENTLIBS=" "
+NSC_LMIBLIBS="-ldl "
+
+NSC_INCLUDEDIR=${includedir}
+NSC_LIBDIR=-L${libdir}
+
+NSC_SNMPLIBS="-lnetsnmp ${NSC_LNETSNMPLIBS}"
+NSC_SUBAGENTLIBS="-lnetsnmpagent ${NSC_LAGENTLIBS} ${NSC_SNMPLIBS}"
+NSC_AGENTLIBS="-lnetsnmpmibs ${NSC_LMIBLIBS} ${NSC_SUBAGENTLIBS}"
+
+NSC_PREFIX=$prefix
+NSC_EXEC_PREFIX=$exec_prefix
+NSC_SRCDIR=.
+NSC_INCDIR=${NSC_PREFIX}/include
+
+NSC_BASE_SNMP_LIBS="-lnetsnmp"
+NSC_BASE_SUBAGENT_LIBS="-lnetsnmpagent ${NSC_BASE_SNMP_LIBS}"
+NSC_BASE_AGENT_LIBS="-lnetsnmpmibs ${NSC_BASE_SUBAGENT_LIBS}"
+
+NSC_SRC_LIBDIRS="agent/.libs snmplib/.libs"
+NSC_SRC_LIBDEPS="agent/.libs/libnetsnmpmibs.a agent/.libs/libnetsnmpagent.a snmplib/.libs/libnetsnmp.a"
+
+if test "x$NSC_SRCDIR" = "x." ; then
+   NSC_SRCDIR="NET-SNMP-SOURCE-DIR"
+fi
+
+if test "x$1" = "x"; then
+  usage="yes"
+else
+  while test "x$done" = "x" -a "x$1" != "x" -a "x$usage" != "xyes"; do
+  case "$1" in
+    -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+    *) optarg= ;;
+  esac
+
+  unset shifted
+  case $1 in
+    --prefix=*)
+      prefix=$optarg
+      NSC_PREFIX=${prefix}
+      NSC_INCLUDEDIR=${prefix}/include
+      NSC_LIBDIR=-L${prefix}/lib
+      ;;
+
+    --exec-prefix=*)
+      exec_prefix=$optarg
+      NSC_EXEC_PREFIX=${exec_prefix}
+      NSC_LIBDIR=-L${exec_prefix}/lib
+      ;;
+
+    --debug-tokens|--deb*|--dbg*)
+      echo "find $NSC_SRCDIR -name \"*.c\" -print | xargs grep DEBUGMSGT | grep \\\" | cut -f 2 -d\\\" | sort -u"
+      if test "x$NSC_SRCDIR" != "xNET-SNMP-SOURCE-DIR" ; then
+        /usr/bin/find $NSC_SRCDIR -name "*.c" -print | xargs grep DEBUGMSGT | grep \" | cut -f 2 -d\" | sort -u
+      fi
+      ;;
+    --indent-options|--in*)
+      echo "indent -orig -nbc -bap -nut -nfca `(cd $NSC_INCDIR/net-snmp; perl -n -e 'print "-T $1 " if (/}\s*(netsnmp_\w+)\s*;/);' */*.h)`"
+      ;;
+    --configure-options|--con*)
+      echo " '--target=mips-openwrt-linux' '--host=mips-openwrt-linux' '--build=x86_64-linux-gnu' '--program-prefix=' '--program-suffix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--libexecdir=/usr/lib' '--sysconfdir=/etc' '--datadir=/usr/share' '--localstatedir=/var' '--mandir=/usr/man' '--infodir=/usr/info' '--disable-nls' '--enable-mfd-rewrites' '--enable-shared' '--enable-static' '--with-endianness=big' '--with-logfile=/var/log/snmpd.log' '--with-persistent-directory=/usr/lib/snmp/' '--with-default-snmp-version=1' '--with-sys-contact=root@localhost' '--with-sys-location=Unknown' '--enable-applications' '--disable-debugging' '--disable-manuals' '--disable-scripts' '--with-out-mib-modules=agent_mibs agentx disman/event disman/schedule hardware host if-mib mibII notification notification-log-mib snmpv3mibs target tcp-mib ucd_snmp udp-mib utilities ' '--with-mib-modules=host/hr_device host/hr_disk host/hr_filesys host/hr_network host/hr_partition host/hr_proc host/hr_storage host/hr_system ieee802dot11 if-mib/ifXTable mibII/at mibII/icmp mibII/ifTable mibII/ip mibII/snmp_mib mibII/sysORTable mibII/system_mib mibII/tcp mibII/udp mibII/vacm_context mibII/vacm_vars snmpv3/snmpEngine snmpv3/snmpMPDStats snmpv3/usmConf snmpv3/usmStats snmpv3/usmUser tunnel ucd-snmp/disk ucd-snmp/dlmod ucd-snmp/extensible ucd-snmp/loadave ucd-snmp/memory ucd-snmp/pass ucd-snmp/proc ucd-snmp/vmstat util_funcs utilities/execute ' '--with-out-transports=TCP TCPIPv6 Unix' '--with-transports=Callback UDP UDPIPv6' '--with-openssl=internal' '--without-libwrap' '--without-rpm' '--without-zlib' '--without-nl' '--enable-ipv6' 'build_alias=x86_64-linux-gnu' 'host_alias=mips-openwrt-linux' 'target_alias=mips-openwrt-linux' 'CC=mips-openwrt-linux-uclibc-gcc' 'CFLAGS=-Os -pipe -mno-branch-likely -mips32r2 -mtune=74kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -fpic ' 'LDFLAGS=-L/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/usr/lib -L/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/lib -L/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/usr/lib -L/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/lib -L/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/usr/lib ' 'CPPFLAGS=-I/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/usr/include -I/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/include -I/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/usr/include -I/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/include '"
+      ;;
+    --snmpd-module-list|--mod*)
+echo  host/hr_device host/hr_disk host/hr_filesys host/hr_network host/hr_partition host/hr_proc host/hr_storage host/hr_system ieee802dot11 mibII/at mibII/icmp mibII/ip mibII/snmp_mib mibII/sysORTable mibII/system_mib mibII/tcp mibII/udp mibII/vacm_context mibII/vacm_vars snmpv3/snmpEngine snmpv3/snmpMPDStats snmpv3/usmConf snmpv3/usmStats snmpv3/usmUser ucd-snmp/disk ucd-snmp/dlmod ucd-snmp/extensible ucd-snmp/loadave ucd-snmp/memory ucd-snmp/pass ucd-snmp/proc ucd-snmp/vmstat util_funcs utilities/execute if-mib/ifXTable/ifXTable mibII/kernel_linux mibII/ipAddr mibII/var_route mibII/route_write mibII/updates mibII/tcpTable mibII/udpTable util_funcs/header_generic mibII/vacm_conf tunnel/tunnel util_funcs/header_simple_table ucd-snmp/pass_common hardware/cpu/cpu hardware/cpu/cpu_linux hardware/memory/hw_mem hardware/memory/memory_linux if-mib/data_access/interface if-mib/ifTable/ifTable_interface if-mib/ifTable/ifTable_data_access if-mib/ifTable/ifTable if-mib/ifXTable/ifXTable_interface if-mib/ifXTable/ifXTable_data_access if-mib/data_access/interface_linux if-mib/data_access/interface_ioctl ip-mib/data_access/ipaddress_common ip-mib/data_access/ipaddress_linux ip-mib/data_access/ipaddress_ioctl
+      ;;
+    --default-mibs|--mibs|--MIBS)
+      echo :SNMPv2-MIB:IF-MIB:IP-MIB:TCP-MIB:UDP-MIB:HOST-RESOURCES-MIB:NOTIFICATION-LOG-MIB:DISMAN-EVENT-MIB:DISMAN-SCHEDULE-MIB:SNMP-VIEW-BASED-ACM-MIB:SNMP-COMMUNITY-MIB:SNMP-FRAMEWORK-MIB:SNMP-MPD-MIB:SNMP-USER-BASED-SM-MIB:TUNNEL-MIB:IPV6-FLOW-LABEL-MIB:UCD-DLMOD-MIB:NET-SNMP-PASS-MIB
+      ;;
+    --default-mibdirs|--mibdirs|--MIBDIRS)
+      echo $HOME/.snmp/mibs:/usr/share/snmp/mibs
+      ;;
+    --env-separator)
+      echo ":"
+      ;;
+    --exeext)
+      echo ""
+      ;;
+    --snmpconfpath|--SNMPCONFPATH)
+      echo "/etc/snmp:/usr/share/snmp:/usr/lib/snmp:$HOME/.snmp:/usr/lib/snmp/"
+      ;;
+    --persistent-directory|--persistent-dir)
+      echo /usr/lib/snmp/
+      ;;
+    --perlprog|--perl)
+      echo /mnt/src/qsdk/staging_dir/host/bin/perl
+      ;;
+    #################################################### compile
+    --base-cflags)
+      echo -DNETSNMP_ENABLE_IPV6 -fno-strict-aliasing -Os -pipe -mno-branch-likely -mips32r2 -mtune=74kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -fpic  -Ulinux -Dlinux=linux -I/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/usr/include -I/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/include -I/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/usr/include -I/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/include  -I${NSC_INCLUDEDIR}
+      ;;
+    --cflags|--cf*)
+      echo -DNETSNMP_ENABLE_IPV6 -fno-strict-aliasing -Os -pipe -mno-branch-likely -mips32r2 -mtune=74kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -fpic  -Ulinux -Dlinux=linux  -I/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/usr/include -I/mnt/src/qsdk/staging_dir/target-mips_74kc_uClibc-1.0.14/include -I/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/usr/include -I/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/include  -I. -I${NSC_INCLUDEDIR}
+      ;;
+    --srcdir)
+      echo $NSC_SRCDIR
+      ;;
+    #################################################### linking
+    --libdir|--lib-dir)
+      echo $NSC_LIBDIR
+      ;;
+    --ldflags|--ld*)
+      echo $NSC_LDFLAGS
+      ;;
+    --build-lib-dirs)
+      shift
+      build_dir=$1
+      check_build_dir $build_dir
+      for dir in $NSC_SRC_LIBDIRS; do
+          result="$result -L$build_dir/$dir"
+      done
+      echo $result
+      ;;
+    --build-lib-deps)
+      shift
+      build_dir=$1
+      check_build_dir $build_dir
+      for dir in $NSC_SRC_LIBDEPS; do
+          result="$result $build_dir/$dir"
+      done
+      echo $result
+      ;;
+    --build-includes)
+      shift
+      build_dir=$1
+      check_build_dir $build_dir
+      result="-I$build_dir/include"
+      if test "$build_dir" != "$NSC_SRCDIR" -a "$NSC_SRCDIR" != "NET-SNMP-SOURCE-DIR"
+      then
+          result="$result -I$NSC_SRCDIR/include"
+      fi
+      echo $result
+      ;;
+    --build-command)
+      echo "mips-openwrt-linux-uclibc-gcc -DNETSNMP_ENABLE_IPV6 -fno-strict-aliasing -Os -pipe -mno-branch-likely -mips32r2 -mtune=74kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -fpic  -Ulinux -Dlinux=linux "
+      ;;
+    #################################################### client lib
+    --libs)
+      # use this one == --netsnmp-libs + --external-libs
+      echo $NSC_LDFLAGS $NSC_LIBDIR $NSC_SNMPLIBS $NSC_LIBS
+      ;;
+    --netsnmp-libs)
+      echo $NSC_LIBDIR $NSC_BASE_SNMP_LIBS
+      ;;
+    --external-libs)
+      echo $NSC_LDFLAGS $NSC_LNETSNMPLIBS $NSC_LIBS 
+      ;;
+    #################################################### agent lib
+    --base-agent-libs)
+      echo $NSC_BASE_AGENT_LIBS
+      ;;
+    --base-subagent-libs)
+      echo $NSC_BASE_SUBAGENT_LIBS
+      ;;
+    --agent-libs)
+      # use this one == --netsnmp-agent-libs + --external-libs
+      echo $NSC_LDFLAGS $NSC_LIBDIR $NSC_AGENTLIBS $NSC_LIBS
+      ;;
+    --netsnmp-agent-libs)
+      echo $NSC_LIBDIR $NSC_BASE_AGENT_LIBS
+      ;;
+    --external-agent-libs)
+      echo $NSC_LDFLAGS $NSC_LMIBLIBS $NSC_LAGENTLIBS $NSC_LNETSNMPLIBS $NSC_LIBS
+      ;;
+    ####################################################
+    --version|--ver*)
+      echo 5.7.3
+      ;;
+    --help)
+      usage="yes"
+      ;;
+    --prefix|--pre*)
+      echo $NSC_PREFIX
+      ;;
+    --exec-prefix)
+      echo $NSC_EXEC_PREFIX
+      ;;
+    ####################################################
+    --create-snmpv3-user)
+      done=1
+      shift
+      net-snmp-create-v3-user $*
+      exit $?
+      ;;
+
+    ####################################################
+    --compile-subagent)
+      shift
+      shifted=1
+      while test "x$done" = "x" -a "x$1" != "x" ; do
+	case $1 in
+            --norm)
+	        norm=1
+	        shift
+		;;
+            --cflags)
+	        shift
+	        if test "x$1" = "x" ; then
+	            echo "You must specify the extra cflags"
+	            exit 1
+	        fi
+	        cflags=$1
+	        echo "setting extra cflags: $cflags"
+	        shift
+		;;
+            --ldflags)
+	        shift
+	        if test "x$1" = "x" ; then
+	            echo "You must specify the extra ldflags"
+	            exit 1
+	        fi
+	        ldflags=$1
+	        echo "setting extra ldflags: $ldflags"
+	        shift
+		;;
+ 	    --*)
+		echo "unknown suboption to --compile-subagent: $1"
+		exit 1
+		;;
+	    *)
+                if test "x$outname" = "x"; then
+                  outname=$1
+                  shift
+                else
+	          done=1
+                fi
+		;;
+	esac
+      done
+      tmpfile=netsnmptmp.$$.c
+      if test -f $tmpfile; then
+	echo "Ack.  Can't create $tmpfile: already exists"
+	exit 1
+      fi
+      echo "generating the temporary code file: $tmpfile"
+      rm -f $tmpfile
+      cat > $tmpfile <<EOF
+/* generated from net-snmp-config */
+#include <net-snmp/net-snmp-config.h>
+#ifdef HAVE_SIGNAL
+#include <signal.h>
+#endif /* HAVE_SIGNAL */
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+EOF
+
+    # If we were only given a single filename
+    # (and no explicit output name)
+    # then use that as the base of the output name
+    #
+    # If we weren't even given that, then bomb out
+    if test "x$1" = "x"; then
+      if test "x$outname" = "x"; then
+        echo "No MIB module codefile specified"
+        rm -f $tmpfile
+        exit 1
+      else
+        cfiles=$outname
+        outname=`basename $cfiles | sed 's/\.[co]$//'`
+        if test -f $outname.h; then
+          if grep "init_$outname" $outname.h; then
+            echo "  #include \"$outname.h\"" >> $tmpfile
+          fi
+        fi
+      fi
+    fi
+
+    # add include files
+    while test "$1" != ""; do
+      cfiles="$cfiles $1"
+      name=`basename $1 | sed 's/\.[co]$//'`
+      if test -f $name.h; then
+        if grep "init_$name" $name.h; then
+          echo "  #include \"$name.h\"" >> $tmpfile
+        fi
+      fi
+      shift
+    done
+
+      cat >> $tmpfile <<EOF
+const char *app_name = "$outname";
+static int reconfig = 0;
+
+extern int netsnmp_running;
+
+#ifdef __GNUC__
+#define UNUSED __attribute__((unused))
+#else
+#define UNUSED
+#endif
+
+RETSIGTYPE
+stop_server(UNUSED int a) {
+    netsnmp_running = 0;
+}
+
+#ifdef SIGHUP
+RETSIGTYPE
+hup_handler(int sig)
+{
+    reconfig = 1;
+    signal(SIGHUP, hup_handler);
+}
+#endif
+
+static void
+usage(const char *prog)
+{
+    fprintf(stderr,
+            "USAGE: %s [OPTIONS]\n"
+            "\n"
+            "OPTIONS:\n", prog);
+
+    fprintf(stderr,
+            "  -d\t\t\tdump all traffic\n"
+            "  -D TOKEN[,...]\tturn on debugging output for the specified "
+            "TOKENs\n"
+            "\t\t\t   (ALL gives extremely verbose debugging output)\n"
+            "  -f\t\t\tDo not fork() from the calling shell.\n"
+            "  -h\t\t\tdisplay this help message\n"
+            "  -H\t\t\tdisplay a list of configuration file directives\n"
+            "  -L LOGOPTS\t\tToggle various defaults controlling logging:\n");
+    snmp_log_options_usage("\t\t\t  ", stderr);
+#ifndef DISABLE_MIB_LOADING
+    fprintf(stderr,
+            "  -m MIB[" ENV_SEPARATOR "...]\t\tload given list of MIBs (ALL loads "
+            "everything)\n"
+            "  -M DIR[" ENV_SEPARATOR "...]\t\tlook in given list of directories for MIBs\n");
+#endif /* DISABLE_MIB_LOADING */
+#ifndef DISABLE_MIB_LOADING
+    fprintf(stderr,
+            "  -P MIBOPTS\t\tToggle various defaults controlling mib "
+            "parsing:\n");
+    snmp_mib_toggle_options_usage("\t\t\t  ", stderr);
+#endif /* DISABLE_MIB_LOADING */
+    fprintf(stderr,
+            "  -v\t\t\tdisplay package version number\n"
+            "  -x TRANSPORT\tconnect to master agent using TRANSPORT\n");
+    exit(1);
+}
+
+static void
+version(void)
+{
+    fprintf(stderr, "NET-SNMP version: %s\n", netsnmp_get_version());
+    exit(0);
+}
+
+int
+main (int argc, char **argv)
+{
+  int arg;
+  char* cp = NULL;
+  int dont_fork = 0, do_help = 0;
+
+  while ((arg = getopt(argc, argv, "dD:fhHL:"
+#ifndef DISABLE_MIB_LOADING
+                       "m:M:"
+#endif /* DISABLE_MIB_LOADING */
+                       "n:"
+#ifndef DISABLE_MIB_LOADING
+                       "P:"
+#endif /* DISABLE_MIB_LOADING */
+                       "vx:")) != EOF) {
+    switch (arg) {
+    case 'd':
+      netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID,
+                             NETSNMP_DS_LIB_DUMP_PACKET, 1);
+      break;
+
+    case 'D':
+      debug_register_tokens(optarg);
+      snmp_set_do_debugging(1);
+      break;
+
+    case 'f':
+      dont_fork = 1;
+      break;
+
+    case 'h':
+      usage(argv[0]);
+      break;
+
+    case 'H':
+      do_help = 1;
+      break;
+
+    case 'L':
+      if (snmp_log_options(optarg, argc, argv) < 0) {
+        exit(1);
+      }
+      break;
+
+#ifndef DISABLE_MIB_LOADING
+    case 'm':
+      if (optarg != NULL) {
+        setenv("MIBS", optarg, 1);
+      } else {
+        usage(argv[0]);
+      }
+      break;
+
+    case 'M':
+      if (optarg != NULL) {
+        setenv("MIBDIRS", optarg, 1);
+      } else {
+        usage(argv[0]);
+      }
+      break;
+#endif /* DISABLE_MIB_LOADING */
+
+    case 'n':
+      if (optarg != NULL) {
+        app_name = optarg;
+        netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID,
+                              NETSNMP_DS_LIB_APPTYPE, app_name);
+      } else {
+        usage(argv[0]);
+      }
+      break;
+
+#ifndef DISABLE_MIB_LOADING
+    case 'P':
+      cp = snmp_mib_toggle_options(optarg);
+      if (cp != NULL) {
+        fprintf(stderr, "Unknown parser option to -P: %c.\n", *cp);
+        usage(argv[0]);
+      }
+      break;
+#endif /* DISABLE_MIB_LOADING */
+
+    case 'v':
+      version();
+      break;
+
+    case 'x':
+      if (optarg != NULL) {
+        netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+                              NETSNMP_DS_AGENT_X_SOCKET, optarg);
+      } else {
+        usage(argv[0]);
+      }
+      break;
+
+    default:
+      fprintf(stderr, "invalid option: -%c\n", arg);
+      usage(argv[0]);
+      break;
+    }
+  }
+
+  if (do_help) {
+    netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
+                           NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
+  } else {
+    /* we are a subagent */
+    netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
+                           NETSNMP_DS_AGENT_ROLE, 1);
+
+    if (!dont_fork) {
+      if (netsnmp_daemonize(1, snmp_stderrlog_status()) != 0)
+        exit(1);
+    }
+
+    /* initialize tcpip, if necessary */
+    SOCK_STARTUP;
+  }
+
+  /* initialize the agent library */
+  init_agent(app_name);
+
+  /* initialize your mib code here */
+EOF
+
+    # add init routines
+    for i in $cfiles ; do
+      name=`basename $i | sed 's/\.[co]$//'`
+      echo checking for init_$name in $i
+      if grep "init_$name" $i ; then
+        echo "  init_${name}();" >> $tmpfile
+      fi
+    done
+
+    # handle the main loop
+    cat >> $tmpfile <<EOF
+
+  /* $outname will be used to read $outname.conf files. */
+  init_snmp("$outname");
+
+  if (do_help) {
+    fprintf(stderr, "Configuration directives understood:\n");
+    read_config_print_usage("  ");
+    exit(0);
+  }
+
+  /* In case we received a request to stop (kill -TERM or kill -INT) */
+  netsnmp_running = 1;
+#ifdef SIGTERM
+  signal(SIGTERM, stop_server);
+#endif
+#ifdef SIGINT
+  signal(SIGINT, stop_server);
+#endif
+#ifdef SIGHUP
+  signal(SIGHUP, hup_handler);
+#endif
+
+  /* main loop here... */
+  while(netsnmp_running) {
+    if (reconfig) {
+      free_config();
+      read_configs();
+      reconfig = 0;
+    }
+    agent_check_and_process(1);
+  }
+
+  /* at shutdown time */
+  snmp_shutdown(app_name);
+
+  /* deinitialize your mib code here */
+EOF
+
+    # add shutdown routines
+
+    i=`count $cfiles`
+    while [ $i -gt 0 ] ; do
+      fullname=`index $i $cfiles`
+      name=`basename $fullname | sed 's/\.[co]$//'`
+      echo checking for shutdown_$name in $fullname
+      if grep "shutdown_$name" $fullname ; then
+        echo "  shutdown_${name}();" >> $tmpfile
+      fi
+      i=`expr $i - 1`
+    done
+
+    # finish file
+    cat >> $tmpfile <<EOF
+
+  /* shutdown the agent library */
+  shutdown_agent();
+  SOCK_CLEANUP;
+  exit(0);
+}
+EOF
+      if test "$?" != 0 -o ! -f "$tmpfile" ; then
+        echo "Ack.  Can't create $tmpfile."
+	exit 1
+      fi
+      cmd="mips-openwrt-linux-uclibc-gcc $cflags -DNETSNMP_ENABLE_IPV6 -fno-strict-aliasing -Os -pipe -mno-branch-likely -mips32r2 -mtune=74kc -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -mips16 -minterlink-mips16 -fpic  -Ulinux -Dlinux=linux  -I. -I${NSC_INCLUDEDIR} -o $outname $tmpfile $cfiles $NSC_LDFLAGS $NSC_LIBDIR $NSC_BASE_AGENT_LIBS $NSC_AGENTLIBS $ldflags"
+      echo "running: $cmd"
+      `$cmd`
+      if test "x$norm" != "x1" ; then
+        echo "removing the temporary code file: $tmpfile"
+        rm -f $tmpfile
+      else
+        echo "leaving the temporary code file: $tmpfile"
+      fi
+      if test -f $outname ; then
+        echo "subagent program $outname created"
+      fi
+      ;;
+
+    *)
+      echo "unknown option $1"
+      usage="yes"
+      ;;
+  esac
+  if [ "x$shifted" = "x" ] ; then
+      shift
+  fi
+  done
+fi
+
+if test "x$usage" = "xyes"; then
+  echo ""
+  echo "Usage:"
+  echo "  net-snmp-config [--cflags] [--agent-libs] [--libs] [--version]"
+  echo "                  ... [see below for complete flag list]"
+  echo ""
+  echo "    --version         displays the net-snmp version number"
+  echo "    --indent-options  displays the indent options from the Coding Style"
+  echo "    --debug-tokens    displays a example command line to search to source"
+  echo "                      code for a list of available debug tokens"
+  echo ""
+  echo "  SNMP Setup commands:"
+  echo ""
+  echo "    --create-snmpv3-user creates a SNMPv3 user in Net-SNMP config file."
+  echo "                         See net-snmp-create-v3-user --help for list of"
+  echo "                         accepted options."
+  echo ""
+  echo "  These options produce the various compilation flags needed when"
+  echo "  building external SNMP applications:"
+  echo ""
+  echo "    --base-cflags     lists additional compilation flags needed"
+  echo "    --cflags          lists additional compilation flags needed"
+  echo "                      (includes -I. and extra developer warning flags)"
+  echo ""
+  echo "  These options produce the various link flags needed when"
+  echo "  building external SNMP applications:"
+  echo ""
+  echo "    --libs            lists libraries needed for building applications"
+  echo "    --agent-libs      lists libraries needed for building subagents"
+  echo ""
+  echo "  These options produce various link flags broken down into parts."
+  echo "  (Most of the time the simple options above should be used.)"
+  echo ""
+  echo "    --libdir              path to netsnmp libraries"
+  echo ""
+  echo "    --base-agent-libs     netsnmp specific agent libraries"
+  echo ""
+  echo "    --netsnmp-libs        netsnmp specific libraries (with path)"
+  echo "    --netsnmp-agent-libs  netsnmp specific agent libraries (with path)"
+  echo ""
+  echo "    --ldflags             link flags for external libraries"
+  echo "    --external-libs       external libraries needed by netsnmp libs"
+  echo "    --external-agent-libs external libraries needed by netsnmp agent libs"
+  echo ""
+  echo "  These options produce various link flags used when linking an"
+  echo "  external application against an uninstalled build directory."
+  echo ""
+  echo "    --build-includes      include path to build/source includes"
+  echo "    --build-lib-dirs      link path to libraries"
+  echo "    --build-lib-deps      path to libraries for dependency target"
+  echo "    --build-command       command to compile \$3... to \$2"
+  echo ""
+  echo "  Automated subagent building (produces an OUTPUTNAME binary file):"
+  echo "  [this feature has not been tested very well yet.  use at your risk.]"
+  echo ""
+  echo "    --compile-subagent OUTPUTNAME [--norm] [--cflags flags]"
+  echo "                                  [--ldflags flags] mibmodule1.c [...]]"
+  echo ""
+  echo "         --norm           leave the generated .c file around to read."
+  echo "         --cflags flags   extra cflags to use (e.g. -I...)."
+  echo "         --ldflags flags  extra ld flags to use (e.g. -L... -l...)."
+  echo ""
+  echo "  Details on how the net-snmp package was compiled:"
+  echo ""
+  echo "    --configure-options   display original configure arguments"
+  echo "    --prefix              display the installation prefix"
+  echo "    --snmpd-module-list   display the modules compiled into the agent"
+  echo "    --default-mibs        display default list of MIBs"
+  echo "    --default-mibdirs     display default list of MIB directories"
+  echo "    --snmpconfpath        display default SNMPCONFPATH"
+  echo "    --persistent-directory display default persistent directory"
+  echo "    --perlprog            display path to perl for the perl modules"
+  echo ""
+  exit
+fi  
diff --git a/bin/netmsg b/bin/netmsg
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/netmsg
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/netstat b/bin/netstat
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/netstat
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/nice b/bin/nice
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/nice
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/opkg b/bin/opkg
new file mode 100755
index 0000000..3c49a53
Binary files /dev/null and b/bin/opkg differ
diff --git a/bin/pidof b/bin/pidof
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/pidof
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/ping b/bin/ping
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/ping
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/ping6 b/bin/ping6
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/ping6
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/ps b/bin/ps
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/ps
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/pwd b/bin/pwd
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/pwd
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/rm b/bin/rm
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/rm
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/rmdir b/bin/rmdir
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/rmdir
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/run-parts b/bin/run-parts
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/run-parts
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/sed b/bin/sed
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/sed
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/sh b/bin/sh
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/sh
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/sleep b/bin/sleep
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/sleep
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/stat b/bin/stat
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/stat
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/sync b/bin/sync
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/sync
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/tar b/bin/tar
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/tar
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/touch b/bin/touch
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/touch
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/true b/bin/true
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/true
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/ubus b/bin/ubus
new file mode 100755
index 0000000..f1bfa56
Binary files /dev/null and b/bin/ubus differ
diff --git a/bin/umount b/bin/umount
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/umount
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/uname b/bin/uname
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/uname
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/usleep b/bin/usleep
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/usleep
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/vi b/bin/vi
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/vi
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/bin/zcat b/bin/zcat
new file mode 120000
index 0000000..c3fa810
--- /dev/null
+++ b/bin/zcat
@@ -0,0 +1 @@
+busybox
\ No newline at end of file
diff --git a/etc/TZ b/etc/TZ
new file mode 120000
index 0000000..b631891
--- /dev/null
+++ b/etc/TZ
@@ -0,0 +1 @@
+/tmp/TZ
\ No newline at end of file
diff --git a/etc/acfg_common.conf b/etc/acfg_common.conf
new file mode 100644
index 0000000..fab24b1
--- /dev/null
+++ b/etc/acfg_common.conf
@@ -0,0 +1,2 @@
+hostapd_ctrl_iface_dir=/var/run/hostapd/
+wpa_supp_ctrl_iface_dir=/var/run/wpa_supplicant/
diff --git a/etc/athx100.conf b/etc/athx100.conf
new file mode 100755
index 0000000..bb4653d
--- /dev/null
+++ b/etc/athx100.conf
@@ -0,0 +1,11 @@
+ap_scan=1
+ctrl_interface=/var/run/wpa_supplicant
+wps_cred_processing=1
+network={
+        ssid="Atheros XSpan Network"
+        scan_ssid=1
+        proto=WPA
+        pairwise=TKIP
+        key_mgmt=WPA-PSK
+        psk="12345678"
+}
diff --git a/etc/avahi/avahi-autoipd.action b/etc/avahi/avahi-autoipd.action
new file mode 100755
index 0000000..e79411b
--- /dev/null
+++ b/etc/avahi/avahi-autoipd.action
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# This file is part of avahi.
+#
+# avahi is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# avahi is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with avahi; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+
+set -e
+
+# Command line arguments:
+#   $1 event that happened:
+#          BIND:     Successfully claimed address
+#          CONFLICT: An IP address conflict happened
+#          UNBIND:   The IP address is no longer needed
+#          STOP:     The daemon is terminating
+#   $2 interface name
+#   $3 IP adddress
+
+PATH="$PATH:/usr/bin:/usr/sbin:/bin:/sbin"
+
+# Use a different metric for each interface, so that we can set
+# identical routes to multiple interfaces.
+
+METRIC=$((1000 + `cat "/sys/class/net/$2/ifindex" 2>/dev/null || echo 0`))
+
+if [ -n "$(type -q ip)" ] ; then
+
+    # We have the Linux ip tool from the iproute package
+
+    case "$1" in
+        BIND)
+            ip addr add "$3"/16 brd 169.254.255.255 scope link dev "$2"
+            ip route add default dev "$2" metric "$METRIC" scope link ||:
+            ;;
+
+        CONFLICT|UNBIND|STOP)
+            ip route del default dev "$2" metric "$METRIC" scope link ||:
+            ip addr del "$3"/16 brd 169.254.255.255 scope link dev "$2"
+            ;;
+
+        *)
+            echo "Unknown event $1" >&2
+            exit 1
+            ;;
+    esac
+
+else
+
+    echo "No network configuration tool found." >&2
+    exit 1
+
+fi
+
+exit 0
diff --git a/etc/avahi/avahi-daemon.conf b/etc/avahi/avahi-daemon.conf
new file mode 100644
index 0000000..3ef0788
--- /dev/null
+++ b/etc/avahi/avahi-daemon.conf
@@ -0,0 +1,28 @@
+[server]
+#host-name=foo
+#domain-name=local
+use-ipv4=yes
+use-ipv6=yes
+check-response-ttl=no
+use-iff-running=no
+
+[publish]
+publish-addresses=yes
+publish-hinfo=yes
+publish-workstation=no
+publish-domain=yes
+#publish-dns-servers=192.168.1.1
+#publish-resolv-conf-dns-servers=yes
+
+[reflector]
+enable-reflector=no
+reflect-ipv=no
+
+[rlimits]
+#rlimit-as=
+rlimit-core=0
+rlimit-data=4194304
+rlimit-fsize=0
+rlimit-nofile=30
+rlimit-stack=4194304
+rlimit-nproc=3
diff --git a/etc/avahi/services/http.service b/etc/avahi/services/http.service
new file mode 100644
index 0000000..ed26fc8
--- /dev/null
+++ b/etc/avahi/services/http.service
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+<service-group>
+ <name>...</name>
+  <service>
+   <type>_http._tcp</type>
+   <port>80</port>
+   <txt-record>path=/</txt-record>
+   <txt-record>vendorUrl=...</txt-record>
+  </service>
+</service-group>
diff --git a/etc/avahi/services/https.service b/etc/avahi/services/https.service
new file mode 100644
index 0000000..182300b
--- /dev/null
+++ b/etc/avahi/services/https.service
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+<service-group>
+ <name>...</name>
+  <service>
+   <type>_https._tcp</type>
+   <port>443</port>
+   <txt-record>path=/</txt-record>
+   <txt-record>vendorUrl=...</txt-record>
+  </service>
+</service-group>
diff --git a/etc/banner b/etc/banner
new file mode 100644
index 0000000..907939d
--- /dev/null
+++ b/etc/banner
@@ -0,0 +1,7 @@
+      _      _
+   __| | ___| | ___  ___
+  / _` |/ _ \ |/ _ \/ __|  (c) 2019 devolo AG
+ | (_| |  __/ | (_) \__ \  powered by OpenWrt 15.05.1
+  \__,_|\___|_|\___/|___/  powered by QSDK SPF 6.1
+-----------------------------------------------------
+delos 5.2.1 for ___VENDOR_NAME___ ___PRODUCT_NAME___
diff --git a/etc/banner.failsafe b/etc/banner.failsafe
new file mode 100644
index 0000000..14615e1
--- /dev/null
+++ b/etc/banner.failsafe
@@ -0,0 +1,13 @@
+================= FAILSAFE MODE active ================
+special commands:
+* firstboot	     reset settings to factory defaults
+* mount_root	 mount root-partition with config files
+
+after mount_root:
+* passwd			 change root's password
+* /etc/config		    directory with config files
+
+for more help see:
+http://wiki.openwrt.org/doc/howto/generic.failsafe
+=======================================================
+
diff --git a/etc/config/acd b/etc/config/acd
new file mode 100644
index 0000000..d40ee8f
--- /dev/null
+++ b/etc/config/acd
@@ -0,0 +1,12 @@
+config default 'config'
+	option AutoConfigEnable '0'
+	option HCSecsBetweenDHCPRequestPackets '2'
+	option HRSecsBetweenDHCPRequestPackets '3'
+	option HRSecsBetweenStateContinuityCheck '15'
+	option HRMaxTriesWaitingForDHCPResponse '3'
+	option HCMaxTxTriesBeforeGettingIPAddr '10'
+	option SecsBetweenChecksForCableConnection '5'
+	option AcdDebugLevel '1'
+	option DisableHCMode '1'
+	option DisableWDSSTAInHREMode '0'
+
diff --git a/etc/config/avahi b/etc/config/avahi
new file mode 100755
index 0000000..9a9d5e2
--- /dev/null
+++ b/etc/config/avahi
@@ -0,0 +1,2 @@
+config avahi config
+	option disabled '0'
diff --git a/etc/config/configsync b/etc/config/configsync
new file mode 100644
index 0000000..d364f93
--- /dev/null
+++ b/etc/config/configsync
@@ -0,0 +1,8 @@
+config configsync 'global'
+       option enabled    '1'
+       option logging    '0'
+       option startdelay '0'
+       option extensiondelay '20'
+       option eventdelay '10'
+       option configured '0'
+
diff --git a/etc/config/customization b/etc/config/customization
new file mode 100644
index 0000000..e8d7066
--- /dev/null
+++ b/etc/config/customization
@@ -0,0 +1,6 @@
+config config 'config'
+    option active_variant ''
+
+config info 'info'
+    option vendor_name ''
+    option product_name ''
diff --git a/etc/config/delos b/etc/config/delos
new file mode 100644
index 0000000..e69de29
diff --git a/etc/config/delos-private b/etc/config/delos-private
new file mode 100644
index 0000000..e69de29
diff --git a/etc/config/dlanApp2Backend b/etc/config/dlanApp2Backend
new file mode 100644
index 0000000..8669677
--- /dev/null
+++ b/etc/config/dlanApp2Backend
@@ -0,0 +1,6 @@
+config dlanApp2Backend 'global'
+       option enabled         '1'
+       option http_realm      'devolo-api'
+       option http_username   'devolo'
+       option http_password   ''
+       option http_ha1        ''
diff --git a/etc/config/dmmap b/etc/config/dmmap
new file mode 100644
index 0000000..e69de29
diff --git a/etc/config/dropbear b/etc/config/dropbear
new file mode 100644
index 0000000..2139ba0
--- /dev/null
+++ b/etc/config/dropbear
@@ -0,0 +1,5 @@
+config dropbear
+	option PasswordAuth 'on'
+	option RootPasswordAuth 'on'
+	option Port         '22'
+#	option BannerFile   '/etc/banner'
diff --git a/etc/config/easycwmp b/etc/config/easycwmp
new file mode 100644
index 0000000..06aa05b
--- /dev/null
+++ b/etc/config/easycwmp
@@ -0,0 +1,37 @@
+# easycwmp uci configuration
+
+config local
+	option disabled '0'
+	option interface lo
+	option port 7547
+	option ubus_socket /var/run/ubus.sock
+	option date_format %FT%T%z
+	option username easycwmp
+	option password easycwmp
+	option provisioning_code ''
+#basic authentication = 'Basic', Digest authentication = 'Digest', Default value = 'Digest'
+	option authentication 'Digest'
+#Logging levels: Critic=0, Warning=1, Notice=2, Info=3, Debug=4
+	option logging_level '1'
+
+config acs
+	option url 'https://bs-acs-dev.devolo.net:17457'
+	option username 'bs-acs-dev-client'
+	option password '9f5b6e971d0bc8bf219e994c1529112f'
+	option parameter_key ''
+	option periodic_enable '1'
+	option periodic_interval '300'
+	option periodic_time '0001-01-01T00:00:00Z'
+
+config device
+	option manufacturer easycwmp
+	option oui FFFFFF
+	option product_class easycwmp
+	option serial_number FFFFFF123456
+	option hardware_version example_hw_version
+	option software_version example_sw_version
+
+config instances 'instances'
+
+config next_instances 'next_instances'
+
diff --git a/etc/config/firewall b/etc/config/firewall
new file mode 100644
index 0000000..c0457e0
--- /dev/null
+++ b/etc/config/firewall
@@ -0,0 +1,196 @@
+config defaults
+	option syn_flood	1
+	option input		ACCEPT
+	option output		ACCEPT
+	option forward		REJECT
+# Uncomment this line to disable ipv6 rules
+#	option disable_ipv6	1
+	option disabled	0
+
+config zone
+	option name		lan
+	list   network		'lan'
+	option input		ACCEPT
+	option output		ACCEPT
+	option forward		ACCEPT
+
+config zone
+	option name		wan
+	list   network		'wan'
+	list   network		'wan6'
+	option input		REJECT
+	option output		ACCEPT
+	option forward		REJECT
+	option masq		1
+	option mtu_fix		1
+
+config forwarding
+	option src		lan
+	option dest		wan
+
+# We need to accept udp packets on port 68,
+# see https://dev.openwrt.org/ticket/4108
+config rule
+	option name		Allow-DHCP-Renew
+	option src		wan
+	option proto		udp
+	option dest_port	68
+	option target		ACCEPT
+	option family		ipv4
+
+# Allow IPv4 ping
+config rule
+	option name		Allow-Ping
+	option src		wan
+	option proto		icmp
+	option icmp_type	echo-request
+	option family		ipv4
+	option target		ACCEPT
+
+config rule
+	option name		Allow-IGMP
+	option src		wan
+	option proto		igmp
+	option family		ipv4
+	option target		ACCEPT
+
+# Allow DHCPv6 replies
+# see https://dev.openwrt.org/ticket/10381
+config rule
+	option name		Allow-DHCPv6
+	option src		wan
+	option proto		udp
+	option src_ip		fe80::/10
+	option src_port		547
+	option dest_ip		fe80::/10
+	option dest_port	546
+	option family		ipv6
+	option target		ACCEPT
+
+config rule
+	option name		Allow-MLD
+	option src		wan
+	option proto		icmp
+	option src_ip		fe80::/10
+	list icmp_type		'130/0'
+	list icmp_type		'131/0'
+	list icmp_type		'132/0'
+	list icmp_type		'143/0'
+	option family		ipv6
+	option target		ACCEPT
+
+# Allow essential incoming IPv6 ICMP traffic
+config rule
+	option name		Allow-ICMPv6-Input
+	option src		wan
+	option proto	icmp
+	list icmp_type		echo-request
+	list icmp_type		echo-reply
+	list icmp_type		destination-unreachable
+	list icmp_type		packet-too-big
+	list icmp_type		time-exceeded
+	list icmp_type		bad-header
+	list icmp_type		unknown-header-type
+	list icmp_type		router-solicitation
+	list icmp_type		neighbour-solicitation
+	list icmp_type		router-advertisement
+	list icmp_type		neighbour-advertisement
+	option limit		1000/sec
+	option family		ipv6
+	option target		ACCEPT
+
+# Allow essential forwarded IPv6 ICMP traffic
+config rule
+	option name		Allow-ICMPv6-Forward
+	option src		wan
+	option dest		*
+	option proto		icmp
+	list icmp_type		echo-request
+	list icmp_type		echo-reply
+	list icmp_type		destination-unreachable
+	list icmp_type		packet-too-big
+	list icmp_type		time-exceeded
+	list icmp_type		bad-header
+	list icmp_type		unknown-header-type
+	option limit		1000/sec
+	option family		ipv6
+	option target		ACCEPT
+
+# include a file with users custom iptables rules
+config include
+	option path /etc/firewall.user
+
+
+### EXAMPLE CONFIG SECTIONS
+# do not allow a specific ip to access wan
+#config rule
+#	option src		lan
+#	option src_ip	192.168.45.2
+#	option dest		wan
+#	option proto	tcp
+#	option target	REJECT
+
+# block a specific mac on wan
+#config rule
+#	option dest		wan
+#	option src_mac	00:11:22:33:44:66
+#	option target	REJECT
+
+# block incoming ICMP traffic on a zone
+#config rule
+#	option src		lan
+#	option proto	ICMP
+#	option target	DROP
+
+# port redirect port coming in on wan to lan
+#config redirect
+#	option src			wan
+#	option src_dport	80
+#	option dest			lan
+#	option dest_ip		192.168.16.235
+#	option dest_port	80
+#	option proto		tcp
+
+# port redirect of remapped ssh port (22001) on wan
+#config redirect
+#	option src		wan
+#	option src_dport	22001
+#	option dest		lan
+#	option dest_port	22
+#	option proto		tcp
+
+# allow IPsec/ESP and ISAKMP passthrough
+config rule
+	option src		wan
+	option dest		lan
+	option proto		esp
+	option target		ACCEPT
+
+config rule
+	option src		wan
+	option dest		lan
+	option dest_port	500
+	option proto		udp
+	option target		ACCEPT
+
+### FULL CONFIG SECTIONS
+#config rule
+#	option src		lan
+#	option src_ip	192.168.45.2
+#	option src_mac	00:11:22:33:44:55
+#	option src_port	80
+#	option dest		wan
+#	option dest_ip	194.25.2.129
+#	option dest_port	120
+#	option proto	tcp
+#	option target	REJECT
+
+#config redirect
+#	option src		lan
+#	option src_ip	192.168.45.2
+#	option src_mac	00:11:22:33:44:55
+#	option src_port		1024
+#	option src_dport	80
+#	option dest_ip	194.25.2.129
+#	option dest_port	120
+#	option proto	tcp
diff --git a/etc/config/fwknopd b/etc/config/fwknopd
new file mode 100644
index 0000000..05e9a66
--- /dev/null
+++ b/etc/config/fwknopd
@@ -0,0 +1,17 @@
+config global
+	option uci_enabled '1'
+
+config network
+
+config access
+	option SOURCE 'ANY'
+	option REQUIRE_SOURCE_ADDRESS 'N'
+	option FW_ACCESS_TIMEOUT '300'
+	option CMD_CYCLE_OPEN  '/usr/share/delos-fwknopd/cmd.sh open $PORT'
+	option CMD_CYCLE_CLOSE '/usr/share/delos-fwknopd/cmd.sh close $PORT'
+	option CMD_CYCLE_TIMER '10'
+
+config config
+	option PCAP_INTF 'br-lan'
+	option ENABLE_SPA_PACKET_AGING N
+
diff --git a/etc/config/hyd b/etc/config/hyd
new file mode 100644
index 0000000..ee2360d
--- /dev/null
+++ b/etc/config/hyd
@@ -0,0 +1,164 @@
+config config 'config'
+	option Enable 				'0'
+	option cfg80211_enable 			'0'
+	option SwitchInterface			'auto'
+	option SwitchLanVid			'1'
+	option Control				'manual'
+	option DisableSteering			'0'
+
+config hy 'hy'
+	option LoadBalancingSeamless 		'1'
+	option ConstrainTCPMedium 		'0'
+	option MaxLBReordTimeout 		'1500'
+	option HActiveMaxAge			'120000'
+	option ForwardingMode			'APS'
+
+config Wlan 'Wlan'
+	option WlanCheckFreqInterval '10'
+	option WlanALDNLNumOverride  '0'
+
+config Vlanid
+	option ifname 'eth1'
+	option vid '1'
+
+config Vlanid
+	option ifname 'eth0'
+	option vid '2'
+
+config PathChWlan 'PathChWlan'
+	option UpdatedStatsInterval_W2 '1'
+	option StatsAgedOutInterval_W2 '30'
+	option MaxMediumUtilization_W2 '70'
+	option MediumChangeThreshold_W2 '10'
+	option LinkChangeThreshold_W2 '10'
+	option MaxMediumUtilizationForLC_W2 '70'
+	option CPULimitedTCPThroughput_W2 '0'
+	option CPULimitedUDPThroughput_W2 '0'
+	option PHYRateThresholdForMU_W2 '2000'
+	option ProbePacketInterval_W2 '1'
+	option ProbePacketSize_W2 '64'
+	option EnableProbe_W2 '1'
+	option AssocDetectionDelay_W2 '5'
+	option UpdatedStatsInterval_W5 '1'
+	option StatsAgedOutInterval_W5 '30'
+	option MaxMediumUtilization_W5 '70'
+	option MediumChangeThreshold_W5 '10'
+	option LinkChangeThreshold_W5 '10'
+	option MaxMediumUtilizationForLC_W5 '70'
+	option CPULimitedTCPThroughput_W5 '0'
+	option CPULimitedUDPThroughput_W5 '0'
+	option PHYRateThresholdForMU_W5 '2000'
+	option ProbePacketInterval_W5 '1'
+	option ProbePacketSize_W5 '64'
+	option EnableProbe_W5 '1'
+	option AssocDetectionDelay_W5 '5'
+	option ScalingFactorHighRate_W5 '750'
+	option ScalingFactorHighRate_W2 '200'
+	option ScalingFactorLow '60'
+	option ScalingFactorMedium '85'
+	option ScalingFactorHigh '60'
+	option ScalingFactorTCP '90'
+	option UseWHCAlgorithm '1'
+	option NumUpdatesUntilStatsValid '3'
+
+config PathChPlc 'PathChPlc'
+	option MaxMediumUtilization '80'
+	option MediumChangeThreshold '10'
+	option LinkChangeThreshold '10'
+	option StatsAgedOutInterval '60'
+	option UpdateStatsInterval '1'
+	option EntryExpirationInterval '120'
+	option MaxMediumUtilizationForLC '80'
+	option LCThresholdForUnreachable '5'
+	option LCThresholdForReachable '10'
+	option HostPLCInterfaceSpeed '0'
+
+config Topology 'Topology'
+	option ND_UPDATE_INTERVAL '15'
+	option BD_UPDATE_INTERVAL '3'
+	option HOLDING_TIME '190'
+	option TIMER_LOW_BOUND '7'
+	option TIMER_UPPER_BOUND '11'
+	option MSGID_DELTA '64'
+	option HA_AGING_INTERVAL '120'
+	option ENABLE_TD3 '1'
+	option ENABLE_BD_SPOOFING '1'
+	option NOTIFICATION_THROTTLING_WINDOW '1'
+	option PERIODIC_QUERY_INTERVAL '60'
+	option ENABLE_NOTIFICATION_UNICAST '0'
+
+config HSPECEst 'HSPECEst'
+	option UpdateHSPECInterval '1'
+	option NotificationThresholdLimit '10'
+	option NotificationThresholdPercentage '20'
+	option AlphaNumerator '3'
+	option AlphaDenominator '8'
+	option LocalFlowRateThreshold '2000000'
+	option LocalFlowRatioThreshold '5'
+	option MaxHActiveEntries '8192'
+
+config PathSelect 'PathSelect'
+	option UpdateHDInterval '10'
+	option LinkCapacityThreshold '20'
+	option UDPInterfaceOrder 'EP52'
+	option NonUDPInterfaceOrder 'EP52'
+	option SerialflowIterations '10'
+	option DeltaLCThreshold '10'
+	option EnableBadLinkStatsSwitchFlow '1'
+
+config LogSettings 'LogSettings'
+	option EnableLog '0'
+	option LogRestartIntervalSec '10'
+	option LogPCSummaryPeriodSec '0'
+	option LogServerIP '192.168.1.10'
+	option LogServerPort '5555'
+	option EnableLogPCW2 '1'
+	option EnableLogPCW5 '1'
+	option EnableLogPCP '1'
+	option EnableLogTD '1'
+	option EnableLogHE '1'
+	option EnableLogHETables '1'
+	option EnableLogPS '1'
+	option EnableLogPSTables '1'
+	option LogHEThreshold1 '200000'
+	option LogHEThreshold2 '10000000'
+
+config IEEE1905Settings 'IEEE1905Settings'
+	option StrictIEEE1905Mode '0'
+	option GenerateLLDP '1'
+	option AvoidDupRenew '0'
+	option AvoidDupTopologyNotification '0'
+
+config HCPSettings 'HCPSettings'
+	option V1Compat '1'
+
+config MultiAP 'MultiAP'
+	option EnableController '0'
+	option EnableAgent '0'
+	option EnableSigmaDUT '0'
+	option ClientAssocCtrlTimeoutSec '0'
+	option ClientAssocCtrlTimeoutUsec '200000'
+	option ShortBlacklistTimeSec '2'
+	option AlwaysClearBlacklists '1'
+	option ClientSteerTimeoutSec '1'
+	option ClientSteerTimeoutUsec '0'
+	option MetricsReportingInterval '5'
+	option RSSIHysteresis_W2 '5'
+	option RSSIHysteresis_W5 '5'
+	option LoadBalancingInterval '30'
+	option EnableChannelSelection '1'
+        option MinPreferredChannelIndex '36'
+        option MaxPreferredChannelIndex '99'
+
+config SteerMsg 'SteerMsg'
+	option AvgUtilReqTimeout '1'
+	option LoadBalancingCompleteTimeout '90'
+	option RspTimeout '2'
+
+config Monitor 'Monitor'
+    option DisableMonitoringLegacyClients '1'
+    option DisableSteeringInactiveLegacyClients '1'
+    option DisableSteeringActiveLegacyClients '1'
+    option DisableSteeringMax11kUnfriendlyClients '1'
+    option MonitorTimer '60'
+    option MonitorResponseTimeout '5'
diff --git a/etc/config/lbd b/etc/config/lbd
new file mode 100644
index 0000000..8dc9b8f
--- /dev/null
+++ b/etc/config/lbd
@@ -0,0 +1,148 @@
+config config 'config'
+	option Enable                           '1'
+	option cfg80211_enable                  '0'
+	list   MatchingSSID                     ''
+	option PHYBasedPrioritization           '0'
+	option BlacklistOtherESS                '0'
+	option InactDetectionFromTx             '0'
+
+config IdleSteer 'IdleSteer'
+	option RSSISteeringPoint_DG             '5'
+	option RSSISteeringPoint_UG             '20'
+	option NormalInactTimeout               '10'
+	option OverloadInactTimeout             '10'
+	option InactCheckInterval               '1'
+	option AuthAllow                        '0'
+
+config ActiveSteer 'ActiveSteer'
+	option TxRateXingThreshold_UG           '50000'
+	option RateRSSIXingThreshold_UG         '30'
+	option TxRateXingThreshold_DG           '6000'
+	option RateRSSIXingThreshold_DG         '0'
+
+config Offload 'Offload'
+	option MUAvgPeriod                      '60'
+	option MUOverloadThreshold_W2           '70'
+	option MUOverloadThreshold_W5           '70'
+	option MUSafetyThreshold_W2             '50'
+	option MUSafetyThreshold_W5             '60'
+	option OffloadingMinRSSI                '20'
+
+config IAS 'IAS'
+	option Enable_W2                        '1'
+	option Enable_W5                        '1'
+	option MaxPollutionTime                 '1200'
+	option UseBestEffort                    '0'
+
+config StaDB 'StaDB'
+	option IncludeOutOfNetwork              '1'
+	option TrackRemoteAssoc                 '1'
+	option MarkAdvClientAsDualBand          '0'
+
+config SteerExec 'SteerExec'
+	option SteeringProhibitTime             '300'
+	option BTMSteeringProhibitShortTime     '30'
+
+config APSteer 'APSteer'
+	option LowRSSIAPSteerThreshold_SIG      '17'
+	option LowRSSIAPSteerThreshold_CAP      '20'
+	option LowRSSIAPSteerThreshold_RE       '45'
+	option APSteerToRootMinRSSIIncThreshold '5'
+	option APSteerToLeafMinRSSIIncThreshold '10'
+	option APSteerToPeerMinRSSIIncThreshold '10'
+	option DownlinkRSSIThreshold_W5         '-65'
+	option APSteerMaxRetryCount		'2'
+
+config config 'config_Adv'
+	option AgeLimit                         '5'
+
+config StaDB 'StaDB_Adv'
+	option AgingSizeThreshold               '100'
+	option AgingFrequency                   '60'
+	option OutOfNetworkMaxAge               '300'
+	option InNetworkMaxAge                  '2592000'
+	option NumNonServingBSSes               '4'
+	option PopulateNonServingPHYInfo        '1'
+	option LegacyUpgradeAllowedCnt          '0'
+	option LegacyUpgradeMonitorDur          '2100'
+	option MinAssocAgeForStatsAssocUpdate   '150'
+
+config StaMonitor 'StaMonitor_Adv'
+	option RSSIMeasureSamples_W2            '5'
+	option RSSIMeasureSamples_W5            '5'
+
+config BandMonitor 'BandMonitor_Adv'
+	option ProbeCountThreshold              '1'
+	option MUCheckInterval_W2               '10'
+	option MUCheckInterval_W5               '10'
+	option MUReportPeriod                   '30'
+	option LoadBalancingAllowedMaxPeriod    '15'
+	option NumRemoteChannels                '3'
+
+config Estimator_Adv 'Estimator_Adv'
+	option RSSIDiff_EstW5FromW2             '-15'
+	option RSSIDiff_EstW2FromW5             '5'
+	option ProbeCountThreshold              '3'
+	option StatsSampleInterval              '1'
+	option Max11kUnfriendly                 '10'
+	option 11kProhibitTimeShort             '30'
+	option 11kProhibitTimeLong              '300'
+	option PhyRateScalingForAirtime         '50'
+	option EnableContinuousThroughput       '0'
+	option BcnrptActiveDuration             '50'
+	option BcnrptPassiveDuration            '200'
+	option FastPollutionDetectBufSize       '10'
+	option NormalPollutionDetectBufSize     '10'
+	option PollutionDetectThreshold         '60'
+	option PollutionClearThreshold          '40'
+	option InterferenceAgeLimit             '15'
+	option IASLowRSSIThreshold              '12'
+	option IASMaxRateFactor                 '88'
+	option IASMinDeltaBytes                 '2000'
+	option IASMinDeltaPackets               '10'
+	option ActDetectMinInterval             '30'
+	option ActDetectMinPktPerSec            '2'
+
+config SteerExec 'SteerExec_Adv'
+	option TSteering                        '15'
+	option InitialAuthRejCoalesceTime       '2'
+	option AuthRejMax                       '3'
+	option SteeringUnfriendlyTime           '600'
+	option MaxSteeringUnfriendly            '604800'
+	option TargetLowRSSIThreshold_W2        '5'
+	option TargetLowRSSIThreshold_W5        '15'
+	option BlacklistTime                    '900'
+	option BTMResponseTime                  '10'
+	option BTMAssociationTime               '6'
+	option BTMAlsoBlacklist                 '1'
+	option BTMUnfriendlyTime                '600'
+	option MaxBTMUnfriendly                 '86400'
+	option MaxBTMActiveUnfriendly           '604800'
+	option MinRSSIBestEffort                '12'
+	option LowRSSIXingThreshold             '10'
+	option StartInBTMActiveState            '0'
+	option Delay24GProbeRSSIThreshold       '35'
+	option Delay24GProbeTimeWindow          '0'
+	option Delay24GProbeMinReqCount         '0'
+	option LegacyUpgradeUnfriendlyTime      '21600'
+
+config SteerAlg_Adv 'SteerAlg_Adv'
+	option MinTxRateIncreaseThreshold       '53'
+	option MaxSteeringTargetCount           '1'
+	option ApplyEstimatedAirTimeOnSteering  '1'
+	option UsePathCapacityToSelectBSS       '1'
+
+config DiagLog 'DiagLog'
+	option EnableLog                        '0'
+	option LogServerIP                      '192.168.1.10'
+	option LogServerPort                    '7788'
+	option LogLevelWlanIF                   '2'
+	option LogLevelBandMon                  '2'
+	option LogLevelStaDB                    '2'
+	option LogLevelSteerExec                '2'
+	option LogLevelStaMon                   '2'
+	option LogLevelEstimator                '2'
+	option LogLevelDiagLog                  '2'
+
+config Persist 'Persist'
+	option PersistPeriod			'3600'
diff --git a/etc/config/parental_control b/etc/config/parental_control
new file mode 100644
index 0000000..b2d5787
--- /dev/null
+++ b/etc/config/parental_control
@@ -0,0 +1,3 @@
+config global
+        option logging '0'
+        option enabled '0'
diff --git a/etc/config/radius b/etc/config/radius
new file mode 100644
index 0000000..4b78b29
--- /dev/null
+++ b/etc/config/radius
@@ -0,0 +1,5 @@
+config radius
+        option profile_name 'default_profile'
+        option auth_port '1812'
+        option acct_port '1813'
+
diff --git a/etc/config/repacd b/etc/config/repacd
new file mode 100644
index 0000000..b166406
--- /dev/null
+++ b/etc/config/repacd
@@ -0,0 +1,237 @@
+config config repacd
+	option Enable                           '0'
+	option cfg80211_enable                  '0'
+	option ManagedNetwork                   'lan'
+	option DeviceType                       'RE'
+	option Role                             'NonCAP'
+	option GatewayConnectedMode             'AP'
+	option ConfigREMode                     'auto'
+	option DefaultREMode                    'son'
+	option BlockDFSChannels                 '0'
+	option EnableSteering                   '1'
+	option EnableSON                        '1'
+	option ManageMCSD                       '1'
+	option LinkCheckDelay                   '2'
+	option TrafficSeparationEnabled         '0'
+	option NetworkGuest                     'guest'
+	option NetworkGuestBackhaulInterface    '2.4G'
+	option EnableEthernetMonitoring         '0'
+
+config MAPConfig 'MAPConfig'
+	option Enable                           '0'
+	option FirstConfigRequired              '1'
+	option BSSInstantiationTemplate         'scheme-a.conf'
+	option FronthaulSSID                    ''
+	option FronthaulKey                     ''
+	option BackhaulSSID                     ''
+	option BackhaulKey                      ''
+	option BackhaulSuffix                   ''
+	option StandaloneController             '0'
+
+config WiFiLink 'WiFiLink'
+	option MinAssocCheckAutoMode            '5'
+	option MinAssocCheckPostWPS             '5'
+	option MinAssocCheckPostBSSIDConfig     '5'
+	option WPSTimeout                       '180'
+	option AssociationTimeout               '300'
+	option RSSINumMeasurements              '5'
+	option RSSIThresholdFar                 '-75'
+	option RSSIThresholdNear                '-60'
+	option RSSIThresholdMin                 '-75'
+	option RSSIThresholdPrefer2GBackhaul    '-100'
+	option 2GBackhaulSwitchDownTime         '10'
+	option MaxMeasuringStateAttempts        '3'
+	option DaisyChain                       '1'
+	option RateNumMeasurements              '30'
+	option RateThresholdMin5GInPercent      '40'
+	option RateThresholdMax5GInPercent      '70'
+	option RateThresholdPrefer2GBackhaulInPercent '5'
+	option 5GBackhaulBadlinkTimeout         '60'
+	option BSSIDAssociationTimeout          '90'
+	option RateScalingFactor                '70'
+	option 5GBackhaulEvalTimeShort          '1800'
+	option 5GBackhaulEvalTimeLong           '7200'
+	option 2GBackhaulEvalTime               '1800'
+	option PreferCAPSNRThreshold5G          '0'
+	option MoveFromCAPSNRHysteresis5G       '2'
+	option 2GIndependentChannelSelectionEnable '0'
+	option 2GIndependentChannelSelectionRssiLevel '-70'
+	option 2GIndependentChannelSelectionTotalRssiCounter '10'
+	option 2GIndependentChannelSelectionRssiDebug '0'
+	option 2GIndependentChannelSelectionStartRssiCheckTime '60'
+	option ManageVAPInd                     '0'
+
+config MAPWiFiLink 'MAPWiFiLink'
+	option MinAssocCheckPostWPS             '5'
+	option WPSTimeout                       '180'
+	option AssociationTimeout               '300'
+	option RSSINumMeasurements              '5'
+	option BackhaulRSSIThreshold_2          '-78'
+	option BackhaulRSSIThreshold_5          '-78'
+	option BackhaulRSSIThreshold_offset     '10'
+	option Max5gAttempts                    '3'
+	option MaxMeasuringStateAttempts        '3'
+	option ForceBSSesDownOnAllBSTASwitches  '0'
+
+config PLCLink 'PLCLink'
+	option PLCBackhaulEvalTime              '1800'
+
+config BackhaulMgr 'BackhaulMgr'
+	option SelectOneBackHaulInterfaceInDaisy '0'
+	option BackHaulMgrRateNumMeasurements   '10'
+	option PLCLinkThresholdto2G             '60'
+	option SwitchInterfaceAfterCAPPingTimeouts '10'
+
+config FrontHaulMgr 'FrontHaulMgr'
+	option ManageFrontAndBackHaulsIndependently '0'
+	option FrontHaulMgrTimeout              '300'
+
+config LEDState 'Reset'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '0'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'NotAssociated'
+	option Name_1                           'led_0'
+	option Trigger_1                        'timer'
+	option Brightness_1                     '1'
+	option DelayOn_1                        '500'
+	option DelayOff_1                       '500'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'AutoConfigInProgress'
+	option Name_1                           'led_0'
+	option Trigger_1                        'timer'
+	option Brightness_1                     '1'
+	option DelayOn_1                        '250'
+	option DelayOff_1                       '250'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'Measuring'
+	option Name_1                           'led_0'
+	option Trigger_1                        'timer'
+	option Brightness_1                     '1'
+	option DelayOn_1                        '250'
+	option DelayOff_1                       '250'
+	option Name_2                           'led_1'
+	option Trigger_2                        'timer'
+	option Brightness_2                     '1'
+	option DelayOn_2                        '250'
+	option DelayOff_2                       '250'
+
+config LEDState 'WPSTimeout'
+	option Name_1                           'led_0'
+	option Trigger_1                        'timer'
+	option Brightness_1                     '1'
+	option DelayOn_1                        '2000'
+	option DelayOff_1                       '1000'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'AssocTimeout'
+	option Name_1                           'led_0'
+	option Trigger_1                        'timer'
+	option Brightness_1                     '1'
+	option DelayOn_1                        '5000'
+	option DelayOff_1                       '1000'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'RE_MoveCloser'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '1'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'RE_MoveFarther'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '0'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '1'
+
+config LEDState 'RE_LocationSuitable'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '1'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '1'
+
+config LEDState 'InCAPMode'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '1'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '1'
+
+config LEDState 'CL_LinkSufficient'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '1'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'CL_LinkInadequate'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '0'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '1'
+
+config LEDState 'CL_ActingAsRE'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '1'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '1'
+
+config LEDState 'RE_BackhaulGood'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '1'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '1'
+
+config LEDState 'RE_BackhaulFair'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '1'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
+
+config LEDState 'RE_BackhaulPoor'
+	option Name_1                           'led_0'
+	option Trigger_1                        'none'
+	option Brightness_1                     '0'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '1'
+
+config LEDState 'RE_SwitchingBSTA'
+	option Name_1                           'led_0'
+	option Trigger_1                        'timer'
+	option Brightness_1                     '1'
+	option DelayOn_1                        '250'
+	option DelayOff_1                       '250'
+	option Name_2                           'led_1'
+	option Trigger_2                        'none'
+	option Brightness_2                     '0'
diff --git a/etc/config/rpcd b/etc/config/rpcd
new file mode 100644
index 0000000..499ea27
--- /dev/null
+++ b/etc/config/rpcd
@@ -0,0 +1,7 @@
+
+config login
+	option username 'root'
+	option password '$p$root'
+	list read '*'
+	list write '*'
+
diff --git a/etc/config/snmpd b/etc/config/snmpd
new file mode 100644
index 0000000..cc271b1
--- /dev/null
+++ b/etc/config/snmpd
@@ -0,0 +1,51 @@
+config agent
+        option agentaddress 'UDP:161'
+        option disabled '1'
+
+config com2sec 'public'
+        option secname 'ro'
+        option community 'public'
+        option source 'default'
+
+config group 'public_v1'
+        option group 'public'
+        option version 'v1'
+        option secname 'ro'
+
+config group 'public_v2c'
+        option group 'public'
+        option version 'v2c'
+        option secname 'ro'
+
+config group 'public_usm'
+        option group 'public'
+        option version 'usm'
+        option secname 'ro'
+
+config view 'all'
+        option viewname 'all'
+        option type 'included'
+        option oid '.1'
+
+config access 'public_access'
+        option group 'public'
+        option context 'none'
+        option version 'any'
+        option prefix 'exact'
+        option read 'all'
+        option write 'none'
+        option notify 'none'
+        option level 'noauth'
+
+config userv3
+        option access 'ro'
+        option authtype 'MD5'
+        option sectype 'DES'
+        option name ''
+        option authpass ''
+        option secpass ''
+
+config system
+	option sysLocation	''
+	option sysContact	''
+	option sysName		'devolo-business'
diff --git a/etc/config/ssid-steering b/etc/config/ssid-steering
new file mode 100644
index 0000000..e2dbd67
--- /dev/null
+++ b/etc/config/ssid-steering
@@ -0,0 +1,4 @@
+config ssid-steering global
+	option enable		'0'
+	option private_vaps	'ath0'
+	option public_vaps	'ath1'
diff --git a/etc/config/station_quota b/etc/config/station_quota
new file mode 100644
index 0000000..b8913ec
--- /dev/null
+++ b/etc/config/station_quota
@@ -0,0 +1,3 @@
+config global 'global'
+	option logging '0'
+	option enabled '0'
diff --git a/etc/config/system b/etc/config/system
new file mode 100644
index 0000000..56ca827
--- /dev/null
+++ b/etc/config/system
@@ -0,0 +1,12 @@
+config system
+	option hostname	OpenWrt
+	option timezone	UTC
+	option log_size	64
+
+config timeserver ntp
+	list server	0.openwrt.pool.ntp.org
+	list server	1.openwrt.pool.ntp.org
+	list server	2.openwrt.pool.ntp.org
+	list server	3.openwrt.pool.ntp.org
+	option enabled 1
+	option enable_server 0
diff --git a/etc/config/tr069_stun b/etc/config/tr069_stun
new file mode 100644
index 0000000..0cb5d87
--- /dev/null
+++ b/etc/config/tr069_stun
@@ -0,0 +1,11 @@
+config stun 'stun'
+	option username 'tr069_stun'
+	option password 'tr069_stun'
+	option server_address 'stun.l.google.com'
+	option server_port '19302'
+	option min_keepalive '30'
+	option max_keepalive '3600'
+#Log levels: Critical=0, Warning=1, Notice=2, Info=3, Debug=4
+	option loglevel '0'
+#	option client_port 7547
+#if client_port option is not set or < 0 then use a random port for connection request source port 
diff --git a/etc/config/tr069_upnp b/etc/config/tr069_upnp
new file mode 100644
index 0000000..50286cc
--- /dev/null
+++ b/etc/config/tr069_upnp
@@ -0,0 +1,12 @@
+config upnp 'upnp'
+	option enable '1'
+	option period '60'
+
+	option root_description_url ''
+#example of root_description_url: 'http://192.168.1.1:5000/rootDesc.xml'. Empty value means that will be discovered automatically.
+
+	option loglevel '0'
+#Log levels: Critical=0, Warning=1, Notice=2, Info=3, Debug=4
+
+config gateway 'gateway'
+
diff --git a/etc/config/uhttpd b/etc/config/uhttpd
new file mode 100644
index 0000000..63498b1
--- /dev/null
+++ b/etc/config/uhttpd
@@ -0,0 +1,122 @@
+# Server configuration
+config uhttpd main
+
+	# HTTP listen addresses, multiple allowed
+	list listen_http	0.0.0.0:80
+	list listen_http	[::]:80
+
+	# HTTPS listen addresses, multiple allowed
+	list listen_https	0.0.0.0:443
+	list listen_https	[::]:443
+
+	# Redirect HTTP requests to HTTPS if possible
+	option redirect_https	0
+
+	# Server document root
+	option home		/www
+
+	# Reject requests from RFC1918 IP addresses
+	# directed to the servers public IP(s).
+	# This is a DNS rebinding countermeasure.
+	option rfc1918_filter 0 
+
+	# Maximum number of concurrent requests.
+	# If this number is exceeded, further requests are
+	# queued until the number of running requests drops
+	# below the limit again.
+	option max_requests 3
+
+	# Maximum number of concurrent connections.
+	# If this number is exceeded, further TCP connection
+	# attempts are queued until the number of active
+	# connections drops below the limit again.
+	option max_connections 100
+
+	# Certificate and private key for HTTPS.
+	# If no listen_https addresses are given,
+	# the key options are ignored.
+	option cert		/etc/uhttpd.crt
+	option key		/etc/uhttpd.key
+
+	# CGI url prefix, will be searched in docroot.
+	# Default is /cgi-bin
+	option cgi_prefix	/cgi-bin
+
+	# List of extension->interpreter mappings.
+	# Files with an associated interpreter can
+	# be called outside of the CGI prefix and do
+	# not need to be executable.
+#	list interpreter	".php=/usr/bin/php-cgi"
+#	list interpreter	".cgi=/usr/bin/perl"
+
+	# Lua url prefix and handler script.
+	# Lua support is disabled if no prefix given.
+#	option lua_prefix	/luci
+#	option lua_handler	/usr/lib/lua/luci/sgi/uhttpd.lua
+
+	# Specify the ubus-rpc prefix and socket path.
+#	option ubus_prefix	/ubus
+#	option ubus_socket	/var/run/ubus.sock
+
+	# CGI/Lua timeout, if the called script does not
+	# write data within the given amount of seconds,
+	# the server will terminate the request with
+	# 504 Gateway Timeout response.
+	option script_timeout	60
+
+	# Network timeout, if the current connection is
+	# blocked for the specified amount of seconds,
+	# the server will terminate the associated
+	# request process.
+	option network_timeout	30
+
+	# HTTP Keep-Alive, specifies the timeout for persistent
+	# HTTP/1.1 connections. Setting this to 0 will disable
+	# persistent HTTP connections.
+	option http_keepalive	20
+
+	# TCP Keep-Alive, send periodic keep-alive probes
+	# over established connections to detect dead peers.
+	# The value is given in seconds to specify the
+	# interval between subsequent probes.
+	# Setting this to 0 will disable TCP keep-alive.
+	option tcp_keepalive	1
+
+	# Basic auth realm, defaults to local hostname
+#	option realm	OpenWrt
+
+	# Configuration file in busybox httpd format
+#	option config	/etc/httpd.conf
+
+	# Do not follow symlinks that point outside of the
+	# home directory.
+#	option no_symlinks	0
+
+	# Do not produce directory listings but send 403
+	# instead if a client requests an url pointing to
+	# a directory without any index file.
+#	option no_dirlists	0
+
+	# Do not authenticate any ubus-rpc requests against
+	# the ubus session/access procedure.
+	# This is dangerous and should be always left off
+	# except for development and debug purposes!
+#	option no_ubusauth	0
+
+
+# Certificate defaults for px5g key generator
+config cert px5g
+
+	# Validity time
+	option days		3650
+
+	# RSA key size
+	option bits		2048
+
+	# Location
+	option country		ZZ
+	option state		Somewhere
+	option location		Unknown
+
+	# Common name
+	option commonname	'devolo AG'	
diff --git a/etc/config/upnpd b/etc/config/upnpd
new file mode 100644
index 0000000..fd92e3a
--- /dev/null
+++ b/etc/config/upnpd
@@ -0,0 +1,18 @@
+config upnpd config
+	option enable_natpmp	1
+	option enable_upnp	1
+	option secure_mode	1
+	
+config perm_rule
+	option action		allow
+	option ext_ports	1024-65535
+	option int_addr		0.0.0.0/0	# Does not override secure_mode
+	option int_ports	1024-65535
+	option comment		"Allow high ports"
+
+config perm_rule
+       option action		deny
+       option ext_ports		0-65535
+       option int_addr		0.0.0.0/0
+       option int_ports		0-65535
+       option comment		"Default deny"
diff --git a/etc/config/vlan b/etc/config/vlan
new file mode 100644
index 0000000..e69de29
diff --git a/etc/config/wifi_schedule b/etc/config/wifi_schedule
new file mode 100644
index 0000000..8bf10bb
--- /dev/null
+++ b/etc/config/wifi_schedule
@@ -0,0 +1,7 @@
+config global
+        option logging '0'
+        option enabled '0'
+        option forcewifidown '0'
+        option recheck_interval '10'
+        option modules_retries '10'
+	option unload_modules '0'
diff --git a/etc/config/wireless b/etc/config/wireless
new file mode 100644
index 0000000..982d50d
--- /dev/null
+++ b/etc/config/wireless
@@ -0,0 +1 @@
+config delos_uninitialized 'delos_uninitialized'
diff --git a/etc/config/wsplcd b/etc/config/wsplcd
new file mode 100644
index 0000000..0505245
--- /dev/null
+++ b/etc/config/wsplcd
@@ -0,0 +1,49 @@
+config wsplcd config
+	option HyFiSecurity '0'
+	option cfg80211_enable '0'
+	# RunMode REGISTRAR, ENROLLEE, NONE or AUTO
+	option RunMode 'AUTO'
+	option DesignatedPBAP '0'
+	# WPSMethod WPS_M2 or WPS_M8
+	option WPSMethod 'WPS_M2'
+	option ConfigSta '1'
+	option SearchTimeout '60'
+	option WPSSessionTimeout '120'
+	option WPSRetransmitTimeout '5'
+	option WPSPerMessageTimeout '15'
+	option PushButtonTimeout '120'
+	option PBSearchTimeout '10'
+	option SSIDSuffix ''
+	option NetworkKey1905 ''
+	option UCPKSalt ''
+	# WPAPassphraseType LONG or SHORT
+	option WPAPassphraseType 'LONG'
+	# DebugLevel DUMP,DEBUG,INFO,ERROR
+	option DebugLevel 'ERROR'
+	option BandSel '0'
+	option BandChoice '5G'
+	option RMCollectTimeout '10'
+	option DeepClone '1'
+	option DeepCloneNoBSSID '0'
+	option ManageVAPInd '1'
+
+	# Following are configuration for 1.0 AP Cloning
+	option APCloning '0'
+	# ButtonMode ONEBUTTON or TWOBUTTON
+	option ButtonMode 'TWOBUTTON'
+	option CloneTimeout '180'
+	option WalkTimeout '120'
+	option RepeatTimeout '1'
+	option InternalTimeout '15'
+
+	option WaitOtherBandsSecs '20'
+	option WaitFirstBandSecs  '30'
+	# Write debug log to file: NONE, APPEND, TRUNCATE
+	option WriteDebugLogToFile 'NONE'
+
+	# Config push restart and apply timeouts in secs
+	# Applicable to Registrar
+	option ConfigRestartShortTimeout '5'
+	# Applicable to Enrollee only
+	option ConfigRestartLongTimeout '15'
+	option ConfigApplyTimeout '30'
diff --git a/etc/config/xmpp b/etc/config/xmpp
new file mode 100644
index 0000000..6cbd46e
--- /dev/null
+++ b/etc/config/xmpp
@@ -0,0 +1,13 @@
+config xmpp 'xmpp_client'
+	option username 'username'
+	option password 'pass'
+	option domain 'domain'
+	option resource 'resource'
+	option keep_alive_interval '40'
+	option connect_attempt '4'
+	option retry_init_interval '5'
+	option retry_interval_multi '5'
+	option retry_interval_max '10'
+	option allowed_jid ''
+	option cafile ''
+	option verify_peer '0'
diff --git a/etc/delos-image b/etc/delos-image
new file mode 100644
index 0000000..22b0caa
--- /dev/null
+++ b/etc/delos-image
@@ -0,0 +1 @@
+DEVICE_TYPE=1200wifiac
diff --git a/etc/delos-version b/etc/delos-version
new file mode 100644
index 0000000..4fa9bf9
--- /dev/null
+++ b/etc/delos-version
@@ -0,0 +1,5 @@
+FIRMWARE_VERSION=5.2.1.D
+FIRMWARE_DATE=2019-02-19
+CONFIG_VERSION=5.2.0
+COMMIT_ID=15a464be7d39beb651cd80aed15cd4771d616cdb
+BUILD_NUMBER=RR28
diff --git a/etc/device_info b/etc/device_info
new file mode 100644
index 0000000..8a4891c
--- /dev/null
+++ b/etc/device_info
@@ -0,0 +1,4 @@
+DEVICE_MANUFACTURER='___VENDOR_NAME___'
+DEVICE_PRODUCT='___PRODUCT_NAME___'
+DEVICE_REVISION='1'
+DEVICE_VENDOR_URL='___VENDOR_URL___'
diff --git a/etc/diag.sh b/etc/diag.sh
new file mode 100644
index 0000000..d490c5c
--- /dev/null
+++ b/etc/diag.sh
@@ -0,0 +1,429 @@
+#!/bin/sh
+# Copyright (C) 2009-2013 OpenWrt.org
+
+. /lib/functions/leds.sh
+. /lib/ar71xx.sh
+
+get_status_led() {
+	case $(ar71xx_board_name) in
+	alfa-nx)
+		status_led="alfa:green:led_8"
+		;;
+	all0305)
+		status_led="eap7660d:green:ds4"
+		;;
+	antminer-s1)
+		status_led="antminer-s1:green:system"
+		;;
+	antminer-s3)
+		status_led="antminer-s3:green:system"
+		;;
+	ap132)
+		status_led="ap132:green:status"
+		;;
+	ap136-010|\
+	ap136-020)
+		status_led="ap136:green:status"
+		;;
+	ap137)
+		status_led="ap137:green:status"
+		;;
+	ap135-020)
+		status_led="ap135:green:status"
+		;;
+	apjet01)
+		status_led="apjet01:green:status"
+		;;
+	ap81)
+		status_led="ap81:green:status"
+		;;
+	ap83)
+		status_led="ap83:green:power"
+		;;
+	ap96)
+		status_led="ap96:green:led2"
+		;;
+	aw-nr580)
+		status_led="aw-nr580:green:ready"
+		;;
+	bsb)
+		status_led="bsb:red:sys"
+		;;
+	bullet-m | rocket-m | rocket-m-xw | nano-m | nanostation-m | nanostation-m-xw | loco-m-xw)
+		status_led="ubnt:green:link4"
+		;;
+	bxu2000n-2-a1)
+		status_led="bhu:green:status"
+		;;
+	cap4200ag)
+		status_led="senao:green:pwr"
+		;;
+	cpe510)
+		status_led="tp-link:green:link4"
+		;;
+	db120)
+		status_led="db120:green:status"
+		;;
+	dgl-5500-a1 |\
+	dhp-1565-a1|\
+	dir-505-a1 |\
+	dir-600-a1 |\
+	dir-615-e1 |\
+	dir-615-i1 |\
+	dir-615-e4)
+		status_led="d-link:green:power"
+		;;
+	dir-615-c1)
+		status_led="d-link:green:status"
+		;;
+	dir-825-b1)
+		status_led="d-link:orange:power"
+		;;
+	dir-825-c1 |\
+	dir-835-a1)
+		status_led="d-link:amber:power"
+		;;
+	dlan-hotspot)
+                status_led="devolo:green:wifi"
+                ;;
+	dlan-pro-500-wp)
+		status_led="devolo:green:wlan-2g"
+		;;
+	dlan-pro-1200-ac)
+		status_led=
+		;;
+	dlan-pro-1200-n)
+                status_led=
+                ;;
+	dragino2)
+		status_led="dragino2:red:system"
+		;;
+	dw33d)
+		status_led="dw33d:blue:status"
+		;;
+	eap300v2)
+		status_led="engenius:blue:power"
+		;;
+	eap7660d)
+		status_led="eap7660d:green:ds4"
+		;;
+	el-mini | \
+	el-m150)
+		status_led="easylink:green:system"
+		;;
+	ew-dorin | ew-dorin-router)
+		status_led="dorin:green:status"
+		;;
+	f9k1115v2)
+		status_led="belkin:blue:status"
+		;;
+	gl-inet)
+		status_led="gl-connect:green:lan"
+		;;
+	epg5000)
+		status_led="epg5000:amber:power"
+		;;
+	esr1750)
+		status_led="esr1750:amber:power"
+		;;
+	esr900)
+		status_led="engenius:amber:power"
+		;;
+	dvl-1200e)
+                status_led="dvl1200e:red:status"
+                ;;
+        dvl-1750e)
+                status_led="dvl1750e:red:status"
+                ;;
+        dvl-1200i)
+                status_led="dvl1200i:red:status"
+                ;;
+        dvl-1750i)
+                status_led="dvl1750i:red:status"
+                ;;
+        dvl-1750c)
+                status_led="dvl1750c:red:status"
+                ;;
+        dvl-1750x)
+                status_led="dvl1750x:red:status"
+                ;;
+	hiwifi-hc6361)
+		status_led="hiwifi:blue:system"
+		;;
+	hornet-ub | \
+	hornet-ub-x2)
+		status_led="alfa:blue:wps"
+		;;
+	ja76pf | \
+	ja76pf2)
+		status_led="jjplus:green:led1"
+		;;
+	ls-sr71)
+		status_led="ubnt:green:d22"
+		;;
+	mc-mac1200r)
+		status_led="mercury:green:system"
+		;;
+	mr12)
+		status_led="mr12:green:power"
+		;;
+	mr16)
+		status_led="mr16:green:power"
+		;;
+	mr600)
+		status_led="mr600:orange:power"
+		;;
+	mr600v2)
+		status_led="mr600:blue:power"
+		;;
+	mr1750 | \
+	mr1750v2)
+		status_led="mr1750:blue:power"
+		;;
+	mr900 | \
+	mr900v2)
+		status_led="mr900:blue:power"
+		;;
+	mynet-n600 | \
+	mynet-n750)
+		status_led="wd:blue:power"
+		;;
+	mynet-rext)
+		status_led="wd:blue:power"
+		;;
+	mzk-w04nu | \
+	mzk-w300nh)
+		status_led="planex:green:status"
+		;;
+	nbg460n_550n_550nh)
+		status_led="nbg460n:green:power"
+		;;
+	nbg6716)
+		status_led="zyxel:white:power"
+		;;
+	om2p | \
+	om2pv2 | \
+	om2p-hs | \
+	om2p-hsv2 | \
+	om2p-hsv3 | \
+	om2p-lc)
+		status_led="om2p:blue:power"
+		;;
+	om5p | \
+	om5p-an)
+		status_led="om5p:blue:power"
+		;;
+	om5p-ac | \
+	om5p-acv2)
+		status_led="om5pac:blue:power"
+		;;
+	onion-omega)
+		status_led="onion:amber:system"
+		;;
+	pb44)
+		status_led="pb44:amber:jump1"
+		;;
+	rb-2011l|\
+	rb-2011uas|\
+	rb-2011uas-2hnd)
+		status_led="rb:green:usr"
+		;;
+	rb-411 | rb-411u | rb-433 | rb-433u | rb-450 | rb-450g | rb-493)
+		status_led="rb4xx:yellow:user"
+		;;
+	rb-750)
+		status_led="rb750:green:act"
+		;;
+	rb-911g-2hpnd|\
+	rb-911g-5hpacd|\
+	rb-911g-5hpnd|\
+	rb-912uag-2hpnd|\
+	rb-912uag-5hpnd)
+		status_led="rb:green:user"
+		;;
+	rb-951ui-2hnd)
+		status_led="rb:green:act"
+		;;
+	rb-sxt2n|\
+	rb-sxt5n)
+		status_led="rb:green:power"
+		;;
+	routerstation | routerstation-pro)
+		status_led="ubnt:green:rf"
+		;;
+	rw2458n)
+		status_led="rw2458n:green:d3"
+		;;
+	smart-300)
+		status_led="nc-link:green:system"
+		;;
+	minibox-v1)
+		status_led="minibox-v1:green:system"
+		;;
+	oolite)
+		status_led="oolite:red:system"
+		;;
+	qihoo-c301)
+		status_led="qihoo:green:status"
+		;;
+	tew-632brp)
+		status_led="tew-632brp:green:status"
+		;;
+	tew-673gru)
+		status_led="trendnet:blue:wps"
+		;;
+	tew-712br|\
+	tew-732br)
+		status_led="trendnet:green:power"
+		;;
+	tl-mr3020)
+		status_led="tp-link:green:wps"
+		;;
+	tl-wa750re)
+		status_led="tp-link:orange:re"
+		;;
+	tl-wa850re)
+		status_led="tp-link:blue:re"
+		;;
+	tl-wa860re)
+		status_led="tp-link:green:power"
+		;;
+	tl-mr3220 | \
+	tl-mr3220-v2 | \
+	tl-mr3420 | \
+	tl-mr3420-v2 | \
+	tl-wa701nd-v2 | \
+	tl-wa801nd-v2 | \
+	tl-wa901nd | \
+	tl-wa901nd-v2 | \
+	tl-wa901nd-v3 | \
+	tl-wa901nd-v4 | \
+	tl-wdr3500 | \
+	tl-wr1041n-v2 | \
+	tl-wr1043nd | \
+	tl-wr1043nd-v2 | \
+	tl-wr741nd | \
+	tl-wr741nd-v4 | \
+	tl-wr841n-v1 | \
+	tl-wr841n-v7 | \
+	tl-wr841n-v8 | \
+	tl-wr841n-v11 | \
+	tl-wa830re-v2 | \
+	tl-wr842n-v2 | \
+	tl-wr941nd | \
+	tl-wr941nd-v5)
+		status_led="tp-link:green:system"
+		;;
+	archer-c5 | \
+	archer-c7 | \
+	tl-wdr4900-v2 | \
+	tl-mr10u | \
+	tl-mr12u | \
+	tl-mr13u | \
+	tl-wdr4300 | \
+	tl-wr703n | \
+	tl-wr710n | \
+	tl-wr720n-v3 | \
+	tl-wr941nd-v6)
+		status_led="tp-link:blue:system"
+		;;
+	tl-wr841n-v9)
+		status_led="tp-link:green:qss"
+		;;
+	tl-wr2543n)
+		status_led="tp-link:green:wps"
+		;;
+	tube2h)
+		status_led="alfa:green:signal4"
+		;;
+	unifi)
+		status_led="ubnt:green:dome"
+		;;
+	uap-pro)
+		status_led="ubnt:white:dome"
+		;;
+	unifi-outdoor-plus)
+		status_led="ubnt:white:front"
+		;;
+	airgateway)
+		status_led="ubnt:white:status"
+		;;
+	whr-g301n | \
+	whr-hp-g300n | \
+	whr-hp-gn | \
+	wzr-hp-g300nh)
+		status_led="buffalo:green:router"
+		;;
+	wlae-ag300n)
+		status_led="buffalo:green:status"
+		;;
+	wzr-hp-ag300h | \
+	wzr-hp-g300nh2)
+		status_led="buffalo:red:diag"
+		;;
+	r6100 | \
+	wndap360 | \
+	wndr3700 | \
+	wndr3700v4 | \
+	wndr4300 | \
+	wnr2000 | \
+	wnr2200 |\
+	wnr612-v2 |\
+	wnr1000-v2 |\
+	wpn824n)
+		status_led="netgear:green:power"
+		;;
+	wp543)
+		status_led="wp543:green:diag"
+		;;
+	wpj344)
+		status_led="wpj344:green:status"
+		;;
+	wpj531)
+		status_led="wpj531:green:sig3"
+		;;
+	wpj558)
+		status_led="wpj558:green:sig3"
+		;;
+	wrt400n)
+		status_led="wrt400n:blue:wps"
+		;;
+	e2100l)
+		status_led="e2100l:blue:wps"
+		;;
+	wrt160nl)
+		status_led="wrt160nl:blue:wps"
+		;;
+	zcn-1523h-2 | zcn-1523h-5)
+		status_led="zcn-1523h:amber:init"
+		;;
+	wlr8100)
+		status_led="sitecom:amber:status"
+		;;
+	esac
+}
+
+set_state() {
+	get_status_led
+
+	case "$1" in
+	preinit)
+		status_led_blink_preinit
+		;;
+	failsafe)
+		status_led_blink_failsafe
+		;;
+	preinit_regular)
+		status_led_blink_preinit_regular
+		;;
+	done)
+		status_led_on
+		case $(ar71xx_board_name) in
+		qihoo-c301)
+			local n=$(fw_printenv activeregion | cut -d = -f 2)
+			fw_setenv "image${n}trynum" 0
+			;;
+		esac
+		;;
+	esac
+}
diff --git a/etc/dropbear/dropbear_rsa_host_key b/etc/dropbear/dropbear_rsa_host_key
new file mode 100644
index 0000000..e69de29
diff --git a/etc/ethertypes b/etc/ethertypes
new file mode 100644
index 0000000..5e700f6
--- /dev/null
+++ b/etc/ethertypes
@@ -0,0 +1,37 @@
+#
+# Ethernet frame types
+#		This file describes some of the various Ethernet
+#		protocol types that are used on Ethernet networks.
+#
+# This list could be found on:
+#         http://www.iana.org/assignments/ethernet-numbers
+#
+# <name>    <hexnumber> <alias1>...<alias35> #Comment
+#
+IPv4	 	0800  	ip ip4 		# Internet IP (IPv4)
+X25		0805
+ARP		0806	ether-arp	#
+FR_ARP		0808    		# Frame Relay ARP        [RFC1701]
+BPQ		08FF			# G8BPQ AX.25 Ethernet Packet
+DEC		6000			# DEC Assigned proto
+DNA_DL		6001			# DEC DNA Dump/Load
+DNA_RC		6002			# DEC DNA Remote Console
+DNA_RT		6003			# DEC DNA Routing
+LAT		6004			# DEC LAT
+DIAG		6005			# DEC Diagnostics
+CUST		6006			# DEC Customer use
+SCA		6007			# DEC Systems Comms Arch
+TEB		6558             	# Trans Ether Bridging   [RFC1701]
+RAW_FR  	6559                   	# Raw Frame Relay        [RFC1701]
+AARP		80F3			# Appletalk AARP
+ATALK		809B                  	# Appletalk
+802_1Q		8100	8021q 1q 802.1q	dot1q # 802.1Q Virtual LAN tagged frame
+IPX		8137			# Novell IPX
+NetBEUI		8191			# NetBEUI
+IPv6		86DD	ip6 		# IP version 6
+PPP		880B                    # PPP
+ATMMPOA		884C			# MultiProtocol over ATM
+PPP_DISC	8863			# PPPoE discovery messages
+PPP_SES		8864			# PPPoE session messages
+ATMFATE		8884			# Frame-based ATM Transport over Ethernet
+LOOP		9000	loopback 	# loop proto
diff --git a/etc/firewall.user b/etc/firewall.user
new file mode 100644
index 0000000..6f79906
--- /dev/null
+++ b/etc/firewall.user
@@ -0,0 +1,7 @@
+# This file is interpreted as shell script.
+# Put your custom iptables rules here, they will
+# be executed with each firewall (re-)start.
+
+# Internal uci firewall chains are flushed and recreated on reload, so
+# put custom rules into the root chains e.g. INPUT or FORWARD or into the
+# special user chains, e.g. input_wan_rule or postrouting_lan_rule.
diff --git a/etc/fstab b/etc/fstab
new file mode 120000
index 0000000..f0ece1d
--- /dev/null
+++ b/etc/fstab
@@ -0,0 +1 @@
+/tmp/fstab
\ No newline at end of file
diff --git a/etc/fwknop/access.conf b/etc/fwknop/access.conf
new file mode 100644
index 0000000..aa2969b
--- /dev/null
+++ b/etc/fwknop/access.conf
@@ -0,0 +1,206 @@
+##############################################################################
+#
+# File:    access.conf
+#
+# Purpose: This file defines how fwknopd will modify firewall access
+#          controls for specific IPs/networks.  It gets installed in
+#          the fwknop config directory and is consulted by fwknopd on
+#          startup or a reconfiguration signal.
+#
+# Note:    This file supports multiple entries (stanzas) for different
+#          levels of access based on the SOURCE of the incoming SPA packet.
+#          If multiple stanzas are used, you should make sure they are
+#          entered in order from most specific to the more general SOURCE
+#          specifications as the first matching SOURCE wins.
+#
+#          For example, a SOURCE that is a specific IP address should come
+#          before a SOURCE that specifies multiple IP's or a Subnet.  The
+#          SOURCE: "ANY" (if used) should be the last one.
+#
+#          At least one stanza MUST be defined.
+#
+##############################################################################
+#
+### Directives ###
+
+# %include /etc/fwknop/myInlcudeFile.conf
+#
+# This processes the access.conf stanzas from an additional file.
+# Complete stanzas should be contained within each file.
+
+# %include_folder /etc/fwknop/myFolder.d
+#
+# This processes all the *.conf files in the specified directory.
+
+# %include_keys /home/user/fwknop_keys.conf
+#
+# This directive loads the encryption and HMAC keys from an external file.
+# Any other commands in the stanza must come before the %include_keys
+# directive.
+
+### Commands ###
+
+# SOURCE                <IP,..,IP/NET,..,NET/ANY>
+#
+# This defines the source address from which a SPA packet will be accepted.
+# Every  authorization stanza in this file must start  with  the  SOURCE
+# keyword. Networks should be specified in CIDR  (e.g. "192.168.10.0/24")
+# notation. Individual IP addresses can be specified as well.
+#
+# Also, multiple IP’s and/or networks can be defined as a comma-separated
+# list  (e.g. "192.168.10.0/24,10.1.1.123").
+#
+# The string "ANY" is also accepted if a valid authorization packet should
+# be honored from any source IP.
+#
+
+# DESTINATION                <IP,..,IP/NET,..,NET/ANY>
+#
+# This defines the destination address for which a SPA packet will be accepted.
+# Networks should be specified in CIDR  (e.g. "192.168.10.0/24") notation. 
+# Individual IP addresses can be specified as well.
+#
+# Also, multiple IP’s and/or networks can be defined as a comma-separated
+# list  (e.g. "192.168.10.0/24,10.1.1.123").
+#
+# The string "ANY" is also accepted if a valid authorization packet should
+# be honored to any destination IP.
+#
+
+# OPEN_PORTS            <proto/port>, ..., <proto/port
+#
+# Define a set of ports and protocols (tcp or udp) that are allowed to be
+# opened if a valid SPA packet is received and its access request matches
+# one of the entries here.
+#
+# If this entry is not set, then fwknopd will attempt to honor the request
+# specified in the SPA data.
+#
+
+# RESTRICT_PORTS        <proto/port>, ..., <proto/port>
+#
+# Define a set of ports and protocols (tcp or udp) that are *NOT* allowed
+# to be opened even if a valid SPA packet is received.
+#
+
+# KEY                   <password>
+#
+# Define the key used for decrypting an incoming SPA packet that is using
+# its built-in encryption (e.g. not GPG).  This variable is required for
+# all non-GPG-encrypted SPA packets.
+#
+
+# FW_ACCESS_TIMEOUT     <seconds>
+#
+# Define the length of time access will be granted by fwknop through the
+# firewall after a valid SPA packet is received from the source IP address
+# that matches this stanza's SOURCE.
+#
+# If  FW_ACCESS_TIMEOUT is not set then the fwknopd default timeout of 30
+# seconds will automatically be set.
+#
+
+# ENABLE_CMD_EXEC       <Y/N>
+#
+# This specifies whether or not fwknopd will accept complete commands that
+# are contained within a SPA packet.  Any such command will be executed as
+# user specified using the CMD_EXEC_USER parameter by the fwknopd server.
+# If not set here, the default is "N".
+#
+
+# CMD_EXEC_USER         <username>
+#
+# This specifies the user that will execute commands contained within a SPA
+# packet.  If not specified, fwknopd will execute it as the user it is
+# running as (most likely root). Setting this to a non-root user is highly
+# recommended.
+#
+
+# REQUIRE_USERNAME      <username>
+#
+# Require a specific username from the client system as encoded in the SPA
+# data.  This variable is optional and if not specified, the username data
+# in the SPA data is ignored.
+#
+
+# REQUIRE_SOURCE_ADDRESS    <Y/N>
+#
+# Force all SPA packets to contain a real IP address within the encrypted
+# data.  This makes it impossible to use the "-s" command line argument
+# on the fwknop client command line, so either "-R" has to be used to
+# automatically resolve the external address (if the client is behind a
+# NAT) or the client must know the external IP.  If not set here, the
+# default is "N".
+#
+
+# GPG_HOME_DIR          <path>
+#
+# Define the path to the GnuPG directory to be used by fwknopd.  If this
+# keyword is not specified here, then fwknopd will default to using the
+# "/root/.gnupg" directory for the server key(s).
+#
+
+# GPG_DECRYPT_ID        <keyID>
+#
+# Define a GnuPG key ID to use for decrypting SPA messages that have been
+# encrypted by an fwknop client using GPG.  This keyword is required for
+# authentication that is based on gpg keys.  The gpg key ring on the client
+# must have imported and signed the fwknopd server key, and vice versa.
+#
+# It is ok to use a sensitive personal gpg key on the client, but each
+# fwknopd server should have its own gpg key that is generated specifically
+# for fwknop communications.  The reason for this is that this decryption
+# password within this file.
+#
+# Note that you can use either keyID or its corresponding email address.
+#
+# For more information on using fwknop with GnuPG keys, see the following
+# link: http://www.cipherdyne.org/fwknop/docs/gpghowto.html
+#
+
+# GPG DECRYPT_PW        <decrypt password>
+#
+# Specify the decryption password for the gpg key defined by the
+# GPG_DECRYPT_ID above.  This is a required field for gpg-based
+# authentication.
+#
+
+# GPG_REQUIRE_SIG       <Y/N>
+#
+# With this setting set to 'Y',  fwknopd check all GPG-encrypted SPA
+# messages for a signature (signed by the sender's key).  If the incoming
+# message is not signed, the decryption process will fail.  If not set, the
+# default is 'N'.
+
+# GPG_IGNORE_SIG_VERIFY_ERROR   <Y/N>
+#
+# Setting this will allow fwknopd to accept incoming GPG-encrypted packets
+# that are signed, but the signature did not pass verification (i.e. the
+# signer key was expired, etc.).  This setting only applies if the
+# GPG_REQUIRE_SIG is also set to 'Y'.
+
+# GPG_REMOTE_ID         <keyID,...,keyID>
+#
+# Define a list of gpg key ID’s that are required to have signed any
+# incoming SPA messages that have been encrypted with the fwknopd server
+# key.  This ensures that the verification of the remote user is accomplished
+# via a strong cryptographic mechanism. This setting only applies if the
+# GPG_REQUIRE_SIG is set to 'Y'.
+#
+
+#### fwknopd access.conf stanzas ###
+
+SOURCE              ANY
+KEY_BASE64          __CHANGEME__
+HMAC_KEY_BASE64     __CHANGEME__
+
+# If you want to use GnuPG keys then define the following variables
+#
+#GPG_HOME_DIR           /homedir/path/.gnupg
+#GPG_DECRYPT_ID         ABCD1234
+#GPG_DECRYPT_PW         __CHANGEME__
+
+# If you want to require GPG signatures:
+#GPG_REQUIRE_SIG                    Y
+#GPG_IGNORE_SIG_VERIFY_ERROR        N
+#GPG_REMOTE_ID                      1234ABCD
diff --git a/etc/fwknop/fwknopd.conf b/etc/fwknop/fwknopd.conf
new file mode 100644
index 0000000..647ecf0
--- /dev/null
+++ b/etc/fwknop/fwknopd.conf
@@ -0,0 +1,563 @@
+#
+##############################################################################
+#
+#         [+] fwknopd - Firewall Knock Operator Daemon [+]
+#
+# This is the configuration file for fwknopd, the Firewall Knock Operator
+# daemon.  The primary authentication and authorization mechanism offered
+# by fwknop is known as Single Packet Authorization (SPA).  More information
+# about SPA can be found at: http://www.cipherdyne.org/fwknop/docs/SPA.html
+#
+# There are no access control directives in this file.  All access
+# control directives are located in the file "/etc/fwknop/access.conf".
+# You will need to edit the access.conf file in order for fwknop to function
+# correctly.
+#
+# Most of these can remain commented out unless you need to override the
+# default setting.
+#
+# It is also important to note that there are some subtle (and some not
+# so subtle) differences between this configuration file, its parameters
+# and valid values and the configuration file used by the legacy Perl
+# version of fwknopd.  Please pay careful attention to the format and
+# values used in this file if you are migrating from the legacy Perl
+# version.
+#
+##############################################################################
+#
+
+#
+# Define the default verbosity level the fwknop server should use.
+# A value of "0" is the default verbosity level. Setting it up to "1" or
+# higher will allow debugging messages to be displayed.
+#
+#VERBOSE                     0;
+
+# Define the ethernet interface on which we will sniff packets.
+# Default if not set is eth0.  The '-i <intf>' command line option overrides
+# the PCAP_INTF setting.
+#
+#PCAP_INTF                   eth0;
+
+# By default fwknopd does not put the pcap interface into promiscuous mode.
+# Set this to 'Y' to enable promiscuous sniffing.
+#
+#ENABLE_PCAP_PROMISC         N;
+
+# Define the filter used for PCAP modes; we default to udp port 62201.
+# However, if an fwknop client uses the --rand-port option to send the
+# SPA packet over a random port, then this variable should be updated to
+# something like "udp dst portrange 10000-65535;".
+# Default is "udp port 62201".
+#
+#PCAP_FILTER                 udp port 62201;
+
+### Netfilter Queue (NFQ) Parameters ###
+#
+# These settings apply only if fwknopd was compiled with libnetfilter_queue
+# support (configure with --enable-libnetfilter_queue). If this was not
+# enabled, leave these commented out.
+#
+# Uncomment and set to "Y" to capture via libnetfilter_queue. This is the
+# only option that must be set in order for NFQ capture.  The remaining
+# options have reasonable default values.
+# 
+#ENABLE_NFQ_CAPTURE          Y;
+
+# If you want to limit capture to a specific network interface, specify it
+# here. If NFQ is enabled and this is left commented out, SPA packets will
+# be captured on any/all network interfaces (which is the default).
+#
+#NFQ_INTERFACE               eth0;
+
+# Specify the UDP port for incoming SPA packets (default is 62201).
+#
+#NFQ_PORT                    62201;
+
+# Specify the iptable table for NFQ use (should stay the default of "mangle").
+#
+#NFQ_TABLE                   mangle;
+
+# The name for the chain we will use for NFQ (default is "FWKNOP_NFQ").
+#NFQ_CHAIN
+
+# Specify the NFQ queue number.  The default is "1".
+#
+#NFQ_QUEUE_NUMBER            1;
+#
+### End of Netfilter Queue (NFQ) Options ###
+
+# This instructs fwknopd to not honor SPA packets that have an old time
+# stamp.  The value for "old" is defined by the MAX_SPA_PACKET_AGE variable.
+# If ENABLE_SPA_PACKET_AGING is set to "N", fwknopd will not use the client
+# time stamp at all.
+#
+#ENABLE_SPA_PACKET_AGING     Y;
+
+# Defines the maximum age (in seconds) that an SPA packet will be accepted.
+# This requires that the client system is in relatively close time
+# synchronization with the fwknopd server system (NTP is good).  The default
+# age is two minutes.
+#
+#MAX_SPA_PACKET_AGE          120;
+
+# Track digest sums associated with previous fwknop process.  This allows
+# digest sums to remain persistent across executions of fwknop.
+#
+#ENABLE_DIGEST_PERSISTENCE   Y;
+
+# Sets the number of packets that are processed when the pcap_dispatch()
+# call is made.  The default is zero, since this allows fwknopd to process
+# as many packets as possible in the corresponding callback where the SPA
+# handling routine is called for packets that pass a set of prerequisite
+# checks.  However, if fwknopd is running on a platform with an old
+# version of libpcap, it may be necessary to change this value to a positive
+# non-zero integer.  More information can be found in the pcap_dispatch(3)
+# man page.
+#PCAP_DISPATCH_COUNT            0;
+
+# Sets the number of microseconds to pass as an argument to usleep() in
+# the pcap loop.  The default is 100000 microseconds, or 1/10th of a second.
+#PCAP_LOOP_SLEEP                100000;
+
+# Specify the the maximum number of bytes to sniff per frame - 1500
+# is a good default
+#
+#MAX_SNIFF_BYTES             1500;
+
+# If GPG keys are used instead of a Rijndael symmetric key, this is
+# the default GPG keys directory.  Note that each access stanza in
+# fwknop access.conf can specify its own GPG directory to override
+# this default.
+#
+#GPG_HOME_DIR        /root/.gnupg;
+
+# Set the default GPG path when GPG is used for SPA encryption and
+# authentication.
+#
+#GPG_EXE            /usr/bin/gpg;
+
+# Allow fwknopd to acquire SPA data from HTTP requests (generated with the
+# fwknop client in --HTTP mode).  Note that the PCAP_FILTER variable would
+# need to be updated when this is enabled to sniff traffic over TCP/80
+# connections.
+#
+#ENABLE_SPA_OVER_HTTP        N;
+
+# Allow fwknopd to resolve hostnames in NAT access messages.
+#ENABLE_NAT_DNS              Y;
+
+# Allows the use of the X-Forwarded-for header from a captured packet as the
+# Source IP. This can happen when using SPA through an HTTP proxy.
+#
+#ENABLE_X_FORWARDED_FOR      N;
+
+# Instead of appending new firewall rules to the bottom of the chain, this
+# option inserts rules at the top of the chain. This causes newly created
+# rules to have precedence over older ones.
+#
+#ENABLE_RULE_PREPEND         N;
+
+# Enable the fwknopd TCP server.  This is a "dummy" TCP server that will
+# accept TCP connection requests on the specified TCPSERV_PORT.
+# If set to "Y", fwknopd will fork off a child process to listen for and
+# accept incoming TCP requests.  This server only accepts the
+# request.  It does not otherwise communicate. This is only to allow the
+# incoming SPA over TCP packet which is detected via PCAP. The connection
+# is closed after 1 second regardless.
+# Note that fwknopd still only gets its data via pcap, so the filter
+# defined by PCAP_FILTER needs to be updated to include this TCP port.
+#
+#ENABLE_TCP_SERVER           N;
+#TCPSERV_PORT                62201;
+
+# Set/override the locale (via the LC_ALL locale category).  Leave this
+# entry commented out to  have fwknopd honor the default system locale.
+#
+#LOCALE                      C;
+
+# Override syslog identity and facility (the defaults are usually ok).
+# The SYSLOG_FACILITY variable can be set to one of LOG_LOCAL{0-7}
+# or LOG_DAEMON (the default).
+#
+#SYSLOG_IDENTITY             fwknopd;
+#SYSLOG_FACILITY             LOG_DAEMON;
+
+# Define this to have fwknopd read pcap data from a file instead of sniffing
+# a live interface.  This is usually only used for debugging purposes, and is
+# equivalent to the '-r <pcap file>' command line option.
+#
+#PCAP_FILE                   /some/path/to/file.pcap;
+
+# This variable controls whether fwknopd is permitted to sniff SPA packets
+# regardless of whether they are received on the sniffing interface or sent
+# from the sniffing interface.  In the latter case, this can be useful to have
+# fwknopd sniff SPA packets that are forwarded through a system and destined
+# for a different network.  If the sniffing interface is the egress interface
+# for such packets, then this variable will need to be set to "Y" in order for
+# fwknopd to see them.  The default is "N" so that fwknopd only looks for SPA
+# packets that are received on the sniffing interface (note that this is
+# independent of promiscuous mode).
+#
+# ENABLE_PCAP_ANY_DIRECTION     N;
+
+# Controls whether fwknopd will set the destination field on the firewall
+# rule to the destination address specified on the incoming SPA packet.
+# This is useful for interfaces with multiple IP addresses hosting separate
+# services. If ENABLE_IPT_OUTPUT is set to "Y", the source field of
+# the firewall rule is set. FORWARD and SNAT rules are not affected however,
+# DNAT rules will also have their destination field set. The default is
+# "N", which sets the destination field to 0.0.0.0/0 (any).
+#
+# ENABLE_DESTINATION_RULE       Y;
+
+##############################################################################
+# NOTE: The following EXTERNAL_CMD functionality is not yet implemented.
+#       This is a possible future feature of fwknopd.
+#
+# The following four variables control whether a global set of "open" and
+# "close" commands are executed after receiving a valid SPA packet.  These
+# variables are used only if FIREWALL_TYPE is set to "external_cmd", but
+# the same variables can also exist within the access.conf file so that
+# mixed deployments are possible - that is, some SPA packets will operate
+# as usual and result in firewall commands being executed, but others will
+# result in the commands defined by these variables (in access.conf) being
+# executed.
+#     The "open" and "close" commands might be manually supplied firewall
+# commands, and both support variable substitution of any of the variables
+# in the access.conf file with "$VAR".  Also, three special variables are
+# supported: $SRC, $PORT, and $PROTO, which are derived from actual values
+# from within valid SPA packets (as opposed to $SOURCE from access.conf
+# which may contain a list of networks instead of a single IP address).
+# Here are some examples:
+#     - Execute a specific iptables command on behalf of the source IP
+#     in a valid SPA packet to add a new ACCEPT rule, and execute
+#     another command (to delete the same rule after a timeout):
+#         EXTERNAL_CMD_OPEN       iptables -A INPUT -s $SRC -j ACCEPT
+#         EXTERNAL_CMD_CLOSE      iptables -D INPUT -s $SRC -j ACCEPT
+#     - Execute a custom binary with the SOURCE and OPEN_PORTS variables
+#     from the access.conf file as input on the command line, and after
+#     a timeout execute a different program but use the real SPA source
+#     IP:
+#         EXTERNAL_CMD_OPEN       /path/someprog $SOURCE $OPEN_PORTS
+#         EXTERNAL_CMD_OPEN       /path/otherprog $SRC
+#
+#ENABLE_EXTERNAL_CMDS        N;
+#EXTERNAL_CMD_OPEN           __NONE__;
+#EXTERNAL_CMD_CLOSE          __NONE__;
+#EXTERNAL_CMD_ALARM          30;
+
+# if EXTERNAL_CMD_OPEN is used above, then the following two variables can
+# be used to enforce a prefix on variable substitutions - useful if there
+# are any naming conflicts with the external script and command line
+# arguments that are named the same as the variables to be substituted.
+#
+#ENABLE_EXT_CMD_PREFIX       N;
+#EXT_CMD_PREFIX              FWKNOP_;
+
+##############################################################################
+# Parameters specific to firewalld:
+
+# Flush all existing rules in the fwknop chains at fwknop start time and/or
+# exit time. They default to Y and it is a recommended setting for both.
+#
+#FLUSH_FIREWD_AT_INIT           Y;
+#FLUSH_FIREWD_AT_EXIT           Y;
+#
+
+# Allow SPA clients to request access to services through a firewalld
+# firewall instead of just to it (i.e. access through the FWKNOP_FORWARD
+# chain instead of the INPUT chain).
+#
+#ENABLE_FIREWD_FORWARDING       N;
+
+# Allow SPA clients to request access to a local socket via NAT.  This still
+# puts an ACCEPT rule into the FWKNOP_INPUT chain, but a different port is
+# translated via DNAT rules to the real one.  So, the user would do
+# "ssh -p <port>" to access the local service (see the --NAT-local and
+# --NAT-rand-port on the fwknop client command line).
+#
+#ENABLE_FIREWD_LOCAL_NAT        Y;
+
+# By default, if forwarding access is enabled (see the ENABLE_FIREWD_FORWARDING
+# variable above), then fwknop creates DNAT rules for incoming connections,
+# but does not also complement these rules with SNAT rules at the same time.
+# In some situations, internal systems may not have a route back out for the
+# source address of the incoming connection, so it is necessary to also
+# apply SNAT rules so that the internal systems see the IP of the internal
+# interface where fwknopd is running.  This functionality is only enabled
+# when ENABLE_FIREWD_SNAT is set to "Y", and by default SNAT rules are built
+# with the MASQUERADE target (since then the internal IP does not have to be
+# defined here in the fwknop.conf file), but if you want fwknopd to use the
+# SNAT target then also define an IP address with the SNAT_TRANSLATE_IP
+# variable.
+#
+#ENABLE_FIREWD_SNAT             N;
+#SNAT_TRANSLATE_IP           __CHANGEME__;
+
+# Add ACCEPT rules to the FWKNOP_OUTPUT chain. This is usually only useful
+# if there are no state tracking rules to allow connection responses out and
+# the OUTPUT chain has a default-drop stance.
+#
+#ENABLE_FIREWD_OUTPUT           N;
+
+# fwknopd adds allow rules to a custom firewalld chain "FWKNOP_INPUT".
+# This chain is called from the INPUT chain, and by default no other
+# firewalld chains are used.  However, additional chains can be added
+# (say, if access needs to be allowed through the local system via the
+# FORWARD chain) by altering the FIREWD_FORWARD_ACCESS variable below.
+# For a discussion of the format followed by these keywords, read on:
+#
+# Specify chain names to which firewalld blocking rules will be
+# added with the FIREWD_INPUT_ACCESS and FIREWD_FORWARD_ACCESS keyword.
+# The format for these variables is:
+#
+#   <Target>,<Table>,<From_chain>,<Jump_rule_position>,\
+#       <To_chain>,<Rule_position>.
+#
+# "Target":
+#   Can be any legitimate firewalld target, but should usually just be "DROP".
+#
+# "Table":
+#   Can be any firewalld table, but the default is "filter".
+#
+# "From_chain":
+#   Is the chain from which packets will be jumped.
+#
+# "Jump_rule_position":
+#   Defines the position within the From_chain where the jump rule is added.
+#
+# "To_chain":
+#   Is the chain to which packets will be jumped. This is the main chain
+#   where fwknop rules are added.
+#
+# "Rule_position":
+#   Defines the position where rules are added within the To_chain.
+#
+#FIREWD_INPUT_ACCESS        ACCEPT, filter, INPUT, 1, FWKNOP_INPUT, 1;
+
+# The FIREWD_OUTPUT_ACCESS variable is only used if ENABLE_FIREWD_OUTPUT is enabled
+#
+#FIREWD_OUTPUT_ACCESS       ACCEPT, filter, OUTPUT, 1, FWKNOP_OUTPUT, 1;
+
+# The FIREWD_FORWARD_ACCESS variable is only used if ENABLE_FIREWD_FORWARDING is
+# enabled.
+#
+#FIREWD_FORWARD_ACCESS      ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD, 1;
+#FIREWD_DNAT_ACCESS         DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING, 1;
+
+# The FIREWD_SNAT_ACCESS variable is not used unless both ENABLE_FIREWD_SNAT and
+# ENABLE_FIREWD_FORWARDING are enabled.  Also, the external static IP must be
+# set with the SNAT_TRANSLATE_IP variable.  The default is to use the
+# FIREWD_MASQUERADE_ACCESS variable.
+#
+#FIREWD_SNAT_ACCESS         SNAT, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1;
+#FIREWD_MASQUERADE_ACCESS   MASQUERADE, nat, POSTROUTING, 1, FWKNOP_MASQUERADE, 1;
+
+# The ENABLE_COMMENT_MATCH_CHECK variable instructs fwknopd to check for the
+# firewalld 'comment' match at start up.  If it's not found, then fwknopd will
+# exit and throw an error.  This variable is enabled by default, but can be
+# disabled if you want fwknopd to run without being sure that the comment match
+# is available (not recommended, since the comment match enables new SPA rules
+# to be timed out).
+#
+#ENABLE_FIREWD_COMMENT_CHECK        Y;
+
+##############################################################################
+# Parameters specific to iptables:
+
+# Flush all existing rules in the fwknop chains at fwknop start time and/or
+# exit time. They default to Y and it is a recommended setting for both.
+#
+#FLUSH_IPT_AT_INIT           Y;
+#FLUSH_IPT_AT_EXIT           Y;
+#
+
+# Allow SPA clients to request access to services through an iptables
+# firewall instead of just to it (i.e. access through the FWKNOP_FORWARD
+# chain instead of the INPUT chain).
+#
+#ENABLE_IPT_FORWARDING       N;
+
+# Allow SPA clients to request access to a local socket via NAT.  This still
+# puts an ACCEPT rule into the FWKNOP_INPUT chain, but a different port is
+# translated via DNAT rules to the real one.  So, the user would do
+# "ssh -p <port>" to access the local service (see the --NAT-local and
+# --NAT-rand-port on the fwknop client command line).
+#
+#ENABLE_IPT_LOCAL_NAT        Y;
+
+# By default, if forwarding access is enabled (see the ENABLE_IPT_FORWARDING
+# variable above), then fwknop creates DNAT rules for incoming connections,
+# but does not also complement these rules with SNAT rules at the same time.
+# In some situations, internal systems may not have a route back out for the
+# source address of the incoming connection, so it is necessary to also
+# apply SNAT rules so that the internal systems see the IP of the internal
+# interface where fwknopd is running.  This functionality is only enabled
+# when ENABLE_IPT_SNAT is set to "Y", and by default SNAT rules are built
+# with the MASQUERADE target (since then the internal IP does not have to be
+# defined here in the fwknop.conf file), but if you want fwknopd to use the
+# SNAT target then also define an IP address with the SNAT_TRANSLATE_IP
+# variable.
+#
+#ENABLE_IPT_SNAT             N;
+#SNAT_TRANSLATE_IP           __CHANGEME__;
+
+# Add ACCEPT rules to the FWKNOP_OUTPUT chain. This is usually only useful
+# if there are no state tracking rules to allow connection responses out and
+# the OUTPUT chain has a default-drop stance.
+#
+#ENABLE_IPT_OUTPUT           N;
+
+# fwknopd adds allow rules to a custom iptables chain "FWKNOP_INPUT".
+# This chain is called from the INPUT chain, and by default no other
+# iptables chains are used.  However, additional chains can be added
+# (say, if access needs to be allowed through the local system via the
+# FORWARD chain) by altering the IPT_FORWARD_ACCESS variable below.
+# For a discussion of the format followed by these keywords, read on:
+#
+# Specify chain names to which iptables blocking rules will be
+# added with the IPT_INPUT_ACCESS and IPT_FORWARD_ACCESS keyword.
+# The format for these variables is:
+#
+#   <Target>,<Table>,<From_chain>,<Jump_rule_position>,\
+#       <To_chain>,<Rule_position>.
+#
+# "Target":
+#   Can be any legitimate iptables target, but should usually just be "DROP".
+#
+# "Table":
+#   Can be any iptables table, but the default is "filter".
+#
+# "From_chain":
+#   Is the chain from which packets will be jumped.
+#
+# "Jump_rule_position":
+#   Defines the position within the From_chain where the jump rule is added.
+#
+# "To_chain":
+#   Is the chain to which packets will be jumped. This is the main chain
+#   where fwknop rules are added.
+#
+# "Rule_position":
+#   Defines the position where rule are added within the To_chain.
+#
+#IPT_INPUT_ACCESS        ACCEPT, filter, INPUT, 1, FWKNOP_INPUT, 1;
+
+# The IPT_OUTPUT_ACCESS variable is only used if ENABLE_IPT_OUTPUT is enabled
+#
+#IPT_OUTPUT_ACCESS       ACCEPT, filter, OUTPUT, 1, FWKNOP_OUTPUT, 1;
+
+# The IPT_FORWARD_ACCESS variable is only used if ENABLE_IPT_FORWARDING is
+# enabled.
+#
+#IPT_FORWARD_ACCESS      ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD, 1;
+#IPT_DNAT_ACCESS         DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING, 1;
+
+# The IPT_SNAT_ACCESS variable is not used unless both ENABLE_IPT_SNAT and
+# ENABLE_IPT_FORWARDING are enabled.  Also, the external static IP must be
+# set with the SNAT_TRANSLATE_IP variable.  The default is to use the
+# IPT_MASQUERADE_ACCESS variable.
+#
+#IPT_SNAT_ACCESS         SNAT, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1;
+#IPT_MASQUERADE_ACCESS   MASQUERADE, nat, POSTROUTING, 1, FWKNOP_MASQUERADE, 1;
+
+# The ENABLE_COMMENT_MATCH_CHECK variable instructs fwknopd to check for the
+# iptables 'comment' match at start up.  If it's not found, then fwknopd will
+# exit and throw an error.  This variable is enabled by default, but can be
+# disabled if you want fwknopd to run without being sure that the comment match
+# is available (not recommended, since the comment match enables new SPA rules
+# to be timed out).
+#
+#ENABLE_IPT_COMMENT_CHECK        Y;
+
+##############################################################################
+# Parameters specific to ipfw:
+#
+#
+# This variable defines the rule number that fwknopd uses to insert an ipfw
+# pass rule.  You would most likely want to change this parameter to a
+# number that makes sense in your current ipfw firewall configuration.
+#
+#IPFW_START_RULE_NUM         10000;
+
+# This variable defines the maximum number of rules fwknopd will create at
+# a time. This also tells fwknopd where to stop when flushing all rules.
+#
+#IPFW_MAX_RULES              1000;
+
+# Flush all existing rules in the fwknop ipfw sets at fwknop start time and/or
+# exit time. They default to Y and it is a recommended setting for both.
+#
+#FLUSH_IPFW_AT_INIT           Y;
+#FLUSH_IPFW_AT_EXIT           Y;
+
+# This variable defines the rule set fwknopd uses for active rules. By
+# default, it is set 1 and fwknopd assumes that it has full control over this
+# set.  That is, fwknopd routinely creates and deletes rules in this set, and
+# the entire set itself is also created/deleted during routine operations.
+# You have some measure of control over whether the entire set is deleted at
+# init/exit with the FLUSH_IPFW_AT_INIT and FLUSH_IPFW_AT_EXIT, but in general
+# it is recommended to leave these variables set to the default "Y" setting.
+#
+#IPFW_ACTIVE_SET_NUM         1;
+
+# This variable defines the rule set that will be used to store expired rules
+# that still have a dynamic rule associated to them. That set will be disabled
+# by fwknop and should not be enabled while fwknop is running. Not used when
+# ipfw isn't using dynamic rules.  By default, it is set 2, but can be anything
+# in the range 1-31 except that it shouldn't be the same as
+# IPFW_ACTIVE_SET_NUM.  Note that fwknopd disables this set through routine
+# operations according to the FLUSH_IPFW_AT_INIT and FLUSH_IPFW_AT_EXIT
+# variables.
+#
+#IPFW_EXPIRE_SET_NUM         2;
+
+# Set the interval (in seconds) over which rules that are expired and
+# have no remaining dynamic rules associated with them will be removed.
+#
+#IPFW_EXPIRE_PURGE_INTERVAL  30;
+
+# Set this variable to "Y" if you want fwknopd to create its own "check-state"
+# rule as the first rule in the set.  This would only be needed if there
+# was not already a check-state rule in the current firewall configuration.
+#
+# IPFW_ADD_CHECK_STATE       N;
+
+##############################################################################
+# Parameters specific to the pf firewall:
+#
+#
+# This variable defines the pf anchor name to which fwknopd will add and
+# delete rules.  This anchor must be linked into the pf policy (typically
+# done by adding it into the /etc/pf.conf file), and fwknopd runs a check at
+# init time to ensure that the anchor exists.
+#
+#PF_ANCHOR_NAME             fwknop;
+
+# Set the interval (in seconds) over which rules that are expired
+#
+#PF_EXPIRE_INTERVAL         30;
+
+##############################################################################
+
+# Directories - These can override compile-time defaults.
+#
+#FWKNOP_RUN_DIR              /var/run/fwknop;
+#FWKNOP_CONF_DIR             /etc/fwknop;
+
+# Files
+#
+#ACCESS_FILE                 access.conf;
+#FWKNOP_PID_FILE             $FWKNOP_RUN_DIR/fwknopd.pid;
+#DIGEST_FILE                 $FWKNOP_RUN_DIR/digest.cache;
+### The DB version is only used if fwknopd was built with gdbm/ndbm
+### support (not needed by default).
+#DIGEST_DB_FILE              $FWKNOP_RUN_DIR/digest_db.cache;
+
+# System binaries
+#
+#FIREWALL_EXE                /bin/firewall-cmd;
+#FIREWALL_EXE                /sbin/iptables;
+
+###EOF###
diff --git a/etc/group b/etc/group
new file mode 100644
index 0000000..6337f2c
--- /dev/null
+++ b/etc/group
@@ -0,0 +1,12 @@
+root:x:0:
+daemon:x:1:
+adm:x:4:
+mail:x:8:
+audio:x:29:
+www-data:x:33:
+ftp:x:55:
+users:x:100:
+network:x:101:
+nogroup:x:65534:
+avahi:x:105:
+ntp:x:123:
diff --git a/etc/hosts b/etc/hosts
new file mode 100644
index 0000000..75721cd
--- /dev/null
+++ b/etc/hosts
@@ -0,0 +1 @@
+127.0.0.1 localhost
diff --git a/etc/hotplug-preinit.json b/etc/hotplug-preinit.json
new file mode 100644
index 0000000..614b104
--- /dev/null
+++ b/etc/hotplug-preinit.json
@@ -0,0 +1,20 @@
+[
+	[ "case", "ACTION", {
+		"add": [
+			[ "if",
+				[ "has", "FIRMWARE" ],
+				[
+					[ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ],
+					[ "load-firmware", "/lib/firmware" ],
+					[ "return" ]
+				]
+			],
+		],
+	}, ],
+	[ "if",
+		[ "and",
+			[ "eq", "SUBSYSTEM", "button" ],
+		],
+		[ "exec", "/etc/rc.button/failsafe" ]
+	],
+]
diff --git a/etc/hotplug.d/button/40-wsplcd b/etc/hotplug.d/button/40-wsplcd
new file mode 100755
index 0000000..cfbf0f1
--- /dev/null
+++ b/etc/hotplug.d/button/40-wsplcd
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2013 Qualcomm Atheros, Inc..
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#
+
+
+if [ "$ACTION" = "released" -a "$BUTTON" = "wps" ]; then
+	local enable
+	enable=`/sbin/uci -q get wsplcd.config.HyFiSecurity`
+
+	if [ -n "$enable" -a "$enable" -ne 0 ] ; then
+		echo "Push button event of 1905.1 AP Auto Configuration" > /dev/console
+		echo "wps_pbc $SEEN" > /var/run/wsplc.pipe &
+	fi
+fi
diff --git a/etc/hotplug.d/button/50-wps b/etc/hotplug.d/button/50-wps
new file mode 100755
index 0000000..bbc07f3
--- /dev/null
+++ b/etc/hotplug.d/button/50-wps
@@ -0,0 +1,11 @@
+# Copyright (C) 2017 devolo AG
+
+if [ "$ACTION" = "released" -a "$BUTTON" = "BTN_2" ]; then
+    . /lib/config/uci.sh
+    MIN_HOLD_TIME=$(uci_get wireless wps min_hold_time 0)
+    MAX_HOLD_TIME=$(uci_get wireless wps max_hold_time 3)                  
+    
+    if ( [ $SEEN -ge $MIN_HOLD_TIME ] && [ $SEEN -lt $MAX_HOLD_TIME ] ); then 
+        ubus call network.wps enable '{"mode":"wps_pbc"}'
+    fi
+fi
diff --git a/etc/hotplug.d/button/51-wps-clone b/etc/hotplug.d/button/51-wps-clone
new file mode 100755
index 0000000..ee33c6e
--- /dev/null
+++ b/etc/hotplug.d/button/51-wps-clone
@@ -0,0 +1,11 @@
+# Copyright (C) 2017 devolo AG
+
+if [ "$ACTION" = "released" -a "$BUTTON" = "BTN_0" ]; then
+    . /lib/config/uci.sh
+    MIN_HOLD_TIME=$(uci_get wireless wps min_hold_time_clone 0)
+    MAX_HOLD_TIME=$(uci_get wireless wps max_hold_time_clone 3)
+    
+    if ( [ $SEEN -ge $MIN_HOLD_TIME ] && [ $SEEN -lt $MAX_HOLD_TIME ] ); then 
+        ubus call network.wps clone
+    fi
+fi
diff --git a/etc/hotplug.d/button/51-wps-reset b/etc/hotplug.d/button/51-wps-reset
new file mode 100644
index 0000000..b9feb25
--- /dev/null
+++ b/etc/hotplug.d/button/51-wps-reset
@@ -0,0 +1,25 @@
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+#
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+
+if [ "$ACTION" = "released" -a "$BUTTON" = "wps" ]; then
+	default_hold=12
+	if [ -f /var/run/plchost.pid ]
+	then
+		default_hold=12
+	fi
+	if [ "$SEEN" -gt $default_hold ]; then
+		echo "" > /dev/console
+		echo "RESET TO FACTORY SETTING EVENT DETECTED" > /dev/console
+		echo "PLEASE WAIT WHILE REBOOTING THE DEVICE..." > /dev/console
+		rm -rf /overlay/*
+		reboot
+	fi
+fi
diff --git a/etc/hotplug.d/button/52-wps-supplicant b/etc/hotplug.d/button/52-wps-supplicant
new file mode 100644
index 0000000..df6eb11
--- /dev/null
+++ b/etc/hotplug.d/button/52-wps-supplicant
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+#
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+
+activate_pbc_for_sta_iface() {
+	local config=$1
+	local ifname
+	local mode
+	config_get ifname "$config" ifname
+	config_get mode "$config" mode
+
+	if [ $mode == "sta" ]; then
+		local wps_pbc
+		local wps_pbc_skip_connected_sta
+		config_get wps_pbc "$config" wps_pbc 0
+		config_get wps_pbc_skip_connected_sta "$config" wps_pbc_skip_connected_sta 0
+		if [ $wps_pbc -gt 0 ]; then
+			if [ $wps_pbc_skip_connected_sta -eq 0 ] ||
+			    iwconfig $ifname | head -2 | tail -1 | grep -q "Not-Associated"; then
+				wpa_cli -p "$dir" wps_pbc
+			fi
+		fi
+	fi
+}
+
+pid=
+if [ "$ACTION" = "pressed" -a "$BUTTON" = "wps" ]; then
+    [ -r /var/run/son_active ] && exit 0
+	if [ -r /var/run/wifi-wps-enhc-extn.conf ] &&
+		[ ! -r /var/run/son.conf ]; then
+		exit 0
+	fi
+	config_load wireless
+	for dir in /var/run/wpa_supplicant-*; do
+		[ -d "$dir" ] || continue
+		pid=/var/run/wps-hotplug-${dir#"/var/run/wpa_supplicant-"}.pid
+		config_foreach activate_pbc_for_sta_iface wifi-iface
+		[ -f $pid ] || {
+			wpa_cli -p"$dir" -a/lib/wifi/wps-supplicant-update-uci -P$pid -B
+		}
+	done
+fi
diff --git a/etc/hotplug.d/button/53-wps-repacd b/etc/hotplug.d/button/53-wps-repacd
new file mode 100755
index 0000000..b5df1e6
--- /dev/null
+++ b/etc/hotplug.d/button/53-wps-repacd
@@ -0,0 +1,15 @@
+#
+# Copyright (c) 2015 Qualcomm Atheros, Inc..
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#
+
+if [ "$ACTION" = "released" -a "$BUTTON" = "wps" ]; then
+	enable=`/sbin/uci -q get repacd.repacd.Enable`
+
+	PIPE_NAME='/var/run/repacd.pipe'
+	if [ -n "$enable" -a "$enable" -ne 0 -a -p $PIPE_NAME ] ; then
+		echo "wps_pbc" > $PIPE_NAME &
+	fi
+fi
diff --git a/etc/hotplug.d/button/54-wps-extender b/etc/hotplug.d/button/54-wps-extender
new file mode 100644
index 0000000..8fe7c64
--- /dev/null
+++ b/etc/hotplug.d/button/54-wps-extender
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+#
+# Copyright (c) 2015, The Linux Foundation. All rights reserved.
+#
+
+if [ "$ACTION" = "pressed" -a "$BUTTON" = "wps" ]; then
+	local num
+	if [ -r /var/run/son.conf ] ||
+		[ -r /var/run/son_active ]; then
+		exit 0
+	fi
+	[ -r /var/run/wifi-wps-enhc-extn.conf ] || exit 0
+	echo "" > /dev/console
+	echo "WPS PUSH BUTTON EVENT DETECTED" > /dev/console
+
+	num=`grep -w "RADIO" /var/run/wifi-wps-enhc-extn.conf | wc -l`
+
+	if [ -r /var/run/wifi-wps-enhc-extn.pid ]; then
+		kill "$(cat "/var/run/wifi-wps-enhc-extn.pid")"
+		sleep 1
+	fi
+
+	if [ -r /var/run/wifi-wps-enhc-extn.pid ]; then
+		rm -f /var/run/wifi-wps-enhc-extn.pid
+		exit 0
+	fi
+
+	echo "START APP TO HANDLE WPS PUSH BUTTON EVENT" > /dev/console
+	/usr/sbin/wps_enhc -b /var/run/wifi-wps-enhc-extn.pid -n $num \
+				-d 128 -l /var/run/wifi-wps-enhc-extn.log
+fi
+
diff --git a/etc/hotplug.d/button/60-plc-uptime b/etc/hotplug.d/button/60-plc-uptime
new file mode 100755
index 0000000..3509f1d
--- /dev/null
+++ b/etc/hotplug.d/button/60-plc-uptime
@@ -0,0 +1,8 @@
+# Copyright (C) 2018 devolo AG
+
+if [ "$ACTION" = "released" -a "$BUTTON" = "BTN_0" ]; then
+    uptime=$(cat /proc/uptime)
+    uptime=${uptime%% *}
+    echo $uptime > /tmp/cs_uptime
+fi
+
diff --git a/etc/hotplug.d/edge/10-apconf b/etc/hotplug.d/edge/10-apconf
new file mode 100755
index 0000000..bba46c5
--- /dev/null
+++ b/etc/hotplug.d/edge/10-apconf
@@ -0,0 +1,50 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+logger -t hotplug-edge -p user.info "edge detection sees $EVENT $STATE"
+
+. /lib/functions/repacd-netdet.sh
+
+if [ "$EVENT" = "location" ]; then
+    case $STATE in
+    cap )
+        netdet_detect_cap_bridge_router_mode
+         __gCapDetectVal=$?
+        case $__gCapDetectVal  in
+        $NETDET_CAP_BRIDGE_ROUTER_RESULT_ROUTER )
+            repacd_netdet_get_current_device_mode
+            if [ $? -ne $NETDET_CURRENT_MODE_ROOTAP ]; then
+                netdet_configure_cap_router_mode
+            fi
+            ;;
+        $NETDET_CAP_BRIDGE_ROUTER_RESULT_BRIDGE )
+            repacd_netdet_get_current_device_mode
+            if [ $? -ne $NETDET_CURRENT_MODE_RE ]; then
+                netdet_configure_cap_bridge_mode
+            fi
+            ;;
+        *)
+            echo "error: unknown mode: $result" >&2
+            return 3
+        ;;
+        esac
+        netdet_set_mode_db "cap"
+        ;;
+    re )
+            repacd_netdet_get_current_device_mode
+            if [ $? -ne $NETDET_CURRENT_MODE_RE ]; then
+                repacd_netdet_set_current_device_mode re
+            fi
+            netdet_set_mode_db "re"
+        ;;
+    unknown )
+            netdet_set_mode_db "unknown"
+        ;;
+    * )
+        logger -t hotplug-edge -p user.error "unknown state: $STATE"
+        ;;
+    esac
+fi
diff --git a/etc/hotplug.d/firmware/10-ath9k-eeprom b/etc/hotplug.d/firmware/10-ath9k-eeprom
new file mode 100644
index 0000000..48dd89c
--- /dev/null
+++ b/etc/hotplug.d/firmware/10-ath9k-eeprom
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+ath9k_eeprom_die() {
+	echo "ath9k eeprom: " "$*"
+	exit 1
+}
+
+ath9k_eeprom_extract() {
+	local part=$1
+	local offset=$2
+	local count=$3
+	local mtd
+
+	mtd=$(find_mtd_chardev $part)
+	[ -n "$mtd" ] || \
+		ath9k_eeprom_die "no mtd device found for partition $part"
+
+	dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
+		ath9k_eeprom_die "failed to extract from $mtd"
+}
+
+ath9k_patch_firmware_mac() {
+	local mac=$1
+
+	[ -z "$mac" ] && return
+
+	macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=2 count=6
+}
+
+[ -e /lib/firmware/$FIRMWARE ] && exit 0
+
+. /lib/ar71xx.sh
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+board=$(ar71xx_board_name)
+
+case "$FIRMWARE" in
+"soc_wmac.eeprom")
+	case $board in
+	r6100 | \
+	wndr3700v4 | \
+	wndr4300)
+		ath9k_eeprom_extract "caldata" 4096 2048
+		ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0)
+		;;
+	cus532k)
+		ath9k_eeprom_extract "caldata" 4096 4096
+		;;
+	*)
+		ath9k_eeprom_die "board $board is not supported yet"
+		;;
+	esac
+	;;
+
+"pci_wmac0.eeprom")
+	case $board in
+	cus532k |\
+	wndr3700v4 | \
+	wndr4300)
+		ath9k_eeprom_extract "caldata" 20480 2048
+		ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 12)
+		;;
+	*)
+		ath9k_eeprom_die "board $board is not supported yet"
+		;;
+	esac
+	;;
+esac
diff --git a/etc/hotplug.d/firmware/11-ath10k-caldata b/etc/hotplug.d/firmware/11-ath10k-caldata
new file mode 100644
index 0000000..3919f68
--- /dev/null
+++ b/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+ath10kcal_die() {
+	echo "ath10cal: " "$*"
+	exit 1
+}
+
+ath10kcal_from_file() {
+	local source=$1
+	local offset=$2
+	local count=$3
+
+	dd if=$source of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
+		ath10kcal_die "failed to extract calibration data from $source"
+}
+
+ath10kcal_extract() {
+	local part=$1
+	local offset=$2
+	local count=$3
+	local mtd
+
+	mtd=$(find_mtd_chardev $part)
+	[ -n "$mtd" ] || \
+		ath10kcal_die "no mtd device found for partition $part"
+
+	dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
+		ath10kcal_die "failed to extract calibration data from $mtd"
+}
+
+ath10kcal_patch_mac() {
+	local mac=$1
+
+	[ -z "$mac" ] && return
+
+	macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 seek=6 count=6
+}
+
+[ -e /lib/firmware/$FIRMWARE ] && exit 0
+
+. /lib/ar71xx.sh
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+board=$(ar71xx_board_name)
+
+case "$FIRMWARE" in
+"ath10k/cal-pci-0000:00:00.0.bin")
+	case $board in
+	dvl-1200e | \
+	dvl-1200i | \
+	dvl-1750e | \
+	dvl-1750i | \
+	dvl-1750c | \
+	dvl-1750x | \
+	dlan-pro-1200-ac)
+		ath10kcal_extract "art" 20480 2116
+		;;
+	dw33d)
+		ath10kcal_extract "art" 20480 2116
+		ath10kcal_patch_mac $(mtd_get_mac_binary art 18)
+		;;
+	mc-mac1200r)
+		ath10kcal_extract "art" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -1)
+		;;
+	tl-wdr6500-v2)
+		ath10kcal_extract "art" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2)
+		;;
+	r6100)
+		ath10kcal_extract "caldata" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) +2)
+		;;
+	qihoo-c301)
+		ath10kcal_extract "radiocfg" 20480 2116
+		ath10kcal_patch_mac $(mtd_get_mac_ascii devdata wlan5mac)
+		;;
+	esr1750 | \
+	epg5000)
+		ath10kcal_extract "caldata" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
+		;;
+	mr1750)
+	mr1750v2 | \
+	om5p-acv2)
+		ath10kcal_extract "ART" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
+		;;
+	unifiac)
+		ath10kcal_extract "EEPROM" 20480 2116
+		;;
+	esac
+	;;
+"ath10k/cal-pci-0000:01:00.0.bin")
+	case $board in
+	archer-c5 | \
+	archer-c7)
+		ath10kcal_extract "art" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2)
+		;;
+	nbg6616 | \
+	nbg6716)
+		ath10kcal_extract "RFdata" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2)
+		;;
+	rb-911g-5hpacd)
+		ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 20480 2116
+		;;
+	om5p-ac)
+		ath10kcal_extract "ART" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +16)
+		;;
+	esac
+	;;
+*)
+	exit 1
+	;;
+esac
diff --git a/etc/hotplug.d/iface/00-netstate b/etc/hotplug.d/iface/00-netstate
new file mode 100644
index 0000000..023025c
--- /dev/null
+++ b/etc/hotplug.d/iface/00-netstate
@@ -0,0 +1,7 @@
+[ ifup = "$ACTION" ] && {
+	uci_toggle_state network "$INTERFACE" up 1
+	[ -n "$DEVICE" ] && {
+		uci_toggle_state network "$INTERFACE" device "$(uci -q get network.$INTERFACE.ifname)"
+		uci_toggle_state network "$INTERFACE" ifname "$DEVICE"
+	}
+}
diff --git a/etc/hotplug.d/iface/01-minissdp b/etc/hotplug.d/iface/01-minissdp
new file mode 100644
index 0000000..8a9935e
--- /dev/null
+++ b/etc/hotplug.d/iface/01-minissdp
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+[ ifup = "$ACTION" ] && {
+        [ "$INTERFACE" == "lan6" ] && {
+                /etc/init.d/miniupnpd restart
+        }
+}
+
diff --git a/etc/hotplug.d/iface/20-firewall b/etc/hotplug.d/iface/20-firewall
new file mode 100644
index 0000000..f1eab00
--- /dev/null
+++ b/etc/hotplug.d/iface/20-firewall
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+[ "$ACTION" = ifup -o "$ACTION" = ifupdate ] || exit 0
+[ "$ACTION" = ifupdate -a -z "$IFUPDATE_ADDRESSES" -a -z "$IFUPDATE_DATA" ] && exit 0
+
+/etc/init.d/firewall enabled || exit 0
+
+fw3 -q network "$INTERFACE" >/dev/null || exit 0
+
+logger -t firewall "Reloading firewall due to $ACTION of $INTERFACE ($DEVICE)"
+fw3 -q reload
diff --git a/etc/hotplug.d/iface/20-ntpd b/etc/hotplug.d/iface/20-ntpd
new file mode 100755
index 0000000..67a4d6a
--- /dev/null
+++ b/etc/hotplug.d/iface/20-ntpd
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+NAME=ntpd
+COMMAND=/etc/init.d/$NAME
+
+[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && {
+	$COMMAND enabled && {
+		$COMMAND restart
+        }
+}
diff --git a/etc/hotplug.d/iface/30-relay b/etc/hotplug.d/iface/30-relay
new file mode 100644
index 0000000..afffbfe
--- /dev/null
+++ b/etc/hotplug.d/iface/30-relay
@@ -0,0 +1,2 @@
+#!/bin/sh
+/etc/init.d/relayd enabled && /etc/init.d/relayd start
diff --git a/etc/hotplug.d/iface/30-repacd b/etc/hotplug.d/iface/30-repacd
new file mode 100755
index 0000000..4cb17aa
--- /dev/null
+++ b/etc/hotplug.d/iface/30-repacd
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+[ "$ACTION" = ifup ] || exit 0
+
+. /lib/functions/repacd-netdet.sh
+
+if [ $(uci get repacd.repacd.EnableEthernetMonitoring) -eq 1 ] && ps | grep lldpd > /dev/null; then
+	repacd_netdet_lldpd_init restart
+fi
diff --git a/etc/hotplug.d/iface/50-miniupnpd b/etc/hotplug.d/iface/50-miniupnpd
new file mode 100644
index 0000000..320437e
--- /dev/null
+++ b/etc/hotplug.d/iface/50-miniupnpd
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+/etc/init.d/miniupnpd enabled || exit 0
+
+. /lib/functions/service.sh
+
+# If miniupnpd is not running:
+# - check on _any_ event (even updates may contribute to network_find_wan*)
+
+# If miniupnpd _is_ running:
+# - check only on ifup (otherwise lease updates etc would cause
+#   miniupnpd state loss)
+
+[ ! "$ACTION" = "ifup" ] && service_check /usr/sbin/miniupnpd && exit 0
+
+tmpconf="/var/etc/miniupnpd.conf"
+extiface=$(uci get upnpd.config.external_iface)
+extzone=$(uci get upnpd.config.external_zone)
+
+. /lib/functions/network.sh
+
+for iface in $(uci get upnpd.config.internal_iface); do
+    network_get_device device $iface
+    [ "$DEVICE" = "$device" ] && /etc/init.d/miniupnpd restart && exit 0
+done
+
+
+if [ -z "$extiface" ] ; then
+  # manual external zone (if dynamically find interfaces
+  # belonging to it) overrides network_find_wan*
+  if [ -n "$extzone" ] ; then
+    ifname=$(fw3 -q zone $extzone | head -1)
+  fi
+  [ -n "$extiface" ] || network_find_wan extiface
+  [ -n "$extiface" ] || network_find_wan6 extiface
+fi
+
+[ -n "$ifname" ] || network_get_device ifname ${extiface}
+grep -q "ext_ifname=$ifname" $tmpconf || /etc/init.d/miniupnpd restart
diff --git a/etc/hotplug.d/net/00-sysctl b/etc/hotplug.d/net/00-sysctl
new file mode 100644
index 0000000..5d9da8a
--- /dev/null
+++ b/etc/hotplug.d/net/00-sysctl
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if [ -f /etc/sysctl.conf ] && [ "$ACTION" = add ]; then
+	sed -ne "/^[[:space:]]*net\..*\.$DEVICENAME\./p" /etc/sysctl.conf | \
+		sysctl -e -p - | logger -t sysctl
+fi
diff --git a/etc/hotplug.d/net/10-ar922x-led-fix b/etc/hotplug.d/net/10-ar922x-led-fix
new file mode 100644
index 0000000..1024150
--- /dev/null
+++ b/etc/hotplug.d/net/10-ar922x-led-fix
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+# For AR9220 and AR9223, GPIO JTAG must explicit be disabled
+# before LEDs start working. Do this when wifi device is
+# detected.
+
+#
+# $DEVPATH is not valid for some boards (including WZR-HP-AG300H).
+# Manipulate the $DEVPATH to reach the corresponding phyN.
+#
+
+devdir=`dirname $DEVPATH`
+devdir=`dirname $devdir`
+phydir=/sys$devdir/ieee80211
+phyname=`cat $phydir/phy*/name`
+
+if [ -z $phyname -o $ACTION != "add" ]; then exit 0; fi
+
+#
+# ar922x_disable_gpio_jtag():
+#
+# Emulate
+#       REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL, AR_GPIO_JTAG_DISABLE);
+# for AR9220 and AR9223.
+#
+
+ar922x_disable_gpio_jtag()                 
+{                                          
+        local regidx=0x4054               
+        
+	[ -f /sys/kernel/debug/ieee80211/$1/ath9k/regidx ] && {
+		echo $regidx > /sys/kernel/debug/ieee80211/$1/ath9k/regidx
+        	regval=`cat /sys/kernel/debug/ieee80211/$1/ath9k/regval`
+        	regval=$((regval | 0x20000))
+        	echo regval $regval
+    		echo $regval > /sys/kernel/debug/ieee80211/$1/ath9k/regval
+        }
+}
+
+if [ $phyname -a $ACTION = "add" ]; then
+
+	. /lib/ar71xx.sh
+	
+	case $(ar71xx_board_name) in
+		wzr-hp-ag300h)
+			ar922x_disable_gpio_jtag $phyname
+			;;
+	esac;
+fi
+
+exit 0
diff --git a/etc/hotplug.d/net/30-hyd b/etc/hotplug.d/net/30-hyd
new file mode 100755
index 0000000..6732cbe
--- /dev/null
+++ b/etc/hotplug.d/net/30-hyd
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/functions/hyfi-iface.sh
+. /lib/functions/hyfi-network.sh
+
+wan_protocol="pppoe"
+
+__wan_pppoe_mode() {
+	local ifname wan_proto
+
+	ifname=`uci get network.wan.ifname`
+	wan_proto=`uci get network.wan.proto`
+
+	case "$ACTION" in
+		add)
+		if [[ "${ifname}" = "${INTERFACE}"  -a  "${wan_protocol}" = "${wan_proto}" ]];
+		then
+			return 1
+		fi
+		;;
+		remove)
+		if [[ "${ifname}" = "${INTERFACE}"  -a  "${wan_protocol}" = "${wan_proto}" ]];
+		then
+			return 1
+		fi
+		;;
+	esac
+	return 0
+}
+
+hyd_restart_aggr() {
+	local fileflag="/tmp/.hyd.restart.pending"
+
+	touch "$fileflag"
+
+	sleep 7
+
+	[ -f "$fileflag" ] || return
+
+	a=`stat -c %Y $fileflag`
+	b=`date +%s`
+	c=`expr $b - $a`
+	[ "$c" -ge 7 ] || return
+
+	[ -f "$fileflag" ] || return
+	rm -f $fileflag
+
+	/etc/init.d/hyd restart
+}
+
+hyd_restart() {
+	local exescript
+
+	exescript=`ls /etc/hotplug.d/net/*hyd* 2>&-`
+	[ -n "$exescript" ] || return
+
+	# Restart with aggregation(background)
+	exescript="$exescript &"
+	eval $exescript
+}
+
+trap '' INT TERM ABRT QUIT ALRM
+
+local enabled
+config_load 'hyd'
+config_get_bool enabled config 'Enable' '0'
+[ "$enabled" -eq 0 ] && return
+
+if [ -n "$1" ] ; then # Called by hotplugd
+	case "$INTERFACE" in
+		ath*|eth*|eth*.*|br*)
+		__wan_pppoe_mode
+			if [ "$?" -eq 0 ]; then
+				hyd_restart
+			fi
+		;;
+	esac
+else                  # Called directly
+	hyd_restart_aggr
+fi
+
diff --git a/etc/hotplug.d/net/50-autoipd b/etc/hotplug.d/net/50-autoipd
new file mode 100644
index 0000000..a36051f
--- /dev/null
+++ b/etc/hotplug.d/net/50-autoipd
@@ -0,0 +1,20 @@
+# create avahi state directory
+mkdir -p /var/lib
+
+[ add = "$ACTION" ] && {
+	[ -n "$INTERFACE" ] && {
+		[ "$DEVTYPE" = "bridge" ] && INTERFACE=${INTERFACE#br-}
+		AUTOIP_OPT=$(uci -q get network.${INTERFACE}.autoip)
+		[ "${AUTOIP_OPT}" = "yes" ] && {
+			avahi-autoipd -s -D ${DEVICENAME}
+		}
+	}
+}
+
+[ remove = "$ACTION" ] && {
+	[ -n "$INTERFACE" ] && {
+		# no use in checking the config, it is gone
+		avahi-autoipd -s -k ${DEVICENAME}
+	}
+}
+
diff --git a/etc/hotplug.d/net/90-plc-standby b/etc/hotplug.d/net/90-plc-standby
new file mode 100644
index 0000000..0c96ece
--- /dev/null
+++ b/etc/hotplug.d/net/90-plc-standby
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# act on wlan devices and broken events for qca proprietary devices which all have no DEVTYPE!
+[ "$DEVTYPE" = "wlan" ] ||
+		[ "$DEVTYPE${DEVICENAME%%[0-9]*}" = "wifi" ] ||
+		[ "$DEVTYPE${DEVICENAME%%[0-9]*}" = "ath" ] ||
+		exit 0
+
+. /lib/config/uci.sh
+# uci_ lib works on temporary config files here which are not persistent
+UCI_CONFIG_DIR=/var/run
+CONFIG=plc-standby
+
+# create initial config file
+uci_set_default $CONFIG <<'EOF'
+	config status 'status'
+		option timeout '0'
+EOF
+
+[ "$DEVTYPE${DEVICENAME%%[0-9]*}" = "wifi" ] && exit 0
+
+# check added/removed device
+if [ "$DEVTYPE" = "wlan" ]; then
+	# strange behavior on ath9/10k!
+	# on boot wlanX interface is added for all radios, then removed for radios without enabled interfaces,
+	# but not for disabled radios.
+	# ubus call not yet possible at this early boot stage. ignore this add when ubus fails.
+	# or we could ignore the first added of a phy
+	ubus call network.wireless status >/dev/null 2>&1 || exit
+fi
+
+devices=$(uci_get $CONFIG status wlandevs)
+
+case "$ACTION" in
+add)
+	logger -t dlanx-standby "device $DEVICENAME added"
+	devices="${devices//"$DEVICENAME "/}$DEVICENAME "
+	uci_set $CONFIG status wlandevs "$devices"
+	uci_commit $CONFIG
+	;;
+remove)
+	logger -t dlanx-standby "device $DEVICENAME removed"
+	devices="${devices//"$DEVICENAME "/}"
+	uci_set $CONFIG status wlandevs "$devices"
+	uci_commit $CONFIG
+	;;
+*)
+	exit
+	;;
+esac
diff --git a/etc/hotplug.d/ntp/10-parental-control b/etc/hotplug.d/ntp/10-parental-control
new file mode 100755
index 0000000..0010cb2
--- /dev/null
+++ b/etc/hotplug.d/ntp/10-parental-control
@@ -0,0 +1,5 @@
+# Copyright (C) 2018 devolo AG
+
+if [ "$ACTION" = "stratum" ]; then
+    /usr/bin/parental_control.sh check
+fi
diff --git a/etc/hotplug.d/ntp/10-wifi-schedule b/etc/hotplug.d/ntp/10-wifi-schedule
new file mode 100755
index 0000000..dff1ffe
--- /dev/null
+++ b/etc/hotplug.d/ntp/10-wifi-schedule
@@ -0,0 +1,5 @@
+# Copyright (C) 2018 devolo AG
+
+if [ "$ACTION" = "stratum" ]; then
+    /usr/bin/wifi_schedule.sh check
+fi
diff --git a/etc/hotplug.d/switch/10-lp b/etc/hotplug.d/switch/10-lp
new file mode 100755
index 0000000..efbd831
--- /dev/null
+++ b/etc/hotplug.d/switch/10-lp
@@ -0,0 +1,28 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+logger -t hotplug-switch -p user.info "loop prevention acting on port $PORT $STATE"
+
+. /lib/functions/repacd-lp.sh
+
+case $EVENT in
+link)
+	if [ $STATE = "up" ]; then
+		lp_onlinkup $PORT
+	elif [ $STATE = "down" ]; then
+		lp_onlinkdown $PORT
+	fi
+	;;
+direction)
+	if [ $STATE = "downstream" ]; then
+		lp_ondownstream $PORT
+	elif [ $STATE = "upstream" ]; then
+		lp_onupstream $PORT
+	fi
+	;;
+net)
+	;;
+esac
diff --git a/etc/hotplug.d/switch/20-netdet b/etc/hotplug.d/switch/20-netdet
new file mode 100755
index 0000000..a46c6e5
--- /dev/null
+++ b/etc/hotplug.d/switch/20-netdet
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+. /lib/functions/repacd-netdet.sh
+
+ENABLED=$(uci get repacd.repacd.EnableLANWANDetect)
+
+if [ "$ENABLED" -eq 1 ] && [ "$EVENT" == "direction" ] && [ "$STATE" == "upstream" ]; then
+    logger -t hotplug-switch -p user.info "detecting mode because port $PORT is $STATE"
+    pkill -9 -f repacd-detect_device_mode.sh 2>/dev/null || true
+    logger -t hotplug-switch -p user.debug "waiting for DHCP address"
+    sleep 5
+    repacd_netdet_wait_for_dhcp_addr eth0
+    if [ $? -eq 1 ]; then
+        logger -t hotplug-switch -p user.debug "we timed out waiting for a DHCP address"
+    else
+        logger -t hotplug-switch -p user.debug "we got a DHCP address"
+    fi
+    repacd-detect_device_mode.sh &
+fi
diff --git a/etc/hotplug.json b/etc/hotplug.json
new file mode 100644
index 0000000..91ed366
--- /dev/null
+++ b/etc/hotplug.json
@@ -0,0 +1,93 @@
+[
+	[ "case", "ACTION", {
+		"add": [
+			[ "if",
+				[ "and",
+					[ "has", "MAJOR" ],
+					[ "has", "MINOR" ],
+				],
+				[
+					[ "if",
+						[ "or",
+							[ "eq", "DEVNAME",
+								[ "null", "full", "ptmx", "zero" ],
+							],
+							[ "regex", "DEVNAME",
+								[ "^gpio", "^hvc" ],
+							],
+						],
+						[
+							[ "makedev", "/dev/%DEVNAME%", "0666" ],
+							[ "return" ],
+						]
+					],
+					[ "if",
+						[ "or",
+							[ "eq", "DEVNAME", "mapper/control" ],
+							[ "regex", "DEVPATH", "^ppp" ],
+						],
+						[
+							[ "makedev", "/dev/%DEVNAME%", "0600" ],
+							[ "return" ],
+						],
+					],
+					[ "if",
+						[ "has", "DEVNAME" ],
+						[ "makedev", "/dev/%DEVNAME%", "0644" ],
+					],
+				],
+			],
+			[ "if",
+				[ "has", "FIRMWARE" ],
+				[
+					[ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ],
+					[ "load-firmware", "/lib/firmware" ],
+					[ "return" ]
+				]
+			],
+		],
+		"remove" : [
+			[ "if",
+				[ "and",
+					[ "has", "DEVNAME" ],
+					[ "has", "MAJOR" ],
+					[ "has", "MINOR" ],
+				],
+				[ "rm", "/dev/%DEVNAME%" ]
+			]
+		]
+	} ],
+	[ "if",
+		[ "eq", "SUBSYSTEM", "platform" ],
+		[ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ]
+	],
+	[ "if",
+		[ "and",
+			[ "has", "BUTTON" ],
+			[ "eq", "SUBSYSTEM", "button" ]
+		],
+		[ "if",
+                        [ "regex", "UCI_BTN_DISABLED", ["^0"]],
+                        [
+                                [ "button", "/etc/rc.button/%BUTTON%"],
+                                [ "exec", "/sbin/hotplug-call", "button" ]
+                        ]
+                ]
+
+	],
+	[ "if",
+		[ "eq", "SUBSYSTEM",
+			[ "net", "input", "usb", "usbmisc", "ieee1394", "block", "atm", "zaptel", "tty", "dump" ]
+		],
+		[ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ]
+	],
+	[ "if",
+		[ "and",
+			[ "eq", "SUBSYSTEM", "usb-serial" ],
+			[ "regex", "DEVNAME",
+				[ "^ttyUSB", "^ttyACM" ]
+			],
+		],
+		[ "exec", "/sbin/hotplug-call", "tty" ]
+	],
+]
diff --git a/etc/init.d/acd b/etc/init.d/acd
new file mode 100755
index 0000000..70d1dd0
--- /dev/null
+++ b/etc/init.d/acd
@@ -0,0 +1,480 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2013 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+START=50
+
+SERVICE_WRITE_PID=1
+SERVICE_DAEMONIZE=1
+#SERVICE_DEBUG=1
+NETWORK_RESTART=0
+SERVICE_DEBUG_OUTPUT=0
+ACD_DEBUG_OUTOUT=0
+SERVICE_PATH="/usr/sbin/acd"
+
+ACD_CONFIG_FILE="/tmp/acd.conf"
+WIRELESS_CONFIG_FILE="/etc/config/wireless"
+
+EXTRA_COMMANDS="restart_in_hc_mode restart_in_hr_mode"
+EXTRA_HELP=<<EOF
+        restart_in_hc_mode Reconfigure the system in Hybrid Client mode
+        restart_in_hr_mode Reconfigure the system in Hybrid Router mode
+EOF
+
+. /lib/functions/hyfi-debug.sh
+. /lib/functions/hyfi-iface.sh
+. /lib/functions/hyfi-network.sh
+
+ieee1905managed= config_changed=
+wsplcd_start=0 wsplcd_restart=0
+hyd_start=0 vhyfid_start=0
+
+__acd_echo() {
+	if [ "$ACD_DEBUG_OUTOUT" -gt 0 ]; then
+		echo "acd: $1" > /dev/console
+	else
+		echo "acd: $1"
+	fi
+}
+
+__acd_append_wireless() {
+    echo "$1" >> "$WIRELESS_CONFIG_FILE"
+}
+
+__acd_router_mode() {
+	local wan_iface
+
+	config_load network
+	config_get wan_iface wan ifname
+
+	[ -n "$wan_iface" ] && return 1
+
+	return 0
+}
+
+__acd_get_freq_from_standard() {
+	config_get hwmode $1 hwmode '11ng'
+
+	case "$hwmode" in
+		11ac|11na|11a)
+			eval "$2='5G'"
+		;;
+
+		*)
+			eval "$2='2G'"
+		;;
+	esac
+}
+
+__acd_vaps_in_default_config() {
+	local ssid encryption last_vap
+
+	ssid=`uci show wireless | grep "ssid=OpenWrt"`
+	encryption=`uci show wireless | grep "encryption=none"`
+
+	__acd_echo "ssid=$ssid encryption=$encryption"
+
+	if [ -n "$ssid" -a -n "$encryption" ]; then
+		return 1
+	fi
+
+	last_vap=`uci show wireless.@wifi-iface[-1]`
+	__acd_echo "last_vap=$last_vap"
+	[ -z "$last_vap" ] && return 1
+
+	return 0
+}
+
+__acd_destroy_vaps() {
+	local retval
+
+	/sbin/wifi down
+	/etc/init.d/network stop
+	uci delete wireless.@wifi-iface[0] 2>/dev/null; retval=$?
+
+	while [ "$retval" -eq 0 ]; do
+		uci delete wireless.@wifi-iface[0] 2>/dev/null
+		retval=$?
+	done
+
+	uci commit wireless
+}
+
+__acd_enable_wifi() {
+	local DEVICES=
+	local device changed=0
+
+	config_cb() {
+			local type="$1"
+			local section="$2"
+
+			case "$type" in
+					wifi-device)
+							append DEVICES "$section"
+					;;
+			esac
+	}
+	config_load wireless
+
+	for device in $DEVICES ; do
+		config_get_bool disabled $device disabled
+		[ -z "$disabled" ] && continue
+		[ "$disabled" -eq 0 ] && continue
+
+		uci_set wireless $device disabled '0'
+		changed=1
+	done
+
+	if [ "$changed" -gt 0 ]; then
+		uci_commit wireless
+		config_changed=1
+	fi
+}
+
+__acd_create_vaps() {
+	local DEVICES=
+	local HYFI_SEED=
+	local AP_disabled=0 STA_disabled=0
+
+	config_cb() {
+		local type="$1"
+		local section="$2"
+
+		case "$type" in
+			wifi-device)
+				append DEVICES "$section"
+			;;
+		esac
+	}
+	config_load wireless
+
+	HYFI_SEED=`ifconfig br-$ieee1905managed | grep HWaddr | awk '{print $5}' | awk -F":" '{print $4$5$6}'`
+
+	if [ -z "$DEVICES" ]; then
+		DEVICES=`ls /sys/class/net/wifi* -d1 | awk -F/ '{print $NF}'`
+	fi
+
+	for device in $DEVICES ; do
+		uci_set wireless $device disabled '0'
+
+		__acd_append_wireless ""
+		__acd_append_wireless "config wifi-iface"
+		__acd_append_wireless "		option device '$device'"
+		__acd_append_wireless "		option mode 'ap'"
+		__acd_append_wireless "		option athnewind '0'"
+		__acd_append_wireless "		option ssid 'Hy-Fi Network $HYFI_SEED'"
+		__acd_append_wireless "		option wds '1'"
+		__acd_append_wireless "		option network '$ieee1905managed'"
+		__acd_append_wireless "		option encryption 'psk2'"
+		__acd_append_wireless "		option key 'hyfi$HYFI_SEED'"
+		__acd_append_wireless "		option wps_pbc '1'"
+		__acd_append_wireless "		option disabled '$AP_disabled'"
+		__acd_append_wireless ""
+		__acd_append_wireless "config wifi-iface"
+		__acd_append_wireless "		option device '$device'"
+		__acd_append_wireless "		option mode 'sta'"
+		__acd_append_wireless "		option athnewind '0'"
+		__acd_append_wireless "		option ssid 'Hy-Fi Network $HYFI_SEED'"
+		__acd_append_wireless "		option wds '1'"
+		__acd_append_wireless "		option network '$ieee1905managed'"
+		__acd_append_wireless "		option encryption 'psk2'"
+		__acd_append_wireless "		option key 'hyfi$HYFI_SEED'"
+		__acd_append_wireless "		option wps_pbc '1'"
+		__acd_append_wireless "		option disabled '$STA_disabled'"
+		__acd_append_wireless ""
+	done
+	uci_commit wireless
+}
+
+# __acd_disable_vaps
+# input: $1 config
+# input: $2 network
+# input: $3 mode: sta or ap
+# input: $4 1 - disable, 0 - enable
+# input-output: $5 change counter
+__acd_disable_vaps() {
+	local config="$1"
+	local mode network disabled
+	local changed="$5"
+
+	config_get mode "$config" mode
+	config_get network "$config" network
+	config_get disabled "$config" disabled
+
+	if [ "$2" = "$network" -a "$3" = "$mode" -a ! "$4" = "$disabled" ]; then
+		uci_set wireless $config disabled $4
+		changed=$((changed + 1))
+		eval "$5='$changed'"
+		__acd_echo "Set VAP $config to Disabled=$4"
+	fi
+}
+
+__acd_config_hr_mode() {
+	config_load hyd
+	config_get mode config 'Mode'
+
+	if [ ! "$mode" = 'HYROUTER' ]; then
+		uci_set hyd config 'Mode' 'HYROUTER'
+		config_changed=1
+		uci commit hyd
+		__acd_echo "Set hyd in HR mode"
+	fi
+
+	config_load wsplcd
+	config_get mode config 'RunMode'
+
+	if [ ! "$mode" = 'REGISTRAR' ]; then
+		uci_set wsplcd config 'RunMode' 'REGISTRAR'
+		config_changed=1
+		uci commit wsplcd
+		__acd_echo "Set wsplcd in REGISTRAR mode"
+		wsplcd_restart=1
+	fi
+
+	config_load wireless
+	config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'sta' '1' config_changed
+	config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'ap' '0' config_changed
+	uci commit wireless
+}
+
+__acd_config_hc_mode() {
+	config_load hyd
+	config_get mode config 'Mode'
+
+	if [ ! "$mode" = 'HYCLIENT' ]; then
+		uci_set hyd config 'Mode' 'HYCLIENT'
+		config_changed=1
+		uci commit hyd
+		__acd_echo "Set hyd in HC mode"
+	fi
+
+	config_load wsplcd
+	config_get mode config 'RunMode'
+
+	if [ ! "$mode" = 'ENROLLEE' ]; then
+		uci_set wsplcd config 'RunMode' 'ENROLLEE'
+		config_changed=1
+		uci commit wsplcd
+		__acd_echo "Set wsplcd in ENROLLEE mode"
+		wsplcd_restart=1
+	fi
+
+	config_load wireless
+	config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'sta' '0' config_changed
+	config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'ap' '1' config_changed
+	uci commit wireless
+}
+
+__acd_config_hc_boot_mode() {
+	config_load hyd
+	config_get mode config 'Mode'
+	config_get_bool hyd_enabled config 'Enable' 0
+	config_load vhyfid
+	config_get_bool vhyfid_enabled config 'Enable' 0
+	local disable_sta=1
+
+	if [ "$hyd_enabled" -eq 1 -a "$vhyfid_enabled" -eq 0 ]; then
+		disable_sta=0
+	fi
+
+	if [ ! "$mode" = 'HYCLIENT' ]; then
+		uci_set hyd config 'Mode' 'HYCLIENT'
+		config_changed=1
+		uci commit hyd
+		__acd_echo "Set hyd in HC mode"
+	fi
+
+	config_load wsplcd
+	config_get mode config 'RunMode'
+
+	if [ ! "$mode" = 'ENROLLEE' ]; then
+		uci_set wsplcd config 'RunMode' 'ENROLLEE'
+		config_changed=1
+		uci commit wsplcd
+		__acd_echo "Set wsplcd in ENROLLEE mode"
+		wsplcd_restart=1
+	fi
+
+	config_load wireless
+	config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'sta' $disable_sta config_changed
+	uci commit wireless
+}
+
+
+__acd_restart_dependencies() {
+	__acd_echo "Restarting network stack..."
+	hyfi_network_restart
+	if [ "$wsplcd_start" -gt 0 ]; then
+		/etc/init.d/wsplcd start
+	else
+		[ "$wsplcd_restart" -gt 0 ] && /etc/init.d/wsplcd restart
+	fi
+	[ "$hyd_start" -gt 0 ] && /etc/init.d/hyd start
+	[ "$vhyfid_start" -gt 0 ] && /etc/init.d/vhyfid start
+}
+
+start() {
+	local enabled default_vaps router_mode
+	local mode
+
+	stop
+	config_changed=0
+
+	config_load 'acd'
+	config_get_bool enabled config 'AutoConfigEnable' '0'
+
+	[ "$enabled" -gt 0 ] || {
+		return 1
+	}
+
+	hyfi_echo acd "starting Hy-Fi auto-configuration"
+	# Get the IEEE1905.1 managed bridge name
+	hyfi_get_ieee1905_managed_iface ieee1905managed
+
+	__acd_echo "Managed bridge: $ieee1905managed"
+
+	__acd_vaps_in_default_config
+
+	if [ "$?" -gt 0 ]; then
+		__acd_destroy_vaps
+		__acd_create_vaps
+		config_changed=1
+		__acd_echo "Created new VAPs"
+	fi
+
+	__acd_enable_wifi
+
+	__acd_router_mode
+	if [ "$?" -gt 0 ]; then
+		# WAN group not empty
+		__acd_config_hr_mode
+	else
+		# WAN group empty or non-existent
+		# Disable all STAs and reset hyd state
+		__acd_config_hc_boot_mode
+	fi
+
+	local vhyfid_rcd_enabled=`ls /etc/rc.d/S??vhyfid 2> /dev/null`
+
+	config_load hyd
+	config_get_bool enabled config 'Enable' 0
+	config_get hyd_control config 'Control'
+
+	if [ "$hyd_control" = "manual" ]; then
+		if [ "$enabled" -eq 0 ]; then
+			uci_set hyd config 'Enable' '1'
+			config_changed=1
+			uci commit hyd
+			hyd_start=1
+		else
+			if [ ! -f /var/run/.hyd ]; then
+				config_changed=1
+				hyd_start=1
+			fi
+		fi
+	fi
+
+	if [ -n "$vhyfid_rcd_enabled" ]; then
+		config_load vhyfid
+		config_get_bool enabled config 'Enable' 0
+
+		if [ "$enabled" -eq 0 ]; then
+			uci_set vhyfid config 'Enable' '1'
+			config_changed=1
+			uci commit vhyfid
+			__acd_echo "Enabled Virtual Hy-Fi"
+			vhyfid_start=1
+		fi
+	fi
+
+	if [ -f "/etc/init.d/wsplcd" ]; then
+		config_load wsplcd
+		config_get_bool enabled config 'HyFiSecurity' 0
+
+		if [ "$enabled" -eq 0 ]; then
+			uci_set wsplcd config 'HyFiSecurity' '1'
+			config_changed=1
+			uci commit wsplcd
+			__acd_echo "Enabled security and configuration"
+			wsplcd_start=1
+		fi
+	fi
+
+	if [ "$config_changed" -gt 0 ]; then
+		__acd_restart_dependencies
+	fi
+
+	__acd_router_mode
+	if [ "$?" -eq 0 ]; then
+		config_load hyd
+		config_get_bool hyd_enabled config 'Enable' 0
+
+		hyfi_network_sync
+		start-stop-daemon -K -n acd-run.sh -s SIGKILL >/dev/null
+		if [ "$hyd_enabled" -gt 0 ]; then
+			# Monitor Ethernet ports
+			start-stop-daemon -S -x /usr/sbin/acd-run.sh -b
+		fi
+	fi
+}
+
+stop() {
+	hyfi_network_sync
+	start-stop-daemon -K -n acd-run.sh -s SIGKILL >/dev/null
+}
+
+restart() {
+	stop
+
+	config_load 'acd'
+	config_get_bool enabled config 'AutoConfigEnable' '0'
+
+	[ "$enabled" -gt 0 ] || {
+			return 1
+	}
+
+	__acd_router_mode
+	if [ "$?" -eq 0 ]; then
+		config_load hyd
+		config_get_bool hyd_enabled config 'Enable' 0
+
+		if [ "$hyd_enabled" -gt 0 ]; then
+			# Monitor Ethernet ports
+			start-stop-daemon -S -x /usr/sbin/acd-run.sh -b
+		fi
+	else
+		start
+	fi
+}
+
+restart_in_hc_mode() {
+	hyfi_get_ieee1905_managed_iface ieee1905managed
+
+	stop
+	__acd_config_hc_mode
+	__acd_restart_dependencies
+	/etc/init.d/hyd restart
+
+	__acd_router_mode
+	if [ "$?" -eq 0 ]; then
+		# Monitor Ethernet ports
+		start-stop-daemon -S -x /usr/sbin/acd-run.sh -b
+	fi
+}
+
+restart_in_hr_mode() {
+	hyfi_get_ieee1905_managed_iface ieee1905managed
+
+	stop
+	__acd_config_hr_mode
+	__acd_restart_dependencies
+	/etc/init.d/hyd restart
+
+	__acd_router_mode
+	if [ "$?" -eq 0 ]; then
+		# Monitor Ethernet ports
+		start-stop-daemon -S -x /usr/sbin/acd-run.sh -b -- hr
+	fi
+}
diff --git a/etc/init.d/avahi-daemon b/etc/init.d/avahi-daemon
new file mode 100755
index 0000000..45923f5
--- /dev/null
+++ b/etc/init.d/avahi-daemon
@@ -0,0 +1,62 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+START=99
+USE_PROCD=1
+
+BIN=avahi-daemon
+DEFAULT=/etc/default/$BIN
+OPTIONS="-s"
+RUN_D=/var/run/$BIN
+
+PRODUCT_NAME="$(uci_get customization info product_name)"
+VENDOR_URL="$(uci_get customization info vendor_url)"
+
+inject_line() {
+    local filename="$1"
+    local grepkey="$2"
+    local inject="$3"
+    
+    local old_line=$(cat "$filename" | grep "$grepkey")
+    sed -i -e 's~'"$old_line"'~'"$inject"'~' "$filename"
+}
+
+start_service() {
+	config_load avahi
+	config_get disabled config disabled
+	if [ "$disabled" = "1" ]; then
+		return 0
+	fi
+
+	config_load uhttpd
+	config_get http_port main listen_http
+	config_get https_port main listen_https
+
+	hostname=$(uci_get system.'@system[0]'.hostname)
+	http_port=$(echo ${http_port##*:})
+	https_port=$(echo ${https_port##*:})
+	
+	inject_line "/etc/avahi/services/http.service"  "<port>" "   <port>$http_port</port>"
+	inject_line "/etc/avahi/services/https.service" "<port>" "   <port>$https_port</port>"
+	
+	inject_line "/etc/avahi/services/http.service"  "<name>" " <name>$PRODUCT_NAME</name>"
+	inject_line "/etc/avahi/services/https.service" "<name>" " <name>$PRODUCT_NAME</name>"
+	
+	inject_line "/etc/avahi/services/http.service"  "<txt-record>vendorUrl=" "   <txt-record>vendorUrl=$VENDOR_URL</txt-record>"
+	inject_line "/etc/avahi/services/https.service" "<txt-record>vendorUrl=" "   <txt-record>vendorUrl=$VENDOR_URL</txt-record>"
+	
+	[ -f $DEFAULT ] && . $DEFAULT
+	mkdir -p $RUN_D
+	#inject hostname in config
+	sed "/host-name=/s_.*_host-name=${hostname}_" /etc/avahi/avahi-daemon.conf >$RUN_D/avahi-daemon.conf
+
+	procd_open_instance
+	procd_set_param command $BIN $OPTIONS -f $RUN_D/avahi-daemon.conf
+	procd_set_param respawn
+	procd_set_param file $RUN_D/avahi-daemon.conf
+	procd_close_instance
+}
+
+service_triggers()
+{      
+	procd_add_reload_trigger avahi uhttpd system
+}  
diff --git a/etc/init.d/boot b/etc/init.d/boot
new file mode 100755
index 0000000..5c02576
--- /dev/null
+++ b/etc/init.d/boot
@@ -0,0 +1,62 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=10
+STOP=98
+
+uci_apply_defaults() {
+	. /lib/functions/system.sh
+
+	cd /etc/uci-defaults || return 0
+	files="$(ls)"
+	[ -z "$files" ] && return 0
+	mkdir -p /tmp/.uci
+	for file in $files; do
+		( . "./$(basename $file)" ) && rm -f "$file"
+	done
+	uci commit
+}
+
+boot() {
+	[ -f /proc/mounts ] || /sbin/mount_root
+	[ -f /proc/jffs2_bbc ] && echo "S" > /proc/jffs2_bbc
+	[ -f /proc/net/vlan/config ] && vconfig set_name_type DEV_PLUS_VID_NO_PAD
+
+	mkdir -p /var/run
+	mkdir -p /var/log
+	mkdir -p /var/lock
+	mkdir -p /var/state
+	mkdir -p /tmp/.uci
+	chmod 0700 /tmp/.uci
+	mkdir -p /tmp/.jail
+	touch /var/log/wtmp
+	touch /var/log/lastlog
+	touch /var/log/messages
+	touch /tmp/resolv.conf.auto
+	ln -sf /tmp/resolv.conf.auto /tmp/resolv.conf
+	grep -q debugfs /proc/filesystems && /bin/mount -o noatime -t debugfs debugfs /sys/kernel/debug
+	[ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
+
+	/sbin/kmodloader
+
+	# allow wifi modules time to settle
+	sleep 1
+
+	/bin/board_detect
+	uci_apply_defaults
+
+	[ -e /etc/delos-pts-image-marker ] || /sbin/wifi detect > /tmp/wireless.tmp
+	[ -s /tmp/wireless.tmp ] && {
+		cat /tmp/wireless.tmp >> /etc/config/wireless
+	}
+	rm -f /tmp/wireless.tmp
+
+	# temporary hack until configd exists
+	/sbin/reload_config
+
+	# create /dev/root if it doesn't exist
+	[ -e /dev/root -o -h /dev/root ] || {
+		rootdev=$(awk 'BEGIN { RS=" "; FS="="; } $1 == "root" { print $2 }' < /proc/cmdline)
+		[ -n "$rootdev" ] && ln -s "$rootdev" /dev/root
+	}
+}
diff --git a/etc/init.d/configsync b/etc/init.d/configsync
new file mode 100755
index 0000000..1f9e300
--- /dev/null
+++ b/etc/init.d/configsync
@@ -0,0 +1,95 @@
+#!/bin/sh /etc/rc.common
+
+START=98
+STOP=10
+
+USE_PROCD=1
+
+. /usr/lib/configsync_lib.sh
+
+PATH_TO_APPLY_EVENT=/usr/bin
+
+my_logger() {
+    logger -t configsync "${@}"
+}
+
+service_triggers()
+{
+    procd_add_reload_trigger_with_argument ${MY_SERVICE_NAME} ${CS_SERVICES_TO_SYNC}
+}
+
+reload_service()
+{
+    #--------------------------------------------------------------
+    # event trigger for system config changes -> copy to configsync
+    #--------------------------------------------------------------
+
+    my_logger "reload_service: received parameters: $@"
+
+    SERVICE_ENABLE=$(uci_get ${MY_SERVICE_NAME} global enabled 0)
+
+    # check if the configsync system configuration has changed
+    for CHANGED_FILE in "$@"; do
+        if [ "${CHANGED_FILE}" = "wireless" ] && [ -f /tmp/cs_omit_wireless ]; then
+            my_logger "reload_service: omitting wireless"
+            update_md5sum wireless
+            rm -f /tmp/cs_omit_wireless
+        fi
+        if [ "${CHANGED_FILE}" = "${MY_SERVICE_NAME}" ]; then
+            my_logger "reload_service: stop/start"
+            stop
+            start
+        fi
+    done
+
+    if [ ${SERVICE_ENABLE} -eq 1 ]; then
+        # wait until configfiles are not in use
+        wait_stable_config 0 5
+
+        # check if other system configurations has changed
+        for SERVICE in ${CS_SERVICES_TO_SYNC}; do
+            if [ -s $CS_SERVICELIST ] || ! check_md5sum ${SERVICE} ; then
+                killall configsync_event_delay.sh
+                ${PATH_TO_APPLY_EVENT}/configsync_event_delay.sh "$@" &
+                break
+            fi
+        done
+    else
+        my_logger "${MY_SERVICE_NAME} service not running -> trigger ignored"
+    fi
+}
+
+start_service() {
+    my_logger "start_service:"
+
+    if [ ! -f $CS_MD5SUMS ]; then
+        >$CS_MD5SUMS
+    fi
+
+    if [ ! -f $CS_SERVICELIST ]; then
+        >$CS_SERVICELIST
+    fi
+
+    if [ ! -f $CS_IMPORTSERVICELIST ]; then
+        >$CS_IMPORTSERVICELIST
+    fi
+
+    if [ ! -s $CS_TEMP_CONFIG_PATH ]; then
+        mkdir $CS_TEMP_CONFIG_PATH
+        rm -rf $CS_TEMP_CONFIG_PATH/*
+    fi
+
+    START_SERVICE=$(uci_get ${MY_SERVICE_NAME} global enabled 0)
+    if [ ${START_SERVICE} -ne 0  ]; then
+        ETH_MAC_ADDR=$(cat /sys/class/net/br-lan/address)
+        procd_open_instance
+        procd_set_param command setsid /usr/bin/${MY_SERVICE_NAME}_handler.sh START ${ETH_MAC_ADDR}
+        procd_set_param stdout 1 # forward stdout to logd
+        procd_set_param stderr 1 # same for stderr
+        procd_close_instance
+    fi
+}
+
+stop_service() {
+        /usr/bin/${MY_SERVICE_NAME}_handler.sh STOP
+}
diff --git a/etc/init.d/cron b/etc/init.d/cron
new file mode 100755
index 0000000..295ca38
--- /dev/null
+++ b/etc/init.d/cron
@@ -0,0 +1,39 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=50
+
+USE_PROCD=1
+PROG=/usr/sbin/crond
+
+validate_cron_section() {
+	uci_validate_section system system "${1}" \
+		'cronloglevel:uinteger'
+}
+
+start_service () {
+	[ -z "$(ls /etc/crontabs/)" ] && return 1
+
+	loglevel=$(uci_get "system.@system[0].cronloglevel")
+
+	[ -z "${loglevel}" ] || {
+		/sbin/validate_data uinteger "${loglevel}" 2>/dev/null
+		[ "$?" -eq 0 ] || {
+			echo "validation failed"
+			return 1
+		}
+	}
+
+	mkdir -p /var/spool/cron
+	ln -s /etc/crontabs /var/spool/cron/ 2>/dev/null
+
+	procd_open_instance
+	#procd_set_param limits core="unlimited"
+	procd_set_param command "$PROG" -f -c /etc/crontabs -l ${loglevel:-5}
+	procd_close_instance
+}
+
+service_triggers()
+{
+	procd_add_validation validate_cron_section
+}
diff --git a/etc/init.d/customization b/etc/init.d/customization
new file mode 100755
index 0000000..76a96f2
--- /dev/null
+++ b/etc/init.d/customization
@@ -0,0 +1,17 @@
+#!/bin/sh /etc/rc.common
+
+START=13
+USE_PROCD=1
+
+start_service() {
+    apply_customization.sh
+}
+
+reload_service() {
+    apply_customization.sh force
+}
+
+service_triggers() {
+    procd_add_reload_trigger customization
+}
+
diff --git a/etc/init.d/dlanApp2Backend b/etc/init.d/dlanApp2Backend
new file mode 100755
index 0000000..102576c
--- /dev/null
+++ b/etc/init.d/dlanApp2Backend
@@ -0,0 +1,158 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+STOP=
+
+USE_PROCD=1
+
+MY_SERVICE_NAME=dlanApp2Backend
+PLCNETAPI_MDNS_PATH=/etc/avahi/services/dvl-plcnetapi.service
+PLCNETAPI_MDNS_PATH_TMP=/tmp/$(basename $PLCNETAPI_MDNS_PATH)
+DEVICEAPI_MDNS_PATH=/etc/avahi/services/dvl-deviceapi.service
+DEVICEAPI_MDNS_PATH_TMP=/tmp/$(basename $DEVICEAPI_MDNS_PATH)
+
+PRODUCT_NAME="$(uci_get customization info product_name)"
+
+# Determine, if PLC or G.hn is installed
+if [ -f /etc/init.d/plc ]; then
+    PLC_CFG_FILE=plc
+    PLC_DISABLED=$(uci_get plc plc disabled 0)
+    TECHNOLOGY=hpav
+elif [ -f /etc/init.d/ghn ]; then
+    PLC_CFG_FILE=ghn
+    PLC_DISABLED=$(uci_get ghn ghn disabled 0)
+    TECHNOLOGY=ghn
+fi
+
+logger() {
+    command logger -t ${MY_SERVICE_NAME} "$@"
+}
+
+get_interface() {
+    local board=$(cat /tmp/sysinfo/board_name)
+    local interface=
+    case "$board" in
+        dlan-550-wifi|\
+        dlan-1000-ac)
+            interface=eth0
+            ;;
+        dlan2-2400-ac)
+            interface=eth0
+            ;;
+        dlan-pro-1200-ac|\
+        dlan-pro-1200-n)
+            interface=eth0
+            ;;
+        *)
+            interface=eth0
+            ;;
+    esac
+    echo $interface
+}
+
+create_plcnetapi_mDNS_service() {
+    DLANMAC="$(uci_get_state delos baptization DlanMacAddress | tr -d ':' | awk '{print toupper($0)}')"
+    cat > $PLCNETAPI_MDNS_PATH_TMP <<EOF
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+<service-group>
+    <name>$PRODUCT_NAME</name>
+    <service protocol="ipv4">
+        <type>_dvl-plcnetapi._tcp.</type>
+        <port>47219</port>
+        <txt-record>Path=plcnetapi</txt-record>
+        <txt-record>Version=v0</txt-record>
+        <txt-record>PlcMacAddress=$DLANMAC</txt-record>
+        <txt-record>PlcTechnology=$TECHNOLOGY</txt-record>
+    </service>
+</service-group>
+EOF
+
+    cmp -s $PLCNETAPI_MDNS_PATH_TMP $PLCNETAPI_MDNS_PATH &&
+        rm -f $PLCNETAPI_MDNS_PATH_TMP ||
+        mv $PLCNETAPI_MDNS_PATH_TMP $PLCNETAPI_MDNS_PATH
+}
+
+create_deviceapi_mDNS_service() {
+    MT="$(uci_get_state delos baptization MT)"
+    SN="$(uci_get_state delos baptization SerialNumber)"
+    PS="$(uci_get_state delos baptization PS)"
+    . /etc/delos-version
+    cat > $DEVICEAPI_MDNS_PATH_TMP <<EOF
+<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
+<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
+<service-group>
+ <name>$PRODUCT_NAME</name>
+  <service protocol="ipv4">
+   <type>_dvl-deviceapi._tcp.</type>
+   <port>14791</port>
+   <txt-record>Path=deviceapi</txt-record>
+   <txt-record>Version=v0</txt-record>
+   <txt-record>MT=$MT</txt-record>
+   <txt-record>SN=$SN</txt-record>
+   <txt-record>FirmwareVersion=$FIRMWARE_VERSION</txt-record>
+   <txt-record>PS=$PS</txt-record>
+  </service>
+</service-group>
+EOF
+
+    cmp -s $DEVICEAPI_MDNS_PATH_TMP $DEVICEAPI_MDNS_PATH &&
+        rm -rf $DEVICEAPI_MDNS_PATH_TMP ||
+        mv $DEVICEAPI_MDNS_PATH_TMP $DEVICEAPI_MDNS_PATH
+}
+
+start_service() {
+    SERVICE_ENABLED=$(uci_get ${MY_SERVICE_NAME} global enabled 1)
+    HTTP_REALM=$(uci_get ${MY_SERVICE_NAME} global http_realm "")
+    HTTP_USERNAME=$(uci_get ${MY_SERVICE_NAME} global http_username "")
+    HTTP_PASSWORD=$(uci_get ${MY_SERVICE_NAME} global http_password "")
+    HTTP_HA1=$(uci_get ${MY_SERVICE_NAME} global http_ha1 "")
+    LOG_LEVEL=$(uci_get ${MY_SERVICE_NAME} global LOG_LEVEL INFO)
+    DLAN_MAC_ADDRESS=$(uci_get_state delos baptization DlanMacAddress)
+    INTERFACE=$(get_interface)
+
+    if [ ${SERVICE_ENABLED} -eq 1 ] && [ $PLC_DISABLED -eq 0 ] ; then
+        if [ -f /usr/bin/dlanApp2Backend-plcnet ]; then
+
+            create_plcnetapi_mDNS_service
+
+            procd_open_instance
+            procd_set_param command /usr/bin/dlanApp2Backend-plcnet -l "$LOG_LEVEL" -p 47219 -i $INTERFACE -n $TECHNOLOGY -m "$DLAN_MAC_ADDRESS" -r /usr/sbin/dlanApp2Backend_get_router_mac.sh
+            # Respawn: Threshold in seconds, timeout, retries
+            procd_set_param respawn 3600 5 5
+            procd_set_param stdout 1 # forward stdout to logd
+            procd_set_param stderr 1 # same for stderr
+            procd_close_instance
+        fi
+    else
+        # Remove mDNS service announcement for deviceapi if PLC is not active or app backend is not running
+        rm -f $PLCNETAPI_MDNS_PATH
+    fi
+
+    if [ ${SERVICE_ENABLED} -eq 1 ]; then
+        if [ -f /usr/bin/dlanApp2Backend-device ]; then
+
+            create_deviceapi_mDNS_service
+
+            procd_open_instance
+            procd_set_param command /usr/bin/dlanApp2Backend-device -l "$LOG_LEVEL" -R "$HTTP_REALM" -U "$HTTP_USERNAME" -P "$HTTP_PASSWORD" -H "$HTTP_HA1"
+            # Respawn: Threshold in seconds, timeout, retries
+            procd_set_param respawn 3600 5 5
+            procd_set_param stdout 1 # forward stdout to logd
+            procd_set_param stderr 1 # same for stderr
+            procd_close_instance
+        fi
+    else
+        # Remove mDNS service announcement for deviceapi if backend is disabled
+        rm -f $DEVICEAPI_MDNS_PATH
+    fi
+}
+
+stop_service() {
+    rm -f $PLCNETAPI_MDNS_PATH
+    rm -f $DEVICEAPI_MDNS_PATH
+}
+
+service_triggers() {
+    procd_add_reload_trigger $MY_SERVICE_NAME $PLC_CFG_FILE
+}
diff --git a/etc/init.d/done b/etc/init.d/done
new file mode 100755
index 0000000..acd3ff1
--- /dev/null
+++ b/etc/init.d/done
@@ -0,0 +1,26 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+
+START=95
+boot() {
+	mount_root done
+	rm -f /sysupgrade.tgz
+	local hk_board=$(grep -w  "IPQ807x" /proc/device-tree/model | awk -F: '{print $1}')
+
+        [ -n "$hk_board" ] && {
+		local mount_check=$(ls /lib/firmware/IPQ8074/WIFI_FW/ | grep "bdwlan.bin")
+		if [ -z "$mount_check" ];then
+			. /etc/init.d/wifi_fw_mount
+			mount_wifi_fw
+		fi
+	}
+
+	# process user commands
+	[ -f /etc/rc.local ] && {
+		sh /etc/rc.local
+	}
+
+	# set leds to normal state
+	. /etc/diag.sh
+	set_state done
+}
diff --git a/etc/init.d/dropbear b/etc/init.d/dropbear
new file mode 100755
index 0000000..889c50d
--- /dev/null
+++ b/etc/init.d/dropbear
@@ -0,0 +1,202 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2010 OpenWrt.org
+# Copyright (C) 2006 Carlos Sobrinho
+
+START=50
+STOP=50
+
+USE_PROCD=1
+PROG=/usr/sbin/dropbear
+NAME=dropbear
+PIDCOUNT=0
+EXTRA_COMMANDS="killclients"
+EXTRA_HELP="	killclients Kill ${NAME} processes except servers and yourself"
+
+. /lib/delos-functions.sh
+
+append_ports()
+{
+	local ipaddrs="$1"
+	local port="$2"
+
+	[ -z "$ipaddrs" ] && {
+		procd_append_param command -p "$port"
+		return
+	}
+
+	for addr in $ipaddrs; do
+		procd_append_param command -p "$addr:$port"
+	done
+}
+
+validate_section_dropbear()
+{
+	uci_validate_section dropbear dropbear "${1}" \
+		'PasswordAuth:bool:1' \
+		'enable:bool:1' \
+		'Interface:string' \
+		'GatewayPorts:bool:0' \
+		'RootPasswordAuth:bool:1' \
+		'RootLogin:bool:1' \
+		'rsakeyfile:file' \
+		'BannerFile:file' \
+		'Port:list(port):22' \
+		'SSHKeepAlive:uinteger:300' \
+		'IdleTimeout:uinteger:0' \
+		'mdns:uinteger:0'
+}
+
+dropbear_instance()
+{
+	local PasswordAuth enable Interface GatewayPorts \
+		RootPasswordAuth RootLogin rsakeyfile \
+		BannerFile Port SSHKeepAlive IdleTimeout \
+		mdns ipaddrs
+
+	validate_section_dropbear "${1}" || {
+		echo "validation failed"
+		return 1
+	}
+
+	[ -n "${Interface}" ] && {
+		network_get_ipaddrs_all ipaddrs "${Interface}" || {
+			echo "interface ${Interface} has no physdev or physdev has no suitable ip"
+			return 1
+		}
+	}
+
+	[ "${enable}" = "0" ] && return 1
+	PIDCOUNT="$(( ${PIDCOUNT} + 1))"
+	local pid_file="/var/run/${NAME}.${PIDCOUNT}.pid"
+
+	procd_open_instance
+	procd_set_param command "$PROG" -F -P "$pid_file"
+	[ "${PasswordAuth}" -eq 0 ] && procd_append_param command -s
+	[ "${GatewayPorts}" -eq 1 ] && procd_append_param command -a
+	[ "${RootPasswordAuth}" -eq 0 ] && procd_append_param command -g
+	[ "${RootLogin}" -eq 0 ] && procd_append_param command -w
+	[ -n "${rsakeyfile}" ] && procd_append_param command -r "${rsakeyfile}"
+	[ -n "${BannerFile}" ] && procd_append_param command -b "${BannerFile}"
+	append_ports "${ipaddrs}" "${Port}"
+	[ "${IdleTimeout}" -ne 0 ] && procd_append_param command -I "${IdleTimeout}"
+	[ "${SSHKeepAlive}" -ne 0 ] && procd_append_param command -K "${SSHKeepAlive}"
+	[ "${mdns}" -ne 0 ] && procd_add_mdns "ssh" "tcp" "$Port" "daemon=dropbear"
+	procd_set_param respawn
+	procd_close_instance
+}
+
+keygen()
+{
+	for keytype in rsa; do
+		# check for keys
+		key=dropbear/dropbear_${keytype}_host_key
+		[ -f /tmp/$key -o -s /etc/$key ] || {
+			# generate missing keys
+			mkdir -p /tmp/dropbear
+			[ -x /usr/bin/dropbearkey ] && {
+				/usr/bin/dropbearkey -t $keytype -f /tmp/$key 2>&- >&- && exec /etc/rc.common "$initscript" start
+			} &
+		exit 0
+		}
+	done
+
+	lock /tmp/.switch2jffs
+	mkdir -p /etc/dropbear
+	mv /tmp/dropbear/dropbear_* /etc/dropbear/
+	lock -u /tmp/.switch2jffs
+	chown root /etc/dropbear
+	chmod 0700 /etc/dropbear
+}
+
+load_interfaces()
+{
+	config_get interface "$1" Interface
+	interfaces=" ${interface} ${interfaces}"
+}
+
+start_service()
+{
+	[ "$(uci_get_state delos baptization Ssh)" != "1" ] && ! dvl_is_internal_firmware && ! dvl_is_pts_firmware && exit 1
+
+	[ -s /etc/dropbear/dropbear_rsa_host_key ] || keygen
+
+	. /lib/functions.sh
+	. /lib/functions/network.sh
+
+	config_load "${NAME}"
+	config_foreach dropbear_instance dropbear
+}
+
+service_triggers()
+{
+	local interfaces
+
+	procd_open_trigger
+	procd_add_config_trigger "config.change" "dropbear" /etc/init.d/dropbear reload
+
+	config_load "${NAME}"
+	config_foreach load_interfaces dropbear
+
+	[ -n "${interfaces}" ] & {
+		for n in $interfaces ; do
+			procd_add_interface_trigger "interface.*" $n /etc/init.d/dropbear reload
+		done
+	}
+	procd_close_trigger
+
+	procd_add_validation validate_section_dropbear
+}
+
+killclients()
+{
+	local ignore=''
+	local server
+	local pid
+
+	# if this script is run from inside a client session, then ignore that session
+	pid="$$"
+	while [ "${pid}" -ne 0 ]
+	 do
+		# get parent process id
+		pid=`cut -d ' ' -f 4 "/proc/${pid}/stat"`
+		[ "${pid}" -eq 0 ] && break
+
+		# check if client connection
+		grep -F -q -e "${PROG}" "/proc/${pid}/cmdline" && {
+			append ignore "${pid}"
+			break
+		}
+	done
+
+	# get all server pids that should be ignored
+	for server in `cat /var/run/${NAME}.*.pid`
+	 do
+		append ignore "${server}"
+	done
+
+	# get all running pids and kill client connections
+	local skip
+	for pid in `pidof "${NAME}"`
+	 do
+		# check if correct program, otherwise process next pid
+		grep -F -q -e "${PROG}" "/proc/${pid}/cmdline" || {
+			continue
+		}
+
+		# check if pid should be ignored (servers, ourself)
+		skip=0
+		for server in ${ignore}
+		 do
+			if [ "${pid}" = "${server}" ]
+			 then
+				skip=1
+				break
+			fi
+		done
+		[ "${skip}" -ne 0 ] && continue
+
+		# kill process
+		echo "${initscript}: Killing ${pid}..."
+		kill -KILL ${pid}
+	done
+}
diff --git a/etc/init.d/easycwmpd b/etc/init.d/easycwmpd
new file mode 100755
index 0000000..ca359d7
--- /dev/null
+++ b/etc/init.d/easycwmpd
@@ -0,0 +1,105 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2012-2014 OpenWrt.org
+
+START=90
+
+USE_PROCD=1
+PROG="/usr/sbin/easycwmpd"
+
+. /lib/delos-functions.sh
+
+UCI_SET="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} set"
+UCI_GET="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} get"
+UCI_COMMIT="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit"
+UCI_ADD="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} add"
+init_device_info() {
+	local val oval
+	local change=0
+
+	uci get easycwmp.device -q || $UCI_ADD easycwmp device
+
+	val=`cat "/etc/device_info" | grep "DEVICE_MANUFACTURER" | cut -f 2 -d '=' | sed -e "s/['\"]//g" -e "s'[]:@/?#[!$&()*+,;=]'_'g"`
+	oval=`$UCI_GET easycwmp.@device[0].manufacturer`
+	[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].manufacturer="$val"; change=1; }
+
+	val=`cat "/etc/device_info" | grep "DEVICE_PRODUCT" | cut -f 2 -d '=' | sed -e "s/['\"]//g" -e "s'[]:@/?#[!$&()*+,;=]'_'g"`
+	oval=`$UCI_GET easycwmp.@device[0].product_class`
+	[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].product_class="$val"; change=1; }
+	oval=`$UCI_GET easycwmp.@device[0].model_name`
+	[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].model_name="$val"; change=1; }
+
+	val=`cat "/etc/device_info" | grep "DEVICE_REVISION" | cut -f 2 -d '=' | sed -e "s/['\"]//g" -e "s'[]:@/?#[!$&()*+,;=]'_'g"`
+	oval=`$UCI_GET easycwmp.@device[0].hardware_version`
+	[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].hardware_version="$val"; change=1; }
+
+	eval $(cat "/etc/delos-version")
+	[ -n "$FIRMWARE_VERSION" ] && $UCI_SET easycwmp.@device[0].software_version="$FIRMWARE_VERSION ($FIRMWARE_DATE)"
+
+	val=`uci -P/var/state get delos.baptization.SerialNumber`
+	[ -n "$val" ] && $UCI_SET easycwmp.@device[0].serial_number="$val"
+
+	val=`uci -P/var/state get delos.baptization.MacAddress0 |tr 'a-z' 'A-Z' |tr -d ':-' |cut -c-6`
+	[ -n "$val" ] && $UCI_SET easycwmp.@device[0].oui="$val"
+
+	#The same thing here for OUI and SerialNumber
+
+	[ "$change" = "1" ] && $UCI_COMMIT easycwmp
+}
+
+start_service() {
+	[ "$(uci_get_state delos baptization Tr069)" != "1" ] && ! dvl_is_internal_firmware && exit 1
+
+	init_device_info
+	procd_open_instance
+	procd_set_param command "$PROG" -f
+	if [ "$1" = "--boot" ];then
+		procd_append_param command --boot
+	else
+		procd_append_param command --getrpcmethod
+	fi
+	procd_set_param respawn "3" "7" "0"
+	procd_close_instance
+}
+
+boot() {
+	# restore persistent service state after firmware update
+	local script=$(readlink -f $initscript)
+	disabled=$(uci_get easycwmp @local[0] disabled '0')
+	[ $disabled = '1' ] && $script enabled && { $script disable ; return 0 ; }
+
+	# perform normal boot action
+	start --boot
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger easycwmp
+}
+
+# redirect enable action
+[ $action = "enable" ] && action=do_enable && EXTRA_COMMANDS="$EXTRA_COMMANDS $action"
+
+do_enable() {
+	enable "$@"
+
+	# make service state persistent
+	disabled=$(uci_get easycwmp @local[0] disabled '0')
+	[ $disabled = '1' ] && {
+		uci_set easycwmp @local[0] disabled 0
+		uci_commit easycwmp
+	}
+}
+
+# redirect disable action
+[ $action = "disable" ] && action=do_disable && EXTRA_COMMANDS="$EXTRA_COMMANDS $action"
+
+do_disable() {
+	disable "$@"
+
+	# make service state persistent
+	disabled=$(uci_get easycwmp @local[0] disabled '0')
+	[ $disabled = '0' ] && {
+		uci_set easycwmp @local[0] disabled 1
+		uci_commit easycwmp
+	}
+}
diff --git a/etc/init.d/firewall b/etc/init.d/firewall
new file mode 100755
index 0000000..ee3ed1a
--- /dev/null
+++ b/etc/init.d/firewall
@@ -0,0 +1,61 @@
+#!/bin/sh /etc/rc.common
+
+START=19
+USE_PROCD=1
+QUIET=""
+
+validate_firewall_redirect()
+{
+	uci_validate_section firewall redirect "${1}" \
+		'proto:or(uinteger, string)' \
+		'src:string' \
+		'src_ip:cidr' \
+		'src_dport:or(port, portrange)' \
+		'dest:string' \
+		'dest_ip:cidr' \
+		'dest_port:or(port, portrange)' \
+		'target:or("SNAT", "DNAT")'
+}
+
+validate_firewall_rule()
+{
+	uci_validate_section firewall rule "${1}" \
+		'proto:or(uinteger, string)' \
+		'src:string' \
+		'dest:string' \
+		'src_port:or(port, portrange)' \
+		'dest_port:or(port, portrange)' \
+		'target:string'
+}
+
+service_triggers() {
+	procd_add_reload_trigger firewall	
+
+	procd_open_validate
+	validate_firewall_redirect
+	validate_firewall_rule
+	procd_close_validate
+}
+
+restart() {
+	fw3 restart
+}
+
+start_service() {
+	fw3 ${QUIET} start
+}
+
+stop_service() {
+	fw3 flush
+}
+
+reload_service() {
+	fw3 reload
+}
+
+boot() {
+	# Be silent on boot, firewall might be started by hotplug already,
+	# so don't complain in syslog.
+	QUIET=-q
+	start
+}
diff --git a/etc/init.d/fixup-macaddr b/etc/init.d/fixup-macaddr
new file mode 100755
index 0000000..4325e06
--- /dev/null
+++ b/etc/init.d/fixup-macaddr
@@ -0,0 +1,13 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2018 devolo AG
+
+START=15
+
+boot() {
+	# set baptized ethernet mac addresses, bapt. always has precedence over other means
+	# if nothing was baptized do nothing
+	for i in $(seq 0 1); do
+		local mac=$(uci_get_state delos.baptization.MacAddress$i)
+		[ -n "$mac" ] && ifconfig eth$i hw ether $mac
+	done
+}
diff --git a/etc/init.d/fwknopd b/etc/init.d/fwknopd
new file mode 100755
index 0000000..08f8046
--- /dev/null
+++ b/etc/init.d/fwknopd
@@ -0,0 +1,183 @@
+#!/bin/sh /etc/rc.common
+#
+# Fwknop is developed primarily by the people listed in the file 'AUTHORS'.
+# Copyright (C) 2009-2014 fwknop developers and contributors. For a full
+# list of contributors, see the file 'CREDITS'.
+#
+
+USE_PROCD=1
+START=95
+
+FWKNOPD_BIN=/usr/sbin/fwknopd
+
+start_service()
+{
+	generate_configuration
+
+	if [ -n "$DEPEND_IFNAME" ] ; then
+		# We know the interface, so we can start
+		procd_open_instance
+		procd_set_param command "$FWKNOPD_BIN" --foreground --syslog-enable
+		procd_set_param respawn
+		if [ $UCI_ENABLED -eq 1 ]; then
+			procd_append_param command -c /var/etc/fwknopd.conf
+			procd_append_param command -a /var/etc/access.conf
+		fi
+		procd_append_param command -i "$DEPEND_IFNAME"
+		procd_set_param netdev "$DEPEND_IFNAME"
+		procd_close_instance
+	else
+		logger -p daemon.info -t "fwknopd[----]" "Postponing start-up of fwknopd, network $NETWORK is not up"
+	fi
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "fwknopd"
+
+	if [ -n "$NETWORK" ] ; then
+		logger -p daemon.info -t "fwknopd[----]" "Listening for changes on network $NETWORK"
+		procd_add_reload_interface_trigger "$NETWORK"
+	fi
+}
+
+get_bool()
+{
+	local _tmp="$1"
+	case "$_tmp" in
+		1|on|true|yes|enabled) _tmp=1;;
+		0|off|false|no|disabled) _tmp=0;;
+		*) _tmp="$2";;
+	esac
+	echo -n "$_tmp"
+}
+
+generate_configuration()
+{
+	[ -f /tmp/access.conf.tmp ] && rm /tmp/access.conf.tmp
+
+	UCI_ENABLED=0
+	DEPEND_IFNAME=
+	NETWORK=
+	local PCAP_INTF=
+	local USER_CONFIG_PATH=/etc/fwknop/fwknopd.conf
+	local DEFAULT_UCI_NETWORK=wan
+	local DEFAULT_FWKNOPD_IFNAME=eth0
+
+	config_cb() {
+		local type="$1"
+		local name="$2"
+		if [ "$type" = "global" ]; then
+			option_cb() {
+				local option="$1"
+				local value="$2"
+				if [ "$option" = "uci_enabled" ] && [ "$(get_bool "$value" 0)" -eq 1 ] ; then
+					> /var/etc/fwknopd.conf
+					> /var/etc/access.conf
+					chmod 600 /var/etc/fwknopd.conf
+					chmod 600 /var/etc/access.conf
+					UCI_ENABLED=1
+
+					# Forced defaults
+
+					# Do not let fwknopd to shut-down when interface goes down,
+					# control it from the start-up script instead:
+					# https://bugs.openwrt.org/index.php?do=details&task_id=1481
+					echo "EXIT_AT_INTF_DOWN n" >> /var/etc/fwknopd.conf
+				fi
+			}
+		elif [ "$type" = "network" ]; then
+			option_cb() {
+				local option="$1"
+				local value="$2"
+				if [ $UCI_ENABLED -eq 1 ] && [ $option = "network" ]; then
+					NETWORK="$value"
+				fi
+			}
+		elif [ "$type" = "config" ]; then
+			option_cb() {
+				local option="$1"
+				local value="$2"
+				if [ $UCI_ENABLED -eq 1 ] && [ $option = "PCAP_INTF" ]; then
+					PCAP_INTF="$value"
+					echo "$option $value" >> /var/etc/fwknopd.conf  #writing each option to fwknopd.conf
+				elif [ $UCI_ENABLED -eq 1 ] && [ $option = "EXIT_AT_INTF_DOWN" ]; then
+					logger -p daemon.warn -t "fwknopd[----]" "Ignoring EXIT_AT_INTF_DOWN option, forced to N (no) to work reliably with procd"
+				elif [ $UCI_ENABLED -eq 1 ]; then
+					echo "$option $value" >> /var/etc/fwknopd.conf  #writing each option to fwknopd.conf
+				fi
+			}
+		elif [ "$type" = "access" ]; then
+			if [ -f /tmp/access.conf.tmp ] ; then
+				cat /tmp/access.conf.tmp >> /var/etc/access.conf
+				rm /tmp/access.conf.tmp
+			fi
+			option_cb() {
+				local option="$1"
+				local value="$2"
+				if [ $UCI_ENABLED -eq 1 ] && [ $option = "SOURCE" ]; then
+					echo "$option $value" >> /var/etc/access.conf  #writing each option to access.conf
+				fi
+				if [ $UCI_ENABLED -eq 1 ] && [ $option != "SOURCE" ]; then
+					echo "$option $value" >> /tmp/access.conf.tmp  #writing each option to access.conf
+				fi
+			}
+		else
+			reset_cb
+			if [ -z "$type" ]; then
+				# Finalize reading
+				if [ -f /tmp/access.conf.tmp ] ; then
+					cat /tmp/access.conf.tmp >> /var/etc/access.conf
+					rm /tmp/access.conf.tmp
+				fi
+				local key="$(uci_get_state delos-private baptization PwdFwknopd)"
+				if [ -n "$key" ]; then
+					echo "KEY $key" >> /var/etc/access.conf
+				fi
+			fi
+		fi
+	}
+
+	if [ -f /etc/config/fwknopd ]; then
+		config_load fwknopd
+	fi
+
+	if [ $UCI_ENABLED -eq 0 ]; then
+		if [ -f $USER_CONFIG_PATH ] ; then
+			# Scan user configuration for PCAP_INTF settings and fallback to fwknopd's default
+			DEPEND_IFNAME="$( sed -ne '/^\s*PCAP_INTF\s\+/ { s/^\s*PCAP_INTF\s\+//; s/\s\+$//; p; q; }' $USER_CONFIG_PATH )"
+			if [ -n "$DEPEND_IFNAME" ]; then
+				logger -p daemon.debug -t "fwknopd[----]" "Found fwknopd.conf configuration, using PCAP_INTF interface $DEPEND_IFNAME"
+			else
+				logger -p daemon.info -t "fwknopd[----]" "No PCAP_INTF interface specified in fwknopd.conf, fwknopd's default $DEFAULT_FWKNOPD_IFNAME will be used"
+				DEPEND_IFNAME="$DEFAULT_FWKNOPD_IFNAME"
+			fi
+		else
+			logger -p daemon.error -t "fwknopd[----]" "No $USER_CONFIG_PATH found, not starting"
+			exit 1
+		fi
+	elif [ $UCI_ENABLED -eq 1 ]; then
+		if [ -n "$NETWORK" ] && [ -n "$PCAP_INTF" ]; then
+			logger -p daemon.warn -t "fwknopd[----]" "Specified both network and PCAP_INTF. Ignoring PCAP_INTF"
+		elif [ -z "$NETWORK" ] && [ -z "$PCAP_INTF" ]; then
+			# Fallback - compatibility with old script, which used wan interface by default
+			logger -p daemon.info -t "fwknopd[----]" "Neither network, nor PCAP_INTF interface specified, trying network $DEFAULT_UCI_NETWORK"
+			NETWORK="$DEFAULT_UCI_NETWORK"
+		fi
+
+		# Resolve network if possible
+		if [ -n "$NETWORK" ]; then
+			. /lib/functions/network.sh
+			network_get_device DEPEND_IFNAME "$NETWORK"
+			if [ -n "$DEPEND_IFNAME" ]; then
+				logger -p daemon.debug -t "fwknopd[----]" "Resolved network $NETWORK as interface $DEPEND_IFNAME"
+			else
+				logger -p daemon.warn -t "fwknopd[----]" "Cannot find interface for network $NETWORK, probably the network is not up"
+			fi
+		elif [ -n "$PCAP_INTF" ]; then
+			DEPEND_IFNAME="$PCAP_INTF"
+			logger -p daemon.debug -t "fwknopd[----]" "Using configured PCAP_INTF interface $DEPEND_IFNAME"
+		fi
+	fi
+}
+
diff --git a/etc/init.d/fwuagent b/etc/init.d/fwuagent
new file mode 100755
index 0000000..207f216
--- /dev/null
+++ b/etc/init.d/fwuagent
@@ -0,0 +1,165 @@
+#!/bin/sh /etc/rc.common
+
+START=98
+
+USE_PROCD=1
+NAME=fwuagent
+PROG=/usr/bin/fwuagent
+PROPERTIES=/tmp/fwuagent_prop.json
+disabled=0
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+board=$(${PLATFORM}_board_name)
+
+. /lib/delos-functions.sh
+
+check_guest_wifi() {
+    local radio="$2"
+
+    if [ "$(config_get "$1" dvl_guest)" = 1 -a "$(config_get "$1" device)" = "$radio" ]; then
+        if [ "$(config_get "$1" disabled)" = "0" ]; then
+            echo "1"
+        else
+            echo "0"
+        fi
+    fi
+}
+
+is_guest_wifi_enabled() {
+    local radio="$1"
+
+    config_load wireless
+    config_foreach check_guest_wifi wifi-iface "$radio"
+}
+
+is_radio_enabled() {
+    local radio="$1"
+
+    if [ "$(uci get -q wireless.$radio.cfg_disabled)" = "0" ]; then
+        echo "1"
+    else
+        echo "0"
+    fi
+}
+
+create_feature_bits() {
+    local pc="$(uci get -q parental_control.@global[0].enabled)"
+    local sq="$(uci get -q station_quota.global.enabled)"
+    local ws="$(uci get -q wifi_schedule.@global[0].enabled)"
+    local son="$(uci get -q wireless.son.enabled)"
+    local ieee80211r="$(uci get -q wireless.son.ieee80211r)"
+    local radio24="$(is_radio_enabled wifi0)"
+    local radio5="$(is_radio_enabled wifi1)"
+    local cs="$(uci get -q configsync.global.enabled)"
+    local guest_switch_off="$(uci get -q wireless.guest_wifi.auto_switch_off)"
+    local guest24="$(is_guest_wifi_enabled wifi0)"
+    local guest5="$(is_guest_wifi_enabled wifi1)"
+
+    local dhcp="0"
+    [ ! "$(uci get -q network.lan.proto)" = "dhcp" ] || dhcp="1"
+
+    local location="0"
+    [ -z "$(uci get -q system.@system[0].location)" ] || location="1"
+
+    json_add_string feature_bits "$pc,$sq,$ws,$son,$ieee80211r,$radio24,$radio5,$cs,$guest_switch_off,$guest24,$guest5,$dhcp,$location"
+}
+
+create_properties() {
+    . /usr/share/libubox/jshn.sh
+    . /etc/delos-version
+    . /etc/delos-image
+
+    config_load delos
+    config_get oem_variant baptization OemVariant
+    config_get baptized_device_type baptization DeviceType
+    config_get baptized_mt baptization MT
+    if [ "$baptized_device_type" != "" ]; then
+        DEVICE_TYPE="$baptized_device_type"
+    fi
+
+    json_init
+    json_add_string device_type "$DEVICE_TYPE"
+    json_add_string firmware_date "$FIRMWARE_DATE"
+    json_add_string firmware_distribution "$(uci get fwuagent.device.firmware_distribution)"
+    json_add_string firmware_os "$(uname)"
+    json_add_string firmware_version "$FIRMWARE_VERSION"
+    json_add_string oem_variant "$oem_variant"
+    json_add_string device_mt "$baptized_mt"
+    json_add_string automatic_update "$(uci get fwuagent.service.automatic_update)"
+    json_add_string agent_version "$(opkg info fwuagent | grep Version | cut -d' ' -f2)"
+    create_feature_bits
+    json_close_object
+    echo "$(json_dump)" > "$PROPERTIES"
+}
+
+start_service() {
+    config_load delos
+    config_get serial baptization SerialNumber
+    config_load fwuagent
+    config_get_bool disabled service disabled
+    config_get log_level service log_level
+    config_get_bool ghn_agents service ghn_agents
+
+    case "$board" in
+    dlan2-2400-ac|\
+    ew7479cap|\
+    ap-dk01.1-c1)
+	bootloader_mtd="mtd6"
+	;;
+    *)
+	bootloader_mtd="mtd0"
+	;;
+    esac
+
+    config_get hawkbit_server hawkbit server
+    # use the dev server if we are not running a production firmware
+    dvl_is_internal_firmware && config_get hawkbit_server hawkbit dev_server "hawkbit-dev.devolo.net"
+
+    # set default log level if none is set
+    if [ -z "$log_level" ]; then
+        log_level="INFO"
+        uci_set fwuagent service log_level "$log_level"
+        uci_commit fwuagent
+    fi
+
+    # the parameter must be omitted when the option is not enabled
+    ghn_agents_opt=""
+    if [ "$ghn_agents" = "1" ]; then
+        ghn_agents_opt="--ghn-agents"
+    fi
+
+    # create the properties that are reported to hawkBit
+    create_properties
+
+    procd_open_instance
+    procd_set_param command "$PROG" \
+        --client-certificate /etc/keys/delos-client-cert.pem \
+        --client-certificate-key /etc/keys/delos-client-key.pem \
+        --dormant "$disabled" \
+        --log-level "$log_level" \
+        --bootloader-mtd "$bootloader_mtd" \
+        --device-id "$serial" \
+        --hawkbit-server "$hawkbit_server" \
+        --installed-flash-type "nor" \
+        --properties-file "$PROPERTIES" \
+        $ghn_agents_opt
+    procd_set_param respawn 60 10 0
+    procd_set_param stdout 1
+    procd_set_param stderr 1
+    procd_close_instance
+}
+
+service_triggers() {
+    procd_add_reload_trigger "fwuagent"
+}
+
+reload_service() {
+    stop
+    start
+}
diff --git a/etc/init.d/hyd b/etc/init.d/hyd
new file mode 100755
index 0000000..ba4fc61
--- /dev/null
+++ b/etc/init.d/hyd
@@ -0,0 +1,652 @@
+#!/bin/sh /etc/rc.common
+#
+# Copyright (c) 2013, 2017-2018 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2013 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+START=55
+USE_PROCD=1
+RESPAWN_THRESHOLD=120
+RESPAWN_TIMEOUT=5
+RESPAWN_RETRIES=10
+SERVICE_PATH="/usr/sbin/hyd"
+HYD_CONFIG_FILE_PREFIX="/tmp/hyd"
+
+# The stop_wifidown command is a special command that does not try to do
+# any locking in order to prevent deadlocks during a wifi down operation
+# that is actually part of a Wi-Fi interface restart.
+EXTRA_COMMANDS="stop_wifidown"
+EXTRA_HELP=<<EOF
+	stop_wifidown Stop hyd while bring down Wi-Fi interfaces
+EOF
+
+#check hyd config to enable/disable cfg80211
+config_load 'hyd'
+config_get_bool hyd_cfg config 'cfg80211_enable' '0'
+if [ "$hyd_cfg" -eq "1" ]; then
+    HYD_CFG80211=-cfg80211
+else
+    HYD_CFG80211=
+fi
+
+ieee1905managed_bridge=
+ieee1905managed_bridge2=
+
+. /lib/functions/hyfi-debug.sh
+. /lib/functions/hyfi-iface.sh
+. /lib/functions/hyfi-network.sh
+
+if [ -f /lib/functions/lbd-config.sh ]; then
+    . /lib/functions/lbd-config.sh
+fi
+
+__hyd_cfg_append() {
+	local configfile=$2
+	echo "$1" >> "$configfile"
+}
+
+__hyd_cfg_nl_append() {
+	local configfile=$2
+	echo "" >> "$configfile"
+	echo "$1" >> "$configfile"
+}
+
+# __hyd_cfg_add_str <section> <option> <output key> <config file>
+__hyd_cfg_add_str_new_key() {
+	local key="$2"
+	local section="$1"
+	local option="$2"
+	local output_key="$3"
+	local configfile=$4
+
+	config_get val "${section}" "${option}"
+	[ -n "${val}" ] && __hyd_cfg_append "${output_key}=${val}" $configfile
+}
+
+# __hyd_cfg_add_str <section> <option> <config file>
+__hyd_cfg_add_str() {
+	__hyd_cfg_add_str_new_key $1 $2 $2 $3
+}
+
+__hyd_get_default_mode() {
+	local wan_iface
+
+	config_load network
+	config_get wan_iface wan ifname
+
+	if [ -n "$wan_iface" ]; then
+		eval "$1='HYROUTER'"
+	else
+		eval "$1='HYCLIENT'"
+	fi
+}
+
+__hyd_get_wlan_sta_ifaces() {
+	local config="$1"
+	local iface network mode disabled
+
+	config_get iface "$config" ifname
+	config_get network "$config" network
+	config_get mode "$config" mode
+	config_get disabled "$config" disabled '0'
+
+	if [ "$2" = "$network" -a "$mode" = "sta" -a "$disabled" -eq 0 ]; then
+		non_relay_ifaces=${non_relay_ifaces}${non_relay_ifaces:+","}${iface}
+	fi
+}
+
+# __hyd_get_nonrelay_eth_iface()
+# input: $1 IEEE1905.1 managed bridge interface
+# output: $2 Name of the upstream Ethernet interface
+__hyd_get_nonrelay_eth_iface() {
+	local ieee1905managed="$1"
+	local eth_ifaces_full eth_ifaces
+	local ifname=""
+
+	# Query user config first. Even with Ethernet monitoring disabled, a
+	# manually configured upstream interface will always be non-relaying.
+	config_load hyd
+	config_get ifname config NonRelayingEthernetInterface ""
+	if [ -n "${ifname}" ]; then
+		eval "$2='${ifname}'"
+		return
+	fi
+
+	# If ethernet monitoring is disabled, there should be no nonrelaying
+	# ethernet interfaces.
+	if [ "$(uci get repacd.repacd.EnableEthernetMonitoring)" != "1" ]; then
+		eval "$2=''"
+		return
+        fi
+
+	# assume that our upstream interface is eth0, but verify it
+	# exists first. if it doesn't exist, we may be running on an
+	# unknown board.
+	# the reason we look for an interface that matches a pattern
+	# instead of referencing it directly is because the upstream port
+	# could be in a VLAN, for example if guest networks are configured.
+	hyfi_get_ether_ifaces ${ieee1905managed} eth_ifaces_full
+	hyfi_strip_list ${eth_ifaces_full} eth_ifaces
+	for eth_iface in ${eth_ifaces}; do
+		case ${eth_iface} in
+		eth0*)
+			ifname=${eth_iface}
+		;;
+		esac
+	done
+
+	eval "$2='${ifname}'"
+}
+
+__hyd_cfg_add_interface() {
+	local all_ifaces wlan_ifaces plc_iface non_relay_ifaces default_mode
+	local non_relay_eth_iface
+	local wlan_vlan_sta_ifaces
+	local br_name=$1
+	local configfile=$2
+
+	__hyd_cfg_append 'HybridBridgeInterfaceName=br-'$br_name $configfile
+
+	# Get a list of all interfaces
+	hyfi_get_ifaces $br_name all_ifaces wlan_ifaces
+	__hyd_cfg_append 'ManagedInterfacesList='$all_ifaces $configfile
+	__hyd_cfg_append 'WlanInterfaces='$wlan_ifaces $configfile
+
+	__hyd_get_default_mode default_mode
+	config_get mode config 'Mode' "$default_mode"
+
+	if [ "${mode}" = 'HYCLIENT' ];then
+		# Get PLC interface
+		hyfi_get_plc_iface $br_name plc_iface
+		if [ -n "$plc_iface" ]; then
+			hyfi_strip_list $plc_iface plc_iface
+			non_relay_ifaces=$plc_iface
+		fi
+
+		# Get all WLAN interfaces bound to the managed bridge
+		config_load wireless
+		config_foreach __hyd_get_wlan_sta_ifaces wifi-iface $br_name
+
+		hyfi_get_wlan_vlan_sta_ifaces $br_name wlan_vlan_sta_ifaces
+		if [ -n "${wlan_vlan_sta_ifaces}" ]; then
+			non_relay_ifaces=${non_relay_ifaces}${non_relay_ifaces:+","}${wlan_vlan_sta_ifaces}
+		fi
+
+		# Get the Ethernet interface to be included in the
+		# non-relaying group
+		__hyd_get_nonrelay_eth_iface $br_name non_relay_eth_iface
+		if [ -n "${non_relay_eth_iface}" ]; then
+			non_relay_ifaces=${non_relay_ifaces}${non_relay_ifaces:+","}${non_relay_eth_iface}
+		fi
+
+		__hyd_cfg_append	'NoRelayGroupList='"$non_relay_ifaces" $configfile
+		__hyd_cfg_append	'ForceGroupRelaying=1' $configfile
+	fi
+
+	local switch_lan_vid
+	local switch_cpu_root_port
+
+	__hyfi_get_switch_lan_vid switch_lan_vid
+	__hyfi_get_switch_cpu_port switch_cpu_root_port
+	__hyd_cfg_append 'SwitchLanVid='"$switch_lan_vid" $configfile
+	__hyd_cfg_append 'SwitchCpuPort='"$switch_cpu_root_port" $configfile
+
+	local iface_vlanids
+	hyfi_get_iface_vlanids iface_vlanids
+	__hyd_cfg_append 'VlanIds='"$iface_vlanids" $configfile
+}
+
+__hyd_cfg_add_head() {
+       local configfile=$1
+	echo ";"	>"$configfile"
+	__hyd_cfg_append ';  Automatically generated hyd configure file,do not change it.' $configfile
+	__hyd_cfg_append ';' $configfile
+	__hyd_cfg_append ';  INTERFACE:       interface manager' $configfile
+	__hyd_cfg_append ';  HY:              hy manager' $configfile
+	__hyd_cfg_append ';  WLAN:            wlan manager' $configfile
+	__hyd_cfg_append ';  PLC:             plc manager' $configfile
+	__hyd_cfg_append ';  ETH:             eth manager' $configfile
+	__hyd_cfg_append ';  PATHCH:          pc service' $configfile
+	__hyd_cfg_append ';  PATHCHWLAN:      pcw service' $configfile
+	__hyd_cfg_append ';  PATHCHPLC:       pcp service' $configfile
+	__hyd_cfg_append ';  PATHCHETH:       pce service' $configfile
+	__hyd_cfg_append ';  TOPOLOGY:        td service' $configfile
+	__hyd_cfg_append ';  HSPECEST:        he service' $configfile
+	__hyd_cfg_append ';  PATHSELECT:      ps service' $configfile
+	__hyd_cfg_append ';  LOGSETTINGS:     log service' $configfile
+	__hyd_cfg_append ';  IEEE1905:        IEEE 1905.1 settings' $configfile
+	__hyd_cfg_append ';  HCP:             HCP settings' $configfile
+	__hyd_cfg_append ';  MAP:             Multi-AP SIG settings' $configfile
+	__hyd_cfg_append ';' $configfile
+}
+
+__hyd_create_config() {
+	local br_name=$1
+	local configfile=$2
+	config_load 'hyd'
+	__hyd_cfg_add_head $configfile
+
+	__hyd_cfg_nl_append '[INTERFACE]' $configfile
+	__hyd_cfg_add_interface $br_name $configfile
+	__hyd_cfg_add_str		hy			ForwardingMode $configfile
+
+	__hyd_cfg_nl_append '[HY]' $configfile
+	__hyd_cfg_add_str		hy			LoadBalancingSeamless $configfile
+	__hyd_cfg_add_str		hy			ConstrainTCPMedium $configfile
+	__hyd_cfg_add_str		hy			MaxLBReordTimeout $configfile
+	__hyd_cfg_add_str		hy			HActiveMaxAge $configfile
+
+	__hyd_cfg_nl_append '[PATHCH]' $configfile
+        # The following parameters are taken from the LBD config.
+        config_load 'lbd'
+        __hyd_cfg_add_str_new_key               Offload                 MUSafetyThreshold_W2 ChanUtilSafetyThreshold_W2 $configfile
+        __hyd_cfg_add_str_new_key               Offload                 MUSafetyThreshold_W5 ChanUtilSafetyThreshold_W5 $configfile
+        config_load 'hyd'  # in case loading whc clobbered any values
+
+	__hyd_cfg_nl_append '[PATHCHWLAN]' $configfile
+	__hyd_cfg_add_str		PathChWlan		UpdatedStatsInterval_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		StatsAgedOutInterval_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		MaxMediumUtilization_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		MediumChangeThreshold_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		LinkChangeThreshold_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		MaxMediumUtilizationForLC_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		CPULimitedTCPThroughput_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		CPULimitedUDPThroughput_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		PHYRateThresholdForMU_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		ProbePacketInterval_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		ProbePacketSize_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		EnableProbe_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		AssocDetectionDelay_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		UpdatedStatsInterval_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		StatsAgedOutInterval_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		MaxMediumUtilization_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		MediumChangeThreshold_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		LinkChangeThreshold_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		MaxMediumUtilizationForLC_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		CPULimitedTCPThroughput_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		CPULimitedUDPThroughput_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		PHYRateThresholdForMU_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		ProbePacketInterval_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		ProbePacketSize_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		EnableProbe_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		AssocDetectionDelay_W5 $configfile
+	__hyd_cfg_add_str		PathSelect		LinkCapacityThreshold $configfile
+	__hyd_cfg_add_str		PathChWlan		ScalingFactorHighRate_W5 $configfile
+	__hyd_cfg_add_str		PathChWlan		ScalingFactorHighRate_W2 $configfile
+	__hyd_cfg_add_str		PathChWlan		ScalingFactorLow $configfile
+	__hyd_cfg_add_str		PathChWlan		ScalingFactorMedium $configfile
+	__hyd_cfg_add_str		PathChWlan		ScalingFactorHigh $configfile
+	__hyd_cfg_add_str		PathChWlan		ScalingFactorTCP $configfile
+	__hyd_cfg_add_str		PathChWlan		UseWHCAlgorithm $configfile
+
+	__hyd_cfg_nl_append '[PATHCHPLC]' $configfile
+	__hyd_cfg_add_str		PathChPlc		MaxMediumUtilization $configfile
+	__hyd_cfg_add_str		PathChPlc		MediumChangeThreshold $configfile
+	__hyd_cfg_add_str		PathChPlc		LinkChangeThreshold $configfile
+	__hyd_cfg_add_str		PathChPlc		StatsAgedOutInterval $configfile
+	__hyd_cfg_add_str		PathChPlc		UpdateStatsInterval $configfile
+	__hyd_cfg_add_str		PathChPlc		EntryExpirationInterval $configfile
+	__hyd_cfg_add_str		PathChPlc		MaxMediumUtilizationForLC $configfile
+	__hyd_cfg_add_str		PathChPlc		LCThresholdForUnreachable $configfile
+	__hyd_cfg_add_str		PathChPlc		LCThresholdForReachable $configfile
+	__hyd_cfg_add_str		PathChPlc		HostPLCInterfaceSpeed $configfile
+
+        __hyd_cfg_nl_append '[TOPOLOGY]' $configfile
+	__hyd_cfg_add_str		Topology		ND_UPDATE_INTERVAL $configfile
+	__hyd_cfg_add_str		Topology		BD_UPDATE_INTERVAL $configfile
+	__hyd_cfg_add_str		Topology		HOLDING_TIME $configfile
+	__hyd_cfg_add_str		Topology		TIMER_LOW_BOUND $configfile
+	__hyd_cfg_add_str		Topology		TIMER_UPPER_BOUND $configfile
+	__hyd_cfg_add_str		Topology		MSGID_DELTA $configfile
+	__hyd_cfg_add_str		Topology		HA_AGING_INTERVAL $configfile
+	__hyd_cfg_add_str		Topology		ENABLE_TD3 $configfile
+	__hyd_cfg_add_str		Topology		ENABLE_BD_SPOOFING $configfile
+	__hyd_cfg_add_str		Topology		NOTIFICATION_THROTTLING_WINDOW $configfile
+	__hyd_cfg_add_str		Topology		PERIODIC_QUERY_INTERVAL $configfile
+	__hyd_cfg_add_str		Topology		ENABLE_NOTIFICATION_UNICAST $configfile
+
+	__hyd_cfg_nl_append '[PATHSELECT]' $configfile
+	__hyd_cfg_add_str		PathSelect		UpdateHDInterval $configfile
+	__hyd_cfg_add_str		PathSelect		LinkCapacityThreshold $configfile
+	__hyd_cfg_add_str		PathSelect		UDPInterfaceOrder $configfile
+	__hyd_cfg_add_str		PathSelect		NonUDPInterfaceOrder $configfile
+	__hyd_cfg_add_str		PathSelect		SerialflowIterations $configfile
+	__hyd_cfg_add_str		PathSelect		DeltaLCThreshold $configfile
+	__hyd_cfg_add_str		PathSelect		EnableBadLinkStatsSwitchFlow $configfile
+
+	__hyd_cfg_nl_append '[HSPECEST]' $configfile
+	__hyd_cfg_add_str		HSPECEst		UpdateHSPECInterval $configfile
+	__hyd_cfg_add_str		HSPECEst		NotificationThresholdLimit $configfile
+	__hyd_cfg_add_str		HSPECEst		NotificationThresholdPercentage $configfile
+	__hyd_cfg_add_str		HSPECEst		AlphaNumerator $configfile
+	__hyd_cfg_add_str		HSPECEst		AlphaDenominator $configfile
+	__hyd_cfg_add_str		HSPECEst		LocalFlowRateThreshold $configfile
+	__hyd_cfg_add_str		HSPECEst		LocalFlowRatioThreshold $configfile
+	__hyd_cfg_add_str		HSPECEst		MaxHActiveEntries $configfile
+
+	__hyd_cfg_nl_append '[LOGSETTINGS]' $configfile
+	__hyd_cfg_add_str		LogSettings		EnableLog $configfile
+	__hyd_cfg_add_str		LogSettings		LogRestartIntervalSec $configfile
+	__hyd_cfg_add_str		LogSettings		LogPCSummaryIntervalSec $configfile
+	__hyd_cfg_add_str		LogSettings		LogServerIP $configfile
+	__hyd_cfg_add_str		LogSettings		LogServerPort $configfile
+	__hyd_cfg_add_str		LogSettings		EnableLogPCW2 $configfile
+	__hyd_cfg_add_str		LogSettings		EnableLogPCW5 $configfile
+	__hyd_cfg_add_str		LogSettings		EnableLogPCP $configfile
+	__hyd_cfg_add_str		LogSettings		EnableLogTD $configfile
+	__hyd_cfg_add_str		LogSettings		EnableLogHE $configfile
+	__hyd_cfg_add_str		LogSettings		EnableLogPS $configfile
+	__hyd_cfg_add_str		LogSettings		LogHEThreshold1 $configfile
+	__hyd_cfg_add_str		LogSettings		LogHEThreshold2 $configfile
+
+	__hyd_cfg_nl_append '[IEEE1905]' $configfile
+	__hyd_cfg_add_str		IEEE1905Settings	StrictIEEE1905Mode $configfile
+	__hyd_cfg_add_str		IEEE1905Settings	GenerateLLDP $configfile
+	__hyd_cfg_add_str		IEEE1905Settings	AvoidDupRenew $configfile
+	__hyd_cfg_add_str		IEEE1905Settings	AvoidDupTopologyNotification $configfile
+
+	__hyd_cfg_nl_append '[HCP]' $configfile
+	__hyd_cfg_add_str		HCPSettings		V1Compat $configfile
+
+	__hyd_cfg_nl_append '[WLAN]' $configfile
+	__hyd_cfg_add_str		Wlan			WlanCheckFreqInterval $configfile
+	__hyd_cfg_add_str		Wlan			WlanALDNLNumOverride $configfile
+
+	__hyd_cfg_nl_append '[MAP]' $configfile
+	__hyd_cfg_add_str		MultiAP		        EnableController $configfile
+	__hyd_cfg_add_str		MultiAP		        EnableAgent $configfile
+	__hyd_cfg_add_str		MultiAP		        EnableSigmaDUT $configfile
+	__hyd_cfg_add_str		MultiAP		        ClientAssocCtrlTimeoutSec $configfile
+	__hyd_cfg_add_str		MultiAP		        ClientAssocCtrlTimeoutUsec $configfile
+	__hyd_cfg_add_str		MultiAP		        ShortBlacklistTimeSec $configfile
+	__hyd_cfg_add_str		MultiAP		        AlwaysClearBlacklists $configfile
+	__hyd_cfg_add_str		MultiAP		        ClientSteerTimeoutSec $configfile
+	__hyd_cfg_add_str		MultiAP		        ClientSteerTimeoutUsec $configfile
+	__hyd_cfg_add_str		MultiAP		        MetricsReportingInterval $configfile
+	__hyd_cfg_add_str		MultiAP		        RSSIHysteresis_W2 $configfile
+	__hyd_cfg_add_str		MultiAP		        RSSIHysteresis_W5 $configfile
+	__hyd_cfg_add_str		MultiAP		        LoadBalancingInterval $configfile
+	__hyd_cfg_add_str		MultiAP		        EnableChannelSelection $configfile
+        __hyd_cfg_add_str               MultiAP                 MinPreferredChannelIndex $configfile
+        __hyd_cfg_add_str               MultiAP                 MaxPreferredChannelIndex $configfile
+
+	# The following parameters are taken from the LBD config.
+	config_load 'lbd'
+	__hyd_cfg_add_str_new_key		Offload		        MUOverloadThreshold_W2 ChanUtilSteeringThreshold_W2 $configfile
+	__hyd_cfg_add_str_new_key		Offload		        MUOverloadThreshold_W5 ChanUtilSteeringThreshold_W5 $configfile
+        __hyd_cfg_add_str_new_key               Offload                 MUOverloadThreshold_W2 ChanUtilReportingThreshold_W2 $configfile
+        __hyd_cfg_add_str_new_key               Offload                 MUOverloadThreshold_W5 ChanUtilReportingThreshold_W5 $configfile
+	__hyd_cfg_add_str_new_key		APSteer		        LowRSSIAPSteerThreshold_SIG RSSISteeringThreshold_W2 $configfile
+	__hyd_cfg_add_str_new_key		APSteer		        LowRSSIAPSteerThreshold_SIG RSSISteeringThreshold_W5 $configfile
+	__hyd_cfg_add_str_new_key		APSteer		        LowRSSIAPSteerThreshold_SIG RSSIReportingThreshold_W2 $configfile
+	__hyd_cfg_add_str_new_key		APSteer		        LowRSSIAPSteerThreshold_SIG RSSIReportingThreshold_W5 $configfile
+	__hyd_cfg_add_str_new_key		ActiveSteer		TxRateXingThreshold_UG  HighTxRateXingThreshold $configfile
+	__hyd_cfg_add_str_new_key		ActiveSteer		TxRateXingThreshold_DG  LowTxRateXingThreshold $configfile
+	__hyd_cfg_add_str_new_key		ActiveSteer		RateRSSIXingThreshold_UG HighRateRSSIXingThreshold $configfile
+	__hyd_cfg_add_str_new_key		ActiveSteer		RateRSSIXingThreshold_DG LowRateRSSIXingThreshold $configfile
+	__hyd_cfg_add_str_new_key		IdleSteer		RSSISteeringPoint_UG InactRSSIXingHighThreshold $configfile
+	__hyd_cfg_add_str_new_key		IdleSteer		RSSISteeringPoint_DG InactRSSIXingLowThreshold $configfile
+
+
+	config_load 'hyd'  # in case loading whc clobbered any values
+	__hyd_cfg_nl_append '[STEERMSG]' $configfile
+	__hyd_cfg_add_str		SteerMsg		AvgUtilReqTimeout $configfile
+	__hyd_cfg_add_str		SteerMsg		LoadBalancingCompleteTimeout $configfile
+	__hyd_cfg_add_str		SteerMsg		RspTimeout $configfile
+
+	__hyd_cfg_nl_append '[MONITOR]' $configfile
+	__hyd_cfg_add_str       Monitor         DisableMonitoringLegacyClients $configfile
+	__hyd_cfg_add_str       Monitor         DisableSteeringInactiveLegacyClients $configfile
+	__hyd_cfg_add_str       Monitor         DisableSteeringActiveLegacyClients $configfile
+	__hyd_cfg_add_str       Monitor         DisableSteeringMax11kUnfriendlyClients $configfile
+	__hyd_cfg_add_str       Monitor         MonitorTimer $configfile
+	__hyd_cfg_add_str       Monitor         MonitorResponseTimeout $configfile
+
+	# If the configuration exists, go ahead and append it. Even if the Wi-Fi load
+	# balancing feature is disabled, there should be no harm in doing so.
+	if [ -f /etc/config/lbd ]; then
+		local default_mode enable_ctrl enable_agent multi_ap_mode
+		__hyd_get_default_mode default_mode
+		config_get mode config 'Mode' "$default_mode"
+		config_get enable_ctrl MultiAP 'EnableController' '0'
+		config_get enable_agent MultiAP 'EnableAgent' '0'
+
+		if [ "$enable_ctrl" -gt 0 ] || [ "$enable_agent" -gt 0 ]; then
+			multi_ap_mode='map'
+		else
+			multi_ap_mode='son'
+		fi
+
+		__hyd_cfg_nl_append '[WLB]' "$configfile"
+		__hyd_cfg_add_str		config		DisableSteering "$configfile"
+
+		if [ "${mode}" = 'HYCLIENT' ];then
+			# running in multi-AP RE mode
+			lbd_create_config "$configfile" $multi_ap_mode 0 "$br_name"
+		else
+			# running in multi-AP CAP mode
+			lbd_create_config "$configfile" $multi_ap_mode 1 "$br_name"
+		fi
+	fi
+}
+
+__hyd_set_wlan_mcastenhance() {
+	hyfi_get_wlan_ifaces $ieee1905managed_bridge wlan_ifaces wlan_included_ifaces
+	[ -z "$wlan_ifaces" ] && return
+	hyfi_strip_list $wlan_ifaces wlan_ifaces
+
+	for wlan_iface in ${wlan_ifaces}; do
+		if [ -z $HYD_CFG80211 ]; then
+			iwpriv $wlan_iface mcastenhance $1
+		else
+			cfg80211tool $wlan_iface mcastenhance $1
+		fi
+	done
+
+	if [ -n "$ieee1905managed_bridge2" ];then
+		hyfi_get_wlan_ifaces $ieee1905managed_bridge2 wlan_ifaces2 wlan_included_ifaces2
+		[ -z "$wlan_ifaces2" ] && return
+
+		hyfi_strip_list $wlan_ifaces2 wlan_ifaces2
+		for wlan_iface in ${wlan_ifaces}; do
+			if [ -z $HYD_CFG80211 ]; then
+				iwpriv $wlan_iface2 mcastenhance $1
+			else
+				cfg80211tool $wlan_iface2 mcastenhance $1
+			fi
+		done
+	fi
+}
+
+__hyd_reset_cpu_limit_value_for_legacy_boards() {
+	config_load 'hyd'
+	local tcp2g udp2g tcp5g udp5g limit name
+
+	config_get tcp2g PathChWlan 'CPULimitedTCPThroughput_W2' '0'
+	[ "$tcp2g" -gt 0 ] && return 1
+
+	config_get udp2g PathChWlan 'CPULimitedUDPThroughput_W2' '0'
+	[ "$udp2g" -gt 0 ] && return 1
+
+	config_get tcp5g PathChWlan 'CPULimitedTCPThroughput_W5' '0'
+	[ "$tcp5g" -gt 0 ] && return 1
+
+	config_get udp5g PathChWlan 'CPULimitedUDPThroughput_W5' '0'
+	[ "$udp5g" -gt 0 ] && return 1
+
+	[ -f /tmp/sysinfo/board_name ] || return 1
+	name=`cat /tmp/sysinfo/board_name`
+
+	case "$name" in
+	reh132 | aph126 | aph128 | db120)
+		limit=160
+		;;
+	aph131)
+		limit=300
+		;;
+	*)
+		# Max u_int32.  If the throughput should be limited for a particular
+		# board, add an entry for it above.
+		limit=4294967295
+		;;
+	esac
+
+	uci set hyd.PathChWlan.CPULimitedTCPThroughput_W2=$limit
+	uci set hyd.PathChWlan.CPULimitedUDPThroughput_W2=$limit
+	uci set hyd.PathChWlan.CPULimitedTCPThroughput_W5=$limit
+	uci set hyd.PathChWlan.CPULimitedUDPThroughput_W5=$limit
+	uci commit hyd
+}
+
+# this block of code is for checking if all the configured interfaces are ready.
+# a global flag is used for passing the rechecking resule
+is_iface_all_up=1
+__hyd_check_one_iface_ready() {
+	local config=$1
+	local network mode disabled device dev_disabled
+
+	config_get iface "$config" ifname
+	config_get network "$config" network
+	config_get mode "$config" mode
+	config_get disabled "$config" disabled '0'
+
+	# Skip this interface if disabled at the device level
+	config_get device "$config" device
+	config_get dev_disabled "$device" disabled '0'
+	if [ "$dev_disabled" -gt 0 ]; then
+		return
+	fi
+
+	if [ "$2" = "$network" -a "$disabled" -eq 0 ]; then
+		# interface name may not be available
+		if [ -z "$iface" ]; then
+			is_iface_all_up=0
+		else
+			# interface may not be up
+			iwconfig $iface 2>/dev/null |grep $iface
+			retval=$?
+			if [ $retval -ne 0 ] ;then
+				is_iface_all_up=0
+			fi
+		fi
+	fi
+}
+
+__hyd_check_interfaces_ready () {
+	config_load wireless
+
+	is_iface_all_up=1
+	config_foreach __hyd_check_one_iface_ready wifi-iface $1
+	if [ $is_iface_all_up -ne 1 ] ;then
+		hyfi_echo hyd "some interface(s) are not ready."
+	fi
+}
+
+start_service() {
+	hyfi_lock  # Ensure only single config file generator
+	config_load 'hyd'
+	config_get_bool enabled config 'Enable' '0'
+	local hyd_rcd_enabled=`ls /etc/rc.d/S${START}hyd 2> /dev/null`
+
+	[ "$enabled" -gt 0 -a -n "$hyd_rcd_enabled" ] || {
+		hyfi_unlock
+		return 1
+	}
+
+	# Get the IEEE1905.1 managed bridge name and attach
+	hyfi_get_ieee1905_managed_iface ieee1905managed_bridge ieee1905managed_bridge2
+
+	# Make sure the bridge is attached first
+	if ! hyctl show br-$ieee1905managed_bridge | grep -q br-$ieee1905managed_bridge ; then
+		hyfi_error "hyd" "Bridge is not attached; start hyfi-bridging first"
+		hyfi_unlock
+		return 1
+	fi
+
+	if [ -n "$ieee1905managed_bridge2" ] ;then
+	    if  ! hyctl show br-$ieee1905managed_bridge2 | grep -q br-$ieee1905managed_bridge2 ; then
+		hyfi_error "hyd" "Bridge is not attached; start hyfi-bridging first"
+		hyfi_unlock
+		return 1
+	    fi
+	fi
+	# Enable wlan Hy-Fi multicast enhancement
+	__hyd_set_wlan_mcastenhance 5
+
+	# By default disable retag of DSCP when multicast enhancement is enabled.
+	hyctl setmc br-$ieee1905managed_bridge retag disable
+
+	if [ -n "$ieee1905managed_bridge2" ] ;then
+	    hyctl setmc br-$ieee1905managed_bridge2 retag disable
+	fi
+
+	__hyd_reset_cpu_limit_value_for_legacy_boards
+
+	# check for all the interfaces for private network ready
+	__hyd_check_interfaces_ready ${ieee1905managed_bridge}
+	if [ $is_iface_all_up -eq 0 ]; then
+		hyfi_error "hyd" "Private network interface checking failed"
+		hyfi_unlock
+		return 1
+	fi
+
+	if [ -n "$ieee1905managed_bridge2" ] ;then
+		# check for all the interfaces for guest network ready
+		__hyd_check_interfaces_ready ${ieee1905managed_bridge2}
+		if [ $is_iface_all_up -eq 0 ]; then
+			hyfi_error "hyd" "Guest network interface checking failed" >> /tmp/bill.log
+			hyfi_unlock
+			return 1
+		fi
+	fi
+
+	# Create temp configuration files, then rename and then start hyd
+	hyd_temp_file=${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge}-tmp.conf
+	hyd_temp_file2=${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge2}-tmp.conf
+	__hyd_create_config $ieee1905managed_bridge ${hyd_temp_file}
+
+	if [ -n "$ieee1905managed_bridge2" ] ;then
+	    __hyd_create_config $ieee1905managed_bridge2 ${hyd_temp_file2}
+	fi
+
+	hyfi_echo hyd "starting daemon"
+
+	procd_open_instance
+	procd_set_param command ${SERVICE_PATH} -d -C "$HYD_CONFIG_FILE_PREFIX-${ieee1905managed_bridge}.conf" -P 7777 $HYD_CFG80211
+
+	# Uncomment this line to send the logs to a file
+	#procd_set_param env DBG_APPEND_FILE_PATH=/tmp/hyd.log
+
+	procd_set_param respawn ${RESPAWN_THRESHOLD} ${RESPAWN_TIMEOUT} ${RESPAWN_RETRIES}
+	procd_add_reload_trigger "hyd" "lbd"
+	procd_close_instance
+
+	if [ -n "$ieee1905managed_bridge2" ] ;then
+	    hyfi_echo hyd "starting daemon ${ieee1905managed_bridge2}"
+	    procd_open_instance
+	    procd_set_param command ${SERVICE_PATH} -d -C "$HYD_CONFIG_FILE_PREFIX-${ieee1905managed_bridge2}.conf" -P 8888 $HYD_CFG80211
+	    procd_set_param respawn ${RESPAWN_THRESHOLD} ${RESPAWN_TIMEOUT} ${RESPAWN_RETRIES}
+	    procd_add_reload_trigger "hyd" "lbd"
+	    procd_close_instance
+	fi
+
+	# rename the temp files to final files
+	mv ${hyd_temp_file}  ${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge}.conf
+	if [ -n "$ieee1905managed_bridge2" ] ;then
+		mv ${hyd_temp_file2} ${HYD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge2}.conf
+        fi
+
+	hyfi_unlock
+}
+
+stop_service() {
+	hyfi_get_ieee1905_managed_iface ieee1905managed_bridge ieee1905managed_bridge2
+
+	# Disable wlan Hy-Fi multicast enhancement
+	__hyd_set_wlan_mcastenhance 2
+}
diff --git a/etc/init.d/hyfi-bridging b/etc/init.d/hyfi-bridging
new file mode 100755
index 0000000..2741835
--- /dev/null
+++ b/etc/init.d/hyfi-bridging
@@ -0,0 +1,65 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+START=54
+ECM_SYSFS_FILE="/sys/kernel/debug/ecm/ecm_classifier_hyfi/enabled"
+
+ieee1905managed_bridge=
+ieee1905managed_bridge2=
+
+. /lib/functions/hyfi-debug.sh
+. /lib/functions/hyfi-iface.sh
+. /lib/functions/hyfi-network.sh
+
+start() {
+	config_load 'hyd'
+	config_get_bool enabled config 'Enable' '0'
+	local hyfi_bridging_rcd_enabled=`ls /etc/rc.d/S${START}hyfi-bridging 2> /dev/null`
+
+	[ "$enabled" -gt 0 -a -n "$hyfi_bridging_rcd_enabled" ] || {
+		return 1
+	}
+
+	# Enable hyfi-netfilter
+	if [ -f /proc/sys/net/bridge/bridge-nf-call-custom ]; then
+		sysctl -w net.bridge.bridge-nf-call-custom=1
+	fi
+
+	# Get the IEEE1905.1 managed bridge name and attach
+	hyfi_get_ieee1905_managed_iface ieee1905managed_bridge ieee1905managed_bridge2
+
+	# Bail out from starting hyd if attach fails.
+	if ! hyctl attach br-$ieee1905managed_bridge; then
+		stop
+		return 1
+	fi
+
+	if [ -n "$ieee1905managed_bridge2" ];then
+	    if ! hyctl attach br-$ieee1905managed_bridge2; then
+		stop
+		return 1
+	    fi
+	fi
+
+}
+
+stop() {
+	config_load 'hyd'
+
+	# Disable hyfi-netfilter
+	if [ -f /proc/sys/net/bridge/bridge-nf-call-custom ]; then
+		sysctl -w net.bridge.bridge-nf-call-custom=0
+	fi
+
+	# Get the IEEE1905.1 managed bridge name and detach
+	hyfi_get_ieee1905_managed_iface ieee1905managed_bridge
+	hyctl detach br-$ieee1905managed_bridge
+
+	if [ -n "$ieee1905managed_bridge2" ]; then
+	    hyctl detach br-$ieee1905managed_bridge2
+	fi
+
+}
diff --git a/etc/init.d/inetd b/etc/init.d/inetd
new file mode 100755
index 0000000..99c36c3
--- /dev/null
+++ b/etc/init.d/inetd
@@ -0,0 +1,29 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+# Permission to use, copy, modify, and/or 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.
+
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+[ -e /etc/inetd.conf ] || {
+        echo -e "ftp\tstream\ttcp\tnowait\troot\t/usr/sbin/ftpd\tftpd\t/" >> /etc/inetd.conf;
+}
+
+start() {
+        service_start /usr/sbin/inetd -f
+}
+
+stop()  {
+        service_stop /usr/sbin/inetd
+}
diff --git a/etc/init.d/lbd b/etc/init.d/lbd
new file mode 100755
index 0000000..d559626
--- /dev/null
+++ b/etc/init.d/lbd
@@ -0,0 +1,154 @@
+#!/bin/sh /etc/rc.common
+#
+# @@-COPYRIGHT-START-@@
+#
+# Copyright (c) 2013-2018 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2013-2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#
+# @@-COPYRIGHT-END-@@
+#
+
+START=55
+SERVICE_WRITE_PID=1
+SERVICE_DAEMONIZE=1
+SERVICE_DEBUG_OUTPUT=0
+SERVICE_PATH="/usr/sbin/lbd"
+LBD_CONFIG_FILE="/tmp/lbd.conf"
+LBD_RUN_FILE="/var/run/.lbd"
+
+#Check lbd config to enable/disable cfg80211
+config_load 'lbd'
+config_get_bool lbd_cfg config 'cfg80211_enable' '0'
+if [ "$lbd_cfg" -eq "1" ]; then
+    LBD_CFG80211=-cfg80211
+else
+    LBD_CFG80211=
+fi
+
+. /lib/functions/lbd-config.sh
+. /lib/functions/whc-debug.sh
+. /lib/functions/whc-iface.sh
+
+check_bands() {
+	local band_24g
+	local band_5g
+
+	driver=$(lsmod | cut -d' ' -f 1 | grep ath10k_core)
+
+	if [ "$driver" == "ath10k_core" ]; then
+		BANDS=$(/usr/sbin/iw dev 2> /dev/null | grep channel | cut -d' ' -f 2 | cut -d'.' -f 1)
+		for channel in $BANDS
+		do
+			whc_echo lbd "bands $BANDS channel $channel"
+			if [ "$channel" -le "13" ]; then
+				band_24g=1
+			elif [ "$channel" -ge "32" ]; then
+				band_5g=1
+			fi
+		done
+	else
+		BANDS=$(/usr/sbin/iwconfig 2> /dev/null | grep Frequency | cut -d':' -f 3 | cut -d'.' -f 1)
+		for band in $BANDS
+		do
+			if [ "$band" == "2" ]; then
+				band_24g=1
+			elif [ "$band" == "5" ]; then
+				band_5g=1
+			fi
+		done
+	fi
+
+	if [ "$band_24g" == "1" ] && [ "$band_5g" == "1" ]; then
+		dual_bands=1
+	else
+		dual_bands=0
+	fi
+}
+
+check_interface_up() {
+	local section="config"
+	local option="MatchingSSID"
+	local all_wlan_ifaces
+	local ssid_to_match
+	wifi_interface_up=0
+	count=2
+
+	#init the interface lists
+	whc_init_wlan_interface_list
+
+	# Get the list of wlan interfaces, seperated by comma
+	config_list_foreach "${section}" "${option}" whc_get_wlan_ifaces all_wlan_ifaces ssid_to_match "$br_name"
+
+	while [ "$wifi_interface_up" -eq "0" ]
+	do
+		interface=`echo ${all_wlan_ifaces}| cut -d':' -f $count | cut -d',' -f 1`
+		while [ ! -z $interface ]
+		do
+			essid=$(/usr/sbin/iwconfig $interface 2> /dev/null | grep ESSID | cut -d'"' -f 2)
+			if [ -z $essid ]; then
+				sleep 2s
+			else
+				break 1
+		fi
+		done
+		if [ -z $interface ];then
+			wifi_interface_up=1
+		else
+			count=$((count+=1))
+		fi
+	done
+}
+
+start() {
+	whc_wifi_config_lock
+	__stop
+
+	config_load 'lbd'
+	config_get_bool enabled config 'Enable' '0'
+	local lbd_rcd_enabled=`ls /etc/rc.d/S${START}lbd 2> /dev/null`
+
+	[ "$enabled" -gt 0 -a -n "$lbd_rcd_enabled" ] || {
+		whc_wifi_config_unlock
+		return 1
+	}
+
+	check_bands
+	if [ "$dual_bands" -ne "1" ]; then
+		whc_echo lbd "require both 2.4 GHz and 5 GHz to be configured. Aborting start."
+		whc_wifi_config_unlock
+		return 1
+	fi
+
+	check_interface_up
+	whc_echo lbd "starting daemon"
+	# Create configuration file and start lbd
+	lbd_create_config $LBD_CONFIG_FILE '' # second param indicates running in single AP mode
+	${SVCDBG}service_start ${SERVICE_PATH} -d -C "$LBD_CONFIG_FILE" $LBD_CFG80211
+
+	touch $LBD_RUN_FILE
+	whc_wifi_config_unlock
+}
+
+__stop() {
+	${SVCDBG}service_stop ${SERVICE_PATH}
+
+	# Workaround, sometimes service_stop does not kill lbd
+	start-stop-daemon -K -x ${SERVICE_PATH} -s SIGKILL > /dev/null
+}
+
+stop() {
+	__stop
+	config_load 'lbd'
+}
+
+restart() {
+	[ -f "$LBD_RUN_FILE" ] || return
+	start
+}
diff --git a/etc/init.d/led b/etc/init.d/led
new file mode 100755
index 0000000..2c11f95
--- /dev/null
+++ b/etc/init.d/led
@@ -0,0 +1,118 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+
+START=95
+
+load_led() {
+	local name
+	local sysfs
+	local trigger
+	local dev
+	local mode
+	local default
+	local delayon
+	local delayoff
+	local interval
+
+	config_get sysfs $1 sysfs
+	config_get name $1 name "$sysfs"
+	config_get trigger $1 trigger "none"
+	config_get dev $1 dev
+	config_get mode $1 mode "link"
+	config_get_bool default $1 default "nil"
+	config_get delayon $1 delayon
+	config_get delayoff $1 delayoff
+	config_get interval $1 interval "50"
+	config_get port_state $1 port_state
+	config_get delay $1 delay "150"
+	config_get message $1 message ""
+	config_get gpio $1 gpio "0"
+	config_get inverted $1 inverted "0"
+	config_get disabled $1 disabled "0"
+
+	[ -e /sys/class/leds/${sysfs}/suspended ] && {
+		[ "$disabled" = 0 ] || echo 1 >/sys/class/leds/${sysfs}/suspended
+	}
+
+	if [ "$trigger" = "rssi" ]; then
+		# handled by rssileds userspace process
+		return
+	fi
+
+	[ -e /sys/class/leds/${sysfs}/brightness ] && {
+		echo "setting up led ${name}"
+
+		[ "$default" = 0 ] &&
+			echo 0 >/sys/class/leds/${sysfs}/brightness
+
+		echo $trigger > /sys/class/leds/${sysfs}/trigger 2> /dev/null
+		ret="$?"
+
+		[ $default = 1 ] &&
+			echo 1 >/sys/class/leds/${sysfs}/brightness
+
+		[ $ret = 0 ] || {
+			echo >&2 "Skipping trigger '$trigger' for led '$name' due to missing kernel module"
+			return 1
+		}
+		case "$trigger" in
+		"netdev")
+			[ -n "$dev" ] && {
+				echo $dev > /sys/class/leds/${sysfs}/device_name
+				echo $mode > /sys/class/leds/${sysfs}/mode
+			}
+			;;
+
+		"timer")
+			[ -n "$delayon" ] && \
+				echo $delayon > /sys/class/leds/${sysfs}/delay_on
+			[ -n "$delayoff" ] && \
+				echo $delayoff > /sys/class/leds/${sysfs}/delay_off
+			;;
+
+		"usbdev")
+			[ -n "$dev" ] && {
+				echo $dev > /sys/class/leds/${sysfs}/device_name
+				echo $interval > /sys/class/leds/${sysfs}/activity_interval
+			}
+			;;
+
+		"port_state")
+			[ -n "$port_state" ] && \
+				echo $port_state > /sys/class/leds/${sysfs}/port_state
+			;;
+
+		"morse")
+			echo $message > /sys/class/leds/${sysfs}/message
+			echo $delay > /sys/class/leds/${sysfs}/delay
+			;;
+
+		"gpio")
+			echo $gpio > /sys/class/leds/${sysfs}/gpio
+			echo $inverted > /sys/class/leds/${sysfs}/inverted
+			;;
+
+		switch[0-9]*)
+			local port_mask
+
+			config_get port_mask $1 port_mask
+			[ -n "$port_mask" ] && \
+				echo $port_mask > /sys/class/leds/${sysfs}/port_mask
+			;;
+
+		"wifi")
+			config_get disableLeds $1 disableLeds 0
+			[ "$(cat /sys/class/leds/${sysfs}/disableLeds)" = "$disableLeds" ] || {
+				echo -n $disableLeds >/sys/class/leds/${sysfs}/disableLeds
+			}
+			;;
+		esac
+	}
+}
+
+start() {
+	[ -e /sys/class/leds/ ] && {
+		config_load system
+		config_foreach load_led led
+	}
+}
diff --git a/etc/init.d/log b/etc/init.d/log
new file mode 100755
index 0000000..c5ef0ae
--- /dev/null
+++ b/etc/init.d/log
@@ -0,0 +1,99 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2013 OpenWrt.org
+
+# start after and stop before networking
+START=12
+STOP=89
+PIDCOUNT=0
+
+USE_PROCD=1
+PROG=/sbin/logread
+
+validate_log_section()
+{
+	uci_validate_section system system "${1}" \
+		'log_file:string' \
+		'log_size:uinteger' \
+		'log_ip:ipaddr' \
+		'log_remote:bool:1' \
+		'log_port:port:514' \
+		'log_proto:or("tcp", "udp"):udp' \
+		'log_trailer_null:bool:0' \
+		'log_prefix:string'
+}
+
+validate_log_daemon()
+{
+	uci_validate_section system system "${1}" \
+		'log_size:uinteger:0' \
+		'log_buffer_size:uinteger:0'
+}
+
+start_service_daemon()
+{
+	local log_buffer_size log_size
+	validate_log_daemon "${1}"
+	[ $log_buffer_size -eq 0 -a $log_size -gt 0 ] && log_buffer_size=$log_size
+	[ $log_buffer_size -eq 0 ] && log_buffer_size=16
+	procd_open_instance
+	procd_set_param command "/sbin/logd"
+	procd_append_param command -S "${log_buffer_size}"
+	#procd_set_param limits core="unlimited"
+	procd_set_param respawn
+	procd_close_instance
+}
+
+start_service_file()
+{
+	PIDCOUNT="$(( ${PIDCOUNT} + 1))"
+	local pid_file="/var/run/logread.${PIDCOUNT}.pid"
+	local log_file log_size
+
+	validate_log_section "${1}" || {
+		echo "validation failed"
+		return 1
+	}
+	[ -z "${log_file}" ] && return
+
+	procd_open_instance
+	procd_set_param command "$PROG" -f -F "$log_file" -p "$pid_file"
+	[ -n "${log_size}" ] && procd_append_param command -S "$log_size"
+	procd_close_instance
+}
+
+start_service_remote()
+{
+	PIDCOUNT="$(( ${PIDCOUNT} + 1))"
+	local pid_file="/var/run/logread.${PIDCOUNT}.pid"
+	local log_ip log_port log_proto log_prefix log_remote log_trailer_null
+
+	validate_log_section "${1}" || {
+		echo "validation failed"
+		return 1
+	}
+	[ "${log_remote}" -ne 0 ] || return
+	[ -z "${log_ip}" ] && return
+
+	procd_open_instance
+	procd_set_param command "$PROG" -f -r "$log_ip" "${log_port}" -p "$pid_file"
+	case "${log_proto}" in
+		"udp") procd_append_param command -u;;
+		"tcp") [ "${log_trailer_null}" -eq 1 ] && procd_append_param command -0;;
+	esac
+	[ -z "${log_prefix}" ] || procd_append_param command -P "${log_prefix}"
+	procd_close_instance
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "system"
+	procd_add_validation validate_log_section
+}
+
+start_service()
+{
+	config_load system
+	config_foreach start_service_daemon system
+	config_foreach start_service_file system
+	config_foreach start_service_remote system
+}
diff --git a/etc/init.d/miniupnpd b/etc/init.d/miniupnpd
new file mode 100755
index 0000000..4c5911c
--- /dev/null
+++ b/etc/init.d/miniupnpd
@@ -0,0 +1,251 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2014 OpenWrt.org
+
+START=95
+STOP=15
+
+USE_PROCD=1
+SERVICE_USE_PID=1
+
+upnpd_get_port_range() {
+	local _var="$1"; shift
+	local _val
+
+	config_get _val "$@"
+
+	case "$_val" in
+		[0-9]*[:-][0-9]*)
+			export -n -- "${_var}_start=${_val%%[:-]*}"
+			export -n -- "${_var}_end=${_val##*[:-]}"
+		;;
+		[0-9]*)
+			export -n -- "${_var}_start=$_val"
+			export -n -- "${_var}_end="
+		;;
+	esac
+}
+
+conf_rule_add() {
+	local cfg="$1"
+	local tmpconf="$2"
+	local action external_port_start external_port_end int_addr
+	local internal_port_start internal_port_end
+
+	config_get action "$cfg" action "deny"               # allow or deny
+	upnpd_get_port_range "ext" "$cfg" ext_ports "0-65535" # external ports: x, x-y, x:y
+	config_get int_addr "$cfg" int_addr "0.0.0.0/0"       # ip or network and subnet mask (internal)
+	upnpd_get_port_range "int" "$cfg" int_ports "0-65535" # internal ports: x, x-y, x:y or range
+
+	# Make a single IP IP/32 so that miniupnpd.conf can use it.
+	case "$int_addr" in
+		*/*) ;;
+		*) int_addr="$int_addr/32" ;;
+	esac
+
+	echo "${action} ${ext_start}${ext_end:+-}${ext_end} ${int_addr} ${int_start}${int_end:+-}${int_end}" >>$tmpconf
+}
+
+upnpd_write_bool() {
+	local opt="$1"
+	local def="${2:-0}"
+	local alt="$3"
+	local val
+
+	config_get_bool val config "$opt" "$def"
+	if [ "$val" -eq 0 ]; then
+		echo "${alt:-$opt}=no" >> $tmpconf
+	else
+		echo "${alt:-$opt}=yes" >> $tmpconf
+	fi
+}
+
+boot() {
+	return
+}
+
+set_presentation_url() {
+
+	isSet=$(ubus call network.interface.lan6 status | grep \"address\" | grep -v \"\-address\")
+
+	[[ -z "$isSet" ]] || {   
+		ip6addr=$(ifconfig br-lan | grep "Scope:Link")                
+		ip6addr=$(echo ${ip6addr//[[:blank:]]})                 
+		ip6addr="${ip6addr%%\/*}"
+		ip6addr="${ip6addr##* }"
+		echo "presentation_url=http://[$ip6addr]" >>$tmpconf
+	}   
+}
+
+start_service() {
+	. /etc/delos-version
+	. /etc/device_info
+	config_load "upnpd"
+	local extiface intiface upload download logging secure enabled natpmp
+	local extip port usesysuptime conffile serial_number model_number
+	local uuid notify_interval presentation_url enable_upnp
+	local upnp_lease_file clean_ruleset_threshold clean_ruleset_interval
+        local ipv6_listening_ip
+
+	config_get extiface config external_iface
+	config_get extzone config external_zone
+	config_get intiface config internal_iface
+	config_get extip config external_ip
+	config_get port config port 5000
+	config_get upload   config upload
+	config_get download config download
+	config_get_bool logging config log_output 0
+	config_get conffile config config_file
+	config_get serial_number config serial_number
+	config_get model_number config model_number
+	config_get uuid config uuid
+	config_get notify_interval config notify_interval
+	config_get presentation_url config presentation_url
+	config_get upnp_lease_file config upnp_lease_file
+	config_get clean_ruleset_threshold config clean_ruleset_threshold
+	config_get clean_ruleset_interval config clean_ruleset_interval
+	config_get ipv6_listening_ip config ipv6_listening_ip
+	
+	friendname=$(uci get system.@system[0].hostname)
+	vendorname="$DEVICE_MANUFACTURER"
+	modelname="$DEVICE_PRODUCT"
+	firmversion="$FIRMWARE_VERSION"
+	vendorurl="$DEVICE_VENDOR_URL"
+	serialnumber=$(uci get -P /var/state delos.baptization.SerialNumber)
+	modelnumber=$(uci get -P /var/state delos.baptization.MT)
+
+	local args
+
+	. /lib/functions/network.sh
+
+	local ifname
+
+        # manual external interface overrides everything
+        if [ -z "$extiface" ] ; then
+            # manual external zone (if dynamically find interfaces
+            # belonging to it) overrides network_find_wan*
+            if [ -n "$extzone" ] ; then
+                ifname=$(fw3 -q zone $extzone | head -1)
+            fi
+            [ -n "$extiface" ] || network_find_wan extiface
+            [ -n "$extiface" ] || network_find_wan6 extiface
+        fi
+
+	[ -n "$ifname" ] || network_get_device ifname ${extiface}
+
+	if [ -n "$conffile" ]; then
+		args="-f $conffile"
+	else
+		local tmpconf="/var/etc/miniupnpd.conf"
+		args="-f $tmpconf"
+		mkdir -p /var/etc
+
+		echo "ext_ifname=$ifname" >$tmpconf
+
+		[ -n "$extip" ] && \
+			echo "ext_ip=$extip" >>$tmpconf
+
+		local iface
+		for iface in ${intiface:-lan}; do
+			local device
+			network_get_device device "$iface" && {
+				echo "listening_ip=$device" >>$tmpconf
+			}
+		done
+
+		[ "$port" != "auto" ] && \
+			echo "port=$port" >>$tmpconf
+
+		config_load "upnpd"
+		upnpd_write_bool enable_natpmp 1
+		upnpd_write_bool enable_upnp 1
+		upnpd_write_bool secure_mode 1
+		upnpd_write_bool pcp_allow_thirdparty 0
+		upnpd_write_bool system_uptime 1
+
+		[ -n "$upnp_lease_file" ] && \
+			echo "lease_file=$upnp_lease_file" >>$tmpconf
+
+		[ -n "$upload" -a -n "$download" ] && {
+			echo "bitrate_down=$(($download * 1024 * 8))" >>$tmpconf
+			echo "bitrate_up=$(($upload * 1024 * 8))" >>$tmpconf
+		}
+
+		[ -n "${presentation_url}" ] && \
+			echo "presentation_url=${presentation_url}" >>$tmpconf
+
+		[ -n "${notify_interval}" ] && \
+			echo "notify_interval=${notify_interval}" >>$tmpconf
+
+		[ -n "${clean_ruleset_threshold}" ] && \
+			echo "clean_ruleset_threshold=${clean_ruleset_threshold}" >>$tmpconf
+
+		[ -n "${clean_ruleset_interval}" ] && \
+			echo "clean_ruleset_interval=${clean_ruleset_interval}" >>$tmpconf
+
+		[ -n "${ipv6_listening_ip}" ] && \
+			echo "ipv6_listening_ip=${ipv6_listening_ip}" >>$tmpconf
+
+		[ -z "$uuid" ] && {
+			uuid="$(cat /proc/sys/kernel/random/uuid)"
+			uci set upnpd.config.uuid=$uuid
+			uci commit upnpd
+		}
+
+		[ "$uuid" = "nocli" ] || \
+			echo "uuid=$uuid" >>$tmpconf
+
+		[ -n "${serial_number}" ] && \
+			echo "serial=${serial_number}" >>$tmpconf
+
+		[ -n "${model_number}" ] && \
+			echo "model_number=${model_number}" >>$tmpconf
+
+	    config_foreach conf_rule_add perm_rule "$tmpconf"
+	fi
+	
+	echo "friendly_name=$friendname" >>$tmpconf
+	echo "manufacturer_name=$vendorname" >>$tmpconf
+	echo "model_name=$modelname" >>$tmpconf
+	echo "serial=$serialnumber" >>$tmpconf
+	echo "model_number=$modelnumber" >>$tmpconf
+
+	echo "manufacturer_url=$vendorurl" >>$tmpconf
+	echo "model_url=$vendorurl" >>$tmpconf
+	set_presentation_url
+
+	if [ -n "$ifname" ]; then
+		# start firewall
+		iptables -L MINIUPNPD >/dev/null 2>/dev/null || fw3 reload
+
+		if [ "$logging" = "1" ]; then
+			SERVICE_DAEMONIZE=1 \
+			service_start /usr/sbin/miniupnpd $args -d
+		else
+			SERVICE_DAEMONIZE= \
+			service_start /usr/sbin/miniupnpd $args
+		fi
+	else
+		logger -t "upnp daemon" "external interface not found, not starting"
+	fi
+}
+
+stop_service() {
+	service_stop /usr/sbin/miniupnpd
+
+	iptables -t nat -F MINIUPNPD 2>/dev/null
+	iptables -t filter -F MINIUPNPD 2>/dev/null
+
+        [ -x /usr/sbin/ip6tables ] && {
+	    ip6tables -t filter -F MINIUPNPD 2>/dev/null
+        }
+}
+
+reload_service() {                                                                                      
+	stop                                                                                            
+	start                                                                                       
+}
+
+service_triggers()                                                                          
+{                                                                               
+	procd_add_reload_trigger upnpd                                                                                 
+}
diff --git a/etc/init.d/network b/etc/init.d/network
new file mode 100755
index 0000000..b8a9773
--- /dev/null
+++ b/etc/init.d/network
@@ -0,0 +1,162 @@
+#!/bin/sh /etc/rc.common
+
+START=20
+STOP=90
+
+USE_PROCD=1
+
+[ -f /lib/sm_fixup.sh ] && source /lib/sm_fixup.sh || fixup_network_config() {
+	return 0
+}
+
+init_switch() {
+	setup_switch() { return 0; }
+
+	include /lib/network
+	setup_switch
+}
+
+start_service() {
+	fixup_network_config
+	init_switch
+
+	procd_open_instance
+	procd_set_param command /sbin/netifd
+	procd_set_param respawn
+	procd_set_param watch network.interface
+	[ -e /proc/sys/kernel/core_pattern ] && {
+		procd_set_param limits core="unlimited"
+		echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
+	}
+	procd_close_instance
+	if eval "type start_service_hook" 2>/dev/null >/dev/null; then
+		start_service_hook
+	fi
+}
+
+reload_service() {
+	fixup_network_config
+	init_switch
+	ubus call network reload
+	[ -e /etc/delos-pts-image-marker ] || /sbin/wifi reload_legacy
+	if eval "type reload_service_hook" 2>/dev/null >/dev/null; then
+		reload_service_hook
+	fi
+}
+
+stop_service() {
+	/sbin/wifi down
+	ifdown -a
+	sleep 1
+	if eval "type stop_service_hook" 2>/dev/null >/dev/null; then
+		stop_service_hook
+	fi
+}
+
+service_running() {
+	ubus -t 30 wait_for network.interface
+	[ -e /etc/delos-pts-image-marker ] || /sbin/wifi reload_legacy
+}
+
+validate_atm_bridge_section()
+{
+	uci_validate_section network "atm-bridge" "${1}" \
+		'unit:uinteger:0' \
+		'vci:range(32, 65535):35' \
+		'vpi:range(0, 255):8' \
+		'atmdev:uinteger:0' \
+		'encaps:or("llc", "vc"):llc' \
+		'payload:or("bridged", "routed"):bridged'
+}
+
+validate_route_section()
+{
+	uci_validate_section network route "${1}" \
+		'interface:string' \
+		'target:cidr4' \
+		'netmask:netmask4' \
+		'gateway:ip4addr' \
+		'metric:uinteger' \
+		'mtu:uinteger' \
+		'table:or(range(0,65535),string)'
+}
+
+validate_route6_section()
+{
+	uci_validate_section network route6 "${1}" \
+		'interface:string' \
+		'target:cidr6' \
+		'gateway:ip6addr' \
+		'metric:uinteger' \
+		'mtu:uinteger' \
+		'table:or(range(0,65535),string)'
+}
+
+validate_rule_section()
+{
+	uci_validate_section network rule "${1}" \
+		'in:string' \
+		'out:string' \
+		'src:cidr4' \
+		'dest:cidr4' \
+		'tos:range(0,31)' \
+		'mark:string' \
+		'invert:bool' \
+		'lookup:or(range(0,65535),string)' \
+		'goto:range(0,65535)' \
+		'action:or("prohibit", "unreachable", "blackhole", "throw")'
+}
+
+validate_rule6_section()
+{
+	uci_validate_section network rule6 "${1}" \
+		'in:string' \
+		'out:string' \
+		'src:cidr6' \
+		'dest:cidr6' \
+		'tos:range(0,31)' \
+		'mark:string' \
+		'invert:bool' \
+		'lookup:or(range(0,65535),string)' \
+		'goto:range(0,65535)' \
+		'action:or("prohibit", "unreachable", "blackhole", "throw")'
+}
+
+validate_switch_section()
+{
+	uci_validate_section network switch "${1}" \
+		'name:string' \
+		'enable:bool' \
+		'enable_vlan:bool' \
+		'reset:bool'
+}
+
+validate_switch_vlan()
+{
+	uci_validate_section network switch_vlan "${1}" \
+		'device:string' \
+		'vlan:uinteger' \
+		'ports:list(ports)'
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger network wireless
+
+	procd_open_validate
+	validate_atm_bridge_section
+	validate_route_section
+	validate_route6_section
+	validate_rule_section
+	validate_rule6_section
+	validate_switch_section
+	validate_switch_vlan
+	procd_close_validate
+}
+
+shutdown() {
+	ifdown -a
+	sleep 1
+}
+
+[ -e /lib/netifd/delos-init.sh ] && . /lib/netifd/delos-init.sh
diff --git a/etc/init.d/ntpd b/etc/init.d/ntpd
new file mode 100755
index 0000000..f8cdb36
--- /dev/null
+++ b/etc/init.d/ntpd
@@ -0,0 +1,62 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=65
+STOP=65
+
+USE_PROCD=1
+PROG=/sbin/ntpd
+HOTPLUG_HELPER=/usr/sbin/ntpd.hotplug-helper
+CONFIG_FILE=/var/run/ntpd.conf
+
+validate_ntp_section() {
+        uci_validate_section system timeserver "${1}" \
+	        'server:list(host)' 'enabled:bool:1' 'enable_server:bool:0'
+}
+
+start_service() {
+	mkdir -p /var/lib/ntp
+
+	local server enabled enable_server peer restrict
+
+	validate_ntp_section ntp || {
+		echo "validation failed"
+		return 1
+	}
+
+	[ $enabled = 0 ] && return
+	[ -z "$server" ] && return
+	if [ $enable_server = 0 ]; then
+		restrict="ignore"
+	else
+		restrict="nomodify noquery notrap"
+	fi
+
+cat >$CONFIG_FILE <<EOF
+driftfile /var/lib/ntp/ntp.drift
+restrict default $restrict
+restrict source nomodify noquery notrap
+restrict 127.0.0.1
+restrict ::1
+EOF
+	for peer in $server; do
+		echo "pool $peer iburst" >>$CONFIG_FILE
+	done
+
+	procd_open_instance
+	procd_set_param command $PROG -g -p /var/run/ntpd.pid -c $CONFIG_FILE -n
+	procd_set_param respawn
+	procd_set_param file $CONFIG_FILE
+	procd_close_instance
+
+	procd_open_instance
+	procd_set_param command $HOTPLUG_HELPER
+	procd_close_instance
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "system"
+	procd_add_validation validate_ntp_section
+}
+
diff --git a/etc/init.d/parental_control b/etc/init.d/parental_control
new file mode 100755
index 0000000..b9403df
--- /dev/null
+++ b/etc/init.d/parental_control
@@ -0,0 +1,22 @@
+#!/bin/sh /etc/rc.common
+
+START=18
+USE_PROCD=1
+
+start_service(){
+        /usr/bin/parental_control.sh check
+}
+
+reload_service(){
+        /usr/bin/parental_control.sh cron
+        /usr/bin/parental_control.sh check
+}
+
+service_triggers(){
+        procd_add_reload_trigger parental_control
+}
+
+boot() {
+	/usr/bin/parental_control.sh cron
+	start
+}
diff --git a/etc/init.d/plc b/etc/init.d/plc
new file mode 100755
index 0000000..8d7f8b2
--- /dev/null
+++ b/etc/init.d/plc
@@ -0,0 +1,687 @@
+#!/bin/sh /etc/rc.common
+
+# we must run after S95done because jffs2 overlay must be ready for writing to /lib/firmware/plc
+START=96
+STOP=10
+
+USE_PROCD=1
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+board=$(${PLATFORM}_board_name)
+
+. /lib/functions/system.sh
+. /lib/functions/leds.sh
+
+
+. /lib/firmware/plc/$board/fwconfig
+
+config_load plc
+config_get PLCIF plc interface 'br-lan'
+config_get INMK plc individual_nmk '0'
+config_get LED_SCHEME plc led_scheme 'on'
+config_get_bool DISABLED plc disabled '0'
+config_get_bool STANDBY plc standby '0'
+config_get COMPAT_MODE plc compat_mode
+config_get USER_NOTCHES plc user_notches
+
+[ -e /lib/dlan/baptization.sh ] && . /lib/dlan/baptization.sh
+
+[ -x /usr/sbin/plc-standby ] || STANDBY=0
+
+logger() {
+	command logger -t plc "$@"
+}
+
+set_ebtables() {
+    reset_ebtables
+
+    local PIB=/lib/firmware/plc/user.pib
+
+    dlan_mac=$(getpib "$PIB" 0xC mac)
+
+    while [ ! -d /sys/class/net/$PLCIF ]; do
+        logger "Waiting for /sys/class/net/$PLCIF to appear..."
+        sleep 1
+    done
+
+    eth_mac=$(cat /sys/class/net/$PLCIF/address)
+
+    ebtables -t broute -N plc -P RETURN
+    ebtables -t broute -I BROUTING -p 0x88e1 -j plc
+
+    ebtables -t broute -A plc -s 00:B0:52:00:00:01 -j DROP
+    ebtables -t broute -A plc -s $dlan_mac -d Broadcast -j DROP
+    ebtables -t broute -A plc -d $eth_mac -j DROP
+}
+
+reset_ebtables() {
+    ebtables -t broute -D BROUTING -p 0x88e1 -j plc 2>/dev/null
+    ebtables -t broute -X plc 2>/dev/null
+}
+
+set_dak()
+{
+    local dak="$DlanDAK"
+    if [ -n "$dak" ] ; then
+	/usr/bin/modpib -D "$dak" "$1" || logger "Writing DAK to PIB failed"
+    fi
+}
+
+update_dak()
+{
+    local dak="$DlanDAK"
+    if [ -z "$dak" ] ; then
+	if [ ! -f $PLCFW_PATH/security-id ] ; then
+	    { tr -dc a-zA-Z </dev/urandom | tr a-z A-Z | head -c16 |
+	      sed -e 's,\(....\),\1-,g' -e 's,-$,\n,' >$PLCFW_PATH/security-id; } 2>/dev/null
+	fi
+	local sid=$(head -n 1 $PLCFW_PATH/security-id)
+	local dak=$(hpavkey -D $sid)
+	if [ ! -f $PLCFW_PATH/dak ] || [ $(cat $PLCFW_PATH/dak) != $dak ] ; then
+	    echo $dak >$PLCFW_PATH/dak
+	fi
+	if [ "$(chkpib -v "$1" | sed -n '/DAK/s,:,,gp' | awk '{ print $2 }')" != "$dak" ]; then
+	    /usr/bin/modpib -D "$dak" "$1" || logger "Writing DAK to PIB failed"
+	fi
+    fi
+}
+
+set_nmk()
+{
+    /usr/bin/modpib -N "$2" "$1"
+}
+
+set_individual_nmk()
+{
+    local sid="$DlanDevicePassword"
+    [ -z "$sid" ] && return 1
+
+    local prefix="lqaS0JTUC1FWY6OVivVsRqL57H6MjSom"
+    local suffix="8cxJaMHJqsR9yug2fLTbqqVxuGw3OLfg"
+    local nmk=$(echo -n "${prefix}${sid}${suffix}" |md5sum |sed s/../\&:/g | cut -c-47)
+    set_nmk "$1" "$nmk"
+}
+
+set_mac_address()
+{
+    local plc_mac="$DlanMacAddress"
+
+    if [ -z "$plc_mac" ] ; then
+        local base_mac=$(mtd_get_mac_binary art 4098 2>/dev/null)
+        if [ "$board" = "dlan-pro-1200-n" ]; then
+            plc_mac=$(macaddr_add $base_mac 2)
+        else
+            plc_mac=$(macaddr_add $base_mac 3)
+        fi
+    fi
+    if [ -n "$plc_mac" ] ; then
+        /usr/bin/modpib -M $(macaddr_canonicalize $plc_mac) "$1"
+    fi
+}
+
+set_hostname()
+{
+    modpib -U "$(uci_get system @system[0] hostname)" "$1"
+}
+
+### compat_mode
+
+make_patch_file_name()
+{
+    echo "${PLCFW_PATH}/${board}/patches_mt${1}_${2}.txt"
+}
+
+make_reset_patch_file_name()
+{
+    echo "${PLCFW_PATH}/${board}/reset_patch_mt${1}.txt"
+}
+
+apply_patch_file()
+{
+    local pib_file="$1"
+    local patch_file="$2"
+    
+    logger "Applying compat mode patch file: $patch_file"
+    [ -f "$patch_file" ] || { logger "Error: Patch file not found"; return; }
+    
+    # TODO: move copy+pasted patch file parsing (from build scripts) into common file
+    while IFS='' read -r line; do
+        local offset=$(echo "$line" | cut -d' ' -f1 | grep -E '^0x[0-9a-fA-F]+$')
+        local data=$(echo "$line" | cut -d' ' -f2 | grep -E '^0x[0-9a-fA-F]+$' | sed -e 's/^0x//')
+
+        if [ -z "$offset" ] || [ -z "$data" ]; then
+            [ -z "$line" ] || logger "Malformed line: '$line'"
+            continue
+        fi
+        
+        logger "Patching offset: $offset"
+        setpib "$pib_file" "$offset" data "$data"
+    done < "$patch_file"
+}
+
+apply_compat_mode()
+{
+    local pib_file="$1"
+    
+    local patch_file_reset=$(make_reset_patch_file_name "$MT")
+    apply_patch_file "$pib_file" "$patch_file_reset"
+    
+    if [ -n "$COMPAT_MODE" ]; then
+        local patch_file_selected=$(make_patch_file_name "$MT" "$COMPAT_MODE")
+        apply_patch_file "$pib_file" "$patch_file_selected"
+    fi
+}
+
+### user_notches
+
+CHIPCLASS=$(basename "$PLCFW_PIB" | sed -e 's/-.*//')
+case "$CHIPCLASS" in
+    qca7500)
+        CARRIER_MIN=0
+        CARRIER_MAX=2689
+        CARRIER_OFFSET_PRI=5480
+        CARRIER_OFFSET_ALT=6948
+        ;;
+    qca7420)
+        CARRIER_MIN=0
+        CARRIER_MAX=2689
+        CARRIER_OFFSET_PRI=4840
+        CARRIER_OFFSET_ALT=""
+        ;;
+    *)
+        CARRIER_MIN=""
+        CARRIER_MAX=""
+        CARRIER_OFFSET_PRI=""
+        CARRIER_OFFSET_ALT=""
+        ;;
+esac
+
+write_zeros_to_file()
+{
+    local filename="$1"
+    local ofs="$2"
+    local len="$3"
+    
+    dd if=/dev/zero of="$filename" conv=notrunc bs=1 seek="$ofs" count="$len"
+}
+
+apply_notch_range_to_pib()
+{
+    local pib_file="$1"
+    local carr_s="$2"
+    local carr_e="$3"
+
+    if [ "$CHIPCLASS" = "qca7500" ] || [ "$CHIPCLASS" = "qca7420" ]; then
+        carr_s=$(( $carr_s / 2 ))
+        carr_e=$(( $carr_e / 2 ))
+    fi
+    
+    local len=$(( $carr_e - $carr_s + 1 ))
+    if [ -n "$CARRIER_OFFSET_PRI" ]; then
+        write_zeros_to_file "$pib_file" $(( $CARRIER_OFFSET_PRI + $carr_s )) "$len"
+    fi
+    if [ -n "$CARRIER_OFFSET_ALT" ]; then
+        write_zeros_to_file "$pib_file" $(( $CARRIER_OFFSET_ALT + $carr_s )) "$len"
+    fi
+}
+
+notch_freq_to_carrier()
+{
+    local freq="$1"
+    
+    echo $(awk "BEGIN { print int($freq * 0.04096 - 73.5) }")
+}
+
+apply_notch_range()
+{
+    local pib_file="$1"
+    local freq_s="$2"
+    local freq_e="$3"
+
+    [ "$freq_s" -le "$freq_e" ] || return
+    
+    local carr_s=$(notch_freq_to_carrier "$freq_s")
+    local carr_e=$(notch_freq_to_carrier "$freq_e")
+    
+    carr_s=$(( $carr_s - 3 ))
+    carr_e=$(( $carr_e + 3 ))
+
+    [ "$carr_s" -gt "$CARRIER_MAX" ] && return
+    [ "$carr_e" -lt "$CARRIER_MIN" ] && return
+
+    [ "$carr_s" -lt "$CARRIER_MIN" ] && carr_s="$CARRIER_MIN"
+    [ "$carr_e" -gt "$CARRIER_MAX" ] && carr_e="$CARRIER_MAX"
+
+    logger "Applying notch range: carriers ${carr_s}-${carr_e}"
+    
+    apply_notch_range_to_pib "$pib_file" "$carr_s" "$carr_e"
+}
+
+apply_user_notches()
+{
+    local pib_file="$1"
+    
+    logger "Applying user notches"
+    
+    local range
+    for range in $(echo "$USER_NOTCHES" | tr "," "\n"); do
+        local freq_s=$(echo "$range" | cut -d '-' -f 1)
+        local freq_e=$(echo "$range" | cut -d '-' -f 2)
+
+        apply_notch_range "$pib_file" "$freq_s" "$freq_e"
+    done
+}
+
+###
+
+set_user_pib()
+{
+    if [ ! -f "$PLCFW_PATH/user.pib" ] ; then
+	eval cp "\"$PLCFW_PATH/\${PLCFW_PIB_$MT:-$PLCFW_PIB}\"" /tmp/user.pib
+	setpib /tmp/user.pib 6 word 0
+	set_dak /tmp/user.pib
+	set_mac_address /tmp/user.pib
+	set_hostname /tmp/user.pib
+	[ -e /tmp/lh_nmk ] && . /tmp/lh_nmk && rm -f /tmp/lh_nmk
+	if [ -n "$LH_NMK" ]; then
+		set_nmk /tmp/user.pib "$LH_NMK"
+	elif [ "$INMK" -eq 1 ]; then
+	    set_individual_nmk /tmp/user.pib
+	fi
+	mv /tmp/user.pib "$PLCFW_PATH"
+    fi
+    update_dak "$PLCFW_PATH/user.pib"
+
+    cp -f "$PLCFW_PATH/user.pib" /tmp
+    apply_compat_mode /tmp/user.pib
+    apply_user_notches /tmp/user.pib
+    mv -f /tmp/user.pib "$PLCFW_PATH"
+}
+
+do_gpios()
+{
+    case "$board" in
+    dlan-hotspot)
+	echo 1 > /sys/class/gpio/gpio18/value
+	echo 1 > /sys/class/gpio/gpio22/value
+	sleep 1
+	echo 1 > /sys/class/gpio/gpio20/value
+	;;
+
+    dlan-pro-500-wp)
+	echo 1 > /sys/class/gpio/gpio17/value
+	echo 1 > /sys/class/gpio/gpio13/value
+	;;
+
+    dlan-550-wifi)
+	echo 1 > /sys/class/gpio/gpio16/value
+	;;
+
+    dlan-1000-ac)
+	echo 1 > /sys/class/gpio/gpio2/value
+	led_set_attr "devolo:status:dlan" inverted 1
+	;;
+
+    dlan-pro-1200-ac|\
+    dlan-pro-1200-n)
+	echo 1 > /sys/class/gpio/gpio13/value
+	led_set_attr "devolo:status:dlan" inverted 1
+	;;
+
+    devolo-home-control-cu)
+	echo 1 > /sys/class/gpio/gpio19/value
+	return
+	;;
+    esac
+	sleep 1
+}
+
+get_pib_field() {
+    ( chkpib -v "$1" | grep "$2 " | cut -d ' ' -f 2- ) 2>/dev/null
+}
+
+
+SERVICE_PID_FILE="/var/run/plchost.pid"
+PLC_CONFIG_FILE="/tmp/plc.conf"
+PLC_RUNTIME_FILE="/etc/plc/runtime"
+
+activate() {
+    if chkpib -q "$PLCFW_PATH/user.pib.tmp" ; then
+        mv "$PLCFW_PATH/user.pib.tmp" "$PLCFW_PATH/user.pib"
+    fi
+    PIB="$PLCFW_PATH/user.pib"
+
+    if [ -f "$PLCFW_PATH/user.nvm.tmp" ] && [ -s "$PLCFW_PATH/user.nvm.tmp" ] ; then
+        mv "$PLCFW_PATH/user.nvm.tmp" "$PLCFW_PATH/user.nvm"
+    fi
+    NVM="$PLCFW_PATH/user.nvm"
+    if [ ! -s "$NVM" ] ; then
+        NVM="$PLCFW_PATH/$PLCFW_NVM"
+    fi
+
+    # last minute changes to user pib before using it
+    local changed=
+    cp "$PIB" /tmp/user.pib
+    # LED scheme
+    [ -n "$LED_SCHEME" ] && [ -x "$PLCFW_SCHEMES/led_scheme_$LED_SCHEME" ] && {
+	"$PLCFW_SCHEMES/led_scheme_$LED_SCHEME" /tmp/user.pib
+	changed=1
+    }
+    [ -n "$changed" ] && {
+	mv /tmp/user.pib "$PIB.tmp"
+	mv "$PIB.tmp" "$PIB"
+    }
+
+    [ -f "$NVM" ] && {
+        logger "activate PLC Modem"
+		logger "Firmware:" $NVM "Pib:" $PIB
+        do_gpios
+        procd_open_instance
+        config_load wifi_son
+        config_get SON_ENABLED son enabled '0'
+        config_get IEEE19051 confsync ieee19051 '0'
+        # run ***host - if it terminates try to save user.pib.tmp if it checks out
+	if [ $SON_ENABLED = "1" ] && [ $IEEE19051 = "1" ]; then
+		logger "PLC Modem: SON Enabled"
+		plc_add_basic_config_plchost_son
+		if [ ! -f "/lib/firmware/plc/7500/mac-release-X.nvm" ]; then
+			mkdir -p "/lib/firmware/plc/7500/"
+			cp -f "$NVM" "/lib/firmware/plc/7500/mac-release-X.nvm"
+		fi
+		procd_set_param command setsid sh -c '
+	            trap "trap - TERM; kill \$CPID; exit" TERM
+	            /usr/sbin/plchost-son -c "'"$PLC_CONFIG_FILE"'" &
+		    CPID=$!
+	            wait $!
+	            chkpib -q /lib/firmware/plc/user.pib.tmp && mv /lib/firmware/plc/user.pib.tmp /lib/firmware/plc/user.pib'
+	else
+		logger "PLC Modem: SON Disabled"
+		procd_set_param command setsid sh -c '
+	            trap "trap - TERM; kill \$CPID; exit" TERM
+	            "'"$PLCFW_HOST"'" -i "'"$PLCIF"'" -N "'"$NVM"'" -P "'"$PIB"'" -n "'"$PLCFW_PATH/user.nvm.tmp"'" -p "'"$PLCFW_PATH/user.pib.tmp"'" &
+		    CPID=$!
+	            wait $!
+	            chkpib -q /lib/firmware/plc/user.pib.tmp && mv /lib/firmware/plc/user.pib.tmp /lib/firmware/plc/user.pib'
+	fi
+        procd_set_param respawn 3600 5 0
+        # output to logd
+        procd_set_param stdout 1
+        procd_set_param stderr 1
+        procd_set_param pidfile $SERVICE_PID_FILE
+        procd_close_instance
+        [ $STANDBY = "1" ] && {
+            procd_open_instance
+            procd_set_param command /usr/sbin/plc-standby 600
+            procd_set_param respawn 3600 5 0
+            procd_close_instance
+        }
+    }
+}
+
+
+
+plc_cfg_append() {
+    echo "$1" >> "$PLC_CONFIG_FILE"
+}
+
+plc_cfg_add_specific_str() {
+    local Cfg="$1"
+    local SubOpt="$2"
+    local UciKey="$3"
+    local DefVal="$4"
+    local Val
+    config_load plc
+    config_get Val $SubOpt "$UciKey" "$DefVal"
+    [ -n "$Val" ] && plc_cfg_append "$Cfg=$Val"
+}
+
+plc_cfg_add_bool() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local val
+
+    config_get_bool val config "$key" "$def"
+    [ -n "$val" ] && plc_cfg_append "$cfg=$val"
+}
+
+plc_cfg_add_nmk() {
+    config_load plc
+    config_get nmkselected config 'NmkSelected' 'true'
+
+    case "$nmkselected" in
+        true)
+            plc_cfg_add_specific_str 'nmk' 'config' 'Nmk' '50d3e4933f855b7040784df815aa8db7'
+        ;;
+        false)
+            plc_cfg_add_specific_str 'network_passwd' 'config' 'NetworkPassWd' 'HomePlugAV'
+        ;;
+    esac
+}
+
+
+plc_add_basic_config_plchost_son() {
+    local ExecMode
+    local FwPib_DownloadEn
+
+    echo "# Config file for plc, automatically created by script" > "$PLC_CONFIG_FILE"
+    echo "[PLC]" >> "$PLC_CONFIG_FILE"
+
+#    plc_add_basic_config
+#    plc_add_adv_config
+#    plc_add_qos_tos_priority_config
+#    plc_add_qos_vlan_priority_config
+#    plc_add_qos_threshold_config
+#    plc_add_rem_dev_config
+#    plc_add_classifier_config
+
+
+    config_load plc
+    config_get plc_ifname config PlcIfname
+
+    plc_cfg_add_nmk
+    # Setup PLC interface name and bridge name
+
+    config_get_bool enabled config 'VLANEnabled' '0'
+    if [ "$enabled" == "1" ]; then
+        bridge_ifname="br_lan"
+    fi
+
+	bridge_ifname=$plc_ifname
+    plc_cfg_append "bridge_ifname=$bridge_ifname"
+    plc_cfg_append "plc_ifname=$plc_ifname"
+
+    #Below are Board specific information, will get rid of this later
+    plc_cfg_add_specific_str 'aggr_link_rate' 'config' 'AggrLinkRate' '0'
+    plc_cfg_add_specific_str 'fwpib_download' 'config' 'FwPib_Download' '0'
+    plc_cfg_add_specific_str 'mac_addr_delta' 'config' 'MacAddrDelta' '2'
+    plc_cfg_add_specific_str 'run_mode' 'config' 'PlcRunMode' 'HyFi'
+    plc_cfg_add_specific_str 'max_rem_dev' 'config' 'MaxRemoteDevices' '6'
+    plc_cfg_add_specific_str 'topo_disc_timeout' 'config' 'TopoDiscovTimeOut' '60'
+
+    config_get ExecMode config PlcRunMode 'HyFi'
+    config_get FwPib_DownloadEn config FwPib_Download
+
+    if [ "$ExecMode" == "HyFi" ]
+    then
+        config_get PibFilepath config PibPath '/lib/firmware/plc/user.pib'
+        if [ ! -f $PibFilepath ]; then
+            # cat /dev/mtdblock5 > /etc/plc/FactoryDefault.pib
+
+            # Temporary Workaround for REH172: copying factory PIB from file system, as the mtd partition is not ready yet.
+            # SHOULD BE FIXED IN FINAL META!!!
+            if [ "$FwPib_DownloadEn" == "1" ]; then
+                cp $PIB $PibFilepath
+            fi
+        fi
+        plc_cfg_add_specific_str 'pib_path' 'config' 'PibPath' $PibFilepath
+    fi
+}
+
+
+
+
+stop_service() {
+    logger "stop PLC"
+    case "$board" in
+    dlan-hotspot)
+	echo 0 > /sys/class/gpio/gpio20/value
+	;;
+
+    dlan-pro-500-wp)
+	echo 0 > /sys/class/gpio/gpio13/value
+	;;
+
+    dlan-550-wifi)
+	echo 0 > /sys/class/gpio/gpio16/value
+	;;
+
+    dlan-1000-ac)
+	# reinstall normal led trigger potentially messed up by standby
+	( . /etc/init.d/led && config_load system && load_led led_plcw )
+	echo 0 > /sys/class/gpio/gpio2/value
+	led_set_attr "devolo:status:dlan" inverted 0
+	;;
+
+    dlan-pro-1200-ac|\
+    dlan-pro-1200-n)
+	# reinstall normal led trigger potentially messed up by standby
+	( . /etc/init.d/led && config_load system && load_led led_plcw )
+	echo 0 > /sys/class/gpio/gpio13/value
+	led_set_attr "devolo:status:dlan" inverted 0
+	;;
+
+    devolo-home-control-cu)
+	echo 0 > /sys/class/gpio/gpio19/value
+	;;
+    esac
+    reset_ebtables
+	rm -rf "$SERVICE_PID_FILE"
+}
+
+check_plc_config_change() {
+    CONFIG_FILE=$1
+
+    config_load plc
+    config_get PLCINTERFACE plc interface 'br-lan'
+    config_get INDIVIDUAL_NMK plc individual_nmk '0'
+    config_get LEDSCHEME plc led_scheme 'on'
+    config_get_bool STANDBY plc standby '0'
+    config_get_bool PLC_DISABLED plc disabled '0'
+    config_get COMPAT_MODE plc compat_mode
+    config_get USER_NOTCHES plc user_notches
+
+    config_get PLCIFNAME config PlcIfname
+    config_get AGGRLINKRATE config AggrLinkRate
+    config_get_bool PLC_ENABLED config Enabled
+    config_get_bool VLANENABLED config VlanEnabled
+    config_get FWPIB_DOWNLOAD config FwPib_Download
+
+    local hostname="$(uci_get system @system[0] hostname)"
+    local disabled_led_plcw="$(uci_get system led_plcw disabled 0)"
+    local disabled_led_plcr="$(uci_get system led_plcr disabled 0)"
+    local disabled_button_dLAN="$(uci_get system button_BTN_0 disabled 0)"
+
+cat >$CONFIG_FILE <<EOF
+system hostname $hostname
+led_plcw disabled $disabled_led_plcw
+led_plcr disabled $disabled_led_plcr
+button_dLAN disabled $disabled_button_dLAN
+plc disabled $PLC_DISABLED
+plc interface $PLCINTERFACE
+plc individual_nmk $INDIVIDUAL_NMK
+plc led_scheme $LEDSCHEME
+plc standby $STANDBY
+plc compat_mode $COMPAT_MODE
+plc user_notches $USER_NOTCHES
+config PlcIfname $PLCIFNAME
+config AggrLinkRate $AGGRLINKRATE
+config Enabled $PLC_ENABLED
+config VlanEnabled $VLANENABLED
+config FwPib_Download $FWPIB_DOWNLOAD
+EOF
+}
+
+start_service() {
+    check_plc_config_change /var/run/plc.conf
+    [ $DISABLED = '1' ] && return
+
+    [ -r /lib/firmware/plc/$board/fwconfig ] && [ -r "$PLCFW_PATH/$PLCFW_PIB" ] && [ -r "$PLCFW_PATH/$PLCFW_NVM" ] || {
+	logger "PLC: Firmware for $board not found!"
+	return 1
+    }
+    set_user_pib
+    set_ebtables
+    logger "start PLC"
+    activate
+}
+
+reload_service() {
+    check_plc_config_change /var/run/plc_tmp.conf
+    if ! cmp -s /var/run/plc.conf /var/run/plc_tmp.conf
+    then
+	stop
+	start
+    fi
+}
+
+service_triggers()
+{
+    procd_add_reload_trigger plc system
+}
+
+boot() {
+    # user PIB: DAKs must be unique, MAC must match the device. Correct it if different (after config restore).
+    if chkpib -q $PLCFW_PATH/user.pib.tmp ; then
+        mv $PLCFW_PATH/user.pib.tmp $PLCFW_PATH/user.pib
+    fi
+    [ -f $PLCFW_PATH/user.pib ] && {
+	cp $PLCFW_PATH/user.pib /tmp/user.pib
+	set_dak /tmp/user.pib
+	set_mac_address /tmp/user.pib
+	cmp -s /tmp/user.pib $PLCFW_PATH/user.pib || mv /tmp/user.pib $PLCFW_PATH/user.pib
+	rm -f /tmp/user.pib
+    }
+    if [ -f $PLCFW_PATH/security-id ] ; then
+        sid=$(head -n 1 $PLCFW_PATH/security-id)
+        dak=$(hpavkey -D $sid)
+        if [ "$(chkpib -v $PLCFW_PATH/user.pib | sed -n '/DAK/s,:,,gp' | awk '{ print $2 }')" != "$dak" ]; then
+            rm -f $PLCFW_PATH/security-id $PLCFW_PATH/dak
+        fi
+    fi
+
+    start "$@"
+}
+
+[ -x /usr/share/dlanx-standby/init-standby.sh ] && . /usr/share/dlanx-standby/init-standby.sh
+
+# redirect enable action
+[ $action = "enable" ] && action=plc_enable && EXTRA_COMMANDS="$EXTRA_COMMANDS $action"
+
+plc_enable() {
+    enable "$@"
+
+    # make service state persistent, but don't apply it
+    [ $DISABLED = '1' ] && uci batch <<EOF
+set plc.plc.disabled=0
+commit plc
+EOF
+}
+
+# redirect disable action
+[ $action = "disable" ] && action=plc_disable && EXTRA_COMMANDS="$EXTRA_COMMANDS $action"
+
+plc_disable() {
+    disable "$@"
+    # make service state persistent, but don't apply it
+    [ $DISABLED = '0' ] && uci batch <<EOF
+set plc.plc.disabled=1
+commit plc
+EOF
+}
diff --git a/etc/init.d/qca-hostapd b/etc/init.d/qca-hostapd
new file mode 100755
index 0000000..c0d61cf
--- /dev/null
+++ b/etc/init.d/qca-hostapd
@@ -0,0 +1,41 @@
+#!/bin/sh /etc/rc.common
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# Copyright (c) 2016, The Linux Foundation. All rights reserved.
+#
+
+START=15
+
+boot() {
+	if  [ -e "/var/run/hostapd-global.pid" ]
+	then
+		kill $(cat /var/run/hostapd-global.pid) &> /dev/null
+		rm /var/run/hostapd-global.pid &> /dev/null
+	fi
+	hostapd -g /var/run/hostapd/global -B -P /var/run/hostapd-global.pid
+
+	($initscript monitor&)
+}
+
+# monitor hostapd and restart with wifi if it crashed
+monitor() {
+	exec &>/dev/null
+	while sleep 5; do
+		if [ -e /var/run/hostapd-global.pid ] &&
+			wpa_cli -g /var/run/hostapd/global ping; then
+			continue
+		fi
+
+		wifi down
+		$initscript boot
+		sleep 5
+		wifi &
+		break
+	done
+}
+
+EXTRA_COMMANDS="${EXTRA_COMMANDS} monitor"
diff --git a/etc/init.d/qca-ssdk b/etc/init.d/qca-ssdk
new file mode 100755
index 0000000..f72d6ae
--- /dev/null
+++ b/etc/init.d/qca-ssdk
@@ -0,0 +1,184 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2018, The Linux Foundation. All rights reserved.
+#
+# Permission to use, copy, modify, and/or 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.
+#
+
+START=16
+
+#!/bin/sh
+ruletype="ip4 ip6"
+side="wan lan"
+qwan="1 3 2 0 5 7 6 4"
+qlan="0 1 2 3 4 5 6 7"
+
+board=""
+if [ -e /lib/ipq806x.sh ];then
+	. /lib/ipq806x.sh
+	board=$(ipq806x_board_name)
+fi
+
+function create_war_acl_rules(){
+	for lw in $side
+	do
+		#echo $lw
+		if [ "$lw" == "wan" ];then
+			listid=254
+			queue=$qwan
+			case "$board" in
+				dlan2-2400-ac)
+					portmap=0x10
+					;;
+				*)
+					portmap=0x20
+					;;
+			esac
+		else
+			listid=255
+			queue=$qlan
+			case "$board" in
+				dlan2-2400-ac)
+					portmap=0x28
+					;;
+				*)
+					portmap=0x1e
+					;;
+			esac
+		fi
+		#echo $queue
+		#echo "creating list $listid"
+		ssdk_sh acl list create $listid 255
+		ruleid=0
+		for rt in $ruletype
+		do
+			for qid in $queue
+			do
+				cmd="ssdk_sh acl rule add $listid $ruleid  1 n 0 0"
+				#echo $cmd
+				if [ "$rt" == "ip4" ];then
+					cmd="$cmd ip4 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n"
+					#echo $cmd
+				else
+					cmd="$cmd ip6 n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n n"
+					#echo $cmd
+				fi
+				if [ $ruleid -le 3 ];then
+					#non-zero dscp
+					cmd="$cmd y 0x0 0xff"
+				elif [ $ruleid -le 7 ];then
+					#zero dscp
+					cmd="$cmd n"
+				elif [ $ruleid -le 11 ];then
+					#non-zero dscp
+					cmd="$cmd y 0x0 0xff"
+				else
+					#zero dscp
+					cmd="$cmd n"
+				fi
+				p=$((ruleid/2))
+				cmd="$cmd y mask $((ruleid%2)) 0x1 y mask $((p%2)) 0x1 n n n n n n n n n n n n n n n y n n n n n n n y $qid n n 0 0 n n n n n n n n n n n n n n n n n n n n"
+				#echo $cmd
+				$cmd
+				ruleid=`expr $ruleid + 1`
+			done
+		done
+		ssdk_sh acl list bind $listid 0 1 $portmap
+	done
+}
+
+function create_war_cosmap(){
+	ssdk_sh cosmap pri2q set 0 0
+	ssdk_sh cosmap pri2q set 1 0
+	ssdk_sh cosmap pri2q set 2 0
+	ssdk_sh cosmap pri2q set 3 0
+	ssdk_sh cosmap pri2q set 4 1
+	ssdk_sh cosmap pri2q set 5 1
+	ssdk_sh cosmap pri2q set 6 1
+	ssdk_sh cosmap pri2q set 7 1
+	ssdk_sh cosmap pri2ehq set 0 0
+	ssdk_sh cosmap pri2ehq set 1 0
+	ssdk_sh cosmap pri2ehq set 2 0
+	ssdk_sh cosmap pri2ehq set 3 0
+	ssdk_sh cosmap pri2ehq set 4 1
+	ssdk_sh cosmap pri2ehq set 5 1
+	ssdk_sh cosmap pri2ehq set 6 1
+	ssdk_sh cosmap pri2ehq set 7 1
+}
+
+function delete_war_acl_rules(){
+	for lw in $side
+	do
+		#echo $lw
+		if [ "$lw" == "wan" ];then
+			listid=254
+			queue=$qwan
+			portmap=0x20
+		else
+			listid=255
+			queue=$qlan
+			portmap=0x1e
+		fi
+		ssdk_sh acl list unbind $listid 0 1 $portmap
+		for rt in $ruletype
+		do
+			for qid in $queue
+			do
+				cmd="ssdk_sh acl rule del $listid 0 1"
+				echo $cmd
+				$cmd
+			done
+		done
+		#echo "deleting list $listid"
+		ssdk_sh acl list destroy $listid
+	done
+}
+
+function delete_war_cosmap(){
+	ssdk_sh cosmap pri2q set 0 0
+	ssdk_sh cosmap pri2q set 1 0
+	ssdk_sh cosmap pri2q set 2 1
+	ssdk_sh cosmap pri2q set 3 1
+	ssdk_sh cosmap pri2q set 4 2
+	ssdk_sh cosmap pri2q set 5 2
+	ssdk_sh cosmap pri2q set 6 3
+	ssdk_sh cosmap pri2q set 7 3
+	ssdk_sh cosmap pri2ehq set 0 1
+	ssdk_sh cosmap pri2ehq set 1 0
+	ssdk_sh cosmap pri2ehq set 2 2
+	ssdk_sh cosmap pri2ehq set 3 2
+	ssdk_sh cosmap pri2ehq set 4 3
+	ssdk_sh cosmap pri2ehq set 5 3
+	ssdk_sh cosmap pri2ehq set 6 4
+	ssdk_sh cosmap pri2ehq set 7 5
+}
+
+start() {
+	#The following commands should be uncommented to enable EDMA WAR
+	case "$board" in
+		dlan2-2400-ac)
+			create_war_cosmap
+			ssdk_sh acl status set enable
+			create_war_acl_rules
+			;;
+	esac
+}
+
+stop() {
+	#The following commands should be uncommented to disable EDMA WAR
+	case "$board" in
+		dlan2-2400-ac)
+			delete_war_acl_rules
+			delete_war_cosmap
+			;;
+	esac
+}
diff --git a/etc/init.d/qca-wpa-supplicant b/etc/init.d/qca-wpa-supplicant
new file mode 100755
index 0000000..9ce0331
--- /dev/null
+++ b/etc/init.d/qca-wpa-supplicant
@@ -0,0 +1,21 @@
+#!/bin/sh /etc/rc.common
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# Copyright (c) 2016, The Linux Foundation. All rights reserved.
+#
+
+START=15
+
+boot() {
+	if [ -e "/var/run/wpa_supplicant-global.pid" ]
+	then
+		kill $(cat /var/run/wpa_supplicant-global.pid) &> /dev/null
+		rm /var/run/wpa_supplicant-global.pid &> /dev/null
+	fi
+	wpa_supplicant -g /var/run/wpa_supplicantglobal -B -P /var/run/wpa_supplicant-global.pid
+}
+
diff --git a/etc/init.d/relayd b/etc/init.d/relayd
new file mode 100755
index 0000000..c628863
--- /dev/null
+++ b/etc/init.d/relayd
@@ -0,0 +1,115 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2011-2012 OpenWrt.org
+
+START=80
+
+USE_PROCD=1
+PROG=/usr/sbin/relayd
+
+validate_proto_relayd()
+{
+	uci_validate_section network "interface" "${1}" \
+		'network:list(string)' \
+		'expiry:uinteger:30' \
+		'retry:uinteger:5' \
+		'table:range(0, 65535):16800' \
+		'forward_bcast:bool:1' \
+		'forward_dhcp:bool:1'
+}
+
+resolve_ifname() {
+	grep -qs "^ *$1:" /proc/net/dev && {
+		procd_append_param command -I "$1"
+		append ifaces "$1"
+	}
+}
+
+resolve_network() {
+	local ifn
+	fixup_interface "$1"
+	config_get ifn "$1" ifname
+	[ -z "$ifn" ] && return 1
+	resolve_ifname "$ifn"
+}
+
+start_relay() {
+	local cfg="$1"
+
+	local args=""
+	local ifaces=""
+
+	config_get proto "$cfg" proto
+	[ "$proto" = "relay" ] || return 0
+
+	config_get_bool disabled "$cfg" disabled 0
+	[ "$disabled" -gt 0 ] && return 0
+
+	SERVICE_DAEMONIZE=1
+	SERVICE_WRITE_PID=1
+	SERVICE_PID_FILE="/var/run/relay-$cfg.pid"
+	[ -f "$SERVICE_PID_FILE" ] && {
+		if grep -q relayd "/proc/$(cat $SERVICE_PID_FILE)/cmdline"; then
+			return 0
+		else
+			rm -f "$SERVICE_PID_FILE"
+		fi
+	}
+
+	procd_open_instance
+	procd_set_param command "$PROG"
+
+	local net networks
+	config_get networks "$cfg" network
+	for net in $networks; do
+		resolve_network "$net" || {
+			return 1
+		}
+	done
+
+	local ifn ifnames
+	config_get ifnames "$cfg" ifname
+	for ifn in $ifnames; do
+		resolve_ifname "$ifn"
+	done
+
+	local ipaddr
+	config_get ipaddr "$cfg" ipaddr
+	[ -n "$ipaddr" ] && procd_append_param command -L "$ipaddr"
+
+	local gateway
+	config_get gateway "$cfg" gateway
+	[ -n "$gateway" ] && procd_append_param command -G "$gateway"
+
+	local expiry # = 30
+	config_get expiry "$cfg" expiry
+	[ -n "$expiry" ] && procd_append_param command "$expiry"
+
+	local retry # = 5
+	config_get retry "$cfg" retry
+	[ -n "$retry" ] && procd_append_param command -p "$retry"
+
+	local table # = 16800
+	config_get table "$cfg" table
+	[ -n "$table" ] && procd_append_param command -T "$table"
+
+	local fwd_bcast # = 1
+	config_get_bool fwd_bcast "$cfg" forward_bcast 1
+	[ $fwd_bcast -eq 1 ] && procd_append_param command "-B"
+
+	local fwd_dhcp # = 1
+	config_get_bool fwd_dhcp "$cfg" forward_dhcp 1
+	[ $fwd_dhcp -eq 1 ] && procd_append_param command "-D"
+
+	procd_close_instance
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "network"
+}
+
+start_service() {
+	include /lib/network
+	config_load network
+	config_foreach start_relay interface
+}
diff --git a/etc/init.d/repacd b/etc/init.d/repacd
new file mode 100755
index 0000000..6b4e1f1
--- /dev/null
+++ b/etc/init.d/repacd
@@ -0,0 +1,3657 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2015, 2017-2018 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2015 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+
+# shellcheck disable=SC2034
+START=97  # needs to be after LED init
+
+# shellcheck disable=SC2034
+SERVICE_WRITE_PID=1
+
+# shellcheck disable=SC2034
+SERVICE_DAEMONIZE=1
+
+#SERVICE_DEBUG=1
+NETWORK_RESTART=0
+SERVICE_DEBUG_OUTPUT=0
+REPACD_DEBUG_OUTOUT=0
+
+# These restart_in_*_mode commands are only intended to be used by
+# repacd-run.sh.
+#
+# - restart_in_cap_mode is used when the device has a direct connection to the
+#   the gateway via ethernet. This will result in only the AP interfaces being
+#   enabled.
+# - restart_in_noncap_mode is used when the device no longer has a direct
+#   connection to the gateway via ethernet. When this is done, the device will
+#   either have both its AP and STA interfaces enabled (if its primary purpose
+#   is as a standalone RE) or just its STA interface enabled (if its primary
+#   purpose is as a client device).
+# - restart_in_re_mode is used when a device that is intended to primarily
+#   act as a client actually has sufficient link quality to act as a range
+#   extender. It will enable both the STA and AP interfaces.
+EXTRA_COMMANDS="restart_in_cap_mode restart_in_noncap_mode restart_in_re_mode"
+EXTRA_HELP=<<EOF
+        restart_in_cap_mode Reconfigure the system into Central AP mode
+        restart_in_noncap_mode Reconfigure the system into Non Central AP mode
+        restart_in_re_mode Reconfigure the system into Range Extender mode
+EOF
+
+WSPLCD_INIT='/etc/init.d/wsplcd'
+HYFI_BRIDGING_INIT='/etc/init.d/hyfi-bridging'
+HYD_INIT='/etc/init.d/hyd'
+LBD_INIT='/etc/init.d/lbd'
+MCSD_INIT='/etc/init.d/mcsd'
+
+#check repacd config to enable/disable cfg80211
+config_load 'repacd'
+config_get_bool repacd_cfg config 'cfg80211_enable' '0'
+if [ "$repacd_cfg" == "1" ]; then
+    REPACD_CFG80211=-cfg80211
+else
+    REPACD_CFG80211=
+fi
+
+WSPLCD_MAP_DIR='/etc/wsplcd/map'
+WSPLCD_MAP_BSS_POLICY_PATH="${WSPLCD_MAP_DIR}/bss-policy.conf"
+WSPLCD_MAP_TEMPLATE_DIR="${WSPLCD_MAP_DIR}/templates"
+
+. /lib/functions/whc-debug.sh
+. /lib/functions/whc-iface.sh
+. /lib/functions/whc-network.sh
+. /lib/functions/repacd-netdet.sh
+
+RE_DEFAULT_RATE_ESTIMATE_SCALING_FACTOR='70'
+RE_ROOT_AP_DISTANCE_INVALID='255'
+
+managed_network='' config_changed=0 map_bsta_max_preference=0
+vap_defconf=1
+config_re_mode='' resolved_re_mode='' resolved_re_submode=''
+wsplcd_enabled=0 wsplcd_start=0 wsplcd_stop=0 wsplcd_restart=0
+hyd_start=0 hyd_stop=0
+resolved_ssid='' resolved_enc='' resolved_key=''
+
+network_guest=
+guest_backhaul_iface=
+network_backhaul="backhaul"
+backhaul_ssid='' backhaul_key='' backhaul_enc=''
+def_backhaul_ssid="Backhaul" def_backhaul_key="1234567890" def_backhaul_enc="psk2+ccmp"
+guest_ssid='' guest_enc='' guest_key=''
+def_guest_ssid="Guest" def_guest_enc="none" def_guest_key=""
+traffic_separation_enabled='' traffic_separation_active='' create_sta=0
+daisy_chain=0 manage_vap_ind=0
+bssid_resolve_state="resolving"
+net_config_changed=0
+lan_vid=100 guest_vid=102
+eth_iface_wan="eth0"
+eth_iface_lan="eth1"
+eth_iface_wan_port=5
+eth_iface_lan_port1=4
+eth_iface_lan_port2=3
+
+capsnr=0
+Manage_front_and_back_hauls_ind=0
+
+# Write the provided log message to the correct output stream.
+# If REPACD_DEBUG_OUTOUT is non-zero, it will be written to the console.
+# Otherwise, it will be written to stdout.
+__repacd_echo() {
+    if [ "$REPACD_DEBUG_OUTOUT" -gt 0 ]; then
+        echo "whc (repacd): $*" > /dev/console
+    else
+        echo "whc (repacd): $*"
+    fi
+}
+
+# Determine if the device is configured in gateway mode or not.
+# Note that a device can still act as a CAP even if it is not in gateway
+# mode, but this is detected later by the repacd-run.sh script.
+#
+# return: 0 if in gateway mode; otherwise non-zero
+__repacd_gw_mode() {
+    local wan_iface
+
+    config_load network
+    config_get wan_iface wan ifname
+
+    [ -n "$wan_iface" ] && return 0
+
+    return 1
+}
+
+# Determine if the network is configured or not.
+#
+# input: $1 network name
+# return: 0 if network exist; otherwise non-zero
+__repacd_network_exist() {
+    local lan_name=$1
+    local no_network
+
+    no_network=$(uci show "network.$lan_name" 2>&1 | grep 'Entry not found')
+    [ -n "$no_network" ] && return 1
+
+    return 0
+}
+
+# Set bridge_empty option for the given network.
+# This option allows to create empty_bridge.
+#
+# input: $1 network name
+__repacd_set_bridge_empty() {
+    local name="$1"
+    local bridge_empty
+
+    config_load network
+
+    config_get bridge_empty "$name" 'bridge_empty' 0
+    if [ "$bridge_empty" -eq 0 ]; then
+        uci_set network "$name" bridge_empty '1'
+    fi
+
+    uci_commit network
+}
+
+# Determine if additional network exist.
+# Currently looking out for only guest network.
+#
+# input: $1 network name
+# return: 0 if exist; otherwise non-zero
+__repacd_check_additional_network_exist() {
+    config_load network
+
+    if [ -n "$network_guest" ]; then
+        if __repacd_network_exist $network_guest; then
+            return 0
+        fi
+    fi
+
+    return 1
+}
+
+# Add the given interface to the given network.
+# input: $1 network name
+# input: $2 interface name
+__repacd_add_interface() {
+    local name=$1 new_if="$2"
+    local if_name
+
+    if __repacd_network_exist "$name"; then
+        if [ -n "$new_if" ]; then
+            if_name=$(uci get "network.$name.ifname")
+            if [ -n "$if_name" ]; then
+                if_name="$if_name $new_if"
+            else
+                if_name="$new_if"
+            fi
+            if_name=$(echo "$if_name" | xargs -n1 | sort -u | xargs)
+            uci_set network "$name" ifname "$if_name"
+        fi
+    fi
+}
+
+
+# Get backhaul interfaces for ethernet.
+# output: $1 - variable into which we populate interface(eth0.102 or eth1.102).
+__repacd_get_backhaul_ifaces_eth_guest() {
+    local ifaces
+    local ifaces_guest_intf
+    ifaces=$(ifconfig 2>&1 | grep eth | grep $guest_vid)
+    ifaces_guest_intf=$(echo "$ifaces" | cut -d ' ' -f1)
+    eval "$1='$ifaces_guest_intf'"
+}
+
+# Delete the given interface from the given network.
+# input: $1 network name
+# input: $2 interface name
+__repacd_delete_interface() {
+    local name=$1 interface="$2"
+    local if_name
+
+    if __repacd_network_exist "$name"; then
+        if [ -n "$interface" ]; then
+            if_name=$(uci get "network.$name.ifname")
+            if [ -n "$if_name" ]; then
+                if_name=${if_name/$interface/}
+            fi
+            uci_set network "$name" ifname "$if_name"
+        fi
+    fi
+}
+
+# Create necessary VLAN interfaces for the backhaul vaps and add the
+# created VLAN interfaces to the given network.
+# VLAN interfaces are created by concatenating interface name and vlan id.
+# input: $1 name of the interface config section
+# input: $2 network name
+# input: $3 VLAN id
+# input: $4 Band '2.4G' or '5G' or 'both'
+# input-output: $5 change counter
+__repacd_add_vlan_interfaces() {
+    local config=$1
+    local id=$3
+    local backhaul_iface=$4
+    local changed="$5"
+    local ifname vlan_ifname
+    local disabled mode bssid device hwmode
+    local add_vlan=0
+
+    config_get network "$config" network
+    config_get ifname "$config" ifname
+    config_get disabled "$config" disabled '0'
+    config_get mode "$config" mode
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = "$network_backhaul" ] && [ -n "$ifname" ] && \
+            [ "$disabled" -eq 0 ]; then
+            vlan_ifname=$(iwconfig 2>&1 | grep "$ifname.$id" | cut -d ' ' -f1)
+            if [ -z "$vlan_ifname" ]; then
+                if [ "$backhaul_iface" = 'both' ] || [ "$mode" = "ap" ]; then
+                    add_vlan=1
+                elif [ "$backhaul_iface" = '5G' ] && \
+                     [ "$hwmode" = '11ac' ] || [ "$hwmode" = '11na' ] || [ "$hwmode" = '11a' ]; then
+                    add_vlan=1
+                elif [ "$backhaul_iface" = '2.4G' ] && \
+                     [ "$hwmode" = '11ng' ] || [ "$hwmode" = '11g' ] || [ "$hwmode" = '11b' ]; then
+                    add_vlan=1
+                fi
+
+                if [ "$add_vlan" -gt 0 ]; then
+                    vconfig add "$ifname" "$id"
+                    brctl addif "br-$2" "$ifname.$id"
+                    ifconfig "$ifname.$id" up
+                    __repacd_add_interface "$2" "$ifname.$id"
+                    changed=$((changed + 1))
+                    eval "$5='$changed'"
+                fi
+            fi
+        fi
+    fi
+}
+
+# Delete VLAN interfaces of backhaul vaps.
+# input: $1 name of the interface config section
+# input: $2 network name
+# input: $3 VLAN id
+# input: $4 mode 'sta' or 'ap'
+# input-output: $5 change counter
+__repacd_delete_vlan_interfaces() {
+    local config=$1
+    local id=$3
+    local changed="$5"
+    local ifname vlan_ifname
+    local disabled mode bssid device hwmode
+
+    config_get network "$config" network
+    config_get ifname "$config" ifname
+    config_get disabled "$config" disabled '0'
+    config_get mode "$config" mode
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = "$network_backhaul" ] && [ -n "$ifname" ] && \
+            [ "$disabled" -eq 0 ]; then
+            vlan_ifname=$(iwconfig 2>&1 | grep "$ifname.$id" | cut -d ' ' -f1)
+            if [ -n "$vlan_ifname" ]; then
+               if __repacd_is_matching_mode "$4" "$mode"; then
+                   vconfig rem "$ifname.$id"
+                   brctl delif "br-$2" "$ifname.$id"
+                   __repacd_delete_interface "$2" "$ifname.$id"
+                   changed=$((changed + 1))
+                   eval "$5='$changed'"
+               fi
+            fi
+        fi
+    fi
+}
+
+#Create Back haul interface for ethernet guest network and
+#add it to the respective bridge
+#input:$1 guest network name
+#input-output:$2 change counter
+__repacd_add_ethernet_vlan_interfaces() {
+    local backhaul_ifaces_eth
+    local network=$1
+    local changed="$2"
+
+    __repacd_get_backhaul_ifaces_eth_guest  backhaul_ifaces_eth
+    if [ -n "$backhaul_ifaces_eth" ]; then
+         __repacd_echo "Add VLAN ifaces for ethernet guest network support"
+        if [ "$backhaul_ifaces_eth" = "$eth_iface_wan.$guest_vid" ] && [ "$network" = 'guest' ];then
+             swconfig dev switch0 vlan $guest_vid set ports "0t ${eth_iface_wan_port}t ${eth_iface_lan_port1}t"
+             swconfig dev switch0 set apply
+             brctl addif "br-$network" "$backhaul_ifaces_eth"
+             ifconfig "$backhaul_ifaces_eth" up
+	      __repacd_add_interface "$network" "$backhaul_ifaces_eth"
+	elif [ "$backhaul_ifaces_eth" = "$eth_iface_lan.$guest_vid" ] && [ "$network" = 'guest' ];then
+             swconfig dev switch0 vlan $guest_vid set ports "0t ${eth_iface_lan_port1}t ${eth_iface_lan_port2}t"
+             swconfig dev switch0 set apply
+             brctl addif "br-$network" "$backhaul_ifaces_eth"
+             ifconfig "$backhaul_ifaces_eth" up
+	     __repacd_add_interface "$network" "$backhaul_ifaces_eth"
+	else
+             __repacd_echo "For Home network all the traffic is untagged,no vlan"
+	fi
+	#Do we really need to restart? revisit this
+	changed=$((changed + 1))
+	eval "$2='$changed'"
+    fi
+
+}
+
+# Create firewall rules for the given network if the rule does not exist.
+# input: $1 network name
+__repacd_set_firewall_rules() {
+    local network=$1
+    local no_rule
+    local rule_name
+
+    no_rule=$(uci show firewall | grep zone | grep "$network")
+
+    if [ -z "$no_rule" ]; then
+        local zone
+        zone=$(uci add firewall zone)
+        if [ -n "$zone" ]; then
+            uci_set firewall "$zone" name "$network"
+            uci add_list "firewall.$zone.network=$network"
+            uci_set firewall "$zone" input 'REJECT'
+            uci_set firewall "$zone" output 'ACCEPT'
+            uci_set firewall "$zone" forward 'REJECT'
+
+            local fwd
+            fwd=$(uci add firewall forwarding)
+            if [ -n "$fwd" ]; then
+                uci_set firewall "$fwd" src "$network"
+                uci_set firewall "$fwd" dest 'wan'
+            fi
+
+            local rule
+            rule=$(uci add firewall rule)
+            if [ -n "$rule" ]; then
+                uci_set firewall "$rule" name 'Allow-DHCP-request'
+                uci_set firewall "$rule" src "$network"
+                uci_set firewall "$rule" src_port '67-68'
+                uci_set firewall "$rule" dest_port '67-68'
+                uci_set firewall "$rule" proto 'udp'
+                uci_set firewall "$rule" target 'ACCEPT'
+            fi
+
+            rule=$(uci add firewall rule)
+            if [ -n "$rule" ]; then
+                uci_set firewall "$rule" name 'Allow-DNS-queries'
+                uci_set firewall "$rule" src "$network"
+                uci_set firewall "$rule" dest_port '53'
+                uci_set firewall "$rule" proto 'tcpudp'
+                uci_set firewall "$rule" target 'ACCEPT'
+            fi
+
+            rule=$(uci add firewall rule)
+            if [ -n "$rule" ]; then
+                rule_name="Block-$managed_network-$network-forwarding"
+                uci_set firewall "$rule" name "$rule_name"
+                uci_set firewall "$rule" src $managed_network
+                uci_set firewall "$rule" dest "$network"
+                uci_set firewall "$rule" proto '0'
+                uci_set firewall "$rule" family 'any'
+                uci_set firewall "$rule" target 'REJECT'
+            fi
+
+            rule=$(uci add firewall rule)
+            if [ -n "$rule" ]; then
+                rule_name="Block-$network-$managed_network-forwarding"
+                uci_set firewall "$rule" name "$rule_name"
+                uci_set firewall "$rule" src "$network"
+                uci_set firewall "$rule" dest $managed_network
+                uci_set firewall "$rule" proto '0'
+                uci_set firewall "$rule" family 'any'
+                uci_set firewall "$rule" target 'REJECT'
+            fi
+        fi
+    fi
+    uci_commit firewall
+}
+
+# Restart firewall.
+__repacd_restart_firewall() {
+    /etc/init.d/firewall restart
+}
+
+# Check whether the given interface is the backhaul AP interface on
+# the desired network and update the band specific interface names.
+#
+# input: $1 - config: the name of the interface config section
+# input: $2 - network: the name of the network to which the AP interface
+#                      must belong to be matched
+# output: $3 - iface: the resolved backhaul AP interface name on 2.4 GHz (if found)
+# output: $4 - iface: the resolved backhaul AP interface name on 5 GHz (if found)
+__repacd_wifi_check_and_get_backhaul_ap_iface() {
+    local config="$1"
+    local network_to_match="$2"
+    local iface disabled mode device hwmode backhaul_ap
+
+    config_get network "$config" network
+    config_get iface "$config" ifname
+    config_get disabled "$config" disabled '0'
+    config_get mode "$config" mode
+    config_get device "$config" device
+    config_get backhaul_ap "$config" backhaul_ap '0'
+    config_get hwmode "$device" hwmode
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = "$network_to_match" ] && [ -n "$iface" ] && [ "$mode" = "ap" ] \
+            && [ "$backhaul_ap" -gt 0 ] && [ "$disabled" -eq 0 ]; then
+            if whc_is_5g_vap "$config"; then
+                eval "$4=$iface"
+            else
+                eval "$3=$iface"
+            fi
+        fi
+    fi
+}
+
+# Configure the otherband BSSIDs for both backhaul APs
+# input: $1 - network: the name of the network to which the AP interface
+#                      must belong to be matched
+# output: None
+__repacd_wifi_set_otherband_bssids() {
+    local otherband_bssid1 otherband_bssid2 bssid_5g bssid_24g
+    local backhaul_ap_iface_24g backhaul_ap_iface_5g success=0 loop_count=15
+
+    while [ "$success" -eq 0 ] && [ "$loop_count" -gt 0 ]; do
+        config_load wireless
+        config_foreach __repacd_wifi_check_and_get_backhaul_ap_iface wifi-iface "$1" \
+            backhaul_ap_iface_24g backhaul_ap_iface_5g
+
+        if [ -n "$backhaul_ap_iface_5g" ] && [ -n "$backhaul_ap_iface_24g" ]; then
+            bssid_5g=$(ifconfig "$backhaul_ap_iface_5g" | grep "HWaddr" | awk -F" " '{print $5}')
+            bssid_24g=$(ifconfig "$backhaul_ap_iface_24g" | grep "HWaddr" | awk -F" " '{print $5}')
+
+            otherband_bssid1=$(echo "$bssid_5g" | sed -e "s/://g" | cut -b 1-8)
+            otherband_bssid2=$(echo "$bssid_5g" | sed -e "s/://g" | cut -b 9-12)
+            if [ -z $REPACD_CFG80211 ]; then
+                iwpriv $backhaul_ap_iface_24g otherband_bssid 0x$otherband_bssid1 0x$otherband_bssid2
+            else
+                cfg80211tool $backhaul_ap_iface_24g otherband_bssid 0x$otherband_bssid1 0x$otherband_bssid2
+            fi
+            otherband_bssid1=$(echo "$bssid_24g" | sed -e "s/://g" | cut -b 1-8)
+            otherband_bssid2=$(echo "$bssid_24g" | sed -e "s/://g" | cut -b 9-12)
+            if [ -z $REPACD_CFG80211 ]; then
+                iwpriv $backhaul_ap_iface_5g otherband_bssid 0x$otherband_bssid1 0x$otherband_bssid2
+            else
+                cfg80211tool $backhaul_ap_iface_5g otherband_bssid 0x$otherband_bssid1 0x$otherband_bssid2
+            fi
+            success=1
+        else
+            sleep 1
+            loop_count=$((loop_count - 1))
+        fi
+    done
+}
+
+# Enumerate all of the wifi interfaces and append
+# only station devices to the variable provided.
+# output: $1 devices: variable to populate with the station devices
+__repacd_get_sta_devices() {
+    local devices=$1
+
+    config_cb() {
+        local type="$1"
+        local section="$2"
+
+        case "$type" in
+            wifi-iface)
+                config_get mode "$section" mode
+                config_get device "$section" device
+                if [ "$mode" = 'sta' ];then
+                    eval append $devices "$device"
+                fi
+            ;;
+        esac
+    }
+    config_load wireless
+}
+
+# Configure the vap independent parameter for given wifi interface.
+#
+# input: $1 - config: interface config name to configure.
+# input: $2 - devices: list of devices to match with provided interface.
+__repacd_config_vap_ind() {
+    local config=$1
+    local devices=$2
+    local match_found=0
+    local device
+
+    config_load wireless
+    config_get device "$config" device
+
+    for device_to_match in $devices; do
+        if [ "$device" = "$device_to_match" ]; then
+            if __repacd_is_son_mode; then
+                # If in SON mode, STA vaps may be forced down based on
+                # link strength so configure the VAPs in independent mode.
+                # This will be used in conjunction with the other feature
+                # that monitors the backhaul links and brings down the AP VAPs
+                # if there is no backhaul for a sustained period of time.
+                __repacd_update_vap_param "$config" 'athnewind' 1
+            else
+                __repacd_update_vap_param "$config" 'athnewind' 0
+            fi
+            match_found=1
+        fi
+    done
+
+    # If the feature Manage Front-Haul VAPs independently based on
+    # CAP's reachability is enabled, then set athnewind value to 1.
+    if [ "$Manage_front_and_back_hauls_ind" -gt 0 ]; then
+        __repacd_update_vap_param "$config" 'athnewind' 1
+
+    # This is mainly for wsplcd optimization: if wsplcd detects athnewind
+    # is set to 0, it will not restart VAP; otherwise it will bring down
+    # the VAP, set athnewind to 0 and bring the VAP back up
+    elif [ "$match_found" -eq 0 ]; then
+        __repacd_update_vap_param "$config" 'athnewind' 0
+    fi
+}
+
+# Configure the vap independent parameter for all VAPs
+# only if repacd is allowed to configure this parameter.
+# input: None
+__repacd_config_independent_vaps() {
+    local sta_devices=
+
+    if [ "$manage_vap_ind" -gt 0 ]; then
+        __repacd_get_sta_devices sta_devices
+        __repacd_echo "Station device list = $sta_devices"
+
+        config_foreach __repacd_config_vap_ind wifi-iface "$sta_devices"
+    else
+        # Pass empty device list, so that all vaps set to athnewind=0.
+        config_foreach __repacd_config_vap_ind wifi-iface "$sta_devices"
+    fi
+}
+# Determine the configured RE mode, not applying any automatic mode
+# switching rules.
+#
+# output: $1 variable in which to place the resolved mode
+__repacd_get_config_re_mode() {
+    local resolved_mode=$1
+    local mode
+
+    config_load 'repacd'
+    config_get mode repacd 'ConfigREMode' 'auto'
+
+    eval "$resolved_mode=$mode"
+}
+
+# Determine whether the provided mode is an automatic mode.
+#
+# input: $1 mode: the mode to check
+# return: 0 if the mode is an auto mode; otherwise 1
+__repacd_is_auto_re_mode() {
+    local mode=$1
+
+    if [ "$mode" = 'auto' ]; then
+        return 0
+    fi
+
+    return 1
+}
+
+# Resolve the current mode in which to operate the range extender.
+#
+# This mode is either the configured mode (if it is set to a specific
+# mode), the automatically derived RE mode based on association information,
+# or the default range extender mode for use at startup.
+#
+# output: $1 - the variable into which to place the resolved mode
+__repacd_get_re_mode() {
+    local resolved_mode=$1
+    local mode default_mode
+
+    __repacd_get_config_re_mode config_re_mode
+
+    if __repacd_is_auto_re_mode $config_re_mode; then
+        config_get default_mode repacd 'DefaultREMode' 'qwrap'
+        config_get mode repacd 'AssocDerivedREMode' "$default_mode"
+    else
+        mode=$config_re_mode
+    fi
+
+    # Get the Association derived sub-mode. If not derived, say "star".
+    config_get resolved_re_submode repacd 'AssocDerivedRESubMode' 'star'
+
+    eval "$resolved_mode=$mode"
+}
+
+# Determine if the range extension mode is set to WDS.
+#
+# return: 0 if the mode is set to WDS; otherwise 1 (meaing QWrap or ExtAP)
+__repacd_is_wds_mode() {
+    __repacd_get_re_mode resolved_re_mode
+
+    case "$resolved_re_mode" in
+        wds|WDS)
+            return 0
+        ;;
+
+        *)
+            return 1
+        ;;
+    esac
+}
+
+# Determine if the range extension mode is set to QWrap.
+#
+# return: 0 if the mode is set to QWrap; otherwise 1 (meaning WDS or ExtAP)
+__repacd_is_qwrap_mode() {
+    __repacd_get_re_mode resolved_re_mode
+    case "$resolved_re_mode" in
+        qwrap|QWRAP)
+            return 0
+        ;;
+
+        *)
+            return 1
+    esac
+}
+
+# Determine if the range extension mode is set to SON.
+# Note that if the hyd init script is missing, this will be considered as
+# SON mode disabled.
+#
+# return: 0 if the mode is set to SON; otherwise 1 (meaing WDS or an
+#         interoperable range extension mode)
+__repacd_is_son_mode() {
+    if [ ! -f $HYD_INIT ]; then
+        return 1
+    fi
+
+    __repacd_get_re_mode resolved_re_mode
+    case "$resolved_re_mode" in
+        son|SON)
+            return 0
+        ;;
+
+        *)
+            return 1
+        ;;
+    esac
+}
+
+# Determine whether the Multi-AP Topology Optimization algorithm is enabled.
+#
+# return: 0 if the algorithm is enabled; otherwise 1
+__repacd_is_map_enabled() {
+    local map_enabled
+
+    config_load 'repacd'
+    config_get_bool map_enabled MAPConfig 'Enable' '0'
+
+    [ "$map_enabled" -gt 0 ]
+    return $?
+}
+
+# Determine if DFS channels are to be blocked even for WDS mode.
+#
+# return: 0 if DFS channels should not be used; otherwise 1 (meaning they may
+#         be used)
+__repacd_is_block_dfs() {
+    local block_dfs
+
+    config_load 'repacd'
+    config_get block_dfs repacd 'BlockDFSChannels' '0'
+
+    if [ "$block_dfs" -gt 0 ]; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+# Get the configured Rate scaling factor.
+# Gives default value in case of configuration miss or invalid value.
+#
+# output: $1 - rate_scaling_factor
+__repacd_get_rate_scaling_factor() {
+    local scaling_factor
+
+    config_load 'repacd'
+    config_get scaling_factor WiFiLink 'RateScalingFactor' $RE_DEFAULT_RATE_ESTIMATE_SCALING_FACTOR
+
+    # If scaling factor out of limits, return the default value "70".
+    if [ "$scaling_factor" -lt '1' ] || \
+        [ "$scaling_factor" -gt '100' ]; then
+        scaling_factor=$RE_DEFAULT_RATE_ESTIMATE_SCALING_FACTOR
+    fi
+
+    eval "$1=$scaling_factor"
+}
+
+# check vap is in default configuration by comparing ssid as OpenWrt
+# and encryption as none,for now any one VAP with this configuration
+# is enough for marking configuration as default configuration.
+# Internal driver currently does not support 11ad so ignoring
+# 11ad enabled devices for now.
+# input: $1 config: section to update
+# input: $2 network: Global variable vap_defconf.
+# input-output:$2 is set to '0' in case we have any VAP
+# with default config.
+
+__repacd_check_default_vaps() {
+    local config="$1"
+
+    config_get device "$config" device
+    config_get ssid  "$config" ssid
+    config_get encryption "$config" encryption
+    config_get hwmode "$device" hwmode
+    config_get type "$device" type
+    config_get_bool repacd_security_unmanaged "$config" repacd_security_unmanaged '0'
+
+    if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ] ;then
+        return
+    fi
+
+    if [ "$repacd_security_unmanaged" -eq 1 ] ; then
+        return
+    fi
+
+    if [ "$ssid" = "OpenWrt" ] && [ "$encryption" = "none" ] ;then
+        eval "$2='0'"
+    fi
+}
+
+# Determine if the VAPs are in the default configuration.
+# For now this is defined simply as any VAP having the default SSID and no
+# security enabled or that there are no VAPs whatsoever.
+#
+# return: 0 if in the default configuration; otherwise non-zero
+__repacd_vaps_in_default_config() {
+    local no_vaps
+
+    # If there is no entry, uci will give an error message. We detect this
+    # by looking for the string in the output.
+    no_vaps=$(uci show wireless.@wifi-iface[-1] 2>&1 | grep 'Entry not found')
+    [ -n "$no_vaps" ] && return 0
+
+    config_load wireless
+    config_foreach __repacd_check_default_vaps wifi-iface vap_defconf
+
+    return $vap_defconf
+}
+
+# Generate a suffix for the SSID using the last 3 bytes of the MAC address
+# on the bridge that is being managed.
+#
+# output: $1 - variable into which to write the SSID suffix
+__repacd_generate_ssid_suffix() {
+    local generated_suffix
+    generated_suffix=$(ifconfig br-$managed_network | grep HWaddr | awk '{print $5}' | awk -F":" '{print $4$5$6}')
+    eval "$1=$generated_suffix"
+}
+
+# Generate a random pre-shared key for use with WPA2
+#
+# output: $1 - variable into which to write the PSK
+__repacd_generate_psk() {
+    local generated_key
+    generated_key=$(dd if=/dev/urandom bs=1 count=8 2> /dev/null | openssl base64)
+    eval "$1=$generated_key"
+}
+
+# Reconfigure all managed VAPs and create new ones as appropriate. This is
+# non-destructive in that all configuration parameters for a VAP that are not
+# directly controlled by this script will not be modified.
+#
+# This should generally only be called when starting with a fresh
+# configuration (eg. at first boot or due to a user request), as it will
+# generate an SSID and passphrase. See __repacd_reset_existing_config() for
+# the function used when the SSID and passphrase configured are to be
+# preserved.
+__repacd_reset_default_config() {
+    config_load wireless
+    config_foreach __repacd_resolve_vaps wifi-iface $managed_network
+
+    # Use last three bytes of the MAC address to help make the SSID unique.
+    local ssid_suffix
+    __repacd_generate_ssid_suffix ssid_suffix
+
+    # Generate a random password (which will likely be changed either through
+    # cloning or by the end user).
+    local random_psk
+    __repacd_generate_psk random_psk
+
+    __repacd_create_vaps "whc-$ssid_suffix" 'psk2+ccmp' "$random_psk"
+    uci_commit wireless
+}
+
+# Delete all managed VAPs and re-create them according to the current
+# configuration.
+#
+# Unlike the above, this is destructive in that all VAPs not marked as
+# repacd_security_unmanaged will be deleted. If this is not desired, set the
+# FirstConfigRequired flag to 0 to prevent this step from taking place. In
+# this case, the VAPs must be created manually in a manner that matches the
+# expectations of this script.
+#
+# input: $1 - is_controller: whether this device is acting as the controller
+__repacd_reset_map_default_config() {
+    local is_controller=$1
+
+    local fronthaul_ssid fronthaul_key backhaul_ssid backhaul_key
+    local backhaul_suffix
+
+    config_load repacd
+    config_get fronthaul_ssid MAPConfig 'FronthaulSSID' ''
+    config_get fronthaul_key MAPConfig 'FronthaulKey' ''
+
+    config_get backhaul_ssid MAPConfig 'BackhaulSSID' ''
+    config_get backhaul_key MAPConfig 'BackhaulKey' ''
+    config_get backhaul_suffix MAPConfig 'BackhaulSuffix' ''
+
+    config_load wireless
+    config_foreach __repacd_delete_managed_vaps wifi-iface $managed_network
+    uci_commit wireless
+
+    # Clear out the environment of all CONFIG_ variables. Seems like there
+    # should be some way to do this in UCI.
+    unset $(set | grep '^CONFIG_' | awk -F'=' '{print $1}')
+
+    # Reload to reset our variable state after the deletion
+    config_load wireless
+
+    if [ -z "$fronthaul_ssid" ]; then
+        local ssid_suffix
+        __repacd_generate_ssid_suffix ssid_suffix
+        fronthaul_ssid="mapsig-${ssid_suffix}"
+
+        __repacd_generate_psk fronthaul_key
+    fi
+
+    if [ -z "$backhaul_ssid" ]; then
+        backhaul_ssid="${fronthaul_ssid}${backhaul_suffix}"
+
+        if [ "$fronthaul_ssid" = "$backhaul_ssid" ]; then
+            backhaul_key=$fronthaul_key
+        else
+            __repacd_generate_psk backhaul_key
+        fi
+    fi
+
+    __repacd_create_vaps_map "$is_controller" "$fronthaul_ssid" "$fronthaul_key" \
+                             "$backhaul_ssid" "$backhaul_key"
+}
+
+# Delete all of the VAPs for the given network that are marked as unmanaged.
+#
+# input: $1 config: section being considered
+# input: $2 network: managed network name
+__repacd_delete_managed_vaps() {
+    local config="$1"
+    local network repacd_security_unmanaged
+
+    config_get network "$config" network
+    config_get_bool repacd_security_unmanaged "$config" repacd_security_unmanaged '0'
+
+    if [ "$2" = "$network" ] && [ "$repacd_security_unmanaged" -eq 0 ]; then
+        uci delete "wireless.$config"
+    fi
+}
+
+# Create the VAPs needed for Multi-AP SIG Topology Optimization with them all
+# initially disabled.
+#
+# input: $1 is_controller: whether this device is acting as the controller
+# input: $2 fronthaul_ssid: the SSID to use on all fronthaul VAPs
+# input: $3 fronthaul_key: the PSK for the fronthaul, or the empty string
+#                          for open mode
+# input: $4 backhaul_ssid: the SSID to use on all backhaul VAPs
+# input: $5 backhaul_key: the PSK for the backhaul, or the empty string
+#                         for open mode
+__repacd_create_vaps_map() {
+    local is_controller=$1
+    local fronthaul_ssid=$2
+    local fronthaul_key=$3
+    local backhaul_ssid=$4
+    local backhaul_key=$5
+
+    local fronthaul_encryption backhaul_encryption
+
+    # Whether the same VAP is used for fronthaul and backhaul or not.
+    local shared_vaps=0
+    if [ "$fronthaul_ssid" = "$backhaul_ssid" ]; then
+        shared_vaps=1
+    fi
+
+    if [ -n "$fronthaul_key" ]; then
+        fronthaul_encryption='psk2+ccmp'
+    fi
+
+    if [ -n "$backhaul_key" ]; then
+        backhaul_encryption='psk2+ccmp'
+    else
+        backhaul_encryption='none'
+    fi
+
+    local DEVICES=
+    __repacd_get_devices DEVICES
+
+    for device in $DEVICES; do
+        local repacd_auto_create_vaps repacd_create_bsta repacd_bsta_pref
+        local create_ctrl_fbss create_ctrl_bbss
+        config_get_bool repacd_auto_create_vaps "$device" repacd_auto_create_vaps '1'
+        config_get_bool repacd_create_bsta "$device" repacd_create_bsta '1'
+        config_get repacd_bsta_pref "$device" repacd_map_bsta_preference '0'
+        config_get_bool create_ctrl_fbss "$device" repacd_create_ctrl_fbss '1'
+        config_get_bool create_ctrl_bbss "$device" repacd_create_ctrl_bbss '1'
+        uci_set wireless $device disabled '0'
+
+        if [ "$repacd_auto_create_vaps" -gt 0 ] && [ "$repacd_create_bsta" -gt 0 ] && \
+            ! whc_is_5g_radio "$device"; then
+            # Create a bSTA interface
+            name=$(uci add wireless wifi-iface)
+            config_changed=1
+
+            __repacd_init_vap "$name" $device 'sta' "$backhaul_ssid" \
+                              $backhaul_encryption "$backhaul_key"
+            __repacd_update_vap_param "$name" 'map' 1
+            __repacd_update_vap_param "$name" 'MapBSSType' 128
+            __repacd_update_vap_param "$name" 'wps_state' 1
+            __repacd_update_vap_param "$name" 'wps_pbc_skip_connected_sta' 1
+
+            # For initial onboarding, 2.4 GHz is the selected bSTA radio
+            # (unless it is given a preference value of 0, in which case
+            # no radio is marked as selected and we let the preference values
+            # determine it entirely).
+            if whc_is_5g_vap "$name" || [ "$repacd_bsta_pref" -eq 0 ]; then
+                uci_set wireless $device repacd_map_bsta_selected '0'
+            else
+                uci_set wireless $device repacd_map_bsta_selected '1'
+            fi
+        fi
+
+        # If not acting as the controller, we will let the Multi-AP
+        # Configuration procedure create the BSSes. However, due to
+        # limitations in wsplcd, we have to create a BSS on each radio to
+        # ensure AP Auto-Config takes place. If this is removed, then repacd
+        # can be updated to only do this on the controller again.
+        if [ "$repacd_auto_create_vaps" -gt 0 ]; then
+            # Only create the fBSS on agents (to ensure wsplcd works) or on
+            # the controller if so configured.
+            if [ "$is_controller" -eq 0 ] || [ "$create_ctrl_fbss" -gt 0 ]; then
+                # Create the fBSS (which may also be a bBSS)
+                name=$(uci add wireless wifi-iface)
+                config_changed=1
+
+                __repacd_init_vap "$name" $device 'ap' "$fronthaul_ssid" \
+                                  $fronthaul_encryption "$fronthaul_key"
+                __repacd_update_vap_param "$name" 'map' 1
+
+                if [ "$shared_vaps" -gt 0 ]; then
+                    # fBSS uses same VAP as bBSS
+                    __repacd_update_vap_param "$name" 'MapBSSType' 96
+                    __repacd_update_vap_param "$name" 'multi_cred' 0
+                else
+                    # Distinct VAPs for backhaul and fronthaul
+                    __repacd_update_vap_param "$name" 'MapBSSType' 32
+                    __repacd_update_vap_param "$name" 'multi_cred' 1
+                fi
+            fi
+
+            # Now create the bBSS, but only on the controller if configured (and
+            # only if it is meant to be a unique BSS). The agent will have any
+            # bBSSes created via the AP Auto-Configuration process.
+            if [ "$is_controller" -gt 0 ] && [ "$create_ctrl_bbss" -gt 0 ] && \
+                [ "$shared_vaps" -eq 0 ]; then
+                name=$(uci add wireless wifi-iface)
+                config_changed=1
+
+                __repacd_init_vap "$name" $device 'ap' "$backhaul_ssid" \
+                                  $backhaul_encryption "$backhaul_key"
+                __repacd_update_vap_param "$name" 'map' 1
+                __repacd_update_vap_param "$name" 'MapBSSType' 64
+
+                # Need to force this disabled per the Multi-AP SIG spec
+                __repacd_update_vap_param "$name" 'wps_pbc' 0
+            fi
+        fi
+    done
+    uci_commit wireless
+}
+
+# Enumerate all of the devices and append them to the variable provided.
+# input: $1 devices: variable to populate with the devices
+__repacd_get_devices() {
+    local devices=$1
+
+    config_cb() {
+        local type="$1"
+        local section="$2"
+
+        case "$type" in
+            wifi-device)
+		config_get hwmode "$section" hwmode
+		config_get type "$section" type
+		if [ "$type" != 'mac80211' ] && [ "$hwmode" != '11ad' ];then
+		    eval append $devices "$section"
+		fi
+                ;;
+        esac
+    }
+    config_load wireless
+}
+
+# Enable all Wi-Fi devices
+__repacd_enable_wifi() {
+    local DEVICES=
+    local device changed=0
+
+    __repacd_get_devices DEVICES
+
+    for device in $DEVICES; do
+        config_get_bool disabled $device disabled
+        [ -z "$disabled" ] && continue
+        [ "$disabled" -eq 0 ] && continue
+
+        uci_set wireless $device disabled '0'
+        changed=1
+    done
+
+    if [ "$changed" -gt 0 ]; then
+        uci_commit wireless
+        config_changed=1
+    fi
+}
+
+# Set the parameter in the wireless configuration section provided, recording
+# if it actually needed to be changed.
+# input: $1 iface_name: section name
+# input: $2 param_name: the name of the parameter being set
+# input: $3 param_val: the new value for the parameter
+__repacd_update_vap_param() {
+    local iface_name=$1 param_name=$2 param_val=$3
+    local cur_val
+
+    config_get cur_val "$iface_name" "$param_name"
+    if [ -z "$cur_val" ] || [ ! "$cur_val" = "$param_val" ]; then
+        uci_set wireless "$iface_name" "$param_name" "$param_val"
+        config_changed=1
+    fi
+}
+
+# Determine the SSID to apply to a specific VAP based on the current
+# configuration of the WPS Push Button Configuration enhancement.
+# input: $1 name: section name
+# input: $2 device: name of the radio
+# input: $3 base_ssid: the SSID from which to derive other ones
+__repacd_init_vap_set_ssid_and_pbc() {
+    local name=$1 device=$2 base_ssid=$3
+    local mode
+    local enable_wps_re_enhc global_suffix='' radio_suffix=''
+    local start_time duration
+    local auto_create_vaps
+
+    # Grab the overall enable first
+    config_get enable_wps_re_enhc qcawifi wps_pbc_extender_enhance '0'
+
+    # Now VAP specific parameters
+    config_get mode "$name" mode
+    config_get start_time "$name" wps_pbc_start_time
+    config_get duration "$name" wps_pbc_duration
+    config_get_bool repacd_security_unmanaged  "$name" repacd_security_unmanaged '0'
+    config_get_bool auto_create_vaps "$device" repacd_auto_create_vaps '1'
+
+    if [ "$enable_wps_re_enhc" -gt 0 ]; then
+        # Only apply the SSID derivation rules on AP interfaces.
+        if __repacd_is_matching_mode 'ap' $mode; then
+            # Potentially two suffixes can be applied
+            # First is set at the overall AP level.
+            config_get global_suffix qcawifi wps_pbc_overwrite_ssid_suffix ''
+
+            # Second is set at the radio level
+            config_get radio_suffix "$device" wps_pbc_overwrite_ssid_band_suffix ''
+        fi
+    fi
+
+    if [ "$repacd_security_unmanaged" -eq 0 ] ; then
+        __repacd_update_vap_param "$name" 'ssid' "$base_ssid$global_suffix$radio_suffix"
+    fi
+
+    __repacd_update_vap_param "$name" 'wps_pbc' 1
+    __repacd_update_vap_param "$name" 'wps_pbc_enable' "$enable_wps_re_enhc"
+    if [ "$traffic_separation_enabled" -gt 0 ]; then
+        __repacd_update_vap_param "$name" 'wps_pbc_noclone' '1'
+    fi
+
+    # Without a custom config, set all interfaces to be enabled for 2 minutes.
+    if [ -z "$start_time" ]; then
+        __repacd_update_vap_param "$name" 'wps_pbc_start_time' 0
+    fi
+
+    if [ -z "$duration" ]; then
+        if [ "$traffic_separation_enabled" -gt 0 ] && [ "$auto_create_vaps" -eq 1 ]; then
+            __repacd_update_vap_param "$name" 'wps_pbc_duration' 60
+        else
+            __repacd_update_vap_param "$name" 'wps_pbc_duration' 120
+        fi
+    fi
+}
+
+# Set all of the configuration parameters for the given VAP.
+# input: $1 name: section name
+# input: $2 device: name of the radio
+# input: $3 mode: whether to act as a STA or AP
+# input: $4 ssid: the desired SSID for this VAP
+# input: $5 encryption: the desired encryption mode for this VAP
+# input: $6 key: the desired passphrase for this VAP
+__repacd_init_vap() {
+    local name=$1 device=$2 mode=$3 ssid=$4 encryption=$5 key=$6
+    local cur_mode
+
+    config_get_bool repacd_security_unmanaged "$name" repacd_security_unmanaged '0'
+    __repacd_update_vap_param "$name" 'device' "$device"
+    __repacd_update_vap_param "$name" 'network' $managed_network
+    __repacd_init_vap_set_ssid_and_pbc "$name" "$device" "$ssid"
+
+    if [ "$repacd_security_unmanaged" -eq 0 ] ; then
+        __repacd_update_vap_param "$name" 'encryption' "$encryption"
+        __repacd_update_vap_param "$name" 'key' "$key"
+    fi
+
+    # Mode needs to be handled separately. If the device is already in one
+    # of the AP modes and the init is requesting an AP mode, we leave it as
+    # is. If it is already in the STA mode, we also leave it as is.
+    config_get cur_mode "$name" 'mode'
+    if ! __repacd_is_matching_mode "$mode" "$cur_mode"; then
+        uci_set wireless "$name" 'mode' "$mode"
+        config_changed=1
+    fi
+}
+
+# Initialise all the additional that we created to support multi ssid traffic
+# separation.
+# input: $1 name: section name
+# input: $2 device: name of the radio
+# input: $3 mode: whether to act as a STA or AP
+# input: $4 hwmode: radio hardware mode
+# input: $5 network: desired network for this VAP
+# input: $6 ssid: the desired SSID for this VAP
+# input: $7 encryption: the desired encryption mode for this VAP
+# input: $8 key: the desired passphrase for this VAP
+__repacd_init_additional_vap() {
+    local name=$1 device=$2 mode=$3 hwmode=$4 network=$5
+    local ssid=$6 encryption=$7 key=$8
+    local cur_mode repacd_security_unmanaged auto_create_vaps
+    local enable_wds enable_rrm enable_qwrap_ap enable_extap block_dfs
+    local rate_scaling_factor=0
+    local num_changes=0
+    local cur_key
+
+    __repacd_update_vap_param "$name" 'device' "$device"
+    __repacd_update_vap_param "$name" 'network' "$network"
+
+    config_get_bool repacd_security_unmanaged  "$name" repacd_security_unmanaged '0'
+    if [ "$repacd_security_unmanaged" -eq 0 ] ; then
+        __repacd_update_vap_param "$name" 'ssid' "$ssid"
+        __repacd_update_vap_param "$name" 'encryption' "$encryption"
+
+        config_get cur_key "$name" 'key'
+        if [ ! "$cur_key" = "$key" ]; then
+            __repacd_update_vap_param "$name" 'key' "$key"
+        fi
+    fi
+
+    # using SON mode related settings to config backhaul VAPs.
+    config_get_bool auto_create_vaps "$device" repacd_auto_create_vaps '1'
+    if [ "$network" = "$network_backhaul" ] && [ "$auto_create_vaps" -eq 1 ]; then
+        __repacd_update_vap_param "$name" 'wps_pbc_noclone' '0'
+        __repacd_update_vap_param "$name" 'wps_pbc_enable' '1'
+        __repacd_update_vap_param "$name" 'wps_pbc' '1'
+        __repacd_update_vap_param "$name" 'wps_pbc_start_time' '61'
+        __repacd_update_vap_param "$name" 'wps_pbc_duration' '120'
+        __repacd_update_vap_param "$name" 'wds' '1'
+        __repacd_update_vap_param "$name" 'extap' '0'
+        if __repacd_is_matching_mode 'ap' "$mode"; then
+            __repacd_update_vap_param "$name" 'qwrap_ap' '0'
+            __repacd_update_vap_param "$name" 'rrm' '1'
+            __repacd_update_vap_param "$name" 'hidden' '0'
+            if __repacd_is_block_dfs; then
+                __repacd_update_vap_param "$name" 'blockdfschan' '1'
+            else
+                __repacd_update_vap_param "$name" 'blockdfschan' '0'
+            fi
+        fi
+    else
+        __repacd_echo "Auto create VAPs disabled"
+    fi
+    if [ "$network" = "$network_guest" ] && [ "$auto_create_vaps" -eq 1 ]; then
+        __repacd_update_vap_param "$name" 'rrm' '1'
+    fi
+
+    # This is mainly for wsplcd optimization: if wsplcd detects athnewind
+    # is set to 0, it will not restart VAP; otherwise it will bring down
+    # the VAP, set athnewind to 0 and bring the VAP back up
+    __repacd_update_vap_param "$name" 'athnewind' 0
+
+    # Mode needs to be handled separately. If the device is already in one
+    # of the AP modes and the init is requesting an AP mode, we leave it as
+    # is. If it is already in the STA mode, we also leave it as is.
+    config_get cur_mode "$name" 'mode'
+    if ! __repacd_is_matching_mode "$mode" "$cur_mode"; then
+        uci_set wireless "$name" 'mode' "$mode"
+        config_changed=1
+    fi
+}
+
+# Create the 4 VAPs needed (1 STA and 1 AP for each radio), with them all
+# initially disabled. Three radio platforms are not currently handled.
+#
+# Note that if the VAPs already exist, they will be reconfigured as
+# appropriate. Existing VAP section names are given by ${device}_ap and
+# ${device}_sta global variables.
+#
+# input: $1 ssid: the SSID to use on all VAPs
+# input: $2 encryption: the encryption mode to use on all VAPs
+# input: $3 key: the pre-shared key to use on all VAPs
+__repacd_create_vaps() {
+    local ssid=$1
+    local encryption=$2
+    local key=$3
+    local DEVICES=
+    local backhaul_selected=0
+
+    __repacd_get_devices DEVICES
+
+    for device in $DEVICES; do
+        if whc_is_5g_radio $device && [ "$backhaul_selected" -eq 0 ]; then
+            # 5 GHz and we do not have a backhaul interface yet, so select
+            # this one as the backhaul interface.
+            #
+            # @todo Consider which 5 GHz radio should be used for backhaul if
+            #       there is more than one.
+            backhaul_selected=1
+        fi
+
+        config_get_bool repacd_auto_create_vaps "$device" repacd_auto_create_vaps '1'
+        uci_set wireless $device disabled '0'
+
+        local name
+        name=$(eval "echo \$${device}_ap")
+        if [ -z "$name" ] && [ "$repacd_auto_create_vaps" -eq 1 ]; then
+            # No existing entry; create a new one.
+            name=$(uci add wireless wifi-iface)
+            config_changed=1
+        fi
+
+        if [ -n "$name" ]; then
+            # In case of auto config, this will be the fronthaul+backhaul AP VAP
+            # However in manual config, this can be the fronthaul VAP
+            # In manual cofig user sets this flag
+            # We use repacd_auto_create_vaps to distinguish the two cases
+            if [ "$repacd_auto_create_vaps" -eq 1 ]; then
+                uci_set wireless "$name" backhaul_ap '1'
+            fi
+
+            __repacd_init_vap "$name" $device 'ap' "$ssid" "$encryption" "$key"
+        fi
+
+        name=$(eval "echo \$${device}_sta")
+        if [ -z "$name" ] && [ "$repacd_auto_create_vaps" -eq 1 ] && \
+           [ "$traffic_separation_active" -eq 0 ]; then
+            # No existing entry; create a new one.
+            name=$(uci add wireless wifi-iface)
+            config_changed=1
+        fi
+
+        if [ -n "$name" ]; then
+            __repacd_init_vap "$name" $device 'sta' "$ssid" "$encryption" "$key"
+        fi
+    done
+    uci_commit wireless
+}
+
+# Create the additional vaps required for multi ssid traffic separation.
+# 1 guest vap and 1 spcl vap on each radio. Currently no sta vaps created.
+# spcl vap on 2.4GHz band will be disabled.
+# Note that if the VAPs already exist, they will be reconfigured as
+# appropriate. Existing VAP section names are given by
+# ${device}_(backhaul/guest)_ap and
+# ${device}_(backhaul/guest)_sta global variables.
+#
+# input: $1 network: network to which this vap belongs
+# input: $2 ssid: the SSID to use on all VAPs for the provided network
+# input: $3 encryption: the encryption mode to use on all VAPs
+# input: $4 key: the pre-shared key to use on all VAPs
+__repacd_create_additional_vaps() {
+    local ssid=$2
+    local encryption=$3
+    local key=$4
+    local network=$1
+    local DEVICES=
+    local no_vlan_val
+    local hwmode marker
+
+    if [ "$network" = "$network_backhaul" ]; then
+        marker="backhaul"
+    elif [ "$network" = "$network_guest" ]; then
+        marker="guest"
+    fi
+
+    __repacd_get_devices DEVICES
+
+    for device in $DEVICES; do
+        config_get_bool repacd_auto_create_vaps "$device" repacd_auto_create_vaps '1'
+        uci_set wireless $device disabled '0'
+        config_get hwmode $device hwmode
+        config_get no_vlan_val $device no_vlan '0'
+        if [ "$no_vlan_val" -eq 0 ]; then
+            uci_set wireless $device no_vlan '1'
+        fi
+
+        local name_managed
+        name_managed=$(eval "echo \$${device}_ap")
+        local name
+        name=$(eval "echo \$${device}_${marker}_ap")
+        if [ -z "$name" ] && [ "$repacd_auto_create_vaps" -eq 1 ]; then
+            # No existing entry; create a new ap.
+            name=$(uci add wireless wifi-iface)
+            config_changed=1
+        fi
+
+        if [ -n "$name" ]; then
+            if [ "$network" = "$network_backhaul" ]; then
+                uci_set wireless "$name" rept_spl '1'
+                if [ "$repacd_auto_create_vaps" -eq 1 ]; then
+                    uci_set wireless "$name" backhaul_ap '1'
+                fi
+
+                if [ -n "$name_managed" ]; then
+                    uci_set wireless "$name"_managed backhaul_ap '0'
+                fi
+            fi
+
+            __repacd_init_additional_vap "$name" $device 'ap' "$hwmode" "$network" \
+                                        "$ssid" "$encryption" "$key"
+        fi
+
+        if [ $create_sta -eq 1 ]; then
+            name=$(eval "echo \$${device}_${marker}_sta")
+            if [ -z "$name" ] && [ "$repacd_auto_create_vaps" -eq 1 ]; then
+                # No existing entry; create a new sta.
+                name=$(uci add wireless wifi-iface)
+                config_changed=1
+            fi
+
+            if [ -n "$name" ]; then
+                __repacd_init_additional_vap "$name" $device 'sta' "$hwmode" "$network" \
+                                            "$ssid" "$encryption" "$key"
+            fi
+        fi
+    done
+    uci_commit wireless
+}
+
+# Reconfigure the STA vaps of managed network.
+# After restarting in Non CAP mode we reconfigure the sta vaps
+# to be part of backhaul network. Network,ssid and credential
+# are changed other configuration remains same.
+#
+# input: $1 config: section name
+# input: $2 : current network
+# input: $3 : backhaul network
+# input: $4 ssid_val: backhaul ssid
+# input: $5 enc_val: backhaul encryption
+# input: $6 key_val: backhaul key
+__repacd_reconfig_sta_vaps() {
+    local config=$1
+    local network
+    local ssid_val="$4"
+    local enc_val="$5"
+    local key_val="$6"
+
+    config_get network "$config" network
+    if [ "$2" = "$network" ] || [ "$3" = "$network" ]; then
+        local mode device hwmode type_val disabled
+
+        config_get mode "$config" mode
+        config_get device "$config" device
+        config_get hwmode "$device" hwmode
+        config_get type_val "$device" type
+        config_get disabled "$config" disabled 0
+
+        if [ "$hwmode" = '11ad' ] && [ "$type_val" = 'mac80211' ] ;then
+            return
+        fi
+
+        if [ "$mode" = "sta" ]; then
+            uci_set wireless "$config" rept_spl '1'
+            __repacd_init_additional_vap "$config" $device 'sta' "$hwmode" "$3" \
+                                            "$ssid_val" "$enc_val" "$key_val"
+        fi
+    fi
+}
+
+# Determine if the mode on the interface is a match.
+# This does fuzzy matching in that multiple actual modes are said to match
+# a given general mode.
+#
+# input: $1 general_mode: one of 'sta' or 'ap'
+# input: $2 cur_mode: the currently configured mode
+# return: 0 on a match; otherwise non-zero
+__repacd_is_matching_mode() {
+    local general_mode=$1
+    local cur_mode=$2
+
+    if [ "$general_mode" = 'sta' ]; then
+        if [ "$cur_mode" = 'sta' ]; then
+            return 0
+        else
+            return 1
+        fi
+    else
+        if [ "$cur_mode" = 'ap' ] || [ "$cur_mode" = 'wrap' ]; then
+            return 0
+        else
+            return 1
+        fi
+    fi
+}
+
+# Detect which VAPs are already configured and their corresponding SSID and
+# passphrase.
+#
+# input: $1 config: section name
+# input: $2 network: network for which to update VAPs
+#
+# Updates $resolved_ssid, $resolved_enc, and $resolved_key as appropriate.
+__repacd_resolve_vaps() {
+    local config="$1"
+    local network
+
+    config_get network "$config" network
+
+    if [ "$2" = "$network" ]; then
+        local device mode ssid_val encryption_val key_val
+
+        config_get device "$config" device
+        config_get mode "$config" mode
+        config_get ssid_val "$config" ssid
+        config_get encryption_val "$config" encryption
+        config_get key_val "$config" key
+        config_get disabled "$config" disabled 0
+        config_get_bool repacd_security_unmanaged "$config" repacd_security_unmanaged '0'
+        config_get hwmode "$device" hwmode
+        config_get type "$device" type
+
+        if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ] ;then
+             return
+        fi
+
+        local default_ap
+        default_ap=$(eval "echo \$${device}_ap")
+        # Remember the section name for this radio in this mode.
+        if __repacd_is_matching_mode 'ap' "$mode"; then
+            if [ -z "$default_ap" ]; then
+                eval "${device}_ap=$config"
+            fi
+        elif [ "$mode" = "sta" ]; then
+            eval "${device}_sta=$config"
+        fi
+
+        if [ "$repacd_security_unmanaged" -eq 1 ] ; then
+            return
+        fi
+        # Since there is really no way to know which SSID, encryption mode, or
+        # passphrase to use, we will only store the first one unless we come
+        # across an enabled STA interface in which case we will prefer that.
+        # The reason for this is because if WPS is used without wsplcd, only
+        # the STA interface will have the correct SSID and passphrase once the
+        # process completes. When switching from pure client mode to RE mode,
+        # we want to propagate those values to the AP interfaces and the other
+        # STA interface.
+        if [ -n "$ssid_val" ] && [ -z "$resolved_ssid" ] || [ "$mode" = "sta" ]; then
+            if [ "$disabled" -eq 0 ]; then
+                resolved_ssid="$ssid_val"
+            fi
+        fi
+
+        if [ -n "$encryption_val" ] && [ -z "$resolved_enc" ] || [ "$mode" = "sta" ]; then
+            if [ "$disabled" -eq 0 ]; then
+                resolved_enc="$encryption_val"
+            fi
+        fi
+
+        if [ -n "$key_val" ] && [ -z "$resolved_key" ] || [ "$mode" = "sta" ]; then
+            if [ "$disabled" -eq 0 ]; then
+                resolved_key="$key_val"
+            fi
+        fi
+    fi
+}
+# Detect which additional VAPs are already configured.
+#
+# input: $1 config: section name
+# input: $2 network: network for which to update VAPs
+__repacd_resolve_additional_vaps() {
+    local config="$1"
+    local network marker
+
+    config_get network "$config" network
+    if [ "$2" = "$network" ]; then
+        local device mode hwmode type_val encryption_val key_val
+
+        if [ "$network" = "$network_backhaul" ]; then
+            marker="backhaul"
+        elif [ "$network" = "$network_guest" ]; then
+            marker="guest"
+        fi
+
+        config_get device "$config" device
+        config_get mode "$config" mode
+        config_get ssid_val "$config" ssid
+        config_get encryption_val "$config" encryption
+        config_get key_val "$config" key
+        config_get disabled "$config" disabled 0
+        config_get hwmode "$device" hwmode
+        config_get type_val "$device" type
+
+        if [ "$hwmode" = '11ad' ] && [ "$type_val" = 'mac80211' ] ;then
+             return
+        fi
+
+        # Remember the section name for this radio in this mode.
+        if __repacd_is_matching_mode 'ap' "$mode"; then
+            eval "${device}_${marker}_ap=$config"
+        elif [ "$mode" = "sta" ]; then
+            eval "${device}_${marker}_sta=$config"
+        fi
+
+        if [ -n "$ssid_val" ] && [ "$disabled" -eq 0 ]; then
+            if [ "$network" = "$network_backhaul" ]; then
+                if [ "$backhaul_ssid" = "$def_backhaul_ssid" ] || [ "$mode" = "sta" ]; then
+                    backhaul_ssid="$ssid_val"
+                fi
+            elif [ "$network" = "$network_guest" ]; then
+                if [ "$guest_ssid" = "$def_guest_ssid" ]; then
+                    guest_ssid="$ssid_val"
+                fi
+            fi
+        fi
+
+        if [ -n "$encryption_val" ] && [ "$disabled" -eq 0 ]; then
+            if [ "$network" = "$network_backhaul" ]; then
+                if [ "$backhaul_enc" = "$def_backhaul_enc" ] || [ "$mode" = "sta" ]; then
+                    backhaul_enc="$encryption_val"
+                fi
+            elif [ "$network" = "$network_guest" ]; then
+                if [ "$guest_enc" = "$def_guest_enc" ]; then
+                    guest_enc="$encryption_val"
+                fi
+            fi
+        fi
+
+        if [ -n "$key_val" ] && [ "$disabled" -eq 0 ]; then
+            if [ "$network" = "$network_backhaul" ]; then
+                if [ "$backhaul_key" = "$def_backhaul_key" ] || [ "$mode" = "sta" ]; then
+                    backhaul_key="$key_val"
+                fi
+            elif [ "$network" = "$network_guest" ]; then
+                if [ "$guest_key" = "$def_guest_key" ]; then
+                    guest_key="$key_val"
+                fi
+            fi
+        fi
+    fi
+}
+
+# Configure the additional VAPs needed to be consistent with the configuration that
+# would be produced if starting from a default configuration. If any VAPs
+# need to be created, use the SSID with suitable suffix, encryption mode, and passphrase
+# from the managed network vaps
+__repacd_reset_additional_config() {
+    config_load wireless
+    config_foreach __repacd_resolve_additional_vaps wifi-iface $network_guest
+    config_foreach __repacd_resolve_additional_vaps wifi-iface $network_backhaul
+
+    __repacd_create_additional_vaps $network_backhaul "$backhaul_ssid" "$backhaul_enc" \
+                                   "$backhaul_key"
+    __repacd_create_additional_vaps $network_guest "$guest_ssid" "$guest_enc" \
+                                   "$guest_key"
+}
+
+# Configure the 4 VAPs needed to be consistent with the configuration that
+# would be produced if starting from a default configuration. If any VAPs
+# need to be created, carry over the SSID, encryption mode, and passphrase
+# from one of the existing ones.
+__repacd_reset_existing_config() {
+    config_load wireless
+    config_foreach __repacd_resolve_vaps wifi-iface $managed_network
+
+    __repacd_create_vaps "$resolved_ssid" "$resolved_enc" "$resolved_key"
+}
+
+# Set all VAPs for the given network and mode to disabled or enabled (per
+# the parameters).
+#
+# input: $1 config: section name
+# input: $2 network: network for which to update VAPs
+# input: $3 mode: sta or ap
+# input: $4 disable_24g: 1 - disable, 0 - enable
+# input: $5 disable_5g: 1 - disable, 0 - enable
+# input-output: $6 change counter
+__repacd_disable_vap() {
+    local config="$1"
+    local disable_24g="$4"
+    local disable_5g="$5"
+    local mode network disabled
+    local changed="$6"
+
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+    config_get type "$device" type
+
+    if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ] ;then
+        return
+    fi
+    config_get mode "$config" mode
+    config_get network "$config" network
+    config_get disabled "$config" disabled 0
+
+    if [ "$2" = "$network" ] && __repacd_is_matching_mode "$3" "$mode"; then
+        local desired_val
+        if whc_is_5g_vap "$config"; then
+            desired_val=$disable_5g
+        else
+            desired_val=$disable_24g
+        fi
+
+        if [ ! "$desired_val" = "$disabled" ]; then
+            uci_set wireless "$config" disabled "$desired_val"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            __repacd_echo "Set VAP $config to Disabled=$desired_val"
+        fi
+    fi
+}
+
+# Determine the radio on which the bSTA should be allocated.
+#
+# If a radio is marked as selected (using the repacd_map_bsta_selected config
+# option), it will be used. If instead none is marked, the radio with the
+# highest repacd_map_bsta_pref value will be used.
+#
+# input: $1 config: section name
+# output: $2 selected_radio: the radio that is marked as selected
+# output: $3 preferred_radio: the radio with the highest preference
+__repacd_resolve_bsta_radio() {
+    local config="$1"
+
+    local bsta_selected='' bsta_preference=''
+    config_get bsta_selected "$config" repacd_map_bsta_selected 0
+    config_get bsta_preference "$config" repacd_map_bsta_preference
+
+    if [ "$bsta_selected" -gt 0 ]; then
+        eval "$2=$config"
+    fi
+
+    # Radios with no preference set are ignored. This is meant to indicate
+    # the OEM never wants to use that radio.
+    if [ -n "$bsta_preference" ]; then
+        if [ "$bsta_preference" -gt "$map_bsta_max_preference" ]; then
+            eval "$3=$config"
+            map_bsta_max_preference="$bsta_preference"
+        fi
+    fi
+}
+
+# Update the radio on which the bSTA VAP is allocated based on the setting
+# at the radio level.
+#
+# input: $1 config: section name
+# input: $2 selected_radio: name of the radio on which to run the bSTA
+# input: $3 network: network for which to update VAPs
+# input-output: $4 change counter
+__repacd_update_map_bsta_radio() {
+    local config="$1"
+    local selected_radio="$2"
+    local changed="$4"
+
+    local device hwmode type
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+    config_get type "$device" type
+
+    if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ] ;then
+        return
+    fi
+
+    local mode network disabled bssid
+    config_get mode "$config" mode
+    config_get network "$config" network
+    config_get disabled "$config" disabled 0
+    config_get bssid "$config" bssid
+
+    if [ "$3" = "$network" ] && __repacd_is_matching_mode "sta" "$mode"; then
+        if [ ! "$device" = "$selected_radio" ]; then
+            uci_set wireless "$config" device "$selected_radio"
+            changed=$((changed + 1))
+            eval "$4='$changed'"
+            __repacd_echo "Set VAP $config to device=$selected_radio"
+
+            if [ -n "$bssid" ]; then
+                uci delete "wireless.${config}.bssid"
+                __repacd_echo "Removed BSSID from VAP $config due to radio change"
+            fi
+        fi
+
+        if [ "$disabled" -eq 1 ]; then
+            uci_set wireless "$config" disabled 0
+            changed=$((changed + 1))
+            eval "$4='$changed'"
+            __repacd_echo "Set VAP $config to Disabled=0"
+        fi
+    fi
+}
+
+# Delete the bssid entry from the given STA interface.
+#
+# input: $1 config: section name
+# input: $2 network: network being managed
+# output: $3 config_changed: number of configurations changed
+__repacd_delete_bssid_entry() {
+    local config="$1"
+    local network_to_match="$2"
+    local changed="$3"
+
+    local device hwmode network mode bssid
+
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+    config_get network "$config" network
+    config_get type "$device" type
+
+    if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ] \
+        || [ "$network" != "$network_to_match" ]; then
+        return
+    fi
+
+    config_get mode "$config" mode
+
+    if __repacd_is_matching_mode 'sta' "$mode"; then
+        config_get bssid "$config" bssid ''
+        if [ -n "$bssid" ]; then
+            __repacd_echo "Deleting BSSID $bssid"
+            uci delete "wireless.${config}.bssid"
+            changed=$((changed + 1))
+            eval "$3='$changed'"
+        fi
+    fi
+}
+
+# Change the wsplcd running mode based on the value provided.
+#
+# input: $1 new_mode: value to set wsplcd run mode to
+# input: $2 new_deep_clone: whether to enable deep cloning (which copies the
+#                       channel and locks the association to the CAP)
+# input: $3 new_deep_clone_no_bssid: deep cloning without BSSID cloning
+# input: $4 config_sta: whether to use the extension to configure a STA
+#                       interface during cloning
+# input: $5 map_enable: whether to operate in Multi-AP SIG mode
+# input-output: $6 changed: count of the changes
+__repacd_configure_wsplcd() {
+    local new_mode=$1
+    local new_deep_clone=$2
+    local new_deep_clone_no_bssid=$3
+    local new_config_sta=$4
+    local new_map_enable=$5
+    local changed="$6"
+    local mode deep_clone deep_clone_no_bssid manage_vapind enabled
+    local map_bss_conf
+
+    if [ -f $WSPLCD_INIT ]; then
+        config_load wsplcd
+        config_get mode config 'RunMode'
+        config_get deep_clone config 'DeepClone'
+        config_get deep_clone_no_bssid config 'DeepCloneNoBSSID'
+        config_get config_sta config 'ConfigSta'
+        config_get map_enable config 'MapEnable'
+        config_get map_bss_conf config 'MapGenericPolicyFile'
+        config_get manage_vapind config 'ManageVAPInd'
+        config_get_bool enabled config 'HyFiSecurity' 0
+
+        if [ ! "$mode" = "$new_mode" ]; then
+            uci_set wsplcd config 'RunMode' "$new_mode"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+            __repacd_echo "Set wsplcd to $new_mode mode"
+            wsplcd_restart=1
+        fi
+
+        if [ ! "$deep_clone" = "$new_deep_clone" ]; then
+            uci_set wsplcd config 'DeepClone' "$new_deep_clone"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+            __repacd_echo "Set wsplcd DeepClone=$new_deep_clone"
+            wsplcd_restart=1
+        fi
+
+        if [ ! "$deep_clone_no_bssid" = "$new_deep_clone_no_bssid" ]; then
+            uci_set wsplcd config 'DeepCloneNoBSSID' "$new_deep_clone_no_bssid"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+            __repacd_echo "Set wsplcd DeepCloneNoBSSID=$new_deep_clone_no_bssid"
+            wsplcd_restart=1
+        fi
+
+        if [ ! "$config_sta" = "$new_config_sta" ]; then
+            uci_set wsplcd config 'ConfigSta' "$new_config_sta"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+            __repacd_echo "Set wsplcd ConfigSta=$new_config_sta"
+            wsplcd_restart=1
+        fi
+
+        if [ ! "$map_enable" = "$new_map_enable" ]; then
+            uci_set wsplcd config 'MapEnable' "$new_map_enable"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+            __repacd_echo "Set wsplcd MapEnable=$new_map_enable"
+            wsplcd_restart=1
+        fi
+
+        if [ "$new_map_enable" -gt 0 ] && \
+            [ ! "$map_bss_conf" = "$WSPLCD_MAP_BSS_POLICY_PATH" ]; then
+            uci_set wsplcd config 'MapGenericPolicyFile' "$WSPLCD_MAP_BSS_POLICY_PATH"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+            __repacd_echo "Set wsplcd MapGenericPolicyFile=$WSPLCD_MAP_BSS_POLICY_PATH"
+            wsplcd_restart=1
+        fi
+
+        if [ ! "$manage_vapind" = "0" ]; then
+            uci_set wsplcd config 'ManageVAPInd' "0"
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+            __repacd_echo "Set wsplcd ManageVAPInd=0"
+            wsplcd_restart=1
+        fi
+
+        if [ ! "$enabled" -eq "$wsplcd_enabled" ]; then
+            uci_set wsplcd config 'HyFiSecurity' $wsplcd_enabled
+            changed=$((changed + 1))
+            eval "$6='$changed'"
+            uci_commit wsplcd
+
+            __repacd_echo "Set wsplcd HyFiSecurity=$wsplcd_enabled"
+            if [ "$wsplcd_enabled" -gt 0 ]; then
+                __repacd_echo "Enabled security and configuration"
+                wsplcd_start=1
+            else
+                __repacd_echo "Disabled security and configuration"
+                wsplcd_stop=1
+            fi
+        fi
+    fi
+}
+
+# Change whether mcsd is enabled and running or not
+#
+# input: $1 manage_mcsd: whether repacd is to manage the state of mcsd
+# input: $2 enable_son: whether SON mode is enabled or not (where this could
+#                       include MAP)
+__repacd_config_mcsd() {
+    local manage_mcsd=$1
+    local enable_son=$2
+
+    if [ "$manage_mcsd" -gt 0 ] && [ -f "$MCSD_INIT" ]; then
+        if [ "$enable_son" -gt 0 ]; then
+            uci_set mcsd config 'Enable' 0
+            uci_commit mcsd
+            # Stop mcsd and keep attempting to stop it in case it
+            # is being restarted by a hotplug event.
+            while pgrep mcsd;
+            do
+                /etc/init.d/mcsd stop
+                sleep 2
+            done
+        else  # switching to non-SON mode, so enable mcsd
+            uci_set mcsd config 'Enable' 1
+            uci_commit mcsd
+            /etc/init.d/mcsd start
+        fi
+    fi
+}
+
+# Change the hyd and/or lbd configuration based on the parameters provided
+# and the allowed feature settings.
+#
+# input: $1 enable_steering: 1 - AP interfaces support steering;
+#                            0 - they do not
+# input: $2 disable_ap_steering: 1 - disable AP steering feature
+# input: $3 enable_son: 1 - multi-AP SON mode should be enabled (so
+#                           long as it is not prohibited by config);
+#                       0 - multi-AP SON mode should not be enabled
+# input: $4 son_mode: one of HYROUTER or HYCLIENT; only relevant if enable_son
+#                     is 1 and SON mode is not prohibited by the config
+# input-output: $5 changed: count of the changes
+__repacd_configure_son() {
+    local enable_steering=$1
+    local disable_ap_steering=$2
+    local enable_son=$3
+    local son_mode="$4"
+    local changed="$5"
+
+    local enable_steering_mask enable_son_mask manage_mcsd
+    config_load repacd
+    config_get_bool enable_steering_mask repacd 'EnableSteering' 1
+    config_get_bool enable_son_mask repacd 'EnableSON' 1
+    config_get_bool manage_mcsd repacd 'ManageMCSD' 1
+
+    # If the config does not permit steering or multi AP logic, force it
+    # off.
+    if [ "$enable_steering_mask" -eq 0 ]; then
+        enable_steering=0
+    fi
+
+    if [ "$enable_son_mask" -eq 0 ]; then
+        enable_son=0
+    fi
+
+    # If the package is not even installed, then we will fall back to
+    # the uncoordinated steering mode (if enabled).
+    if [ -f $HYD_INIT  ]; then
+        local cur_mode hyd_enabled
+        config_load hyd
+        config_get cur_mode config 'Mode'
+        config_get hyd_enabled config 'Enable'
+        config_get disable_steering config 'DisableSteering'
+
+        if [ ! "$cur_mode" = "$son_mode" ]; then
+            uci_set hyd config 'Mode' "$son_mode"
+            changed=$((changed + 1))
+            eval "$5='$changed'"
+            uci_commit hyd
+            __repacd_echo "Set hyd Mode=$son_mode"
+        fi
+
+        if [ ! "$disable_steering" = "$disable_ap_steering" ]; then
+            uci_set hyd config 'DisableSteering' "$disable_ap_steering"
+            changed=$((changed + 1))
+            eval "$5='$changed'"
+            uci_commit hyd
+            __repacd_echo "Set hyd DisableSteering=$disable_ap_steering"
+        fi
+
+        if [ ! "$hyd_enabled" = "$enable_son" ]; then
+            uci_set hyd config 'Enable' "$enable_son"
+            changed=$((changed + 1))
+            eval "$5='$changed'"
+            uci_commit hyd
+
+            /etc/init.d/qrfs disable
+            /etc/init.d/qrfs stop
+
+            __repacd_config_mcsd "$manage_mcsd" "$enable_son"
+
+            # hyd should be started/stopped based on the hotplug hooks
+            # it has installed.
+            if [ "$enable_son" -gt 0 ]; then
+                __repacd_echo "Enabled Wi-Fi SON mode"
+                hyd_start=1
+            else
+                __repacd_echo "Disabled Wi-Fi SON mode"
+                hyd_stop=1
+            fi
+        fi
+
+        if [ "$enable_son" -gt 0 ]; then
+            enable_steering=0
+        fi
+    fi
+
+    if [ -f $LBD_INIT ]; then
+        local lbd_enabled
+        config_load lbd
+        config_get lbd_enabled config 'Enable'
+
+        if [ ! "$lbd_enabled" = "$enable_steering" ]; then
+            uci_set lbd config 'Enable' "$enable_steering"
+            changed=$((changed + 1))
+            eval "$5='$changed'"
+            uci_commit lbd
+
+            # Start/stop is handled when Wi-Fi interfaces are reconfigured.
+            if [ "$enable_steering" -gt 0 ]; then
+                __repacd_echo "Enabled Wi-Fi steering"
+            else
+                __repacd_echo "Disabled Wi-Fi steering"
+            fi
+        fi
+    fi
+}
+
+
+# Change the configuration on the wifi-device object to match what is desired
+# (either QWrap enabled or disabled based on the second argument).
+#
+# input: $1 config: section to update
+# input: $2 1 - enable, 0 - disable
+# input-output: $3 change counter
+__repacd_config_qwrap_device() {
+    local config="$1"
+    local mode network
+    local changed="$3"
+
+    # @todo This will need to be updated for 3 radio configurations. The
+    #       qwrap_enable should be set for the radio with the backhaul and
+    #       qwrap_dbdc_enable should be set for the radios with only an AP
+    #       interface.
+    config_get hwmode "$config" hwmode
+    config_get type "$config" type
+
+    if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ]; then
+	return
+    fi
+
+    if whc_is_5g_radio "$1"; then
+        local qwrap_enable
+        config_get qwrap_enable "$config" qwrap_enable
+        if [ ! "$2" = "$qwrap_enable" ]; then
+            uci_set wireless "$config" qwrap_enable "$2"
+            changed=$((changed + 1))
+            eval "$3='$changed'"
+            __repacd_echo "Set radio $config to QWrap Enabled=$2"
+        fi
+    else   # must be 2.4 GHz
+        local qwrap_dbdc_enable
+        config_get qwrap_dbdc_enable "$config" qwrap_dbdc_enable
+        if [ ! "$2" = "$qwrap_dbdc_enable" ]; then
+            uci_set wireless "$config" qwrap_dbdc_enable "$2"
+            changed=$((changed + 1))
+            eval "$3='$changed'"
+            __repacd_echo "Set radio $config to QWrap DBDC Enabled=$2"
+        fi
+    fi
+}
+
+# Set the option that indicates whether the DBDC repeater feature should be
+# enabled or not.
+#
+# input: $1 config: section to update
+# input: $2 1 - enable, 0 - disable
+# input-output: $3 change counter
+__repacd_config_dbdc_device() {
+    local config="$1"
+    local changed="$3"
+
+    local dbdc_enable
+    config_get hwmode "$config" hwmode
+    config_get type "$config" type
+
+    if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ]; then
+	return
+    fi
+
+    config_get dbdc_enable "$config" dbdc_enable 1
+    if [ ! "$2" = "$dbdc_enable" ]; then
+        uci_set wireless "$config" dbdc_enable "$2"
+        changed=$((changed + 1))
+        eval "$3='$changed'"
+        __repacd_echo "Set radio $config to DBDC Enabled=$2"
+    fi
+}
+
+# Enable or disable the WPS Push Button Configuration Range Extender
+# enhancement based on the current configuration.
+# input: $1 force_cap_mode - whether to act as gateway connected even without
+#                            a WAN interface
+# input-output: $2 change count
+__repacd_config_wps_pbc_enhc() {
+    local force_gwcon_mode=$1
+    local changed="$2"
+    local cur_enable
+
+    if __repacd_gw_mode || [ "$force_gwcon_mode" -gt 0 ] || \
+       __repacd_is_wds_mode || __repacd_is_son_mode; then
+        if [ "$traffic_separation_enabled" -gt 0 ]; then
+            enable_wps_pbc_enhc=1
+        else
+            enable_wps_pbc_enhc=0
+        fi
+    else
+        # Must be QWRAP or ExtAP mode, where we want distinct SSIDs for the
+        # RE interfaces.
+        enable_wps_pbc_enhc=1
+    fi
+
+    config_load wireless
+    config_get cur_enable qcawifi wps_pbc_extender_enhance '0'
+
+    if [ ! "$enable_wps_pbc_enhc" = "$cur_enable" ]; then
+        # Create the section if it does not exist.
+        uci set wireless.qcawifi=qcawifi
+        uci_set wireless qcawifi wps_pbc_extender_enhance $enable_wps_pbc_enhc
+        uci_set wireless qcawifi wps_pbc_overwrite_ap_settings_all 1
+
+        __repacd_echo "Set qcawifi.wps_pbc_extender_enhance=$enable_wps_pbc_enhc"
+        __repacd_echo "Set qcawifi.wps_pbc_overwrite_ap_settings_all=1"
+        changed=$((changed + 1))
+        eval "$2='$changed'"
+    fi
+}
+
+# Change the configuration on the wifi-iface object to match what is desired.
+# The values provided are determined by the caller based on the desired
+# mode of operation (eg. QWrap/ExtAP or not).
+#
+# input: $1 config: section to update
+# input: $2 network: only update if network matches this value
+# input: $3 enable_wds: 1 - enable, 0 - disable
+# input: $4 qwrap_ap: 1 - enable, 0 - disable
+# input: $5 extap: 1 - enable, 0 disable
+# input: $6 block_dfs_chan: 1 - block DFS channels, 0 - do not block them
+# input: $7 enable_rrm: 1 - enable, 0 disable
+# input: $8 re_scalingfactor: 0 - ignore, 1 to 100 valid for sta
+# input: $9 default_root_dist: 0 - ignore, 255 - invalid root distance
+# input: $10 cap_snr: 0 - disabled, 1-100 valid
+# input-output: $11 change counter
+__repacd_config_iface() {
+    local config="$1"
+    local device mode network enable_wds qwrap_ap extap block_dfs enable_rrm
+    local re_scalingfactor root_distance cap_snr wps_pbc_skip_connected_sta
+    local bssid="00:00:00:00:00:00"
+    local num_changes=0
+    local changed="${11}"
+
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+    config_get type "$device" type
+
+    if [ "$hwmode" = '11ad' ] && [ "$type" = 'mac80211' ] ;then
+       return
+    fi
+
+    config_get mode "$config" mode
+    config_get network "$config" network
+    config_get enable_wds "$config" wds '0'
+    config_get qwrap_ap "$config" qwrap_ap '0'
+    config_get extap "$config" extap '0'
+    config_get block_dfs "$config" blockdfschan '0'
+    config_get enable_rrm "$config" rrm '0'
+    config_get re_scalingfactor "$config" re_scalingfactor '0'
+    config_get root_distance "$config" root_distance '0'
+    config_get cap_snr "$config" caprssi '0'
+    config_get wps_pbc_skip_connected_sta "$config" wps_pbc_skip_connected_sta '0'
+
+    if [ "$2" = "$network" ]; then
+        if [ ! "$3" = "$enable_wds" ]; then
+            uci_set wireless "$config" wds "$3"
+            num_changes=$((num_changes + 1))
+            __repacd_echo "Set iface $config to WDS=$3"
+        fi
+
+        # When operating in WDS/SON mode (since we do not use the repeater
+        # enhancement), set the option to skip activating WPS PBC on a
+        # connected STA interface. This allows the WPS button to be pressed on
+        # an RE without causing it to disconnect from its upstream device.
+        if [ "$mode" = 'sta' ]; then
+            if [ ! "$3" = "$wps_pbc_skip_connected_sta" ]; then
+                uci_set wireless "$config" wps_pbc_skip_connected_sta "$3"
+                num_changes=$((num_changes + 1))
+                __repacd_echo "Set iface $config to wps_pbc_skip_connected_sta=$3"
+            fi
+        fi
+
+        # These should only be set on AP interfaces.
+        if __repacd_is_matching_mode 'ap' "$mode"; then
+            if [ ! "$4" = "$qwrap_ap" ]; then
+                uci_set wireless "$config" qwrap_ap "$4"
+                num_changes=$((num_changes + 1))
+                __repacd_echo "Set iface $config to QWrapAP=$4"
+            fi
+
+            # @todo If there are multiple 5 GHz radios, will need to figure
+            #       out which can act as the backhaul.
+
+            # Set the interface into wrap or vanilla AP mode as appropriate
+            if whc_is_5g_radio $device; then
+                if [ "$4" -gt 0 ]; then
+                    if [ ! "$mode" = 'wrap' ]; then
+                        uci_set wireless "$config" mode 'wrap'
+                        num_changes=$((num_changes + 1))
+                        __repacd_echo "Set iface $config mode to wrap"
+                    fi
+                else  # WDS or ExtAP mode
+                    if [ ! "$mode" = 'ap' ]; then
+                        uci_set wireless "$config" mode 'ap'
+                        num_changes=$((num_changes + 1))
+                        __repacd_echo "Set iface $config mode to ap"
+                    fi
+                fi
+            fi
+
+            if [ ! "$6" = "$block_dfs" ]; then
+                uci_set wireless "$config" blockdfschan "$6"
+                num_changes=$((num_changes + 1))
+                __repacd_echo "Set iface $config to BlockDFSChan=$6"
+            fi
+
+            if [ ! "$7" = "$enable_rrm" ]; then
+                uci_set wireless "$config" rrm "$7"
+                num_changes=$((num_changes + 1))
+                __repacd_echo "Set iface $config to RRM=$7"
+            fi
+        fi
+
+        if [ ! "$5" = "$extap" ]; then
+            uci_set wireless "$config" extap "$5"
+            num_changes=$((num_changes + 1))
+            __repacd_echo "Set iface $config to ExtAP=$5"
+        fi
+
+        if [ "$daisy_chain" -gt 0 ] && \
+            __repacd_is_matching_mode 'sta' "$mode"; then
+
+            # Need to resolve 2.4G BSSID, So until then configure invalid BSSID
+            # to avoid association on 2.4G interface.
+            # Check if bssid updated by wifimon/daisychain, needs restart
+            if [ "$bssid_resolve_state" = "resolving" ] \
+                && ! whc_is_5g_radio $device; then
+                uci_set wireless "$config" bssid "$bssid"
+                num_changes=$((num_changes + 1))
+                __repacd_echo "Set iface $config to BSSID=$bssid"
+            fi
+
+            if [ ! "$8" = "$re_scalingfactor" ]; then
+                uci_set wireless "$config" re_scalingfactor "$8"
+                num_changes=$((num_changes + 1))
+                __repacd_echo "Set iface $config to RE_ScalingFactor=$8"
+            fi
+
+            if [ ! "${10}" = "$cap_snr" ]; then
+                uci_set wireless "$config" caprssi "${10}"
+                num_changes=$((num_changes + 1))
+                __repacd_echo "Set iface $config to caprssi=${10}"
+            fi
+        fi
+
+        if [ ! "$9" = "$root_distance" ]; then
+            uci_set wireless "$config" root_distance "$9"
+            num_changes=$((num_changes + 1))
+            __repacd_echo "Set iface $config to RootDistance=$9"
+        fi
+
+        if [ "$num_changes" -gt 0 ]; then
+            changed=$((changed + 1))
+            eval "${11}='$changed'"
+        fi
+    fi
+}
+
+# Switch the device into acting as the CAP (main gateway).
+# Also update the range extension mode as necessary.
+#
+# input: $1 is_cap: whether the device should act as the central
+#                   AP or a secondary gateway connected AP
+__repacd_config_gwcon_ap_mode() {
+    local is_cap=$1
+    local wsplcd_mode son_mode
+    local rate_scaling_factor=0
+    local default_root_dist=0
+
+    # The WDS, VAP independent, and QWrap AP settings also need to be updated
+    # based on the range extension mode.
+    local enable_wds enable_rrm enable_qwrap_ap enable_extap
+    local block_dfs enable_multi_ap disable_steering=0 config_sta=1
+    local map_enable=0
+    __repacd_get_config_re_mode config_re_mode
+    __repacd_get_re_mode resolved_re_mode
+    if __repacd_is_auto_re_mode $config_re_mode || __repacd_is_wds_mode || \
+       __repacd_is_son_mode; then
+        if __repacd_is_auto_re_mode $config_re_mode || \
+           __repacd_is_son_mode; then
+            __repacd_echo "Using SON mode for GW Connected AP"
+            enable_multi_ap=1
+        else   # Must be vanilla WDS
+            __repacd_echo "Using WDS mode for GW Connected AP"
+            enable_multi_ap=0
+        fi
+
+        enable_wds=1
+        enable_rrm=1
+        enable_qwrap_ap=0
+        enable_extap=0
+
+        # In WDS/SON modes, we let the OEM customize whether DFS channels
+        # should be permitted.
+        if __repacd_is_block_dfs; then
+            block_dfs=1
+        else
+            block_dfs=0
+        fi
+
+        wsplcd_enabled=1
+    else
+        __repacd_echo "Using Non-WDS mode for GW Connected AP"
+        enable_wds=0
+        enable_multi_ap=0
+        enable_rrm=0
+        enable_qwrap_ap=0
+        enable_extap=0
+
+        # In QWrap/ExtAP mode, DFS channels should always be disallowed (as it
+        # does not appear to suppor them currently). This may be able to
+        # relaxed in the future.
+        block_dfs=1
+
+        # Since QWrap/ExtAP mode on the CAP is for mimicking a non-QCA AP, do
+        # not run an IEEE P1905.1 registrar.
+        wsplcd_enabled=0
+    fi
+
+    config_load repacd
+    config_get bssid_resolve_state WiFiLink 'BSSIDResolveState' 'resolving'
+
+    # In GW-connected AP mode, only the AP interfaces are enabled.
+    local disable_24g_sta=1 disable_5g_sta=1 disable_24g_ap=0 disable_5g_ap=0
+    config_load wireless
+    config_foreach __repacd_disable_vap wifi-iface \
+        $managed_network 'sta' $disable_24g_sta $disable_5g_sta config_changed
+    config_foreach __repacd_disable_vap wifi-iface \
+        $managed_network 'ap' $disable_24g_ap $disable_5g_ap config_changed
+
+    # The QWrap parameters should always be set to 0 on the CAP.
+    config_foreach __repacd_config_qwrap_device wifi-device \
+        0 config_changed
+
+    # Similarly, the DBDC repeater feature should be disabled on the
+    # CAP.
+    config_foreach __repacd_config_dbdc_device wifi-device \
+        0 config_changed
+
+    # Now set up the interfaces in the right way.
+    config_foreach __repacd_config_iface wifi-iface \
+        $managed_network $enable_wds $enable_qwrap_ap $enable_extap \
+        $block_dfs $enable_rrm $rate_scaling_factor $default_root_dist $capsnr config_changed
+
+    if [ "$traffic_separation_active" -gt 0 ]; then
+        config_foreach __repacd_config_iface wifi-iface \
+            $network_backhaul $enable_wds $enable_qwrap_ap $enable_extap \
+            $block_dfs $enable_rrm $rate_scaling_factor $default_root_dist $capsnr config_changed
+
+        config_foreach __repacd_config_iface wifi-iface \
+            $network_guest $enable_wds $enable_qwrap_ap $enable_extap \
+            $block_dfs $enable_rrm $rate_scaling_factor $default_root_dist $capsnr config_changed
+    fi
+
+    uci_commit wireless
+
+    uci_set repacd repacd Role 'CAP'
+    uci_commit repacd
+
+    if [ "$is_cap" -gt 0 ]; then
+        wsplcd_mode='REGISTRAR'
+        son_mode='HYROUTER'
+    else
+        wsplcd_mode='ENROLLEE'
+        son_mode='HYCLIENT'
+    fi
+
+    # Deep cloning is not relevant in registrar mode, but we set it to 1
+    # anyways (since that is the default).
+    __repacd_configure_wsplcd $wsplcd_mode 1 0 $config_sta $map_enable \
+                              config_changed
+
+    __repacd_configure_son $enable_wds $disable_steering $enable_multi_ap \
+        $son_mode config_changed
+}
+
+# Switch the device to act in one of the NonCAP configurations.
+# input: $1 disable_ap - whether to disable the AP interfaces
+# input: $2 deep_clone - whether to use deep cloning in wsplcd
+# input: $3 deep_clone_no_bssid - whether to use deep cloning without BSSID cloning in wsplcd
+__repacd_config_noncap_mode() {
+    local disable_ap=$1
+    local deep_clone=$2
+    local deep_clone_no_bssid=$3
+
+    # The WDS and QWrap AP settings also need to be updated based on the
+    # range extension mode.
+    local enable_wds enable_qwrap_ap enable_extap enable_dbdc_repeater
+    local block_dfs enable_rrm enable_multi_ap disable_steering=0 config_sta=1
+    local map_enable=0
+    local rate_scaling_factor=$RE_DEFAULT_RATE_ESTIMATE_SCALING_FACTOR
+    local default_root_dist=$RE_ROOT_AP_DISTANCE_INVALID
+    local disable_24g_sta=1 disable_5g_sta=0
+    local disable_24g_ap=$disable_ap disable_5g_ap=$disable_ap
+    if __repacd_is_wds_mode || __repacd_is_son_mode; then
+        if __repacd_is_wds_mode; then
+            __repacd_echo "Using WDS mode for NonCAP"
+        else  # Must be SON mode
+            __repacd_echo "Using SON mode for NonCAP"
+        fi
+
+        enable_wds=1
+        enable_qwrap_ap=0
+        enable_extap=0
+
+        # Even if we are not operating in fully coordinated steering mode,
+        # we should enable RRM for use in the uncoordinated steering
+        # environment.
+        enable_rrm=1
+
+        # In WDS mode, we let the OEM customize whether DFS channels should
+        # be permitted.
+        if __repacd_is_block_dfs; then
+            block_dfs=1
+        else
+            block_dfs=0
+        fi
+
+        wsplcd_enabled=1
+
+        __repacd_get_rate_scaling_factor rate_scaling_factor
+        config_get capsnr WiFiLink 'PreferCAPSNRThreshold5G' '0'
+    else
+        enable_wds=0
+
+        # Until steering can be well supported on QWRAP/ExtAP, there is no real
+        # need to have RRM enabled.
+        enable_rrm=0
+
+        # wsplcd needs WDS in order to work (as it sends/receives using the
+        # bridge interface MAC address). Plus, it is not too likely that the
+        # main AP will be running an IEEE P1905.1 registrar.
+        wsplcd_enabled=0
+
+        if [ "$disable_ap" -eq 0 ]; then
+            if __repacd_is_qwrap_mode; then
+                __repacd_echo "Using QWrap mode for NonCAP"
+                enable_qwrap_ap=1
+                enable_extap=0
+
+            else
+                __repacd_echo "Using ExtAP mode for NonCAP"
+                enable_qwrap_ap=0
+                enable_extap=1
+            fi
+
+            # In QWrap/ExtAP mode, DFS channels should always be disallowed
+            # (as these modes may not support them properly).
+            block_dfs=1
+        else  # client mode
+            if __repacd_is_qwrap_mode; then
+                __repacd_echo "Using QWrap mode for NonCAP"
+                enable_qwrap_ap=0
+                enable_extap=0
+
+                # @todo What mode should be used here? The STA interface is not
+                #       even created if it is not in QWRAP or WDS. We could
+                #       potentially consider standalone Proxy STA
+                #       mode, but we need details on how to configure this.
+            else
+                __repacd_echo "Using ExtAP mode for NonCAP"
+                enable_qwrap_ap=0
+                enable_extap=1
+            fi
+
+            # We'll rely on the main AP to decide on DFS or not.
+            block_dfs=0
+        fi
+    fi
+
+    if __repacd_is_son_mode; then
+        disable_24g_sta=0
+        enable_dbdc_repeater=0
+        enable_multi_ap=1
+    else
+        enable_multi_ap=0
+
+        # Although currently in non-SON mode we do not enable both STA
+        # interfaces, just in case we do in the future, set this flag. It
+        # should make no difference if only one STA interface is active.
+        enable_dbdc_repeater=1
+    fi
+
+    config_load repacd
+    config_get bssid_resolve_state WiFiLink 'BSSIDResolveState' 'resolving'
+
+    config_load wireless
+
+    if [ "$traffic_separation_active" -gt 0 ]; then
+        config_foreach __repacd_disable_vap wifi-iface \
+            $network_backhaul 'sta' $disable_24g_sta $disable_5g_sta config_changed
+    else
+        config_foreach __repacd_disable_vap wifi-iface \
+            $managed_network 'sta' $disable_24g_sta $disable_5g_sta config_changed
+    fi
+    config_foreach __repacd_disable_vap wifi-iface \
+        $managed_network 'ap' "$disable_24g_ap" "$disable_5g_ap" config_changed
+
+    # First set the special options for QWRAP and DBDC repeaters.
+    config_foreach __repacd_config_qwrap_device \
+        wifi-device $enable_qwrap_ap config_changed
+    config_foreach __repacd_config_dbdc_device wifi-device \
+        $enable_dbdc_repeater config_changed
+
+    config_foreach __repacd_config_iface wifi-iface \
+        $managed_network $enable_wds $enable_qwrap_ap $enable_extap \
+        $block_dfs $enable_rrm $rate_scaling_factor $default_root_dist $capsnr config_changed
+
+    if [ "$traffic_separation_active" -gt 0 ]; then
+        config_foreach __repacd_config_iface wifi-iface \
+            $network_backhaul $enable_wds $enable_qwrap_ap $enable_extap \
+            $block_dfs $enable_rrm $rate_scaling_factor $default_root_dist $capsnr config_changed
+
+        config_foreach __repacd_config_iface wifi-iface \
+            $network_guest $enable_wds $enable_qwrap_ap $enable_extap \
+            $block_dfs $enable_rrm $rate_scaling_factor $default_root_dist $capsnr config_changed
+    fi
+
+    __repacd_config_independent_vaps
+
+    uci_commit wireless
+
+    uci_set repacd repacd Role 'NonCAP'
+    uci_commit repacd
+
+    __repacd_configure_wsplcd 'ENROLLEE' "$deep_clone" "$deep_clone_no_bssid" \
+                              $config_sta $map_enable config_changed
+
+    __repacd_configure_son $enable_wds $disable_steering $enable_multi_ap \
+        'HYCLIENT' config_changed
+}
+
+# Switch the device into acting as a range extender.
+# Also update the range extension mode as necessary.
+__repacd_config_re_mode() {
+    local disable_ap=0 deep_clone=1 deep_clone_no_bssid=0
+
+    # We do deep cloning without BSSID for daisy chaining.
+    [ "$daisy_chain" -gt 0 ] && deep_clone_no_bssid=1
+
+    # TODO - check if this is needed for traffic separation (or maybe use
+    # ConfigSta = 0).
+    [ "$traffic_separation_enabled" -gt 0 ] && {
+        deep_clone=0
+        deep_clone_no_bssid=0
+    }
+
+    __repacd_config_noncap_mode $disable_ap $deep_clone $deep_clone_no_bssid
+}
+
+# Switch the device into acting as a pure client device (no AP interfaces
+# enabled).
+__repacd_config_client_mode() {
+    local disable_ap=1 deep_clone=0
+    __repacd_config_noncap_mode $disable_ap $deep_clone 0
+}
+
+# Change the configuration on the wifi-iface object to match what is desired.
+# This function is for Multi-AP mode.
+#
+# input: $1 config: section to update
+# input: $2 network: only update if network matches this value
+# input: $3 block_dfs_chan: 1 - block DFS channels, 0 - do not block them
+# input-output: $4 change counter
+__repacd_config_iface_map() {
+    local enable_wds=1 qwrap_ap=0 extap=0 enable_rrm=1 re_scalingfactor=0
+    local default_root_dist=0 cap_snr=0
+
+    __repacd_config_iface "$1" "$2" $enable_wds $qwrap_ap $extap "$3" $enable_rrm \
+                          $re_scalingfactor $default_root_dist $cap_snr "$4"
+}
+
+# Generate the Multi-AP BSS instantiation config file for wsplcd based on
+# the selected template and SSID settings.
+# input-output: $1 change counter
+__repacd_generate_map_bss_conf() {
+    local changed="$1"
+
+    local template_filename
+    local template_path
+    local fronthaul_ssid fronthaul_key
+    local backhaul_ssid backhaul_key
+
+    config_load repacd
+    config_get template_filename MAPConfig BSSInstantiationTemplate
+    config_get fronthaul_ssid MAPConfig FronthaulSSID
+    config_get fronthaul_key MAPConfig FronthaulKey
+    config_get backhaul_ssid MAPConfig BackhaulSSID
+    config_get backhaul_key MAPConfig BackhaulKey
+
+    if [ -z "${template_filename}" ]; then
+        __repacd_echo "BSS instantiation template not specified"
+        return 1
+    fi
+
+    template_path="${WSPLCD_MAP_TEMPLATE_DIR}/${template_filename}"
+    if [ ! -r "${template_path}" ]; then
+        __repacd_echo "BSS instantiation template ${template_path} not readable"
+        return 1
+    fi
+
+    __repacd_echo "Using wsplcd BSS instantiation template: ${template_path}"
+
+    local tempfile
+    tempfile=$(mktemp)
+    cp "${template_path}" "${tempfile}"
+
+    # Some of these replacements may not be used, but this covers all of the
+    # cases of variables that need to be replaced.
+    #
+    # Note that in case the variable contains the sed delimeter, it needs to
+    # be escaped to avoid a sed error.
+    sed -i -e "s!__FH_SSID_REPLACE__!${fronthaul_ssid/!/\!}!g" \
+           -e "s!__FH_KEY_REPLACE__!${fronthaul_key/!/\!}!g" \
+           -e "s!__BH_SSID_REPLACE__!${backhaul_ssid/!/\!}!g" \
+           -e "s!__BH_KEY_REPLACE__!${backhaul_key/!/\!}!g" \
+           -e "s!__FHBH_SSID_REPLACE__!${fronthaul_ssid/!/\!}!g" \
+           -e "s!__FHBH_KEY_REPLACE__!${fronthaul_key/!/\!}!g" \
+           "${tempfile}"
+
+    if [ ! -r "${WSPLCD_MAP_BSS_POLICY_PATH}" ] || \
+        ! cmp -s "${tempfile}" "${WSPLCD_MAP_BSS_POLICY_PATH}"; then
+        # New file differs from old. Move it into place and update
+        # the change count.
+        mv -f "${tempfile}" "${WSPLCD_MAP_BSS_POLICY_PATH}"
+        changed=$((changed + 1))
+        eval "$1='$changed'"
+    else
+        # No change, so just remove the temporary file
+        rm -f "${tempfile}"
+    fi
+
+    return 0
+}
+
+# Switch the device into acting as a gateway connected AP (no bSTA).
+#
+# Pre-condition: RE mode has already been checked to be SON
+#
+# input: $1 is_controller: whether the device should act as the controller
+#                          or just a gateway connected AP
+# input: $2 standalone_controller: if a controller, whether the device should
+#                                  act as a standalone controller
+__repacd_config_gwcon_map_ap() {
+    local is_controller=$1
+    local wsplcd_mode son_mode
+    local rate_scaling_factor=0
+    local default_root_dist=0
+
+    # The WDS, VAP independent, and QWrap AP settings also need to be updated
+    # based on the range extension mode.
+    local enable_wds=1 enable_multi_ap=1 disable_steering=0
+    local deep_clone=0 deep_clone_no_bssid=0 config_sta=0 map_enable=1
+    local block_dfs
+
+    __repacd_echo "Using SON mode for GW Connected AP"
+
+    # In WDS/SON modes, we let the OEM customize whether DFS channels
+    # should be permitted.
+    if __repacd_is_block_dfs; then
+        block_dfs=1
+    else
+        block_dfs=0
+    fi
+
+    wsplcd_enabled=1
+
+    local disable_24g_sta disable_5g_sta disable_24g_ap disable_5g_ap
+    if [ "$is_controller" -gt 0 ] && [ "$standalone_controller" -gt 0 ]; then
+        __repacd_echo "Disabling all interfaces for standalone controller"
+        disable_24g_sta=1
+        disable_5g_sta=1
+        disable_24g_ap=1
+        disable_5g_ap=1
+    else
+        # In GW-connected AP mode, only the AP interfaces are enabled.
+        disable_24g_sta=1
+        disable_5g_sta=1
+        disable_24g_ap=0
+        disable_5g_ap=0
+    fi
+    config_load wireless
+    config_foreach __repacd_disable_vap wifi-iface \
+        $managed_network 'sta' $disable_24g_sta $disable_5g_sta config_changed
+    config_foreach __repacd_disable_vap wifi-iface \
+        $managed_network 'ap' $disable_24g_ap $disable_5g_ap config_changed
+
+    # Now set up the interfaces in the right way.
+    if [ "$standalone_controller" -eq 0 ]; then
+        config_foreach __repacd_config_iface_map wifi-iface \
+            $managed_network $block_dfs config_changed
+    fi
+
+    uci_commit wireless
+
+    uci_set repacd repacd Role 'CAP'
+    if [ "$is_controller" -gt 0 ]; then
+        uci_set hyd MultiAP EnableController 1
+
+        # Standalone controller does not act as an Agent
+        if [ "$standalone_controller" -gt 0 ]; then
+            uci_set hyd MultiAP EnableAgent 0
+        else
+            uci_set hyd MultiAP EnableAgent 1
+        fi
+
+        # Force the remote association tracking on for the controller, as the
+        # steering is centralized.
+        uci_set lbd StaDB TrackRemoteAssoc 1
+    else
+        uci_set hyd MultiAP EnableController 0
+        uci_set hyd MultiAP EnableAgent 1
+
+        # For an agent, use whatever the current remote association tracking
+        # setting is. There is still an advantage to tracking remote
+        # associations as it allows the bridging tables to be cleaned up
+        # properly when a Topology Notification is missed.
+    fi
+
+    # This generally should nto be needed when operating in gateway connected
+    # AP mode. Until there is a case where we need it, we'll leave it disabled.
+    uci_set repacd FrontHaulMgr ManageFrontAndBackHaulsIndependently 0
+    uci_commit repacd
+
+    uci_commit hyd
+    uci_commit lbd
+
+    if [ "$is_controller" -gt 0 ]; then
+        wsplcd_mode='REGISTRAR'
+        son_mode='HYROUTER'
+
+        if ! __repacd_generate_map_bss_conf config_changed; then
+            return 1
+        fi
+    else
+        wsplcd_mode='ENROLLEE'
+        son_mode='HYCLIENT'
+    fi
+
+    # No deep cloning with the MAP algorithms
+    __repacd_configure_wsplcd $wsplcd_mode $deep_clone $deep_clone_no_bssid \
+                              $config_sta $map_enable config_changed
+
+    __repacd_configure_son $enable_wds $disable_steering $enable_multi_ap \
+        $son_mode config_changed
+
+    return 0
+}
+
+# Switch the device to act as a range extender.
+__repacd_config_map_re() {
+    # The WDS and QWrap AP settings also need to be updated based on the
+    # range extension mode.
+    local enable_wds=1 block_dfs
+    local enable_multi_ap=1 disable_steering=0
+    local deep_clone=0 deep_clone_no_bssid=0 config_sta=0 map_enable=1
+
+    local disable_24g_ap=0 disable_5g_ap=0
+
+    # We let the OEM customize whether DFS channels should be permitted.
+    if __repacd_is_block_dfs; then
+        block_dfs=1
+    else
+        block_dfs=0
+    fi
+
+    # We let the daemon start wsplcd once it has a stable bSTA association.
+    wsplcd_enabled=0
+    wsplcd_stop=1
+
+    config_load wireless
+
+    # How the bSTA interface is managed is dependent on the selected and
+    # preference values.
+    local selected_radio='' preferred_radio=''
+    map_bsta_max_preference=0
+    config_foreach __repacd_resolve_bsta_radio wifi-device \
+        selected_radio preferred_radio
+
+    if [ -z "$selected_radio" ]; then
+        selected_radio="$preferred_radio"
+    fi
+
+    __repacd_echo "Using $selected_radio for bSTA"
+    config_foreach __repacd_update_map_bsta_radio wifi-iface \
+        $selected_radio $managed_network config_changed
+
+    config_foreach __repacd_disable_vap wifi-iface \
+        $managed_network 'ap' $disable_24g_ap $disable_5g_ap config_changed
+
+    config_foreach __repacd_config_iface_map wifi-iface \
+        $managed_network $block_dfs config_changed
+
+    uci_commit wireless
+
+    uci_set repacd repacd Role 'NonCAP'
+    uci_set repacd FrontHaulMgr ManageFrontAndBackHaulsIndependently 1
+    uci_commit repacd
+
+    uci_set hyd MultiAP EnableController 0
+    uci_set hyd MultiAP EnableAgent 1
+    uci_commit hyd
+
+    __repacd_configure_wsplcd 'ENROLLEE' $deep_clone $deep_clone_no_bssid \
+                              $config_sta $map_enable config_changed
+
+    __repacd_configure_son $enable_wds $disable_steering $enable_multi_ap \
+        'HYCLIENT' config_changed
+}
+
+# Restart wsplcd and the Wi-Fi interfaces based on configuration changes.
+__repacd_restart_dependencies() {
+    if [ "$wsplcd_stop" -gt 0 ]; then
+        $WSPLCD_INIT stop
+    fi
+
+    if [ "$hyd_stop" -gt 0 ]; then
+        $HYD_INIT stop
+        $HYFI_BRIDGING_INIT stop
+    fi
+
+    # When hyd is being started, start the bridging hooks prior to restarting
+    # the network to ensure any temporary loops are prevented.
+    if [ "$hyd_start" -gt 0 ]; then
+        $HYFI_BRIDGING_INIT start
+    fi
+
+    if [ "$config_changed" -gt 0 ]; then
+        __repacd_echo "Restarting network stack..."
+        whc_network_restart
+    else
+        __repacd_echo "No changes; not restarting network stack..."
+    fi
+
+    if [ "$wsplcd_start" -gt 0 ]; then
+        __repacd_echo "Starting wsplcd"
+        $WSPLCD_INIT start
+    elif [ "$wsplcd_restart" -gt 0 ]; then
+        __repacd_echo "Restarting wsplcd"
+        $WSPLCD_INIT restart
+    fi
+
+    if [ "$hyd_start" -gt 0 ]; then
+        __repacd_echo "Starting hyd"
+        $HYD_INIT start
+    fi
+}
+
+# Perform the startup actions when operating in the original Wi-Fi SON mode
+# (no Multi-AP SIG support).
+__start_son() {
+    local enabled map_enabled device_type
+    local mode activate_ts
+    local eth_mon_enabled
+
+    config_changed=0
+    net_config_changed=0
+    activate_ts=0
+
+    config_load 'repacd'
+    config_get_bool enabled repacd 'Enable' '0'
+    config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+    config_get traffic_separation_active repacd TrafficSeparationActive '0'
+    config_get daisy_chain WiFiLink DaisyChain '0'
+    config_get backhaul_ssid repacd BackhaulSSID $def_backhaul_ssid
+    config_get backhaul_enc repacd BackhaulEnc $def_backhaul_enc
+    config_get backhaul_key repacd BackhaulKey $def_backhaul_key
+    config_get network_guest repacd NetworkGuest 'guest'
+    config_get guest_ssid repacd GuestSSID $def_guest_ssid
+    config_get guest_enc repacd GuestEnc $def_guest_enc
+    config_get guest_key repacd GuestKey $def_guest_key
+    config_get guest_backhaul_iface repacd NetworkGuestBackhaulInterface 'both'
+    config_get eth_mon_enabled repacd 'EnableEthernetMonitoring' '0'
+    config_get manage_vap_ind WiFiLink 'ManageVAPInd' '0'
+    config_get Manage_front_and_back_hauls_ind 'FrontHaulMgr' 'ManageFrontAndBackHaulsIndependently' '0'
+    __repacd_get_config_re_mode config_re_mode
+
+    [ "$enabled" -gt 0 ] || {
+        return 1
+    }
+
+    __repacd_echo "starting WHC auto-configuration"
+
+    # For now, we can only manage a single network.
+    config_get managed_network repacd ManagedNetwork 'lan'
+    __repacd_echo "Managed network: $managed_network"
+
+    config_get device_type repacd DeviceType 'RE'
+    __repacd_echo "Device type: $device_type"
+
+    # Grab a lock to prevent any updates from being made by the daemon.
+    whc_wifi_config_lock
+
+    __repacd_config_wps_pbc_enhc 0 config_changed
+
+    # Config_changed is not being gracefully handled in MIPS.
+    # so commiting the change if wps_pbc_enhn is set
+    if [ "$config_changed" -gt 0 ]; then
+        uci_commit wireless
+        config_changed=0
+    fi
+
+    if __repacd_vaps_in_default_config; then
+        __repacd_reset_default_config
+        config_changed=1
+        __repacd_echo "Reset $managed_network VAPs"
+    else
+        # Need to massage the configuration to make it consistent with the
+        # expectations of repacd.
+        __repacd_reset_existing_config
+        __repacd_echo "Initialized $managed_network VAPs"
+    fi
+
+    __repacd_enable_wifi
+
+    # create additional vaps if traffic separation enabled
+    if __repacd_gw_mode || [ "$device_type" = 'RE' ] && [ "$gwcon_mode" != "CAP" ]; then
+        if [ "$traffic_separation_enabled" -gt 0 ]; then
+            if __repacd_is_qwrap_mode || \
+               __repacd_is_son_mode; then
+                if __repacd_check_additional_network_exist; then
+                    __repacd_set_bridge_empty $network_guest
+                    __repacd_set_firewall_rules $network_guest
+
+                    __repacd_reset_additional_config
+
+                    if ! __repacd_gw_mode && __repacd_is_qwrap_mode && \
+                       [ "$traffic_separation_active" -eq 0 ]; then
+                        local disable_24g_ap=1 disable_5g_ap=1
+
+                        config_load wireless
+                        config_foreach __repacd_disable_vap wifi-iface \
+                            $network_backhaul 'ap' $disable_24g_ap $disable_5g_ap config_changed
+                        config_foreach __repacd_disable_vap wifi-iface \
+                            $network_guest 'ap' $disable_24g_ap $disable_5g_ap config_changed
+                        uci_commit wireless
+                    fi
+
+                    uci_set repacd repacd NetworkBackhaul $network_backhaul
+                    uci_commit repacd
+                    activate_ts=1
+                fi
+            fi
+        fi
+    fi
+
+    if __repacd_gw_mode; then
+        # WAN group not empty; this device will act as CAP regardless of
+        # the GatewayConnectedMode setting
+        __repacd_config_gwcon_ap_mode 1
+    elif [ "$device_type" = 'RE' ]; then
+        # WAN group empty or non-existent
+        # Switch to range extender mode
+
+        # Clear the BSSIDs on fresh restart
+        config_load wireless
+        if [ "$traffic_separation_active" -gt 0 ]; then
+            config_foreach __repacd_delete_bssid_entry wifi-iface $network_backhaul config_changed
+        else
+            config_foreach __repacd_delete_bssid_entry wifi-iface $managed_network config_changed
+        fi
+        uci_set repacd WiFiLink BSSIDResolveState 'resolving'
+        uci_commit wireless
+        uci_commit repacd
+        __repacd_config_re_mode
+
+        if [ "$activate_ts" -eq 1 ]; then
+                config_load wireless
+                config_foreach __repacd_reconfig_sta_vaps wifi-iface $managed_network $network_backhaul \
+                    "$backhaul_ssid" "$backhaul_enc" "$backhaul_key"
+                uci_commit wireless
+        fi
+    else
+        # Must be a client device (that can opportunistically act as an RE).
+        __repacd_config_client_mode
+    fi
+
+
+    whc_wifi_config_unlock
+
+    __repacd_restart_dependencies
+   if [ "$traffic_separation_enabled" -gt 0 ]; then
+        __repacd_wifi_set_otherband_bssids $network_backhaul
+   else
+        __repacd_wifi_set_otherband_bssids $managed_network
+   fi
+
+    # create vlan interfaces required for traffic separation.
+    if [ "$activate_ts" -eq 1 ]; then
+            config_load network
+            config_load wireless
+            config_foreach __repacd_add_vlan_interfaces wifi-iface \
+                $managed_network $lan_vid 'both' net_config_changed
+            config_foreach __repacd_add_vlan_interfaces wifi-iface \
+                $network_guest $guest_vid $guest_backhaul_iface net_config_changed
+            uci_commit wireless
+
+            __repacd_add_ethernet_vlan_interfaces $network_guest net_config_changed
+            uci_commit network
+
+            __repacd_restart_firewall
+
+            uci_set repacd repacd TrafficSeparationActive '1'
+            uci_commit repacd
+
+            # stop/start hyd only if there is any change in netwrok config
+            # due to addition of VLAN interfaces. If required VLAN iface already
+            # present then we can avoid hyd stop/start. This will save some time
+            # and avoid any delays after repacd restart.
+            if [ "$net_config_changed" -gt 0 ] || [ "$config_changed" -gt 0 ]; then
+                config_changed=0
+                hyd_stop=1
+                hyd_start=1
+                wsplcd_stop=1
+                wsplcd_start=1
+                __repacd_restart_dependencies
+            fi
+    fi
+
+    if [ "$eth_mon_enabled" -eq 1 ]; then
+        # Make sure lldpd listens on wan and lan interfaces
+        for int in wan lan; do
+            if ! uci get lldpd.config.interface | grep $int > /dev/null; then
+                uci add_list lldpd.config.interface=$int
+            fi
+        done
+        __repacd_echo "Starting lldpd"
+        repacd_netdet_lldpd_init start
+    fi
+
+    if ! __repacd_gw_mode || [ "$eth_mon_enabled" -eq 1 ]; then
+        start-stop-daemon -K -n repacd-run.sh -s SIGTERM >/dev/null
+
+        # Start the script that monitors the link state.
+        #
+        # When in NonCAP mode, it will keep checking whether there is a link
+        # to the gateway over ethernet. When in CAP mode, it will keep
+        # checking the WAN/LAN ifaces.
+        __repacd_echo "Starting  RE Placement and Auto-config Daemon"
+        start-stop-daemon -S -x /usr/sbin/repacd-run.sh -b -- \
+            "son" init $config_re_mode $resolved_re_mode $resolved_re_submode
+    fi
+}
+
+# Perform the startup actions when operating with Multi-AP SIG Topology
+# Optimization.
+#
+# Pre-condition: repacd has already been determined to be enabled and in
+#                MAP mode
+#
+# input: $1 - ether_gwcon: whether the device has been determined to be
+#                          connected to the gateway via Ethernet
+# input: $2 - start_role: the startup role for the device
+# input: $3 - autoconf: boolean indicating whether this was a start
+#                       initiated due to an auto config change
+__start_map() {
+    local ether_gwcon=$1
+    local start_role=$2
+    local autoconf=$3
+
+    local enabled gwcon_mode first_config_required manage_mcsd
+    local traffic_separation_enabled ethernet_monitoring_enabled
+    local enable_steering standalone_controller
+
+    config_changed=0
+
+    config_load 'repacd'
+    config_get_bool enabled repacd 'Enable' '0'
+    config_get gwcon_mode repacd GatewayConnectedMode 'AP'
+    config_get_bool first_config_required MAPConfig 'FirstConfigRequired' '0'
+    config_get_bool manage_mcsd repacd 'ManageMCSD' 1
+    config_get_bool standalone_controller MAPConfig 'StandaloneController' '0'
+
+    # Certain features are not supported with Multi-AP (at least not yet)
+    config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+    config_get ethernet_monitoring_enabled repacd EnableEthernetMonitoring '0'
+    config_get enable_steering repacd EnableSteering '1'
+
+    if ! __repacd_is_son_mode; then
+        __repacd_echo "Multi-AP SIG algorithms must use 'son' RE mode"
+        return 1
+    fi
+
+    if [ "$traffic_separation_enabled" -gt 0 ]; then
+        __repacd_echo "Traffic separation not supported with Multi-AP SIG" \
+                      "Topology Optimization"
+        return 1
+    fi
+
+    if [ "$ethernet_monitoring_enabled" -gt 0 ]; then
+        __repacd_echo "Ethernet monitoring not supported with Multi-AP SIG" \
+                      "Topology Optimization"
+        return 1
+    fi
+
+    if [ "$enable_steering" -eq 0 ]; then
+        __repacd_echo "Steering must be enabled with Multi-AP SIG" \
+                      "Topology Optimization"
+        return 1
+    fi
+
+    __repacd_echo "Starting Multi-AP SIG auto-configuration"
+    __repacd_echo "Ethernet connection to GW=$ether_gwcon"
+    __repacd_echo "GW Connected Mode=$gwcon_mode"
+
+    # For now, we can only manage a single network.
+    config_get managed_network repacd ManagedNetwork 'lan'
+    __repacd_echo "Managed network: $managed_network"
+
+    local is_controller=0
+    if __repacd_gw_mode || [ "$gwcon_mode" = 'Controller' ]; then
+        # WAN group not empty; this device will act as controller regardless of
+        # the GatewayConnectedMode setting
+        is_controller=1
+    fi
+
+    # Grab a lock to prevent any updates from being made by the daemon.
+    whc_wifi_config_lock
+
+    # Since the controller could tear down all AP interfaces, we need to
+    # allow hyd to run with no interfaces.
+    uci_set lbd config_Adv 'AllowZeroAPInterfaces' 1
+
+    # Also disable IAS on both bands, as we do not yet have the messaging
+    # support for it.
+    uci_set lbd IAS 'Enable_W2' 0
+    uci_set lbd IAS 'Enable_W5' 0
+    uci_commit lbd
+
+    # Disable the DBDC repeater feature on all devices, as there will only
+    # ever be a single backhaul STA interface.
+    config_load wireless
+    config_foreach __repacd_config_dbdc_device wifi-device \
+        0 config_changed
+
+    # Skip auto config for standalone controller, which must be manually configured
+    if [ "$first_config_required" -gt 0 ] && [ "$standalone_controller" -eq 0 ]; then
+        __repacd_reset_map_default_config $is_controller
+        config_changed=1
+        uci_set repacd MAPConfig 'FirstConfigRequired' 0
+
+        __repacd_echo "Performed initial config on $managed_network VAPs"
+    fi
+
+    if __repacd_gw_mode || [ "$ether_gwcon" -gt 0 ]; then
+        if !  __repacd_config_gwcon_map_ap $is_controller $standalone_controller; then
+            return 1
+        fi
+    else
+        # WAN group empty or non-existent
+        # Switch to agent mode
+        __repacd_config_map_re
+    fi
+
+    local enable_son=1
+    __repacd_config_mcsd "$manage_mcsd" "$enable_son"
+
+    whc_wifi_config_unlock
+
+    __repacd_restart_dependencies
+
+    if ! __repacd_gw_mode; then
+        start-stop-daemon -K -n repacd-run.sh -s SIGTERM >/dev/null
+
+        # Transform the boolean value into what the daemon expects
+        if [ "$autoconf" -gt 0 ]; then
+            autoconf='autoconf'
+        else
+            autoconf=''
+        fi
+
+        # Start the script that monitors the link state.
+        #
+        # In this NonCAP mode, it will keep checking whether there is a link
+        # to the gateway over ethernet.
+        __repacd_echo "Starting  RE Placement and Auto-config Daemon"
+        start-stop-daemon -S -x /usr/sbin/repacd-run.sh -b -- \
+            "map" "$start_role" $config_re_mode $resolved_re_mode \
+            $resolved_re_submode $autoconf
+    fi
+}
+
+# Reset the count of the number of times the 5 GHz bSTA was attempted.
+# This should only be invoked on boot and when switching between roles
+# (eg. to CAP).
+__repacd_map_reset_5g_attempts() {
+    uci_set repacd 'MAPWiFiLink' '5gAttemptsCount' 0
+    uci_commit repacd
+}
+
+# Script entry point: Perform configuration and start the daemon
+start() {
+    local enabled
+
+    config_load 'repacd'
+    config_get_bool enabled repacd 'Enable' '0'
+
+    [ "$enabled" -gt 0 ] || {
+        return 1
+    }
+
+    if __repacd_is_map_enabled; then
+        __repacd_map_reset_5g_attempts
+
+        local ether_gwcon=0 start_role='init' autoconf=0
+        __start_map $ether_gwcon $start_role $autoconf
+        return $?
+    else
+        __start_son
+        return $?
+    fi
+}
+
+# Script entry point: Stop the daemon
+stop() {
+    start-stop-daemon -K -n repacd-run.sh -s SIGTERM >/dev/null
+
+    if [ -f $WSPLCD_INIT ]; then
+        $WSPLCD_INIT stop
+    fi
+}
+
+# Script entry point: Reconfigure and restart the daemon
+restart() {
+    stop
+
+    config_load 'repacd'
+    config_get_bool enabled repacd 'Enable' '0'
+
+    [ "$enabled" -gt 0 ] || {
+            return 1
+    }
+
+    start
+}
+
+# Force a restart into CAP mode using the SON algorithms.
+#
+# @see restart_in_cap_mode
+__restart_in_cap_mode_son() {
+    local gwcon_mode device_type activate_ts
+    config_load repacd
+    config_get managed_network repacd ManagedNetwork 'lan'
+    config_get gwcon_mode repacd GatewayConnectedMode 'AP'
+    config_get device_type repacd DeviceType 'RE'
+    config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+    config_get traffic_separation_active repacd TrafficSeparationActive '0'
+    config_get daisy_chain WiFiLink DaisyChain '0'
+    config_get backhaul_ssid repacd BackhaulSSID $def_backhaul_ssid
+    config_get backhaul_enc repacd BackhaulEnc $def_backhaul_enc
+    config_get backhaul_key repacd BackhaulKey $def_backhaul_key
+    config_get network_guest repacd NetworkGuest 'guest'
+    config_get guest_ssid repacd GuestSSID $def_guest_ssid
+    config_get guest_enc repacd GuestEnc $def_guest_enc
+    config_get guest_key repacd GuestKey $def_guest_key
+    config_get guest_backhaul_iface repacd NetworkGuestBackhaulInterface 'both'
+    config_get manage_vap_ind WiFiLink 'ManageVAPInd' '0'
+    __repacd_get_config_re_mode config_re_mode
+    activate_ts=0
+    net_config_changed=0
+
+    stop
+
+    if [ "$gwcon_mode" = "CAP" ]; then
+        # Explicitly being forced into CAP mode while gateway connected.
+        # This could be a case where a device is being used as a pure bridge
+        # due to another device acting as the gateway.
+        __repacd_config_wps_pbc_enhc 1 config_changed
+        __repacd_config_gwcon_ap_mode 1
+    else
+        # Operate just as a standalone AP. This assumes there is another
+        # device in the network that operates as CAP.
+        __repacd_config_wps_pbc_enhc 0 config_changed
+        __repacd_config_gwcon_ap_mode 0
+    fi
+
+    __repacd_reset_existing_config
+
+    if [ "$device_type" = 'RE' ] && [ "$gwcon_mode" != "CAP" ]; then
+        if [ "$traffic_separation_enabled" -gt 0 ] && \
+           __repacd_is_son_mode; then
+            if __repacd_check_additional_network_exist; then
+                # reset additional vaps if traffic separation enabled
+                local disable_24g_ap=0 disable_5g_ap=0
+                local disable_24g_sta=1 disable_5g_sta=1
+
+                config_load network
+                config_load wireless
+                config_foreach __repacd_disable_vap wifi-iface \
+                    $network_backhaul 'ap' $disable_24g_ap $disable_5g_ap config_changed
+                config_foreach __repacd_disable_vap wifi-iface \
+                    $network_guest 'ap' $disable_24g_ap $disable_5g_ap config_changed
+
+                if [ "$traffic_separation_active" -eq 1 ]; then
+                    config_foreach __repacd_delete_vlan_interfaces wifi-iface \
+                        $managed_network $lan_vid 'ap' net_config_changed
+                    config_foreach __repacd_delete_vlan_interfaces wifi-iface \
+                        $network_guest $guest_vid 'ap' net_config_changed
+                    config_foreach __repacd_delete_vlan_interfaces wifi-iface \
+                        $managed_network $lan_vid 'sta' net_config_changed
+                    config_foreach __repacd_delete_vlan_interfaces wifi-iface \
+                        $network_guest $guest_vid 'sta' net_config_changed
+                    config_foreach __repacd_disable_vap wifi-iface \
+                        $network_backhaul 'sta' $disable_24g_sta $disable_5g_sta config_changed
+                fi
+                uci_commit wireless
+                uci_commit network
+
+                __repacd_reset_additional_config
+                activate_ts=1
+            fi
+        fi
+    fi
+
+    if [ "$wsplcd_enabled" -gt 0 ]; then
+        wsplcd_restart=1
+    fi
+
+    __repacd_restart_dependencies
+   if [ "$traffic_separation_enabled" -gt 0 ]; then
+        __repacd_wifi_set_otherband_bssids $network_backhaul
+   else
+        __repacd_wifi_set_otherband_bssids $managed_network
+   fi
+
+   if [ "$activate_ts" -eq 1 ]; then
+        config_load network
+        config_load wireless
+        config_foreach __repacd_add_vlan_interfaces wifi-iface \
+            $managed_network $lan_vid 'both' net_config_changed
+        config_foreach __repacd_add_vlan_interfaces wifi-iface \
+            $network_guest $guest_vid $guest_backhaul_iface net_config_changed
+        uci_commit wireless
+
+        __repacd_add_ethernet_vlan_interfaces $network_guest net_config_changed
+        uci_commit network
+
+        __repacd_restart_firewall
+
+        uci_set repacd repacd TrafficSeparationActive '1'
+        uci_commit repacd
+
+        if [ "$net_config_changed" -gt 0 ] || [ "$config_changed" -gt 0 ]; then
+            config_changed=0
+            hyd_stop=1
+            hyd_start=1
+            wsplcd_stop=1
+            wsplcd_start=1
+            __repacd_restart_dependencies
+        fi
+    fi
+
+    if ! __repacd_gw_mode; then
+        # Start the daemon that monitors link status in CAP mode, telling
+        # the daemon that it is an auto config-triggered restart.
+        #
+        # In this mode, it will just keep checking that the link to the
+        # gateway is still present on ethernet.
+        start-stop-daemon -S -x /usr/sbin/repacd-run.sh -b -- \
+            "son" CAP $config_re_mode $resolved_re_mode $resolved_re_submode \
+            autoconf
+    fi
+}
+
+# Force a restart into CAP mode using the Multi-AP SIG Topoology Optimization
+# algorithm.
+#
+# @see restart_in_cap_mode
+__restart_in_cap_mode_map() {
+    stop
+
+    # Reset the counter here in case we switch back into NonCAP (aka. RE)
+    # mode. It is easier to do it here than on the NonCAP restart since
+    # the latter is also used to force a bSTA change.
+    __repacd_map_reset_5g_attempts
+
+    local ether_gwcon=1 start_role='CAP' autoconf=1
+    __start_map $ether_gwcon $start_role $autoconf
+}
+
+# Force a restart into CAP mode.
+#
+# This is used when the gateway detection logic detects a gateway on
+# ethernet when running in a pure bridge mode.
+restart_in_cap_mode() {
+    if __repacd_is_map_enabled; then
+        __restart_in_cap_mode_map
+        return $?
+    else
+        __restart_in_cap_mode_son
+        return $?
+    fi
+}
+
+# Force a restart into NonCAP mode using the SON algorithms.
+#
+# @see restart_in_noncap_mode
+__restart_in_noncap_mode_son() {
+    local device_type activate_ts
+    config_load repacd
+    config_get managed_network repacd ManagedNetwork 'lan'
+    config_get device_type repacd DeviceType 'RE'
+    config_get gwcon_mode repacd GatewayConnectedMode 'AP'
+    config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+    config_get traffic_separation_active repacd TrafficSeparationActive '0'
+    config_get daisy_chain WiFiLink DaisyChain '0'
+    config_get backhaul_ssid repacd BackhaulSSID $def_backhaul_ssid
+    config_get backhaul_enc repacd BackhaulEnc $def_backhaul_enc
+    config_get backhaul_key repacd BackhaulKey $def_backhaul_key
+    config_get network_guest repacd NetworkGuest 'guest'
+    config_get guest_ssid repacd GuestSSID $def_guest_ssid
+    config_get guest_enc repacd GuestEnc $def_guest_enc
+    config_get guest_key repacd GuestKey $def_guest_key
+    config_get guest_backhaul_iface repacd NetworkGuestBackhaulInterface 'both'
+    config_get manage_vap_ind WiFiLink 'ManageVAPInd' '0'
+    __repacd_get_config_re_mode config_re_mode
+    activate_ts=0
+
+    stop
+
+    net_config_changed=0
+
+    # Apply the SSID and passphrase to all interfaces to ensure that if we are
+    # switching into a SON mode where there are two STA interfaces, they all
+    # have the right credentials. For the non-SON and WDS modes, this is
+    # subject to the RE WPS enhancement rules.
+    __repacd_config_wps_pbc_enhc 0 config_changed
+
+    __repacd_reset_existing_config
+
+    # Need to resolve the generic NonCAP role to the actual configuration.
+    if [ "$device_type" = 'RE' ]; then
+        __repacd_config_re_mode
+
+        if [ "$gwcon_mode" != "CAP" ]; then
+            if [ "$traffic_separation_enabled" -gt 0 ] && \
+               __repacd_is_son_mode; then
+               if __repacd_check_additional_network_exist; then
+                    # reset additional vaps if traffic separation enabled
+                    local disable_24g_ap=0 disable_5g_ap=0
+
+                    config_load wireless
+                    # Enable spcl AP VAPs on NON-CAP only if daisy chain is enabled.
+                    # They are for multi hop support. We don't need them if daisy
+                    # chain is disabled.
+                    if [ "$daisy_chain" -gt 0 ]; then
+                        config_foreach __repacd_disable_vap wifi-iface \
+                            $network_backhaul 'ap' $disable_24g_ap $disable_5g_ap config_changed
+                    fi
+                    config_foreach __repacd_disable_vap wifi-iface \
+                        $network_guest 'ap' $disable_24g_ap $disable_5g_ap config_changed
+                    uci_commit wireless
+
+                    __repacd_reset_additional_config
+
+                    config_load wireless
+                    config_foreach __repacd_reconfig_sta_vaps wifi-iface $managed_network $network_backhaul \
+                        "$backhaul_ssid" "$backhaul_enc" "$backhaul_key"
+                    uci_commit wireless
+                    activate_ts=1
+               fi
+            fi
+        fi
+    else
+        __repacd_config_client_mode
+    fi
+
+    if [ "$wsplcd_enabled" -gt 0 ]; then
+        wsplcd_restart=1
+    fi
+
+    __repacd_restart_dependencies
+   if [ "$traffic_separation_enabled" -gt 0 ]; then
+        __repacd_wifi_set_otherband_bssids $network_backhaul
+   else
+        __repacd_wifi_set_otherband_bssids $managed_network
+   fi
+
+    # create vlan interfaces required for traffic separation.
+    if [ "$activate_ts" -eq 1 ]; then
+        config_load network
+        config_load wireless
+        config_foreach __repacd_add_vlan_interfaces wifi-iface \
+            $managed_network $lan_vid 'both' net_config_changed
+        config_foreach __repacd_add_vlan_interfaces wifi-iface \
+            $network_guest $guest_vid $guest_backhaul_iface net_config_changed
+        uci_commit wireless
+
+        __repacd_add_ethernet_vlan_interfaces $network_guest net_config_changed
+        uci_commit network
+
+        __repacd_restart_firewall
+
+        uci_set repacd repacd TrafficSeparationActive '1'
+        uci_commit repacd
+
+        # stop/start hyd only if there is any change in netwrok config
+        # due to addition of VLAN interfaces. If required VLAN iface already
+        # present then we can avoid hyd stop/start. This will save some time
+        # and avoid any unnecessary delays after repacd restart.
+        if [ "$net_config_changed" -gt 0 ] || [ "$config_changed" -gt 0 ]; then
+            config_changed=0
+            hyd_stop=1
+            hyd_start=1
+            wsplcd_stop=1
+            wsplcd_start=1
+            __repacd_restart_dependencies
+        fi
+    fi
+
+    if ! __repacd_gw_mode; then
+        # Start the script that monitors the link state, telling the daemon that
+        # it is an auto config-triggered restart.
+        #
+        # In this NonCAP mode, it will keep checking whether there is a link
+        # to the gateway over ethernet.
+        start-stop-daemon -S -x /usr/sbin/repacd-run.sh -b -- \
+            "son" NonCAP $config_re_mode $resolved_re_mode \
+            $resolved_re_submode autoconf
+    fi
+}
+
+# Force a restart in NonCAP mode using the Multi-AP SIG Topology Optimization
+# algorithm.
+#
+# @see restart_in_noncap_mode
+__restart_in_noncap_mode_map() {
+    stop
+
+    local ether_gwcon=0 start_role='NonCAP' autoconf=1
+    __start_map $ether_gwcon $start_role $autoconf
+}
+
+# Force a restart into NonCAP mode.
+#
+# This is used when the gateway detection logic detects that there is no
+# longer a gateway connected over ethernet.
+restart_in_noncap_mode() {
+    if __repacd_is_map_enabled; then
+        __restart_in_noncap_mode_map
+        return $?
+    else
+        __restart_in_noncap_mode_son
+        return $?
+    fi
+}
+
+# Force a restart into Range Extender (RE) mode with the SON algorithms.
+#
+# @see restart_in_re_mode
+__restart_in_re_mode_son() {
+    config_load repacd
+    config_get managed_network repacd ManagedNetwork 'lan'
+
+    stop
+
+    # By resetting the configuration, this will apply the same SSID and
+    # passphrase to all interfaces. Then enable the interfaces as appropriate
+    # for RE mode.
+    __repacd_config_wps_pbc_enhc 0 config_changed
+    __repacd_reset_existing_config
+    __repacd_config_re_mode
+
+    if [ "$wsplcd_enabled" -gt 0 ]; then
+        wsplcd_restart=1
+    fi
+
+    __repacd_restart_dependencies
+    __repacd_wifi_set_otherband_bssids $managed_network
+
+    if ! __repacd_gw_mode; then
+        # Start the script that monitors the link state, telling the daemon
+        # that it is an auto config-triggered restart.
+        #
+        # In this Range Extender mode, it will keep checking whether there is
+        # a link to the gateway over ethernet and that the Wi-Fi link is
+        # sufficient to continue operating as an RE.
+        start-stop-daemon -S -x /usr/sbin/repacd-run.sh -b -- \
+            "son" RE $config_re_mode $resolved_re_mode $resolved_re_submode \
+            autoconf
+    fi
+}
+
+# Force a restart into Range Extender (RE) mode with the Multi-AP SIG Topology
+# Optimization algorithm.
+#
+# @see restart_in_re_mode
+__restart_in_re_mode_map() {
+    stop
+
+    local ether_gwcon=0 start_role='RE' autoconf=1
+    __start_map $ether_gwcon $start_role $autoconf
+}
+
+# Force a restart into Range Extender (RE) mode.
+#
+# This is used when the Wi-Fi link monitoring logic determines that the
+# link is in the sweet spot for a device that normally acts as a client
+# but is capable (from a CPU and Wi-Fi perspective) of operating as an AP
+# and a STA at the same time.
+restart_in_re_mode() {
+    if __repacd_is_map_enabled; then
+        __restart_in_re_mode_map
+        return $?
+    else
+        __restart_in_re_mode_son
+        return $?
+    fi
+}
diff --git a/etc/init.d/rpcd b/etc/init.d/rpcd
new file mode 100755
index 0000000..8c773b8
--- /dev/null
+++ b/etc/init.d/rpcd
@@ -0,0 +1,23 @@
+#!/bin/sh /etc/rc.common
+
+START=12
+
+USE_PROCD=1
+NAME=rpcd
+PROG=/sbin/rpcd
+
+start_service() {
+	procd_open_instance
+	procd_set_param command "$PROG"
+	procd_set_param respawn
+	#procd_set_param limits core="unlimited"
+	procd_close_instance
+}
+
+stop() {
+	service_stop /sbin/rpcd
+}
+
+reload() {
+	service_reload /sbin/rpcd
+}
diff --git a/etc/init.d/simpleconnect b/etc/init.d/simpleconnect
new file mode 100755
index 0000000..67ec7ca
--- /dev/null
+++ b/etc/init.d/simpleconnect
@@ -0,0 +1,23 @@
+#!/bin/sh /etc/rc.common
+
+# should run after S96plc
+START=97
+STOP=10
+PIDFILE=/var/run/simpleconnect.pid
+
+config_load plc
+config_get PLC plc interface 'br-lan'
+
+start() {
+    start-stop-daemon -S -x sh -m -b -p $PIDFILE -- -c \
+"trap \"trap - TERM; kill 0; exit\" TERM
+while true; do
+    plcgpio -i $PLC | awk -f /usr/share/plc/simpleconnect.awk &
+    wait \$!
+    sleep 5
+done"
+}
+
+stop() {
+    start-stop-daemon -K -p $PIDFILE
+}
diff --git a/etc/init.d/snmpd b/etc/init.d/snmpd
new file mode 100755
index 0000000..8499438
--- /dev/null
+++ b/etc/init.d/snmpd
@@ -0,0 +1,242 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+# Copyright (C) 2016 devolo AG
+START=50
+
+USE_PROCD=1
+PROG="/usr/sbin/snmpd"
+LOG="/usr/bin/logger"
+
+CONFIGFILE="/var/run/snmpd.conf"
+USERFILE="/usr/lib/snmp/snmpd.conf"
+disabled="0"
+
+snmpd_agent_add() {
+        local cfg="$1"
+        config_get agentaddress "$cfg" agentaddress
+        [ -n "$agentaddress" ] || return 0
+        echo "agentaddress $agentaddress" >> $CONFIGFILE
+        # add each UDP agent as UDP6 agent too
+        [ "${agentaddress:0:4}" = "UDP:" ] || return 0
+        echo "agentaddress UDP6:${agentaddress:4}" >>$CONFIGFILE
+}
+
+get_snmpd_agent_disabled() {
+        local cfg="$1"
+        config_get disabled "$cfg" disabled
+        [ -n "$disabled" ] || disabled="0" && return 0
+        disabled="$disabled"
+}
+
+snmpd_system_add() {
+        local cfg="$1"
+        config_get syslocation "$cfg" sysLocation
+        [ -n "$syslocation" ] && echo "sysLocation $syslocation" >> $CONFIGFILE
+        config_get syscontact "$cfg" sysContact
+        [ -n "$syscontact" ] && echo "sysContact $syscontact" >> $CONFIGFILE
+        config_get sysname "$cfg" sysName
+        [ -n "$sysname" ] && echo "sysName $sysname" >> $CONFIGFILE
+        config_get sysservice "$cfg" sysService
+        [ -n "$sysservice" ] && echo "sysService $sysservice" >> $CONFIGFILE
+        config_get sysdescr "$cfg" sysDescr
+        [ -n "$sysdescr" ] && echo "sysDescr $sysdescr" >> $CONFIGFILE
+        config_get sysobjectid "$cfg" sysObjectID
+        [ -n "$sysobjectid" ] && echo "sysObjectID $sysobjectid" >> $CONFIGFILE
+}
+
+snmpd_com2sec_add() {
+        local cfg="$1"
+        config_get secname "$cfg" secname
+        [ -n "$secname" ] || return 0
+        config_get source "$cfg" source
+        [ -n "$source" ] || return 0
+        config_get community "$cfg" community
+        [ -n "$community" ] || return 0
+        echo "com2sec $secname $source $community" >> $CONFIGFILE
+}
+
+snmpd_com2sec6_add() {
+        local cfg="$1"
+        config_get secname "$cfg" secname
+        [ -n "$secname" ] || return 0
+        config_get source "$cfg" source
+        [ -n "$source" ] || return 0
+        config_get community "$cfg" community
+        [ -n "$community" ] || return 0
+        echo "com2sec6 $secname $source $community" >> $CONFIGFILE
+}
+
+snmpd_group_add() {
+        local cfg="$1"
+        config_get group "$cfg" group
+        [ -n "$group" ] || return 0
+        config_get version "$cfg" version
+        [ -n "$version" ] || return 0
+        config_get secname "$cfg" secname
+        [ -n "$secname" ] || return 0
+        echo "group $group $version $secname" >> $CONFIGFILE
+}
+
+snmpd_view_add() {
+        local cfg="$1"
+        config_get viewname "$cfg" viewname
+        [ -n "$viewname" ] || return 0
+        config_get type "$cfg" type
+        [ -n "$type" ] || return 0
+        config_get oid "$cfg" oid
+        [ -n "$oid" ] || return 0
+        # optional mask
+        config_get mask "$cfg" mask
+        echo "view $viewname $type $oid $mask" >> $CONFIGFILE
+}
+
+snmpd_access_add() {
+        local cfg="$1"
+        config_get group "$cfg" group
+        [ -n "$group" ] || return 0
+        config_get context "$cfg" context
+        [ -n $context ] || return 0
+        [ "$context" == "none" ] && context='""'
+        config_get version "$cfg" version
+        [ -n "$version" ] || return 0
+        config_get level "$cfg" level
+        [ -n "$level" ] || return 0
+        config_get prefix "$cfg" prefix
+        [ -n "$prefix" ] || return 0
+        config_get read "$cfg" read
+        [ -n "$read" ] || return 0
+        config_get write "$cfg" write
+        [ -n "$write" ] || return 0
+        config_get notify "$cfg" notify
+        [ -n "$notify" ] || return 0
+        echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE
+        #save access level for upcoming user_add
+        access_level="$level"
+}
+
+snmpd_user_add() {
+        [ -n "$access_level" ] || return 0
+        local cfg="$1"
+        config_get name "$cfg" name
+        [ -n "$name" ] || return 0
+        config_get access "$cfg" access
+        [ -n "$access" ] || return 0
+        config_get authpass "$cfg" authpass
+        config_get authtype "$cfg" authtype
+        config_get secpass "$cfg" secpass
+        config_get sectype "$cfg" sectype
+        if [ -z "$authpass" ] ; then
+                authtype=""
+                sectype=""
+        elif [ -z "$secpass" ] ; then
+                sectype=""
+        fi
+        [ -n "$authpass" ] && [ -z "$authtype" ] && return 0
+        [ -n "$secpass" ] && [ -z "$sectype" ] && return 0
+        args=
+        [ -n "$authpass" ] && args="$args $authtype \"$authpass\""
+        [ -n "$secpass" ] && args="$args $sectype \"$secpass\""
+        local ro="-ro"
+        rm -rf /usr/share/snmp/snmpd.conf
+        if [ "$access" != "ro" ]; then
+            $LOG "snmpd: access rw not available, ro only"
+            #ro=""
+            #echo "rwuser $name $access_level" >> $CONFIGFILE
+        else
+            echo "rouser $name $access_level" >> $CONFIGFILE
+        fi
+        #do not add, replace
+        echo "createUser $name $args" > $USERFILE
+}
+
+snmpd_pass_add() {
+        local cfg="$1"
+        local pass='pass'
+
+        config_get miboid "$cfg" miboid
+        [ -n "$miboid" ] || return 0
+        config_get prog "$cfg" prog
+        [ -n "$prog" ] || return 0
+        config_get_bool persist "$cfg" persist 0
+        [ $persist -ne 0 ] && pass='pass_persist'
+        config_get priority "$cfg" priority
+        priority=${priority:+-p $priority}
+        echo "$pass $priority $miboid $prog" >> $CONFIGFILE
+}
+
+snmpd_exec_add() {
+        local cfg="$1"
+
+        config_get name "$cfg" name
+        [ -n "$name" ] || return 0
+        config_get prog "$cfg" prog
+        [ -n "$prog" ] || return 0
+        config_get args "$cfg" args
+        config_get miboid "$cfg" miboid
+        echo "exec $miboid $name $prog $args" >> $CONFIGFILE
+}
+
+snmpd_disk_add() {
+        local cfg="$1"
+        local disk='disk'
+
+        config_get partition "$cfg" partition
+        [ -n "$partition" ] || return 0
+        config_get size "$cfg" size
+        [ -n "$size" ] || return 0
+        echo "$disk $partition $size" >> $CONFIGFILE
+}
+
+service_triggers()
+{
+        procd_add_reload_trigger snmpd
+}
+
+
+start_service() {
+        [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
+        [ -f "$USERFILE" ] && rm -f "$USERFILE"
+
+        config_load snmpd
+        #assume only one
+        config_foreach get_snmpd_agent_disabled agent
+        if [ "$disabled" = "0" ]; then
+            config_foreach snmpd_agent_add agent
+            config_foreach snmpd_system_add system
+            config_foreach snmpd_com2sec_add com2sec
+            # add each com2sec section as com2sec6 too but ignore explicit com2sec6 sections!
+            config_foreach snmpd_com2sec6_add com2sec
+            config_foreach snmpd_group_add group
+            config_foreach snmpd_view_add view
+            config_foreach snmpd_access_add access
+            # user add must be executed after access_add!
+            config_foreach snmpd_user_add userv3
+            config_foreach snmpd_pass_add pass
+            config_foreach snmpd_exec_add exec
+            config_foreach snmpd_disk_add disk
+
+            procd_open_instance
+
+            procd_set_param command $PROG -Lf /dev/null -f
+            procd_set_param file $CONFIGFILE
+            procd_set_param respawn
+
+            for iface in $(ls /sys/class/net 2>/dev/null); do
+                    procd_append_param netdev "$iface"
+            done
+
+            procd_close_instance
+        else
+            $LOG "SNMP agent disabled"
+        fi
+}
+
+stop_service() {
+        [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
+        [ -f "$USERFILE" ] && rm -f "$USERFILE"
+}
+
+reload_service() {
+       stop
+       start
+}
diff --git a/etc/init.d/ssid_steering b/etc/init.d/ssid_steering
new file mode 100755
index 0000000..5a1d2c7
--- /dev/null
+++ b/etc/init.d/ssid_steering
@@ -0,0 +1,39 @@
+#!/bin/sh /etc/rc.common
+
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+#
+# Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+START=
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+SERVICE_PATH="/usr/sbin/ssidsteering"
+
+start () {
+	config_load ssid-steering
+
+	local enable
+	config_get_bool enable global enable 0
+	[ "${enable}" -gt 0 ] || return
+
+	config_get private_vaps global private_vaps
+	config_get public_vaps global public_vaps
+
+	cat > /etc/config/ssid-steering.conf <<EOF
+	private=$private_vaps
+	public=$public_vaps
+EOF
+
+	service_start ${SERVICE_PATH} -C /etc/config/ssid-steering.conf
+}
+
+stop() {
+	service_stop /usr/sbin/ssidsteering
+
+	# Workaround, sometimes service_stop does not kill ssidsteering
+        start-stop-daemon -K -x ${SERVICE_PATH} -s SIGTERM > /dev/null
+}
diff --git a/etc/init.d/station_quota b/etc/init.d/station_quota
new file mode 100755
index 0000000..d285dcd
--- /dev/null
+++ b/etc/init.d/station_quota
@@ -0,0 +1,21 @@
+#!/bin/sh /etc/rc.common
+
+START=18
+USE_PROCD=1
+
+start_service(){
+        /usr/bin/station_quota.sh --event start
+}
+
+stop_service(){
+        /usr/bin/station_quota.sh --event stop
+}
+
+reload_service(){
+        /usr/bin/station_quota.sh --event reload
+}
+
+service_triggers(){
+        procd_add_reload_trigger station_quota
+}
+
diff --git a/etc/init.d/sysctl b/etc/init.d/sysctl
new file mode 100755
index 0000000..66cf579
--- /dev/null
+++ b/etc/init.d/sysctl
@@ -0,0 +1,11 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+
+START=11
+start() {
+	[ -f /etc/sysctl.conf ] && sysctl -p -e >&-
+	[ -d /etc/sysctl.d ] && \
+		for i in /etc/sysctl.d/*.conf; do
+			sysctl -e -p $i >&-
+		done
+}
diff --git a/etc/init.d/sysfixtime b/etc/init.d/sysfixtime
new file mode 100755
index 0000000..4010e06
--- /dev/null
+++ b/etc/init.d/sysfixtime
@@ -0,0 +1,11 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2013-2014 OpenWrt.org
+
+START=00
+
+boot() {
+	local curtime="$(date +%s)"
+	local maxtime="$(find /etc -type f -exec date -r {} +%s \; | sort -nr | head -n1)"
+	[ $curtime -lt $maxtime ] && date -s @$maxtime
+}
+
diff --git a/etc/init.d/system b/etc/init.d/system
new file mode 100755
index 0000000..ed1dbd3
--- /dev/null
+++ b/etc/init.d/system
@@ -0,0 +1,75 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2014 OpenWrt.org
+
+START=10
+USE_PROCD=1
+
+logger() {
+	command logger -t system -p $1 "$2"
+}
+
+validate_system_section()
+{
+	uci_validate_section system system "${1}" \
+		'hostname:string:OpenWrt' \
+		'conloglevel:uinteger' \
+		'buffersize:uinteger' \
+		'timezone:string:UTC' \
+		'zonename:string'
+}
+
+system_config() {
+	local cfg="$1"
+
+	local hostname conloglevel buffersize timezone zonename
+
+	validate_system_section "${1}" || {
+		echo "validation failed"
+		return 1
+	}
+
+	if [ "$hostname" != "$(cat /proc/sys/kernel/hostname)" ]; then
+		logger info "set new hostname $hostname"
+		echo "$hostname" > /proc/sys/kernel/hostname
+		pidof uhttpd > /dev/null && /etc/init.d/uhttpd restart
+		pidof miniupnpd > /dev/null && /etc/init.d/miniupnpd reload
+		# procd restart udhcpc
+		udhcpc_pid=$(pidof udhcpc)
+		[ -n "$udhcpc_pid" ] && kill $udhcpc_pid
+	fi
+	[ -z "$conloglevel" -a -z "$buffersize" ] || dmesg ${conloglevel:+-n $conloglevel} ${buffersize:+-s $buffersize}
+	echo "$timezone" > /tmp/TZ
+	[ -n "$zonename" ] && [ -f "/usr/share/zoneinfo/$zonename" ] && ln -s "/usr/share/zoneinfo/$zonename" /tmp/localtime
+
+	# apply timezone to kernel
+	date -k
+}
+
+led_config() {
+	config_get disabled "$1" disabled 0
+	config_get sysfs "$1" sysfs
+	[ -e /sys/class/leds/"$sysfs"/suspended ] && [ "$(cat /sys/class/leds/"$sysfs"/suspended)" != "$disabled" ] && {
+		echo "$disabled" >/sys/class/leds/"$sysfs"/suspended
+	}
+	config_get trigger "$1" trigger
+	[ "$trigger" = "wifi" ] && {
+		config_get disableLeds "$1" disableLeds 0
+		echo -n "$disableLeds" >/sys/class/leds/"$sysfs"/disableLeds
+	}
+}
+
+reload_service() {
+	config_load system
+	config_foreach system_config system
+	config_foreach led_config led
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "system"
+	procd_add_validation validate_system_section
+}
+
+start_service() {
+	reload_service
+}
diff --git a/etc/init.d/timerd b/etc/init.d/timerd
new file mode 100755
index 0000000..00a4c50
--- /dev/null
+++ b/etc/init.d/timerd
@@ -0,0 +1,26 @@
+#!/bin/sh /etc/rc.common
+
+START=19
+STOP=10
+
+USE_PROCD=1
+PROCESS=timerd
+
+logger() {
+	command logger -t timerd "$@"
+}
+
+stop_service() {
+	logger "stop"
+}
+
+start_service() {
+	logger "start"
+
+	procd_open_instance
+	procd_set_param command timerd
+	procd_set_param respawn 3600 5 0
+	procd_set_param stdout 1
+	procd_set_param stderr 1
+	procd_close_instance
+}
diff --git a/etc/init.d/tr069_stund b/etc/init.d/tr069_stund
new file mode 100755
index 0000000..00155d3
--- /dev/null
+++ b/etc/init.d/tr069_stund
@@ -0,0 +1,39 @@
+#!/bin/sh /etc/rc.common
+#STUN client software
+#Copyright (C) 2016 PIVA SOFTWARE <www.pivasoftware.com> - All Rights Reserved
+#Author: MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
+#Author: ANIS Ellouze <anis.ellouze@pivasoftware.com>
+#This software is under the terms of the commercial license attached with this source code
+
+START=90
+
+USE_PROCD=1
+PROG="/usr/sbin/tr069_stund"
+
+. /lib/delos-functions.sh
+
+start_service() {
+	[ "$(uci_get_state delos baptization Tr069)" != "1" ] && ! dvl_is_internal_firmware && exit 1
+
+	local server=`uci -q get tr069_stun.stun.server_address`
+	[ "$server" = "" ] && exit 0
+	procd_open_instance
+	procd_set_param command "$PROG"
+	procd_set_param respawn "3" "7" "0"
+	procd_close_instance
+}
+
+boot() {
+	start
+}
+
+reload_service() {
+	logger -p crit -t "tr069_stun" "reloading service()"
+	stop
+	start 
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger tr069_stun
+}
diff --git a/etc/init.d/tr069_upnpd b/etc/init.d/tr069_upnpd
new file mode 100755
index 0000000..6302c6b
--- /dev/null
+++ b/etc/init.d/tr069_upnpd
@@ -0,0 +1,44 @@
+#!/bin/sh /etc/rc.common
+#UPNP client software
+#Copyright (C) 2016 PIVA SOFTWARE <www.pivasoftware.com> - All Rights Reserved
+#Author: MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
+#Author: ANIS Ellouze <anis.ellouze@pivasoftware.com>
+#This software is under the terms of the commercial license attached with this source code
+
+START=90
+
+USE_PROCD=1
+PROG="/usr/sbin/tr069_upnpd"
+
+. /lib/delos-functions.sh
+
+start_service() {
+	[ "$(uci_get_state delos baptization Tr069)" != "1" ] && ! dvl_is_internal_firmware && exit 1
+
+	local enable=`uci -q get tr069_upnp.upnp.enable`
+	if [ "$enable" == "1" ]; then
+		procd_open_instance
+		procd_set_param command "$PROG"
+		procd_set_param respawn "3" "7" "0"
+		procd_close_instance	
+	fi
+}
+
+boot() {
+	start
+}
+
+reload_service() {
+	logger -p crit -t "tr069_upnp" "reloading service()"
+	#TODO ubus command to reload tr069_upnp
+	stop
+	start 
+}
+
+service_triggers() {
+	local interface=`uci -q get easycwmp.@local[0].interface` 
+	procd_add_reload_trigger tr069_upnp easycwmp
+	if [ "$interface" != "" ]; then
+		procd_add_reload_interface_trigger $interface
+	fi
+}
diff --git a/etc/init.d/uhttpd b/etc/init.d/uhttpd
new file mode 100755
index 0000000..0d35531
--- /dev/null
+++ b/etc/init.d/uhttpd
@@ -0,0 +1,157 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010 Jo-Philipp Wich
+
+START=50
+
+USE_PROCD=1
+
+UHTTPD_BIN="/usr/sbin/uhttpd"
+OPENSSL_BIN="/usr/bin/openssl"
+
+append_arg() {
+	local cfg="$1"
+	local var="$2"
+	local opt="$3"
+	local def="$4"
+	local val
+
+	config_get val "$cfg" "$var"
+	[ -n "$val" -o -n "$def" ] && procd_append_param command "$opt" "${val:-$def}"
+}
+
+append_bool() {
+	local cfg="$1"
+	local var="$2"
+	local opt="$3"
+	local def="$4"
+	local val
+
+	config_get_bool val "$cfg" "$var" "$def"
+	[ "$val" = 1 ] && procd_append_param command "$opt"
+}
+
+generate_keys() {
+	local cfg="$1"
+	local key="$2"
+	local crt="$3"
+	local days bits country state location commonname
+
+	config_get days       "$cfg" days
+	config_get bits       "$cfg" bits
+	config_get country    "$cfg" country
+	config_get state      "$cfg" state
+	config_get location   "$cfg" location
+	config_get commonname "$cfg" commonname
+
+	[ -x "$OPENSSL_BIN" ] && {
+		$OPENSSL_BIN req -x509 -nodes -sha256 \
+			-days ${days:-730} -newkey rsa:${bits:-1024} -keyout "${UHTTPD_KEY}.new" -out "${UHTTPD_CERT}.new" \
+			-subj /C="${country:-DE}"/ST="${state:-Saxony}"/L="${location:-Leipzig}"/CN="${commonname:-OpenWrt}"
+		sync
+		$OPENSSL_BIN rsa -in "${UHTTPD_KEY}.new" -outform DER -out "${UHTTPD_KEY}"
+		$OPENSSL_BIN x509 -in "${UHTTPD_CERT}.new" -outform DER -out "${UHTTPD_CERT}"
+	}
+}
+
+start_instance()
+{
+	UHTTPD_CERT=""
+	UHTTPD_KEY=""
+
+	local cfg="$1"
+	local realm="$(uci_get system.@system[0].hostname)"
+	local listen http https interpreter indexes path handler
+
+	procd_open_instance
+	procd_set_param respawn
+	procd_set_param stderr 1
+	procd_set_param command "$UHTTPD_BIN" -f
+	#procd_set_param limits core="unlimited"
+	procd_add_mdns "http" "tcp" "443"
+
+	append_arg "$cfg" home "-h"
+	append_arg "$cfg" realm "-r" "${realm:-OpenWrt}"
+	append_arg "$cfg" config "-c"
+	append_arg "$cfg" cgi_prefix "-x"
+	[ -f /usr/lib/uhttpd_lua.so ] && {
+		config_get handler "$cfg" lua_handler
+		[ -f "$handler" ] && append_arg "$cfg" lua_prefix "-l" && {
+			procd_append_param command "-L" "$handler"
+		}
+	}
+	[ -f /usr/lib/uhttpd_ubus.so ] && {
+		append_arg "$cfg" ubus_prefix "-u"
+		append_arg "$cfg" ubus_socket "-U"
+		append_bool "$cfg" ubus_cors "-X" 0
+	}
+	append_arg "$cfg" script_timeout "-t"
+	append_arg "$cfg" network_timeout "-T"
+	append_arg "$cfg" http_keepalive "-k"
+	append_arg "$cfg" tcp_keepalive "-A"
+	append_arg "$cfg" error_page "-E"
+	append_arg "$cfg" max_requests "-n" 3
+	append_arg "$cfg" max_connections "-N"
+
+	append_bool "$cfg" enable_cors "-X" 0
+	append_bool "$cfg" no_ubusauth "-a" 0
+	append_bool "$cfg" no_symlinks "-S" 0
+	append_bool "$cfg" no_dirlists "-D" 0
+	append_bool "$cfg" rfc1918_filter "-R" 0
+
+	config_get alias_list "$cfg" alias
+	for alias in $alias_list; do
+		procd_append_param command -y "$alias"
+	done
+
+	config_get http "$cfg" listen_http
+	for listen in $http; do
+		 procd_append_param command -p "$listen"
+	done
+
+	config_get interpreter "$cfg" interpreter
+	for path in $interpreter; do
+		procd_append_param command -i "$path"
+	done
+
+	config_get indexes "$cfg" index_page
+	for path in $indexes; do
+		procd_append_param command -I "$path"
+	done
+
+	config_get https "$cfg" listen_https
+	config_get UHTTPD_KEY  "$cfg" key  /etc/uhttpd.key
+	config_get UHTTPD_CERT "$cfg" cert /etc/uhttpd.crt
+
+	[ -f /lib/libustream-ssl.so ] && [ -n "$https" ] && {
+		[ -s "$UHTTPD_CERT" -a -s "$UHTTPD_KEY" ] || {
+			config_foreach generate_keys cert
+		}
+
+		[ -f "$UHTTPD_CERT" -a -f "$UHTTPD_KEY" ] && {
+			append_arg "$cfg" cert "-C"
+			append_arg "$cfg" key  "-K"
+
+			for listen in $https; do
+				procd_append_param command -s "$listen"
+			done
+		}
+
+		append_bool "$cfg" redirect_https "-q" 0
+	}
+
+	for file in /etc/uhttpd/*.json; do
+		[ -s "$file" ] && procd_append_param command -H "$file"
+	done
+
+	procd_close_instance
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "uhttpd"
+}
+
+start_service() {
+	config_load uhttpd
+	config_foreach start_instance uhttpd
+}
diff --git a/etc/init.d/umount b/etc/init.d/umount
new file mode 100755
index 0000000..349b2b3
--- /dev/null
+++ b/etc/init.d/umount
@@ -0,0 +1,8 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+
+STOP=99
+stop() {
+	sync
+	/bin/umount -a -d -r
+}
diff --git a/etc/init.d/updateLeds b/etc/init.d/updateLeds
new file mode 100755
index 0000000..a57292a
--- /dev/null
+++ b/etc/init.d/updateLeds
@@ -0,0 +1,309 @@
+#!/bin/sh /etc/rc.common
+
+START=97
+
+USE_PROCD=1
+
+if [ -f /lib/ar71xx.sh ]; then
+	PLATFORM=ar71xx
+	. /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+	PLATFORM=ipq806x
+	. /lib/ipq806x.sh
+fi
+board=$(${PLATFORM}_board_name)
+
+. /lib/functions/leds.sh
+. /usr/share/libubox/jshn.sh
+
+UCI=/sbin/uci
+JSON_LEDS=$(ubus call uci get '{"config":"system","type":"led"}');
+ERROR_STATE=$(ubus call uci state '{"config":"delos","section":"error","option":"state"}');
+WIFI_ENABLED=0
+WIFI_WPS=0
+if [ -d /sys/class/net/wifi0 ]; then
+    INTERFACE="wifi"
+else
+    INTERFACE="radio"
+fi
+
+
+get_error_state() {
+    if [ -n "$ERROR_STATE" ]; then
+        local ret
+        json_load "$ERROR_STATE"
+        json_get_var ret value 0
+        echo "$ret"
+        return 0
+    fi
+    echo "0"
+}
+
+get_wps_state() {
+    call='hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_status && hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_pin_status'
+    WIFI_WPS=0
+    for dir in /var/run/hostapd-*; do
+        [ -d "$dir" ] || continue
+        for vap_dir in $dir/ath* $dir/wlan*; do
+            [ -r "$vap_dir" ] || continue
+            retval=$(eval $call)
+            if [ $(echo "$retval" | grep -c '^RUNNING\|Active') -gt 0 ]; then
+                WIFI_WPS=1
+            fi
+        done
+    done
+    local retval=$(uci_get_state wireless wps_clone state)
+    if [ "$retval" = "running" ]; then
+        WIFI_WPS=1
+    fi
+}
+
+is_wifi_disabled() {
+    local radio=$1
+    /sbin/uci -q get wireless.$radio >/dev/null || {
+        # nonexisting radio counts as disabled
+        echo 1
+        return
+    }
+    local disabled=$(/sbin/uci -q get wireless.$radio.disabled 2>&1)
+    case "$disabled" in
+    0)
+        echo 0
+        ;;
+    1)
+        echo 1
+        ;;
+    *)
+        echo 0 #option not set
+    esac
+}
+
+all_wifis_enabled() {
+    if [ "$(is_wifi_disabled ${INTERFACE}0)" -eq 0 ] || [ "$(is_wifi_disabled ${INTERFACE}1)" -eq 0 ]; then
+        WIFI_ENABLED=1
+    fi
+}
+
+setup_board_leds() {
+    #defaults
+    ERROR_IND_LED="led_wlan2g"
+    ERROR_OFF_LED="led_wlan5g"
+    WIFI2G_LED="led_wlan2g"
+    WIFI5G_LED="led_wlan5g"
+    WIFI_TRIGGERED_LED=
+
+    case "$board" in
+    dlan-1000-ac)
+	ERROR_IND_LED=
+	ERROR_OFF_LED=
+	WIFI2G_LED=
+	WIFI5G_LED=
+	WIFI_TRIGGERED_LED="led_wlan"
+	;;
+    dlan2-2400-ac|\
+    dlan-550-wifi|\
+    dlan-pro-1200-ac|\
+    dlan-pro-1200-n)
+        ERROR_IND_LED=
+        ERROR_OFF_LED=
+        WIFI2G_LED=
+        WIFI5G_LED=
+        WIFI_TRIGGERED_LED="led_wlan"
+        ;;
+    dlan-*)
+        ERROR_IND_LED="led_wlan"
+        ERROR_OFF_LED=""
+        WIFI2G_LED="led_wlan"
+        WIFI5G_LED="led_wlan"
+        ;;
+    dvl-* |\
+    ew7479cap)
+        ERROR_IND_LED="led_wlan2g"
+        ERROR_OFF_LED="led_wlan5g"
+        WIFI2G_LED="led_wlan2g"
+        WIFI5G_LED="led_wlan5g"
+        ;;
+    ap151)
+        ERROR_IND_LED=
+        ERROR_OFF_LED=
+        WIFI2G_LED="ap151:green:lan2"
+        WIFI5G_LED="ap151:green:lan3"
+        WIFI_TRIGGERED_LED="led_wlan"
+        ;;
+    esac
+
+    # we need the sysfs-name
+    ERROR_IND_LED=$(led_get_option "$ERROR_IND_LED" sysfs)
+    ERROR_OFF_LED=$(led_get_option "$ERROR_OFF_LED" sysfs)
+    WIFI2G_LED=$(led_get_option "$WIFI2G_LED" sysfs)
+    WIFI5G_LED=$(led_get_option "$WIFI5G_LED" sysfs)
+    WIFI_TRIGGERED_LED=$(led_get_option "$WIFI_TRIGGERED_LED" sysfs)
+
+    # tricky: QSDK has 2G and 5G radio swapped w.r.t. OpenWrt when both are present: swap
+    [ -d /sys/class/net/wifi0 ] && [ -d /sys/class/net/wifi1 ] && {
+        local T="$WIFI2G_LED"
+        WIFI2G_LED="$WIFI5G_LED"
+        WIFI5G_LED="$T"
+    }
+}
+
+led_get_option() {    
+    local led="$1"
+    local option="$2"
+    local ret=""      
+
+    [ -z "$led" ] && return
+    json_load "$JSON_LEDS"
+    # error msg printed to stdout when object doesn't exist -> /dev/null
+    json_select values >/dev/null &&
+    json_select $led >/dev/null && {
+        json_get_var ret $option
+    }
+    echo "$ret"
+}
+
+led_get_sysfs_value() {
+    local LED="$1"
+    local file="$2"
+
+    [ -f "/sys/class/leds/$1/$2" ] || return 0
+    local retval=$(cat /sys/class/leds/$LED/$file)
+    retval="${retval##*\[}"
+    retval="${retval%%]*}"
+
+    echo "$retval"
+}
+
+led_set_error_condition() {
+    #orange (2.4GHz) fast blinking, blue off (5GHz) [colors of dvl-1750c]
+    logger "Leds: set error condition"
+
+    led_timer "$ERROR_IND_LED" 100 100
+    led_off "$ERROR_OFF_LED"
+}
+
+led_set_radios_off_condition() {
+    #both wifi leds are off for 4.9 seconds and on for 0.1 seconds (except 1200 ac: wifi trigger)
+    logger "Leds: set radio off condition"
+
+    led_set_attr "$WIFI_TRIGGERED_LED" operation off
+
+    # The led_off is required here, to get both LEDs in the same state, otherwise they might blink asynchronously
+    led_off "$WIFI2G_LED"
+    led_off "$WIFI5G_LED"
+    led_timer "$WIFI2G_LED" 100 4900
+    led_timer "$WIFI5G_LED" 100 4900
+}
+
+led_set_normal_condition() {
+    #led state depends on radio state
+    logger "Leds: set normal condition"
+    local TRIGGER1=$(led_get_option "$WIFI2G_LED" trigger)
+    local TRIGGER2=$(led_get_option "$WIFI5G_LED" trigger)
+
+    [ -n "$TRIGGER1" ] && led_set_attr "$WIFI2G_LED" trigger "$TRIGGER1"
+    [ -n "$TRIGGER2" ] && led_set_attr "$WIFI5G_LED" trigger "$TRIGGER2"
+
+    op=off
+    if [ "$(is_wifi_disabled ${INTERFACE}1)" -eq 0 ]; then
+        op=on
+        led_on "$WIFI2G_LED"
+    else
+        led_off "$WIFI2G_LED"
+    fi
+    if [ "$(is_wifi_disabled ${INTERFACE}0)" -eq 0 ]; then              
+        op=on
+        led_on "$WIFI5G_LED"
+    else
+        led_off "$WIFI5G_LED"
+    fi      
+    led_set_attr "$WIFI_TRIGGERED_LED" operation $op
+
+}
+
+led_set_wps_condition() {
+    logger "Leds: set WPS condition"
+    
+    local TRIGGER1=$(led_get_sysfs_value "$WIFI2G_LED" trigger)
+    local TRIGGER2=$(led_get_sysfs_value "$WIFI5G_LED" trigger)
+    local TRIGGER3=$(led_get_sysfs_value "$WIFI_TRIGGERED_LED" trigger)
+
+    if [ "$(is_wifi_disabled ${INTERFACE}1)" -eq 0 ]; then
+        if [ $TRIGGER1 != "timer" ]; then
+            led_timer "$WIFI2G_LED" 500 500
+        else
+            local DELAY_OFF=$(led_get_sysfs_value "$WIFI2G_LED" delay_off)
+            local DELAY_ON=$(led_get_sysfs_value "$WIFI2G_LED" delay_on)
+
+            if [ "$DELAY_ON" != "500"  ] || [ "$DELAY_OFF" != 500 ]; then
+                led_timer "$WIFI2G_LED" 500 500
+            fi
+        fi
+    fi
+
+    if [ "$(is_wifi_disabled ${INTERFACE}0)" -eq 0 ]; then
+        if [ $TRIGGER2 != "timer" ]; then
+            led_timer "$WIFI5G_LED" 500 500
+        else
+            local DELAY_OFF=$(led_get_sysfs_value $WIFI5G_LED delay_off)
+            local DELAY_ON=$(led_get_sysfs_value $WIFI5G_LED delay_on)
+
+            if [ "$DELAY_ON" != "500"  ] || [ "$DELAY_OFF" != 500 ]; then
+                led_timer "$WIFI5G_LED" 500 500
+            fi
+        fi
+    fi
+
+    if [ $TRIGGER3 != "wifi" ]; then
+        led_set_attr "$WIFI_TRIGGERED_LED" trigger wifi
+    fi
+    local OPERATION3=$(led_get_sysfs_value $WIFI_TRIGGERED_LED operation)
+    if [ "$OPERATION3" != "wps" ]; then
+        led_set_attr "$WIFI_TRIGGERED_LED" operation wps
+    fi
+}
+
+
+led_state_machine() {
+    if [ $(get_error_state) -eq 1 ]; then
+        #set error led behaviour and return
+        led_set_error_condition
+        return 0
+    fi
+
+    if [ $WIFI_ENABLED -eq 0 ]; then
+        #set both radios off behaviour and return
+        led_set_radios_off_condition
+        return 0
+    fi
+    
+    get_wps_state
+    if [ $WIFI_WPS -eq 1 ]; then
+        led_set_wps_condition
+        # forbidden to loop in procd (procd processing blocks), do that in background:
+        (sleep 1; led_state_machine) &
+        return 0
+    fi
+
+    #setup normal operation
+    led_set_normal_condition
+}
+
+update_leds() {
+    all_wifis_enabled
+    setup_board_leds
+    led_state_machine
+}
+
+start_service() {
+    update_leds
+}
+
+reload_service() {
+    update_leds
+}
+
+service_triggers()
+{
+    procd_add_reload_trigger wireless
+}
diff --git a/etc/init.d/wifi-eventd b/etc/init.d/wifi-eventd
new file mode 100755
index 0000000..3aaf43c
--- /dev/null
+++ b/etc/init.d/wifi-eventd
@@ -0,0 +1,27 @@
+#!/bin/sh /etc/rc.common
+
+START=19
+STOP=10
+USE_PROCD=1
+
+logger() {
+	command logger -t wifi-eventd "$@"
+}
+
+start_cron_job() {
+   (crontab -l ; echo "00 03 * * * /usr/sbin/update_wifi_client_list.sh cleanup") | sort -u | crontab -
+}
+
+stop_service() {
+	logger "stop"
+}
+
+start_service() {
+	logger "start"
+
+	procd_open_instance
+	procd_set_param command setsid /usr/sbin/wifi-eventd
+	procd_set_param respawn 3600 5 0
+	procd_close_instance
+	start_cron_job
+}
diff --git a/etc/init.d/wifi_schedule b/etc/init.d/wifi_schedule
new file mode 100755
index 0000000..1be686a
--- /dev/null
+++ b/etc/init.d/wifi_schedule
@@ -0,0 +1,22 @@
+#!/bin/sh /etc/rc.common
+
+START=18
+USE_PROCD=1
+
+start_service(){
+        /usr/bin/wifi_schedule.sh check
+}
+
+reload_service(){
+        /usr/bin/wifi_schedule.sh cron
+        /usr/bin/wifi_schedule.sh check
+}
+
+service_triggers(){
+        procd_add_reload_trigger wifi_schedule
+}
+
+boot() {
+	/usr/bin/wifi_schedule.sh cron
+	start
+}
diff --git a/etc/init.d/wsplcd b/etc/init.d/wsplcd
new file mode 100755
index 0000000..dd1f61f
--- /dev/null
+++ b/etc/init.d/wsplcd
@@ -0,0 +1,784 @@
+#!/bin/sh /etc/rc.common
+#
+# @@-COPYRIGHT-START-@@
+#
+# Copyright (c) 2013, 2015-2018 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2013, 2015-2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#
+# @@-COPYRIGHT-END-@@
+#
+
+
+# shellcheck disable=SC2034
+START=52
+
+# shellcheck disable=SC2034
+USE_PROCD=1
+RESPAWN_THRESHOLD=120
+RESPAWN_TIMEOUT=5
+RESPAWN_RETRIES=10
+SERVICE_PATH="/usr/sbin/wsplcd"
+WSPLCD_CONFIG_FILE="/tmp/wsplcd.conf"
+WSPLCD_CONFIG_FILE_PREFIX="/tmp/wsplcd"
+WSPLCD_RUN_FILE="/var/run/.wsplcd"
+
+NON_PBC_IFACES=
+
+# This restart_* command is only intended to be used after a config change
+#
+EXTRA_COMMANDS="restart_after_config_change"
+EXTRA_HELP=<<EOF
+        restart_after_config_change Restart triggered due to change in wireless configuration
+EOF
+
+#check wsplcd config to enable/disable cfg80211
+config_load 'wsplcd'
+config_get_bool wsplcd_cfg config 'cfg80211_enable' '0'
+if [ "$wsplcd_cfg" == "1" ]; then
+    WSPLCD_CFG80211=-cfg80211
+else
+    WSPLCD_CFG80211=
+fi
+
+. /lib/functions/hyfi-debug.sh
+. /lib/functions/hyfi-iface.sh
+. /lib/functions/hyfi-network.sh
+
+atf_ssidcmd_idx=1 atf_stacmd_idx=1 atf_groupcmd_idx=1 atf_radioparams_idx=1 cfg_changed=0
+
+wsplcd_cfg_append() {
+    local configfile=$2
+    echo "$1" >> "$configfile"
+}
+
+wsplcd_cfg_add_str() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_bool() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get_bool val config "$key" "$def"
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_debuglevel() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    case "$val" in
+        DUMP)
+            val='0'
+        ;;
+        DEBUG)
+            val='1'
+        ;;
+        INFO)
+            val='2'
+        ;;
+        ERROR)
+            val='3'
+        ;;
+    esac
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+__wsplcd_get_default_mode() {
+	local wan_iface
+
+	config_load network
+	config_get wan_iface wan ifname
+
+	if [ -n "$wan_iface" ]; then
+		eval "$1='REGISTRAR'"
+	else
+		eval "$1='ENROLLEE'"
+	fi
+}
+
+wsplcd_cfg_add_role() {
+	local cfg="$1"
+	local key="$2"
+	local configfile="$3"
+	local default_mode
+	local val
+
+	__wsplcd_get_default_mode default_mode
+	config_get val config "$key"
+	case "$val" in
+		REGISTRAR)
+			val='0'
+		;;
+		ENROLLEE)
+			val='1'
+		;;
+		NONE)
+			val='2'
+		;;
+		*)
+			if [ "$default_mode" = "REGISTRAR" ]; then
+				val='0'
+			else
+				val='1'
+			fi
+			uci_set wsplcd config "$key" "$default_mode"
+		;;
+	esac
+	[ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_wpsmethod() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    case "$val" in
+        WPS_M2)
+            val='M2'
+        ;;
+        WPS_M8)
+            val='M8'
+        ;;
+    esac
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_wpstxmode() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    case "$val" in
+        WPS_TX_ENCRYPTED)
+            val='encrypted'
+        ;;
+        WPS_TX_NONE)
+            val='none'
+        ;;
+    esac
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_wpsrxmode() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    case "$val" in
+        WPS_RX_ENCRYPTED)
+            val='encrypted'
+        ;;
+        WPS_RX_EITHER)
+            val='either'
+        ;;
+    esac
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_configsta() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    case "$val" in
+        1)
+            val='yes'
+        ;;
+        0)
+            val='no'
+        ;;
+    esac
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_wpatype() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    case "$val" in
+        LONG)
+            val='0'
+        ;;
+        SHORT)
+            val='1'
+        ;;
+    esac
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+wsplcd_cfg_add_buttonmode() {
+    local cfg="$1"
+    local key="$2"
+    local def="$3"
+    local configfile="$4"
+    local val
+
+    config_get val config "$key" "$def"
+    case "$val" in
+        ONEBUTTON)
+            val='1'
+        ;;
+        TWOBUTTON)
+            val='2'
+        ;;
+    esac
+    [ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+}
+
+__wsplcd_iterate_wlan_ifaces_nonpbc() {
+	local config="$1"
+	local iface network mode wps_pbc
+
+	config_get iface "$config" ifname
+	config_get network "$config" network
+	config_get mode "$config" mode
+	config_get_bool wps_pbc "$config" wps_pbc 0
+
+	if [ "$2" = "$network" ] && [ "$wps_pbc" -eq "0" ]; then
+		NON_PBC_IFACES="${NON_PBC_IFACES}${NON_PBC_IFACES:+","}${iface}"
+	fi
+}
+
+wsplcd_cfg_add_nonpbc() {
+	local configfile="$1"
+	NON_PBC_IFACES=
+
+	config_load wireless
+	config_foreach __wsplcd_iterate_wlan_ifaces_nonpbc wifi-iface "$ieee1905managed_bridge"
+
+	if [ -n "$NON_PBC_IFACES" ]; then
+		wsplcd_cfg_append 'NonPBCInterfaces='$NON_PBC_IFACES "$configfile"
+	fi
+}
+
+wsplcd_cfg_add_interface() {
+	local br_name=$1
+	local configfile="$2"
+	local wlan_ifaces wlan_included_ifaces ether_ifaces plc_iface non_wlan_ifaces
+	local wlan_vlan_ifaces
+
+	wsplcd_cfg_append          'bridge=br-'"$br_name"	 "$configfile"
+
+	# Get all WLAN interfaces bound to the managed bridge
+	hyfi_get_wlan_ifaces "$br_name" wlan_ifaces wlan_included_ifaces
+	wsplcd_cfg_append          '1905InterfacesWlan='"$wlan_ifaces"  "$configfile"
+
+	# Get all WLAN VLAN interfaces bound to the managed bridge
+	hyfi_get_wlan_vlan_ifaces "$br_name" wlan_vlan_ifaces
+
+	# Get all Ethernet interfaces and PLC interface
+	hyfi_get_ether_ifaces "$br_name" ether_ifaces
+	hyfi_get_plc_iface "$br_name" plc_iface
+	if [ -n "${plc_iface}" ] ; then
+		non_wlan_ifaces=${ether_ifaces}${ether_ifaces:+","}${plc_iface}
+	else
+		non_wlan_ifaces=${ether_ifaces}
+	fi
+	if [ -n "${wlan_vlan_ifaces}" ] ; then
+		non_wlan_ifaces=${non_wlan_ifaces}${non_wlan_ifaces:+","}${wlan_vlan_ifaces}
+	fi
+
+	non_wlan_ifaces=$(echo "$non_wlan_ifaces" | sed 's/ESWITCH/ETHER/g')
+	wsplcd_cfg_append          '1905InterfacesElse='"$non_wlan_ifaces"  "$configfile"
+
+	wsplcd_cfg_add_nonpbc "$configfile"
+}
+
+wsplcd_atf_re_mac_cfg() {
+	local configfile="$3"
+	local cfg
+	local val
+
+	cfg="REmac"
+	config_get val "$1" "$cfg"
+	[ -n "$val" ] && wsplcd_cfg_append "${2}${cfg}_entry=$val" "$configfile"
+}
+
+wsplcd_getlist_atf_grpssid() {
+	local val="$1"
+	local configfile="$2"
+
+	wsplcd_cfg_append "${2}group_ssid_${atf_groupcmd_idx}=$val"  "$configfile"
+	numssid=$((numssid + 1))
+}
+
+wsplcd_atf_group_cfg() {
+	local cfg
+	local grpname
+	local cmd
+	local dev
+	local val
+	local numssid
+	local status
+	local cmdidx=$atf_groupcmd_idx
+	local config=$1
+	local prefix=$2
+	local configfile="$3"
+
+	while :; do
+		cfg="group_wifidev"
+		config_get dev "$1" "$cfg"
+		[ -n "$dev" ] || break
+		wsplcd_cfg_append "${2}group_wifidev_${cmdidx}=$dev" "$configfile"
+
+		cfg="group_enable"
+		config_get status "$1" "$cfg"
+		if [ -n "$status" ]; then
+			wsplcd_cfg_append "${2}group_enable_${cmdidx}=$status" "$configfile"
+		fi
+
+		cfg="group"
+		config_get grpname "$1" "$cfg"
+		[ -n "$grpname" ] || break
+
+		cfg="group_cmd"
+		config_get cmd "$1" "$cfg"
+		[ -n "$cmd" ] || break
+
+		cfg="group_val"
+		config_get val "$1" "$cfg"
+		echo "group_val $val"
+		if [ -z "$val" ] && [ "$cmd" == "addgroup" ]; then
+			break
+		fi
+
+		cfg="group_ssid"
+		numssid=0
+		config_list_foreach "$config" "group_ssid" wsplcd_getlist_atf_grpssid "$prefix"
+		if [ $numssid -eq 0 ] && [ "$cmd" == "addgroup" ]; then
+			break
+		fi
+
+		wsplcd_cfg_append "${2}group_entry_${cmdidx}=$grpname"  "$configfile"
+		wsplcd_cfg_append "${2}group_cmd_${cmdidx}=$cmd"  "$configfile"
+		if [ -n "$val" ]; then
+			wsplcd_cfg_append "${2}group_val_${cmdidx}=$val"  "$configfile"
+		fi
+
+		cmdidx=$((cmdidx + 1))
+
+		break
+	done
+	atf_groupcmd_idx=$cmdidx
+}
+
+wsplcd_atf_ssid_cfg() {
+	local cfg
+	local ssid
+	local cmd
+	local dev
+	local val
+	local cmdidx=$atf_ssidcmd_idx
+	local configfile=$3
+
+	while :; do
+		cfg="ssid"
+		config_get ssid "$1" "$cfg"
+		[ -n "$ssid" ] || break
+
+		cfg="ssid_cmd"
+		config_get cmd "$1" "$cfg"
+		[ -n "$cmd" ] || break
+
+		cfg="ssid_wifidev"
+		config_get dev "$1" "$cfg"
+		[ -n "$dev" ] || break
+
+		cfg="ssid_val"
+		config_get val "$1" "$cfg"
+		if [ -z "$val" ] && [ "$cmd" == "addssid" ]; then
+			break
+		fi
+
+		wsplcd_cfg_append "${2}ssid_entry_${cmdidx}=$ssid"  "$configfile"
+		wsplcd_cfg_append "${2}ssid_cmd_${cmdidx}=$cmd"  "$configfile"
+		wsplcd_cfg_append "${2}ssid_wifidev_${cmdidx}=$dev"  "$configfile"
+		wsplcd_cfg_append "${2}ssid_val_${cmdidx}=$val"  "$configfile"
+
+		cmdidx=$((cmdidx + 1))
+
+		break
+	done
+	atf_ssidcmd_idx=$cmdidx
+}
+
+wsplcd_atf_sta_cfg() {
+	local cfg
+	local stamac
+	local cmd
+	local dev
+	local val
+	local ssid
+	local cmdidx=$atf_stacmd_idx
+	local configfile=$3
+
+	while :; do
+		cfg="sta"
+		config_get stamac "$1" "$cfg"
+		[ -n "$stamac" ] || break
+
+		cfg="sta_cmd"
+		config_get cmd "$1" "$cfg"
+		[ -n "$cmd" ] || break
+
+		cfg="sta_wifidev"
+		config_get dev "$1" "$cfg"
+		[ -n "$dev" ] || break
+
+		cfg="sta_val"
+		config_get val "$1" "$cfg"
+		if [ -z "$val" ] && [ "$cmd" == "addsta" ]; then
+			break
+		fi
+
+		cfg="sta_ssid"
+		config_get ssid "$1" "$cfg"
+
+		wsplcd_cfg_append "${2}sta_entry_${cmdidx}=$stamac"  "$configfile"
+		wsplcd_cfg_append "${2}sta_cmd_${cmdidx}=$cmd"  "$configfile"
+		wsplcd_cfg_append "${2}sta_wifidev_${cmdidx}=$dev"  "$configfile"
+		wsplcd_cfg_append "${2}sta_val_${cmdidx}=$val"  "$configfile"
+		wsplcd_cfg_append "${2}sta_ssid_${cmdidx}=$ssid"  "$configfile"
+
+		cmdidx=$((cmdidx + 1))
+
+		break
+	done
+	atf_stacmd_idx=$cmdidx
+}
+
+wsplcd_parse_re_atf_config() {
+	local cfg
+	local val
+	local config=$1
+	local configfile=$4
+
+	cfg="REname"
+	config_get val "$1" "$cfg"
+
+	if [ -n "$val" ] && [ "$val" == "$2" ] ; then
+		#Get ATF SSID Config
+		wsplcd_atf_ssid_cfg "$config" "$3" "$configfile"
+
+		#Get ATF STA Config
+		wsplcd_atf_sta_cfg "$config" "$3" "$configfile"
+
+		#Get ATF Group Config
+		wsplcd_atf_group_cfg "$config" "$3" "$configfile"
+	fi
+}
+
+wsplcd_parse_radioparams_atfconfig() {
+	local cfg
+	local val
+	local config=$1
+	local configfile=$4
+
+	cfg="REname"
+	config_get val "$1" "$cfg"
+
+	if [ -n "$val" ] && [ "$val" == "$2" ] ; then
+		#Get Radio name
+		cfg="radio_name"
+		config_get val "$1" "$cfg"
+		if [ -n "$val" ] ; then
+			wsplcd_cfg_append "${3}radio_name_${atf_radioparams_idx}=$val" "$configfile"
+		fi
+
+		#Get ATF scheduling policy
+		cfg="sched_policy"
+		config_get val "$1" "$cfg"
+		if [ -n "$val" ] ; then
+			wsplcd_cfg_append "${3}radio_sched_${atf_radioparams_idx}=$val" "$configfile"
+		fi
+
+		#Get ATF OBSS scheduling (0/1)
+		cfg="sched_obss_enable"
+		config_get val "$1" "$cfg"
+		if [ -n "$val" ] ; then
+			wsplcd_cfg_append "${3}radio_obss_${atf_radioparams_idx}=$val" "$configfile"
+		fi
+
+		#Get ATF Inter group policy
+		cfg="sched_group_policy"
+		config_get val "$1" "$cfg"
+		if [ -n "$val" ] ; then
+			wsplcd_cfg_append "${3}radio_grouppolicy_${atf_radioparams_idx}=$val" "$configfile"
+		fi
+
+		atf_radioparams_idx=$((atf_radioparams_idx + 1))
+	fi
+}
+
+wsplcd_parse_atf_config() {
+	local cfg
+	local prefix
+	local rename
+	local config=$1
+	local configfile=$2
+
+	repeater_id=$((repeater_id + 1))
+	prefix="ATF.RE${repeater_id}_"
+
+	cfg="REname"
+	config_get rename "$1" "$cfg"
+
+	#Get RE MAC
+	wsplcd_atf_re_mac_cfg "$config" $prefix "$configfile"
+
+	#reset command indexes for each repeater entry
+	atf_ssidcmd_idx=1
+	atf_stacmd_idx=1
+	atf_groupcmd_idx=1
+	atf_radioparams_idx=1
+
+	#Parse re-config section & get atf configuration
+	config_load wsplcd
+	config_foreach wsplcd_parse_re_atf_config atf-re-config "$rename" $prefix "$configfile"
+
+	config_foreach wsplcd_parse_radioparams_atfconfig atf-re-radioparams-config "$rename" $prefix "$configfile"
+}
+
+wsplcd_cfg_add_atf() {
+	local cfg="$1"
+	local key="$2"
+	local def="$3"
+	local val
+	local repeater_id=0
+	local configfile=$4
+
+	config_get_bool val config "$key" "$def"
+	[ -n "$val" ] && wsplcd_cfg_append "$cfg=$val" "$configfile"
+
+	#Read ATF Params if ATF config is enabled
+	if [ -n "$val" ] && [ "$val" == 1 ] ; then
+		config_load wsplcd
+		config_foreach wsplcd_parse_atf_config atf-config "$configfile"
+	fi
+}
+
+wsplcd_create_config() {
+	lock /var/run/wsplcd.lock
+	local br_name=$1
+	local configfile=$2
+
+	echo "# Config file for wsplcd, automatically created by script" > "$configfile"
+	wsplcd_cfg_add_debuglevel  debug_level                   DebugLevel           'ERROR'		"$configfile"
+	wsplcd_cfg_add_interface   "$br_name"			 "$configfile"
+	wsplcd_cfg_add_role        role                          RunMode		"$configfile"
+	wsplcd_cfg_add_bool        designated_pb_ap              DesignatedPBAP       '0'		"$configfile"
+	wsplcd_cfg_add_wpsmethod   WPS_method                    WPSMethod            'WPS_M2'		"$configfile"
+	wsplcd_cfg_add_wpstxmode   WPS_tx_mode                   TXMode               'WPS_TX_ENCRYPTED' "$configfile"
+	wsplcd_cfg_add_wpsrxmode   WPS_rx_mode                   RXMode               'WPS_RX_ENCRYPTED' "$configfile"
+	wsplcd_cfg_add_configsta   config_station                ConfigSta            '1'		"$configfile"
+	wsplcd_cfg_add_str         ssid_suffix                   SSIDSuffix           ''		"$configfile"
+	wsplcd_cfg_add_str         search_timeout                SearchTimeout        '60'		"$configfile"
+	wsplcd_cfg_add_str         WPS_session_timeout           WPSSessionTimeout    '120'		"$configfile"
+	wsplcd_cfg_add_str         WPS_retransmission_timeout    WPSRetransmitTimeout '5'		"$configfile"
+	wsplcd_cfg_add_str         WPS_per_message_timeout       WPSPerMessageTimeout '15'		"$configfile"
+	wsplcd_cfg_add_bool        band_sel_enable               BandSel              '1'		"$configfile"
+	wsplcd_cfg_add_bool        band_choice                   BandChoice           '5G'		"$configfile"
+	wsplcd_cfg_add_str         rm_collect_timeout            RMCollectTimeout     '10'		"$configfile"
+	wsplcd_cfg_add_bool        deep_clone_enable             DeepClone            '1'		"$configfile"
+	wsplcd_cfg_add_bool        deep_clone_no_bssid           DeepCloneNoBSSID     '0'       "$configfile"
+	wsplcd_cfg_add_bool        manage_vap_ind                ManageVAPInd         '1'		"$configfile"
+	wsplcd_cfg_add_str         1905Nwkey                     NetworkKey1905       ''		"$configfile"
+	wsplcd_cfg_add_str         ucpk_salt                     UCPKSalt             ''		"$configfile"
+	wsplcd_cfg_add_wpatype     wpa_passphrase_type           WPAPassphraseType    'LONG'		"$configfile"
+	wsplcd_cfg_append          'config_methods=push_button virtual_push_button physical_push_button' "$configfile"
+	wsplcd_cfg_append          'manufacturer=Qualcomm Atheros' "$configfile"
+	wsplcd_cfg_append          'model_name=ModelNameHere' "$configfile"
+	wsplcd_cfg_append          'model_number=ModelNumberHere' "$configfile"
+	wsplcd_cfg_append          'serial_number=SerialNumberHere' "$configfile"
+	wsplcd_cfg_append          'device_type=6-0050f204-1' "$configfile"
+	wsplcd_cfg_append          'device_name=ExampleWpa' "$configfile"
+	wsplcd_cfg_append          'os_version=01020300' "$configfile"
+	wsplcd_cfg_append          '#AP Cloning 1.0 parameters' "$configfile"
+	wsplcd_cfg_add_bool        APCloning                     APCloning            '0'		"$configfile"
+	wsplcd_cfg_add_bool        MapEnable                     MapEnable            '0'		"$configfile"
+	wsplcd_cfg_add_bool        MapPFCompliant                MapPFCompliant       '0'		"$configfile"
+	wsplcd_cfg_add_str         MapMaxBss                     MapMaxBss            '0'		"$configfile"
+	wsplcd_cfg_add_buttonmode  button_mode                   ButtonMode           'TWOBUTTON'	"$configfile"
+	wsplcd_cfg_add_str         clone_timeout                 CloneTimeout         '180'		"$configfile"
+	wsplcd_cfg_add_str         walk_timeout                  WalkTimeout          '120'		"$configfile"
+	wsplcd_cfg_add_str         repeat_timeout                RepeatTimeout        '1'		"$configfile"
+	wsplcd_cfg_add_str         internal_timeout              InternalTimeout      '15'		"$configfile"
+	wsplcd_cfg_add_str         wait_wifi_config_secs_other   WaitOtherBandsSecs   '20'		"$configfile"
+	wsplcd_cfg_add_str         wait_wifi_config_secs_first   WaitFirstBandSecs    '30'		"$configfile"
+	wsplcd_cfg_add_atf         atf_config_en               	 atfConfigEnable	  '0'		"$configfile"
+	wsplcd_cfg_append          "cfg_changed=$cfg_changed"  "$configfile"
+
+	local cfg_restart_long_timeout
+	local cfg_restart_short_timeout
+	local cfg_apply_timeout
+	config_get cfg_restart_long_timeout config "ConfigRestartLongTimeout" "20"
+	config_get cfg_restart_short_timeout config "ConfigRestartShortTimeout" "5"
+	config_get cfg_apply_timeout config "ConfigApplyTimeout" "10"
+	wsplcd_cfg_append          "cfg_restart_long_timeout=$cfg_restart_long_timeout" "$configfile"
+	wsplcd_cfg_append          "cfg_restart_short_timeout=$cfg_restart_short_timeout" "$configfile"
+	wsplcd_cfg_append          "cfg_apply_timeout=$cfg_apply_timeout" "$configfile"
+
+	[ -x "/sbin/uci2cfg.sh" ] && {
+		/sbin/uci2cfg.sh "$br_name" >> "$configfile"
+		/sbin/uci2cfg.sh wifisec "$br_name" > "/tmp/.wsplc.wifisec"
+	}
+
+	lock -u /var/run/wsplcd.lock
+
+	return 0
+}
+
+__wsplcd_wlanif_ready() {
+	local vif vifs
+	local vifstat
+	local configfile=$1
+
+	vifs=$(grep '^1905InterfacesWlan' "$configfile" | sed -e 's/1905InterfacesWlan=//' -e 's/@[a-zA-Z0-9]*//g' -e 's/,/ /g' -e 's/:WLAN//g')
+	if [ -z "$vifs" ]; then
+		echo "[wsplcd]WLAN interface is not ready" > /dev/console
+		return 0
+	fi
+
+	for vif in $vifs; do
+		vifstat=$(ifconfig "$vif" 2>/dev/null)
+		if [ -z "$vifstat" ]; then
+			echo "[wsplcd]WLAN interface $vif is not ready" > /dev/console
+			return 0
+		fi
+	done
+	return 1
+}
+
+start_service() {
+	local enabled
+	local ieee1905managed_bridge
+	local ieee1905managed_bridge2
+	local log_mode
+	local map_enable
+	local map_mode=''
+	local map_policy_file=''
+	local allow_zero_ap_interfaces
+
+	config_load 'wsplcd'
+	config_get_bool enabled config 'HyFiSecurity' '0'
+	[ "$enabled" -gt 0 ] || {
+		return 1
+	}
+
+	config_get log_mode config "WriteDebugLogToFile" "NONE"
+	case "$log_mode" in
+		NONE)
+			log_mode=''
+		;;
+		APPEND)
+			log_mode='-a'
+		;;
+		TRUNCATE)
+			log_mode='-w'
+		;;
+	esac
+
+	config_get_bool map_enable config 'MapEnable' '0'
+	if [ "$map_enable" -gt 0 ]; then
+		config_get map_policy_file config 'MapGenericPolicyFile'
+		if [ -n "$map_policy_file" ]; then
+			map_mode='-M'
+		else
+			config_get map_policy_file config 'MapPolicyFile' '/etc/config/map.conf'
+			map_mode='-m'
+		fi
+	fi
+
+	# Get the IEEE1905.1 managed bridge name
+	hyfi_get_ieee1905_managed_iface ieee1905managed_bridge ieee1905managed_bridge2
+
+	if [ "$map_enable" -gt 0 ] && [ -n "$ieee1905managed_bridge2" ]; then
+		hyfi_echo wsplcd "MAP mode only supports a single bridge"
+		return 1
+	fi
+
+	wsplcd_create_config "$ieee1905managed_bridge" "${WSPLCD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge}.conf" || return 1
+	if [ -n "$ieee1905managed_bridge2" ]
+	then
+		wsplcd_create_config "$ieee1905managed_bridge2" "${WSPLCD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge2}.conf" || return 1
+	fi
+
+	config_get allow_zero_ap_interfaces config 'AllowZeroAPInterfaces' '0'
+	__wsplcd_wlanif_ready "${WSPLCD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge}.conf"
+	if [ $? -eq 1 ] || [ "$allow_zero_ap_interfaces" -gt 0 ]; then
+		hyfi_echo wsplcd "starting daemon"
+
+		procd_open_instance
+		procd_set_param command ${SERVICE_PATH} -c "${WSPLCD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge}.conf" "$log_mode" "$map_mode" "$map_policy_file" $WSPLCD_CFG80211
+		procd_set_param respawn ${RESPAWN_THRESHOLD} ${RESPAWN_TIMEOUT} ${RESPAWN_RETRIES}
+		procd_add_reload_trigger "hyd" "lbd"
+		procd_close_instance
+
+		if [ -n "$ieee1905managed_bridge2" ]
+		then
+			procd_open_instance
+			procd_set_param command ${SERVICE_PATH} -c "${WSPLCD_CONFIG_FILE_PREFIX}-${ieee1905managed_bridge2}.conf" "$log_mode" $WSPLCD_CFG80211
+			procd_set_param respawn ${RESPAWN_THRESHOLD} ${RESPAWN_TIMEOUT} ${RESPAWN_RETRIES}
+			procd_add_reload_trigger "hyd" "lbd"
+			procd_close_instance
+		fi
+	fi
+	touch $WSPLCD_RUN_FILE
+}
+
+stop_service() {
+	# Save aside the old config file just for debugging purposes.
+	[ -f "$WSPLCD_CONFIG_FILE" ] &&
+		mv ${WSPLCD_CONFIG_FILE} ${WSPLCD_CONFIG_FILE}.bak &&
+		rm ${WSPLCD_CONFIG_FILE_PREFIX}-*.conf
+}
+
+restart_after_config_change() {
+	[ -f "$WSPLCD_RUN_FILE" ] || return
+	hyfi_lock
+
+	# No longer have an explicit stop function since we are now using
+	# procd, so do an explicit stop via the init script.
+	/etc/init.d/wsplcd stop
+	cfg_changed=1
+	start
+	hyfi_unlock
+}
diff --git a/etc/init.d/xmppd b/etc/init.d/xmppd
new file mode 100755
index 0000000..1d90e4f
--- /dev/null
+++ b/etc/init.d/xmppd
@@ -0,0 +1,31 @@
+#!/bin/sh /etc/rc.common
+#XMPP client software
+#Copyright (C) 2016 PIVA SOFTWARE <www.pivasoftware.com> - All Rights Reserved
+#Author: MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
+#Author: ANIS Ellouze <anis.ellouze@pivasoftware.com>
+#This software is under the terms of the commercial license attached with this source code
+
+START=90
+
+USE_PROCD=1
+PROG="/usr/sbin/xmppd"
+
+. /lib/delos-functions.sh
+
+start_service() {
+	[ "$(uci_get_state delos baptization Tr069)" != "1" ] && ! dvl_is_internal_firmware && exit 1
+
+	procd_open_instance
+	procd_set_param command "$PROG"
+	procd_set_param respawn "3" "7" "0"
+	procd_close_instance
+}
+
+boot() {
+	start
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger xmpp
+}
diff --git a/etc/inittab b/etc/inittab
new file mode 100644
index 0000000..61ba1b9
--- /dev/null
+++ b/etc/inittab
@@ -0,0 +1,3 @@
+::sysinit:/etc/init.d/rcS S boot
+::shutdown:/etc/init.d/rcS K shutdown
+::askconsole:/tmp/bin/ash --login
diff --git a/etc/iproute2/rt_tables b/etc/iproute2/rt_tables
new file mode 100644
index 0000000..541abfd
--- /dev/null
+++ b/etc/iproute2/rt_tables
@@ -0,0 +1,11 @@
+#
+# reserved values
+#
+255	local
+254	main
+253	default
+0	unspec
+#
+# local
+#
+#1	inr.ruhep
diff --git a/etc/keys/delos-client-cert.pem b/etc/keys/delos-client-cert.pem
new file mode 100644
index 0000000..a56f3f5
--- /dev/null
+++ b/etc/keys/delos-client-cert.pem
@@ -0,0 +1,84 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 1 (0x1)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: O=devolo AG, L=Aachen, C=DE, CN=delos CA
+        Validity
+            Not Before: Jul 13 11:13:17 2018 GMT
+            Not After : Jul 12 11:13:17 2023 GMT
+        Subject: C=DE, O=devolo AG, CN=delos Client
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:c4:7e:95:43:3d:dd:22:77:de:35:3c:a1:fd:98:
+                    5e:91:3c:22:b4:54:a0:56:b3:42:f8:93:67:4a:2f:
+                    71:39:f3:c1:90:ef:68:f0:a6:91:31:c3:54:45:b5:
+                    f3:4d:df:76:fc:31:5e:ea:64:4e:7d:54:7b:03:81:
+                    ba:05:49:4e:3a:f3:95:30:25:81:3b:0e:74:33:62:
+                    da:f7:b1:ec:3a:17:6e:e3:6b:1e:c2:9b:2a:87:99:
+                    2b:9e:5c:a1:d8:a9:13:f7:f1:96:bf:60:98:0f:a7:
+                    5b:6c:ce:56:dd:ec:16:9c:a7:81:50:70:8f:10:6a:
+                    ef:62:f3:85:46:1e:c4:a5:2a:4c:3b:45:69:f4:e1:
+                    da:c5:09:4a:84:88:5b:67:e5:cb:39:60:2d:09:16:
+                    07:e2:21:58:b8:a8:72:96:8d:3d:a1:31:36:fd:a8:
+                    8a:2f:ce:9c:b8:a4:33:42:9b:6c:53:c8:35:37:17:
+                    af:a8:3d:ca:4d:cc:11:99:9d:93:03:4e:c1:3f:2e:
+                    18:c6:27:ed:21:9a:e7:b1:69:a2:99:2a:84:81:43:
+                    98:98:af:d1:3b:af:e8:57:9a:57:6c:fd:85:52:e0:
+                    08:ca:04:44:e6:70:1b:0f:53:20:37:4e:dc:4b:a7:
+                    96:fe:91:2f:b3:dc:c4:6e:fe:1f:27:c9:33:f0:83:
+                    cb:4d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                D3:EB:BB:D3:C4:3C:25:AD:70:A7:07:0C:4F:16:DE:78:A0:81:E6:9B
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Authority Key Identifier: 
+                DirName:/O=devolo AG/L=Aachen/C=DE/CN=delos CA
+                serial:A3:7C:87:FF:CA:DF:67:98
+
+    Signature Algorithm: sha256WithRSAEncryption
+         56:9d:bb:00:a1:87:4f:39:a5:a5:f4:db:ea:b6:48:e2:eb:7d:
+         e8:73:d5:bf:d3:2d:6c:5e:6b:be:f1:e7:f6:db:b2:5d:cf:03:
+         fc:9f:4e:d4:65:08:54:c4:df:1c:a5:13:47:22:a3:56:c1:a5:
+         5b:a5:27:72:3f:a0:83:dd:28:a8:95:30:b4:ee:68:45:e1:b9:
+         f4:d3:5c:c8:6c:ea:ff:1c:94:91:ae:5f:c0:68:2b:bc:50:71:
+         66:a8:cd:00:ca:84:c8:b8:1e:0c:63:14:00:5f:da:47:8a:57:
+         d6:96:39:07:4d:ed:e0:c3:5a:d7:12:28:ce:03:3b:76:1e:23:
+         6a:13:90:81:05:63:24:97:29:37:12:28:5c:70:94:54:7d:d3:
+         ef:25:0c:58:58:a6:24:49:b0:56:bd:de:0a:fc:e8:8b:df:61:
+         8e:cf:65:24:04:49:18:4a:18:62:dc:d3:43:ee:c1:0b:a3:2e:
+         b3:02:97:c0:55:d7:ca:56:58:af:88:71:7e:0d:1c:2a:cb:d7:
+         95:3f:7a:64:ce:f4:64:be:56:2a:a0:f7:f6:69:f8:da:85:02:
+         f5:4c:5c:b5:da:7e:32:0e:4f:d1:dd:45:1c:11:fb:6f:2d:ec:
+         46:28:33:74:9a:4d:a7:b2:77:b8:8c:2c:ed:a0:6a:00:d7:53:
+         3f:59:3a:8c
+-----BEGIN CERTIFICATE-----
+MIIDqTCCApGgAwIBAgIBATANBgkqhkiG9w0BAQsFADBFMRIwEAYDVQQKEwlkZXZv
+bG8gQUcxDzANBgNVBAcTBkFhY2hlbjELMAkGA1UEBhMCREUxETAPBgNVBAMTCGRl
+bG9zIENBMB4XDTE4MDcxMzExMTMxN1oXDTIzMDcxMjExMTMxN1owODELMAkGA1UE
+BhMCREUxEjAQBgNVBAoTCWRldm9sbyBBRzEVMBMGA1UEAxMMZGVsb3MgQ2xpZW50
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxH6VQz3dInfeNTyh/Zhe
+kTwitFSgVrNC+JNnSi9xOfPBkO9o8KaRMcNURbXzTd92/DFe6mROfVR7A4G6BUlO
+OvOVMCWBOw50M2La97HsOhdu42sewpsqh5krnlyh2KkT9/GWv2CYD6dbbM5W3ewW
+nKeBUHCPEGrvYvOFRh7EpSpMO0Vp9OHaxQlKhIhbZ+XLOWAtCRYH4iFYuKhylo09
+oTE2/aiKL86cuKQzQptsU8g1NxevqD3KTcwRmZ2TA07BPy4YxiftIZrnsWmimSqE
+gUOYmK/RO6/oV5pXbP2FUuAIygRE5nAbD1MgN07cS6eW/pEvs9zEbv4fJ8kz8IPL
+TQIDAQABo4GwMIGtMAkGA1UdEwQCMAAwHQYDVR0OBBYEFNPru9PEPCWtcKcHDE8W
+3niggeabMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDAjBfBgNVHSME
+WDBWoUmkRzBFMRIwEAYDVQQKEwlkZXZvbG8gQUcxDzANBgNVBAcTBkFhY2hlbjEL
+MAkGA1UEBhMCREUxETAPBgNVBAMTCGRlbG9zIENBggkAo3yH/8rfZ5gwDQYJKoZI
+hvcNAQELBQADggEBAFaduwChh085paX02+q2SOLrfehz1b/TLWxea77x5/bbsl3P
+A/yfTtRlCFTE3xylE0cio1bBpVulJ3I/oIPdKKiVMLTuaEXhufTTXMhs6v8clJGu
+X8BoK7xQcWaozQDKhMi4HgxjFABf2keKV9aWOQdN7eDDWtcSKM4DO3YeI2oTkIEF
+YySXKTcSKFxwlFR90+8lDFhYpiRJsFa93gr86IvfYY7PZSQESRhKGGLc00PuwQuj
+LrMCl8BV18pWWK+IcX4NHCrL15U/emTO9GS+Viqg9/Zp+NqFAvVMXLXafjIOT9Hd
+RRwR+28t7EYoM3SaTaeyd7iMLO2gagDXUz9ZOow=
+-----END CERTIFICATE-----
diff --git a/etc/keys/delos-client-key.pem b/etc/keys/delos-client-key.pem
new file mode 100644
index 0000000..9b98d1b
--- /dev/null
+++ b/etc/keys/delos-client-key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDEfpVDPd0id941
+PKH9mF6RPCK0VKBWs0L4k2dKL3E588GQ72jwppExw1RFtfNN33b8MV7qZE59VHsD
+gboFSU4685UwJYE7DnQzYtr3sew6F27jax7CmyqHmSueXKHYqRP38Za/YJgPp1ts
+zlbd7Bacp4FQcI8Qau9i84VGHsSlKkw7RWn04drFCUqEiFtn5cs5YC0JFgfiIVi4
+qHKWjT2hMTb9qIovzpy4pDNCm2xTyDU3F6+oPcpNzBGZnZMDTsE/LhjGJ+0hmuex
+aaKZKoSBQ5iYr9E7r+hXmlds/YVS4AjKBETmcBsPUyA3TtxLp5b+kS+z3MRu/h8n
+yTPwg8tNAgMBAAECggEBAJPfTyUTYV+XJbqarq3SBRj3UIa1SRT2QugexhSmL2eV
+cY5JHYg9UfdJMBpmG3v3N+wCm5N5eTgIY6r37a4cxKrItPVOxDpVXk1tj6voUgZF
+rEWpT7TUYOU6+ABtZb9PPp/RR8kuQEFHiR4RCn5oNXwe8so+auvIDe9BpIJolURV
+hM0hbbgohi8RuXMB/I6IlpMBDKq29Zkdh4wIzqfNuhcVmBlDrIr0nrq2yZm8kVIQ
+jDaRX4VP6I5JWkAlQcq470J8n/e86pv03aVqPNk5OwV4v8AlXDfT+9iZyYC3zkF+
+FB7M+6Y2hwkuiqXsxMP8+0nrmGat3PkjvuVvrAZP8QECgYEA+4oWzGJrgTM3TdNT
+4gPzb3FIgk1+gcP4jKx55NgQqqtWrqd4Z5C5DBpLvT+NzNFfaF+UpYn8i+jAf8TL
+tu5SQPfpoEkZ3UNd0Iz+xAf07rKrTf0lz1jbbrGlnRkbRvEXV4e6UPjmxpsu87sI
+aoWgk2SrTCTFWUifQwfrnolKg8UCgYEAx/qbZUGfbSvgpIK4kQ6Ljuvjg3jtBY6M
+84eMzQZNOd1lr6qhN+5EEFoiH83JVy4wANXdCJat93A0l+LbkQFfXHdf3T8THaZZ
+XETj8Zvuw3MOB0qUsraFpGUbSxyGRY8bQYg193t/i1nTwxKOZJCTdFi1v+s+bs8q
+NNCvcSmfOekCgYEAig26/4fQ2wNCCiu/MR/b/sEc+68OjKgDBSowaGIRm6oYFBmE
+IssyVKsmAIMeD1imVYGH8ubtvdgLttRKvmbErDWker1EPcUYezq3JN39FvjmvhH/
+K3LoVDOZ4sQBzYjKt9adco15E23echSnxNb8T4kD3vGbgqoyBrcVIVjWlcUCgYEA
+rOBhm/xJ5SesUKtNAOFRFiGoEgzk4gvkn9aLiuYqtp5FfMIGEwLgRj6VB2dv6fTc
+vKwlI3qXM7QFU1RjOYy1MotkDTCsxtH6qEBJyaFinAYHl5gKyh/tkjtxh9JF5TYc
+et9Uv/g8P2xNG3McM6WkQ004+YtU8pgWxYeuUyaHJpkCgYAkKvPbmryq6ZkvpJi0
+M+B6DES2cI0AW7xpdpO7NaTCC/lb5gbXVI6cmk14MwEC7kA1BquG1x73r9SYVpem
+5qT4ROvhmtONM0Rh8CI6h7B+FRMu/XIQ+rST/46XqKpcolC74l7aiLvb5X7X4T0X
+B37Ttxbwg5koW49xtEnClRqXXw==
+-----END PRIVATE KEY-----
diff --git a/etc/keys/fw_pub_key.pem b/etc/keys/fw_pub_key.pem
new file mode 100644
index 0000000..ba1a74b
--- /dev/null
+++ b/etc/keys/fw_pub_key.pem
@@ -0,0 +1,14 @@
+-----BEGIN PUBLIC KEY-----
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6L/vXAr0V4JEhQGACaP4
+kmmDpmuNkllZwiRFgKFu3opMVyfTbXnGL48ECHNh5JHHggD4VOAjw/t/PeRZZh6m
+neaoa+T1P7Fe6Rm4r1JlBCpCfUgfLnCjCBva+bSpeNl+0BjC6+2XH9XzZw21TmhL
+W4PXmRKFohDSEt+LUwG0KiggaMaP17Lrx0Z8uBzwse9PiOR0oahcfckzh8ZJT/jb
+3cAiOMXF6bBar9B477+RoWKjG4lujVmRRDmAq/5T3L+g8ATAXAJjof/MMhnw217o
+09M8hREQBfFuJd8GQLiM4J+2gAP/4ZG5cEH4O8dxNB6U3woVytr/GroehaHlz8ia
+bORDVeJ3gD4b3HlX+wlodGJl8lt44i/P94GZEqw6NwOnQ2OZEi0C/vl9iZ41cp+v
+PHnQtp21dy6uUr4MEplKxZ6KTSX9ev3sNBSbFLzNuYrRMRGTnj6ljgDvUB+Nc66/
+heuPteyrfIy3xVpIUk99wvgKieqhnZQ47RTP9VlagHA39ph80Ur/5mHKILHzFB4I
+Ax47PUDISQbtbBRBdLK7w+yPzz/qGTIoiOGdcaHHm513Gk4fzlK2XCPXDX8ab11T
+IUMY+LuY/8QRAXj+/p6lZRvH3dcbHpN/57weshfaDb2NDrZX3UtVNDR4oaYoBkMY
+61sh1wrznVJRdkOiq+xe58UCAwEAAQ==
+-----END PUBLIC KEY-----
diff --git a/etc/migration/2.0.0To2.1.0/00-upgrade b/etc/migration/2.0.0To2.1.0/00-upgrade
new file mode 100755
index 0000000..a4ef602
--- /dev/null
+++ b/etc/migration/2.0.0To2.1.0/00-upgrade
@@ -0,0 +1,13 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v2.0.0 to v2.1.0"
+
+$UCI_TOOL -q get wireless.radio0.acs_chanlist || { 
+    $UCI_TOOL add_list wireless.radio0.acs_chanlist=36-112
+    $UCI_TOOL add_list wireless.radio0.acs_chanlist=132-140
+}
+
+[ "$($UCI_TOOL changes delos | wc -l)" = "0" ] || $UCI_TOOL commit wireless
+exit 0
+
diff --git a/etc/migration/2.1.0To2.0.0/00-downgrade b/etc/migration/2.1.0To2.0.0/00-downgrade
new file mode 100755
index 0000000..e1b1e89
--- /dev/null
+++ b/etc/migration/2.1.0To2.0.0/00-downgrade
@@ -0,0 +1,11 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "downgrade from v2.1.0 to v2.0.0"
+
+$UCI_TOOL -q get wireless.radio0.acs_chanlist && { 
+    $UCI_TOOL del wireless.radio0.acs_chanlist
+}
+
+[ "$($UCI_TOOL changes delos | wc -l)" = "0" ] || $UCI_TOOL commit wireless
+exit 0
diff --git a/etc/migration/2.1.0To2.2.2/00-upgrade b/etc/migration/2.1.0To2.2.2/00-upgrade
new file mode 100755
index 0000000..b1a2e9c
--- /dev/null
+++ b/etc/migration/2.1.0To2.2.2/00-upgrade
@@ -0,0 +1,16 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+. /lib/functions.sh
+
+wireless_change_chiper() {
+       local cfg="$1"
+       config_get encryption "$cfg" encryption
+       [ "$encryption" = "psk-mixed" ] && uci_set wireless "$cfg" encryption "psk-mixed+tkip+ccmp"
+}
+
+$LOG_TOOL "upgrade from v2.1.0 to v2.2.2"
+config_load wireless
+config_foreach wireless_change_chiper wifi-iface
+
+[ "$($UCI_TOOL changes wireless | wc -l)" = "0" ] || $UCI_TOOL commit wireless
+exit 0
diff --git a/etc/migration/2.2.2To2.1.0/00-downgrade b/etc/migration/2.2.2To2.1.0/00-downgrade
new file mode 100755
index 0000000..f91ec84
--- /dev/null
+++ b/etc/migration/2.2.2To2.1.0/00-downgrade
@@ -0,0 +1,17 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+. /lib/functions.sh
+
+wireless_change_chiper() {
+       local cfg="$1"
+       config_get encryption "$cfg" encryption
+       [ "$encryption" = "psk-mixed+tkip+ccmp" ] && uci_set wireless "$cfg" encryption "psk-mixed"
+}
+
+$LOG_TOOL "downgrade from v2.2.2 to v2.1.0"
+config_load wireless
+config_foreach wireless_change_chiper wifi-iface
+
+[ "$($UCI_TOOL changes wireless | wc -l)" = "0" ] || $UCI_TOOL commit wireless
+exit 0
+~               
diff --git a/etc/migration/2.2.2To2.3.0/00-upgrade b/etc/migration/2.2.2To2.3.0/00-upgrade
new file mode 100755
index 0000000..d5c74b8
--- /dev/null
+++ b/etc/migration/2.2.2To2.3.0/00-upgrade
@@ -0,0 +1,96 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v2.2.2 to v2.3.0"
+
+. /lib/functions.sh
+
+# Create a config for socketman
+if [ ! -f /etc/config/socketman ]; then
+	touch /etc/config/socketman
+	$UCI_TOOL -q set socketman.service=service
+	$UCI_TOOL -q set socketman.service.disabled='1'
+	$UCI_TOOL commit socketman
+fi
+
+# Fix wrong auth option in wds bridge with radius auth (must be upper case)
+fix_auth() {
+	local config="$1"
+	local mode auth
+	config_get mode "$config" mode
+	config_get auth "$config" auth
+	[ "$mode" = "sta" ] && [ -n "$auth" ] && $UCI_TOOL -q set wireless."$config".auth="$(echo "$auth" | tr a-z A-Z)"
+}
+# Fix broken configuration for WDS bridge (
+fix_wds_bridge() {
+	local config="$1"
+	local mode device
+	config_get mode "$config" mode
+	config_get device "$config" device
+	[ "$mode" = "ap" ] && $UCI_TOOL -q set wireless."$config".wds="1"
+	[ "$device" = "radio0" ] && $UCI_TOOL -q delete wireless."$config".ieee80211w
+}
+config_load wireless
+config_foreach fix_auth wifi-iface
+config_foreach fix_wds_bridge wifi-iface
+$UCI_TOOL commit wireless
+
+
+# disable multicast_querier for all bridges (default enabled by netifd)
+fix_bridge() {
+	local config="$1"
+	local type
+	config_get type "$config" type
+	[ "$type" = "bridge" ] && $UCI_TOOL -q set network."$config".multicast_querier=0
+}
+config_load network
+config_foreach fix_bridge interface
+$UCI_TOOL commit network
+
+# increase default log buffer size and log to file
+increase_log_size() {
+    local config="$1"
+    $UCI_TOOL -q set system."$config".log_buffer_size=512
+    $UCI_TOOL -q set system."$config".log_type=circular_file
+    $UCI_TOOL -q set system."$config".log_webui=/www/app/components/status/logs/log
+}
+config_load system
+config_foreach increase_log_size system
+$UCI_TOOL commit system
+
+# led names for APs
+led_sysfs() {
+	local config="$1"
+	local sysfs
+	local new
+	config_get sysfs "$config" sysfs
+	case "$sysfs" in
+	ew7479wac*)
+		new=dvl1200e
+		;;
+	ew7679wac*)
+		new=dvl1750e
+		;;
+	ew7479wic*)
+		new=dvl1200i
+		;;
+	ew7679wic*)
+		new=dvl1750i
+		;;
+	ew7679cap*)
+		new=dvl1750c
+		;;
+	ew7679oap*)
+		new=dvl1750x
+		;;
+	*)
+		return
+		;;
+	esac
+	$UCI_TOOL -q set system."$config".sysfs="$new:${sysfs#*:}"
+}
+config_load system
+config_foreach led_sysfs led
+$UCI_TOOL commit system
+
+exit 0
diff --git a/etc/migration/2.3.0To2.2.2/00-downgrade b/etc/migration/2.3.0To2.2.2/00-downgrade
new file mode 100755
index 0000000..031d9c3
--- /dev/null
+++ b/etc/migration/2.3.0To2.2.2/00-downgrade
@@ -0,0 +1,65 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "downgrade from v2.3.0 to v2.2.2"
+
+. /lib/functions.sh
+
+# if socketman was enabled, we need to do a factory reset
+local smd
+config_load socketman
+config_get smd service disabled
+
+if [ "$smd" != "1" ]; then
+	rm -rf /overlay/upper/*
+	reboot
+	exit 0
+fi
+
+# remove multicast_querier option again
+unfix_bridge() {
+	local config="$1"
+	local type
+	config_get type "$config" type
+	[ "$type" = "bridge" ] && $UCI_TOOL -q delete network."$config".multicast_querier
+}
+config_load network
+config_foreach unfix_bridge interface
+$UCI_TOOL commit network
+
+# led names for APs
+led_sysfs() {
+	local config="$1"
+	local sysfs
+	local new
+	config_get sysfs "$config" sysfs
+	case "$sysfs" in
+	dvl1200e*)
+		new=ew7479wac
+		;;
+	dvl1750e*)
+		new=ew7679wac
+		;;
+	dvl1200i*)
+		new=ew7479wic
+		;;
+	dvl1750i*)
+		new=ew7679wic
+		;;
+	dvl1750c*)
+		new=ew7679cap
+		;;
+	dvl1750x*)
+		new=ew7679oap
+		;;
+	*)
+		return
+		;;
+	esac
+	$UCI_TOOL -q set system."$config".sysfs="$new:${sysfs#*:}"
+}
+config_load system
+config_foreach led_sysfs led
+$UCI_TOOL commit system
+
+exit 0
diff --git a/etc/migration/2.3.0To3.1.0/00-upgrade b/etc/migration/2.3.0To3.1.0/00-upgrade
new file mode 100755
index 0000000..c267bd1
--- /dev/null
+++ b/etc/migration/2.3.0To3.1.0/00-upgrade
@@ -0,0 +1,15 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v2.3.0 to v3.1.0"
+
+. /lib/functions.sh
+
+. /lib/ar71xx.sh
+BOARD=$(ar71xx_board_name)
+[ "$BOARD" = "dlan-pro-1200-ac" ] && (
+    . /lib/migration/plc-pib.sh
+    migrate_pib_wifiac_1u
+)
+
+exit 0
diff --git a/etc/migration/3.1.0To2.3.0/00-downgrade b/etc/migration/3.1.0To2.3.0/00-downgrade
new file mode 100755
index 0000000..969f7a5
--- /dev/null
+++ b/etc/migration/3.1.0To2.3.0/00-downgrade
@@ -0,0 +1,15 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "downgrade from v3.1.0 to v2.3.0"
+
+. /lib/functions.sh
+
+. /lib/ar71xx.sh
+BOARD=$(ar71xx_board_name)
+[ "$BOARD" = "dlan-pro-1200-ac" ] && (
+    . /lib/migration/plc-pib.sh
+    migrate_pib_wifiac_1d
+)
+
+exit 0
diff --git a/etc/migration/3.1.0To3.2.0/00-upgrade b/etc/migration/3.1.0To3.2.0/00-upgrade
new file mode 100755
index 0000000..4680a76
--- /dev/null
+++ b/etc/migration/3.1.0To3.2.0/00-upgrade
@@ -0,0 +1,18 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v3.1.0 to v3.2.0"
+
+. /lib/functions.sh
+
+#disable dnsmasq address pools
+disable_dhcp() {
+	if [ "$($UCI_TOOL -q get network.lan)" = "dhcp" ]; then
+		$UCI_TOOL -q set network.lan.ignore=1
+		$UCI_TOOL commit dhcp
+	fi
+}
+
+disable_dhcp
+
+exit 0
diff --git a/etc/migration/3.2.0To3.1.0/00-downgrade b/etc/migration/3.2.0To3.1.0/00-downgrade
new file mode 100755
index 0000000..486d46a
--- /dev/null
+++ b/etc/migration/3.2.0To3.1.0/00-downgrade
@@ -0,0 +1,10 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "downgrade from v3.2.0 to v3.1.0"
+
+. /lib/functions.sh
+
+# do not reenable dnsmasq address pools on downgrade!
+
+exit 0
diff --git a/etc/migration/3.2.0To4.0.0/00-upgrade b/etc/migration/3.2.0To4.0.0/00-upgrade
new file mode 100755
index 0000000..10cedd5
--- /dev/null
+++ b/etc/migration/3.2.0To4.0.0/00-upgrade
@@ -0,0 +1,32 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v3.2.0 to v4.0.0"
+
+. /lib/functions.sh
+
+. /lib/ar71xx.sh
+
+# no cloud, do factory reset if enabled for a non-cloud config
+[ "$(uci get socketman.service.disabled)" != "1" ] && {
+	firstboot -y -r
+	exit 0
+}
+rm -f /etc/config/socketman
+
+BOARD=$(ar71xx_board_name)
+[ "$BOARD" = "dlan-pro-1200-ac" ] && (
+    # due to upgrade, override the existing file from saved config with the new one
+    cp /rom/lib/migration/plc-pib.sh /lib/migration/plc-pib.sh
+    . /lib/migration/plc-pib.sh
+    migrate_pib_wifiac_2u
+)
+
+[ "$BOARD" = "dlan-pro-1200-n" ] && (
+    # due to upgrade, override the existing file from saved config with the new one
+    cp /rom/lib/migration/plc-pib.sh /lib/migration/plc-pib.sh
+    . /lib/migration/plc-pib.sh
+    migrate_pib_wifin_1u
+)
+
+exit 0
diff --git a/etc/migration/4.0.0To3.2.0/00-downgrade b/etc/migration/4.0.0To3.2.0/00-downgrade
new file mode 100755
index 0000000..f6ee2ea
--- /dev/null
+++ b/etc/migration/4.0.0To3.2.0/00-downgrade
@@ -0,0 +1,26 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "downgrade from v4.0.0 to v3.2.0"
+
+. /lib/functions.sh
+
+. /lib/ar71xx.sh
+
+touch /etc/config/socketman
+uci set socketman.service=service
+uci set socketman.service.disabled=1
+uci commit socketman
+
+BOARD=$(ar71xx_board_name)
+[ "$BOARD" = "dlan-pro-1200-ac" ] && (
+    . /lib/migration/plc-pib.sh
+    migrate_pib_wifiac_2d
+)
+
+[ "$BOARD" = "dlan-pro-1200-n" ] && (
+    . /lib/migration/plc-pib.sh
+    migrate_pib_wifin_1d
+)
+
+exit 0
diff --git a/etc/migration/4.0.0To5.0.0/00-upgrade b/etc/migration/4.0.0To5.0.0/00-upgrade
new file mode 100755
index 0000000..3d56f28
--- /dev/null
+++ b/etc/migration/4.0.0To5.0.0/00-upgrade
@@ -0,0 +1,6 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v4.0.0 to v5.0.0"
+
+exit 0
diff --git a/etc/migration/5.0.0To5.0.1/00-upgrade b/etc/migration/5.0.0To5.0.1/00-upgrade
new file mode 100755
index 0000000..6f2def8
--- /dev/null
+++ b/etc/migration/5.0.0To5.0.1/00-upgrade
@@ -0,0 +1,28 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+. /lib/ar71xx.sh
+
+$LOG_TOOL "upgrade from v5.0.0 to v5.0.1"
+
+case "$(ar71xx_board_name)" in
+dlan-pro-1200-ac|\
+dlan-pro-1200-n)
+    [ -f "/etc/config/ghn" ] && {
+        uci set ghn.ghn.interface="eth0"
+        uci commit ghn
+    }
+    [ -f "/etc/config/plc" ] && {
+        uci set plc.plc.interface="eth0"
+        uci set plc.config.PlcIfname="eth0"
+        uci commit plc
+    }
+    uci set network.lan.ifname="eth0"
+    uci set network.@switch[0].enable_vlan="0"
+    uci set network.@switch_vlan[0].vlan="0"
+    uci set network.@switch_vlan[0].ports="0 2 3 4"
+    uci del network.@switch_vlan[1]
+    uci commit network
+    ;;
+esac
+
+exit 0
diff --git a/etc/migration/5.0.1To5.0.2/00-upgrade b/etc/migration/5.0.1To5.0.2/00-upgrade
new file mode 100755
index 0000000..f348138
--- /dev/null
+++ b/etc/migration/5.0.1To5.0.2/00-upgrade
@@ -0,0 +1,12 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+. /lib/ar71xx.sh
+
+$LOG_TOOL "upgrade from v5.0.1 to v5.0.2"
+
+[ -f "/etc/config/tr069_upnp" ] && {
+    uci set tr069_upnp.upnp.loglevel="0"
+    uci commit tr069_upnp
+}
+
+exit 0
diff --git a/etc/migration/5.0.2To5.0.3/00-upgrade b/etc/migration/5.0.2To5.0.3/00-upgrade
new file mode 100755
index 0000000..a525a21
--- /dev/null
+++ b/etc/migration/5.0.2To5.0.3/00-upgrade
@@ -0,0 +1,40 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+. /lib/ar71xx.sh
+
+$LOG_TOOL "upgrade from v5.0.2 to v5.0.3"
+
+SON_CFG_OLD=wifi_son.son
+SON_CFG_NEW=wireless.son
+
+BOARD="$(ar71xx_board_name)"
+
+case "$BOARD" in
+    dlan-pro-1200-ac|\
+    dlan-pro-1200-n|\
+    dlan-1000-ac|\
+    dlan-550-wifi)
+        uci set $SON_CFG_NEW="son"
+        VALUE=$(uci get $SON_CFG_OLD.enabled)
+        [ -n "$VALUE" ] && uci set $SON_CFG_NEW.enabled="$VALUE"
+        VALUE=$(uci get $SON_CFG_OLD.airtimefairness)
+        [ -n "$VALUE" ] && uci set $SON_CFG_NEW.airtimefairness="$VALUE"
+        if [ "$BOARD" = "dlan-550-wifi" -o "$BOARD" = "dlan-pro-1200-n" ]; then
+            uci set $SON_CFG_NEW.bandsteering="0"
+        else
+            VALUE=$(uci get $SON_CFG_OLD.bandsteering)
+            [ -n "$VALUE" ] && uci set $SON_CFG_NEW.bandsteering="$VALUE"
+        fi
+        VALUE=$(uci get $SON_CFG_OLD.ieee80211k)
+        [ -n "$VALUE" ] && uci set $SON_CFG_NEW.ieee80211k="$VALUE"
+        ALUE=$(uci get $SON_CFG_OLD.ieee80211v)
+        [ -n "$VALUE" ] && uci set $SON_CFG_NEW.ieee80211v="$VALUE"
+        VALUE=$(uci get $SON_CFG_OLD.ieee80211r)
+        [ -n "$VALUE" ] && uci set $SON_CFG_NEW.ieee80211r="$VALUE"
+        uci commit wireless
+        # remove old config
+        rm /etc/config/wifi_son
+        ;;
+esac
+
+exit 0
diff --git a/etc/migration/5.0.3To5.0.4/00-upgrade b/etc/migration/5.0.3To5.0.4/00-upgrade
new file mode 100755
index 0000000..e367151
--- /dev/null
+++ b/etc/migration/5.0.3To5.0.4/00-upgrade
@@ -0,0 +1,26 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v5.0.3 to v5.0.4"
+
+. /lib/functions.sh
+
+migrate_11r() {
+	uci_remove wireless $1 mobility_domain
+	uci_remove wireless $1 r0_key_lifetime
+	uci_remove wireless $1 reassociation_deadline
+	uci_remove wireless $1 ft_over_ds
+	uci_remove wireless $1 ft_psk_generate_local
+	uci_remove wireless $1 pmk_r1_push
+	uci_remove wireless $1 nasid
+	uci_remove wireless $1 nasid2
+	uci_remove wireless $1 ap_macaddr
+	uci_remove wireless $1 ap2_macaddr
+	uci_remove wireless $1 ap2_r1_key_holder
+}
+
+config_load wireless
+config_foreach migrate_11r wifi-iface
+uci commit wireless
+
+exit 0
diff --git a/etc/migration/5.0.4To5.1.0/00-upgrade b/etc/migration/5.0.4To5.1.0/00-upgrade
new file mode 100755
index 0000000..30c205c
--- /dev/null
+++ b/etc/migration/5.0.4To5.1.0/00-upgrade
@@ -0,0 +1,54 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v5.0.4 to v5.1.0"
+
+. /lib/functions.sh
+
+# PIB migration for 75x0
+migrate_pib_2_6_0_01() (
+    [ -e /lib/firmware/plc/$board/fwconfig ] && . /lib/firmware/plc/$board/fwconfig || exit 1
+
+    USR_PIB=$PLCFW_PATH/user.pib
+    NEW_PIB=$PLCFW_PATH/user.pib.tmp
+    TMP_PIB=/tmp/user.pib
+    eval ORG_PIB="\"$PLCFW_PATH/\${PLCFW_PIB_$(uci_get_state delos baptization MT):-$PLCFW_PIB}\""
+
+    # validate new user PIB and user PIB
+    chkpib -q "$NEW_PIB" && mv "$NEW_PIB" "$USR_PIB"
+    chkpib -q "$USR_PIB" || {
+        rm -f "$USR_PIB"
+        exit 0
+    }
+    # migrate only valid user PIB
+
+    move_data() { # fromfile tofile offset type [size]
+        setpib "$2" "$3" "$4" "$(getpib "$1" "$3" "$4" ${5:+"$5"})"
+    }
+
+    cp "$USR_PIB" "$TMP_PIB"
+
+    # copy changed parts from new PIB template
+    # prescalers
+    move_data "$ORG_PIB" "$TMP_PIB" 0x1158 data 0x5bc
+    move_data "$ORG_PIB" "$TMP_PIB" 0x1714 data 0x5bc
+
+    mv "$TMP_PIB" "$USR_PIB"
+)
+
+if [ -f /lib/ar71xx.sh ]; then
+    PLATFORM=ar71xx
+    . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+    PLATFORM=ipq806x
+    . /lib/ipq806x.sh
+fi
+board=$(${PLATFORM}_board_name)
+
+case "$board" in
+dlan-pro-1200-ac|dlan-1000-ac|dlan-pro-1200-n)
+    migrate_pib_2_6_0_01
+    ;;
+esac
+
+exit 0
diff --git a/etc/migration/5.1.0To5.1.1/00-upgrade b/etc/migration/5.1.0To5.1.1/00-upgrade
new file mode 100755
index 0000000..80b57de
--- /dev/null
+++ b/etc/migration/5.1.0To5.1.1/00-upgrade
@@ -0,0 +1,16 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v5.1.0 to v5.1.1"
+
+. /lib/functions.sh
+
+iface_add_main() {
+    [ "$(config_get "$1" dvl_guest)" = 1 ] || uci_set wireless "$1" dvl_main 1
+}
+
+config_load wireless
+config_foreach iface_add_main wifi-iface
+uci_commit wireless
+
+exit 0
diff --git a/etc/migration/5.1.1To5.1.2/00-upgrade b/etc/migration/5.1.1To5.1.2/00-upgrade
new file mode 100755
index 0000000..2afd5b2
--- /dev/null
+++ b/etc/migration/5.1.1To5.1.2/00-upgrade
@@ -0,0 +1,15 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v5.1.1 to v5.1.2"
+
+. /lib/functions.sh
+. /lib/ar71xx.sh
+
+config_load ghn
+
+uci set ghn.ghn.powersave=1
+
+uci commit ghn
+
+exit 0
diff --git a/etc/migration/5.1.2To5.2.0/00-upgrade b/etc/migration/5.1.2To5.2.0/00-upgrade
new file mode 100755
index 0000000..b804493
--- /dev/null
+++ b/etc/migration/5.1.2To5.2.0/00-upgrade
@@ -0,0 +1,7 @@
+#!/bin/sh
+. $MIGTEST/lib/migration/migration.sh
+
+$LOG_TOOL "upgrade from v5.1.2 to v5.2.0"
+
+. /rom/etc/uci-defaults/00_20_delos-customization
+
diff --git a/etc/modules-boot.d/30-gpio-button-hotplug b/etc/modules-boot.d/30-gpio-button-hotplug
new file mode 120000
index 0000000..4bd3e4c
--- /dev/null
+++ b/etc/modules-boot.d/30-gpio-button-hotplug
@@ -0,0 +1 @@
+../modules.d/30-gpio-button-hotplug
\ No newline at end of file
diff --git a/etc/modules-boot.d/60-leds-gpio b/etc/modules-boot.d/60-leds-gpio
new file mode 120000
index 0000000..2e69cd1
--- /dev/null
+++ b/etc/modules-boot.d/60-leds-gpio
@@ -0,0 +1 @@
+../modules.d/60-leds-gpio
\ No newline at end of file
diff --git a/etc/modules.d/09-llc b/etc/modules.d/09-llc
new file mode 100644
index 0000000..66a5e63
--- /dev/null
+++ b/etc/modules.d/09-llc
@@ -0,0 +1,3 @@
+llc
+p8022
+psnap
diff --git a/etc/modules.d/10-stp b/etc/modules.d/10-stp
new file mode 100644
index 0000000..43b3ab6
--- /dev/null
+++ b/etc/modules.d/10-stp
@@ -0,0 +1 @@
+stp
diff --git a/etc/modules.d/11-bridge b/etc/modules.d/11-bridge
new file mode 100644
index 0000000..7096907
--- /dev/null
+++ b/etc/modules.d/11-bridge
@@ -0,0 +1 @@
+bridge
diff --git a/etc/modules.d/30-gpio-button-hotplug b/etc/modules.d/30-gpio-button-hotplug
new file mode 100644
index 0000000..d3c7b95
--- /dev/null
+++ b/etc/modules.d/30-gpio-button-hotplug
@@ -0,0 +1 @@
+gpio-button-hotplug
diff --git a/etc/modules.d/30-qca-ssdk-hnat b/etc/modules.d/30-qca-ssdk-hnat
new file mode 100644
index 0000000..89986ed
--- /dev/null
+++ b/etc/modules.d/30-qca-ssdk-hnat
@@ -0,0 +1 @@
+qca-ssdk
diff --git a/etc/modules.d/40-qca-hyfi-qdisc b/etc/modules.d/40-qca-hyfi-qdisc
new file mode 100644
index 0000000..36348b1
--- /dev/null
+++ b/etc/modules.d/40-qca-hyfi-qdisc
@@ -0,0 +1 @@
+hyfi_qdisc
diff --git a/etc/modules.d/42-ip6tables b/etc/modules.d/42-ip6tables
new file mode 100644
index 0000000..f18c68c
--- /dev/null
+++ b/etc/modules.d/42-ip6tables
@@ -0,0 +1,6 @@
+ip6table_filter
+ip6table_mangle
+ip6table_raw
+nf_log_ipv6
+ip6t_REJECT
+nf_reject_ipv6
diff --git a/etc/modules.d/50-ledtrig-delos-wifi-leds b/etc/modules.d/50-ledtrig-delos-wifi-leds
new file mode 100644
index 0000000..cc391d5
--- /dev/null
+++ b/etc/modules.d/50-ledtrig-delos-wifi-leds
@@ -0,0 +1 @@
+ledtrig-wifiled
diff --git a/etc/modules.d/50-ledtrig-gpio b/etc/modules.d/50-ledtrig-gpio
new file mode 100644
index 0000000..35f41d5
--- /dev/null
+++ b/etc/modules.d/50-ledtrig-gpio
@@ -0,0 +1 @@
+ledtrig-gpio
diff --git a/etc/modules.d/51-qca-hyfi-bridge b/etc/modules.d/51-qca-hyfi-bridge
new file mode 100644
index 0000000..03d0fd7
--- /dev/null
+++ b/etc/modules.d/51-qca-hyfi-bridge
@@ -0,0 +1 @@
+hyfi-bridging
diff --git a/etc/modules.d/60-leds-gpio b/etc/modules.d/60-leds-gpio
new file mode 100644
index 0000000..fef2e53
--- /dev/null
+++ b/etc/modules.d/60-leds-gpio
@@ -0,0 +1 @@
+leds-gpio
diff --git a/etc/modules.d/ebtables b/etc/modules.d/ebtables
new file mode 100644
index 0000000..fd0a1ce
--- /dev/null
+++ b/etc/modules.d/ebtables
@@ -0,0 +1,13 @@
+ebtables
+ebtable_broute
+ebtable_filter
+ebtable_nat
+ebt_802_3
+ebt_among
+ebt_limit
+ebt_mark_m
+ebt_pkttype
+ebt_stp
+ebt_vlan
+ebt_mark
+ebt_redirect
diff --git a/etc/modules.d/ebtables-ipv4 b/etc/modules.d/ebtables-ipv4
new file mode 100644
index 0000000..d0be5ab
--- /dev/null
+++ b/etc/modules.d/ebtables-ipv4
@@ -0,0 +1,5 @@
+ebt_arp
+ebt_ip
+ebt_arpreply
+ebt_dnat
+ebt_snat
diff --git a/etc/modules.d/ebtables-ipv6 b/etc/modules.d/ebtables-ipv6
new file mode 100644
index 0000000..cde2e12
--- /dev/null
+++ b/etc/modules.d/ebtables-ipv6
@@ -0,0 +1 @@
+ebt_ip6
diff --git a/etc/modules.d/ipt-conntrack b/etc/modules.d/ipt-conntrack
new file mode 100644
index 0000000..887c04c
--- /dev/null
+++ b/etc/modules.d/ipt-conntrack
@@ -0,0 +1,4 @@
+xt_state
+iptable_raw
+xt_CT
+xt_conntrack
diff --git a/etc/modules.d/ipt-core b/etc/modules.d/ipt-core
new file mode 100644
index 0000000..197ff5e
--- /dev/null
+++ b/etc/modules.d/ipt-core
@@ -0,0 +1,16 @@
+xt_tcpudp
+iptable_filter
+iptable_mangle
+xt_limit
+xt_mac
+xt_multiport
+xt_comment
+xt_id
+xt_LOG
+nf_log_common
+nf_log_ipv4
+xt_TCPMSS
+ipt_REJECT
+nf_reject_ipv4
+xt_time
+xt_mark
diff --git a/etc/modules.d/ipt-extra b/etc/modules.d/ipt-extra
new file mode 100644
index 0000000..c3263ea
--- /dev/null
+++ b/etc/modules.d/ipt-extra
@@ -0,0 +1,5 @@
+xt_addrtype
+xt_owner
+xt_physdev
+xt_pkttype
+xt_quota
diff --git a/etc/modules.d/ipt-filter b/etc/modules.d/ipt-filter
new file mode 100644
index 0000000..be4abf5
--- /dev/null
+++ b/etc/modules.d/ipt-filter
@@ -0,0 +1 @@
+xt_string
diff --git a/etc/modules.d/ipt-nat b/etc/modules.d/ipt-nat
new file mode 100644
index 0000000..44991ca
--- /dev/null
+++ b/etc/modules.d/ipt-nat
@@ -0,0 +1,6 @@
+xt_nat
+nf_nat_redirect
+iptable_nat
+ipt_MASQUERADE
+nf_nat_masquerade_ipv4
+xt_REDIRECT
diff --git a/etc/modules.d/lib-crc-ccitt b/etc/modules.d/lib-crc-ccitt
new file mode 100644
index 0000000..07f86e3
--- /dev/null
+++ b/etc/modules.d/lib-crc-ccitt
@@ -0,0 +1 @@
+crc-ccitt
diff --git a/etc/modules.d/lib-textsearch b/etc/modules.d/lib-textsearch
new file mode 100644
index 0000000..760ddbc
--- /dev/null
+++ b/etc/modules.d/lib-textsearch
@@ -0,0 +1,3 @@
+ts_kmp
+ts_bm
+ts_fsm
diff --git a/etc/modules.d/nf-conntrack b/etc/modules.d/nf-conntrack
new file mode 100644
index 0000000..6728778
--- /dev/null
+++ b/etc/modules.d/nf-conntrack
@@ -0,0 +1,4 @@
+nf_conntrack
+nf_conntrack_rtcache
+nf_defrag_ipv4
+nf_conntrack_ipv4
diff --git a/etc/modules.d/nf-conntrack6 b/etc/modules.d/nf-conntrack6
new file mode 100644
index 0000000..9213415
--- /dev/null
+++ b/etc/modules.d/nf-conntrack6
@@ -0,0 +1,2 @@
+nf_defrag_ipv6
+nf_conntrack_ipv6
diff --git a/etc/modules.d/nf-ipt b/etc/modules.d/nf-ipt
new file mode 100644
index 0000000..458bd80
--- /dev/null
+++ b/etc/modules.d/nf-ipt
@@ -0,0 +1,2 @@
+ip_tables
+x_tables
diff --git a/etc/modules.d/nf-ipt6 b/etc/modules.d/nf-ipt6
new file mode 100644
index 0000000..e14bb90
--- /dev/null
+++ b/etc/modules.d/nf-ipt6
@@ -0,0 +1 @@
+ip6_tables
diff --git a/etc/modules.d/nf-nat b/etc/modules.d/nf-nat
new file mode 100644
index 0000000..174f48f
--- /dev/null
+++ b/etc/modules.d/nf-nat
@@ -0,0 +1,2 @@
+nf_nat
+nf_nat_ipv4
diff --git a/etc/modules.d/ppp b/etc/modules.d/ppp
new file mode 100644
index 0000000..892260e
--- /dev/null
+++ b/etc/modules.d/ppp
@@ -0,0 +1 @@
+ppp_async
diff --git a/etc/mtab b/etc/mtab
new file mode 120000
index 0000000..4c0a094
--- /dev/null
+++ b/etc/mtab
@@ -0,0 +1 @@
+/proc/mounts
\ No newline at end of file
diff --git a/etc/odhcp6c.user b/etc/odhcp6c.user
new file mode 100644
index 0000000..595c6d5
--- /dev/null
+++ b/etc/odhcp6c.user
@@ -0,0 +1,42 @@
+#
+# Copyright (C) 2018 devolo AG
+#
+
+# DHCP event happened. it could have added/deleted the default route to the gateway
+# let's look it up and trigger rewrite of guest wifi filter tables when it changed
+
+# get the first default gateway IP address
+GW=$(ip -6 route show default)
+GW=$(echo ${GW#*via} | cut -d ' ' -f 1)
+
+if [ -n "$GW" ]; then
+(
+	# subshell for new trap context
+
+	ping -6 -q -c 1 -w 1 $GW >/dev/null
+	MAC=$(ip -6 neigh show to $GW)
+	MAC=$(echo ${MAC#*lladdr} | cut -d ' ' -f 1)
+
+	TMP=
+	trap '[ -n "$TMP" ] && rm -f "$TMP"; TMP=' EXIT HUP INT QUIT TERM
+	TMP=$(mktemp)
+	cat >$TMP <<-EOF
+	GW6_IP=$GW
+	GW6_MAC=$MAC
+	EOF
+	# if changed:
+	cmp -s /tmp/guestwifi-ipv6 $TMP || {
+		mv $TMP /tmp/guestwifi-ipv6
+		TMP=
+		(
+			. /lib/wifi/delos-wifi/20_delos-guest-wifi
+			set_delos_guestwifi
+		)
+	}
+) else
+	# if removed:
+	rm /tmp/guestwifi-ipv6 2>/dev/null && {
+		. /lib/wifi/delos-wifi/20_delos-guest-wifi
+		set_delos_guestwifi
+	}
+fi
diff --git a/etc/openwrt_release b/etc/openwrt_release
new file mode 100644
index 0000000..d703ccc
--- /dev/null
+++ b/etc/openwrt_release
@@ -0,0 +1,7 @@
+DISTRIB_ID='delos'
+DISTRIB_RELEASE='Chaos Calmer'
+DISTRIB_REVISION='15a464b+r49254'
+DISTRIB_CODENAME='chaos_calmer'
+DISTRIB_TARGET='ar71xx/generic'
+DISTRIB_DESCRIPTION='delos Chaos Calmer 15.05.1'
+DISTRIB_TAINTS='no-all busybox override'
diff --git a/etc/openwrt_version b/etc/openwrt_version
new file mode 100644
index 0000000..03c6984
--- /dev/null
+++ b/etc/openwrt_version
@@ -0,0 +1 @@
+15.05.1
diff --git a/etc/opkg.conf b/etc/opkg.conf
new file mode 100644
index 0000000..d8d3a2d
--- /dev/null
+++ b/etc/opkg.conf
@@ -0,0 +1,4 @@
+dest root /
+dest ram /tmp
+lists_dir ext /var/opkg-lists
+option overlay_root /overlay
diff --git a/etc/opkg/customfeeds.conf b/etc/opkg/customfeeds.conf
new file mode 100644
index 0000000..f130113
--- /dev/null
+++ b/etc/opkg/customfeeds.conf
@@ -0,0 +1,3 @@
+# add your custom package feeds here
+#
+# src/gz example_feed_name http://www.example.com/path/to/files
diff --git a/etc/opkg/distfeeds.conf b/etc/opkg/distfeeds.conf
new file mode 100644
index 0000000..bff411d
--- /dev/null
+++ b/etc/opkg/distfeeds.conf
@@ -0,0 +1,98 @@
+src/gz delos_base http://delos.devolo.net/5.2.1/1200wifiac/packages/base
+src/gz delos_qca http://delos.devolo.net/5.2.1/1200wifiac/packages/qca
+src/gz delos_qca_lib http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_lib
+src/gz delos_athdiag http://delos.devolo.net/5.2.1/1200wifiac/packages/athdiag
+src/gz delos_qca_mcs http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_mcs
+src/gz delos_packages http://delos.devolo.net/5.2.1/1200wifiac/packages/packages
+src/gz delos_wlan_open http://delos.devolo.net/5.2.1/1200wifiac/packages/wlan_open
+src/gz delos_networking http://delos.devolo.net/5.2.1/1200wifiac/packages/networking
+src/gz delos_devolo http://delos.devolo.net/5.2.1/1200wifiac/packages/devolo
+src/gz delos_hyfi http://delos.devolo.net/5.2.1/1200wifiac/packages/hyfi
+src/gz delos_art2 http://delos.devolo.net/5.2.1/1200wifiac/packages/art2
+src/gz delos_nss_host http://delos.devolo.net/5.2.1/1200wifiac/packages/nss_host
+src/gz delos_whc http://delos.devolo.net/5.2.1/1200wifiac/packages/whc
+src/gz delos_ieee1905_security http://delos.devolo.net/5.2.1/1200wifiac/packages/ieee1905_security
+src/gz delos_routing http://delos.devolo.net/5.2.1/1200wifiac/packages/routing
+src/gz delos_shortcut_fe http://delos.devolo.net/5.2.1/1200wifiac/packages/shortcut_fe
+src/gz delos_bluetopia http://delos.devolo.net/5.2.1/1200wifiac/packages/bluetopia
+src/gz delos_luci http://delos.devolo.net/5.2.1/1200wifiac/packages/luci
+src/gz delos_weave http://delos.devolo.net/5.2.1/1200wifiac/packages/weave
+src/gz delos_management http://delos.devolo.net/5.2.1/1200wifiac/packages/management
+src/gz delos_ssdk http://delos.devolo.net/5.2.1/1200wifiac/packages/ssdk
+# src/gz delos_nss http://delos.devolo.net/5.2.1/1200wifiac/packages/nss
+# src/gz delos_nss_cust http://delos.devolo.net/5.2.1/1200wifiac/packages/nss_cust
+# src/gz delos_nss_userspace http://delos.devolo.net/5.2.1/1200wifiac/packages/nss_userspace
+# src/gz delos_ath10k_firmware http://delos.devolo.net/5.2.1/1200wifiac/packages/ath10k_firmware
+# src/gz delos_alljoyn http://delos.devolo.net/5.2.1/1200wifiac/packages/alljoyn
+# src/gz delos_athtestcmd http://delos.devolo.net/5.2.1/1200wifiac/packages/athtestcmd
+# src/gz delos_wapid http://delos.devolo.net/5.2.1/1200wifiac/packages/wapid
+# src/gz delos_qcom_utils_internal http://delos.devolo.net/5.2.1/1200wifiac/packages/qcom_utils_internal
+# src/gz delos_qca_platform_utils http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_platform_utils
+# src/gz delos_apple_homekit http://delos.devolo.net/5.2.1/1200wifiac/packages/apple_homekit
+# src/gz delos_qca_plc http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_plc
+# src/gz delos_sigma_dut_10_4 http://delos.devolo.net/5.2.1/1200wifiac/packages/sigma_dut_10_4
+# src/gz delos_wigig_utils http://delos.devolo.net/5.2.1/1200wifiac/packages/wigig_utils
+# src/gz delos_wigig_firmware http://delos.devolo.net/5.2.1/1200wifiac/packages/wigig_firmware
+# src/gz delos_lte_cm http://delos.devolo.net/5.2.1/1200wifiac/packages/lte_cm
+# src/gz delos_bluetooth http://delos.devolo.net/5.2.1/1200wifiac/packages/bluetooth
+# src/gz delos_zigbee http://delos.devolo.net/5.2.1/1200wifiac/packages/zigbee
+# src/gz delos_thread http://delos.devolo.net/5.2.1/1200wifiac/packages/thread
+# src/gz delos_ioe_bridges http://delos.devolo.net/5.2.1/1200wifiac/packages/ioe_bridges
+# src/gz delos_qca_hk http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_hk
+# src/gz delos_qca_np http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_np
+# src/gz delos_qca_lit http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_lit
+# src/gz delos_csrmesh http://delos.devolo.net/5.2.1/1200wifiac/packages/csrmesh
+# src/gz delos_sigma_dut http://delos.devolo.net/5.2.1/1200wifiac/packages/sigma_dut
+# src/gz delos_qca_wapi http://delos.devolo.net/5.2.1/1200wifiac/packages/qca_wapi
+# src/gz delos_voice_control http://delos.devolo.net/5.2.1/1200wifiac/packages/voice_control
+# src/gz delos_meeami_utils http://delos.devolo.net/5.2.1/1200wifiac/packages/meeami_utils
+# src/gz delos_wdsp http://delos.devolo.net/5.2.1/1200wifiac/packages/wdsp
+src/gz openwrt_base http://delos.devolo.net/5.2.1/ar71xx/packages/base
+src/gz openwrt_qca http://delos.devolo.net/5.2.1/ar71xx/packages/qca
+src/gz openwrt_qca_lib http://delos.devolo.net/5.2.1/ar71xx/packages/qca_lib
+src/gz openwrt_athdiag http://delos.devolo.net/5.2.1/ar71xx/packages/athdiag
+src/gz openwrt_qca_mcs http://delos.devolo.net/5.2.1/ar71xx/packages/qca_mcs
+src/gz openwrt_packages http://delos.devolo.net/5.2.1/ar71xx/packages/packages
+src/gz openwrt_wlan_open http://delos.devolo.net/5.2.1/ar71xx/packages/wlan_open
+src/gz openwrt_networking http://delos.devolo.net/5.2.1/ar71xx/packages/networking
+src/gz openwrt_devolo http://delos.devolo.net/5.2.1/ar71xx/packages/devolo
+src/gz openwrt_hyfi http://delos.devolo.net/5.2.1/ar71xx/packages/hyfi
+src/gz openwrt_art2 http://delos.devolo.net/5.2.1/ar71xx/packages/art2
+src/gz openwrt_nss_host http://delos.devolo.net/5.2.1/ar71xx/packages/nss_host
+src/gz openwrt_whc http://delos.devolo.net/5.2.1/ar71xx/packages/whc
+src/gz openwrt_ieee1905_security http://delos.devolo.net/5.2.1/ar71xx/packages/ieee1905_security
+src/gz openwrt_routing http://delos.devolo.net/5.2.1/ar71xx/packages/routing
+src/gz openwrt_shortcut_fe http://delos.devolo.net/5.2.1/ar71xx/packages/shortcut_fe
+src/gz openwrt_bluetopia http://delos.devolo.net/5.2.1/ar71xx/packages/bluetopia
+src/gz openwrt_luci http://delos.devolo.net/5.2.1/ar71xx/packages/luci
+src/gz openwrt_weave http://delos.devolo.net/5.2.1/ar71xx/packages/weave
+src/gz openwrt_management http://delos.devolo.net/5.2.1/ar71xx/packages/management
+src/gz openwrt_ssdk http://delos.devolo.net/5.2.1/ar71xx/packages/ssdk
+# src/gz openwrt_nss http://delos.devolo.net/5.2.1/ar71xx/packages/nss
+# src/gz openwrt_nss_cust http://delos.devolo.net/5.2.1/ar71xx/packages/nss_cust
+# src/gz openwrt_nss_userspace http://delos.devolo.net/5.2.1/ar71xx/packages/nss_userspace
+# src/gz openwrt_ath10k_firmware http://delos.devolo.net/5.2.1/ar71xx/packages/ath10k_firmware
+# src/gz openwrt_alljoyn http://delos.devolo.net/5.2.1/ar71xx/packages/alljoyn
+# src/gz openwrt_athtestcmd http://delos.devolo.net/5.2.1/ar71xx/packages/athtestcmd
+# src/gz openwrt_wapid http://delos.devolo.net/5.2.1/ar71xx/packages/wapid
+# src/gz openwrt_qcom_utils_internal http://delos.devolo.net/5.2.1/ar71xx/packages/qcom_utils_internal
+# src/gz openwrt_qca_platform_utils http://delos.devolo.net/5.2.1/ar71xx/packages/qca_platform_utils
+# src/gz openwrt_apple_homekit http://delos.devolo.net/5.2.1/ar71xx/packages/apple_homekit
+# src/gz openwrt_qca_plc http://delos.devolo.net/5.2.1/ar71xx/packages/qca_plc
+# src/gz openwrt_sigma_dut_10_4 http://delos.devolo.net/5.2.1/ar71xx/packages/sigma_dut_10_4
+# src/gz openwrt_wigig_utils http://delos.devolo.net/5.2.1/ar71xx/packages/wigig_utils
+# src/gz openwrt_wigig_firmware http://delos.devolo.net/5.2.1/ar71xx/packages/wigig_firmware
+# src/gz openwrt_lte_cm http://delos.devolo.net/5.2.1/ar71xx/packages/lte_cm
+# src/gz openwrt_bluetooth http://delos.devolo.net/5.2.1/ar71xx/packages/bluetooth
+# src/gz openwrt_zigbee http://delos.devolo.net/5.2.1/ar71xx/packages/zigbee
+# src/gz openwrt_thread http://delos.devolo.net/5.2.1/ar71xx/packages/thread
+# src/gz openwrt_ioe_bridges http://delos.devolo.net/5.2.1/ar71xx/packages/ioe_bridges
+# src/gz openwrt_qca_hk http://delos.devolo.net/5.2.1/ar71xx/packages/qca_hk
+# src/gz openwrt_qca_np http://delos.devolo.net/5.2.1/ar71xx/packages/qca_np
+# src/gz openwrt_qca_lit http://delos.devolo.net/5.2.1/ar71xx/packages/qca_lit
+# src/gz openwrt_csrmesh http://delos.devolo.net/5.2.1/ar71xx/packages/csrmesh
+# src/gz openwrt_sigma_dut http://delos.devolo.net/5.2.1/ar71xx/packages/sigma_dut
+# src/gz openwrt_qca_wapi http://delos.devolo.net/5.2.1/ar71xx/packages/qca_wapi
+# src/gz openwrt_voice_control http://delos.devolo.net/5.2.1/ar71xx/packages/voice_control
+# src/gz openwrt_meeami_utils http://delos.devolo.net/5.2.1/ar71xx/packages/meeami_utils
+# src/gz openwrt_wdsp http://delos.devolo.net/5.2.1/ar71xx/packages/wdsp
diff --git a/etc/opkg/keys/53bad1233d4c98c5 b/etc/opkg/keys/53bad1233d4c98c5
new file mode 100644
index 0000000..e49bd7d
--- /dev/null
+++ b/etc/opkg/keys/53bad1233d4c98c5
@@ -0,0 +1,2 @@
+untrusted comment: openwrt.org 15.05 release key
+RWRTutEjPUyYxcuFKuF19hS8WfHi09AkVhK33KMQPri/dFG9PhEzDtMH
diff --git a/etc/opkg/keys/de98a2dd1d0f8a07 b/etc/opkg/keys/de98a2dd1d0f8a07
new file mode 100644
index 0000000..5e3088c
--- /dev/null
+++ b/etc/opkg/keys/de98a2dd1d0f8a07
@@ -0,0 +1,2 @@
+untrusted comment: openwrt.org 15.05 release key
+RWTemKLdHQ+KBxOILy8gyk+5PaDVdfyJ32TFnY/jnQOrBAd1wobbLNYz
diff --git a/etc/passwd b/etc/passwd
new file mode 100644
index 0000000..e2fc51f
--- /dev/null
+++ b/etc/passwd
@@ -0,0 +1,7 @@
+root:x:0:0:root:/root:/bin/ash
+daemon:*:1:1:daemon:/var:/bin/false
+ftp:*:55:55:ftp:/home/ftp:/bin/false
+network:*:101:101:network:/var:/bin/false
+nobody:*:65534:65534:nobody:/var:/bin/false
+avahi:x:105:105:avahi:/var/run/avahi:/bin/false
+ntp:x:123:123:ntp:/var/run/ntp:/bin/false
diff --git a/etc/preinit b/etc/preinit
new file mode 100755
index 0000000..7a8b6cb
--- /dev/null
+++ b/etc/preinit
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+[ -z "$PREINIT" ] && exec /sbin/init
+
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
+
+pi_ifname=
+pi_ip=192.168.1.1
+pi_broadcast=192.168.1.255
+pi_netmask=255.255.255.0
+
+fs_failsafe_ifname=
+fs_failsafe_ip=192.168.1.1
+fs_failsafe_broadcast=192.168.1.255
+fs_failsafe_netmask=255.255.255.0
+
+fs_failsafe_wait_timeout=0
+
+pi_suppress_stderr="y"
+pi_init_suppress_stderr="y"
+pi_init_path="/usr/sbin:/usr/bin:/sbin:/bin"
+pi_init_cmd="/sbin/init"
+
+. /lib/functions.sh
+. /lib/functions/preinit.sh
+. /lib/functions/system.sh
+
+boot_hook_init preinit_essential
+boot_hook_init preinit_main
+boot_hook_init failsafe
+boot_hook_init initramfs
+boot_hook_init preinit_mount_root
+
+for pi_source_file in /lib/preinit/*; do
+	. $pi_source_file
+done
+
+boot_run_hook preinit_essential
+
+pi_mount_skip_next=false
+pi_jffs2_mount_success=false
+pi_failsafe_net_message=false
+
+boot_run_hook preinit_main
diff --git a/etc/profile b/etc/profile
new file mode 100644
index 0000000..d4f7ea8
--- /dev/null
+++ b/etc/profile
@@ -0,0 +1,25 @@
+#!/bin/sh
+[ -f /etc/banner ] && cat /etc/banner
+[ -e /tmp/.failsafe ] && cat /etc/banner.failsafe
+
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
+export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6)
+export HOME=${HOME:-/root}
+export PS1='\u@\h:\w\$ '
+[ -f /tmp/BTHOST_BD_ADDR ] && export BTHOST_BD_ADDR=$(cat /tmp/BTHOST_BD_ADDR)
+[ -f /tmp/BTHOST_XCAL_TRIM ] && export BTHOST_XCAL_TRIM=$(cat /tmp/BTHOST_XCAL_TRIM)
+
+[ -x /bin/more ] || alias more=less
+[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi
+
+[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc
+
+[ -x /usr/bin/arp ] || arp() { cat /proc/net/arp; }
+[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
+
+[ -n "$FAILSAFE" ] || {
+	for FILE in /etc/profile.d/*.sh; do
+		[ -e "$FILE" ] && . "$FILE"
+	done
+	unset FILE
+}
diff --git a/etc/protocols b/etc/protocols
new file mode 100644
index 0000000..53fecb6
--- /dev/null
+++ b/etc/protocols
@@ -0,0 +1,56 @@
+# Internet (IP) protocols
+#
+# Updated from http://www.iana.org/assignments/protocol-numbers and other
+# sources.
+# New protocols will be added on request if they have been officially
+# assigned by IANA and are not historical.
+# If you need a huge list of used numbers please install the nmap package.
+
+ip	0	IP		# internet protocol, pseudo protocol number
+#hopopt	0	HOPOPT		# IPv6 Hop-by-Hop Option [RFC1883]
+icmp	1	ICMP		# internet control message protocol
+igmp	2	IGMP		# Internet Group Management
+ggp	3	GGP		# gateway-gateway protocol
+ipencap	4	IP-ENCAP	# IP encapsulated in IP (officially ``IP'')
+st	5	ST		# ST datagram mode
+tcp	6	TCP		# transmission control protocol
+egp	8	EGP		# exterior gateway protocol
+igp	9	IGP		# any private interior gateway (Cisco)
+pup	12	PUP		# PARC universal packet protocol
+udp	17	UDP		# user datagram protocol
+hmp	20	HMP		# host monitoring protocol
+xns-idp	22	XNS-IDP		# Xerox NS IDP
+rdp	27	RDP		# "reliable datagram" protocol
+iso-tp4	29	ISO-TP4		# ISO Transport Protocol class 4 [RFC905]
+xtp	36	XTP		# Xpress Transfer Protocol
+ddp	37	DDP		# Datagram Delivery Protocol
+idpr-cmtp 38	IDPR-CMTP	# IDPR Control Message Transport
+ipv6	41	IPv6		# Internet Protocol, version 6
+ipv6-route 43	IPv6-Route	# Routing Header for IPv6
+ipv6-frag 44	IPv6-Frag	# Fragment Header for IPv6
+idrp	45	IDRP		# Inter-Domain Routing Protocol
+rsvp	46	RSVP		# Reservation Protocol
+gre	47	GRE		# General Routing Encapsulation
+esp	50	IPSEC-ESP	# Encap Security Payload [RFC2046]
+ah	51	IPSEC-AH	# Authentication Header [RFC2402]
+skip	57	SKIP		# SKIP
+ipv6-icmp 58	IPv6-ICMP	# ICMP for IPv6
+ipv6-nonxt 59	IPv6-NoNxt	# No Next Header for IPv6
+ipv6-opts 60	IPv6-Opts	# Destination Options for IPv6
+rspf	73	RSPF CPHB	# Radio Shortest Path First (officially CPHB)
+vmtp	81	VMTP		# Versatile Message Transport
+eigrp	88	EIGRP		# Enhanced Interior Routing Protocol (Cisco)
+ospf	89	OSPFIGP		# Open Shortest Path First IGP
+ax.25	93	AX.25		# AX.25 frames
+ipip	94	IPIP		# IP-within-IP Encapsulation Protocol
+etherip	97	ETHERIP		# Ethernet-within-IP Encapsulation [RFC3378]
+encap	98	ENCAP		# Yet Another IP encapsulation [RFC1241]
+#	99			# any private encryption scheme
+pim	103	PIM		# Protocol Independent Multicast
+ipcomp	108	IPCOMP		# IP Payload Compression Protocol
+vrrp	112	VRRP		# Virtual Router Redundancy Protocol
+l2tp	115	L2TP		# Layer Two Tunneling Protocol [RFC2661]
+isis	124	ISIS		# IS-IS over IPv4
+sctp	132	SCTP		# Stream Control Transmission Protocol
+fc	133	FC		# Fibre Channel
+
diff --git a/etc/rc.button/BTN_0 b/etc/rc.button/BTN_0
new file mode 100755
index 0000000..adae605
--- /dev/null
+++ b/etc/rc.button/BTN_0
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+BEGIN_TIMEOUT=3
+LEAVE_TIMEOUT=10
+
+logger() {
+	command logger -t BTN_0 "$@"
+}
+
+logger "$BUTTON $ACTION after ${SEEN}s"
+
+[ "$ACTION" = "pressed" ] && exit $LEAVE_TIMEOUT
+
+. /lib/functions.sh
+
+if [ "$ACTION" = "released" -a "$SEEN" -lt $BEGIN_TIMEOUT ] ; then
+	logger "begin pairing"
+	plc-pushbtn 1
+elif [ "$ACTION" = "timeout" -a "$SEEN" -eq $LEAVE_TIMEOUT ] ; then
+	logger "leave network"
+	plc-pushbtn 2
+fi
+
+exit 0
diff --git a/etc/rc.button/BTN_2 b/etc/rc.button/BTN_2
new file mode 100755
index 0000000..4bf7372
--- /dev/null
+++ b/etc/rc.button/BTN_2
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+logger() {
+	command logger -t "wps-button" "$@"
+}
+
+
+# default: button scheme 2014 Wifi button
+WPS_MAX_DEFAULT=3
+OFF_MAX=10
+ON_MAX=20
+
+. /lib/functions.sh
+. /lib/delos-functions.sh
+#DEBUG=logger
+
+WPS_MAX=$(uci_get wireless wps max_hold_time WPS_MAX_DEFAULT)
+
+wifi_on() {
+	local value
+	config_get value $1 cfg_disabled '0'     # default value if unset is 0 (on)
+	uci_set wireless $1 disabled $value
+	if [ "$value" == "0" ] ; then
+		logger "wifi $1 now enabled"
+	fi
+}
+
+wifi_off() {
+	config_get disabled $1 disabled '0'
+	[ "$disabled" = 0 ] && {
+		uci_set wireless $1 disabled 1
+		logger "wifi $1 now disabled"
+	}
+}
+
+do_wifi() {
+	logger "wifi $1"
+	config_load wireless
+	if [ "$1" = "on" ] ; then
+		dvl_check_and_set_wifi_cfg_disabled
+		#reload config . maybe someting has been changed in the function above
+		config_load wireless
+		config_foreach wifi_on wifi-device
+	else
+		config_foreach wifi_off wifi-device
+	fi
+	uci_commit wireless
+	reload_config # use procd to check for config changes
+}
+
+
+debug "$ACTION after ${SEEN}s"
+
+# get cumulative radio enabled state
+wifi=false
+for radio in 0 1 ; do
+	[ -n "$(uci_get wireless wifi$radio)" ] && [ "$(uci_get wireless wifi$radio disabled)" != "1" ] && {
+		wifi=true
+		break
+	}
+done
+
+# ignore other releases
+! $wifi && [ "$ACTION" = "released" ] && [ "$SEEN" -lt $ON_MAX ] && {
+	do_wifi on &
+	exit 0
+}
+
+$wifi && [ "$ACTION" = "released" ] && [ "$SEEN" -ge $WPS_MAX ] && [ "$SEEN" -lt $OFF_MAX ] && {
+	do_wifi off &
+	exit 0
+}
+
+exit 0
diff --git a/etc/rc.button/failsafe b/etc/rc.button/failsafe
new file mode 100755
index 0000000..ba958fa
--- /dev/null
+++ b/etc/rc.button/failsafe
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+[ "${TYPE}" = "switch" ] || echo ${BUTTON} > /tmp/failsafe_button
+
+return 0
diff --git a/etc/rc.button/power b/etc/rc.button/power
new file mode 100755
index 0000000..c245744
--- /dev/null
+++ b/etc/rc.button/power
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+[ "${ACTION}" = "released" ] || exit 0
+
+exec /sbin/poweroff
+
+return 0
diff --git a/etc/rc.button/reset b/etc/rc.button/reset
new file mode 100755
index 0000000..bc436ee
--- /dev/null
+++ b/etc/rc.button/reset
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+[ "${ACTION}" = "pressed" ] && exit 10
+
+. /lib/functions.sh
+
+logger "$BUTTON pressed for $SEEN seconds"
+
+if [ "$SEEN" -lt 10 ]
+then
+	echo "REBOOT" > /dev/console
+	sync
+	reboot
+elif [ "$ACTION" = "timeout" ]
+then
+	echo "FACTORY RESET" > /dev/console
+	jffs2reset -y && reboot &
+fi
+
+return 0
diff --git a/etc/rc.button/rfkill b/etc/rc.button/rfkill
new file mode 100755
index 0000000..fbdda40
--- /dev/null
+++ b/etc/rc.button/rfkill
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+[ "${ACTION}" = "released" -o -n "${TYPE}" ] || exit 0
+
+. /lib/functions.sh
+
+rfkill_state=0
+
+wifi_rfkill_set() {
+	uci set wireless.$1.disabled=$rfkill_state
+}
+
+wifi_rfkill_check() {
+	local disabled
+	config_get disabled $1 disabled
+	[ "$disabled" = "1" ] || rfkill_state=1
+}
+
+config_load wireless
+case "${TYPE}" in
+"switch")
+	[ "${ACTION}" = "released" ] && rfkill_state=1
+	;;
+*)
+	config_foreach wifi_rfkill_check wifi-device
+	;;
+esac
+config_foreach wifi_rfkill_set wifi-device
+uci commit wireless
+wifi up
+
+return 0
diff --git a/etc/rc.common b/etc/rc.common
new file mode 100755
index 0000000..e0de073
--- /dev/null
+++ b/etc/rc.common
@@ -0,0 +1,143 @@
+#!/bin/sh
+# Copyright (C) 2006-2012 OpenWrt.org
+
+. $IPKG_INSTROOT/lib/functions.sh
+. $IPKG_INSTROOT/lib/functions/service.sh
+
+initscript=$1
+action=${2:-help}
+shift 2
+
+start() {
+	return 0
+}
+
+stop() {
+	return 0
+}
+
+reload() {
+	return 1
+}
+
+restart() {
+	trap '' TERM
+	stop "$@"
+	start "$@"
+}
+
+boot() {
+	start "$@"
+}
+
+shutdown() {
+	stop
+}
+
+disable() {
+	name="$(basename "${initscript}")"
+	rm -f "$IPKG_INSTROOT"/etc/rc.d/S??$name
+	rm -f "$IPKG_INSTROOT"/etc/rc.d/K??$name
+}
+
+enable() {
+	name="$(basename "${initscript}")"
+	disable
+	[ -n "$START" -o -n "$STOP" ] || {
+		echo "/etc/init.d/$name does not have a START or STOP value"
+		return 1
+	}
+	[ "$START" ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}"
+	[ "$STOP"  ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}"
+}
+
+enabled() {
+	name="$(basename "${initscript}")"
+	[ -x "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" ]
+}
+
+depends() {
+	return 0
+}
+
+help() {
+	cat <<EOF
+Syntax: $initscript [command]
+
+Available commands:
+	start	Start the service
+	stop	Stop the service
+	restart	Restart the service
+	reload	Reload configuration files (or restart if that fails)
+	enable	Enable service autostart
+	disable	Disable service autostart
+$EXTRA_HELP
+EOF
+}
+
+# for procd
+start_service() {
+	return 0
+}
+
+stop_service() {
+	return 0
+}
+
+service_triggers() {
+	return 0
+}
+
+service_running() {
+	return 0
+}
+
+${INIT_TRACE:+set -x}
+
+. "$initscript"
+
+[ -n "$USE_PROCD" ] && {
+	EXTRA_COMMANDS="${EXTRA_COMMANDS} running trace"
+
+	. $IPKG_INSTROOT/lib/functions/procd.sh
+	basescript=$(readlink "$initscript")
+	rc_procd() {
+		procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
+		"$@"
+		procd_close_service
+	}
+
+	start() {
+		rc_procd start_service "$@"
+		if eval "type service_started" 2>/dev/null >/dev/null; then
+			service_started
+		fi
+	}
+
+	trace() {
+		TRACE_SYSCALLS=1
+		start "$@"
+	}
+
+	stop() {
+		stop_service "$@"
+		procd_kill "$(basename ${basescript:-$initscript})" "$1"
+	}
+
+	reload() {
+		if eval "type reload_service" 2>/dev/null >/dev/null; then
+			reload_service "$@"
+		else
+			start
+		fi
+	}
+
+	running() {
+		service_running "$@"
+	}
+}
+
+ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
+list_contains ALL_COMMANDS "$action" || action=help
+[ "$action" = "reload" ] && action='eval reload "$@" || restart "$@" && :'
+$action "$@"
diff --git a/etc/rc.d/K10configsync b/etc/rc.d/K10configsync
new file mode 120000
index 0000000..f9e1e75
--- /dev/null
+++ b/etc/rc.d/K10configsync
@@ -0,0 +1 @@
+../init.d/configsync
\ No newline at end of file
diff --git a/etc/rc.d/K10plc b/etc/rc.d/K10plc
new file mode 120000
index 0000000..89067df
--- /dev/null
+++ b/etc/rc.d/K10plc
@@ -0,0 +1 @@
+../init.d/plc
\ No newline at end of file
diff --git a/etc/rc.d/K10simpleconnect b/etc/rc.d/K10simpleconnect
new file mode 120000
index 0000000..5e2c147
--- /dev/null
+++ b/etc/rc.d/K10simpleconnect
@@ -0,0 +1 @@
+../init.d/simpleconnect
\ No newline at end of file
diff --git a/etc/rc.d/K10timerd b/etc/rc.d/K10timerd
new file mode 120000
index 0000000..b88061a
--- /dev/null
+++ b/etc/rc.d/K10timerd
@@ -0,0 +1 @@
+../init.d/timerd
\ No newline at end of file
diff --git a/etc/rc.d/K10wifi-eventd b/etc/rc.d/K10wifi-eventd
new file mode 120000
index 0000000..46aa375
--- /dev/null
+++ b/etc/rc.d/K10wifi-eventd
@@ -0,0 +1 @@
+../init.d/wifi-eventd
\ No newline at end of file
diff --git a/etc/rc.d/K15miniupnpd b/etc/rc.d/K15miniupnpd
new file mode 120000
index 0000000..2080983
--- /dev/null
+++ b/etc/rc.d/K15miniupnpd
@@ -0,0 +1 @@
+../init.d/miniupnpd
\ No newline at end of file
diff --git a/etc/rc.d/K50dropbear b/etc/rc.d/K50dropbear
new file mode 120000
index 0000000..44af88d
--- /dev/null
+++ b/etc/rc.d/K50dropbear
@@ -0,0 +1 @@
+../init.d/dropbear
\ No newline at end of file
diff --git a/etc/rc.d/K65ntpd b/etc/rc.d/K65ntpd
new file mode 120000
index 0000000..f7122ad
--- /dev/null
+++ b/etc/rc.d/K65ntpd
@@ -0,0 +1 @@
+../init.d/ntpd
\ No newline at end of file
diff --git a/etc/rc.d/K89log b/etc/rc.d/K89log
new file mode 120000
index 0000000..c650db2
--- /dev/null
+++ b/etc/rc.d/K89log
@@ -0,0 +1 @@
+../init.d/log
\ No newline at end of file
diff --git a/etc/rc.d/K90network b/etc/rc.d/K90network
new file mode 120000
index 0000000..27f4143
--- /dev/null
+++ b/etc/rc.d/K90network
@@ -0,0 +1 @@
+../init.d/network
\ No newline at end of file
diff --git a/etc/rc.d/K98boot b/etc/rc.d/K98boot
new file mode 120000
index 0000000..7363871
--- /dev/null
+++ b/etc/rc.d/K98boot
@@ -0,0 +1 @@
+../init.d/boot
\ No newline at end of file
diff --git a/etc/rc.d/K99umount b/etc/rc.d/K99umount
new file mode 120000
index 0000000..441133d
--- /dev/null
+++ b/etc/rc.d/K99umount
@@ -0,0 +1 @@
+../init.d/umount
\ No newline at end of file
diff --git a/etc/rc.d/S00sysfixtime b/etc/rc.d/S00sysfixtime
new file mode 120000
index 0000000..b5ae612
--- /dev/null
+++ b/etc/rc.d/S00sysfixtime
@@ -0,0 +1 @@
+../init.d/sysfixtime
\ No newline at end of file
diff --git a/etc/rc.d/S10boot b/etc/rc.d/S10boot
new file mode 120000
index 0000000..7363871
--- /dev/null
+++ b/etc/rc.d/S10boot
@@ -0,0 +1 @@
+../init.d/boot
\ No newline at end of file
diff --git a/etc/rc.d/S10system b/etc/rc.d/S10system
new file mode 120000
index 0000000..89dcc60
--- /dev/null
+++ b/etc/rc.d/S10system
@@ -0,0 +1 @@
+../init.d/system
\ No newline at end of file
diff --git a/etc/rc.d/S11sysctl b/etc/rc.d/S11sysctl
new file mode 120000
index 0000000..e22edff
--- /dev/null
+++ b/etc/rc.d/S11sysctl
@@ -0,0 +1 @@
+../init.d/sysctl
\ No newline at end of file
diff --git a/etc/rc.d/S12log b/etc/rc.d/S12log
new file mode 120000
index 0000000..c650db2
--- /dev/null
+++ b/etc/rc.d/S12log
@@ -0,0 +1 @@
+../init.d/log
\ No newline at end of file
diff --git a/etc/rc.d/S12rpcd b/etc/rc.d/S12rpcd
new file mode 120000
index 0000000..08fbe91
--- /dev/null
+++ b/etc/rc.d/S12rpcd
@@ -0,0 +1 @@
+../init.d/rpcd
\ No newline at end of file
diff --git a/etc/rc.d/S13customization b/etc/rc.d/S13customization
new file mode 120000
index 0000000..b69c910
--- /dev/null
+++ b/etc/rc.d/S13customization
@@ -0,0 +1 @@
+../init.d/customization
\ No newline at end of file
diff --git a/etc/rc.d/S15fixup-macaddr b/etc/rc.d/S15fixup-macaddr
new file mode 120000
index 0000000..e5323b8
--- /dev/null
+++ b/etc/rc.d/S15fixup-macaddr
@@ -0,0 +1 @@
+../init.d/fixup-macaddr
\ No newline at end of file
diff --git a/etc/rc.d/S15qca-hostapd b/etc/rc.d/S15qca-hostapd
new file mode 120000
index 0000000..afe93c7
--- /dev/null
+++ b/etc/rc.d/S15qca-hostapd
@@ -0,0 +1 @@
+../init.d/qca-hostapd
\ No newline at end of file
diff --git a/etc/rc.d/S15qca-wpa-supplicant b/etc/rc.d/S15qca-wpa-supplicant
new file mode 120000
index 0000000..52bac4a
--- /dev/null
+++ b/etc/rc.d/S15qca-wpa-supplicant
@@ -0,0 +1 @@
+../init.d/qca-wpa-supplicant
\ No newline at end of file
diff --git a/etc/rc.d/S16qca-ssdk b/etc/rc.d/S16qca-ssdk
new file mode 120000
index 0000000..92bdbb8
--- /dev/null
+++ b/etc/rc.d/S16qca-ssdk
@@ -0,0 +1 @@
+../init.d/qca-ssdk
\ No newline at end of file
diff --git a/etc/rc.d/S18parental_control b/etc/rc.d/S18parental_control
new file mode 120000
index 0000000..030b1d2
--- /dev/null
+++ b/etc/rc.d/S18parental_control
@@ -0,0 +1 @@
+../init.d/parental_control
\ No newline at end of file
diff --git a/etc/rc.d/S18station_quota b/etc/rc.d/S18station_quota
new file mode 120000
index 0000000..fddfde8
--- /dev/null
+++ b/etc/rc.d/S18station_quota
@@ -0,0 +1 @@
+../init.d/station_quota
\ No newline at end of file
diff --git a/etc/rc.d/S18wifi_schedule b/etc/rc.d/S18wifi_schedule
new file mode 120000
index 0000000..bc22781
--- /dev/null
+++ b/etc/rc.d/S18wifi_schedule
@@ -0,0 +1 @@
+../init.d/wifi_schedule
\ No newline at end of file
diff --git a/etc/rc.d/S19firewall b/etc/rc.d/S19firewall
new file mode 120000
index 0000000..ba799af
--- /dev/null
+++ b/etc/rc.d/S19firewall
@@ -0,0 +1 @@
+../init.d/firewall
\ No newline at end of file
diff --git a/etc/rc.d/S19timerd b/etc/rc.d/S19timerd
new file mode 120000
index 0000000..b88061a
--- /dev/null
+++ b/etc/rc.d/S19timerd
@@ -0,0 +1 @@
+../init.d/timerd
\ No newline at end of file
diff --git a/etc/rc.d/S19wifi-eventd b/etc/rc.d/S19wifi-eventd
new file mode 120000
index 0000000..46aa375
--- /dev/null
+++ b/etc/rc.d/S19wifi-eventd
@@ -0,0 +1 @@
+../init.d/wifi-eventd
\ No newline at end of file
diff --git a/etc/rc.d/S20network b/etc/rc.d/S20network
new file mode 120000
index 0000000..27f4143
--- /dev/null
+++ b/etc/rc.d/S20network
@@ -0,0 +1 @@
+../init.d/network
\ No newline at end of file
diff --git a/etc/rc.d/S50acd b/etc/rc.d/S50acd
new file mode 120000
index 0000000..19f713b
--- /dev/null
+++ b/etc/rc.d/S50acd
@@ -0,0 +1 @@
+../init.d/acd
\ No newline at end of file
diff --git a/etc/rc.d/S50cron b/etc/rc.d/S50cron
new file mode 120000
index 0000000..b7a1f29
--- /dev/null
+++ b/etc/rc.d/S50cron
@@ -0,0 +1 @@
+../init.d/cron
\ No newline at end of file
diff --git a/etc/rc.d/S50dropbear b/etc/rc.d/S50dropbear
new file mode 120000
index 0000000..44af88d
--- /dev/null
+++ b/etc/rc.d/S50dropbear
@@ -0,0 +1 @@
+../init.d/dropbear
\ No newline at end of file
diff --git a/etc/rc.d/S50snmpd b/etc/rc.d/S50snmpd
new file mode 120000
index 0000000..f270432
--- /dev/null
+++ b/etc/rc.d/S50snmpd
@@ -0,0 +1 @@
+../init.d/snmpd
\ No newline at end of file
diff --git a/etc/rc.d/S50uhttpd b/etc/rc.d/S50uhttpd
new file mode 120000
index 0000000..f44eb0e
--- /dev/null
+++ b/etc/rc.d/S50uhttpd
@@ -0,0 +1 @@
+../init.d/uhttpd
\ No newline at end of file
diff --git a/etc/rc.d/S52wsplcd b/etc/rc.d/S52wsplcd
new file mode 120000
index 0000000..7c9c4d0
--- /dev/null
+++ b/etc/rc.d/S52wsplcd
@@ -0,0 +1 @@
+../init.d/wsplcd
\ No newline at end of file
diff --git a/etc/rc.d/S54hyfi-bridging b/etc/rc.d/S54hyfi-bridging
new file mode 120000
index 0000000..f895c1a
--- /dev/null
+++ b/etc/rc.d/S54hyfi-bridging
@@ -0,0 +1 @@
+../init.d/hyfi-bridging
\ No newline at end of file
diff --git a/etc/rc.d/S55hyd b/etc/rc.d/S55hyd
new file mode 120000
index 0000000..bbc483c
--- /dev/null
+++ b/etc/rc.d/S55hyd
@@ -0,0 +1 @@
+../init.d/hyd
\ No newline at end of file
diff --git a/etc/rc.d/S55lbd b/etc/rc.d/S55lbd
new file mode 120000
index 0000000..9dca81f
--- /dev/null
+++ b/etc/rc.d/S55lbd
@@ -0,0 +1 @@
+../init.d/lbd
\ No newline at end of file
diff --git a/etc/rc.d/S65ntpd b/etc/rc.d/S65ntpd
new file mode 120000
index 0000000..f7122ad
--- /dev/null
+++ b/etc/rc.d/S65ntpd
@@ -0,0 +1 @@
+../init.d/ntpd
\ No newline at end of file
diff --git a/etc/rc.d/S80relayd b/etc/rc.d/S80relayd
new file mode 120000
index 0000000..7864f01
--- /dev/null
+++ b/etc/rc.d/S80relayd
@@ -0,0 +1 @@
+../init.d/relayd
\ No newline at end of file
diff --git a/etc/rc.d/S90easycwmpd b/etc/rc.d/S90easycwmpd
new file mode 120000
index 0000000..e03da65
--- /dev/null
+++ b/etc/rc.d/S90easycwmpd
@@ -0,0 +1 @@
+../init.d/easycwmpd
\ No newline at end of file
diff --git a/etc/rc.d/S90tr069_stund b/etc/rc.d/S90tr069_stund
new file mode 120000
index 0000000..3be6a70
--- /dev/null
+++ b/etc/rc.d/S90tr069_stund
@@ -0,0 +1 @@
+../init.d/tr069_stund
\ No newline at end of file
diff --git a/etc/rc.d/S90tr069_upnpd b/etc/rc.d/S90tr069_upnpd
new file mode 120000
index 0000000..2cf4f23
--- /dev/null
+++ b/etc/rc.d/S90tr069_upnpd
@@ -0,0 +1 @@
+../init.d/tr069_upnpd
\ No newline at end of file
diff --git a/etc/rc.d/S90xmppd b/etc/rc.d/S90xmppd
new file mode 120000
index 0000000..c6f4d16
--- /dev/null
+++ b/etc/rc.d/S90xmppd
@@ -0,0 +1 @@
+../init.d/xmppd
\ No newline at end of file
diff --git a/etc/rc.d/S95done b/etc/rc.d/S95done
new file mode 120000
index 0000000..0038dca
--- /dev/null
+++ b/etc/rc.d/S95done
@@ -0,0 +1 @@
+../init.d/done
\ No newline at end of file
diff --git a/etc/rc.d/S95fwknopd b/etc/rc.d/S95fwknopd
new file mode 120000
index 0000000..93ad5bb
--- /dev/null
+++ b/etc/rc.d/S95fwknopd
@@ -0,0 +1 @@
+../init.d/fwknopd
\ No newline at end of file
diff --git a/etc/rc.d/S95led b/etc/rc.d/S95led
new file mode 120000
index 0000000..f10e202
--- /dev/null
+++ b/etc/rc.d/S95led
@@ -0,0 +1 @@
+../init.d/led
\ No newline at end of file
diff --git a/etc/rc.d/S95miniupnpd b/etc/rc.d/S95miniupnpd
new file mode 120000
index 0000000..2080983
--- /dev/null
+++ b/etc/rc.d/S95miniupnpd
@@ -0,0 +1 @@
+../init.d/miniupnpd
\ No newline at end of file
diff --git a/etc/rc.d/S96plc b/etc/rc.d/S96plc
new file mode 120000
index 0000000..89067df
--- /dev/null
+++ b/etc/rc.d/S96plc
@@ -0,0 +1 @@
+../init.d/plc
\ No newline at end of file
diff --git a/etc/rc.d/S97repacd b/etc/rc.d/S97repacd
new file mode 120000
index 0000000..1f24abf
--- /dev/null
+++ b/etc/rc.d/S97repacd
@@ -0,0 +1 @@
+../init.d/repacd
\ No newline at end of file
diff --git a/etc/rc.d/S97simpleconnect b/etc/rc.d/S97simpleconnect
new file mode 120000
index 0000000..5e2c147
--- /dev/null
+++ b/etc/rc.d/S97simpleconnect
@@ -0,0 +1 @@
+../init.d/simpleconnect
\ No newline at end of file
diff --git a/etc/rc.d/S97updateLeds b/etc/rc.d/S97updateLeds
new file mode 120000
index 0000000..40fa7ea
--- /dev/null
+++ b/etc/rc.d/S97updateLeds
@@ -0,0 +1 @@
+../init.d/updateLeds
\ No newline at end of file
diff --git a/etc/rc.d/S98configsync b/etc/rc.d/S98configsync
new file mode 120000
index 0000000..f9e1e75
--- /dev/null
+++ b/etc/rc.d/S98configsync
@@ -0,0 +1 @@
+../init.d/configsync
\ No newline at end of file
diff --git a/etc/rc.d/S98fwuagent b/etc/rc.d/S98fwuagent
new file mode 120000
index 0000000..9aa3911
--- /dev/null
+++ b/etc/rc.d/S98fwuagent
@@ -0,0 +1 @@
+../init.d/fwuagent
\ No newline at end of file
diff --git a/etc/rc.d/S99avahi-daemon b/etc/rc.d/S99avahi-daemon
new file mode 120000
index 0000000..d28b326
--- /dev/null
+++ b/etc/rc.d/S99avahi-daemon
@@ -0,0 +1 @@
+../init.d/avahi-daemon
\ No newline at end of file
diff --git a/etc/rc.d/S99dlanApp2Backend b/etc/rc.d/S99dlanApp2Backend
new file mode 120000
index 0000000..31f7919
--- /dev/null
+++ b/etc/rc.d/S99dlanApp2Backend
@@ -0,0 +1 @@
+../init.d/dlanApp2Backend
\ No newline at end of file
diff --git a/etc/rc.local b/etc/rc.local
new file mode 100644
index 0000000..5639477
--- /dev/null
+++ b/etc/rc.local
@@ -0,0 +1,4 @@
+# Put your custom commands here that should be executed once
+# the system init finished. By default this file does nothing.
+
+exit 0
diff --git a/etc/resolv.conf b/etc/resolv.conf
new file mode 120000
index 0000000..56aa092
--- /dev/null
+++ b/etc/resolv.conf
@@ -0,0 +1 @@
+/tmp/resolv.conf
\ No newline at end of file
diff --git a/etc/services b/etc/services
new file mode 100644
index 0000000..a12853e
--- /dev/null
+++ b/etc/services
@@ -0,0 +1,171 @@
+echo		7/tcp
+echo		7/udp
+discard		9/tcp
+discard		9/udp
+daytime		13/tcp
+daytime		13/udp
+netstat		15/tcp
+chargen		19/tcp
+chargen		19/udp
+ftp-data	20/tcp
+ftp		21/tcp
+ssh		22/tcp
+ssh		22/udp
+telnet		23/tcp
+smtp		25/tcp
+time		37/tcp
+time		37/udp
+whois		43/tcp
+domain		53/tcp
+domain		53/udp
+bootps		67/tcp
+bootps		67/udp
+bootpc		68/tcp
+bootpc		68/udp
+tftp		69/udp
+finger		79/tcp
+www		80/tcp		http
+kerberos	88/tcp		kerberos5 krb5 kerberos-sec
+kerberos	88/udp		kerberos5 krb5 kerberos-sec
+pop3		110/tcp
+pop3		110/udp
+sunrpc		111/tcp
+sunrpc		111/udp
+auth		113/tcp		ident
+sftp		115/tcp
+nntp		119/tcp
+ntp		123/tcp
+ntp		123/udp
+netbios-ns	137/tcp
+netbios-ns	137/udp
+netbios-dgm	138/tcp
+netbios-dgm	138/udp
+netbios-ssn	139/tcp
+netbios-ssn	139/udp
+imap2		143/tcp		imap
+imap2		143/udp		imap
+snmp		161/tcp
+snmp		161/udp
+snmp-trap	162/tcp		snmptrap
+snmp-trap	162/udp		snmptrap
+xdmcp		177/tcp
+xdmcp		177/udp
+bgp		179/tcp
+bgp		179/udp
+imap3		220/tcp
+imap3		220/udp
+ldap		389/tcp
+ldap		389/udp
+https		443/tcp
+https		443/udp
+microsoft-ds	445/tcp
+microsoft-ds	445/udp
+isakmp		500/tcp
+isakmp		500/udp
+rtsp		554/tcp
+rtsp		554/udp
+ipp		631/tcp
+ipp		631/udp
+syslog		514/udp
+printer		515/tcp		spooler
+dhcpv6-client	546/tcp
+dhcpv6-client	546/udp
+dhcpv6-server	547/tcp
+dhcpv6-server	547/udp
+afpovertcp	548/tcp
+afpovertcp	548/udp
+nntps		563/tcp		snntp
+nntps		563/udp		snntp
+ldaps		636/tcp
+ldaps		636/udp
+tinc		655/tcp
+tinc		655/udp
+rsync		873/tcp
+rsync		873/udp
+ftps-data	989/tcp
+ftps		990/tcp
+imaps		993/tcp
+imaps		993/udp
+ircs		994/tcp
+ircs		994/udp
+pop3s		995/tcp
+pop3s		995/udp
+socks		1080/tcp
+socks		1080/udp
+openvpn		1194/tcp
+openvpn		1194/udp
+l2f		1701/tcp	l2tp
+l2f		1701/udp	l2tp
+radius		1812/tcp
+radius		1812/udp
+radius-acct	1813/tcp	radacct
+radius-acct	1813/udp	radacct
+nfs		2049/tcp
+nfs		2049/udp
+dict		2628/tcp
+dict		2628/udp
+gpsd		2947/tcp
+gpsd		2947/udp
+icpv2		3130/tcp	icp
+icpv2		3130/udp	icp
+mysql		3306/tcp
+mysql		3306/udp
+nut		3493/tcp
+nut		3493/udp
+distcc		3632/tcp
+distcc		3632/udp
+daap		3689/tcp
+daap		3689/udp
+svn		3690/tcp	subversion
+svn		3690/udp	subversion
+epmd		4369/tcp
+epmd		4369/udp
+iax		4569/tcp
+iax		4569/udp
+mtn		4691/tcp
+mtn		4691/udp
+munin		4949/tcp
+sip		5060/tcp
+sip		5060/udp
+sip-tls		5061/tcp
+sip-tls		5061/udp
+xmpp-client	5222/tcp	jabber-client
+xmpp-client	5222/udp	jabber-client
+xmpp-server	5269/tcp	jabber-server
+xmpp-server	5269/udp	jabber-server
+mdns		5353/tcp
+mdns		5353/udp
+postgresql	5432/tcp	postgres
+postgresql	5432/udp	postgres
+x11		6000/tcp
+x11		6000/udp
+mysql-proxy	6446/tcp
+mysql-proxy	6446/udp
+bacula-dir	9101/tcp
+bacula-dir	9101/udp
+bacula-fd	9102/tcp
+bacula-fd	9102/udp
+bacula-sd	9103/tcp
+bacula-sd	9103/udp
+nbd		10809/tcp
+zabbix-agent	10050/tcp
+zabbix-agent	10050/udp
+zabbix-trapper	10051/tcp
+zabbix-trapper	10051/udp
+hkp		11371/tcp
+hkp		11371/udp
+ssmtp		465/tcp		smtps
+spamd		783/tcp
+zebrasrv	2600/tcp
+zebra		2601/tcp
+ripd		2602/tcp
+ripngd		2603/tcp
+ospfd		2604/tcp
+bgpd		2605/tcp
+ospf6d		2606/tcp
+ospfapi		2607/tcp
+isisd		2608/tcp
+sane-port	6566/tcp	sane saned
+ircd		6667/tcp
+git		9418/tcp
+
diff --git a/etc/shadow b/etc/shadow
new file mode 100644
index 0000000..f0f880c
--- /dev/null
+++ b/etc/shadow
@@ -0,0 +1,7 @@
+root::0:0:99999:7:::
+daemon:*:0:0:99999:7:::
+ftp:*:0:0:99999:7:::
+network:*:0:0:99999:7:::
+nobody:*:0:0:99999:7:::
+avahi:x:0:0:99999:7:::
+ntp:x:0:0:99999:7:::
diff --git a/etc/shells b/etc/shells
new file mode 100644
index 0000000..006aa38
--- /dev/null
+++ b/etc/shells
@@ -0,0 +1 @@
+/bin/ash
diff --git a/etc/snmp/snmpd.conf b/etc/snmp/snmpd.conf
new file mode 120000
index 0000000..fb7fdaa
--- /dev/null
+++ b/etc/snmp/snmpd.conf
@@ -0,0 +1 @@
+/var/run/snmpd.conf
\ No newline at end of file
diff --git a/etc/ssl/certs/02265526.0 b/etc/ssl/certs/02265526.0
new file mode 120000
index 0000000..d590906
--- /dev/null
+++ b/etc/ssl/certs/02265526.0
@@ -0,0 +1 @@
+Entrust_Root_Certification_Authority_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/024dc131.0 b/etc/ssl/certs/024dc131.0
new file mode 120000
index 0000000..77164d8
--- /dev/null
+++ b/etc/ssl/certs/024dc131.0
@@ -0,0 +1 @@
+Microsec_e-Szigno_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/03179a64.0 b/etc/ssl/certs/03179a64.0
new file mode 120000
index 0000000..bfa607c
--- /dev/null
+++ b/etc/ssl/certs/03179a64.0
@@ -0,0 +1 @@
+Staat_der_Nederlanden_EV_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/034868d6.0 b/etc/ssl/certs/034868d6.0
new file mode 120000
index 0000000..aebc03c
--- /dev/null
+++ b/etc/ssl/certs/034868d6.0
@@ -0,0 +1 @@
+Swisscom_Root_EV_CA_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/062cdee6.0 b/etc/ssl/certs/062cdee6.0
new file mode 120000
index 0000000..be78692
--- /dev/null
+++ b/etc/ssl/certs/062cdee6.0
@@ -0,0 +1 @@
+GlobalSign_Root_CA_-_R3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/064e0aa9.0 b/etc/ssl/certs/064e0aa9.0
new file mode 120000
index 0000000..5762dcb
--- /dev/null
+++ b/etc/ssl/certs/064e0aa9.0
@@ -0,0 +1 @@
+QuoVadis_Root_CA_2_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/080911ac.0 b/etc/ssl/certs/080911ac.0
new file mode 120000
index 0000000..8792236
--- /dev/null
+++ b/etc/ssl/certs/080911ac.0
@@ -0,0 +1 @@
+QuoVadis_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/0810ba98.0 b/etc/ssl/certs/0810ba98.0
new file mode 120000
index 0000000..56a9dd8
--- /dev/null
+++ b/etc/ssl/certs/0810ba98.0
@@ -0,0 +1 @@
+Root_CA_Generalitat_Valenciana.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/09789157.0 b/etc/ssl/certs/09789157.0
new file mode 120000
index 0000000..6368338
--- /dev/null
+++ b/etc/ssl/certs/09789157.0
@@ -0,0 +1 @@
+Starfield_Services_Root_Certificate_Authority_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/0b1b94ef.0 b/etc/ssl/certs/0b1b94ef.0
new file mode 120000
index 0000000..86543ef
--- /dev/null
+++ b/etc/ssl/certs/0b1b94ef.0
@@ -0,0 +1 @@
+CFCA_EV_ROOT.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/0c4c9b6c.0 b/etc/ssl/certs/0c4c9b6c.0
new file mode 120000
index 0000000..2b360d7
--- /dev/null
+++ b/etc/ssl/certs/0c4c9b6c.0
@@ -0,0 +1 @@
+Global_Chambersign_Root_-_2008.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/0d1b923b.0 b/etc/ssl/certs/0d1b923b.0
new file mode 120000
index 0000000..1ad4d19
--- /dev/null
+++ b/etc/ssl/certs/0d1b923b.0
@@ -0,0 +1 @@
+S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/106f3e4d.0 b/etc/ssl/certs/106f3e4d.0
new file mode 120000
index 0000000..90b09d0
--- /dev/null
+++ b/etc/ssl/certs/106f3e4d.0
@@ -0,0 +1 @@
+Entrust_Root_Certification_Authority_-_EC1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/116bf586.0 b/etc/ssl/certs/116bf586.0
new file mode 120000
index 0000000..1f76a23
--- /dev/null
+++ b/etc/ssl/certs/116bf586.0
@@ -0,0 +1 @@
+GeoTrust_Primary_Certification_Authority_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/128805a3.0 b/etc/ssl/certs/128805a3.0
new file mode 120000
index 0000000..3d0f6c6
--- /dev/null
+++ b/etc/ssl/certs/128805a3.0
@@ -0,0 +1 @@
+EE_Certification_Centre_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/157753a5.0 b/etc/ssl/certs/157753a5.0
new file mode 120000
index 0000000..642e996
--- /dev/null
+++ b/etc/ssl/certs/157753a5.0
@@ -0,0 +1 @@
+AddTrust_External_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/1636090b.0 b/etc/ssl/certs/1636090b.0
new file mode 120000
index 0000000..2958af9
--- /dev/null
+++ b/etc/ssl/certs/1636090b.0
@@ -0,0 +1 @@
+Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/1874d4aa.0 b/etc/ssl/certs/1874d4aa.0
new file mode 120000
index 0000000..cee3dd0
--- /dev/null
+++ b/etc/ssl/certs/1874d4aa.0
@@ -0,0 +1 @@
+China_Internet_Network_Information_Center_EV_Certificates_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/18856ac4.0 b/etc/ssl/certs/18856ac4.0
new file mode 120000
index 0000000..199bc11
--- /dev/null
+++ b/etc/ssl/certs/18856ac4.0
@@ -0,0 +1 @@
+SecureSign_RootCA11.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/19c1fa33.0 b/etc/ssl/certs/19c1fa33.0
new file mode 120000
index 0000000..58a5828
--- /dev/null
+++ b/etc/ssl/certs/19c1fa33.0
@@ -0,0 +1 @@
+S-TRUST_Universal_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/1d3472b9.0 b/etc/ssl/certs/1d3472b9.0
new file mode 120000
index 0000000..d4c133d
--- /dev/null
+++ b/etc/ssl/certs/1d3472b9.0
@@ -0,0 +1 @@
+GlobalSign_ECC_Root_CA_-_R5.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/1e08bfd1.0 b/etc/ssl/certs/1e08bfd1.0
new file mode 120000
index 0000000..e271ab4
--- /dev/null
+++ b/etc/ssl/certs/1e08bfd1.0
@@ -0,0 +1 @@
+IdenTrust_Public_Sector_Root_CA_1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/1e09d511.0 b/etc/ssl/certs/1e09d511.0
new file mode 120000
index 0000000..70b0877
--- /dev/null
+++ b/etc/ssl/certs/1e09d511.0
@@ -0,0 +1 @@
+T-TeleSec_GlobalRoot_Class_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/244b5494.0 b/etc/ssl/certs/244b5494.0
new file mode 120000
index 0000000..4caa392
--- /dev/null
+++ b/etc/ssl/certs/244b5494.0
@@ -0,0 +1 @@
+DigiCert_High_Assurance_EV_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/24ad0b63.0 b/etc/ssl/certs/24ad0b63.0
new file mode 120000
index 0000000..5a3caa1
--- /dev/null
+++ b/etc/ssl/certs/24ad0b63.0
@@ -0,0 +1 @@
+Verisign_Class_1_Public_Primary_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/2ae6433e.0 b/etc/ssl/certs/2ae6433e.0
new file mode 120000
index 0000000..7871e35
--- /dev/null
+++ b/etc/ssl/certs/2ae6433e.0
@@ -0,0 +1 @@
+CA_Disig_Root_R2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/2b349938.0 b/etc/ssl/certs/2b349938.0
new file mode 120000
index 0000000..e5e7703
--- /dev/null
+++ b/etc/ssl/certs/2b349938.0
@@ -0,0 +1 @@
+AffirmTrust_Commercial.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/2c11d503.0 b/etc/ssl/certs/2c11d503.0
new file mode 120000
index 0000000..f568414
--- /dev/null
+++ b/etc/ssl/certs/2c11d503.0
@@ -0,0 +1 @@
+OpenTrust_Root_CA_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/2c543cd1.0 b/etc/ssl/certs/2c543cd1.0
new file mode 120000
index 0000000..c3c9cd8
--- /dev/null
+++ b/etc/ssl/certs/2c543cd1.0
@@ -0,0 +1 @@
+GeoTrust_Global_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/2e4eed3c.0 b/etc/ssl/certs/2e4eed3c.0
new file mode 120000
index 0000000..548990c
--- /dev/null
+++ b/etc/ssl/certs/2e4eed3c.0
@@ -0,0 +1 @@
+thawte_Primary_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/2e5ac55d.0 b/etc/ssl/certs/2e5ac55d.0
new file mode 120000
index 0000000..eb5f5ee
--- /dev/null
+++ b/etc/ssl/certs/2e5ac55d.0
@@ -0,0 +1 @@
+DST_Root_CA_X3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/32888f65.0 b/etc/ssl/certs/32888f65.0
new file mode 120000
index 0000000..9e47f28
--- /dev/null
+++ b/etc/ssl/certs/32888f65.0
@@ -0,0 +1 @@
+Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/349f2832.0 b/etc/ssl/certs/349f2832.0
new file mode 120000
index 0000000..2d3abfd
--- /dev/null
+++ b/etc/ssl/certs/349f2832.0
@@ -0,0 +1 @@
+EC-ACC.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/3513523f.0 b/etc/ssl/certs/3513523f.0
new file mode 120000
index 0000000..c8194d1
--- /dev/null
+++ b/etc/ssl/certs/3513523f.0
@@ -0,0 +1 @@
+DigiCert_Global_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/381ce4dd.0 b/etc/ssl/certs/381ce4dd.0
new file mode 120000
index 0000000..305f377
--- /dev/null
+++ b/etc/ssl/certs/381ce4dd.0
@@ -0,0 +1 @@
+ACEDICOM_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/3b2716e5.0 b/etc/ssl/certs/3b2716e5.0
new file mode 120000
index 0000000..ec5406d
--- /dev/null
+++ b/etc/ssl/certs/3b2716e5.0
@@ -0,0 +1 @@
+EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/3bde41ac.0 b/etc/ssl/certs/3bde41ac.0
new file mode 120000
index 0000000..aff47f3
--- /dev/null
+++ b/etc/ssl/certs/3bde41ac.0
@@ -0,0 +1 @@
+Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/3e45d192.0 b/etc/ssl/certs/3e45d192.0
new file mode 120000
index 0000000..9cdaa52
--- /dev/null
+++ b/etc/ssl/certs/3e45d192.0
@@ -0,0 +1 @@
+Hongkong_Post_Root_CA_1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/3ee7e181.0 b/etc/ssl/certs/3ee7e181.0
new file mode 120000
index 0000000..7b3ea77
--- /dev/null
+++ b/etc/ssl/certs/3ee7e181.0
@@ -0,0 +1 @@
+IGC_A.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/3efd4dc0.0 b/etc/ssl/certs/3efd4dc0.0
new file mode 120000
index 0000000..78bb08b
--- /dev/null
+++ b/etc/ssl/certs/3efd4dc0.0
@@ -0,0 +1 @@
+Swisscom_Root_CA_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/40193066.0 b/etc/ssl/certs/40193066.0
new file mode 120000
index 0000000..96056de
--- /dev/null
+++ b/etc/ssl/certs/40193066.0
@@ -0,0 +1 @@
+Certum_Trusted_Network_CA_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/4042bcee.0 b/etc/ssl/certs/4042bcee.0
new file mode 120000
index 0000000..c55dd18
--- /dev/null
+++ b/etc/ssl/certs/4042bcee.0
@@ -0,0 +1 @@
+ISRG_Root_X1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/40547a79.0 b/etc/ssl/certs/40547a79.0
new file mode 120000
index 0000000..f9aaffa
--- /dev/null
+++ b/etc/ssl/certs/40547a79.0
@@ -0,0 +1 @@
+COMODO_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/415660c1.0 b/etc/ssl/certs/415660c1.0
new file mode 120000
index 0000000..3961ea0
--- /dev/null
+++ b/etc/ssl/certs/415660c1.0
@@ -0,0 +1 @@
+Verisign_Class_3_Public_Primary_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/4304c5e5.0 b/etc/ssl/certs/4304c5e5.0
new file mode 120000
index 0000000..e5acb0b
--- /dev/null
+++ b/etc/ssl/certs/4304c5e5.0
@@ -0,0 +1 @@
+Network_Solutions_Certificate_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/442adcac.0 b/etc/ssl/certs/442adcac.0
new file mode 120000
index 0000000..9d0fbdb
--- /dev/null
+++ b/etc/ssl/certs/442adcac.0
@@ -0,0 +1 @@
+Certum_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/451b5485.0 b/etc/ssl/certs/451b5485.0
new file mode 120000
index 0000000..b41d5b3
--- /dev/null
+++ b/etc/ssl/certs/451b5485.0
@@ -0,0 +1 @@
+Certplus_Root_CA_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/480720ec.0 b/etc/ssl/certs/480720ec.0
new file mode 120000
index 0000000..0a78d6a
--- /dev/null
+++ b/etc/ssl/certs/480720ec.0
@@ -0,0 +1 @@
+GeoTrust_Primary_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/48bec511.0 b/etc/ssl/certs/48bec511.0
new file mode 120000
index 0000000..8b7eac7
--- /dev/null
+++ b/etc/ssl/certs/48bec511.0
@@ -0,0 +1 @@
+Certum_Trusted_Network_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/4a6481c9.0 b/etc/ssl/certs/4a6481c9.0
new file mode 120000
index 0000000..7b6c751
--- /dev/null
+++ b/etc/ssl/certs/4a6481c9.0
@@ -0,0 +1 @@
+GlobalSign_Root_CA_-_R2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/4bfab552.0 b/etc/ssl/certs/4bfab552.0
new file mode 120000
index 0000000..3fd24c7
--- /dev/null
+++ b/etc/ssl/certs/4bfab552.0
@@ -0,0 +1 @@
+Starfield_Root_Certificate_Authority_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/4f316efb.0 b/etc/ssl/certs/4f316efb.0
new file mode 120000
index 0000000..102e2be
--- /dev/null
+++ b/etc/ssl/certs/4f316efb.0
@@ -0,0 +1 @@
+SwissSign_Gold_CA_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5273a94c.0 b/etc/ssl/certs/5273a94c.0
new file mode 120000
index 0000000..b26d661
--- /dev/null
+++ b/etc/ssl/certs/5273a94c.0
@@ -0,0 +1 @@
+E-Tugra_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5443e9e3.0 b/etc/ssl/certs/5443e9e3.0
new file mode 120000
index 0000000..3ddfb94
--- /dev/null
+++ b/etc/ssl/certs/5443e9e3.0
@@ -0,0 +1 @@
+T-TeleSec_GlobalRoot_Class_3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/54657681.0 b/etc/ssl/certs/54657681.0
new file mode 120000
index 0000000..22407cc
--- /dev/null
+++ b/etc/ssl/certs/54657681.0
@@ -0,0 +1 @@
+Buypass_Class_2_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5620c4aa.0 b/etc/ssl/certs/5620c4aa.0
new file mode 120000
index 0000000..8712ece
--- /dev/null
+++ b/etc/ssl/certs/5620c4aa.0
@@ -0,0 +1 @@
+TC_TrustCenter_Class_3_CA_II.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/56657bde.0 b/etc/ssl/certs/56657bde.0
new file mode 120000
index 0000000..d054e09
--- /dev/null
+++ b/etc/ssl/certs/56657bde.0
@@ -0,0 +1 @@
+Comodo_Trusted_Services_root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/578d5c04.0 b/etc/ssl/certs/578d5c04.0
new file mode 120000
index 0000000..8cf1de8
--- /dev/null
+++ b/etc/ssl/certs/578d5c04.0
@@ -0,0 +1 @@
+Equifax_Secure_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/57bbd831.0 b/etc/ssl/certs/57bbd831.0
new file mode 120000
index 0000000..356b904
--- /dev/null
+++ b/etc/ssl/certs/57bbd831.0
@@ -0,0 +1 @@
+ApplicationCA_-_Japanese_Government.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/57bcb2da.0 b/etc/ssl/certs/57bcb2da.0
new file mode 120000
index 0000000..bb67cb5
--- /dev/null
+++ b/etc/ssl/certs/57bcb2da.0
@@ -0,0 +1 @@
+SwissSign_Silver_CA_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/592c0a9a.0 b/etc/ssl/certs/592c0a9a.0
new file mode 120000
index 0000000..c799d31
--- /dev/null
+++ b/etc/ssl/certs/592c0a9a.0
@@ -0,0 +1 @@
+TURKTRUST_Certificate_Services_Provider_Root_2007.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5a4d6896.0 b/etc/ssl/certs/5a4d6896.0
new file mode 120000
index 0000000..97d3ae2
--- /dev/null
+++ b/etc/ssl/certs/5a4d6896.0
@@ -0,0 +1 @@
+Staat_der_Nederlanden_Root_CA_-_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5ad8a5d6.0 b/etc/ssl/certs/5ad8a5d6.0
new file mode 120000
index 0000000..21b7897
--- /dev/null
+++ b/etc/ssl/certs/5ad8a5d6.0
@@ -0,0 +1 @@
+GlobalSign_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5c44d531.0 b/etc/ssl/certs/5c44d531.0
new file mode 120000
index 0000000..a220b3b
--- /dev/null
+++ b/etc/ssl/certs/5c44d531.0
@@ -0,0 +1 @@
+Staat_der_Nederlanden_Root_CA_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5cd81ad7.0 b/etc/ssl/certs/5cd81ad7.0
new file mode 120000
index 0000000..0c94b72
--- /dev/null
+++ b/etc/ssl/certs/5cd81ad7.0
@@ -0,0 +1 @@
+TeliaSonera_Root_CA_v1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/5f15c80c.0 b/etc/ssl/certs/5f15c80c.0
new file mode 120000
index 0000000..5d60c47
--- /dev/null
+++ b/etc/ssl/certs/5f15c80c.0
@@ -0,0 +1 @@
+TWCA_Global_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/607986c7.0 b/etc/ssl/certs/607986c7.0
new file mode 120000
index 0000000..efdec8c
--- /dev/null
+++ b/etc/ssl/certs/607986c7.0
@@ -0,0 +1 @@
+DigiCert_Global_Root_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/608a55ad.0 b/etc/ssl/certs/608a55ad.0
new file mode 120000
index 0000000..1d27287
--- /dev/null
+++ b/etc/ssl/certs/608a55ad.0
@@ -0,0 +1 @@
+OpenTrust_Root_CA_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/6410666e.0 b/etc/ssl/certs/6410666e.0
new file mode 120000
index 0000000..75f60ae
--- /dev/null
+++ b/etc/ssl/certs/6410666e.0
@@ -0,0 +1 @@
+Taiwan_GRCA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/653b494a.0 b/etc/ssl/certs/653b494a.0
new file mode 120000
index 0000000..04123d7
--- /dev/null
+++ b/etc/ssl/certs/653b494a.0
@@ -0,0 +1 @@
+Baltimore_CyberTrust_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/65b876bd.0 b/etc/ssl/certs/65b876bd.0
new file mode 120000
index 0000000..ae6fbf9
--- /dev/null
+++ b/etc/ssl/certs/65b876bd.0
@@ -0,0 +1 @@
+TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/667c66d4.0 b/etc/ssl/certs/667c66d4.0
new file mode 120000
index 0000000..7dcf7e2
--- /dev/null
+++ b/etc/ssl/certs/667c66d4.0
@@ -0,0 +1 @@
+Swisscom_Root_CA_1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/6b99d060.0 b/etc/ssl/certs/6b99d060.0
new file mode 120000
index 0000000..083d587
--- /dev/null
+++ b/etc/ssl/certs/6b99d060.0
@@ -0,0 +1 @@
+Entrust_Root_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/6f2c1157.0 b/etc/ssl/certs/6f2c1157.0
new file mode 120000
index 0000000..a2f2801
--- /dev/null
+++ b/etc/ssl/certs/6f2c1157.0
@@ -0,0 +1 @@
+AC_Raíz_Certicámara_S.A..crt
\ No newline at end of file
diff --git a/etc/ssl/certs/706f604c.0 b/etc/ssl/certs/706f604c.0
new file mode 120000
index 0000000..a73682f
--- /dev/null
+++ b/etc/ssl/certs/706f604c.0
@@ -0,0 +1 @@
+XRamp_Global_CA_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/749e9e03.0 b/etc/ssl/certs/749e9e03.0
new file mode 120000
index 0000000..7316ddf
--- /dev/null
+++ b/etc/ssl/certs/749e9e03.0
@@ -0,0 +1 @@
+QuoVadis_Root_CA_1_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/75d1b2ed.0 b/etc/ssl/certs/75d1b2ed.0
new file mode 120000
index 0000000..f55d9cf
--- /dev/null
+++ b/etc/ssl/certs/75d1b2ed.0
@@ -0,0 +1 @@
+DigiCert_Trusted_Root_G4.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/76cb8f92.0 b/etc/ssl/certs/76cb8f92.0
new file mode 120000
index 0000000..94f9882
--- /dev/null
+++ b/etc/ssl/certs/76cb8f92.0
@@ -0,0 +1 @@
+Cybertrust_Global_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/76faf6c0.0 b/etc/ssl/certs/76faf6c0.0
new file mode 120000
index 0000000..3e0b289
--- /dev/null
+++ b/etc/ssl/certs/76faf6c0.0
@@ -0,0 +1 @@
+QuoVadis_Root_CA_3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/7719f463.0 b/etc/ssl/certs/7719f463.0
new file mode 120000
index 0000000..8545bf8
--- /dev/null
+++ b/etc/ssl/certs/7719f463.0
@@ -0,0 +1 @@
+Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/790a7190.0 b/etc/ssl/certs/790a7190.0
new file mode 120000
index 0000000..0f69733
--- /dev/null
+++ b/etc/ssl/certs/790a7190.0
@@ -0,0 +1 @@
+DST_ACES_CA_X6.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/7992b8bb.0 b/etc/ssl/certs/7992b8bb.0
new file mode 120000
index 0000000..ef3256b
--- /dev/null
+++ b/etc/ssl/certs/7992b8bb.0
@@ -0,0 +1 @@
+TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H5.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/79ad8b43.0 b/etc/ssl/certs/79ad8b43.0
new file mode 120000
index 0000000..8040c99
--- /dev/null
+++ b/etc/ssl/certs/79ad8b43.0
@@ -0,0 +1 @@
+Equifax_Secure_eBusiness_CA_1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/7d0b38bd.0 b/etc/ssl/certs/7d0b38bd.0
new file mode 120000
index 0000000..8ebbf0f
--- /dev/null
+++ b/etc/ssl/certs/7d0b38bd.0
@@ -0,0 +1 @@
+VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/7d5a75e4.0 b/etc/ssl/certs/7d5a75e4.0
new file mode 120000
index 0000000..0952657
--- /dev/null
+++ b/etc/ssl/certs/7d5a75e4.0
@@ -0,0 +1 @@
+WellsSecure_Public_Root_Certificate_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/7f3d5d1d.0 b/etc/ssl/certs/7f3d5d1d.0
new file mode 120000
index 0000000..9f76711
--- /dev/null
+++ b/etc/ssl/certs/7f3d5d1d.0
@@ -0,0 +1 @@
+DigiCert_Assured_ID_Root_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/812e17de.0 b/etc/ssl/certs/812e17de.0
new file mode 120000
index 0000000..89538f2
--- /dev/null
+++ b/etc/ssl/certs/812e17de.0
@@ -0,0 +1 @@
+Deutsche_Telekom_Root_CA_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/8160b96c.0 b/etc/ssl/certs/8160b96c.0
new file mode 120000
index 0000000..5ba7240
--- /dev/null
+++ b/etc/ssl/certs/8160b96c.0
@@ -0,0 +1 @@
+Microsec_e-Szigno_Root_CA_2009.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/861a399d.0 b/etc/ssl/certs/861a399d.0
new file mode 120000
index 0000000..2b36b10
--- /dev/null
+++ b/etc/ssl/certs/861a399d.0
@@ -0,0 +1 @@
+AddTrust_Low-Value_Services_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/87229d21.0 b/etc/ssl/certs/87229d21.0
new file mode 120000
index 0000000..3d35a92
--- /dev/null
+++ b/etc/ssl/certs/87229d21.0
@@ -0,0 +1 @@
+OpenTrust_Root_CA_G1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/8867006a.0 b/etc/ssl/certs/8867006a.0
new file mode 120000
index 0000000..5233e68
--- /dev/null
+++ b/etc/ssl/certs/8867006a.0
@@ -0,0 +1 @@
+GeoTrust_Universal_CA_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/8b59b1ad.0 b/etc/ssl/certs/8b59b1ad.0
new file mode 120000
index 0000000..f2c379d
--- /dev/null
+++ b/etc/ssl/certs/8b59b1ad.0
@@ -0,0 +1 @@
+AddTrust_Public_Services_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/8d86cdd1.0 b/etc/ssl/certs/8d86cdd1.0
new file mode 120000
index 0000000..02c3837
--- /dev/null
+++ b/etc/ssl/certs/8d86cdd1.0
@@ -0,0 +1 @@
+certSIGN_ROOT_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/9007ae68.0 b/etc/ssl/certs/9007ae68.0
new file mode 120000
index 0000000..daddc1a
--- /dev/null
+++ b/etc/ssl/certs/9007ae68.0
@@ -0,0 +1 @@
+CA_Disig_Root_R1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/9168f543.0 b/etc/ssl/certs/9168f543.0
new file mode 120000
index 0000000..c6ae3b4
--- /dev/null
+++ b/etc/ssl/certs/9168f543.0
@@ -0,0 +1 @@
+Certplus_Root_CA_G1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/930ac5d2.0 b/etc/ssl/certs/930ac5d2.0
new file mode 120000
index 0000000..0e75eb3
--- /dev/null
+++ b/etc/ssl/certs/930ac5d2.0
@@ -0,0 +1 @@
+Actalis_Authentication_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/93bc0acc.0 b/etc/ssl/certs/93bc0acc.0
new file mode 120000
index 0000000..a777d07
--- /dev/null
+++ b/etc/ssl/certs/93bc0acc.0
@@ -0,0 +1 @@
+AffirmTrust_Networking.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/988a38cb.0 b/etc/ssl/certs/988a38cb.0
new file mode 120000
index 0000000..f11024c
--- /dev/null
+++ b/etc/ssl/certs/988a38cb.0
@@ -0,0 +1 @@
+NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/9c2e7d30.0 b/etc/ssl/certs/9c2e7d30.0
new file mode 120000
index 0000000..c0215f5
--- /dev/null
+++ b/etc/ssl/certs/9c2e7d30.0
@@ -0,0 +1 @@
+Sonera_Class_2_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/9c8dfbd4.0 b/etc/ssl/certs/9c8dfbd4.0
new file mode 120000
index 0000000..450d80c
--- /dev/null
+++ b/etc/ssl/certs/9c8dfbd4.0
@@ -0,0 +1 @@
+AffirmTrust_Premium_ECC.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/9d04f354.0 b/etc/ssl/certs/9d04f354.0
new file mode 120000
index 0000000..248ca4a
--- /dev/null
+++ b/etc/ssl/certs/9d04f354.0
@@ -0,0 +1 @@
+DigiCert_Assured_ID_Root_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/9d520b32.0 b/etc/ssl/certs/9d520b32.0
new file mode 120000
index 0000000..fb11a39
--- /dev/null
+++ b/etc/ssl/certs/9d520b32.0
@@ -0,0 +1 @@
+Security_Communication_EV_RootCA1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/9f0f5fd6.0 b/etc/ssl/certs/9f0f5fd6.0
new file mode 120000
index 0000000..bb61890
--- /dev/null
+++ b/etc/ssl/certs/9f0f5fd6.0
@@ -0,0 +1 @@
+Certinomis_-_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ACCVRAIZ1.crt b/etc/ssl/certs/ACCVRAIZ1.crt
new file mode 100644
index 0000000..baf74db
--- /dev/null
+++ b/etc/ssl/certs/ACCVRAIZ1.crt
@@ -0,0 +1,44 @@
+-----BEGIN CERTIFICATE-----
+MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE
+AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw
+CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ
+BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND
+VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb
+qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY
+HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo
+G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA
+lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr
+IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/
+0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH
+k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47
+4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO
+m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa
+cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl
+uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI
+KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls
+ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG
+AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
+VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT
+VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG
+CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA
+cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA
+QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA
+7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA
+cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA
+QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA
+czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu
+aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt
+aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud
+DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF
+BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp
+D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU
+JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m
+AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD
+vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms
+tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH
+7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
+I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA
+h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF
+d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H
+pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/ACEDICOM_Root.crt b/etc/ssl/certs/ACEDICOM_Root.crt
new file mode 100644
index 0000000..44e9673
--- /dev/null
+++ b/etc/ssl/certs/ACEDICOM_Root.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
+AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
+CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
+MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
+RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
+AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
+09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
+XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
+Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
+t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
+X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
+MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
+fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
+2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
+K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
+ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
+BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
+MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
+RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
+bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
+fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
+gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
+I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
+5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
+ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
+MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
+o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
+zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
+GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
+r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
+Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AC_Raíz_Certicámara_S.A..crt b/etc/ssl/certs/AC_Raíz_Certicámara_S.A..crt
new file mode 100644
index 0000000..c60cce8
--- /dev/null
+++ b/etc/ssl/certs/AC_Raíz_Certicámara_S.A..crt
@@ -0,0 +1,37 @@
+-----BEGIN CERTIFICATE-----
+MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
+CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
+ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
+QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
+NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
+ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
+QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
+qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
+fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
+Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
+Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
+54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
+MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
+ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
+YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
+A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
+rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
+pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
+lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
+YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
+7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
+YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
+xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
+unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
+Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
+ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
+gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
+jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
+W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
+RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
+MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
+BYn8eNZcLCZDqQ==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Actalis_Authentication_Root_CA.crt b/etc/ssl/certs/Actalis_Authentication_Root_CA.crt
new file mode 100644
index 0000000..5762f37
--- /dev/null
+++ b/etc/ssl/certs/Actalis_Authentication_Root_CA.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
+BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
+MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
+IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
+SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
+ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
+UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
+4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
+KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
+gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
+rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
+51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
+be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
+KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
+v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
+fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
+jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
+ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
+ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
+e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
+jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
+WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
+SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
+pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
+X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
+fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
+K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
+ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
+LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
+LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AddTrust_External_Root.crt b/etc/ssl/certs/AddTrust_External_Root.crt
new file mode 100644
index 0000000..20585f1
--- /dev/null
+++ b/etc/ssl/certs/AddTrust_External_Root.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AddTrust_Low-Value_Services_Root.crt b/etc/ssl/certs/AddTrust_Low-Value_Services_Root.crt
new file mode 100644
index 0000000..43b8375
--- /dev/null
+++ b/etc/ssl/certs/AddTrust_Low-Value_Services_Root.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
+MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
+VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
+CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
+tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
+dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
+PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
+BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
+ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
+7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
+43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
+pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
+WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AddTrust_Public_Services_Root.crt b/etc/ssl/certs/AddTrust_Public_Services_Root.crt
new file mode 100644
index 0000000..b9665db
--- /dev/null
+++ b/etc/ssl/certs/AddTrust_Public_Services_Root.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
+MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
+ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
+BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
+6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
+GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
+dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
+1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
+62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
+BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
+MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
+cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
+b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
+IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
+iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
+4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
+XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AddTrust_Qualified_Certificates_Root.crt b/etc/ssl/certs/AddTrust_Qualified_Certificates_Root.crt
new file mode 100644
index 0000000..ad3800d
--- /dev/null
+++ b/etc/ssl/certs/AddTrust_Qualified_Certificates_Root.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
+MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
+EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
+BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
+xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
+87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
+2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
+WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
+0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
+A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
+pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
+ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
+aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
+hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
+hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
+P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
+iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
+xqE=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AffirmTrust_Commercial.crt b/etc/ssl/certs/AffirmTrust_Commercial.crt
new file mode 100644
index 0000000..73a3367
--- /dev/null
+++ b/etc/ssl/certs/AffirmTrust_Commercial.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
+Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
+ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
+MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
+yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
+VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
+nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
+XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
+vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
+Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
+N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
+nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AffirmTrust_Networking.crt b/etc/ssl/certs/AffirmTrust_Networking.crt
new file mode 100644
index 0000000..04f4a81
--- /dev/null
+++ b/etc/ssl/certs/AffirmTrust_Networking.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
+YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
+kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
+QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
+6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
+yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
+QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
+tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
+QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
+Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
+olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
+x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AffirmTrust_Premium.crt b/etc/ssl/certs/AffirmTrust_Premium.crt
new file mode 100644
index 0000000..516ecf5
--- /dev/null
+++ b/etc/ssl/certs/AffirmTrust_Premium.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
+dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
+A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
+cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
+qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
+JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
+s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
+HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
+70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
+V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
+qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
+5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
+C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
+OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
+FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
+KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
+8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
+MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
+0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
+u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
+u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
+YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
+GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
+RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
+KeC2uAloGRwYQw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/AffirmTrust_Premium_ECC.crt b/etc/ssl/certs/AffirmTrust_Premium_ECC.crt
new file mode 100644
index 0000000..4bcc6a4
--- /dev/null
+++ b/etc/ssl/certs/AffirmTrust_Premium_ECC.crt
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
+cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
+BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
+VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
+0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
+ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
+A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
+aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
+flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/ApplicationCA_-_Japanese_Government.crt b/etc/ssl/certs/ApplicationCA_-_Japanese_Government.crt
new file mode 100644
index 0000000..c28e86d
--- /dev/null
+++ b/etc/ssl/certs/ApplicationCA_-_Japanese_Government.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
+MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
+b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
+AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
+aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
+j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
+f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
+IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
+FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
+QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
+/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
+k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
+MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
+seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
+hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
+DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
+B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
+rosot4LKGAfmt1t06SAZf7IbiVQ=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Atos_TrustedRoot_2011.crt b/etc/ssl/certs/Atos_TrustedRoot_2011.crt
new file mode 100644
index 0000000..988cc68
--- /dev/null
+++ b/etc/ssl/certs/Atos_TrustedRoot_2011.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE
+AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG
+EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM
+FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC
+REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp
+Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM
+VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+
+SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ
+4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L
+cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi
+eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV
+HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG
+A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3
+DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j
+vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP
+DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc
+maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D
+lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv
+KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt b/etc/ssl/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
new file mode 100644
index 0000000..de97f84
--- /dev/null
+++ b/etc/ssl/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
+BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
+cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
+MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
+Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
+thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
+cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
+L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
+NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
+X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
+m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
+Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
+EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
+KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
+6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
+OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
+VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
+VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
+cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
+ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
+AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
+661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
+am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
+ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
+PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
+3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
+SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
+3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
+ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
+StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
+Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
+jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Baltimore_CyberTrust_Root.crt b/etc/ssl/certs/Baltimore_CyberTrust_Root.crt
new file mode 100644
index 0000000..519028c
--- /dev/null
+++ b/etc/ssl/certs/Baltimore_CyberTrust_Root.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Buypass_Class_2_CA_1.crt b/etc/ssl/certs/Buypass_Class_2_CA_1.crt
new file mode 100644
index 0000000..053f433
--- /dev/null
+++ b/etc/ssl/certs/Buypass_Class_2_CA_1.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
+Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
+MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
+VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
+ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
+l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
+HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
+5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
+WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
+gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
+DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
+BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
+h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
+LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Buypass_Class_2_Root_CA.crt b/etc/ssl/certs/Buypass_Class_2_Root_CA.crt
new file mode 100644
index 0000000..9daec24
--- /dev/null
+++ b/etc/ssl/certs/Buypass_Class_2_Root_CA.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
+Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
+TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
+HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
+BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
+6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
+L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
+1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
+MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
+QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
+arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
+Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
+FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
+P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
+9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
+AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
+uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
+9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
+A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
+OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
+KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
+DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
+H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
+I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
+5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
+3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
+Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Buypass_Class_3_Root_CA.crt b/etc/ssl/certs/Buypass_Class_3_Root_CA.crt
new file mode 100644
index 0000000..23b5306
--- /dev/null
+++ b/etc/ssl/certs/Buypass_Class_3_Root_CA.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
+Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
+TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
+HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
+BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
+ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
+N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
+tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
+0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
+/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
+KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
+zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
+O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
+34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
+K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
+AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
+Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
+QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
+cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
+IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
+HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
+O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
+033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
+dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
+kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
+3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
+u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
+4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/CA_Disig_Root_R1.crt b/etc/ssl/certs/CA_Disig_Root_R1.crt
new file mode 100644
index 0000000..01b138c
--- /dev/null
+++ b/etc/ssl/certs/CA_Disig_Root_R1.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV
+BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
+MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy
+MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
+EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw
+ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk
+D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o
+OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A
+fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe
+IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n
+oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK
+/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj
+rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD
+3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE
+7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC
+yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd
+qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI
+hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
+xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA
+SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo
+HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB
+emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC
+AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb
+7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x
+DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk
+F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF
+a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT
+Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/CA_Disig_Root_R2.crt b/etc/ssl/certs/CA_Disig_Root_R2.crt
new file mode 100644
index 0000000..0d94600
--- /dev/null
+++ b/etc/ssl/certs/CA_Disig_Root_R2.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV
+BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu
+MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy
+MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx
+EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw
+ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe
+NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH
+PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I
+x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe
+QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR
+yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO
+QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912
+H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ
+QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD
+i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs
+nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1
+rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI
+hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
+tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf
+GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb
+lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka
++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal
+TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i
+nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3
+gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr
+G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os
+zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x
+L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/CFCA_EV_ROOT.crt b/etc/ssl/certs/CFCA_EV_ROOT.crt
new file mode 100644
index 0000000..198d1bf
--- /dev/null
+++ b/etc/ssl/certs/CFCA_EV_ROOT.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD
+TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx
+MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j
+aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP
+T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03
+sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL
+TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5
+/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp
+7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz
+EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt
+hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP
+a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot
+aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg
+TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV
+PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv
+cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL
+tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd
+BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB
+ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT
+ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL
+jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS
+ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy
+P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19
+xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d
+Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN
+5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe
+/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z
+AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ
+5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/CNNIC_ROOT.crt b/etc/ssl/certs/CNNIC_ROOT.crt
new file mode 100644
index 0000000..c81744b
--- /dev/null
+++ b/etc/ssl/certs/CNNIC_ROOT.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
+TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
+MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
+Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
+IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
+dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
+V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
+GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
+v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
+AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
+Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
+76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
+OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
+ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
+yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
+buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
+2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/COMODO_Certification_Authority.crt b/etc/ssl/certs/COMODO_Certification_Authority.crt
new file mode 100644
index 0000000..6146dcb
--- /dev/null
+++ b/etc/ssl/certs/COMODO_Certification_Authority.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
+MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
+UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
+2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
+Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
+nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
+/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
+PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
+QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
+SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
+IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
+RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
+zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
+BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
+ZQ==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/COMODO_ECC_Certification_Authority.crt b/etc/ssl/certs/COMODO_ECC_Certification_Authority.crt
new file mode 100644
index 0000000..546c95e
--- /dev/null
+++ b/etc/ssl/certs/COMODO_ECC_Certification_Authority.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
+IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
+MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
+ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
+T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
+FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
+cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
+BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
+fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
+GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/COMODO_RSA_Certification_Authority.crt b/etc/ssl/certs/COMODO_RSA_Certification_Authority.crt
new file mode 100644
index 0000000..6508d1e
--- /dev/null
+++ b/etc/ssl/certs/COMODO_RSA_Certification_Authority.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB
+hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
+BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5
+MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
+EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR
+6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X
+pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC
+9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV
+/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf
+Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z
++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w
+qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah
+SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC
+u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf
+Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq
+crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
+FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB
+/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl
+wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM
+4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV
+2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna
+FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ
+CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK
+boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke
+jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL
+S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb
+QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl
+0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB
+NVOFBkpdn627G190
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Camerfirma_Chambers_of_Commerce_Root.crt b/etc/ssl/certs/Camerfirma_Chambers_of_Commerce_Root.crt
new file mode 100644
index 0000000..b396251
--- /dev/null
+++ b/etc/ssl/certs/Camerfirma_Chambers_of_Commerce_Root.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
+b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
+MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
+ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
+IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
+AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
+unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
+BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
+7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
+0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
+roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
+A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
+aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
+26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
+BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
+EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
+BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
+AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
+p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
+1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
+XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
+eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
+tGWaIZDgqtCYvDi1czyL+Nw=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Camerfirma_Global_Chambersign_Root.crt b/etc/ssl/certs/Camerfirma_Global_Chambersign_Root.crt
new file mode 100644
index 0000000..f505306
--- /dev/null
+++ b/etc/ssl/certs/Camerfirma_Global_Chambersign_Root.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
+YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
+MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
+NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
+A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
+A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
+Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
+QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
+eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
+B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
+z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
+AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
+ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
+TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
+MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
+VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
+VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
+AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
+bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
+ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
+VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
+ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
+AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certigna.crt b/etc/ssl/certs/Certigna.crt
new file mode 100644
index 0000000..220d95f
--- /dev/null
+++ b/etc/ssl/certs/Certigna.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
+BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
+DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
+BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
+QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
+gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
+zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
+130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
+JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
+ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
+AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
+AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
+9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
+bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
+fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
+HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
+t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certinomis_-_Autorité_Racine.crt b/etc/ssl/certs/Certinomis_-_Autorité_Racine.crt
new file mode 100644
index 0000000..e764de4
--- /dev/null
+++ b/etc/ssl/certs/Certinomis_-_Autorité_Racine.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
+MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
+BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
+Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
+cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
+aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
+F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
+8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
+rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
+/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
+7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
+28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
+lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
+nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
+0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
+5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
+WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
+jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
+KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
+ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
+OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
+619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
+2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
+o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
+nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
+5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
+pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
+dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
+BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certinomis_-_Root_CA.crt b/etc/ssl/certs/Certinomis_-_Root_CA.crt
new file mode 100644
index 0000000..7f60447
--- /dev/null
+++ b/etc/ssl/certs/Certinomis_-_Root_CA.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET
+MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb
+BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz
+MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx
+FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g
+Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2
+fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl
+LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV
+WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF
+TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb
+5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc
+CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri
+wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ
+wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG
+m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4
+F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng
+WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0
+2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF
+AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/
+0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw
+F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS
+g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj
+qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN
+h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/
+ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V
+btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj
+Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ
+8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW
+gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certplus_Class_2_Primary_CA.crt b/etc/ssl/certs/Certplus_Class_2_Primary_CA.crt
new file mode 100644
index 0000000..6d0133d
--- /dev/null
+++ b/etc/ssl/certs/Certplus_Class_2_Primary_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
+PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
+cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
+MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
+IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
+ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
+VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
+kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
+EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
+H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
+HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
+DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
+QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
+Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
+AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
+yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
+FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
+ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
+kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certplus_Root_CA_G1.crt b/etc/ssl/certs/Certplus_Root_CA_G1.crt
new file mode 100644
index 0000000..10072b7
--- /dev/null
+++ b/etc/ssl/certs/Certplus_Root_CA_G1.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUA
+MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy
+dHBsdXMgUm9vdCBDQSBHMTAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBa
+MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy
+dHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+ANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHNr49a
+iZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt
+6kuJPKNxQv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP
+0FG7Yn2ksYyy/yARujVjBYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f
+6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTvLRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDE
+EW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2z4QTd28n6v+WZxcIbekN
+1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc4nBvCGrc
+h2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCT
+mehd4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV
+4EJQeIQEQWGw9CEjjy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPO
+WftwenMGE9nTdDckQQoRb5fc5+R+ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1Ud
+DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSowcCbkahDFXxd
+Bie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHYlwuBsTANBgkq
+hkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh
+66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7
+/SMNkPX0XtPGYX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BS
+S7CTKtQ+FjPlnsZlFT5kOwQ/2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j
+2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F6ALEUz65noe8zDUa3qHpimOHZR4R
+Kttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilXCNQ314cnrUlZp5Gr
+RHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWetUNy
+6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEV
+V/xuZDDCVRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5
+g4VCXA9DO2pJNdWY9BW/+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl
+++O/QmueD6i9a5jc2NvLi6Td11n0bt3+qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certplus_Root_CA_G2.crt b/etc/ssl/certs/Certplus_Root_CA_G2.crt
new file mode 100644
index 0000000..05c733a
--- /dev/null
+++ b/etc/ssl/certs/Certplus_Root_CA_G2.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4x
+CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs
+dXMgUm9vdCBDQSBHMjAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4x
+CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs
+dXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABM0PW1aC3/BFGtat
+93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uNAm8x
+Ik0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0P
+AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwj
+FNiPwyCrKGBZMB8GA1UdIwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqG
+SM49BAMDA2gAMGUCMHD+sAvZ94OX7PNVHdTcswYO/jOYnYs5kGuUIe22113WTNch
+p+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjlvPl5adytRSv3tjFzzAal
+U5ORGpOucGpnutee5WEaXw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certum_Root_CA.crt b/etc/ssl/certs/Certum_Root_CA.crt
new file mode 100644
index 0000000..b133fcb
--- /dev/null
+++ b/etc/ssl/certs/Certum_Root_CA.crt
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
+jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
+ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
+ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
+Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
+AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
+HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
+uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
+TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
+xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
+CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
+O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
+6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certum_Trusted_Network_CA.crt b/etc/ssl/certs/Certum_Trusted_Network_CA.crt
new file mode 100644
index 0000000..a04e656
--- /dev/null
+++ b/etc/ssl/certs/Certum_Trusted_Network_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
+MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
+ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
+cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
+WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
+Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
+IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
+UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
+TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
+BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
+kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
+AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
+HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
+sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
+I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
+J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
+VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Certum_Trusted_Network_CA_2.crt b/etc/ssl/certs/Certum_Trusted_Network_CA_2.crt
new file mode 100644
index 0000000..126e948
--- /dev/null
+++ b/etc/ssl/certs/Certum_Trusted_Network_CA_2.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB
+gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu
+QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG
+A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz
+OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ
+VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3
+b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA
+DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn
+0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB
+OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE
+fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E
+Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m
+o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i
+sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW
+OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez
+Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS
+adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n
+3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ
+F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf
+CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29
+XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm
+djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/
+WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb
+AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq
+P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko
+b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj
+XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P
+5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi
+DrW5viSP
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Chambers_of_Commerce_Root_-_2008.crt b/etc/ssl/certs/Chambers_of_Commerce_Root_-_2008.crt
new file mode 100644
index 0000000..7d3a249
--- /dev/null
+++ b/etc/ssl/certs/Chambers_of_Commerce_Root_-_2008.crt
@@ -0,0 +1,42 @@
+-----BEGIN CERTIFICATE-----
+MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
+VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
+IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
+MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
+IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
+MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
+dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
+EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
+MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
+28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
+VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
+DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
+5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
+ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
+Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
+UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
+Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
+ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
+hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
+HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
+YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
+L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
+ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
+IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
+HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
+DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
+PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
+5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
+glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
+FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
+pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
+xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
+tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
+jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
+fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
+OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
+d0jQ
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/China_Internet_Network_Information_Center_EV_Certificates_Root.crt b/etc/ssl/certs/China_Internet_Network_Information_Center_EV_Certificates_Root.crt
new file mode 100644
index 0000000..b5e4f9a
--- /dev/null
+++ b/etc/ssl/certs/China_Internet_Network_Information_Center_EV_Certificates_Root.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
+Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g
+Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0
+aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa
+Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg
+SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo
+aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp
+ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z
+7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//
+DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx
+zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8
+hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs
+4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u
+gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY
+NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3
+j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG
+52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB
+echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
+ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI
+zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy
+wy39FCqQmbkHzJ8=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/ComSign_CA.crt b/etc/ssl/certs/ComSign_CA.crt
new file mode 100644
index 0000000..35fb522
--- /dev/null
+++ b/etc/ssl/certs/ComSign_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
+MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
+EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
+CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
+8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
+98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
+2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
+ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
+Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
+o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
+ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
+AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
+AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
+foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
+cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
+8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
+hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
+Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
+AGegcQCCSA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Comodo_AAA_Services_root.crt b/etc/ssl/certs/Comodo_AAA_Services_root.crt
new file mode 100644
index 0000000..33c71ba
--- /dev/null
+++ b/etc/ssl/certs/Comodo_AAA_Services_root.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
+YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
+GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
+BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
+3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
+YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
+rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
+ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
+oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
+QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
+b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
+AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
+GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
+G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
+l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
+smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Comodo_Secure_Services_root.crt b/etc/ssl/certs/Comodo_Secure_Services_root.crt
new file mode 100644
index 0000000..fe804a3
--- /dev/null
+++ b/etc/ssl/certs/Comodo_Secure_Services_root.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
+ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
+fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
+BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
+cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
+HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
+CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
+3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
+6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
+HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
+Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
+Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
+DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
+5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
+gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
+aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
+izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Comodo_Trusted_Services_root.crt b/etc/ssl/certs/Comodo_Trusted_Services_root.crt
new file mode 100644
index 0000000..72cbf56
--- /dev/null
+++ b/etc/ssl/certs/Comodo_Trusted_Services_root.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
+aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
+MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
+VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
+fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
+TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
+fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
+1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
+kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
+A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
+ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
+dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
+Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
+HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
+jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
+xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
+dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Cybertrust_Global_Root.crt b/etc/ssl/certs/Cybertrust_Global_Root.crt
new file mode 100644
index 0000000..edbeb27
--- /dev/null
+++ b/etc/ssl/certs/Cybertrust_Global_Root.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
+A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
+bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
+ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
+b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
+7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
+J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
+HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
+t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
+FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
+XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
+MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
+hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
+MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
+A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
+Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
+XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
+omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
+A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
+WL1WMRJOEcgh4LMRkWXbtKaIOM5V
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_2009.crt b/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_2009.crt
new file mode 100644
index 0000000..e084d98
--- /dev/null
+++ b/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_2009.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF
+MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD
+bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha
+ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM
+HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03
+UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42
+tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R
+ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM
+lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp
+/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G
+A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G
+A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj
+dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy
+MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl
+cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js
+L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL
+BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni
+acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
+o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K
+zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8
+PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y
+Johw1+qRzT65ysCQblrGXnRl11z+o+I=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_EV_2009.crt b/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_EV_2009.crt
new file mode 100644
index 0000000..0a1a2b2
--- /dev/null
+++ b/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_EV_2009.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF
+MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD
+bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw
+NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV
+BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn
+ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0
+3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z
+qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR
+p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8
+HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw
+ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea
+HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw
+Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh
+c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E
+RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt
+dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku
+Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp
+3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
+nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF
+CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na
+xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX
+KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DST_ACES_CA_X6.crt b/etc/ssl/certs/DST_ACES_CA_X6.crt
new file mode 100644
index 0000000..13a7df4
--- /dev/null
+++ b/etc/ssl/certs/DST_ACES_CA_X6.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
+ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
+MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
+VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
+FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
+ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
+gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
+fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
+ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
+ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
+c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
+dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
+aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
+hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
+QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
+h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
+rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
+9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DST_Root_CA_X3.crt b/etc/ssl/certs/DST_Root_CA_X3.crt
new file mode 100644
index 0000000..b2e43c9
--- /dev/null
+++ b/etc/ssl/certs/DST_Root_CA_X3.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
+rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
+OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
+xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
+7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
+aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
+SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
+ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
+AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
+R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
+JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
+Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Deutsche_Telekom_Root_CA_2.crt b/etc/ssl/certs/Deutsche_Telekom_Root_CA_2.crt
new file mode 100644
index 0000000..05879ff
--- /dev/null
+++ b/etc/ssl/certs/Deutsche_Telekom_Root_CA_2.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
+MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
+IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
+IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
+RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
+U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
+IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
+ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
+QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
+rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
+NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
+QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
+txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
+BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
+AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
+tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
+IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
+6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
+Cm26OWMohpLzGITY+9HPBVZkVw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_Assured_ID_Root_CA.crt b/etc/ssl/certs/DigiCert_Assured_ID_Root_CA.crt
new file mode 100644
index 0000000..2731638
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_Assured_ID_Root_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
+JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
+mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
+VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
+AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
+AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
+pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
+dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
+fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
+NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
+H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_Assured_ID_Root_G2.crt b/etc/ssl/certs/DigiCert_Assured_ID_Root_G2.crt
new file mode 100644
index 0000000..fc60fb5
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_Assured_ID_Root_G2.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA
+n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc
+biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp
+EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA
+bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu
+YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB
+AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW
+BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI
+QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I
+0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni
+lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9
+B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv
+ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
+IhNzbM8m9Yop5w==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_Assured_ID_Root_G3.crt b/etc/ssl/certs/DigiCert_Assured_ID_Root_G3.crt
new file mode 100644
index 0000000..244c99b
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_Assured_ID_Root_G3.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw
+CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
+ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg
+RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu
+Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq
+hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf
+Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q
+RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD
+AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY
+JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv
+6pZjamVFkpUBtA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_Global_Root_CA.crt b/etc/ssl/certs/DigiCert_Global_Root_CA.crt
new file mode 100644
index 0000000..fd4341d
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_Global_Root_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_Global_Root_G2.crt b/etc/ssl/certs/DigiCert_Global_Root_G2.crt
new file mode 100644
index 0000000..798e002
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_Global_Root_G2.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
+MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI
+2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx
+1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ
+q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz
+tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ
+vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP
+BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV
+5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY
+1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4
+NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG
+Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91
+8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe
+pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
+MrY=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_Global_Root_G3.crt b/etc/ssl/certs/DigiCert_Global_Root_G3.crt
new file mode 100644
index 0000000..bc20c1e
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_Global_Root_G3.crt
@@ -0,0 +1,15 @@
+-----BEGIN CERTIFICATE-----
+MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw
+CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu
+ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe
+Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw
+EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x
+IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF
+K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG
+fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO
+Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd
+BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx
+AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/
+oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8
+sycX
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.crt b/etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.crt
new file mode 100644
index 0000000..9e6810a
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
+PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
+xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
+Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
+hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
+EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
+FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
+nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
+eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
+hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
+Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
++OkuE6N36B9K
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/DigiCert_Trusted_Root_G4.crt b/etc/ssl/certs/DigiCert_Trusted_Root_G4.crt
new file mode 100644
index 0000000..4214227
--- /dev/null
+++ b/etc/ssl/certs/DigiCert_Trusted_Root_G4.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg
+RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu
+Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y
+ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If
+xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV
+ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO
+DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ
+jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/
+CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi
+EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM
+fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY
+uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK
+chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t
+9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
+ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2
+SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd
++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc
+fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa
+sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N
+cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N
+0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie
+4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI
+r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1
+/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm
+gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/E-Tugra_Certification_Authority.crt b/etc/ssl/certs/E-Tugra_Certification_Authority.crt
new file mode 100644
index 0000000..9748599
--- /dev/null
+++ b/etc/ssl/certs/E-Tugra_Certification_Authority.crt
@@ -0,0 +1,36 @@
+-----BEGIN CERTIFICATE-----
+MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV
+BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC
+aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV
+BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1
+Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz
+MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+
+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp
+em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
+ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY
+B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH
+D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF
+Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo
+q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D
+k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH
+fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut
+dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM
+ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8
+zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
+rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX
+U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6
+Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5
+XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF
+Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR
+HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY
+GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c
+77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3
++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK
+vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6
+FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl
+yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P
+AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD
+y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d
+NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt b/etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
new file mode 100644
index 0000000..a684013
--- /dev/null
+++ b/etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
+BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
+ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
+MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
+SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
+a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
+4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
+tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
+tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
+dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
+c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
+TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
++kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
+Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
+OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
+fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
+l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
+FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
+8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
+6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
+TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
+wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
+Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
+xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
+DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
+Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
+hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
+7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
+QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/EC-ACC.crt b/etc/ssl/certs/EC-ACC.crt
new file mode 100644
index 0000000..87a13f6
--- /dev/null
+++ b/etc/ssl/certs/EC-ACC.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
+8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
+dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
+YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
+dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
+IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
+LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
+EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
+KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
+ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
+bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
+ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
+85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
+4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
+HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
+QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
+lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
+o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
+opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
+dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
+ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
+AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
+/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
+SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
+Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
+Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
+nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/EE_Certification_Centre_Root_CA.crt b/etc/ssl/certs/EE_Certification_Centre_Root_CA.crt
new file mode 100644
index 0000000..013d461
--- /dev/null
+++ b/etc/ssl/certs/EE_Certification_Centre_Root_CA.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
+MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
+czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
+CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
+MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
+ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
+b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
+euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
+bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
+WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
+MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
+1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
+VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
+zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
+BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
+BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
+v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
+E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
+uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
+iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
+GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Entrust.net_Premium_2048_Secure_Server_CA.crt b/etc/ssl/certs/Entrust.net_Premium_2048_Secure_Server_CA.crt
new file mode 100644
index 0000000..2ed99ca
--- /dev/null
+++ b/etc/ssl/certs/Entrust.net_Premium_2048_Secure_Server_CA.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
+MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
+j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
+U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
+u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
+bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
+fF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Entrust_Root_Certification_Authority.crt b/etc/ssl/certs/Entrust_Root_Certification_Authority.crt
new file mode 100644
index 0000000..855485c
--- /dev/null
+++ b/etc/ssl/certs/Entrust_Root_Certification_Authority.crt
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
+NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
+BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
+Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
+4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
+KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
+rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
+94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
+sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
+gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
+kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
+vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
+O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
+AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
+9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
+eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
+0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Entrust_Root_Certification_Authority_-_EC1.crt b/etc/ssl/certs/Entrust_Root_Certification_Authority_-_EC1.crt
new file mode 100644
index 0000000..b2043ac
--- /dev/null
+++ b/etc/ssl/certs/Entrust_Root_Certification_Authority_-_EC1.crt
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
+A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
+d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
+dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq
+RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy
+MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD
+VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
+L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g
+Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi
+A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt
+ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH
+Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC
+R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX
+hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Entrust_Root_Certification_Authority_-_G2.crt b/etc/ssl/certs/Entrust_Root_Certification_Authority_-_G2.crt
new file mode 100644
index 0000000..2e23a60
--- /dev/null
+++ b/etc/ssl/certs/Entrust_Root_Certification_Authority_-_G2.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50
+cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs
+IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz
+dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy
+NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu
+dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt
+dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0
+aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T
+RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN
+cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW
+wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1
+U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0
+jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN
+BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/
+jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
+Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v
+1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R
+nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH
+VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Equifax_Secure_CA.crt b/etc/ssl/certs/Equifax_Secure_CA.crt
new file mode 100644
index 0000000..676db97
--- /dev/null
+++ b/etc/ssl/certs/Equifax_Secure_CA.crt
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
+dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
+MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
+dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
+BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
+cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
+MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
+ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
+IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
+7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
+1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Equifax_Secure_Global_eBusiness_CA.crt b/etc/ssl/certs/Equifax_Secure_Global_eBusiness_CA.crt
new file mode 100644
index 0000000..03cb845
--- /dev/null
+++ b/etc/ssl/certs/Equifax_Secure_Global_eBusiness_CA.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
+ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
+MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
+dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
+c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
+UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
+58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
+o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
+MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
+aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
+A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
+Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
+8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Equifax_Secure_eBusiness_CA_1.crt b/etc/ssl/certs/Equifax_Secure_eBusiness_CA_1.crt
new file mode 100644
index 0000000..768a9eb
--- /dev/null
+++ b/etc/ssl/certs/Equifax_Secure_eBusiness_CA_1.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
+ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
+MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
+LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
+RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
+WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
+Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
+eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
+zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
+/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GeoTrust_Global_CA.crt b/etc/ssl/certs/GeoTrust_Global_CA.crt
new file mode 100644
index 0000000..bcb2529
--- /dev/null
+++ b/etc/ssl/certs/GeoTrust_Global_CA.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
+R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
+9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
+fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
+iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
+1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
+MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
+ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
+uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
+Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
+tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
+PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
+hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
+5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GeoTrust_Global_CA_2.crt b/etc/ssl/certs/GeoTrust_Global_CA_2.crt
new file mode 100644
index 0000000..2031f3e
--- /dev/null
+++ b/etc/ssl/certs/GeoTrust_Global_CA_2.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
+IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
+R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
+PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
+Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
+TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
+5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
+S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
+2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
+EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
+EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
+/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
+A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
+abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
+I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
+4iIprn2DQKi6bA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GeoTrust_Primary_Certification_Authority.crt b/etc/ssl/certs/GeoTrust_Primary_Certification_Authority.crt
new file mode 100644
index 0000000..03c70c7
--- /dev/null
+++ b/etc/ssl/certs/GeoTrust_Primary_Certification_Authority.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
+MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
+AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
+ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
+7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
+kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
+mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
+KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
+6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
+4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
+oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
+UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
+AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G2.crt b/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G2.crt
new file mode 100644
index 0000000..f9364c0
--- /dev/null
+++ b/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G2.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
+MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
+KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
+MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
+NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
+BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
+So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
+tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
+CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
+qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
+rD6ogRLQy7rQkgu2npaqBA+K
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G3.crt b/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G3.crt
new file mode 100644
index 0000000..dc1f859
--- /dev/null
+++ b/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G3.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
+mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
+MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
+BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
+BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
+hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
+5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
+JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
+DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
+huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
+HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
+AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
+zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
+kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
+SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
+spki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GeoTrust_Universal_CA.crt b/etc/ssl/certs/GeoTrust_Universal_CA.crt
new file mode 100644
index 0000000..6bc2888
--- /dev/null
+++ b/etc/ssl/certs/GeoTrust_Universal_CA.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
+IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
+VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
+cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
+QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
+F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
+c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
+mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
+VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
+teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
+f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
+Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
+nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
+/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
+MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
+9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
+IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
+ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
+uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
+Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
+QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
+koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
+ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
+DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
+bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GeoTrust_Universal_CA_2.crt b/etc/ssl/certs/GeoTrust_Universal_CA_2.crt
new file mode 100644
index 0000000..bed6cd0
--- /dev/null
+++ b/etc/ssl/certs/GeoTrust_Universal_CA_2.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
+VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
+c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
+WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
+FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
+XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
+se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
+KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
+IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
+y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
+hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
+QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
+Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
+HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
+KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
+dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
+L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
+Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
+ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
+T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
+GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
+1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
+OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
+6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
+QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R4.crt b/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R4.crt
new file mode 100644
index 0000000..e9d0c33
--- /dev/null
+++ b/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R4.crt
@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk
+MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH
+bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX
+DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD
+QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ
+FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F
+uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX
+kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs
+ewv4n4Q=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R5.crt b/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R5.crt
new file mode 100644
index 0000000..111991b
--- /dev/null
+++ b/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R5.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk
+MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH
+bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX
+DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD
+QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc
+8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke
+hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI
+KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg
+515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO
+xwy8p2Fp8fc74SrL+SvzZpA3
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GlobalSign_Root_CA.crt b/etc/ssl/certs/GlobalSign_Root_CA.crt
new file mode 100644
index 0000000..f4ce4ca
--- /dev/null
+++ b/etc/ssl/certs/GlobalSign_Root_CA.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GlobalSign_Root_CA_-_R2.crt b/etc/ssl/certs/GlobalSign_Root_CA_-_R2.crt
new file mode 100644
index 0000000..6f0f8db
--- /dev/null
+++ b/etc/ssl/certs/GlobalSign_Root_CA_-_R2.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
+MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
+v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
+eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
+tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
+C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
+zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
+mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
+V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
+bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
+3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
+J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
+291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
+ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
+AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/GlobalSign_Root_CA_-_R3.crt b/etc/ssl/certs/GlobalSign_Root_CA_-_R3.crt
new file mode 100644
index 0000000..8afb219
--- /dev/null
+++ b/etc/ssl/certs/GlobalSign_Root_CA_-_R3.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
+MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
+RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
+gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
+KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
+QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
+XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
+LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
+RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
+jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
+6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
+mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
+Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
+WD9f
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Global_Chambersign_Root_-_2008.crt b/etc/ssl/certs/Global_Chambersign_Root_-_2008.crt
new file mode 100644
index 0000000..70b4ce4
--- /dev/null
+++ b/etc/ssl/certs/Global_Chambersign_Root_-_2008.crt
@@ -0,0 +1,41 @@
+-----BEGIN CERTIFICATE-----
+MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
+VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
+IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
+MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
+aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
+MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
+cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
+A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
+BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
+hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
+KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
+G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
+zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
+ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
+HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
+Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
+yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
+beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
+6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
+wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
+zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
+BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
+ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
+ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
+cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
+YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
+CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
+KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
+hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
+UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
+X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
+fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
+a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
+Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
+SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
+AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
+M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
+v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
+09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Go_Daddy_Class_2_CA.crt b/etc/ssl/certs/Go_Daddy_Class_2_CA.crt
new file mode 100644
index 0000000..42e8d1e
--- /dev/null
+++ b/etc/ssl/certs/Go_Daddy_Class_2_CA.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
+MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
+YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
+MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
+ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
+MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
+ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
+PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
+wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
+EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
+avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
+sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
+/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
+IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
+OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
+TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
+dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
+ReYNnyicsbkqWletNw+vHX/bvZ8=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Go_Daddy_Root_Certificate_Authority_-_G2.crt b/etc/ssl/certs/Go_Daddy_Root_Certificate_Authority_-_G2.crt
new file mode 100644
index 0000000..c2b2907
--- /dev/null
+++ b/etc/ssl/certs/Go_Daddy_Root_Certificate_Authority_-_G2.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
+EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
+ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
+NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
+EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
+AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
+E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
+/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
+DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
+GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
+tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
+AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
+WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
+9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
+gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
+2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
+4uJEvlz36hz1
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt b/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt
new file mode 100644
index 0000000..5e5bc74
--- /dev/null
+++ b/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN
+BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
+c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl
+bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv
+b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ
+BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj
+YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5
+MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0
+dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg
+QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa
+jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi
+C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep
+lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof
+TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt b/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt
new file mode 100644
index 0000000..5ecc81c
--- /dev/null
+++ b/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
+RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
+dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
+YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
+NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
+EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
+cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
+c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
+dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
+fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
+bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
+75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
+FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
+HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
+5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
+b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
+A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
+6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
+TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
+dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
+Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
+l7WdmplNsDz4SgCbZN2fOUvRJ9e4
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt b/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt
new file mode 100644
index 0000000..2cc7e06
--- /dev/null
+++ b/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix
+DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k
+IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT
+N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v
+dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG
+A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh
+ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx
+QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
+dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA
+4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0
+AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10
+4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C
+ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV
+9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD
+gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6
+Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq
+NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko
+LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
+Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd
+ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I
+XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI
+M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot
+9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V
+Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea
+j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh
+X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ
+l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf
+bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4
+pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK
+e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0
+vm9qp/UsQu0yrbYhnr68
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Hongkong_Post_Root_CA_1.crt b/etc/ssl/certs/Hongkong_Post_Root_CA_1.crt
new file mode 100644
index 0000000..a28e9a0
--- /dev/null
+++ b/etc/ssl/certs/Hongkong_Post_Root_CA_1.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
+FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
+Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
+A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
+b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
+jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
+PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
+ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
+nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
+q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
+MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
+mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
+7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
+oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
+EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
+fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
+AmvZWg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/IGC_A.crt b/etc/ssl/certs/IGC_A.crt
new file mode 100644
index 0000000..8940ef5
--- /dev/null
+++ b/etc/ssl/certs/IGC_A.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
+AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
+TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
+9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
+MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
+BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
+MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
+LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
+s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
+xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
+u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
+F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
+Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
+PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
+HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
+NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
+AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
+L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
+YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
+Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
+NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
+0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/ISRG_Root_X1.crt b/etc/ssl/certs/ISRG_Root_X1.crt
new file mode 100644
index 0000000..b85c803
--- /dev/null
+++ b/etc/ssl/certs/ISRG_Root_X1.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
+TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
+WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
+ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
+MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
+h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
+A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
+T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
+B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
+B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
+KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
+OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
+jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
+qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
+rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
+hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
+3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
+NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
+ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
+TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
+jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
+oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
+4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
+mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
+emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/IdenTrust_Commercial_Root_CA_1.crt b/etc/ssl/certs/IdenTrust_Commercial_Root_CA_1.crt
new file mode 100644
index 0000000..de6f07d
--- /dev/null
+++ b/etc/ssl/certs/IdenTrust_Commercial_Root_CA_1.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK
+MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu
+VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw
+MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw
+JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT
+3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU
++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp
+S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1
+bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi
+T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL
+vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK
+Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK
+dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT
+c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv
+l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N
+iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD
+ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH
+6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt
+LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93
+nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3
++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK
+W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT
+AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq
+l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG
+4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ
+mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A
+7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/IdenTrust_Public_Sector_Root_CA_1.crt b/etc/ssl/certs/IdenTrust_Public_Sector_Root_CA_1.crt
new file mode 100644
index 0000000..3809339
--- /dev/null
+++ b/etc/ssl/certs/IdenTrust_Public_Sector_Root_CA_1.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN
+MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu
+VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN
+MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0
+MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7
+ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy
+RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS
+bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF
+/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R
+3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw
+EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy
+9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V
+GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ
+2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV
+WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD
+W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN
+AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj
+t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV
+DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9
+TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G
+lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW
+mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df
+WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5
++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ
+tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA
+GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv
+8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Izenpe.com.crt b/etc/ssl/certs/Izenpe.com.crt
new file mode 100644
index 0000000..7638321
--- /dev/null
+++ b/etc/ssl/certs/Izenpe.com.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
+MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
+ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
+VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
+b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
+scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
+xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
+LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
+uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
+yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
+rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
+BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
+hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
+QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
+HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
+Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
+QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
+BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
+MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
+A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
+laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
+awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
+JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
+LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
+VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
+LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
+UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
+QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
+QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Juur-SK.crt b/etc/ssl/certs/Juur-SK.crt
new file mode 100644
index 0000000..269961b
--- /dev/null
+++ b/etc/ssl/certs/Juur-SK.crt
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
+AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
+dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
+MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
+CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
+MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
+SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
+ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
+LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
+PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
+2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
+ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
+MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
+AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
+AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
+AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
+AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
+BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
+FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
+P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
+CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
+kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
+HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
+na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
+qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
+TbvGRNs2yyqcjg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Microsec_e-Szigno_Root_CA.crt b/etc/ssl/certs/Microsec_e-Szigno_Root_CA.crt
new file mode 100644
index 0000000..01bb0be
--- /dev/null
+++ b/etc/ssl/certs/Microsec_e-Szigno_Root_CA.crt
@@ -0,0 +1,43 @@
+-----BEGIN CERTIFICATE-----
+MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
+cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
+b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
+ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
+NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
+TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
+Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
+uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
+vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
+Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
+62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
+AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
+LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
+BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
+AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
+MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
+ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
+AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
+AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
+ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
+AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
+AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
+bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
+Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
+PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
+Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
+EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
+w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
+cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
+HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
+VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
+BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
+b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
+8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
+ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
+7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
+86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
+hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
+MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Microsec_e-Szigno_Root_CA_2009.crt b/etc/ssl/certs/Microsec_e-Szigno_Root_CA_2009.crt
new file mode 100644
index 0000000..aa844e7
--- /dev/null
+++ b/etc/ssl/certs/Microsec_e-Szigno_Root_CA_2009.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
+VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
+ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
+CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
+OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
+FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
+Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
+dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
+kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
+cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
+fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
+N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
+xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
+Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
+SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
+mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
+ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
+tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
+2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
+HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt b/etc/ssl/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt
new file mode 100644
index 0000000..56b9ee4
--- /dev/null
+++ b/etc/ssl/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
+EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
+MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
+cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
+dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
+pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
+b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
+aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
+IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
+lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
+AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
+VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
+ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
+BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
+AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
+U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
+bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
+uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
+XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Network_Solutions_Certificate_Authority.crt b/etc/ssl/certs/Network_Solutions_Certificate_Authority.crt
new file mode 100644
index 0000000..11289bc
--- /dev/null
+++ b/etc/ssl/certs/Network_Solutions_Certificate_Authority.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
+MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
+dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
+UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
+ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
+c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
+OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
+mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
+BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
+qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
+gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
+bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
+dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
+6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
+h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
+/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
+pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/OISTE_WISeKey_Global_Root_GA_CA.crt b/etc/ssl/certs/OISTE_WISeKey_Global_Root_GA_CA.crt
new file mode 100644
index 0000000..a695c21
--- /dev/null
+++ b/etc/ssl/certs/OISTE_WISeKey_Global_Root_GA_CA.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
+ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
+aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
+ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
+NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
+A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
+VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
+SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
+VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
+w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
+mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
+4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
+4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
+EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
+SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
+ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
+vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
+Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
+/L7fCg0=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/OISTE_WISeKey_Global_Root_GB_CA.crt b/etc/ssl/certs/OISTE_WISeKey_Global_Root_GB_CA.crt
new file mode 100644
index 0000000..7c1082b
--- /dev/null
+++ b/etc/ssl/certs/OISTE_WISeKey_Global_Root_GB_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt
+MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg
+Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i
+YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x
+CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG
+b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh
+bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3
+HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx
+WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX
+1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk
+u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P
+99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r
+M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB
+BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh
+cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5
+gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO
+ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf
+aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
+Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/OpenTrust_Root_CA_G1.crt b/etc/ssl/certs/OpenTrust_Root_CA_G1.crt
new file mode 100644
index 0000000..2d5f2aa
--- /dev/null
+++ b/etc/ssl/certs/OpenTrust_Root_CA_G1.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUA
+MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w
+ZW5UcnVzdCBSb290IENBIEcxMB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAw
+MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU
+T3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
+AoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7faYp6b
+wiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX
+/uMftk87ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR0
+77F9jAHiOH3BX2pfJLKOYheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGP
+uY4zbGneWK2gDqdkVBFpRGZPTBKnjix9xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLx
+p2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO9z0M+Yo0FMT7MzUj8czx
+Kselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq3ywgsNw2
+TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+W
+G+Oin6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPw
+vFEVVJSmdz7QdFG9URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYY
+EQRVzXR7z2FwefR7LFxckvzluFqrTJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUl0YhVyE1
+2jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/PxN3DlCPaTKbYw
+DQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E
+PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kf
+gLMtMrpkZ2CvuVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbS
+FXJfLkur1J1juONI5f6ELlgKn0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0
+V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLhX4SPgPL0DTatdrOjteFkdjpY3H1P
+XlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80nR14SohWZ25g/4/I
+i+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcmGS3t
+TAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L91
+09S5zvE/bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/Ky
+Pu1svf0OnWZzsD2097+o4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJ
+AwSQiumPv+i2tCqjI40cHLI5kqiPAlxAOXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj
+1oxx
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/OpenTrust_Root_CA_G2.crt b/etc/ssl/certs/OpenTrust_Root_CA_G2.crt
new file mode 100644
index 0000000..a1666d2
--- /dev/null
+++ b/etc/ssl/certs/OpenTrust_Root_CA_G2.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUA
+MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w
+ZW5UcnVzdCBSb290IENBIEcyMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAw
+MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU
+T3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
+AoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+Ntmh
+/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78e
+CbY2albz4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/6
+1UWY0jUJ9gNDlP7ZvyCVeYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fE
+FY8ElggGQgT4hNYdvJGmQr5J1WqIP7wtUdGejeBSzFfdNTVY27SPJIjki9/ca1TS
+gSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz3GIZ38i1MH/1PCZ1Eb3X
+G7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj3CzMpSZy
+YhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaH
+vGOz9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4
+t/bQWVyJ98LVtZR00dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/
+gh7PU3+06yzbXfZqfUAkBXKJOAGTy3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUajn6QiL3
+5okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59M4PLuG53hq8w
+DQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz
+Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0
+nXGEL8pZ0keImUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qT
+RmTFAHneIWv2V6CG1wZy7HBGS4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpT
+wm+bREx50B1ws9efAvSyB7DH5fitIw6mVskpEndI2S9G/Tvw/HRwkqWOOAgfZDC2
+t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ6e18CL13zSdkzJTa
+TkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97krgCf2
+o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU
+3jg9CcCoSmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eA
+iN1nE28daCSLT7d0geX0YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14f
+WKGVyasvc0rQLW6aWQ9VGHgtPFGml4vmu7JwqkwR3v98KzfUetF3NI/n+UL3PIEM
+S1IK
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/OpenTrust_Root_CA_G3.crt b/etc/ssl/certs/OpenTrust_Root_CA_G3.crt
new file mode 100644
index 0000000..5245ec8
--- /dev/null
+++ b/etc/ssl/certs/OpenTrust_Root_CA_G3.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAx
+CzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5U
+cnVzdCBSb290IENBIEczMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFow
+QDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwUT3Bl
+blRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARK7liuTcpm
+3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5Bta1d
+oYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4G
+A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5
+DMlv4VBN0BBY3JWIbTAfBgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAK
+BggqhkjOPQQDAwNpADBmAjEAj6jcnboMBBf6Fek9LykBl7+BFjNAk2z8+e2AcG+q
+j9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta3U1fJAuwACEl74+nBCZx
+4nxp5V2a+EEfOzmTk51V6s2N8fvB
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/PSCProcert.crt b/etc/ssl/certs/PSCProcert.crt
new file mode 100644
index 0000000..e05f0cb
--- /dev/null
+++ b/etc/ssl/certs/PSCProcert.crt
@@ -0,0 +1,53 @@
+-----BEGIN CERTIFICATE-----
+MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s
+YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz
+dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0
+aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh
+IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ
+KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEw
+MFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHBy
+b2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx
+KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQG
+A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9u
+aWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZI
+hvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo9
+7BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74
+BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38G
+ieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9
+JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg353bIdD0
+PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2
+0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
+0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/
+6mnbVSKVUyqUtd+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1m
+v6JpIzi4mWCZDlZTOpx+FIywBm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7
+K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvpr2uKGcfLFFb14dq12fy/czja+eev
+bqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/AgEBMDcGA1UdEgQw
+MC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0w
+MB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFD
+gBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0
+b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xh
+bm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0
+cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRp
+ZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEg
+ZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkq
+hkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQD
+AgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0w
+MDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEag
+RKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t
+UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2Nl
+cnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
+Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsG
+AQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcN
+AQELBQADggIBACtZ6yKZu4SqT96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS
+1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+mvTV+LFwxNG9s2/NkAZiqlCxB
+3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4quxtxj7mkoP3Yldmv
+Wb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1n8Gh
+HVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm
+pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXz
+sOfIt+FTvZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bE
+qCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2Bbdb
+mRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9
+opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3YeMLEYC/H
+YvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/QuoVadis_Root_CA.crt b/etc/ssl/certs/QuoVadis_Root_CA.crt
new file mode 100644
index 0000000..ffa4dbe
--- /dev/null
+++ b/etc/ssl/certs/QuoVadis_Root_CA.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
+MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
+IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
+dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
+li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
+rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
+WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
+F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
+xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
+Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
+dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
+ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
+IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
+c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
+ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
+KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
+KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
+y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
+dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
+VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
+MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
+fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
+7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
+cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
+mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
+xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
+SnQ2+Q==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/QuoVadis_Root_CA_1_G3.crt b/etc/ssl/certs/QuoVadis_Root_CA_1_G3.crt
new file mode 100644
index 0000000..2f89a04
--- /dev/null
+++ b/etc/ssl/certs/QuoVadis_Root_CA_1_G3.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL
+BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc
+BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00
+MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV
+wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe
+rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341
+68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh
+4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp
+UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o
+abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc
+3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G
+KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt
+hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO
+Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt
+zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD
+ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC
+MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2
+cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN
+qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5
+YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv
+b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2
+8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k
+NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj
+ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp
+q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt
+nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/QuoVadis_Root_CA_2.crt b/etc/ssl/certs/QuoVadis_Root_CA_2.crt
new file mode 100644
index 0000000..35cc4eb
--- /dev/null
+++ b/etc/ssl/certs/QuoVadis_Root_CA_2.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
+GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
+Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
+WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
+rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
+ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
+Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
+PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
+/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
+oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
+yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
+EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
+A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
+MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
+BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
+g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
+fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
+WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
+B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
+hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
+TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
+mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
+ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
+4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
+8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/QuoVadis_Root_CA_2_G3.crt b/etc/ssl/certs/QuoVadis_Root_CA_2_G3.crt
new file mode 100644
index 0000000..df5a27f
--- /dev/null
+++ b/etc/ssl/certs/QuoVadis_Root_CA_2_G3.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL
+BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc
+BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00
+MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf
+qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW
+n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym
+c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+
+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1
+o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j
+IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq
+IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz
+8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh
+vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l
+7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG
+cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD
+ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66
+AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC
+roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga
+W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n
+lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE
++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV
+csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd
+dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg
+KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM
+HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4
+WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/QuoVadis_Root_CA_3.crt b/etc/ssl/certs/QuoVadis_Root_CA_3.crt
new file mode 100644
index 0000000..bda7b1a
--- /dev/null
+++ b/etc/ssl/certs/QuoVadis_Root_CA_3.crt
@@ -0,0 +1,38 @@
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
+V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
+4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
+H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
+8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
+vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
+mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
+btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
+T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
+WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
+c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
+4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
+VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
+CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
+aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
+czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
+A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
+Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
+7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
+d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
+4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
+t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
+DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
+k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
+zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
+Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
+mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
+4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/QuoVadis_Root_CA_3_G3.crt b/etc/ssl/certs/QuoVadis_Root_CA_3_G3.crt
new file mode 100644
index 0000000..7d6c5b4
--- /dev/null
+++ b/etc/ssl/certs/QuoVadis_Root_CA_3_G3.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL
+BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc
+BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00
+MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR
+/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu
+FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR
+U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c
+ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR
+FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k
+A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw
+eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl
+sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp
+VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q
+A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+
+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD
+ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px
+KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI
+FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv
+oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg
+u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP
+0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf
+3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl
+8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+
+DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN
+PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/
+ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/RSA_Security_2048_v3.crt b/etc/ssl/certs/RSA_Security_2048_v3.crt
new file mode 100644
index 0000000..8b30d11
--- /dev/null
+++ b/etc/ssl/certs/RSA_Security_2048_v3.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
+MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
+eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
+/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
+wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
+AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
+PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
+AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
+MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
+HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
+Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
+f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
+rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
+6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
+7CAFYd4=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Root_CA_Generalitat_Valenciana.crt b/etc/ssl/certs/Root_CA_Generalitat_Valenciana.crt
new file mode 100644
index 0000000..f001356
--- /dev/null
+++ b/etc/ssl/certs/Root_CA_Generalitat_Valenciana.crt
@@ -0,0 +1,37 @@
+-----BEGIN CERTIFICATE-----
+MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
+UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
+R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
+MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
+A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
+JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
+WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
+SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
+u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
+A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
+Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
+MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
+aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
+IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
+cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
+YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
+bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
+bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
+aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
+aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
+ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
+YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
+ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
+LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
+Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
+eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
+CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
+A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
+Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
+lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
+b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
+9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
+ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
+IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt b/etc/ssl/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt
new file mode 100644
index 0000000..c0328d0
--- /dev/null
+++ b/etc/ssl/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
+rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
+MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
+c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
+IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
+Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
+V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
+RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
+U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
+toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
+TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
+ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
+XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
+hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
+7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
+MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
+HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
+ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
+pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
+LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
+iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
+h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
+k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/S-TRUST_Universal_Root_CA.crt b/etc/ssl/certs/S-TRUST_Universal_Root_CA.crt
new file mode 100644
index 0000000..75c128b
--- /dev/null
+++ b/etc/ssl/certs/S-TRUST_Universal_Root_CA.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID2DCCAsCgAwIBAgIQYFbFSyNAW2TU7SXa2dYeHjANBgkqhkiG9w0BAQsFADCB
+hTELMAkGA1UEBhMCREUxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZl
+cmxhZyBHbWJIMScwJQYDVQQLEx5TLVRSVVNUIENlcnRpZmljYXRpb24gU2Vydmlj
+ZXMxIjAgBgNVBAMTGVMtVFJVU1QgVW5pdmVyc2FsIFJvb3QgQ0EwHhcNMTMxMDIy
+MDAwMDAwWhcNMzgxMDIxMjM1OTU5WjCBhTELMAkGA1UEBhMCREUxKTAnBgNVBAoT
+IERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMScwJQYDVQQLEx5TLVRS
+VVNUIENlcnRpZmljYXRpb24gU2VydmljZXMxIjAgBgNVBAMTGVMtVFJVU1QgVW5p
+dmVyc2FsIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo
+4wvfETeFgpq1bGZ8YT/ARxodRuOwVWTluII5KAd+F//0m4rwkYHqOD8heGxI7Gsv
+otOKcrKn19nqf7TASWswJYmM67fVQGGY4tw8IJLNZUpynxqOjPolFb/zIYMoDYuv
+WRGCQ1ybTSVRf1gYY2A7s7WKi1hjN0hIkETCQN1d90NpKZhcEmVeq5CSS2bf1XUS
+U1QYpt6K1rtXAzlZmRgFDPn9FcaQZEYXgtfCSkE9/QC+V3IYlHcbU1qJAfYzcg6T
+OtzoHv0FBda8c+CI3KtP7LUYhk95hA5IKmYq3TLIeGXIC51YAQVx7YH1aBduyw20
+S9ih7K446xxYL6FlAzQvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
+AQH/BAQDAgEGMB0GA1UdDgQWBBSafdfr639UmEUptCCrbQuWIxmkwjANBgkqhkiG
+9w0BAQsFAAOCAQEATpYS2353XpInniEXGIJ22D+8pQkEZoiJrdtVszNqxmXEj03z
+MjbceQSWqXcy0Zf1GGuMuu3OEdBEx5LxtESO7YhSSJ7V/Vn4ox5R+wFS5V/let2q
+JE8ii912RvaloA812MoPmLkwXSBvwoEevb3A/hXTOCoJk5gnG5N70Cs0XmilFU/R
+UsOgyqCDRR319bdZc11ZAY+qwkcvFHHVKeMQtUeTJcwjKdq3ctiR1OwbSIoi5MEq
+9zpok59FGW5Dt8z+uJGaYRo2aWNkkijzb2GShROfyQcsi1fc65551cLeCNVUsldO
+KjKNoeI60RAgIjl9NEVvcTvDHfz/sk+o4vYwHg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/SZAFIR_ROOT_CA2.crt b/etc/ssl/certs/SZAFIR_ROOT_CA2.crt
new file mode 100644
index 0000000..b2e3f20
--- /dev/null
+++ b/etc/ssl/certs/SZAFIR_ROOT_CA2.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL
+BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6
+ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw
+NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L
+cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg
+Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN
+QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT
+3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw
+3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6
+3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5
+BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN
+XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF
+AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw
+8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG
+nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP
+oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy
+d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg
+LvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/SecureSign_RootCA11.crt b/etc/ssl/certs/SecureSign_RootCA11.crt
new file mode 100644
index 0000000..aff52a8
--- /dev/null
+++ b/etc/ssl/certs/SecureSign_RootCA11.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
+MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
+A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
+MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
+Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
+QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
+i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
+h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
+MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
+UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
+8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
+h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
+VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
+AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
+KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
+X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
+QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
+pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
+QSdJQO7e5iNEOdyhIta6A/I=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/SecureTrust_CA.crt b/etc/ssl/certs/SecureTrust_CA.crt
new file mode 100644
index 0000000..3740092
--- /dev/null
+++ b/etc/ssl/certs/SecureTrust_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
+MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
+cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
+Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
+0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
+wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
+7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
+8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
+BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
+JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
+NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
+6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
+3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
+D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
+CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Secure_Global_CA.crt b/etc/ssl/certs/Secure_Global_CA.crt
new file mode 100644
index 0000000..1f4574e
--- /dev/null
+++ b/etc/ssl/certs/Secure_Global_CA.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
+MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
+Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
+iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
+/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
+jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
+HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
+sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
+gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
+KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
+AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
+URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
+H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
+I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
+iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Security_Communication_EV_RootCA1.crt b/etc/ssl/certs/Security_Communication_EV_RootCA1.crt
new file mode 100644
index 0000000..de75da5
--- /dev/null
+++ b/etc/ssl/certs/Security_Communication_EV_RootCA1.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
+MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
+IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
+bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
+RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
+zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
+bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
+MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
+VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
+OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
+tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
+q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
+EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
+VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Security_Communication_RootCA2.crt b/etc/ssl/certs/Security_Communication_RootCA2.crt
new file mode 100644
index 0000000..078bd0e
--- /dev/null
+++ b/etc/ssl/certs/Security_Communication_RootCA2.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
+DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
+dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
+YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
+OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
+zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
+VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
+hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
+ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
+awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
+OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
+coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
+okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
+t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
+1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
+SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Security_Communication_Root_CA.crt b/etc/ssl/certs/Security_Communication_Root_CA.crt
new file mode 100644
index 0000000..ad1424a
--- /dev/null
+++ b/etc/ssl/certs/Security_Communication_Root_CA.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
+MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
+dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
+WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
+VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
+9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
+DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
+Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
+QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
+xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
+A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
+kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
+Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
+Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
+JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
+RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Sonera_Class_2_Root_CA.crt b/etc/ssl/certs/Sonera_Class_2_Root_CA.crt
new file mode 100644
index 0000000..36a998d
--- /dev/null
+++ b/etc/ssl/certs/Sonera_Class_2_Root_CA.crt
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
+MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
+MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
+BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
+Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
+5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
+3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
+vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
+8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
+DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
+zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
+3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
+FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
+Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
+ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Staat_der_Nederlanden_EV_Root_CA.crt b/etc/ssl/certs/Staat_der_Nederlanden_EV_Root_CA.crt
new file mode 100644
index 0000000..315f665
--- /dev/null
+++ b/etc/ssl/certs/Staat_der_Nederlanden_EV_Root_CA.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y
+MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg
+TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS
+b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS
+M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC
+UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d
+Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p
+rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l
+pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb
+j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC
+KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS
+/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X
+cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH
+1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP
+px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
+/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7
+MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI
+eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u
+2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS
+v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC
+wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy
+CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e
+vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6
+Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa
+Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL
+eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8
+FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc
+7uzXLg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G2.crt b/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G2.crt
new file mode 100644
index 0000000..cedf596
--- /dev/null
+++ b/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G2.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
+DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
+ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
+b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
+qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
+uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
+Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
+pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
+5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
+UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
+GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
+5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
+6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
+eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
+B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
+BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
+L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
+SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
+CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
+5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
+IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
+gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
+vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
+bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
+N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
+Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
+ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G3.crt b/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G3.crt
new file mode 100644
index 0000000..bc6a756
--- /dev/null
+++ b/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G3.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX
+DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
+ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
+b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP
+cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW
+IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX
+xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy
+KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR
+9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az
+5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8
+6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7
+Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP
+bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt
+BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt
+XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd
+INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
+U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp
+LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8
+Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp
+gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh
+/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw
+0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A
+fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq
+4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR
+1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/
+QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM
+94B7IWcnMFk=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Starfield_Class_2_CA.crt b/etc/ssl/certs/Starfield_Class_2_CA.crt
new file mode 100644
index 0000000..d552e65
--- /dev/null
+++ b/etc/ssl/certs/Starfield_Class_2_CA.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
+MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
+U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
+NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
+ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
+ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
+DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
+8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
+X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
+K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
+1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
+A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
+zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
+YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
+bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
+DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
+L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
+eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
+VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
+WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Starfield_Root_Certificate_Authority_-_G2.crt b/etc/ssl/certs/Starfield_Root_Certificate_Authority_-_G2.crt
new file mode 100644
index 0000000..c1a0a48
--- /dev/null
+++ b/etc/ssl/certs/Starfield_Root_Certificate_Authority_-_G2.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
+ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
+MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
+aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
+Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
+nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
+HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
+Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
+dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
+HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
+CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
+sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
+4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
+8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
+mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Starfield_Services_Root_Certificate_Authority_-_G2.crt b/etc/ssl/certs/Starfield_Services_Root_Certificate_Authority_-_G2.crt
new file mode 100644
index 0000000..f751915
--- /dev/null
+++ b/etc/ssl/certs/Starfield_Services_Root_Certificate_Authority_-_G2.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
+ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
+VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
+ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
+dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
+OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
+8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
+Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
+hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
+6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
+DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
+AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
+bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
+ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
+qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
+0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
+sSi6
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/SwissSign_Gold_CA_-_G2.crt b/etc/ssl/certs/SwissSign_Gold_CA_-_G2.crt
new file mode 100644
index 0000000..d721187
--- /dev/null
+++ b/etc/ssl/certs/SwissSign_Gold_CA_-_G2.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
+biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
+MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
+d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
+76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
+6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
+emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
+MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
+MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
+MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
+FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
+aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
+gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
+qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
+lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
+8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
+45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
+UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
+O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
+bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
+GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
+77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
+hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
+92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
+Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
+ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
+Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/SwissSign_Platinum_CA_-_G2.crt b/etc/ssl/certs/SwissSign_Platinum_CA_-_G2.crt
new file mode 100644
index 0000000..0aa3e35
--- /dev/null
+++ b/etc/ssl/certs/SwissSign_Platinum_CA_-_G2.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
+IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
+WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
+ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
+IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
+IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
+6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
+jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
+izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
+zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
+pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
+KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
+ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
+AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
+ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
+IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
+A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
+uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
+jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
+u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
+YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
+puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
+icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
+DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
+kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
+Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/SwissSign_Silver_CA_-_G2.crt b/etc/ssl/certs/SwissSign_Silver_CA_-_G2.crt
new file mode 100644
index 0000000..67a172c
--- /dev/null
+++ b/etc/ssl/certs/SwissSign_Silver_CA_-_G2.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
+IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
+RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
+U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
+Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
+YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
+nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
+6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
+eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
+c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
+MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
+HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
+jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
+5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
+rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
+F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
+wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
+cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
+AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
+WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
+xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
+2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
+IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
+aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
+em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
+dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
+OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
+tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Swisscom_Root_CA_1.crt b/etc/ssl/certs/Swisscom_Root_CA_1.crt
new file mode 100644
index 0000000..41b460e
--- /dev/null
+++ b/etc/ssl/certs/Swisscom_Root_CA_1.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
+MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
+YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
+Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
+AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
+Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
+m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
+FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
+TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
+EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
+kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
+HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
+vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
+19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
+L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
+bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
+JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
+FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
+BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
+K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
+ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
+Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
+sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
+3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
+ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
+mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
+b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
+rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
+hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
+zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
+MBr1mmz0DlP5OlvRHA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Swisscom_Root_CA_2.crt b/etc/ssl/certs/Swisscom_Root_CA_2.crt
new file mode 100644
index 0000000..1cbfb4f
--- /dev/null
+++ b/etc/ssl/certs/Swisscom_Root_CA_2.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk
+MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
+YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
+Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT
+AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
+Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr
+jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r
+0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f
+2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP
+ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF
+y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA
+tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL
+6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0
+uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL
+acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh
+k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q
+VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
+FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
+BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh
+b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R
+fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv
+/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI
+REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx
+srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv
+aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT
+woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n
+Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W
+t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N
+8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2
+9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5
+wSsSnqaeG8XmDtkx2Q==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Swisscom_Root_EV_CA_2.crt b/etc/ssl/certs/Swisscom_Root_EV_CA_2.crt
new file mode 100644
index 0000000..fb56277
--- /dev/null
+++ b/etc/ssl/certs/Swisscom_Root_EV_CA_2.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw
+ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp
+dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290
+IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD
+VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy
+dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg
+MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx
+UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD
+1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH
+oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR
+HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/
+5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv
+idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL
+OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC
+NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f
+46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB
+UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth
+7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G
+A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
+MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB
+bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x
+XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T
+PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0
+Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70
+WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL
+Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm
+7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S
+nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN
+vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB
+WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI
+fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb
+I+2ksx0WckNLIOFZfsLorSa/ovc=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_2.crt b/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_2.crt
new file mode 100644
index 0000000..98fceb2
--- /dev/null
+++ b/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_2.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
+KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
+BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
+YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1
+OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
+aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
+ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd
+AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC
+FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi
+1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq
+jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ
+wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj
+QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/
+WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy
+NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC
+uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw
+IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6
+g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
+9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP
+BSeOE6Fuwg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_3.crt b/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_3.crt
new file mode 100644
index 0000000..e068f84
--- /dev/null
+++ b/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_3.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
+KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
+BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
+YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
+OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
+aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
+ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
+8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
+RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
+hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
+ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
+EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
+QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
+A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
+WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
+1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
+6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
+91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
+e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
+TpPDpFQUWw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TC_TrustCenter_Class_3_CA_II.crt b/etc/ssl/certs/TC_TrustCenter_Class_3_CA_II.crt
new file mode 100644
index 0000000..78e6ca5
--- /dev/null
+++ b/etc/ssl/certs/TC_TrustCenter_Class_3_CA_II.crt
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
+Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
+Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
+1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
+ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
+Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
+XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
+dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
+Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
+JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
+Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
+irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
+TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
+g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
+95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
+S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_2007.crt b/etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_2007.crt
new file mode 100644
index 0000000..ab63b5d
--- /dev/null
+++ b/etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_2007.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS
+S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
+SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx
+OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry
+b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC
+VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE
+sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F
+ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY
+KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG
++7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG
+HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P
+IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M
+733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk
+Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW
+AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
+aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5
+mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa
+XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ
+qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TWCA_Global_Root_CA.crt b/etc/ssl/certs/TWCA_Global_Root_CA.crt
new file mode 100644
index 0000000..fd06b8c
--- /dev/null
+++ b/etc/ssl/certs/TWCA_Global_Root_CA.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx
+EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT
+VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5
+NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT
+B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF
+10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz
+0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh
+MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH
+zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc
+46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2
+yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi
+laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP
+oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA
+BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE
+qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm
+4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL
+1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
+LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF
+H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo
+RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+
+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh
+15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW
+6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW
+nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j
+wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz
+aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy
+KwbQBM0=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TWCA_Root_Certification_Authority.crt b/etc/ssl/certs/TWCA_Root_Certification_Authority.crt
new file mode 100644
index 0000000..8d39bc6
--- /dev/null
+++ b/etc/ssl/certs/TWCA_Root_Certification_Authority.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
+MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
+V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
+WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
+LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
+AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
+K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
+RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
+rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
+3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
+hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
+MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
+XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
+lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
+aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
+YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Taiwan_GRCA.crt b/etc/ssl/certs/Taiwan_GRCA.crt
new file mode 100644
index 0000000..51187d8
--- /dev/null
+++ b/etc/ssl/certs/Taiwan_GRCA.crt
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
+MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
+PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
+IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
+gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
+yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
+F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
+jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
+ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
+VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
+YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
+EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
+Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
+DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
+MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
+UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
+TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
+qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
+ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
+JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
+hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
+EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
+nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
+udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
+ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
+LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
+pYYsfPQS
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TeliaSonera_Root_CA_v1.crt b/etc/ssl/certs/TeliaSonera_Root_CA_v1.crt
new file mode 100644
index 0000000..8bc52c3
--- /dev/null
+++ b/etc/ssl/certs/TeliaSonera_Root_CA_v1.crt
@@ -0,0 +1,30 @@
+-----BEGIN CERTIFICATE-----
+MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw
+NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv
+b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD
+VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2
+MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F
+VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1
+7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X
+Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+
+/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs
+81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm
+dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe
+Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu
+sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4
+pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs
+slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ
+arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD
+VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG
+9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl
+dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
+0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj
+TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed
+Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7
+Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI
+OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7
+vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW
+t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn
+HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx
+SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Trustis_FPS_Root_CA.crt b/etc/ssl/certs/Trustis_FPS_Root_CA.crt
new file mode 100644
index 0000000..fb804c9
--- /dev/null
+++ b/etc/ssl/certs/Trustis_FPS_Root_CA.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
+ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
+MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
+MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
+iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
+vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
+0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
+OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
+BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
+FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
+GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
+zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
+1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
+f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
+jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
+ZetX2fNXlrtIzYE=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt b/etc/ssl/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt
new file mode 100644
index 0000000..ab1606c
--- /dev/null
+++ b/etc/ssl/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt
@@ -0,0 +1,30 @@
+-----BEGIN CERTIFICATE-----
+MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
+MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
+bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
+VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
+YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
+dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
+ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
+Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
+GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
+aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
+QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
+xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
+aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
+IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
+gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
+O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
+fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
+lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
+hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
+AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
+NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
+wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
+7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
+gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
+oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
+yZyQ2uypQjyttgI=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H5.crt b/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H5.crt
new file mode 100644
index 0000000..0210bfd
--- /dev/null
+++ b/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H5.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UE
+BhMCVFIxDzANBgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxn
+aSDEsGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkg
+QS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1QgRWxla3Ryb25payBTZXJ0aWZpa2Eg
+SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAwODA3MDFaFw0yMzA0
+MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0wSwYD
+VQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
+dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCUZ4WWe60ghUEoI5RHwWrom
+/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537jVJp45wnEFPzpALFp/kR
+Gml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1mep5Fimh3
+4khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z
+5UNP9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0
+hO8EuPbJbKoCPrZV4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QID
+AQABo0IwQDAdBgNVHQ4EFgQUVpkHHtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAJ5FdnsX
+SDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPoBP5yCccLqh0l
+VX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
+URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nf
+peYVhDfwwvJllpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CF
+Yv4HAqGEVka+lgqaE9chTLd8B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW
++qtB4Uu2NQvAmxU=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H6.crt b/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H6.crt
new file mode 100644
index 0000000..532f11a
--- /dev/null
+++ b/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H6.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQG
+EwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdp
+IMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBB
+LsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBI
+aXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5MDQxMFoXDTIzMTIx
+NjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBLBgNV
+BAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2
+ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVs
+ZWt0cm9uaWsgU2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdsGjW6L0UlqMACprx9MfMkU1x
+eHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a2uqsxgbPJQ1BgfbBOCK9
++bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EEDwnS3/faA
+z1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0p
+u5FbHH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6p
+lVxiSvgNZ1GpryHV+DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMB
+AAGjQjBAMB0GA1UdDgQWBBTdVRcT9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAb1gNl0Oq
+FlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3RfdCaqaXKGDsC
+QC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
+o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKID
+gI6tflEATseWhvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm
+9ocJV612ph1jmv3XZch4gyt1O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsG
+tAuYSyher4hYyw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/USERTrust_ECC_Certification_Authority.crt b/etc/ssl/certs/USERTrust_ECC_Certification_Authority.crt
new file mode 100644
index 0000000..b1cf1fd
--- /dev/null
+++ b/etc/ssl/certs/USERTrust_ECC_Certification_Authority.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL
+MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl
+eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT
+JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx
+MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg
+VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo
+I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng
+o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G
+A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB
+zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW
+RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/USERTrust_RSA_Certification_Authority.crt b/etc/ssl/certs/USERTrust_RSA_Certification_Authority.crt
new file mode 100644
index 0000000..2795cf3
--- /dev/null
+++ b/etc/ssl/certs/USERTrust_RSA_Certification_Authority.crt
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw
+MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
+aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
+AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B
+3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY
+tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/
+Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2
+VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT
+79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6
+c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT
+Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l
+c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee
+UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE
+Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
+BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF
+Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO
+VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3
+ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs
+8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR
+iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze
+Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ
+XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/
+qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB
+VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
+L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
+jjxDah2nGN59PRbxYvnKkKj9
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/UTN_USERFirst_Email_Root_CA.crt b/etc/ssl/certs/UTN_USERFirst_Email_Root_CA.crt
new file mode 100644
index 0000000..97c392f
--- /dev/null
+++ b/etc/ssl/certs/UTN_USERFirst_Email_Root_CA.crt
@@ -0,0 +1,27 @@
+-----BEGIN CERTIFICATE-----
+MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
+rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
+Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
+Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
+BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
+dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
+AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
+YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
+hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
+L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
+SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
+1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
+6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
+Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
+aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
+AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
+7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
+xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
+rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
+eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
+USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/UTN_USERFirst_Hardware_Root_CA.crt b/etc/ssl/certs/UTN_USERFirst_Hardware_Root_CA.crt
new file mode 100644
index 0000000..46386b7
--- /dev/null
+++ b/etc/ssl/certs/UTN_USERFirst_Hardware_Root_CA.crt
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
+lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
+SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
+A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
+MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
+d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
+cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
+0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
+M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
+MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
+oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
+DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
+oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
+dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
+bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
+BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
+CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
+CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
+3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
+KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt b/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt
new file mode 100644
index 0000000..e19fdea
--- /dev/null
+++ b/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
+U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
+SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
+biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
+GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
+fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
+aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
+aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
+kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
+4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
+FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt b/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt
new file mode 100644
index 0000000..707ff08
--- /dev/null
+++ b/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/VeriSign_Universal_Root_Certification_Authority.crt b/etc/ssl/certs/VeriSign_Universal_Root_Certification_Authority.crt
new file mode 100644
index 0000000..b5f1875
--- /dev/null
+++ b/etc/ssl/certs/VeriSign_Universal_Root_Certification_Authority.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
+vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
+ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
+IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
+IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
+bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
+9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
+H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
+LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
+/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
+rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
+WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
+exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
+DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
+sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
+seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
+4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
+lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
+7M2CYfE45k+XmCpajQ==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority.crt b/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority.crt
new file mode 100644
index 0000000..cd0e805
--- /dev/null
+++ b/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
+zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
+TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
+NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
+Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt b/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt
new file mode 100644
index 0000000..3938d87
--- /dev/null
+++ b/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.crt b/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.crt
new file mode 100644
index 0000000..c2e9d2b
--- /dev/null
+++ b/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.crt
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
+YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
+aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
+Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
+IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
+KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
+HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
+DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
+AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
+nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
+rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
+jBJ7xUS0rg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt b/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt
new file mode 100644
index 0000000..6692810
--- /dev/null
+++ b/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority.crt b/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority.crt
new file mode 100644
index 0000000..87676ac
--- /dev/null
+++ b/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt b/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
new file mode 100644
index 0000000..6880364
--- /dev/null
+++ b/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/Visa_eCommerce_Root.crt b/etc/ssl/certs/Visa_eCommerce_Root.crt
new file mode 100644
index 0000000..6e1ccd8
--- /dev/null
+++ b/etc/ssl/certs/Visa_eCommerce_Root.crt
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
+MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
+cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
+CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
+dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
+cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
+2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
+lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
+ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
+299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
+vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
+dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
+AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
+zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
+LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
+7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
+++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/WellsSecure_Public_Root_Certificate_Authority.crt b/etc/ssl/certs/WellsSecure_Public_Root_Certificate_Authority.crt
new file mode 100644
index 0000000..5a265ef
--- /dev/null
+++ b/etc/ssl/certs/WellsSecure_Public_Root_Certificate_Authority.crt
@@ -0,0 +1,28 @@
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
+IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
+cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
+MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
+bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
+DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
+WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
+Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
+HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
+z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
+SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
+AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
+KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
+AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
+BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
+VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
+ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
+ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
+/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
+A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
+k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
+iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
+2G0xffX8oRAHh84vWdw+WNs=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/XRamp_Global_CA_Root.crt b/etc/ssl/certs/XRamp_Global_CA_Root.crt
new file mode 100644
index 0000000..f21e6d8
--- /dev/null
+++ b/etc/ssl/certs/XRamp_Global_CA_Root.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
+gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
+MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
+UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
+NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
+dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
+dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
+38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
+KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
+DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
+qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
+JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
+PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
+BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
+jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
+eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
+vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
+IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
+i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
+O+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/a760e1bd.0 b/etc/ssl/certs/a760e1bd.0
new file mode 120000
index 0000000..16e8f52
--- /dev/null
+++ b/etc/ssl/certs/a760e1bd.0
@@ -0,0 +1 @@
+Visa_eCommerce_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/a8dee976.0 b/etc/ssl/certs/a8dee976.0
new file mode 120000
index 0000000..937cf93
--- /dev/null
+++ b/etc/ssl/certs/a8dee976.0
@@ -0,0 +1 @@
+SwissSign_Platinum_CA_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/a94d09e5.0 b/etc/ssl/certs/a94d09e5.0
new file mode 120000
index 0000000..00fe1bd
--- /dev/null
+++ b/etc/ssl/certs/a94d09e5.0
@@ -0,0 +1 @@
+ACCVRAIZ1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ad088e1d.0 b/etc/ssl/certs/ad088e1d.0
new file mode 120000
index 0000000..67d881c
--- /dev/null
+++ b/etc/ssl/certs/ad088e1d.0
@@ -0,0 +1 @@
+GeoTrust_Universal_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/aee5f10d.0 b/etc/ssl/certs/aee5f10d.0
new file mode 120000
index 0000000..7c8c77a
--- /dev/null
+++ b/etc/ssl/certs/aee5f10d.0
@@ -0,0 +1 @@
+Entrust.net_Premium_2048_Secure_Server_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b0e59380.0 b/etc/ssl/certs/b0e59380.0
new file mode 120000
index 0000000..72620f2
--- /dev/null
+++ b/etc/ssl/certs/b0e59380.0
@@ -0,0 +1 @@
+GlobalSign_ECC_Root_CA_-_R4.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b1159c4c.0 b/etc/ssl/certs/b1159c4c.0
new file mode 120000
index 0000000..156b745
--- /dev/null
+++ b/etc/ssl/certs/b1159c4c.0
@@ -0,0 +1 @@
+DigiCert_Assured_ID_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b13cc6df.0 b/etc/ssl/certs/b13cc6df.0
new file mode 120000
index 0000000..5a2e589
--- /dev/null
+++ b/etc/ssl/certs/b13cc6df.0
@@ -0,0 +1 @@
+UTN_USERFirst_Hardware_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b1b8a7f3.0 b/etc/ssl/certs/b1b8a7f3.0
new file mode 120000
index 0000000..a8836be
--- /dev/null
+++ b/etc/ssl/certs/b1b8a7f3.0
@@ -0,0 +1 @@
+OISTE_WISeKey_Global_Root_GA_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b204d74a.0 b/etc/ssl/certs/b204d74a.0
new file mode 120000
index 0000000..ce312da
--- /dev/null
+++ b/etc/ssl/certs/b204d74a.0
@@ -0,0 +1 @@
+VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b66938e9.0 b/etc/ssl/certs/b66938e9.0
new file mode 120000
index 0000000..65b80d8
--- /dev/null
+++ b/etc/ssl/certs/b66938e9.0
@@ -0,0 +1 @@
+Secure_Global_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b727005e.0 b/etc/ssl/certs/b727005e.0
new file mode 120000
index 0000000..2f89cde
--- /dev/null
+++ b/etc/ssl/certs/b727005e.0
@@ -0,0 +1 @@
+AffirmTrust_Premium.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/b7a5b843.0 b/etc/ssl/certs/b7a5b843.0
new file mode 120000
index 0000000..9ab8128
--- /dev/null
+++ b/etc/ssl/certs/b7a5b843.0
@@ -0,0 +1 @@
+TWCA_Root_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ba89ed3b.0 b/etc/ssl/certs/ba89ed3b.0
new file mode 120000
index 0000000..a64ec4b
--- /dev/null
+++ b/etc/ssl/certs/ba89ed3b.0
@@ -0,0 +1 @@
+thawte_Primary_Root_CA_-_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/bb2d49a0.0 b/etc/ssl/certs/bb2d49a0.0
new file mode 120000
index 0000000..6e1ecdf
--- /dev/null
+++ b/etc/ssl/certs/bb2d49a0.0
@@ -0,0 +1 @@
+ComSign_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/bd1910d4.0 b/etc/ssl/certs/bd1910d4.0
new file mode 120000
index 0000000..5cecfaa
--- /dev/null
+++ b/etc/ssl/certs/bd1910d4.0
@@ -0,0 +1 @@
+CNNIC_ROOT.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c01cdfa2.0 b/etc/ssl/certs/c01cdfa2.0
new file mode 120000
index 0000000..a5a4a7f
--- /dev/null
+++ b/etc/ssl/certs/c01cdfa2.0
@@ -0,0 +1 @@
+VeriSign_Universal_Root_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c089bbbd.0 b/etc/ssl/certs/c089bbbd.0
new file mode 120000
index 0000000..acbeb0f
--- /dev/null
+++ b/etc/ssl/certs/c089bbbd.0
@@ -0,0 +1 @@
+thawte_Primary_Root_CA_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c0ff1f52.0 b/etc/ssl/certs/c0ff1f52.0
new file mode 120000
index 0000000..204a7a5
--- /dev/null
+++ b/etc/ssl/certs/c0ff1f52.0
@@ -0,0 +1 @@
+Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c28a8a30.0 b/etc/ssl/certs/c28a8a30.0
new file mode 120000
index 0000000..6545cab
--- /dev/null
+++ b/etc/ssl/certs/c28a8a30.0
@@ -0,0 +1 @@
+D-TRUST_Root_Class_3_CA_2_2009.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c47d9980.0 b/etc/ssl/certs/c47d9980.0
new file mode 120000
index 0000000..68cf21b
--- /dev/null
+++ b/etc/ssl/certs/c47d9980.0
@@ -0,0 +1 @@
+Chambers_of_Commerce_Root_-_2008.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c5d3212a.0 b/etc/ssl/certs/c5d3212a.0
new file mode 120000
index 0000000..734047d
--- /dev/null
+++ b/etc/ssl/certs/c5d3212a.0
@@ -0,0 +1 @@
+PSCProcert.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c5e082db.0 b/etc/ssl/certs/c5e082db.0
new file mode 120000
index 0000000..e9388cb
--- /dev/null
+++ b/etc/ssl/certs/c5e082db.0
@@ -0,0 +1 @@
+UTN_USERFirst_Email_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c679bc3f.0 b/etc/ssl/certs/c679bc3f.0
new file mode 120000
index 0000000..1e1b995
--- /dev/null
+++ b/etc/ssl/certs/c679bc3f.0
@@ -0,0 +1 @@
+TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H6.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c99398f3.0 b/etc/ssl/certs/c99398f3.0
new file mode 120000
index 0000000..bc39424
--- /dev/null
+++ b/etc/ssl/certs/c99398f3.0
@@ -0,0 +1 @@
+RSA_Security_2048_v3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/c9f83a1c.0 b/etc/ssl/certs/c9f83a1c.0
new file mode 120000
index 0000000..5542201
--- /dev/null
+++ b/etc/ssl/certs/c9f83a1c.0
@@ -0,0 +1 @@
+Comodo_Secure_Services_root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ca6e4ad9.0 b/etc/ssl/certs/ca6e4ad9.0
new file mode 120000
index 0000000..9d05b69
--- /dev/null
+++ b/etc/ssl/certs/ca6e4ad9.0
@@ -0,0 +1 @@
+ePKI_Root_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/cb357862.0 b/etc/ssl/certs/cb357862.0
new file mode 120000
index 0000000..78198e5
--- /dev/null
+++ b/etc/ssl/certs/cb357862.0
@@ -0,0 +1 @@
+Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/cb59f961.0 b/etc/ssl/certs/cb59f961.0
new file mode 120000
index 0000000..8fa9d7e
--- /dev/null
+++ b/etc/ssl/certs/cb59f961.0
@@ -0,0 +1 @@
+Camerfirma_Global_Chambersign_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/cbeee9e2.0 b/etc/ssl/certs/cbeee9e2.0
new file mode 120000
index 0000000..2c424fe
--- /dev/null
+++ b/etc/ssl/certs/cbeee9e2.0
@@ -0,0 +1 @@
+GeoTrust_Global_CA_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/cbf06781.0 b/etc/ssl/certs/cbf06781.0
new file mode 120000
index 0000000..3d62247
--- /dev/null
+++ b/etc/ssl/certs/cbf06781.0
@@ -0,0 +1 @@
+Go_Daddy_Root_Certificate_Authority_-_G2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/cc450945.0 b/etc/ssl/certs/cc450945.0
new file mode 120000
index 0000000..f8a4140
--- /dev/null
+++ b/etc/ssl/certs/cc450945.0
@@ -0,0 +1 @@
+Izenpe.com.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/cd58d51e.0 b/etc/ssl/certs/cd58d51e.0
new file mode 120000
index 0000000..c59c9ac
--- /dev/null
+++ b/etc/ssl/certs/cd58d51e.0
@@ -0,0 +1 @@
+Security_Communication_RootCA2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/certSIGN_ROOT_CA.crt b/etc/ssl/certs/certSIGN_ROOT_CA.crt
new file mode 100644
index 0000000..0a38740
--- /dev/null
+++ b/etc/ssl/certs/certSIGN_ROOT_CA.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
+AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
+QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
+MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
+0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
+UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
+RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
+OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
+JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
+AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
+BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
+LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
+MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
+44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
+Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
+i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
+9u6wWk5JRFRYX0KD
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/cfa1c2ee.0 b/etc/ssl/certs/cfa1c2ee.0
new file mode 120000
index 0000000..682e491
--- /dev/null
+++ b/etc/ssl/certs/cfa1c2ee.0
@@ -0,0 +1 @@
+Buypass_Class_2_CA_1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/d4dae3dd.0 b/etc/ssl/certs/d4dae3dd.0
new file mode 120000
index 0000000..288136a
--- /dev/null
+++ b/etc/ssl/certs/d4dae3dd.0
@@ -0,0 +1 @@
+D-TRUST_Root_Class_3_CA_2_EV_2009.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/d6325660.0 b/etc/ssl/certs/d6325660.0
new file mode 120000
index 0000000..0356c38
--- /dev/null
+++ b/etc/ssl/certs/d6325660.0
@@ -0,0 +1 @@
+COMODO_RSA_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/d7e8dc79.0 b/etc/ssl/certs/d7e8dc79.0
new file mode 120000
index 0000000..0a2cd8f
--- /dev/null
+++ b/etc/ssl/certs/d7e8dc79.0
@@ -0,0 +1 @@
+QuoVadis_Root_CA_2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/d853d49e.0 b/etc/ssl/certs/d853d49e.0
new file mode 120000
index 0000000..04f5891
--- /dev/null
+++ b/etc/ssl/certs/d853d49e.0
@@ -0,0 +1 @@
+Trustis_FPS_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/d957f522.0 b/etc/ssl/certs/d957f522.0
new file mode 120000
index 0000000..3d65a52
--- /dev/null
+++ b/etc/ssl/certs/d957f522.0
@@ -0,0 +1 @@
+Certinomis_-_Autorité_Racine.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/dc45b0bd.0 b/etc/ssl/certs/dc45b0bd.0
new file mode 120000
index 0000000..6770949
--- /dev/null
+++ b/etc/ssl/certs/dc45b0bd.0
@@ -0,0 +1 @@
+Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/dd8e9d41.0 b/etc/ssl/certs/dd8e9d41.0
new file mode 120000
index 0000000..d1218fb
--- /dev/null
+++ b/etc/ssl/certs/dd8e9d41.0
@@ -0,0 +1 @@
+DigiCert_Global_Root_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/e113c810.0 b/etc/ssl/certs/e113c810.0
new file mode 120000
index 0000000..f05cbe7
--- /dev/null
+++ b/etc/ssl/certs/e113c810.0
@@ -0,0 +1 @@
+Certigna.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/e18bfb83.0 b/etc/ssl/certs/e18bfb83.0
new file mode 120000
index 0000000..e84d182
--- /dev/null
+++ b/etc/ssl/certs/e18bfb83.0
@@ -0,0 +1 @@
+QuoVadis_Root_CA_3_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/e2799e36.0 b/etc/ssl/certs/e2799e36.0
new file mode 120000
index 0000000..a743fb7
--- /dev/null
+++ b/etc/ssl/certs/e2799e36.0
@@ -0,0 +1 @@
+GeoTrust_Primary_Certification_Authority_-_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/e36a6752.0 b/etc/ssl/certs/e36a6752.0
new file mode 120000
index 0000000..18ecd69
--- /dev/null
+++ b/etc/ssl/certs/e36a6752.0
@@ -0,0 +1 @@
+Atos_TrustedRoot_2011.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/e536d871.0 b/etc/ssl/certs/e536d871.0
new file mode 120000
index 0000000..ffd7659
--- /dev/null
+++ b/etc/ssl/certs/e536d871.0
@@ -0,0 +1 @@
+AddTrust_Qualified_Certificates_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/e73d606e.0 b/etc/ssl/certs/e73d606e.0
new file mode 120000
index 0000000..7cac5ba
--- /dev/null
+++ b/etc/ssl/certs/e73d606e.0
@@ -0,0 +1 @@
+OISTE_WISeKey_Global_Root_GB_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/e8de2f56.0 b/etc/ssl/certs/e8de2f56.0
new file mode 120000
index 0000000..073f190
--- /dev/null
+++ b/etc/ssl/certs/e8de2f56.0
@@ -0,0 +1 @@
+Buypass_Class_3_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ePKI_Root_Certification_Authority.crt b/etc/ssl/certs/ePKI_Root_Certification_Authority.crt
new file mode 100644
index 0000000..4b54256
--- /dev/null
+++ b/etc/ssl/certs/ePKI_Root_Certification_Authority.crt
@@ -0,0 +1,33 @@
+-----BEGIN CERTIFICATE-----
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
+MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
+ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
+IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
+SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
+SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
+ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
+DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
+TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
+fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
+sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
+WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
+nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
+dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
+NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
+AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
+MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
+uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
+PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
+JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
+gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
+j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
+5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
+o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
+/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
+Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
+W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
+hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/ee1365c0.0 b/etc/ssl/certs/ee1365c0.0
new file mode 120000
index 0000000..39e2786
--- /dev/null
+++ b/etc/ssl/certs/ee1365c0.0
@@ -0,0 +1 @@
+Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ee64a828.0 b/etc/ssl/certs/ee64a828.0
new file mode 120000
index 0000000..b338100
--- /dev/null
+++ b/etc/ssl/certs/ee64a828.0
@@ -0,0 +1 @@
+Comodo_AAA_Services_root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/eed8c118.0 b/etc/ssl/certs/eed8c118.0
new file mode 120000
index 0000000..74a7dfc
--- /dev/null
+++ b/etc/ssl/certs/eed8c118.0
@@ -0,0 +1 @@
+COMODO_ECC_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ef2f636c.0 b/etc/ssl/certs/ef2f636c.0
new file mode 120000
index 0000000..a8e1ca6
--- /dev/null
+++ b/etc/ssl/certs/ef2f636c.0
@@ -0,0 +1 @@
+Equifax_Secure_Global_eBusiness_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/ef954a4e.0 b/etc/ssl/certs/ef954a4e.0
new file mode 120000
index 0000000..06fbabe
--- /dev/null
+++ b/etc/ssl/certs/ef954a4e.0
@@ -0,0 +1 @@
+IdenTrust_Commercial_Root_CA_1.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/f060240e.0 b/etc/ssl/certs/f060240e.0
new file mode 120000
index 0000000..c59179a
--- /dev/null
+++ b/etc/ssl/certs/f060240e.0
@@ -0,0 +1 @@
+Certplus_Class_2_Primary_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/f081611a.0 b/etc/ssl/certs/f081611a.0
new file mode 120000
index 0000000..8f4e39a
--- /dev/null
+++ b/etc/ssl/certs/f081611a.0
@@ -0,0 +1 @@
+Go_Daddy_Class_2_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/f30dd6ad.0 b/etc/ssl/certs/f30dd6ad.0
new file mode 120000
index 0000000..a811c49
--- /dev/null
+++ b/etc/ssl/certs/f30dd6ad.0
@@ -0,0 +1 @@
+USERTrust_ECC_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/f3377b1b.0 b/etc/ssl/certs/f3377b1b.0
new file mode 120000
index 0000000..4ccaa03
--- /dev/null
+++ b/etc/ssl/certs/f3377b1b.0
@@ -0,0 +1 @@
+Security_Communication_Root_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/f387163d.0 b/etc/ssl/certs/f387163d.0
new file mode 120000
index 0000000..ca962fd
--- /dev/null
+++ b/etc/ssl/certs/f387163d.0
@@ -0,0 +1 @@
+Starfield_Class_2_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/f39fc864.0 b/etc/ssl/certs/f39fc864.0
new file mode 120000
index 0000000..3024139
--- /dev/null
+++ b/etc/ssl/certs/f39fc864.0
@@ -0,0 +1 @@
+SecureTrust_CA.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/f90208f7.0 b/etc/ssl/certs/f90208f7.0
new file mode 120000
index 0000000..e0aaac3
--- /dev/null
+++ b/etc/ssl/certs/f90208f7.0
@@ -0,0 +1 @@
+Camerfirma_Chambers_of_Commerce_Root.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/fc5a8f99.0 b/etc/ssl/certs/fc5a8f99.0
new file mode 120000
index 0000000..7419d0b
--- /dev/null
+++ b/etc/ssl/certs/fc5a8f99.0
@@ -0,0 +1 @@
+USERTrust_RSA_Certification_Authority.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/fcac10e3.0 b/etc/ssl/certs/fcac10e3.0
new file mode 120000
index 0000000..e91cbcd
--- /dev/null
+++ b/etc/ssl/certs/fcac10e3.0
@@ -0,0 +1 @@
+Juur-SK.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/fe8a2cd8.0 b/etc/ssl/certs/fe8a2cd8.0
new file mode 120000
index 0000000..e5c6114
--- /dev/null
+++ b/etc/ssl/certs/fe8a2cd8.0
@@ -0,0 +1 @@
+SZAFIR_ROOT_CA2.crt
\ No newline at end of file
diff --git a/etc/ssl/certs/thawte_Primary_Root_CA.crt b/etc/ssl/certs/thawte_Primary_Root_CA.crt
new file mode 100644
index 0000000..998460f
--- /dev/null
+++ b/etc/ssl/certs/thawte_Primary_Root_CA.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
+qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
+BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
+NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
+LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
+A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
+W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
+3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
+6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
+Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
+NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
+r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
+DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
+YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
+/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
+LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
+jVaMaA==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/thawte_Primary_Root_CA_-_G2.crt b/etc/ssl/certs/thawte_Primary_Root_CA_-_G2.crt
new file mode 100644
index 0000000..447ee3d
--- /dev/null
+++ b/etc/ssl/certs/thawte_Primary_Root_CA_-_G2.crt
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
+IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
+BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
+MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
+YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
+dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
+BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
+papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
+DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
+KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
+XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
diff --git a/etc/ssl/certs/thawte_Primary_Root_CA_-_G3.crt b/etc/ssl/certs/thawte_Primary_Root_CA_-_G3.crt
new file mode 100644
index 0000000..acfed9d
--- /dev/null
+++ b/etc/ssl/certs/thawte_Primary_Root_CA_-_G3.crt
@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
+rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
+BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
+Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
+LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
+MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
+ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
+gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
+YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
+b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
+9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
+zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
+OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
+HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
+2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
+oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
+KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
+m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
+MdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
diff --git a/etc/ssl/openssl.cnf b/etc/ssl/openssl.cnf
new file mode 100644
index 0000000..1eb86c4
--- /dev/null
+++ b/etc/ssl/openssl.cnf
@@ -0,0 +1,350 @@
+#
+# 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
+
+# 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 ]
+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 = utf8only
+
+# 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 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 is required for TSA certificates.
+# extendedKeyUsage = critical,timeStamping
+
+[ 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
+
+# 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
+
+[ crl_ext ]
+
+# CRL extensions.
+# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
+
+# issuerAltName=issuer:copy
+authorityKeyIdentifier=keyid: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/etc/sysctl.conf b/etc/sysctl.conf
new file mode 100644
index 0000000..8f3de1a
--- /dev/null
+++ b/etc/sysctl.conf
@@ -0,0 +1,29 @@
+kernel.panic=3
+net.ipv4.conf.default.arp_ignore=1
+net.ipv4.conf.all.arp_ignore=1
+net.ipv4.ip_forward=1
+net.ipv4.icmp_echo_ignore_broadcasts=1
+net.ipv4.icmp_ignore_bogus_error_responses=1
+net.ipv4.igmp_max_memberships=100
+net.ipv4.tcp_ecn=0
+net.ipv4.tcp_fin_timeout=30
+net.ipv4.tcp_keepalive_time=120
+net.ipv4.tcp_syncookies=1
+net.ipv4.tcp_timestamps=1
+net.ipv4.tcp_sack=1
+net.ipv4.tcp_dsack=1
+
+net.ipv6.conf.default.forwarding=1
+net.ipv6.conf.all.forwarding=1
+
+net.netfilter.nf_conntrack_acct=1
+net.netfilter.nf_conntrack_checksum=0
+net.netfilter.nf_conntrack_max=16384
+net.netfilter.nf_conntrack_tcp_timeout_established=7440
+net.netfilter.nf_conntrack_udp_timeout=60
+net.netfilter.nf_conntrack_udp_timeout_stream=180
+
+# disable bridge firewalling by default
+net.bridge.bridge-nf-call-arptables=0
+net.bridge.bridge-nf-call-ip6tables=0
+net.bridge.bridge-nf-call-iptables=0
diff --git a/etc/sysupgrade.conf b/etc/sysupgrade.conf
new file mode 100644
index 0000000..e06fd5e
--- /dev/null
+++ b/etc/sysupgrade.conf
@@ -0,0 +1,5 @@
+## This file contains files and directories that should
+## be preserved during an upgrade.
+
+# /etc/example.conf
+# /etc/openvpn/
diff --git a/etc/uci-defaults/00_00_delos b/etc/uci-defaults/00_00_delos
new file mode 100644
index 0000000..c8c3eec
--- /dev/null
+++ b/etc/uci-defaults/00_00_delos
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# Copyright (C) 2015 - 2016 devolo AG
+#
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+
+. /lib/functions.sh
+MIG_AVAIL=0
+if [ -e /rom/lib/migration/migration.sh ]; then
+    MIG_AVAIL=1
+    cp -af /rom/lib/migration/migration.sh /lib/migration/migration.sh
+    . /lib/migration/migration.sh
+fi
+
+# install config sections. Add new sections here so options can be added
+# by other scripts with a simple "uci set delos.section.option=val"
+uci -q get delos.uci_defaults || {
+    uci set delos.uci_defaults=uci_defaults
+    uci -q get delos.delos.version || {
+        uci set delos.delos=configuration
+        uci set delos.delos.version=$(cat /etc/delos-version | 
+                                      grep CONFIG_VERSION |
+                                      awk -F'=' '{print $2}')
+    }
+}
+uci -q get delos.error || uci set delos.error=error
+
+[ "$(uci changes delos | wc -l)" = "0" ] || uci commit delos
+
+board=$(${PLATFORM}_board_name)
+
+case "$board" in
+dlan*|\
+dvl-*|\
+ew7479cap|\
+ap-dk07.1-c1)
+   uci_set_state delos error state 0
+   [ "$MIG_AVAIL" = "1" ] && updateUciDefaultsScript
+   ;;
+esac
+
+exit 0
diff --git a/etc/uci-defaults/00_10_delos-baptization b/etc/uci-defaults/00_10_delos-baptization
new file mode 100644
index 0000000..61ae455
--- /dev/null
+++ b/etc/uci-defaults/00_10_delos-baptization
@@ -0,0 +1,120 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+# read baptization config and store it in uci state
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+. /lib/delos-functions.sh
+
+clear_delos_baptization() {
+    uci_toggle_state delos baptization "" baptization
+}
+
+# create/clear section
+clear_delos_baptization
+# transfer all baptization data to uci config file (linux-host legacy devices)
+baptization.config 2>/dev/null | while IFS== read key val; do
+    if [ "$key" = "DlanMacAddress" -o \
+         "$key" = "MacAddress0" -o \
+         "$key" = "MacAddress1" ]; then
+        val=$(macaddr_canonicalize "$val")
+    fi
+    uci_toggle_state delos baptization "$key" "$val"
+done
+# compatibility -> baptization.config to devolo WiFi pro 1xxxy devices
+bpt_copy() {
+    uci_toggle_state delos baptization $2 $(uci_get_state delos baptization $1)
+}
+bpt_copy_default() {
+    [ -n "$(uci_get_state delos baptization $2)" ] || bpt_copy $1 $2
+}
+bpt_copy_if_exist() {
+    [ -n "$(uci_get_state delos baptization $1)" ] && bpt_copy $1 $2
+}
+# keep compatibility with devolo WiFi pro 1xxxy and linux-host updated devices
+# delos WiFi pro 1xxxy has 'ssh' baptized and linux-host devices have 'Telnetd' baptized
+# first copy 'Telnetd' to 'Ssh' then copy 'ssh' only if it exist otherwise 'Ssh' would be deleted
+bpt_copy Telnetd Ssh
+bpt_copy_if_exist ssh Ssh
+bpt_copy shell Shell
+bpt_copy DlanDevicePassword SecurityId
+
+# We don't want to copy intermediate linux host baptization from production
+if [ "no" == "$(uci_get_state delos baptization ProductionCompleted)" -o "cal_image" == "$(uci_get_state delos baptization OemVariant)" ]; then
+    clear_delos_baptization
+fi
+
+# override with boot env when existing
+( . "./30_uboot-envtools" ) 2>/dev/null
+# transfer all baptization data from uboot config to uci config file
+# only access delos baptization, ignore other keys
+baptization="SecurityId Shell Ssh MT OemVariant SerialNumber
+             DeviceType ProductionDate ProductionPTSVersion WiFiMacAddress0
+             WiFiMacAddress1 MacAddress0 MacAddress1 DlanMacAddress
+             DlanSecurityID DlanFactoryNPW ProductionCompleted FwBootSource
+             PwdFwknopd PwdGhnConfig PwdGhnUnlockSector0
+             CalibrationMode PS WiFiCountryCode Tr069 ConfigSyncDomain "
+for key in $baptization
+do
+    val=$(fw_printenv -n $key 2>&1)
+    case $? in
+    0)
+        uci_toggle_state delos baptization "$key" "$val"
+        ;;
+    *)
+        #ignore
+        ;;
+    esac
+done
+# compatibility -> old to new settings of delos-5
+bpt_copy_default SecurityId DlanSecurityID
+# backward compatibility, new boot environment overrides all!
+bpt_copy DlanSecurityID SecurityId
+bpt_copy DlanSecurityID DlanDevicePassword
+# leave out ssh,shell, was never used by delos
+# derived values:
+DlanSecurityID=$(uci_get_state delos baptization DlanSecurityID)
+hpavkey 2>/dev/null && uci_toggle_state delos baptization DlanDAK $(hpavkey -D $DlanSecurityID)
+
+# move security ids not to be accessible by ubus to separate config state file
+uci_toggle_state delos-private baptization "" baptization
+keys="DlanSecurityID SecurityId DlanDevicePassword DlanFactoryNPW DlanDAK
+      PwdGhnConfig PwdGhnUnlockSector0 PwdFwknopd"
+for key in $keys; do
+    uci_toggle_state delos-private baptization $key "$(uci_get_state delos baptization $key)"
+    uci_revert_state delos baptization $key
+done
+
+
+# create /etc/delos-image when not supplied by rootfs image (ipq806x target)
+devicetype=$(uci_get_state delos baptization DeviceType)
+if [ -n "$devicetype" ] && [ ! -e /etc/delos-image ] && [ ! -e /rom/etc/delos-image ]; then
+    echo "DEVICE_TYPE=$devicetype" >/etc/delos-image
+fi
+
+uci_get delos delos device_type >/dev/null || (
+    . /etc/delos-image 2>/dev/null && [ -n "$DEVICE_TYPE" ] && uci_set delos delos device_type "$DEVICE_TYPE"
+    uci_commit delos
+)
+
+if [ "$(uci_get_state delos baptization Shell)" = "1" ] || dvl_is_internal_firmware || dvl_is_pts_firmware; then
+    # console login shell is /tmp/bin/ash... see /etc/inittab
+    mkdir -p /tmp/bin
+    ln -s /bin/ash /tmp/bin/ash
+fi
+
+value="normal"
+case "$(uci_get delos delos device_type)" in
+    1200wifiac|zuse|turing|hamilton|hamming|valencia)
+        bogomips=$(cat /proc/cpuinfo | grep BogoMIPS | sed -e 's/^.*: //' | sed -e 's/\..*$//')
+        [ -n "$bogomips" ] && [ "$bogomips" -lt 100 ] && value="slow"
+    ;;
+esac
+uci_toggle_state delos bootloader "" bootloader
+uci_toggle_state delos bootloader type "$value"
+
+# keep this file for the next boot
+exit 1
diff --git a/etc/uci-defaults/00_20_delos-customization b/etc/uci-defaults/00_20_delos-customization
new file mode 100644
index 0000000..3c766b0
--- /dev/null
+++ b/etc/uci-defaults/00_20_delos-customization
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 OpenWrt.org
+#
+
+. /lib/functions.sh
+
+OEMVARIANT=$(uci_get_state delos baptization OemVariant devolo)
+DEVICETYPE=$(uci_get_state delos baptization DeviceType | tr 'a-z' 'A-Z')
+MT=$(uci_get_state delos baptization MT)
+
+CUSTFILE=/usr/share/delos-customization/variant-"$OEMVARIANT"/customization.sh
+[ -f "$CUSTFILE" ] && . "$CUSTFILE"
+
+set_baptized_customization() {
+    uci set customization.config.active_variant="$OEMVARIANT"
+}
+
+set_customized_names() {
+    local vendor_name=${_DVL_VENDOR_NAME:-devolo}
+    local vendor_url=${_DVL_VENDOR_URL:-http://www.devolo.de}
+
+    local product_name=$(eval echo \${_DVL_PRODUCT_NAME_MT${MT}})
+    [ -z "$product_name" ] && product_name=$(eval echo \${_DVL_PRODUCT_NAME_${DEVICETYPE}})
+    [ -z "$product_name" ] && product_name=${_DVL_PRODUCT_NAME:-Product}
+
+    uci set customization.info.vendor_name="$vendor_name"
+    uci set customization.info.vendor_url="$vendor_url"
+    uci set customization.info.product_name="$product_name"
+}
+
+set_baptized_customization
+set_customized_names
+
+uci commit customization
+
+apply_customization.sh force
+
+exit 0
diff --git a/etc/uci-defaults/00_50_delos-system b/etc/uci-defaults/00_50_delos-system
new file mode 100644
index 0000000..28dfc2f
--- /dev/null
+++ b/etc/uci-defaults/00_50_delos-system
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+[ -f /etc/customization.sh ] && . /etc/customization.sh
+
+# configure logging 1:
+mkdir -p /www/app/components/status/logs
+
+# If no root password has been set, give root an empty password.
+# This allows SSH access after factory reset (if bootenv variable
+# Ssh=1 is set).
+grep '^root::' /etc/shadow && { echo -en "\n\n" | passwd root; }
+
+# if basic configuration was already applied, exit
+[ "$(uci -q get delos.uci_defaults.system)" = "" ] || exit 0
+
+. /lib/functions.sh
+
+# default hostname
+PREFIX="${_DVL_HOSTNAME_PREFIX:-devolo-}"
+SN=$(uci_get_state delos baptization SerialNumber)
+if [ -n "$SN" ]; then
+    uci set system.@system[0].hostname=${PREFIX}${SN:$((-3))}
+else
+    uci set system.@system[0].hostname=${PREFIX}
+fi
+
+# change default timezone from UTC to Europe/Berlin (should match zone definition of webui)
+uci set system.@system[0].zonename='Europe/Berlin'
+uci set system.@system[0].timezone='CET-1CEST,M3.5.0,M10.5.0/3'
+
+# configure logging 2:
+uci set system.@system[0].log_buffer_size=512
+uci set system.@system[0].log_type=circular_file
+uci set system.@system[0].log_webui=/www/app/components/status/logs/log
+uci commit system
+
+# set basic config done flag
+uci set delos.uci_defaults.system=1
+uci commit delos
+
+exit 0
diff --git a/etc/uci-defaults/00_60_delos-version b/etc/uci-defaults/00_60_delos-version
new file mode 100644
index 0000000..e3f5560
--- /dev/null
+++ b/etc/uci-defaults/00_60_delos-version
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# Copyright (C) 2016 devolo AG
+#
+
+# update openwrt version
+. /etc/delos-version
+FIRMWARE_DATE=${FIRMWARE_DATE:-dev}
+echo -n "${FIRMWARE_VERSION}_${FIRMWARE_DATE}" | tr -c '[a-zA-Z0-9]' '_' > /etc/openwrt_version
+
+# leave this file here for the next firmware update
+exit 1
diff --git a/etc/uci-defaults/00_uhttpd_ubus b/etc/uci-defaults/00_uhttpd_ubus
new file mode 100644
index 0000000..f0f71e9
--- /dev/null
+++ b/etc/uci-defaults/00_uhttpd_ubus
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if [ -z "$(uci -q get uhttpd.main.ubus_prefix)" ]; then
+	uci set uhttpd.main.ubus_prefix=/ubus
+	uci commit uhttpd
+fi
+
+exit 0
diff --git a/etc/uci-defaults/01_buttons b/etc/uci-defaults/01_buttons
new file mode 100644
index 0000000..5d57acf
--- /dev/null
+++ b/etc/uci-defaults/01_buttons
@@ -0,0 +1,63 @@
+#!/bin/sh
+#
+# Copyright (C) 2015 devolo AG
+#
+
+. /lib/functions/uci-defaults.sh
+. /lib/ar71xx.sh
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+devolo-home-control-cu)
+	ucidef_set_button "BTN_0" "dLAN button"
+	ucidef_set_button "BTN_1" "Home Control button"
+	;;
+
+dlan-pro-500-wp)
+#	TODO
+	;;
+
+dlan-550-wifi)
+	ucidef_set_button "BTN_0" "dLAN button"
+	ucidef_set_button "BTN_2" "WiFi button"
+	ucidef_set_button "reset" "Reset button"
+	;;
+
+dlan-1000-ac)
+	ucidef_set_button "BTN_0" "dLAN button"
+	ucidef_set_button "BTN_2" "WiFi button"
+	ucidef_set_button "reset" "Reset button"
+	;;
+
+dlan-hotspot|\
+dlan-pro-1200-ac|\
+dlan-pro-1200-n)
+	ucidef_set_button "BTN_0" "dLAN button"
+	ucidef_set_button "BTN_2" "WiFi button"
+	ucidef_set_button "reset" "Reset button"
+	;;
+
+dvl-1200e|\
+dvl-1200i|\
+dvl-1750c|\
+dvl-1750i|\
+dvl-1750x)
+	ucidef_set_button "reset" "Reset button"
+	;;
+dvl-1750e)
+	## Eject and WiFi button disabled until they have a function
+	#ucidef_set_button "BTN_0" "USB Eject"
+	#ucidef_set_button "BTN_2" "WiFi button"
+	ucidef_set_button "reset" "Reset button"
+	;;
+
+ap151)
+	ucidef_set_button "wps" "WiFi button"
+	;;
+
+esac
+
+ucidef_commit_buttons
+
+exit 0
diff --git a/etc/uci-defaults/01_cs_domain b/etc/uci-defaults/01_cs_domain
new file mode 100644
index 0000000..f6ac86e
--- /dev/null
+++ b/etc/uci-defaults/01_cs_domain
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+[ -n "$(uci_get configsync global domain)" ] && exit 0
+
+uci set configsync.global.domain="$(uci_get_state delos baptization ConfigSyncDomain 0)"
+uci commit configsync
+exit 0
diff --git a/etc/uci-defaults/01_delos-ntp b/etc/uci-defaults/01_delos-ntp
new file mode 100644
index 0000000..cf60476
--- /dev/null
+++ b/etc/uci-defaults/01_delos-ntp
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Copyright (C) 2015 devolo AG
+#
+
+# if basic NTP configuration was already applied, exit
+[ "$(uci -q get delos.uci_defaults.ntp)" = "" ] || exit 0
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+
+. /lib/functions.sh
+
+board=$(${PLATFORM}_board_name)
+
+case "$board" in
+dlan*|dvl-*|ew7479cap|ap-dk07.1-c1)
+	uci delete system.ntp.server
+	uci add_list system.ntp.server='europe.pool.ntp.org'
+	uci commit system
+
+	# set basic NTP config done flag
+	uci set delos.uci_defaults.ntp=1
+	uci commit delos
+	;;
+esac
+
+exit 0
diff --git a/etc/uci-defaults/01_delos-snmp b/etc/uci-defaults/01_delos-snmp
new file mode 100644
index 0000000..c20935f
--- /dev/null
+++ b/etc/uci-defaults/01_delos-snmp
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Copyright (C) 2015 devolo AG
+#
+
+. /lib/functions.sh
+
+# update SNMP system information from config/system
+config_cb() {
+	[ "$1" != system ] && { option_cb() { return ; } ; return; }
+
+	option_cb() {
+		case $1 in
+		hostname)
+			uci_set snmpd @system[0] sysName "$2"
+			;;
+		location)
+			uci_set snmpd @system[0] sysLocation "$2"
+			;;
+		contact)
+			uci_set snmpd @system[0] sysContact "$2"
+			;;
+		esac
+	}
+}
+
+config_load system
+uci_commit snmpd
diff --git a/etc/uci-defaults/01_delos-wireless b/etc/uci-defaults/01_delos-wireless
new file mode 100644
index 0000000..43c3b02
--- /dev/null
+++ b/etc/uci-defaults/01_delos-wireless
@@ -0,0 +1,151 @@
+#!/bin/sh
+#
+# Copyright (C) 2017 devolo AG
+#
+
+[ -f /etc/customization.sh ] && . /etc/customization.sh
+
+. /lib/functions.sh
+. /lib/delos-functions.sh
+
+board=
+if [ -e /lib/ar71xx.sh ]; then
+        . /lib/ar71xx.sh
+	board=$(ar71xx_board_name)
+elif [ -e /lib/ipq806x.sh ];then
+	. /lib/ipq806x.sh
+	board=$(ipq806x_board_name)
+fi
+
+# check marker
+uci_get wireless delos_uninitialized >/dev/null || exit 0
+
+WIFI0_HTMODE="${_DVL_DEFAULT_WIFI_2G_HTMODE:-HT40}"
+
+WIFI0=$(cat <<EOF
+config wifi-device 'wifi0'
+	option type 'qcawifi'
+	option channel 'auto'
+	option txpower '20'
+	option htmode '${WIFI0_HTMODE}'
+	option hwmode '11g'
+	option country 'DE'
+	option autorescan '1'
+	option autorescan_interval '120'
+	list supported_rates '54000'
+	list supported_rates '48000'
+	list supported_rates '36000'
+	list supported_rates '24000'
+	list supported_rates '18000'
+	list supported_rates '12000'
+	list supported_rates '11000'
+	list supported_rates '9000'
+	list supported_rates '6000'
+	list supported_rates '5500'
+	list supported_rates '2000'
+	list supported_rates '1000'
+	list basic_rate '11000'
+	list basic_rate '5500'
+	list basic_rate '2000'
+	list basic_rate '1000'
+
+config wifi-iface
+	option device 'wifi0'
+	option network 'lan'
+	option mode 'ap'
+	option wds '1'
+	option ssid 'devolo'
+	option encryption 'psk2'
+	option key 'oloved42'
+	option ieee80211w '1'
+	option wps_config 'push_button virtual_push_button physical_push_button display virtual_display'
+	option dvl_main '1'
+	option rrm '1'
+	option wnm '1'
+	option ieee80211r '0'
+	option rsn_preauth '1'
+EOF
+)
+
+WIFI1_HTMODE="${_DVL_DEFAULT_WIFI_5G_HTMODE:-VHT80}"
+
+WIFI1=$(cat <<EOF
+config wifi-device 'wifi1'
+	option type 'qcawifi'
+	option channel 'auto'
+	option txpower '27'
+	option htmode '${WIFI1_HTMODE}'
+	option hwmode '11a'
+	option country 'DE'
+	option autorescan '1'
+	option autorescan_interval '120'
+	list supported_rates '54000'
+	list supported_rates '48000'
+	list supported_rates '36000'
+	list supported_rates '24000'
+	list supported_rates '18000'
+	list supported_rates '12000'
+	list supported_rates '9000'
+	list supported_rates '6000'
+	list basic_rate '24000'
+	list basic_rate '12000'
+	list basic_rate '6000'
+	list acs_chanlist '36-112'
+	list acs_chanlist '132-140'
+
+config wifi-iface
+	option device 'wifi1'
+	option network 'lan'
+	option mode 'ap'
+	option wds '1'
+	option ssid 'devolo'
+	option encryption 'psk2'
+	option key 'oloved42'
+	option ieee80211w '1'
+	option wps_config 'push_button virtual_push_button physical_push_button display virtual_display'
+	option dvl_main '1'
+	option rrm '1'
+	option wnm '1'
+	option ieee80211r '1'
+	option rsn_preauth '1'
+EOF
+)
+
+WIFI_COMMON=$(cat <<EOF
+config wps 'wps'
+	option min_hold_time 0
+	option max_hold_time 3
+
+config qcawifi 'qcawifi'
+	option atf_mode '1'
+EOF
+)
+
+case "$board" in
+dvl-1750c |\
+dlan-1000-ac |\
+dlan2-2400-ac |\
+dlan-pro-1200-ac |\
+ew7479cap | \
+ap-dk07.1-c1 | \
+ap151)
+	cat >/etc/config/wireless <<EOF
+$WIFI0
+
+$WIFI1
+
+$WIFI_COMMON
+EOF
+	;;
+
+dlan-550-wifi |\
+dlan-pro-1200-n)
+	cat >/etc/config/wireless <<EOF
+$WIFI0
+
+$WIFI_COMMON
+EOF
+	;;
+esac
+
+exit 0
diff --git a/etc/uci-defaults/01_leds b/etc/uci-defaults/01_leds
new file mode 100644
index 0000000..18555f7
--- /dev/null
+++ b/etc/uci-defaults/01_leds
@@ -0,0 +1,720 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 OpenWrt.org
+#
+
+. /lib/functions/uci-defaults.sh
+. /lib/ar71xx.sh
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+airgateway)
+	ucidef_set_led_wlan "wlan" "WLAN" "ubnt:blue:wlan" "phy0tpt"
+	;;
+alfa-nx)
+	ucidef_set_led_netdev "wan" "WAN" "alfa:green:led_2" "eth0"
+	ucidef_set_led_netdev "lan" "LAN" "alfa:green:led_3" "eth1"
+	;;
+
+all0258n)
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "all0258n:red:rssilow" "wlan0" "1" "40" "0" "6"
+	ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "all0258n:yellow:rssimedium" "wlan0" "30" "80" "-29" "5"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "all0258n:green:rssihigh" "wlan0" "70" "100" "-69" "8"
+	;;
+
+all0315n)
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "all0315n:red:rssilow" "wlan0" "1" "40" "0" "6"
+	ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "all0315n:yellow:rssimedium" "wlan0" "30" "80" "-29" "5"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "all0315n:green:rssihigh" "wlan0" "70" "100" "-69" "8"
+	;;
+
+antminer-s1)
+	ucidef_set_led_default "sys" "SYS" "antminer-s1:green:sys" "0"
+	ucidef_set_led_wlan "wlan" "WLAN" "antminer-s1:green:wlan" "phy0tpt"
+	;;
+
+antminer-s3)
+	ucidef_set_led_wlan "wlan" "WLAN" "antminer-s3:green:wlan" "phy0tpt"
+	ucidef_set_led_default "sys" "SYS" "antminer-s3:green:sys" "0"
+	ucidef_set_led_default "lan" "LAN" "antminer-s3:yellow:lan" "0"
+	;;
+
+ap113)
+	ucidef_set_led_usbdev "usb" "USB" "ap113:green:usb" "1-1"
+	;;
+
+ap151)
+	ucidef_set_led_default "power" "System Power" "ap151:green:wan" "1"
+	ucidef_set_led_netdev "lan" "Ethernet Activity" "ap151:green:lan1" "br-lan"
+	ucidef_set_led_netdev "wlan2g" "WLAN 2.4 GHz" "ap151:green:lan2" "wifi0"
+	ucidef_set_led_netdev "wlan5g" "WLAN 5 GHz" "ap151:green:lan3" "wifi1"
+	ucidef_set_led_default "wps" "WPS" "ap151:green:wps" "0"
+	;;
+
+bsb)
+	ucidef_set_led_default "sys" "SYS" "bsb:red:sys" "1"
+	;;
+
+bullet-m | \
+nanostation-m | \
+rocket-m | \
+rocket-m-xw | \
+nanostation-m-xw | \
+loco-m-xw)
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "ubnt:red:link1" "wlan0" "1" "100" "0" "13"
+	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "ubnt:orange:link2" "wlan0" "26" "100" "-25" "13"
+	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "ubnt:green:link3" "wlan0" "51" "100" "-50" "13"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "ubnt:green:link4" "wlan0" "76" "100" "-75" "13"
+	;;
+
+bxu2000n-2-a1)
+	ucidef_set_led_wlan "wlan" "WLAN" "bhu:green:wlan" "phy0tpt"
+	;;
+
+cap4200ag)
+	ucidef_set_led_default "lan_green" "LAN_GREEN" "senao:green:lan" "1"
+	ucidef_set_led_wlan "wlan_amber" "WLAN_AMBER" "senao:amber:wlan" "phy0tpt"
+	ucidef_set_led_wlan "wlan_green" "WLAN_GREEN" "senao:green:wlan" "phy1tpt"
+	;;
+
+carambola2)
+	ucidef_set_led_netdev "lan" "LAN" "carambola2:orange:eth0" "eth0"
+	ucidef_set_led_netdev "wan" "WAN" "carambola2:orange:eth1" "eth1"
+	ucidef_set_led_wlan "wlan" "WLAN" "carambola2:green:wlan" "phy0tpt"
+	;;
+
+cpe510)
+	ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "tp-link:green:link1" "wlan0" "1" "100" "0" "13"
+	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "tp-link:green:link2" "wlan0" "26" "100" "-25" "13"
+	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "tp-link:green:link3" "wlan0" "51" "100" "-50" "13"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "tp-link:green:link4" "wlan0" "76" "100" "-75" "13"
+	;;
+
+db120)
+	ucidef_set_led_usbdev "usb" "USB" "db120:green:usb" "1-1"
+	;;
+
+dragino2)
+	ucidef_set_led_wlan "wlan" "WLAN" "dragino2:red:wlan" "phy0tpt"
+	ucidef_set_led_netdev "lan" "LAN" "dragino2:red:lan" "eth0"
+	ucidef_set_led_netdev "wan" "WAN" "dragino2:red:wan" "eth1"
+	;;
+
+dw33d)
+	ucidef_set_led_usbdev "mmc" "MMC" "dw33d:blue:mmc" "1-1"
+	ucidef_set_led_usbdev "usb" "USB" "dw33d:blue:usb" "2-1"
+	ucidef_set_led_netdev "internet" "INTERNET" "dw33d:blue:internet" "eth0"
+	ucidef_set_led_wlan "wlan2g" "WLAN-2.4G" "dw33d:blue:wlan-2g" "phy1tpt"
+	;;
+
+eap300v2)
+	ucidef_set_led_netdev "lan" "LAN" "engenius:blue:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "engenius:blue:wlan" "phy0tpt"
+	;;
+
+f9k1115v2)
+	ucidef_set_led_usbdev "usb2" "USB2" "belkin:green:usb2" "1-1"
+	;;
+
+rb-750)
+	ucidef_set_led_default "act" "act" "rb750:green:act" "1"
+	ucidef_set_led_netdev "port1" "port1" "rb750:green:port1" "eth1"
+	ucidef_set_led_switch "port2" "port2" "rb750:green:port2" "switch0" "0x10"
+	ucidef_set_led_switch "port3" "port3" "rb750:green:port3" "switch0" "0x08"
+	ucidef_set_led_switch "port4" "port4" "rb750:green:port4" "switch0" "0x04"
+	ucidef_set_led_switch "port5" "port5" "rb750:green:port5" "switch0" "0x02"
+	;;
+
+rb-2011l|\
+rb-2011uas|\
+rb-2011uias|\
+rb-2011uas-2hnd|\
+rb-2011uias-2hnd)
+	ucidef_set_led_switch "eth6" "ETH6" "rb:green:eth6" "switch1" "0x20"
+	ucidef_set_led_switch "eth7" "ETH7" "rb:green:eth7" "switch1" "0x10"
+	ucidef_set_led_switch "eth8" "ETH8" "rb:green:eth8" "switch1" "0x08"
+	ucidef_set_led_switch "eth9" "ETH9" "rb:green:eth9" "switch1" "0x04"
+	ucidef_set_led_switch "eth10" "ETH10" "rb:green:eth10" "switch1" "0x02"
+	;;
+
+devolo-home-control-cu)
+        ucidef_set_led_default "hcwhite" "Home Control white" "devolo:white:hc" "0"
+        ucidef_set_led_default "hcred" "Home Control red" "devolo:red:hc" "0"
+        ;;
+
+dhp-1565-a1)
+	ucidef_set_led_switch "wan" "WAN" "d-link:green:planet" "switch0" "0x20"
+	;;
+
+dir-505-a1)
+	ucidef_set_led_netdev "lan" "LAN" "d-link:green:power" "eth1"
+	;;
+
+dir-600-a1|\
+dir-615-e1|\
+dir-615-e4)
+	ucidef_set_led_netdev "wan" "WAN" "d-link:green:wan" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "d-link:green:lan1" "switch0" "0x02"
+	ucidef_set_led_switch "lan2" "LAN2" "d-link:green:lan2" "switch0" "0x04"
+	ucidef_set_led_switch "lan3" "LAN3" "d-link:green:lan3" "switch0" "0x08"
+	ucidef_set_led_switch "lan4" "LAN4" "d-link:green:lan4" "switch0" "0x10"
+	;;
+
+dir-615-c1)
+	ucidef_set_led_netdev "wan" "WAN" "d-link:green:wan" "eth1"
+	ucidef_set_led_wlan "wlan" "WLAN" "d-link:green:wlan" "phy0tpt"
+	;;
+
+dir-825-b1)
+	ucidef_set_led_usbdev "usb" "USB" "d-link:blue:usb" "1-1"
+	;;
+
+dir-615-i1)
+	ucidef_set_led_default "power" "POWER" "d-link:green:power" "1"
+	ucidef_set_led_default "diag" "DIAG" "d-link:amber:power" "0"
+	ucidef_set_led_default "wps" "WPS" "d-link:blue:wps" "0"
+	ucidef_set_led_netdev "wan" "WAN" "d-link:green:wan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "d-link:green:wlan" "phy0tpt"
+	;;
+
+dir-825-c1)
+	ucidef_set_led_usbdev "usb" "USB" "d-link:blue:usb" "1-1"
+	ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "d-link:blue:wlan2g" "phy0tpt"
+	;;
+
+dlan-hotspot)
+        ucidef_set_led_wlan "wlan" "WLAN" "devolo:green:wifi" "wifi"
+        ;;
+
+dlan-pro-500-wp)
+	ucidef_set_led_default "power" "System Power" "devolo:green:status" "1"
+	ucidef_set_led_netdev "lan" "Ethernet Activity" "devolo:green:eth" "br-lan"
+	ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "devolo:green:wlan-2g" "phy0tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN 5 GHz" "devolo:blue:wlan-5g" "none"
+	;;
+
+dlan-550-wifi)
+	ucidef_set_led_wlan "wlan" "WLAN" "devolo:status:wlan" "wifi"
+	ucidef_set_led_trigger_gpio "plcw" "dLAN" "devolo:status:dlan" "15" "0"
+	ucidef_set_led_trigger_gpio "plcr" "dLAN" "devolo:error:dlan" "14" "0"
+	;;
+
+dlan-1000-ac)
+	ucidef_set_led_wlan "wlan" "WLAN" "devolo:status:wlan" "wifi"
+	if [ "$(uci_get_state delos baptization DeviceType)" = "toledo" ]; then
+		ucidef_set_led_trigger_gpio "plcw" "dLAN" "devolo:status:dlan" "16" "1"
+		ucidef_set_led_trigger_gpio "plcr" "dLAN" "devolo:error:dlan" "15" "1"
+		uci set system.led_plcw.trigger=nil
+		uci set system.led_plcr.trigger=nil
+	else
+		ucidef_set_led_trigger_gpio "plcw" "dLAN" "devolo:status:dlan" "16" "0"
+		ucidef_set_led_trigger_gpio "plcr" "dLAN" "devolo:error:dlan" "15" "0"
+	fi
+	;;
+
+dlan-pro-1200-ac|\
+dlan-pro-1200-n)
+	ucidef_set_led_wlan "wlan" "WLAN" "devolo:status:wlan" "wifi"
+	if [ "$(uci_get_state delos baptization DeviceType)" = "valencia" ]; then
+		ucidef_set_led_trigger_gpio "plcw" "dLAN" "devolo:status:dlan" "17" "1"
+		ucidef_set_led_trigger_gpio "plcr" "dLAN" "devolo:error:dlan" "16" "1"
+		uci set system.led_plcw.trigger=nil
+		uci set system.led_plcr.trigger=nil
+	else
+		ucidef_set_led_trigger_gpio "plcw" "dLAN" "devolo:status:dlan" "17" "0"
+		ucidef_set_led_trigger_gpio "plcr" "dLAN" "devolo:error:dlan" "16" "0"
+	fi
+	;;
+
+gl-inet)
+	ucidef_set_led_netdev "lan" "LAN" "gl-connect:green:lan" "eth1"
+	ucidef_set_led_wlan "wlan" "WLAN" "gl-connect:red:wlan" "phy0tpt"
+	;;
+
+esr900)
+	ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "engenius:blue:wlan-2g" "phy0tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN 5 GHz" "engenius:blue:wlan-5g" "phy1tpt"
+	;;
+
+esr1750)
+	ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "esr1750:blue:wlan-2g" "phy0tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN 5 GHz" "esr1750:blue:wlan-5g" "phy1tpt"
+	;;
+
+epg5000)
+	ucidef_set_led_wlan "wlan2g" "WLAN 2.4 GHz" "epg5000:blue:wlan-2g" "phy1tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN 5 GHz" "epg5000:blue:wlan-5g" "phy0tpt"
+	;;
+
+hiwifi-hc6361)
+	ucidef_set_led_netdev "inet" "INET" "hiwifi:blue:internet" "eth1"
+	ucidef_set_led_wlan "wlan" "WLAN" "hiwifi:blue:wlan-2p4" "phy0tpt"
+	;;
+
+dvl-1200e)
+        ucidef_set_led_wlan "wlan5g" "WLAN5G" "dvl1200e:blue:status" "phy0radio"
+        ucidef_set_led_wlan "wlan2g" "WLAN2G" "dvl1200e:red:status" "phy1radio"
+        ;;
+
+dvl-1200i)
+        ucidef_set_led_wlan "wlan5g" "WLAN5G" "dvl1200i:green:status" "phy0radio"
+        ucidef_set_led_wlan "wlan2g" "WLAN2G" "dvl1200i:red:status" "phy1radio"
+        ;;
+
+dvl-1750e)
+        ucidef_set_led_wlan "wlan5g" "WLAN5G" "dvl1750e:blue:status" "phy0radio"
+        ucidef_set_led_wlan "wlan2g" "WLAN2G" "dvl1750e:red:status" "phy1radio"
+        ;;
+
+dvl-1750i)
+        ucidef_set_led_wlan "wlan5g" "WLAN5G" "dvl1750i:green:status" "phy0radio"
+        ucidef_set_led_wlan "wlan2g" "WLAN2G" "dvl1750i:red:status" "phy1radio"
+        ;;
+
+dvl-1750c)
+        ucidef_set_led_wlan "wlan5g" "WLAN5G" "dvl1750c:green:status" "phy0radio"
+        ucidef_set_led_wlan "wlan2g" "WLAN2G" "dvl1750c:red:status" "phy1radio"
+        ;;
+
+dvl-1750x)
+        ucidef_set_led_wlan "wlan5g" "WLAN5G" "dvl1750x:green:status" "phy0radio"
+        ucidef_set_led_wlan "wlan2g" "WLAN2G" "dvl1750x:red:status" "phy1radio"
+        ;;
+
+
+hornet-ub | \
+hornet-ub-x2)
+	ucidef_set_led_netdev "lan" "LAN" "alfa:blue:lan" "eth0"
+	ucidef_set_led_netdev "wan" "WAN" "alfa:blue:wan" "eth1"
+	ucidef_set_led_wlan "wlan" "WLAN" "alfa:blue:wlan" "phy0tpt"
+	ucidef_set_led_usbdev "usb" "USB" "alfa:blue:usb" "1-1"
+	;;
+
+mc-mac1200r)
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "mercury:green:wlan2g" "phy1tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN5G" "mercury:green:wlan5g" "phy0tpt"
+	;;
+
+mr12)
+	ucidef_set_led_netdev "wan" "WAN" "mr12:green:wan" "eth0"
+	ucidef_set_led_wlan "wlan1" "WLAN1" "mr12:green:wifi1" "phy0assoc"
+	ucidef_set_led_wlan "wlan2" "WLAN2" "mr12:green:wifi2" "phy0assoc"
+	ucidef_set_led_wlan "wlan3" "WLAN3" "mr12:green:wifi3" "phy0assoc"
+	ucidef_set_led_wlan "wlan4" "WLAN4" "mr12:green:wifi4" "phy0tpt"
+	;;
+
+mr16)
+	ucidef_set_led_netdev "wan" "WAN" "mr16:green:wan" "eth0"
+	ucidef_set_led_wlan "wlan1" "WLAN1" "mr16:green:wifi1" "phy0assoc"
+	ucidef_set_led_wlan "wlan2" "WLAN2" "mr16:green:wifi2" "phy0assoc"
+	ucidef_set_led_wlan "wlan3" "WLAN3" "mr16:green:wifi3" "phy0assoc"
+	ucidef_set_led_wlan "wlan4" "WLAN4" "mr16:green:wifi4" "phy0tpt"
+	;;
+
+mr600)
+	ucidef_set_led_wlan "wlan58" "WLAN58" "mr600:green:wlan58" "phy0tpt"
+	;;
+
+mr1750 | \
+mr1750v2)
+	ucidef_set_led_netdev "lan" "LAN" "mr1750:blue:wan" "eth0"
+	ucidef_set_led_wlan "wlan58" "WLAN58" "mr1750:blue:wlan58" "phy0tpt"
+	ucidef_set_led_wlan "wlan24" "WLAN24" "mr1750:blue:wlan24" "phy1tpt"
+	;;
+
+mr900 | \
+mr900v2)
+	ucidef_set_led_netdev "lan" "LAN" "mr900:blue:wan" "eth0"
+	ucidef_set_led_wlan "wlan24" "WLAN24" "mr900:blue:wlan24" "phy0tpt"
+	ucidef_set_led_wlan "wlan58" "WLAN58" "mr900:blue:wlan58" "phy1tpt"
+	;;
+
+mynet-n600)
+	ucidef_set_led_netdev "wan" "WAN" "wd:blue:internet" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "wd:green:lan1" "switch0" "0x02"
+	ucidef_set_led_switch "lan2" "LAN2" "wd:green:lan2" "switch0" "0x10"
+	ucidef_set_led_switch "lan3" "LAN3" "wd:green:lan3" "switch0" "0x08"
+	ucidef_set_led_switch "lan4" "LAN4" "wd:green:lan4" "switch0" "0x04"
+	;;
+
+mynet-rext)
+	ucidef_set_led_netdev "lan" "LAN" "wd:blue:ethernet" "eth0"
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "wd:blue:quality1" "wlan0" "1" "40" "0" "6"
+	ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "wd:blue:quality2" "wlan0" "30" "80" "-29" "5"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "wd:blue:quality3" "wlan0" "70" "100" "-69" "8"
+	ucidef_set_led_wlan "wlan" "WLAN" "wd:blue:wireless" "phy0tpt"
+	;;
+
+mzk-w04u)
+	ucidef_set_led_usbdev "usb" "USB" "planex:green:usb" "1-1"
+	;;
+
+mzk-w300nh)
+	ucidef_set_led_wlan "wlan" "WLAN" "planex:green:wlan" "phy0tpt"
+	;;
+
+nbg460n_550n_550nh)
+	ucidef_set_led_wlan "wlan" "WLAN" "nbg460n:green:wlan" "phy0tpt"
+	;;
+
+nbg6716)
+	ucidef_set_led_netdev "wan" "WAN" "zyxel:white:internet" "eth1"
+	ucidef_set_led_wlan "wlan" "WLAN" "zyxel:white:wifi2g" "phy1tpt"
+	ucidef_set_led_wlan "wlan5" "WLAN5" "zyxel:white:wifi5g" "phy0tpt"
+	ucidef_set_led_usbdev "usb1" "USB1" "zyxel:white:usb1" "2-1"
+	ucidef_set_led_usbdev "usb2" "USB2" "zyxel:white:usb2" "1-1"
+	;;
+
+om2p | \
+om2pv2 | \
+om2p-hs | \
+om2p-hsv2 | \
+om2p-hsv3 | \
+om2p-lc)
+	ucidef_set_led_netdev "port1" "port1" "om2p:blue:wan" "eth0"
+	ucidef_set_led_netdev "port2" "port2" "om2p:blue:lan" "eth1"
+	;;
+
+om5p | \
+om5p-an)
+	ucidef_set_led_netdev "port1" "port1" "om5p:blue:wan" "eth0"
+	ucidef_set_led_netdev "port2" "port2" "om5p:blue:lan" "eth1"
+	;;
+
+om5p-ac)
+	ucidef_set_led_netdev "port1" "port1" "om5pac:blue:lan" "eth0"
+	ucidef_set_led_netdev "port2" "port2" "om5pac:blue:wan" "eth1"
+	;;
+
+qihoo-c301)
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "qihoo:red:status" "phy1tpt"
+	;;
+
+smart-300)
+	ucidef_set_led_netdev "wan" "WAN" "nc-link:green:wan" "eth0"
+	ucidef_set_led_switch "lan1" "LAN1" "nc-link:green:lan1" "switch0" "0x04"
+	ucidef_set_led_switch "lan2" "LAN2" "nc-link:green:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "nc-link:green:lan3" "switch0" "0x10"
+	ucidef_set_led_switch "lan4" "LAN4" "nc-link:green:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "nc-link:green:wlan" "phy0tpt"
+	;;
+
+tew-712br)
+	ucidef_set_led_netdev "wan" "WAN" "trendnet:green:wan" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "trendnet:green:lan1" "switch0" "0x02"
+	ucidef_set_led_switch "lan2" "LAN2" "trendnet:green:lan2" "switch0" "0x04"
+	ucidef_set_led_switch "lan3" "LAN3" "trendnet:green:lan3" "switch0" "0x08"
+	ucidef_set_led_switch "lan4" "LAN4" "trendnet:green:lan4" "switch0" "0x10"
+	ucidef_set_led_wlan "wlan" "WLAN" "trendnet:green:wlan" "phy0tpt"
+	;;
+
+tew-732br)
+	ucidef_set_led_netdev "wan" "WAN" "trendnet:green:wan" "eth1"
+	;;
+
+tl-mr11u | \
+tl-mr3020 | \
+tl-mr3040 | \
+tl-mr3040-v2)
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan"  "eth0"
+	;;
+
+tl-mr3220 | \
+tl-mr3420 )
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
+	;;
+
+tl-mr3220-v2)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x10"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
+	;;
+
+tl-mr3420-v2)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth0"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x10"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
+	;;
+
+tl-wa7210n-v2)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "tp-link:green:signal1" "wlan0" "1" "100" "0" "13"
+	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "tp-link:green:signal2" "wlan0" "26" "100" "-25" "13"
+	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "tp-link:green:signal3" "wlan0" "51" "100" "-50" "13"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "tp-link:green:signal4" "wlan0" "76" "100" "-75" "13"
+	;;
+
+tl-wa750re)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:orange:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:orange:wlan" "phy0tpt"
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "tp-link:orange:signal1" "wlan0" "1" "100" "0" "13"
+	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "tp-link:orange:signal2" "wlan0" "20" "100" "-19" "13"
+	ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "tp-link:orange:signal3" "wlan0" "40" "100" "-39" "13"
+	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "tp-link:orange:signal4" "wlan0" "60" "100" "-59" "13"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "tp-link:orange:signal5" "wlan0" "80" "100" "-79" "13"
+	;;
+
+tl-wa850re)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:blue:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "tp-link:blue:signal1" "wlan0" "1" "100" "0" "13"
+	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "tp-link:blue:signal2" "wlan0" "20" "100" "-19" "13"
+	ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "tp-link:blue:signal3" "wlan0" "40" "100" "-39" "13"
+	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "tp-link:blue:signal4" "wlan0" "60" "100" "-59" "13"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "tp-link:blue:signal5" "wlan0" "80" "100" "-79" "13"
+	;;
+
+tl-wa701nd-v2)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wa860re)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wa901nd)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
+	;;
+
+tl-wa901nd-v2)
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wa901nd-v4)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wdr3500)
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "tp-link:green:wlan2g" "phy0tpt"
+	;;
+
+tl-wdr4300)
+	ucidef_set_led_usbdev "usb1" "USB1" "tp-link:green:usb1" "1-1.1"
+	ucidef_set_led_usbdev "usb2" "USB2" "tp-link:green:usb2" "1-1.2"
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "tp-link:blue:wlan2g" "phy0tpt"
+	;;
+
+tl-wdr4900-v2)
+	ucidef_set_led_usbdev "usb1" "USB1" "tp-link:green:usb1" "1-1"
+	ucidef_set_led_usbdev "usb2" "USB2" "tp-link:green:usb2" "2-1"
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "tp-link:blue:wlan2g" "phy0tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN5G" "tp-link:blue:wlan5g" "phy1tpt"
+	;;
+
+archer-c5|\
+archer-c7)
+	ucidef_set_led_usbdev "usb1" "USB1" "tp-link:green:usb1" "1-1"
+	ucidef_set_led_usbdev "usb2" "USB2" "tp-link:green:usb2" "2-1"
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "tp-link:blue:wlan2g" "phy1tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN5G" "tp-link:blue:wlan5g" "phy0tpt"
+	;;
+
+tl-wr741nd)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x02"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x04"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x08"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x10"
+	;;
+
+tl-wr741nd-v4)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x10"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wr841n-v8 | \
+tl-wr941nd-v5)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth0"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x10"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wr941nd-v6)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:blue:lan1" "switch0" "0x10"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:blue:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:blue:lan3" "switch0" "0x04"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:blue:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
+	;;
+
+tl-wa830re-v2)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wr841n-v9 | \
+tl-wr841n-v11)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wr842n-v2)
+	ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth0"
+	ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x04"
+	ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x08"
+	ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x10"
+	ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
+	;;
+
+tl-wa801nd-v2 | \
+tl-wa901nd-v3)
+	ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wr941nd | \
+tl-wr1041n-v2)
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wr1043nd | \
+tl-wr1043nd-v2)
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
+	ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
+	;;
+
+tl-wr2543n)
+	ucidef_set_led_usbdev "usb" "USB" "tp-link:green:usb" "1-1"
+	;;
+
+tube2h)
+	ucidef_set_led_netdev "lan" "LAN" "alfa:blue:lan" "eth0"
+	ucidef_set_rssimon "wlan0" "40000" "1"
+	ucidef_set_led_rssi "signal1" "SIGNAL1" "alfa:red:signal1" "wlan0" "1" "100" "0" "13"
+	ucidef_set_led_rssi "signal2" "SIGNAL2" "alfa:orange:signal2" "wlan0" "26" "100" "-25" "13"
+	ucidef_set_led_rssi "signal3" "SIGNAL3" "alfa:green:signal3" "wlan0" "51" "100" "-50" "13"
+	ucidef_set_led_rssi "signal4" "SIGNAL4" "alfa:green:signal4" "wlan0" "76" "100" "-75" "13"
+	;;
+
+wrt160nl)
+	ucidef_set_led_wlan "wlan" "WLAN" "wrt160nl:blue:wlan" "phy0tpt"
+	;;
+
+wndap360)
+        ucidef_set_led_power "power" "POWER GREEN" "netgear:green:power" "1"
+        ;;
+
+wndr3700)
+	ucidef_set_led_default "wan" "WAN LED (green)" "netgear:green:wan" "0"
+	ucidef_set_led_usbdev "usb" "USB" "netgear:green:usb" "1-1"
+	;;
+
+r6100)
+	ucidef_set_led_netdev "wan" "WAN (green)" "netgear:green:wan" "eth0"
+	ucidef_set_led_usbdev "usb" "USB" "netgear:blue:usb" "1-1"
+	ucidef_set_led_wlan "wlan" "WLAN" "netgear:blue:wlan" "phy1tpt"
+	;;
+
+wndr3700v4 | \
+wndr4300)
+	ucidef_set_led_netdev "wan" "WAN (green)" "netgear:green:wan" "eth0.2"
+	ucidef_set_led_usbdev "usb" "USB" "netgear:green:usb" "1-1"
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "netgear:green:wlan2g" "phy0tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN5G" "netgear:blue:wlan5g" "phy1tpt"
+	;;
+
+whr-g301n |\
+whr-hp-g300n |\
+whr-hp-gn)
+	ucidef_set_led_netdev "wan" "WAN" "buffalo:green:wan" "eth1"
+	ucidef_set_led_switch "lan1" "LAN1" "buffalo:green:lan1" "switch0" "0x02"
+	ucidef_set_led_switch "lan2" "LAN2" "buffalo:green:lan2" "switch0" "0x04"
+	ucidef_set_led_switch "lan3" "LAN3" "buffalo:green:lan3" "switch0" "0x08"
+	ucidef_set_led_switch "lan4" "LAN4" "buffalo:green:lan4" "switch0" "0x10"
+	;;
+
+wlae-ag300n)
+	ucidef_set_led_netdev "wireless" "WIRELESS" "buffalo:green:wireless" "wlan0"
+	;;
+
+wnr2000-v4)
+	ucidef_set_led_netdev "wan" "WAN" "netgear:green:wan" "eth0"
+	ucidef_set_led_netdev "wlan" "WLAN" "netgear:blue:wlan" "wlan0"
+	ucidef_set_led_switch "lan1" "LAN1" "netgear:amber:lan1" "switch0" "0x02"
+	ucidef_set_led_switch "lan2" "LAN2" "netgear:amber:lan2" "switch0" "0x04"
+	ucidef_set_led_switch "lan3" "LAN3" "netgear:amber:lan3" "switch0" "0x08"
+	ucidef_set_led_switch "lan4" "LAN4" "netgear:amber:lan4" "switch0" "0x10"
+	ucidef_set_led_usbdev "usb" "USB" "netgear:amber:status" "1-1"
+	;;
+
+wpn824n)
+	ucidef_set_led_netdev "wan-amber" "WAN (amber)" "netgear:amber:wan" "eth0"
+	ucidef_set_led_wlan "wlan" "WLAN" "netgear:blue:wlan" "phy0tpt"
+	ucidef_set_led_switch "lan1amber" "LAN1 (amber)" "netgear:amber:lan1" "switch0" "0x02"
+	ucidef_set_led_switch "lan2amber" "LAN2 (amber)" "netgear:amber:lan2" "switch0" "0x04"
+	ucidef_set_led_switch "lan3amber" "LAN3 (amber)" "netgear:amber:lan3" "switch0" "0x08"
+	ucidef_set_led_switch "lan4amber" "LAN4 (amber)" "netgear:amber:lan4" "switch0" "0x10"
+	ucidef_set_led_default "lan1green" "LAN1 (green)" "netgear:green:lan1" "0"
+	ucidef_set_led_default "lan2green" "LAN2 (green)" "netgear:green:lan2" "0"
+	ucidef_set_led_default "lan3green" "LAN3 (green)" "netgear:green:lan3" "0"
+	ucidef_set_led_default "lan4green" "LAN4 (green)" "netgear:green:lan4" "0"
+	ucidef_set_led_default "wan-green" "WAN (green)" "netgear:green:wan" "0"
+	ucidef_set_led_default "wps1" "WPS1" "netgear:blue:wps1" "0"
+	ucidef_set_led_default "wps2" "WPS2" "netgear:blue:wps2" "0"
+	ucidef_set_led_default "status" "STATUS" "netgear:amber:status" "0"
+	ucidef_set_led_default "test" "TEST" "netgear:amber:test" "0"
+	;;
+
+wzr-hp-ag300h)
+	ucidef_set_led_default "diag" "DIAG" "buffalo:red:diag" "0"
+	ucidef_set_led_netdev "router" "ROUTER" "buffalo:green:router" "eth1"
+	ucidef_set_led_usbdev "usb" "USB" "buffalo:green:usb" "1-1"
+	;;
+
+wzr-hp-g300nh)
+	ucidef_set_led_wlan "wlan" "Wireless" "buffalo:green:wireless" "phy0tpt"
+	ucidef_set_led_netdev "router" "Router" "buffalo:green:router" "eth1"
+	ucidef_set_led_usbdev "usb" "USB" "buffalo:blue:usb" "1-1"
+	;;
+
+zcn-1523h-2)
+	ucidef_set_led_netdev "lan1" "lan1" "zcn-1523h:green:lan1" "eth0"
+	;;
+
+zcn-1523h-5)
+	ucidef_set_led_netdev "lan1" "lan1" "zcn-1523h:green:lan1" "eth0"
+	ucidef_set_led_netdev "lan2" "lan2" "zcn-1523h:green:lan2" "eth1"
+	;;
+esac
+
+ucidef_commit_leds
+
+exit 0
diff --git a/etc/uci-defaults/01_plc b/etc/uci-defaults/01_plc
new file mode 100644
index 0000000..08e33ec
--- /dev/null
+++ b/etc/uci-defaults/01_plc
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Copyright (C) 2015-2017 devolo AG
+#
+
+[ -e /etc/config/plc ] && exit 0
+
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+
+. /lib/functions/uci-defaults.sh
+
+touch /etc/config/plc
+uci set plc.plc=plc
+
+# allow standby as default
+uci set plc.plc.standby=1
+
+board=$(${PLATFORM}_board_name)
+
+case "$board" in
+    dlan-hotspot)
+        uci set plc.plc.disabled=0
+        uci set plc.plc.interface=eth1
+        ;;
+    dlan-pro-500-wp|\
+    dlan-550-wifi)
+        uci set plc.plc.disabled=0
+        uci set plc.plc.interface=eth0
+        uci set plc.plc.individual_nmk=1
+        ;;
+    dlan-pro-1200-ac|\
+    dlan-pro-1200-n)
+        uci set plc.plc.disabled=0
+        uci set plc.plc.interface=eth0
+        uci set plc.plc.individual_nmk=1
+        uci set plc.config=config
+        uci set plc.config.PlcIfname=eth0
+        uci set plc.config.AggrLinkRate=0
+        uci set plc.config.Enabled=1
+        ;;
+    dlan-1000-ac)
+	uci set plc.plc.disabled=0
+	uci set plc.plc.interface=eth0
+	uci set plc.plc.individual_nmk=1
+        uci set plc.config=config
+        uci set plc.config.PlcIfname=eth0
+        uci set plc.config.AggrLinkRate=0
+        uci set plc.config.Enabled=1
+	;;
+    devolo-home-control-cu)
+        uci set plc.plc.disabled=0
+        uci set plc.plc.interface=eth0
+        uci set plc.plc.individual_nmk=1
+        ;;
+    *)
+        uci set plc.plc.disabled=1
+        ;;
+esac
+
+uci commit plc
+
+exit 0
diff --git a/etc/uci-defaults/01_wifitoggle b/etc/uci-defaults/01_wifitoggle
new file mode 100644
index 0000000..889d42f
--- /dev/null
+++ b/etc/uci-defaults/01_wifitoggle
@@ -0,0 +1,60 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 OpenWrt.org
+#
+
+. /lib/functions/uci-defaults.sh
+. /lib/ar71xx.sh
+
+#if no wifitoggle config exists, wifitoggle package is not installed
+uci show wifitoggle >/dev/null || exit 1
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+
+dlan-hotspot)
+	uci set wifitoggle.@wifitoggle[0].led_sysfs=devolo:green:wifi
+	uci set wifitoggle.@wifitoggle[0].persistent=1
+	uci delete wifitoggle.@wifitoggle[0].timer
+	uci delete wifitoggle.@wifitoggle[0].led_enable_trigger
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayon
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayoff
+	;;
+
+dlan-pro-500-wp)
+	uci set wifitoggle.@wifitoggle[0].button=BTN_2
+	uci set wifitoggle.@wifitoggle[0].led_sysfs=devolo:green:wlan-2g
+	uci set wifitoggle.@wifitoggle[0].persistent=1
+	uci delete wifitoggle.@wifitoggle[0].timer
+	uci delete wifitoggle.@wifitoggle[0].led_enable_trigger
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayon
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayoff
+	;;
+
+dlan-pro-1200-ac|\
+dlan-pro-1200-n|\
+dlan-550-wifi)
+	uci set wifitoggle.@wifitoggle[0].led_sysfs=devolo:status:wlan
+	uci set wifitoggle.@wifitoggle[0].persistent=1
+	uci delete wifitoggle.@wifitoggle[0].timer
+	uci delete wifitoggle.@wifitoggle[0].led_enable_trigger
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayon
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayoff
+	;;
+
+ew-7679wac)
+	uci set wifitoggle.@wifitoggle[0].button=_DISABLED_
+	uci set wifitoggle.@wifitoggle[0].led_sysfs=ew7679wac:blue:status
+	uci set wifitoggle.@wifitoggle[0].persistent=1
+	uci delete wifitoggle.@wifitoggle[0].timer
+	uci delete wifitoggle.@wifitoggle[0].led_enable_trigger
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayon
+	uci delete wifitoggle.@wifitoggle[0].led_enable_delayoff
+	;;
+
+esac
+
+uci commit wifitoggle
+
+exit 0
diff --git a/etc/uci-defaults/02_fwuagent b/etc/uci-defaults/02_fwuagent
new file mode 100755
index 0000000..0a02252
--- /dev/null
+++ b/etc/uci-defaults/02_fwuagent
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+[ -e /etc/config/fwuagent ] && exit 0
+
+. /lib/functions/uci-defaults.sh
+
+touch /etc/config/fwuagent
+
+uci set fwuagent.hawkbit=hawkbit
+uci set fwuagent.hawkbit.server=hawkbit.devolo.net
+uci set fwuagent.device=device
+uci set fwuagent.device.firmware_distribution=delos
+uci set fwuagent.device.version_bl=1.0.0
+uci set fwuagent.service=service
+uci set fwuagent.service.disabled=0
+uci set fwuagent.service.log_level=INFO
+uci set fwuagent.service.automatic_update=1
+uci set fwuagent.service.ghn_agents=0
+uci set fwuagent.schedule=schedule
+uci set fwuagent.schedule.enabled=1
+uci set fwuagent.schedule.daysofweek='Monday Tuesday Wednesday Thursday Friday Saturday Sunday'
+uci set fwuagent.schedule.starttime='02:00'
+uci set fwuagent.schedule.stoptime='05:00'
+uci commit fwuagent
+
+exit 0
diff --git a/etc/uci-defaults/02_network b/etc/uci-defaults/02_network
new file mode 100755
index 0000000..4dc2116
--- /dev/null
+++ b/etc/uci-defaults/02_network
@@ -0,0 +1,689 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 OpenWrt.org
+#
+
+[ -e /etc/config/network ] && exit 0
+
+touch /etc/config/network
+
+. /lib/functions/uci-defaults.sh
+. /lib/ar71xx.sh
+
+ucidef_set_interface_loopback
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+all0315n |\
+all0258n |\
+ja76pf2|\
+ubnt-unifi-outdoor)
+	ucidef_set_interface_lan "eth0 eth1"
+	;;
+
+ap132 |\
+ap152 |\
+apjet01 |\
+wlr8100)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 1"
+	;;
+
+esr1750 |\
+epg5000)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "0t 5"
+	;;
+
+ap136-010)
+	ucidef_set_interfaces_lan_wan "eth0" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "5 6"
+	;;
+
+# override original ap151 settings from below for delos
+ap151)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "5 6"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth0"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+ap136-020 |\
+ap135-020 |\
+ap135 |\
+ap137 |\
+ap151 |\
+tl-wr1043nd-v2 |\
+wzr-450hp2)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "5 6"
+	;;
+
+ap147-010 |\
+ap147 |\
+ap143)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "eth1" "1" "1"
+	ucidef_add_switch_vlan "eth1" "1" "0 1 2 3 4"
+	;;
+
+archer-c5 |\
+archer-c7 |\
+dw33d |\
+tl-wdr4900-v2)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 2 3 4 5"
+	ucidef_add_switch_vlan "switch0" "2" "1 6"
+	;;
+
+bsb)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 3"
+	ucidef_set_interface_wlan
+	;;
+
+cpe510)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 4"
+	;;
+
+db120 |\
+rb-2011l | \
+rb-2011uas |\
+rb-2011uias |\
+rb-2011uas-2hnd|\
+rb-2011uias-2hnd)
+	ucidef_set_interfaces_lan_wan "eth0.1 eth1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 1"
+	ucidef_add_switch "switch1" "1" "1"
+	ucidef_add_switch_vlan "switch1" "1" "0 1 2 3 4 5"
+
+	case "$board" in
+	rb-2011uas* | rb-2011uias | rb-2011uias-2hnd)
+		ucidef_set_interface_raw "sfp" "eth0.3"
+		ucidef_add_switch_vlan "switch0" "3" "0t 6"
+		;;
+	esac
+	;;
+
+dir-825-b1|\
+tew-673gru)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 5t"
+	;;
+
+f9k1115v2)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "2 3 4 5 6"
+	ucidef_add_switch_vlan "switch0" "2" "0 1"
+	;;
+
+nbg460n_550n_550nh)
+	ucidef_set_interfaces_lan_wan "eth0" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "0" "0 1 2 3 5"
+	;;
+
+nbg6716)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "5 6"
+	;;
+
+rb-433 |\
+rb-433u)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "1 2 5"
+	;;
+
+rb-435g)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2"
+	;;
+
+rb-450)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 5"
+	;;
+
+rb-450g |\
+routerstation-pro)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
+	;;
+
+ap136 |\
+rb-750gl |\
+rb-751g |\
+rb-951g-2hnd |\
+wzr-hp-g450h)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 1"
+	;;
+
+rb-951ui-2hnd)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	;;
+
+rb-493g)
+	ucidef_set_interfaces_lan_wan "eth0 eth1.1" "eth1.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
+	ucidef_add_switch "switch1" "1" "1"
+	ucidef_add_switch_vlan "switch1" "1" "0t 1 2 3 4"
+	ucidef_add_switch_vlan "switch1" "2" "0t 5"
+	;;
+
+wzr-hp-g300nh2 |\
+pb92 |\
+ap113)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 3 4 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 2"
+	;;
+
+el-m150)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 3"
+	;;
+
+tl-wdr4300|\
+tl-wr1041n-v2)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 1"
+	;;
+
+tl-wr1043nd)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 5t"
+	ucidef_add_switch_vlan "switch0" "2" "0 5t"
+	;;
+
+tl-wr2543n)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "1 2 3 4 9t"
+	ucidef_add_switch_vlan "switch0" "2" "0 9t"
+	;;
+
+tl-wr841n-v1|\
+tl-wr941nd)
+	ucidef_set_interface_raw "eth" "eth0"
+	ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan"
+	;;
+
+r6100 |\
+smart-300 |\
+dir-615-i1 |\
+tl-mr3420-v2 |\
+tl-wr841n-v8 |\
+tl-wr842n-v2 |\
+tl-wr941nd-v5 |\
+tl-wr941nd-v6 |\
+wnr2000-v3 |\
+wnr2000-v4 |\
+wnr2200 |\
+wnr612-v2 |\
+wnr1000-v2 |\
+wpn824n)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
+	;;
+
+uap-pro)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1"
+	ucidef_add_switch_vlan "switch0" "2" "0t 2"
+	;;
+
+nanostation-m-xw)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 1"
+	;;
+
+wrt160nl)
+	ucidef_set_interfaces_lan_wan "eth0" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4 5"
+	;;
+
+wzr-hp-g300nh)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 5t"
+	;;
+
+dgl-5500-a1 |\
+dir-825-c1)
+	local mac
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "0t 5"
+	mac=$(mtd_get_mac_ascii nvram "wan_mac")
+	[ -n "$mac" ] && ucidef_set_interface_macaddr "wan" "$mac"
+	;;
+
+mynet-n750)
+	local mac
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "0t 5"
+	mac=$(mtd_get_mac_ascii devdata "wanmac")
+	[ -n "$mac" ] && ucidef_set_interface_macaddr "wan" "$mac"
+	;;
+
+onion-omega)
+	ucidef_set_interface_lan "wlan0"
+	;;
+
+dhp-1565-a1 |\
+dir-835-a1 |\
+wndr3700v4 | \
+wndr4300)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "0t 5"
+	mac_lan=$(mtd_get_mac_binary caldata 0)
+	[ -n "$mac_lan" ] && ucidef_set_interface_macaddr "lan" "$mac_lan"
+	mac_wan=$(mtd_get_mac_binary caldata 6)
+	[ -n "$mac_wan" ] && ucidef_set_interface_macaddr "wan" "$mac_wan"
+	;;
+
+esr900)
+	local mac
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 2 3 4"
+	ucidef_add_switch_vlan "switch0" "2" "0t 5"
+	mac=$(mtd_get_mac_ascii u-boot-env "wanaddr")
+	[ -n "$mac" ] && ucidef_set_interface_macaddr "wan" "$mac"
+	;;
+
+dlan-hotspot)
+	ucidef_set_interface_lan "eth0 eth1"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth0"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+dlan-pro-500-wp)
+	ucidef_set_interface_lan "eth0 eth1"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth0"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+dlan-550-wifi)
+	ucidef_set_interface_lan "eth0 eth1"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth1"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.@switch[-1].igmp_snooping='1'
+	uci set network.@switch[-1].igmp_v3='1'
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+dlan-1000-ac)
+	ucidef_set_interface_lan "eth1 eth0"
+	ucidef_add_switch "switch0" "1" "0"
+	ucidef_add_switch_vlan "switch0" "0" "0 2 3"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth1"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.@switch[-1].igmp_snooping='1'
+	uci set network.@switch[-1].igmp_v3='1'
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+dlan-pro-1200-ac|\
+dlan-pro-1200-n)
+	ucidef_set_interface_lan "eth0"
+	ucidef_add_switch "switch0" "1" "0"
+	ucidef_add_switch_vlan "switch0" "0" "0 2 3 4"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth0"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.@switch[-1].igmp_snooping='1'
+	uci set network.@switch[-1].igmp_v3='1'
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+devolo-home-control-cu)
+	[ -e /etc/delos-image ] && . /etc/delos-image
+	case "$DEVICE_TYPE" in
+	iotgateway)
+		# setup for iot-gateway:
+		# logical br-lan with physical eth0 eth1 (plc, eth), static ip and dhcp server enabled
+		# logical wan with physical eth2 (usbeth), dhcp client
+		# logical wwan for USB modem stick (interface cannot be in a bridge when proto=wwan), no autostart, proto wwan
+		ucidef_set_interfaces_lan_wan "eth0 eth1" "eth2"
+		ucidef_set_interface_macaddr "lan" "@eth0"
+		#uci set network.lan.ipaddr=192.168.100.1
+		uci set dhcp.lan.ignore=0
+		ucidef_set_interface_raw "wwan" "" "wwan"
+		uci set network.wwan.auto='0'
+		uci add_list firewall.@zone[1].network='wwan'
+		;;
+	*)
+		# setup for home-control-gateway:
+		uci set network.lan='interface'
+		uci set network.lan.ifname='eth0 eth1'
+		uci set network.lan.type='bridge'
+		uci set network.lan.proto='dhcp'
+		;;
+	esac
+	ucidef_add_switch "switch0" "1" "0"
+	ucidef_add_switch_vlan "switch0" "0" "0 2"
+	uci set network.@switch[-1].igmp_snooping='1'
+	uci set network.@switch[-1].igmp_v3='1'
+	;;
+
+dvl-1200i|\
+dvl-1750i|\
+dvl-1750c|\
+dvl-1750x)
+	ucidef_set_interface_lan "eth0"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth0"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+dvl-1200e|\
+dvl-1750e)
+	ucidef_set_interface_lan "eth0 eth1"
+	uci set network.lan.multicast_querier='0'
+	uci set network.lan.proto=dhcp
+	uci set network.lan.autoip=yes
+	ucidef_set_interface_macaddr "lan" "@eth0"
+	uci delete network.lan.ipaddr
+	uci delete network.lan.netmask
+	uci delete network.lan.ip6assign
+	uci set network.lan6=interface
+	uci set network.lan6.ifname=br-lan
+	uci set network.lan6.proto=dhcpv6
+	;;
+
+alfa-ap120c |\
+all0305 |\
+antminer-s1 |\
+antminer-s3 |\
+aw-nr580 |\
+bullet-m |\
+cap4200ag |\
+eap300v2 |\
+eap7660d |\
+el-mini |\
+loco-m-xw |\
+mr1750 |\
+mr1750v2 |\
+mr600 |\
+mr600v2 |\
+mr900 |\
+mr900v2 |\
+rb-411 |\
+rb-911g-2hpnd |\
+rb-911g-5hpacd |\
+rb-911g-5hpnd |\
+rb-912uag-2hpnd |\
+rb-912uag-5hpnd |\
+rb-sxt2n |\
+rb-sxt5n |\
+rocket-m-xw |\
+tl-mr10u |\
+tl-mr11u |\
+tl-mr12u |\
+tl-mr13u |\
+tl-mr3020 |\
+tl-mr3040 |\
+tl-mr3040-v2 |\
+tl-wa701nd-v2 |\
+tl-wa7210n-v2 |\
+tl-wa750re |\
+tl-wa850re |\
+tl-wa830re-v2 |\
+tl-wa801nd-v2 |\
+tl-wa901nd |\
+tl-wa901nd-v2 |\
+tl-wa901nd-v3 |\
+tl-wa901nd-v4 |\
+tl-wr703n |\
+tube2h |\
+wndap360 |\
+mynet-rext |\
+wp543)
+	ucidef_set_interface_lan "eth0"
+	;;
+
+dir-505-a1)
+	ucidef_set_interface_lan "eth1"
+	;;
+
+alfa-ap96 |\
+alfa-nx |\
+ap83 |\
+gl-inet |\
+jwap003 |\
+pb42 |\
+pb44 |\
+routerstation|\
+tl-wr710n |\
+tl-wr720n-v3|\
+wpe72)
+	ucidef_set_interfaces_lan_wan "eth1" "eth0"
+	;;
+
+wpj344)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 3"
+	ucidef_add_switch_vlan "switch0" "2" "0t 2"
+	;;
+
+wpj531)
+	ucidef_set_interfaces_lan_wan "eth0" "eth1"
+	;;
+
+wpj558)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "5 6t"
+	ucidef_add_switch_vlan "switch0" "2" "1 6t"
+	;;
+
+ap121 |\
+ap121-mini |\
+ap96 |\
+airrouter |\
+cus531 |\
+cus531-dual |\
+cus531-nand |\
+cus531mp3 |\
+cus531mp3-dual |\
+cus531mp3-nand |\
+dir-600-a1 |\
+dir-615-c1 |\
+dir-615-e1 |\
+dir-615-e4 |\
+hiwifi-hc6361 |\
+ja76pf |\
+mc-mac1200r|\
+minibox-v1 |\
+mynet-n600 |\
+oolite |\
+qihoo-c301 |\
+rb-750 |\
+rb-751 |\
+tew-632brp |\
+tew-712br |\
+tew-732br |\
+tl-mr3220 |\
+tl-mr3220-v2 |\
+tl-mr3420 |\
+tl-wdr3500 |\
+tl-wr741nd |\
+tl-wr741nd-v4 |\
+tl-wr841n-v7 |\
+tl-wr841n-v9 |\
+tl-wr841n-v11 |\
+whr-g301n |\
+whr-hp-g300n |\
+whr-hp-gn |\
+wzr-hp-ag300h)
+	ucidef_set_interfaces_lan_wan "eth0" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
+	;;
+
+wzr-hp-g450h)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5"
+	ucidef_add_switch_vlan "switch0" "2" "0t 1"
+	;;
+
+ew-dorin)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0t 1 2"
+	ucidef_add_switch_vlan "switch0" "2" "0t 3"
+	;;
+
+ew-dorin-router)
+	ucidef_set_interfaces_lan_wan "eth0" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 2 3"
+	;;
+
+wndr3700)
+	ucidef_set_interfaces_lan_wan "eth0.1" "eth1"
+	ucidef_add_switch "switch0" "1" "1"
+	ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 5t"
+	# Blinkrate: 0=43ms; 1=84ms; 2=120ms; 3=170ms; 4=340ms; 5=670ms
+	uci set network.@switch[-1].blinkrate='2'
+
+	ucidef_add_switch_port "switch0" "1"
+	# Port 1 controls the GREEN configuration of LEDs for
+	# the switch and the section does not correspond to a real
+	# switch port.
+	#
+	# 0=LED off; 1=Collision/FDX; 2=Link/activity; 3=1000 Mb/s;
+	# 4=100 Mb/s; 5=10 Mb/s; 6=1000 Mb/s+activity; 7=100 Mb/s+activity;
+	# 8=10 Mb/s+activity; 9=10/100 Mb/s+activity; 10: Fiber;
+	# 11: Fault; 12: Link/activity(tx); 13: Link/activity(rx);
+	# 14: Link (master); 15: separate register
+	uci set network.@switch_port[-1].led='6'
+
+	ucidef_add_switch_port "switch0" "2"
+	# Port 2 controls the ORANGE configuration of LEDs for
+	# the switch and the section does not correspond to a real
+	# switch port.
+	#
+	# See the key above for switch port 1 for the meaning of the
+	# 'led' setting below.
+	uci set network.@switch_port[-1].led='9'
+
+	ucidef_add_switch_port "switch0" "5"
+	# Port 5 controls the configuration of the WAN LED and the
+	# section does not correspond to a real switch port.
+	#
+	# To toggle the use of green or orange LEDs for the WAN port,
+	# see the LED setting for wndr3700:green:wan in /etc/config/system.
+	#
+	# See the key above for switch port 1 for the meaning of the
+	# 'led' setting below.
+	uci set network.@switch_port[-1].led='2'
+	;;
+
+*)
+	ucidef_set_interfaces_lan_wan "eth0" "eth1"
+	;;
+esac
+
+uci commit network
+
+exit 0
diff --git a/etc/uci-defaults/03_delos-wireless b/etc/uci-defaults/03_delos-wireless
new file mode 100644
index 0000000..63c5d3c
--- /dev/null
+++ b/etc/uci-defaults/03_delos-wireless
@@ -0,0 +1,60 @@
+#!/bin/sh
+#
+# Copyright (C) 2015-2016 devolo AG
+#
+
+[ -f /etc/customization.sh ] && . /etc/customization.sh
+
+# if basic configuration was already applied, exit
+[ "$(uci -q get delos.uci_defaults.wireless)" = "" ] || exit 0
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+
+. /lib/functions.sh
+. /lib/delos-functions.sh
+
+board=$(${PLATFORM}_board_name)
+
+handle_wifi_device() {
+	# set country
+	uci_set wireless "$1" country "$2"
+}
+
+handle_wifi_iface() {
+	# set default SSID
+	uci_set wireless "$1" ssid "$2"
+	# set default WPA key (Security ID w/o '-')
+	uci_set wireless "$1" key "$3"
+}
+
+get_baptization() {
+	COUNTRY=$(uci_get_state delos baptization WiFiCountryCode)
+	DPWD=$(uci_get_state delos-private baptization DlanSecurityID)
+	SSID=$(dvl_make_default_ssid main)
+}
+
+set_wireless_config() {
+	get_baptization
+	config_load wireless
+	config_foreach handle_wifi_device wifi-device "${COUNTRY:-DE}"
+	if [ -n "$SSID" -a -n "$DPWD" ]; then
+		config_foreach handle_wifi_iface wifi-iface "$SSID" "${DPWD//-}"
+	else
+		logger "delos (wireless): No baptization available"
+	fi
+	uci_commit wireless
+
+	# set basic config done flag
+	uci set delos.uci_defaults.wireless=1
+	uci commit delos
+}
+
+set_wireless_config
+
+exit 0
diff --git a/etc/uci-defaults/03_network-switchX-migration b/etc/uci-defaults/03_network-switchX-migration
new file mode 100644
index 0000000..aa0e1b4
--- /dev/null
+++ b/etc/uci-defaults/03_network-switchX-migration
@@ -0,0 +1,110 @@
+#!/bin/sh
+#
+# Copyright (C) 2013 OpenWrt.org
+#
+
+SWITCH_NAME_CHANGED=
+
+do_change_switch_name() {
+	local config="$1"
+	local option=$2
+	local oldname=$3
+	local newname=$4
+	local val
+
+	config_get val "$config" $option
+	[ "$val" != "$oldname" ] && return 0
+
+	uci_set network "$config" $option $newname
+	SWITCH_NAME_CHANGED=1
+
+	return 0
+}
+
+migrate_switch_name() {
+	local oldname=$1
+	local newname=$2
+
+	. /lib/functions.sh
+
+	config_load network
+
+	logger -t migrate-switchX "Updating switch names in network configuration"
+
+	config_foreach do_change_switch_name switch name $oldname $newname
+	config_foreach do_change_switch_name switch_vlan device $oldname $newname
+
+	[ "$SWITCH_NAME_CHANGED" = "1" ] && {
+		logger -t migrate-switchX "Switch names updated, saving network configuration"
+		uci commit network
+	}
+}
+
+. /lib/ar71xx.sh
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+dir-825-c1|\
+wzr-hp-g300nh2|\
+pb92|\
+ap113|\
+tl-wdr4300|\
+tl-wr1041n-v2|\
+wrt160nl|\
+ap121|\
+ap121-mini|\
+ap96|\
+airrouter|\
+dir-600-a1|\
+dir-615-c1|\
+dir-615-e1|\
+dir-615-e4|\
+ja76pf|\
+mr-12|\
+mr-16|\
+rb-750|\
+rb-751|\
+tew-632brp|\
+tew-712br|\
+tl-mr3220|\
+tl-mr3220-v2 |\
+tl-mr3420|\
+tl-wr741nd|\
+tl-wr741nd-v4|\
+tl-wr841n-v7|\
+whr-g301n|\
+whr-hp-g300n|\
+whr-hp-gn|\
+wzr-hp-ag300h|\
+wzr-hp-g450h|\
+ew-dorin|\
+ew-dorin-router)
+	migrate_switch_name "eth0" "switch0"
+	;;
+
+el-m150|\
+rb-450)
+	migrate_switch_name "eth1" "switch0"
+	;;
+
+db120 |\
+rb-2011l | \
+rb-2011uas-2hnd)
+	migrate_switch_name "eth0" "switch0"
+	migrate_switch_name "eth1" "switch1"
+	;;
+
+dir-825-b1|\
+tew-673gru|\
+nbg460n_550n_550nh)
+	migrate_switch_name "rtl8366s" "switch0"
+	;;
+
+tl-wr1043nd)
+	migrate_switch_name "rtl8366rb" "switch0"
+	;;
+
+esac
+
+exit 0
diff --git a/etc/uci-defaults/03_network-vlan-migration b/etc/uci-defaults/03_network-vlan-migration
new file mode 100644
index 0000000..259d240
--- /dev/null
+++ b/etc/uci-defaults/03_network-vlan-migration
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+
+dev="$(uci -q get network.@switch_vlan[0].device)"
+vlan="$(uci -q get network.@switch_vlan[0].vlan)"
+
+if [ "$dev" = "rtl8366s" ] && [ "$vlan" = 0 ]; then
+	logger -t vlan-migration "VLAN 0 is invalid for RTL8366s, changing to 1"
+	uci set network.@switch_vlan[0].vlan=1
+	uci commit network
+fi
diff --git a/etc/uci-defaults/04_delos-guest-wifi b/etc/uci-defaults/04_delos-guest-wifi
new file mode 100644
index 0000000..3413ebf
--- /dev/null
+++ b/etc/uci-defaults/04_delos-guest-wifi
@@ -0,0 +1,94 @@
+#!/bin/sh
+#
+# Copyright (C) 2017 devolo AG
+#
+
+[ -f /etc/customization.sh ] && . /etc/customization.sh
+
+. /lib/functions.sh
+. /lib/delos-functions.sh
+
+check_guest_wifi_set() {
+	local config="$1"
+	config_get_bool dvl_guest "$config" dvl_guest 0
+	[ "$dvl_guest" == "1" ] && exit 0
+}
+
+board=
+if [ -e /lib/ar71xx.sh ]; then
+        . /lib/ar71xx.sh
+	board=$(ar71xx_board_name)
+elif [ -e /lib/ipq806x.sh ];then
+	. /lib/ipq806x.sh
+	board=$(ipq806x_board_name)
+fi
+
+# Check if guest wifi already set
+config_load wireless
+config_foreach check_guest_wifi_set wifi-iface
+
+SSID=$(dvl_make_default_ssid guest)
+DPWD=$(uci_get_state delos-private baptization DlanSecurityID)
+KEY=${DPWD//-}
+
+
+add_guest_wifi () {
+	uci add
+}
+
+WIFI0=$(cat <<EOF
+config wifi-iface
+	option device 'wifi0'
+	option network 'lan'
+	option mode 'ap'
+	option ssid '${SSID}'
+	option encryption 'psk2'
+	option key '${KEY:0:8}'
+	option dvl_guest '1'
+	option disabled '1'
+	option rrm '1'
+	option wnm '1'
+	option ieee80211r '0'
+EOF
+)
+
+WIFI1=$(cat <<EOF
+config wifi-iface
+	option device 'wifi1'
+	option network 'lan'
+	option mode 'ap'
+	option ssid '${SSID}'
+	option encryption 'psk2'
+	option key '${KEY:0:8}'
+	option dvl_guest '1'
+	option disabled '1'
+	option rrm '1'
+	option wnm '1'
+	option ieee80211r '0'
+EOF
+)
+
+case "$board" in
+dvl-1750c |\
+dlan-1000-ac |\
+dlan2-2400-ac |\
+dlan-pro-1200-ac |\
+ew7479cap | \
+ap-dk07.1-c1 | \
+ap151)
+	cat >>/etc/config/wireless <<EOF
+$WIFI0
+
+$WIFI1
+EOF
+	;;
+
+dlan-550-wifi |\
+dlan-pro-1200-n)
+	cat >>/etc/config/wireless <<EOF
+$WIFI0
+EOF
+	;;
+esac
+
+exit 0
diff --git a/etc/uci-defaults/04_delos-guest-wifi-switchoff b/etc/uci-defaults/04_delos-guest-wifi-switchoff
new file mode 100644
index 0000000..001435a
--- /dev/null
+++ b/etc/uci-defaults/04_delos-guest-wifi-switchoff
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+uci set wireless.guest_wifi='guest_wifi'
+uci set wireless.guest_wifi.auto_switch_off='0'
+uci set wireless.guest_wifi.interval='00:30'
+exit 0
diff --git a/etc/uci-defaults/04_delos-guest-wifi-timeout b/etc/uci-defaults/04_delos-guest-wifi-timeout
new file mode 100644
index 0000000..4b25f2e
--- /dev/null
+++ b/etc/uci-defaults/04_delos-guest-wifi-timeout
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+# Check if guest wifi already set
+config_load wireless
+
+config_get STARTTIME guest_wifi starttime
+
+[ -n "$STARTTIME" ] && {
+	/usr/sbin/wifi_guest.sh stop 0
+}
+
+exit 1
diff --git a/etc/uci-defaults/04_delos-son b/etc/uci-defaults/04_delos-son
new file mode 100644
index 0000000..75c65ee
--- /dev/null
+++ b/etc/uci-defaults/04_delos-son
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Copyright (C) 2015-2016 devolo AG
+#
+
+if [ -f /lib/ar71xx.sh ]; then
+	PLATFORM=ar71xx
+	. /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+	PLATFORM=ipq806x
+	. /lib/ipq806x.sh
+fi
+
+. /lib/functions.sh
+
+board=$(${PLATFORM}_board_name)
+
+
+set_son_config() {
+	# set default configuration for hyd
+	case "$board" in
+		dlan-pro-1200-ac|\
+		dlan-pro-1200-n)
+			uci set hyd.@Vlanid[0].ifname='eth0.1'
+			uci set hyd.@Vlanid[1].ifname='eth0.2'
+			uci set hyd.PathChPlc.HostPLCInterfaceSpeed='1000'
+			;;
+		dlan-550-wifi|\
+		dlan-1000-ac)
+			uci set hyd.@Vlanid[0].ifname='eth0'
+			uci set hyd.@Vlanid[1].ifname='eth1'
+			uci set hyd.PathChPlc.HostPLCInterfaceSpeed='100'
+			;;
+	esac
+	uci set hyd.PathChWlan.MaxMediumUtilization_W2=0
+	uci set hyd.PathChWlan.MaxMediumUtilizationForLC_W2=0
+	uci set hyd.PathChWlan.MaxMediumUtilization_W5=99
+	uci set hyd.PathChWlan.MaxMediumUtilizationForLC_W5=99
+	uci set hyd.Topology.PERIODIC_QUERY_INTERVAL=15
+	uci set hyd.Topology.ENABLE_NOTIFICATION_UNICAST=1
+	uci delete hyd.IEEE1905Settings.AvoidDupRenew
+	uci delete hyd.IEEE1905Settings.AvoidDupTopologyNotification
+	uci commit hyd
+
+	uci set repacd.WiFiLink.DaisyChain=1
+	uci set repacd.repacd.DefaultREMode=son
+	uci commit repacd
+}
+
+set_son_config
+
+exit 0
diff --git a/etc/uci-defaults/04_delos-wifi-son b/etc/uci-defaults/04_delos-wifi-son
new file mode 100644
index 0000000..4fc483b
--- /dev/null
+++ b/etc/uci-defaults/04_delos-wifi-son
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Copyright (C) 2015-2016 devolo AG
+#
+
+if [ -f /lib/ar71xx.sh ]; then
+	PLATFORM=ar71xx
+	. /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+	PLATFORM=ipq806x
+	. /lib/ipq806x.sh
+fi
+
+. /lib/functions.sh
+
+board=$(${PLATFORM}_board_name)
+
+
+set_wifi_son_config() {
+	uci set wireless.son='son'
+	uci set wireless.son.enabled='1'
+	uci set wireless.son.airtimefairness='1'
+	case "$board" in
+		dlan-pro-1200-ac|\
+		dlan-1000-ac)
+			uci set wireless.son.bandsteering='1'
+			;;
+		dlan-pro-1200-n|\
+		dlan-550-wifi)
+			uci set wireless.son.bandsteering='0'
+			;;
+	esac
+	uci set wireless.son.ieee80211k='1'
+	uci set wireless.son.ieee80211v='1'
+	uci set wireless.son.ieee80211r='0'
+	uci commit wireless
+}
+
+set_wifi_son_config
+
+exit 0
diff --git a/etc/uci-defaults/04_delos_webui b/etc/uci-defaults/04_delos_webui
new file mode 100644
index 0000000..4c040d7
--- /dev/null
+++ b/etc/uci-defaults/04_delos_webui
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+
+prepare_webui_licenses() {
+    local license_base=/www/app/shared
+
+    # symlink to the licenses directory where delos-webui expects it
+    [ -d /www/licenses ] && [ -e /www/app/components/status/licenses ] && {
+        ln -s /www/licenses /www/app/shared
+    }
+}
+
+prepare_webui_licenses
+
+exit 0
diff --git a/etc/uci-defaults/04_led_migration b/etc/uci-defaults/04_led_migration
new file mode 100644
index 0000000..d578f59
--- /dev/null
+++ b/etc/uci-defaults/04_led_migration
@@ -0,0 +1,90 @@
+#!/bin/sh
+#
+# Copyright (C) 2013 OpenWrt.org
+#
+
+LED_OPTIONS_CHANGED=0
+
+. /lib/functions.sh
+
+do_led_update_sysfs()
+{
+	local cfg=$1; shift
+	local tuples="$@"
+	local sysfs
+	local name
+
+	config_get sysfs $cfg sysfs
+	config_get name $cfg name
+
+	[ -z "$sysfs" ] && return
+
+	for tuple in $tuples; do
+		local old=${tuple%=*}
+		local new=${tuple#*=}
+		local new_sysfs
+
+		new_sysfs=$(echo ${sysfs} | sed "s/${old}/${new}/")
+
+		[ "$new_sysfs" = "$sysfs" ] && continue
+
+		uci set system.${cfg}.sysfs="${new_sysfs}"
+		LED_OPTIONS_CHANGED=1
+
+		logger -t led-migration "sysfs option of LED \"${name}\" updated to ${new_sysfs}"
+	done;
+}
+
+migrate_leds()
+{
+	config_load system
+	config_foreach do_led_update_sysfs led "$@"
+}
+
+. /lib/ar71xx.sh
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+dhp-1565-a1|\
+dir-825-c1|\
+dir-835-a1)
+	migrate_leds ":orange:=:amber:" ":wifi_bgn=:wlan2g"
+	;;
+
+wndap360)
+	migrate_leds "wndap360:=netgear:"
+	;;
+
+wndr3700)
+	migrate_leds "wndr3700:=netgear:"
+	;;
+
+wndr3700v4 | \
+wndr4300)
+	migrate_leds ":orange:=:amber:"
+	;;
+
+wnr2000)
+	migrate_leds "wnr2000:=netgear:"
+	;;
+
+wnr2200)
+	migrate_leds "wnr2200:=netgear:"
+	;;
+
+wnr612-v2)
+	migrate_leds "wnr612v2:=netgear:"
+	;;
+
+wnr1000-v2)
+	migrate_leds "wnr1000v2:=netgear:"
+	;;
+
+*)
+	;;
+esac
+
+[ "$LED_OPTIONS_CHANGED" = "1" ] && uci commit system
+
+exit 0
diff --git a/etc/uci-defaults/09_fix-seama-header b/etc/uci-defaults/09_fix-seama-header
new file mode 100644
index 0000000..000b773
--- /dev/null
+++ b/etc/uci-defaults/09_fix-seama-header
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# Copyright (C) 2013 OpenWrt.org
+#
+
+. /lib/ar71xx.sh
+
+fix_seama_header() {
+	local part=$1
+
+	mtd fixseama $part
+}
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+mynet-n600 | \
+mynet-n750)
+	fix_seama_header kernel
+	;;
+esac
diff --git a/etc/uci-defaults/09_fix-trx-header b/etc/uci-defaults/09_fix-trx-header
new file mode 100644
index 0000000..1bfd525
--- /dev/null
+++ b/etc/uci-defaults/09_fix-trx-header
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+
+. /lib/ar71xx.sh
+
+board=$(ar71xx_board_name)
+
+fixtrx() {
+	mtd -o 32 fixtrx firmware
+}
+
+case "$board" in
+mynet-rext |\
+wrt160nl)
+	fixtrx
+	;;
+esac
diff --git a/etc/uci-defaults/10_delos-populate-bootenv b/etc/uci-defaults/10_delos-populate-bootenv
new file mode 100644
index 0000000..e9c52ff
--- /dev/null
+++ b/etc/uci-defaults/10_delos-populate-bootenv
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+# Detect empty bootenv partition and populate it with default values.
+# This is necessary for fw_setenv to work properly, delos does not know the correct default bootenv otherwise.
+# (only zuse, turing, hamilton, auckland, hamming - all other devices should have a correct bootenv in the flash image)
+
+function get_baptization_config()
+{
+    echo "$(baptization.config -k $1 | cut -d= -f2)"
+}
+
+function set_bootenv()
+{
+    fw_setenv "$1" "$2"
+}
+
+DEVICETYPE="$(get_baptization_config DeviceType)"
+
+[ "$DEVICETYPE" = "zuse" ] || [ "$DEVICETYPE" = "turing" ] || [ "$DEVICETYPE" = "hamilton" ] || [ "$DEVICETYPE" = "auckland" ] || [ "$DEVICETYPE" = "hamming" ] || exit 0
+
+[ -n "$(fw_printenv 2>&1 | grep '^Warning: Bad CRC')" ] || exit 0
+
+cat <<EOF | fw_setenv -s -
+
+bootargs            console=ttyS0,115200 root=/dev/mtdblock5 rootfstype=squashfs init=/sbin/init
+bootcmd             bootm 0x9f070000
+bootcmd_flash       bootm 0x9f070000
+bootcmd_tftp        tftpboot 0x82000000 initRamfs; bootm 0x82000000
+bootdelay           1
+baudrate            115200
+ethaddr             0x00:0xaa:0xbb:0xcc:0xdd:0xee
+ipaddr              192.168.0.249
+serverip            192.168.0.100
+stdin               serial
+stdout              serial
+stderr              serial
+ethact              eth0
+
+EOF
+
+exit 0
diff --git a/etc/uci-defaults/10_migrate-shadow b/etc/uci-defaults/10_migrate-shadow
new file mode 100644
index 0000000..a354844
--- /dev/null
+++ b/etc/uci-defaults/10_migrate-shadow
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+ppwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/passwd)"
+spwd="$(sed -ne '/^root:/s/^root:\([^:]*\):.*$/\1/p' /etc/shadow)"
+
+if [ -n "${ppwd#[\!x]}" ] && [ -z "${spwd#[\!x]}" ]; then
+	logger -t migrate-shadow "Moving root password hash into shadow database"
+	sed -i -e "s:^root\:[^\:]*\::root\:x\::"     /etc/passwd
+	sed -i -e "s:^root\:[^\:]*\::root\:$ppwd\::" /etc/shadow
+fi
+
+exit 0
diff --git a/etc/uci-defaults/11_migrate-sysctl b/etc/uci-defaults/11_migrate-sysctl
new file mode 100644
index 0000000..464e275
--- /dev/null
+++ b/etc/uci-defaults/11_migrate-sysctl
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+if [ ! -f "/rom/etc/sysctl.conf" ] || cmp -s "/rom/etc/sysctl.conf" "/etc/sysctl.conf"; then
+	exit 0
+fi
+
+fingerprint="$(md5sum /etc/sysctl.conf)"
+fingerprint="${fingerprint%% *}"
+
+if [ "$fingerprint" = "1b05ebb41f72cb84e5510573cd4aca26" ] || \
+   [ "$fingerprint" = "62deb895be1a7f496040187b7c930e4e" ]; then
+	logger -t migrate-sysctl "Updating sysctl.conf to use current defaults"
+	cp "/rom/etc/sysctl.conf" "/etc/sysctl.conf"
+fi
+
+exit 0
diff --git a/etc/uci-defaults/12_network-generate-ula b/etc/uci-defaults/12_network-generate-ula
new file mode 100644
index 0000000..8871427
--- /dev/null
+++ b/etc/uci-defaults/12_network-generate-ula
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+[ "$(uci -q get network.globals.ula_prefix)" != "auto" ] && exit 0
+
+r1=$(dd if=/dev/urandom bs=1 count=1 |hexdump -e '1/1 "%02x"')
+r2=$(dd if=/dev/urandom bs=2 count=1 |hexdump -e '2/1 "%02x"')
+r3=$(dd if=/dev/urandom bs=2 count=1 |hexdump -e '2/1 "%02x"')
+
+uci -q batch <<-EOF >/dev/null
+	set network.globals.ula_prefix=fd$r1:$r2:$r3::/48
+	commit network
+EOF
+
+exit 0
+
diff --git a/etc/uci-defaults/20_migrate-feeds b/etc/uci-defaults/20_migrate-feeds
new file mode 100755
index 0000000..38cc57c
--- /dev/null
+++ b/etc/uci-defaults/20_migrate-feeds
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+[ -f /etc/opkg.conf ] && grep -q "src\/" /etc/opkg.conf || exit 0
+
+echo -e "# Old feeds from previous image\n# Uncomment to reenable\n" >> /etc/opkg/customfeeds.conf
+sed -n "s/.*\(src\/.*\)/# \1/p" /etc/opkg.conf >> /etc/opkg/customfeeds.conf
+sed -i "/.*src\/.*/d" /etc/opkg.conf
+
+exit 0
diff --git a/etc/uci-defaults/30_uboot-envtools b/etc/uci-defaults/30_uboot-envtools
new file mode 100644
index 0000000..a71121d
--- /dev/null
+++ b/etc/uci-defaults/30_uboot-envtools
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# Copyright (C) 2011-2014 OpenWrt.org
+#
+
+[ -e /etc/config/ubootenv ] && exit 0
+
+touch /etc/config/ubootenv
+
+. /lib/ar71xx.sh
+. /lib/uboot-envtools.sh
+. /lib/functions.sh
+
+board=$(ar71xx_board_name)
+
+case "$board" in
+alfa-ap120c | \
+all0258n | \
+ap135 |\
+apjet01 |\
+ap137 |\
+ap143 |\
+ap147 |\
+ap151 |\
+ap152 |\
+cap4200ag | \
+carambola2 | \
+cus531 | \
+cus531-dual | \
+cus531-nand | \
+cus531mp3 | \
+cus531mp3-dual | \
+cus531mp3-nand | \
+eap300v2 | \
+hornet-ub | \
+hornet-ub-x2 | \
+mr1750 | \
+mr1750v2 | \
+mr600 | \
+mr600v2 | \
+mr900 | \
+mr900v2 | \
+nbg6716 | \
+om5p-an | \
+om5p-ac | \
+om5p-acv2 | \
+om5p | \
+tube2h | \
+wndr3700 | \
+dlan-1000-ac|\
+dlan-pro-1200-ac|\
+dlan-pro-1200-n|\
+dlan-550-wifi)
+	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x10000" "0x10000"
+	;;
+alfa-ap96 | \
+all0315n | \
+om2p | \
+om2pv2 | \
+om2p-hs | \
+om2p-hsv2 | \
+om2p-hsv3 | \
+om2p-lc)
+	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x40000"
+	;;
+wzr-hp-ag300h)
+	ubootenv_add_uci_config "/dev/mtd3" "0x0" "0x10000" "0x10000"
+	;;
+qihoo-c301)
+	ubootenv_add_uci_config "/dev/mtd9" "0x0" "0x10000" "0x10000"
+	;;
+esac
+
+config_load ubootenv
+config_foreach ubootenv_add_app_config ubootenv
+
+exit 0
diff --git a/etc/uci-defaults/90_delos-lh-migration b/etc/uci-defaults/90_delos-lh-migration
new file mode 100755
index 0000000..04818df
--- /dev/null
+++ b/etc/uci-defaults/90_delos-lh-migration
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+. /usr/lib/lh-migration.sh
+
+# Only do the migration once, no matter the outcome
+[ "$(fw_printenv LHMigration | cut -d= -f2)" != "1" ] || exit 0
+fw_setenv LHMigration 1
+
+if [ "$(lh_config_hostname)" = "delos" ]; then
+    logger "Skipping LH migration"
+    exit 0
+fi
+
+# Check that this is a supported LH version for migration
+logger "Found config version $(lh_config_version)"
+logger "Starting LH migration"
+
+LIBDIR=/usr/lib/lh-migration
+
+$LIBDIR/system.sh
+$LIBDIR/network.sh
+
+case "$(lh_config_deviceType)" in
+    "hamilton")
+        logger "Migrating for hamilton"
+        $LIBDIR/wireless.sh single
+        ;;
+    "zuse")
+        logger "Migrating for zuse"
+        $LIBDIR/wireless.sh dual
+        ;;
+    "auckland")
+        logger "Migrating for auckland"
+        $LIBDIR/wireless.sh single
+        ;;
+esac
+
+$LIBDIR/wifi_schedule.sh
+$LIBDIR/wifi_parental.sh
+$LIBDIR/plc.sh
+
+logger "Finished LH migration"
+exit 0
diff --git a/etc/uci-defaults/99-miniupnpd b/etc/uci-defaults/99-miniupnpd
new file mode 100644
index 0000000..7271389
--- /dev/null
+++ b/etc/uci-defaults/99-miniupnpd
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+uci -q batch <<-EOT
+	delete firewall.miniupnpd
+	set firewall.miniupnpd=include
+	set firewall.miniupnpd.type=script
+	set firewall.miniupnpd.path=/usr/share/miniupnpd/firewall.include
+	set firewall.miniupnpd.family=any
+	set firewall.miniupnpd.reload=1
+	commit firewall
+EOT
+
+exit 0
diff --git a/etc/uci-defaults/99_delos_migration b/etc/uci-defaults/99_delos_migration
new file mode 100755
index 0000000..89b7f3b
--- /dev/null
+++ b/etc/uci-defaults/99_delos_migration
@@ -0,0 +1,243 @@
+#!/bin/sh
+#
+# Copyright (C) 2016 devolo AG
+#
+
+#implement config migration mechanism
+
+. $MIGTEST/lib/migration/migration.sh
+
+getCurrentFwVersion() {
+    local version="$($UCI_TOOL get delos.delos.version 2>&1)"
+    if [ -n "$version" -a -z "$(echo $version | grep "uci")" ];then
+        echo "$version"
+        return
+    fi
+    echo "version_not_found"
+}
+
+
+evaluateMigration() {
+    local version=$(getCurrentFwVersion)
+    local path=""
+    if [ "$version" != "version_not_found" ]; then 
+        if [ "$version" != "$CURRENT_CONFIG_VERSION" ]; then
+            path="$(evaluatePath "$version" "$CURRENT_CONFIG_VERSION")"
+            updateMigrationScripts $path
+        else
+            $LOG_TOOL "Migration: no migration necessary"
+            return
+        fi
+    else
+        version="2.0.0"
+        path="$(evaluatePath "$version" "$CURRENT_CONFIG_VERSION")"
+        updateMigrationScripts $path
+    fi
+
+    if [ -z "$path" ]; then
+        echo "migration_not_possible"
+        $LOG_TOOL "Migration: could not determine up/downgrade path"
+    else
+        $LOG_TOOL "Migration: migrate from $version to $CURRENT_CONFIG_VERSION" 
+        echo "$path"
+    fi
+}
+
+doMigration() {
+    local path=$(evaluateMigration)
+    if [ -n "$path" -a "$path" != "migration_not_possible" ]; then
+        for step in $path; do
+            local scripts=$(find $MIG_BASE/$step -maxdepth 1 -type f -exec basename {} \; |
+                        grep -v "$step")
+            for script in $scripts; do
+                $LOG_TOOL "  call $step/$script"
+                $MIG_BASE/$step/$script > /dev/null
+                local retCode=$?
+                if [ $retCode -ne 0 ]; then
+                    echo "migration_not_possible"
+                    $LOG_TOOL "Migration: error during migration"
+                fi
+            done
+        done
+        migrateVersion
+    else
+        echo "$path"
+    fi
+    forceCurrentMigrationScripts
+}
+
+migrateVersion() {
+    local version=$(getCurrentFwVersion)
+    if [ "$version" = "version_not_found" ]; then
+        $UCI_TOOL set delos.delos=configuration #creates config configuration 'delos'
+    fi
+    $UCI_TOOL set delos.delos.version=$CURRENT_CONFIG_VERSION
+    $UCI_TOOL commit
+}
+
+findPath() {
+    local dest="$1"
+    local path="$2"
+
+    while true; do
+        local newPath=$(getNewPath "$path")
+        local unknownElements=""
+        for newElem in $newPath; do
+            if [ "$(extractTo "$newElem")" = "$dest" ]; then
+                cleanupList "$path $newElem"
+                return
+            else
+                if ! isCrossExchangedInList "$newElem" "$path"; then
+                    if ! isDuplicate "$newElem" "$path"; then
+                        unknownElements="$unknownElements $newElem"
+                    fi
+                fi
+            fi
+        done
+        if [ -z "$unknownElements" ]; then
+            cleanupList "$path"
+            return
+        fi
+
+        #findPath "$dest" "$path $unknownElements"
+	# tail recursion -> loop
+        path="$path $unknownElements"
+    done
+}
+
+
+cleanupList() {
+    echo "$1" | sed -e 's/  */ /g'
+}
+
+isDuplicate() {
+    local elem="$1"
+    local list="$2"
+    for item in $list; do
+        if [ "$item" = "$elem" ]; then
+            return 0
+	fi
+    done
+    return 1
+}
+
+isCrossExchange() {
+    local elem1="$1"
+    local elem2="$2"
+    local ef1="$(extractFrom "$elem1")"
+    local et1="$(extractTo "$elem1")"
+    local ef2="$(extractFrom "$elem2")"
+    local et2="$(extractTo "$elem2")"
+
+    if [ $ef1 = $et2 ]; then
+        if [ $ef2 = $et1 ]; then
+            return 0
+        fi
+    fi
+    return 1
+}
+
+isCrossExchangedInList() {
+    local elem="$1"
+    local list="$2"
+    for item in $list; do
+        if isCrossExchange "$elem" "$item"; then
+            return 0
+        fi
+    done
+    return 1
+}
+
+extractFrom() {
+    echo "${1%%To*}"
+}
+
+extractTo() {
+    echo "${1#*To}"
+}
+
+getTo() {
+    local to=$1
+    for mig in $MIG_DIRS; do
+        local tov=$(extractTo $mig)
+        if [ "$fromv" = "$to" ]; then
+            found="$found $mig"
+        fi
+    done
+    echo $found
+}
+    
+getFrom() {
+    local from=$1
+    for mig in $MIG_DIRS; do
+        local fromv=$(extractFrom $mig)
+        if [ "$fromv" = "$from" ]; then
+            found="$found $mig"
+        fi
+    done
+    echo $found
+}
+
+getNewPath() {
+    local search="$1"
+    local found=""
+    for item in $search; do
+        for mig in $MIG_DIRS; do
+            if [ "$(extractFrom $mig)" = "$(extractTo $item)" ]; then
+                found="$found $mig"
+            fi
+        done
+    done
+    echo $found
+}
+
+evaluatePath() {
+    local from="$1"
+    local to="$2"
+    local simple="$from""To""$to"
+    if [ "$from" = "$to" ]; then
+        echo ""
+        return
+    elif [ -n "$(echo "$MIG_DIRS" | fgrep "$simple")" ]; then
+        echo $simple
+        return
+    else
+        local firstpath=$(getFrom $from)
+
+        #assume upgrade first, assume related to ascending order
+        a=$(echo "$firstpath" | awk -F' ' '{printf $2}')
+        path1=$(findPath $to "$a")
+        targetPath1=$(extractTo "$(echo $path1 | awk -F' ' '{print $NF}')");
+        if [ "$targetPath1" = "$to" ]; then
+            echo $path1
+            return
+        fi
+ 
+        #downgrade
+        b=$(echo "$firstpath" | awk -F' ' '{printf $1}')
+        path2=$(findPath $to "$b")
+        targetPath2=$(extractTo "$(echo $path2 | awk -F' ' '{print $NF}')");
+        if [ "$targetPath2" = "$to" ]; then
+            echo $path2
+        fi
+    fi
+}
+
+start() {
+    case "$BOARD" in
+    dlan-*|\
+    dvl-*|\
+    ew-*)
+        doMigration
+        ;;
+    esac
+
+    if [ -z "$MIGTEST" ];then
+        # keep this file for the next boot
+        exit 1
+    fi
+}
+
+if [ -z "$MIGTEST" ];then
+   start
+fi
diff --git a/etc/udhcpc.user b/etc/udhcpc.user
new file mode 100644
index 0000000..fe4e814
--- /dev/null
+++ b/etc/udhcpc.user
@@ -0,0 +1,42 @@
+#
+# Copyright (C) 2018 devolo AG
+#
+
+# DHCP event happened. it could have added/deleted the default route to the gateway
+# let's look it up and trigger rewrite of guest wifi filter tables when it changed
+
+# get the first default gateway IP address
+GW=$(ip -4 route show default)
+GW=$(echo ${GW#*via} | cut -d ' ' -f 1)
+
+if [ -n "$GW" ]; then
+(
+	# subshell for new trap context
+
+	ping -4 -q -c 1 -w 1 $GW >/dev/null
+	MAC=$(ip -4 neigh show to $GW)
+	MAC=$(echo ${MAC#*lladdr} | cut -d ' ' -f 1)
+
+	TMP=
+	trap '[ -n "$TMP" ] && rm -f "$TMP"; TMP=' EXIT HUP INT QUIT TERM
+	TMP=$(mktemp)
+	cat >$TMP <<-EOF
+	GW4_IP=$GW
+	GW4_MAC=$MAC
+	EOF
+	# if changed:
+	cmp -s /tmp/guestwifi-ipv4 $TMP || {
+		mv $TMP /tmp/guestwifi-ipv4
+		TMP=
+		(
+			. /lib/wifi/delos-wifi/20_delos-guest-wifi
+			set_delos_guestwifi
+		)
+	}
+) else
+	# if removed:
+	rm /tmp/guestwifi-ipv4 2>/dev/null && {
+		. /lib/wifi/delos-wifi/20_delos-guest-wifi
+		set_delos_guestwifi
+	}
+fi
diff --git a/etc/wsplcd/map/templates/scheme-a.conf b/etc/wsplcd/map/templates/scheme-a.conf
new file mode 100644
index 0000000..077d70d
--- /dev/null
+++ b/etc/wsplcd/map/templates/scheme-a.conf
@@ -0,0 +1,6 @@
+SSID: FH,__FH_SSID_REPLACE__,0x0020,0x0008,__FH_KEY_REPLACE__,0,1
+SSID: BH,__BH_SSID_REPLACE__,0x0020,0x0008,__BH_KEY_REPLACE__,1,0
+Generic-Policy: 2,115,120,121,127,FH,BH
+Generic-Policy: 1,80,89,FH,BH
+Generic-Policy: 1,115,120,FH,BH
+Generic-Policy: 1,121,127,BH
diff --git a/etc/wsplcd/map/templates/scheme-b.conf b/etc/wsplcd/map/templates/scheme-b.conf
new file mode 100644
index 0000000..58fbfc8
--- /dev/null
+++ b/etc/wsplcd/map/templates/scheme-b.conf
@@ -0,0 +1,6 @@
+SSID: FH,__FH_SSID_REPLACE__,0x0020,0x0008,__FH_KEY_REPLACE__,0,1
+SSID: BH,__BH_SSID_REPLACE__,0x0020,0x0008,__BH_KEY_REPLACE__,1,0
+Generic-Policy: 2,115,120,121,127,FH,BH
+Generic-Policy: 1,80,89,FH,BH
+Generic-Policy: 1,115,120,FH
+Generic-Policy: 1,121,127,BH
diff --git a/etc/wsplcd/map/templates/scheme-c.conf b/etc/wsplcd/map/templates/scheme-c.conf
new file mode 100644
index 0000000..be13581
--- /dev/null
+++ b/etc/wsplcd/map/templates/scheme-c.conf
@@ -0,0 +1,5 @@
+SSID: FHBH,__FHBH_SSID_REPLACE__,0x0020,0x0008,__FHBH_KEY_REPLACE__,1,1
+Generic-Policy: 2,115,120,121,127,FHBH
+Generic-Policy: 1,80,89,FHBH
+Generic-Policy: 1,115,120,FHBH
+Generic-Policy: 1,121,127,FHBH
diff --git a/lib/ar71xx.sh b/lib/ar71xx.sh
new file mode 100644
index 0000000..341815f
--- /dev/null
+++ b/lib/ar71xx.sh
@@ -0,0 +1,1095 @@
+#!/bin/sh
+#
+# Copyright (C) 2009-2011 OpenWrt.org
+#
+
+AR71XX_BOARD_NAME=
+AR71XX_MODEL=
+
+ar71xx_get_mtd_offset_size_format() {
+	local mtd="$1"
+	local offset="$2"
+	local size="$3"
+	local format="$4"
+	local dev
+
+	dev=$(find_mtd_part $mtd)
+	[ -z "$dev" ] && return
+
+	dd if=$dev bs=1 skip=$offset count=$size 2>/dev/null | hexdump -v -e "1/1 \"$format\""
+}
+
+ar71xx_get_mtd_part_magic() {
+	local mtd="$1"
+	ar71xx_get_mtd_offset_size_format "$mtd" 0 4 %02x
+}
+
+wndr3700_board_detect() {
+	local machine="$1"
+	local magic
+	local name
+
+	name="wndr3700"
+
+	magic="$(ar71xx_get_mtd_part_magic firmware)"
+	case $magic in
+	"33373030")
+		machine="NETGEAR WNDR3700"
+		;;
+	"33373031")
+		model="$(ar71xx_get_mtd_offset_size_format art 41 32 %c)"
+		# Use awk to remove everything unprintable
+		model_stripped="$(ar71xx_get_mtd_offset_size_format art 41 32 %c | LC_CTYPE=C awk -v 'FS=[^[:print:]]' '{print $1; exit}')"
+		case $model in
+		$'\xff'*)
+			if [ "${model:24:1}" = 'N' ]; then
+				machine="NETGEAR WNDRMAC"
+			else
+				machine="NETGEAR WNDR3700v2"
+			fi
+			;;
+		'29763654+16+64'*)
+			machine="NETGEAR ${model_stripped:14}"
+			;;
+		'29763654+16+128'*)
+			machine="NETGEAR ${model_stripped:15}"
+			;;
+		*)
+			# Unknown ID
+			machine="NETGEAR ${model_stripped}"
+		esac
+	esac
+
+	AR71XX_BOARD_NAME="$name"
+	AR71XX_MODEL="$machine"
+}
+
+cybertan_get_hw_magic() {
+	local part
+
+	part=$(find_mtd_part firmware)
+	[ -z "$part" ] && return 1
+
+	dd bs=8 count=1 skip=0 if=$part 2>/dev/null | hexdump -v -n 8 -e '1/1 "%02x"'
+}
+
+tplink_get_hwid() {
+	local part
+
+	part=$(find_mtd_part firmware)
+	[ -z "$part" ] && return 1
+
+	dd if=$part bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+tplink_get_mid() {
+	local part
+
+	part=$(find_mtd_part firmware)
+	[ -z "$part" ] && return 1
+
+	dd if=$part bs=4 count=1 skip=17 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+tplink_board_detect() {
+	local model="$1"
+	local hwid
+	local hwver
+
+	hwid=$(tplink_get_hwid)
+	mid=$(tplink_get_mid)
+	hwver=${hwid:6:2}
+	hwver="v${hwver#0}"
+
+	case "$hwid" in
+	"015000"*)
+		model="EasyLink EL-M150"
+		;;
+	"015300"*)
+		model="EasyLink EL-MINI"
+		;;
+	"044401"*)
+		model="ANTMINER-S1"
+		;;
+	"044403"*)
+		model="ANTMINER-S3"
+		;;
+	"120000"*)
+		model="MERCURY MAC1200R"
+		;;
+	"3C0001"*)
+		model="OOLITE"
+		;;
+	"3C0002"*)
+		model="MINIBOX_V1"
+		;;
+	"070301"*)
+		model="TP-Link TL-WR703N"
+		;;
+	"071000"*)
+		model="TP-Link TL-WR710N"
+		;;
+	"072001"*)
+		model="TP-Link TL-WR720N"
+		;;
+	"070100"*)
+		model="TP-Link TL-WA701N/ND"
+		;;
+	"073000"*)
+		model="TP-Link TL-WA730RE"
+		;;
+	"074000"*)
+		model="TP-Link TL-WR740N/ND"
+		;;
+	"074100"*)
+		model="TP-Link TL-WR741N/ND"
+		;;
+	"074300"*)
+		model="TP-Link TL-WR743N/ND"
+		;;
+	"075000"*)
+		model="TP-Link TL-WA750RE"
+		;;
+	"721000"*)
+		model="TP-Link TL-WA7210N"
+		;;
+	"751000"*)
+		model="TP-Link TL-WA7510N"
+		;;
+	"080100"*)
+		model="TP-Link TL-WA801N/ND"
+		;;
+	"083000"*)
+		model="TP-Link TL-WA830RE"
+
+		if [ "$hwver" = 'v10' ]; then
+			hwver='v1'
+		fi
+		;;
+	"084100"*)
+		model="TP-Link TL-WR841N/ND"
+		;;
+	"084200"*)
+		model="TP-Link TL-WR842N/ND"
+		;;
+	"084300"*)
+		model="TP-Link TL-WR843N/ND"
+		;;
+	"085000"*)
+		model="TP-Link TL-WA850RE"
+		;;
+	"086000"*)
+		model="TP-Link TL-WA860RE"
+		;;
+	"090100"*)
+		model="TP-Link TL-WA901N/ND"
+		;;
+	"094100"*)
+		if [ "$hwid" = "09410002" -a "$mid" = "00420001" ]; then
+			model="Rosewill RNX-N360RT"
+			hwver=""
+		else
+			model="TP-Link TL-WR941N/ND"
+		fi
+		;;
+	"104100"*)
+		model="TP-Link TL-WR1041N/ND"
+		;;
+	"104300"*)
+		model="TP-Link TL-WR1043N/ND"
+		;;
+	"254300"*)
+		model="TP-Link TL-WR2543N/ND"
+		;;
+	"001001"*)
+		model="TP-Link TL-MR10U"
+		;;
+	"001101"*)
+		model="TP-Link TL-MR11U"
+		;;
+	"001201"*)
+		model="TP-Link TL-MR12U"
+		;;
+	"001301"*)
+		model="TP-Link TL-MR13U"
+		;;
+	"302000"*)
+		model="TP-Link TL-MR3020"
+		;;
+	"304000"*)
+		model="TP-Link TL-MR3040"
+		;;
+	"322000"*)
+		model="TP-Link TL-MR3220"
+		;;
+	"342000"*)
+		model="TP-Link TL-MR3420"
+		;;
+	"350000"*)
+		model="TP-Link TL-WDR3500"
+		;;
+	"360000"*)
+		model="TP-Link TL-WDR3600"
+		;;
+	"430000"*)
+		model="TP-Link TL-WDR4300"
+		;;
+	"430080"*)
+		iw reg set IL
+		model="TP-Link TL-WDR4300 (IL)"
+		;;
+	"431000"*)
+		model="TP-Link TL-WDR4310"
+		;;
+	"49000002")
+		model="TP-Link TL-WDR4900"
+		;;
+	"453000"*)
+		model="MERCURY MW4530R"
+		;;
+	"934100"*)
+		model="NC-LINK SMART-300"
+		;;
+	"c50000"*)
+		model="TP-Link Archer C5"
+		;;
+	"750000"*|\
+	"c70000"*)
+		model="TP-Link Archer C7"
+		;;
+	*)
+		hwver=""
+		;;
+	esac
+
+	AR71XX_MODEL="$model $hwver"
+}
+
+tplink_pharos_get_model_string() {
+	local part
+	part=$(find_mtd_part 'product-info')
+	[ -z "$part" ] && return 1
+
+	# The returned string will end with \r\n, but we don't remove it here
+	# to simplify matching against it in the sysupgrade image check
+	dd if=$part bs=1 skip=4360 2>/dev/null | head -n 1
+}
+
+tplink_pharos_board_detect() {
+	local model_string="$(tplink_pharos_get_model_string | tr -d '\r')"
+	local oIFS="$IFS"; IFS=":"; set -- $model_string; IFS="$oIFS"
+	local model
+
+	case "$1" in
+	'CPE210(TP-LINK|UN|N300-2)')
+		model='TP-Link CPE210'
+		;;
+	'CPE220(TP-LINK|UN|N300-2)')
+		model='TP-Link CPE220'
+		;;
+	'CPE510(TP-LINK|UN|N300-5)')
+		model='TP-Link CPE510'
+		;;
+	'CPE520(TP-LINK|UN|N300-5)')
+		model='TP-Link CPE520'
+		;;
+	esac
+
+	[ -n "$model" ] && AR71XX_MODEL="$model v$2"
+}
+
+gl_inet_board_detect() {
+	local size="$(mtd_get_part_size 'firmware')"
+
+	case "$size" in
+	8192000)
+		AR71XX_MODEL='GL-iNet 6408A v1'
+		;;
+	16580608)
+		AR71XX_MODEL='GL-iNet 6416A v1'
+		;;
+	esac
+}
+
+ar71xx_board_detect() {
+	local machine
+	local name
+
+	machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)
+
+	case "$machine" in
+	*"Oolite V1.0")
+		name="oolite"
+		;;
+	*"AC1750DB")
+		name="f9k1115v2"
+		;;
+	*"AirGateway")
+		name="airgateway"
+		;;
+	*"AirRouter")
+		name="airrouter"
+		;;
+	*"ALFA Network AP120C")
+		name="alfa-ap120c"
+		;;
+	*"ALFA Network AP96")
+		name="alfa-ap96"
+		;;
+	*"ALFA Network N2/N5")
+		name="alfa-nx"
+		;;
+	*ALL0258N)
+		name="all0258n"
+		;;
+	*ALL0305)
+		name="all0305"
+		;;
+	*ALL0315N)
+		name="all0315n"
+		;;
+	*Antminer-S1)
+		name="antminer-s1"
+		;;
+	*Antminer-S3)
+		name="antminer-s3"
+		;;
+	*AP113)
+		name="ap113"
+		;;
+	*AP121)
+		name="ap121"
+		;;
+	*AP121-MINI)
+		name="ap121-mini"
+		;;
+	*"AP132 reference board")
+		name="ap132"
+		;;
+	*"AP136-010 reference board")
+		name="ap136-010"
+		;;
+	*"AP136-020 reference board")
+		name="ap136-020"
+		;;
+	*"AP137 reference board")
+		name="ap137"
+		;;
+	*"AP135-020 reference board")
+		name="ap135-020"
+		;;
+	*"APJET01 Board"|\
+	*"Qualcomm Atheros APJET01 Dual Board")
+		name="apjet01"
+		;;
+	*"QCA AP135 Board")
+		name="ap135"
+		;;
+	*"QCA AP137 Board")
+		name="ap137"
+		;;
+	*"AP143 reference board")
+		name="ap143"
+		;;
+	*"AP147-010 reference board")
+		name="ap147-010"
+		;;
+	*"QCA AP147 Board")
+		name="ap147"
+		;;
+	*"AP151 reference board")
+		name="ap151"
+		;;
+	*"QCA AP151 Board")
+		name="ap151"
+		;;
+	*"AP152 reference board"|\
+	*"QCA AP152 Dual Board")
+		name="ap152"
+		;;
+	*"QCA AP152 Board")
+		name="ap152"
+		;;
+	*AP81)
+		name="ap81"
+		;;
+	*AP83)
+		name="ap83"
+		;;
+	*"Archer C5")
+		name="archer-c5"
+		;;
+	*"Archer C7")
+		name="archer-c7"
+		;;
+	*"Atheros AP96")
+		name="ap96"
+		;;
+	*AW-NR580)
+		name="aw-nr580"
+		;;
+	*CAP4200AG)
+		name="cap4200ag"
+		;;
+	*"CPE210/220/510/520")
+		name="cpe510"
+		tplink_pharos_board_detect
+		;;
+	*"CUS531 reference board")
+		name="cus531"
+		;;
+	*"CUS531 dual reference board")
+		name="cus531-dual"
+		;;
+	*"CUS531 nand reference board")
+		name="cus531-nand"
+		;;
+	*"CUS531 MP3 reference board")
+		name="cus531mp3"
+		;;
+	*"CUS531 MP3 dual reference board")
+		name="cus531mp3-dual"
+		;;
+	*"CUS531 MP3 nand reference board")
+		name="cus531mp3-nand"
+		;;
+	*"DB120 reference board")
+		name="db120"
+		;;
+	*"CUS532K board")
+		name="cus532k"
+		;;
+	*"DGL-5500 rev. A1")
+		name="dgl-5500-a1"
+		;;
+	*"DHP-1565 rev. A1")
+		name="dhp-1565-a1"
+		;;
+	*"DIR-505 rev. A1")
+		name="dir-505-a1"
+		;;
+	*"DIR-600 rev. A1")
+		name="dir-600-a1"
+		;;
+	*"DIR-615 rev. E1")
+		name="dir-615-e1"
+		;;
+	*"DIR-615 rev. E4")
+		name="dir-615-e4"
+		;;
+	*"DIR-615 rev. I1")
+		name="dir-615-i1"
+		;;
+	*"DIR-825 rev. B1")
+		name="dir-825-b1"
+		;;
+	*"DIR-825 rev. C1")
+		name="dir-825-c1"
+		;;
+	*"DIR-835 rev. A1")
+		name="dir-835-a1"
+		;;
+	*"dLAN Hotspot")
+		name="dlan-hotspot"
+		;;
+	*"dLAN pro 500 Wireless+")
+		name="dlan-pro-500-wp"
+		;;
+	*"devolo dLAN 550 WiFi")
+		name="dlan-550-wifi"
+		;;
+	*"dLAN 1000+ WiFi ac")
+		name="dlan-1000-ac"
+		;;
+	*"dLAN pro 1200+ WiFi ac")
+		name="dlan-pro-1200-ac"
+		;;
+	*"dLAN pro 1200+ WiFi n")
+		name="dlan-pro-1200-n"
+		;;
+	*"devolo Home Control Central Unit")
+		name="devolo-home-control-cu"
+		;;
+	*"devolo WiFi pro 1200e")
+		name="dvl-1200e"
+		;;
+	*"devolo WiFi pro 1750e")
+		name="dvl-1750e"
+		;;
+	*"devolo WiFi pro 1200i")
+		name="dvl-1200i"
+		;;
+	*"devolo WiFi pro 1750i")
+		name="dvl-1750i"
+		;;
+	*"devolo WiFi pro 1750c")
+		name="dvl-1750c"
+		;;
+	*"devolo WiFi pro 1750x")
+		name="dvl-1750x"
+		;;
+	*"Dragino v2")
+		name="dragino2"
+		;;
+	*"DW33D")
+		name="dw33d"
+		;;
+	*"EAP300 v2")
+		name="eap300v2"
+		;;
+	*EAP7660D)
+		name="eap7660d"
+		;;
+	*EL-M150)
+		name="el-m150"
+		;;
+	*EL-MINI)
+		name="el-mini"
+		;;
+	*"GL-CONNECT INET v1")
+		name="gl-inet"
+		gl_inet_board_detect
+		;;
+	*"EnGenius EPG5000")
+		name="epg5000"
+		;;
+	*"EnGenius ESR1750")
+		name="esr1750"
+		;;
+	*"EnGenius ESR900")
+		name="esr900"
+		;;
+	*JA76PF)
+		name="ja76pf"
+		;;
+	*JA76PF2)
+		name="ja76pf2"
+		;;
+	*"Bullet M")
+		name="bullet-m"
+		;;
+	*"Loco M XW")
+		name="loco-m-xw"
+		;;
+	*"Nanostation M")
+		name="nanostation-m"
+		;;
+	*"Nanostation M XW")
+		name="nanostation-m-xw"
+		;;
+	*JWAP003)
+		name="jwap003"
+		;;
+	*"Hornet-UB")
+		local size
+		size=$(awk '/firmware/ { print $2 }' /proc/mtd)
+
+		if [ "x$size" = "x00790000" ]; then
+			name="hornet-ub"
+		fi
+
+		if [ "x$size" = "x00f90000" ]; then
+			name="hornet-ub-x2"
+		fi
+		;;
+	*LS-SR71)
+		name="ls-sr71"
+		;;
+	*"MAC1200R")
+		name="mc-mac1200r"
+		;;
+	*"MiniBox V1.0")
+		name="minibox-v1"
+		;;
+	*MR12)
+		name="mr12"
+		;;
+	*MR16)
+		name="mr16"
+		;;
+	*MR600v2)
+		name="mr600v2"
+		;;
+	*MR1750)
+		name="mr1750"
+		;;
+	*MR1750v2)
+		name="mr1750v2"
+		;;
+	*MR600)
+		name="mr600"
+		;;
+	*MR900)
+		name="mr900"
+		;;
+	*MR900v2)
+		name="mr900v2"
+		;;
+	*"My Net N600")
+		name="mynet-n600"
+		;;
+	*"My Net N750")
+		name="mynet-n750"
+		;;
+	*"WD My Net Wi-Fi Range Extender")
+		name="mynet-rext"
+		;;
+	*MZK-W04NU)
+		name="mzk-w04nu"
+		;;
+	*MZK-W300NH)
+		name="mzk-w300nh"
+		;;
+	*"NBG460N/550N/550NH")
+		name="nbg460n_550n_550nh"
+		;;
+	*"Zyxel NBG6716")
+		name="nbg6716"
+		;;
+	*OM2P)
+		name="om2p"
+		;;
+	*OM2Pv2)
+		name="om2pv2"
+		;;
+	*"OM2P HS")
+		name="om2p-hs"
+		;;
+	*"OM2P HSv2")
+		name="om2p-hsv2"
+		;;
+	*"OM2P HSv3")
+		name="om2p-hsv3"
+		;;
+	*"OM2P LC")
+		name="om2p-lc"
+		;;
+	*OM5P)
+		name="om5p"
+		;;
+	*"OM5P AN")
+		name="om5p-an"
+		;;
+	*"OM5P AC")
+		name="om5p-ac"
+		;;
+	*"OM5P ACv2")
+		name="om5p-acv2"
+		;;
+	*"Onion Omega")
+		name="onion-omega"
+		;;
+	*PB42)
+		name="pb42"
+		;;
+	*"PB44 reference board")
+		name="pb44"
+		;;
+	*PB92)
+		name="pb92"
+		;;
+	*"Qihoo 360 C301")
+		name="qihoo-c301"
+		;;
+	*"RouterBOARD 411/A/AH")
+		name="rb-411"
+		;;
+	*"RouterBOARD 411U")
+		name="rb-411u"
+		;;
+	*"RouterBOARD 433/AH")
+		name="rb-433"
+		;;
+	*"RouterBOARD 433UAH")
+		name="rb-433u"
+		;;
+	*"RouterBOARD 435G")
+		name="rb-435g"
+		;;
+	*"RouterBOARD 450")
+		name="rb-450"
+		;;
+	*"RouterBOARD 450G")
+		name="rb-450g"
+		;;
+	*"RouterBOARD 493/AH")
+		name="rb-493"
+		;;
+	*"RouterBOARD 493G")
+		name="rb-493g"
+		;;
+	*"RouterBOARD 750")
+		name="rb-750"
+		;;
+	*"RouterBOARD 750GL")
+		name="rb-750gl"
+		;;
+	*"RouterBOARD 751")
+		name="rb-751"
+		;;
+	*"RouterBOARD 751G")
+		name="rb-751g"
+		;;
+	*"RouterBOARD 911G-2HPnD")
+		name="rb-911g-2hpnd"
+		;;
+	*"RouterBOARD 911G-5HPnD")
+		name="rb-911g-5hpnd"
+		;;
+	*"RouterBOARD 911G-5HPacD")
+		name="rb-911g-5hpacd"
+		;;
+	*"RouterBOARD 912UAG-2HPnD")
+		name="rb-912uag-2hpnd"
+		;;
+	*"RouterBOARD 912UAG-5HPnD")
+		name="rb-912uag-5hpnd"
+		;;
+	*"RouterBOARD 951G-2HnD")
+		name="rb-951g-2hnd"
+		;;
+	*"RouterBOARD 951Ui-2HnD")
+		name="rb-951ui-2hnd"
+		;;
+	*"RouterBOARD 2011L")
+		name="rb-2011l"
+		;;
+	*"RouterBOARD 2011UAS")
+		name="rb-2011uas"
+		;;
+	*"RouterBOARD 2011UiAS")
+		name="rb-2011uias"
+		;;
+	*"RouterBOARD 2011UAS-2HnD")
+		name="rb-2011uas-2hnd"
+		;;
+	*"RouterBOARD 2011UiAS-2HnD")
+		name="rb-2011uias-2hnd"
+		;;
+	*"RouterBOARD SXT Lite2")
+		name="rb-sxt2n"
+		;;
+	*"RouterBOARD SXT Lite5")
+		name="rb-sxt5n"
+		;;
+	*"Rocket M")
+		name="rocket-m"
+		;;
+	*"Rocket M XW")
+		name="rocket-m-xw"
+		;;
+	*RouterStation)
+		name="routerstation"
+		;;
+	*"RouterStation Pro")
+		name="routerstation-pro"
+		;;
+	*RW2458N)
+		name="rw2458n"
+		;;
+	*"SMART-300")
+		name="smart-300"
+		;;
+	"Smart Electronics Black Swift board"*)
+		name="bsb"
+		;;
+	*TEW-632BRP)
+		name="tew-632brp"
+		;;
+	*TEW-673GRU)
+		name="tew-673gru"
+		;;
+	*TEW-712BR)
+		name="tew-712br"
+		;;
+	*TEW-732BR)
+		name="tew-732br"
+		;;
+	*"TL-WR1041N v2")
+		name="tl-wr1041n-v2"
+		;;
+	*TL-WR1043ND)
+		name="tl-wr1043nd"
+		;;
+	*"TL-WR1043ND v2")
+		name="tl-wr1043nd-v2"
+		;;
+	*TL-WR2543N*)
+		name="tl-wr2543n"
+		;;
+	*"DIR-615 rev. C1")
+		name="dir-615-c1"
+		;;
+	*TL-MR3020)
+		name="tl-mr3020"
+		;;
+	*TL-MR3040)
+		name="tl-mr3040"
+		;;
+	*"TL-MR3040 v2")
+		name="tl-mr3040-v2"
+		;;
+	*TL-MR3220)
+		name="tl-mr3220"
+		;;
+	*"TL-MR3220 v2")
+		name="tl-mr3220-v2"
+		;;
+	*TL-MR3420)
+		name="tl-mr3420"
+		;;
+	*"TL-MR3420 v2")
+		name="tl-mr3420-v2"
+		;;
+	*"TL-WA701ND v2")
+		name="tl-wa701nd-v2"
+		;;
+	*"TL-WA7210N v2")
+		name="tl-wa7210n-v2"
+		;;
+	*TL-WA750RE)
+		name="tl-wa750re"
+		;;
+	*"TL-WA7510N v1")
+		name="tl-wa7510n"
+		;;
+	*TL-WA850RE)
+		name="tl-wa850re"
+		;;
+	*TL-WA860RE)
+		name="tl-wa860re"
+		;;
+	*"TL-WA830RE v2")
+		name="tl-wa830re-v2"
+		;;
+	*"TL-WA801ND v2")
+		name="tl-wa801nd-v2"
+		;;
+	*TL-WA901ND)
+		name="tl-wa901nd"
+		;;
+	*"TL-WA901ND v2")
+		name="tl-wa901nd-v2"
+		;;
+	*"TL-WA901ND v3")
+		name="tl-wa901nd-v3"
+		;;
+	*"TL-WA901ND v4")
+		name="tl-wa901nd-v4"
+		;;
+	*"TL-WDR3500")
+		name="tl-wdr3500"
+		;;
+	*"TL-WDR3600/4300/4310")
+		name="tl-wdr4300"
+		;;
+	*"TL-WDR4900 v2")
+		name="tl-wdr4900-v2"
+		;;
+	*TL-WR741ND)
+		name="tl-wr741nd"
+		;;
+	*"TL-WR741ND v4")
+		name="tl-wr741nd-v4"
+		;;
+	*"TL-WR841N v1")
+		name="tl-wr841n-v1"
+		;;
+	*"TL-WR841N/ND v7")
+		name="tl-wr841n-v7"
+		;;
+	*"TL-WR841N/ND v8")
+		name="tl-wr841n-v8"
+		;;
+	*"TL-WR841N/ND v9")
+		name="tl-wr841n-v9"
+		;;
+    *"TL-WR841N/ND v11")
+        name="tl-wr841n-v11"
+		;;
+	*"TL-WR842N/ND v2")
+		name="tl-wr842n-v2"
+		;;
+	*TL-WR941ND)
+		name="tl-wr941nd"
+		;;
+	*"TL-WR941N/ND v5")
+		name="tl-wr941nd-v5"
+		;;
+	*"TL-WR941N/ND v6")
+		name="tl-wr941nd-v6"
+		;;
+	*"TL-WR703N v1")
+		name="tl-wr703n"
+		;;
+	*"TL-WR710N v1")
+		name="tl-wr710n"
+		;;
+	*"TL-WR720N"*)
+		name="tl-wr720n-v3"
+		;;
+	*"TL-MR10U")
+		name="tl-mr10u"
+		;;
+	*"TL-MR11U")
+		name="tl-mr11u"
+		;;
+	*"TL-MR12U")
+		name="tl-mr12u"
+		;;
+	*"TL-MR13U v1")
+		name="tl-mr13u"
+		;;
+	*"Tube2H")
+		name="tube2h"
+		;;
+	*UniFi)
+		name="unifi"
+		;;
+	*"UniFi AP Pro")
+		name="uap-pro"
+		;;
+	"WeIO"*)
+		name="weio"
+		;;
+	*WHR-G301N)
+		name="whr-g301n"
+		;;
+	*WHR-HP-GN)
+		name="whr-hp-gn"
+		;;
+	*WLAE-AG300N)
+		name="wlae-ag300n"
+		;;
+	*"UniFiAP Outdoor")
+		name="unifi-outdoor"
+		;;
+	*"UniFiAP Outdoor+")
+		name="unifi-outdoor-plus"
+		;;
+	*WP543)
+		name="wp543"
+		;;
+	*WPE72)
+		name="wpe72"
+		;;
+	*WPJ344)
+		name="wpj344"
+		;;
+	*WPJ531)
+		name="wpj531"
+		;;
+	*WPJ558)
+		name="wpj558"
+		;;
+	*WNDAP360)
+		name="wndap360"
+		;;
+	*"WNDR3700/WNDR3800/WNDRMAC")
+		wndr3700_board_detect "$machine"
+		;;
+	*"R6100")
+		name="r6100"
+		;;
+	*"WNDR3700v4")
+		name="wndr3700v4"
+		;;
+	*"WNDR4300")
+		name="wndr4300"
+		;;
+	*"WNR2000 V4")
+		name="wnr2000-v4"
+		;;
+	*"WNR2000 V3")
+		name="wnr2000-v3"
+		;;
+	*WNR2000)
+		name="wnr2000"
+		;;
+	*WNR2200)
+		name="wnr2200"
+		;;
+	*"WNR612 V2")
+		name="wnr612-v2"
+		;;
+	*"WNR1000 V2")
+		name="wnr1000-v2"
+		;;
+	*WPN824N)
+		name="wpn824n"
+		;;
+	*WRT160NL)
+		name="wrt160nl"
+		;;
+	*E2100L)
+		name="e2100l"
+		;;
+	*WRT400N)
+		name="wrt400n"
+		;;
+	*"WZR-450HP2")
+		name="wzr-450hp2"
+		;;
+	*"WZR-HP-AG300H/WZR-600DHP")
+		name="wzr-hp-ag300h"
+		;;
+	*WZR-HP-G300NH)
+		name="wzr-hp-g300nh"
+		;;
+	*WZR-HP-G450H)
+		name="wzr-hp-g450h"
+		;;
+	*WZR-HP-G300NH2)
+		name="wzr-hp-g300nh2"
+		;;
+	*WHR-HP-G300N)
+		name="whr-hp-g300n"
+		;;
+	*ZCN-1523H-2)
+		name="zcn-1523h-2"
+		;;
+	*ZCN-1523H-5)
+		name="zcn-1523h-5"
+		;;
+	*EmbWir-Dorin)
+		name="ew-dorin"
+		;;
+	*EmbWir-Dorin-Router)
+		name="ew-dorin-router"
+		;;
+	"8devices Carambola2"*)
+		name="carambola2"
+		;;
+	*"Sitecom WLR-8100")
+		name="wlr8100"
+		;;
+	*"BHU BXU2000n-2 rev. A1")
+		name="bxu2000n-2-a1"
+		;;
+	*"HiWiFi HC6361")
+		name="hiwifi-hc6361"
+		;;
+	esac
+
+	[ -z "$AR71XX_MODEL" ] && [ "${machine:0:8}" = 'TP-LINK ' ] && \
+		tplink_board_detect "$machine"
+
+	[ -z "$name" ] && name="unknown"
+
+	[ -z "$AR71XX_BOARD_NAME" ] && AR71XX_BOARD_NAME="$name"
+	[ -z "$AR71XX_MODEL" ] && AR71XX_MODEL="$machine"
+
+	[ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/"
+
+	echo "$AR71XX_BOARD_NAME" > /tmp/sysinfo/board_name
+	echo "$AR71XX_MODEL" > /tmp/sysinfo/model
+}
+
+ar71xx_board_name() {
+	local name
+
+	[ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name)
+	[ -z "$name" ] && name="unknown"
+
+	echo "$name"
+}
diff --git a/lib/config/uci.sh b/lib/config/uci.sh
new file mode 100644
index 0000000..db84c83
--- /dev/null
+++ b/lib/config/uci.sh
@@ -0,0 +1,137 @@
+#!/bin/sh
+# Shell script compatibility wrappers for /sbin/uci
+#
+# Copyright (C) 2008-2010  OpenWrt.org
+# Copyright (C) 2008  Felix Fietkau <nbd@openwrt.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+CONFIG_APPEND=
+uci_load() {
+	local PACKAGE="$1"
+	local DATA
+	local RET
+	local VAR
+
+	_C=0
+	if [ -z "$CONFIG_APPEND" ]; then
+		for VAR in $CONFIG_LIST_STATE; do
+			export ${NO_EXPORT:+-n} CONFIG_${VAR}=
+			export ${NO_EXPORT:+-n} CONFIG_${VAR}_LENGTH=
+		done
+		export ${NO_EXPORT:+-n} CONFIG_LIST_STATE=
+		export ${NO_EXPORT:+-n} CONFIG_SECTIONS=
+		export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=0
+		export ${NO_EXPORT:+-n} CONFIG_SECTION=
+	fi
+
+	DATA="$(/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} ${LOAD_STATE:+-P /var/state} -S -n export "$PACKAGE" 2>/dev/null)"
+	RET="$?"
+	[ "$RET" != 0 -o -z "$DATA" ] || eval "$DATA"
+	unset DATA
+
+	${CONFIG_SECTION:+config_cb}
+	return "$RET"
+}
+
+uci_set_default() {
+	local PACKAGE="$1"
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q show "$PACKAGE" > /dev/null && return 0
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} import "$PACKAGE"
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit "$PACKAGE"
+}
+
+uci_revert_state() {
+	local PACKAGE="$1"
+	local CONFIG="$2"
+	local OPTION="$3"
+
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state revert "$PACKAGE${CONFIG:+.$CONFIG}${OPTION:+.$OPTION}"
+}
+
+uci_set_state() {
+	local PACKAGE="$1"
+	local CONFIG="$2"
+	local OPTION="$3"
+	local VALUE="$4"
+
+	[ "$#" = 4 ] || return 0
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state set "$PACKAGE.$CONFIG${OPTION:+.$OPTION}=$VALUE"
+}
+
+uci_toggle_state() {
+	uci_revert_state "$1" "$2" "$3"
+	uci_set_state "$1" "$2" "$3" "$4"
+}
+
+uci_set() {
+	local PACKAGE="$1"
+	local CONFIG="$2"
+	local OPTION="$3"
+	local VALUE="$4"
+
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} set "$PACKAGE.$CONFIG.$OPTION=$VALUE"
+}
+
+uci_get_state() {
+	uci_get "$1" "$2" "$3" "$4" "/var/state"
+}
+
+uci_get() {
+	local PACKAGE="$1"
+	local CONFIG="$2"
+	local OPTION="$3"
+	local DEFAULT="$4"
+	local STATE="$5"
+
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} ${STATE:+-P $STATE} -q get "$PACKAGE${CONFIG:+.$CONFIG}${OPTION:+.$OPTION}"
+	RET="$?"
+	[ "$RET" -ne 0 ] && [ -n "$DEFAULT" ] && echo "$DEFAULT"
+	return "$RET"
+}
+
+uci_add() {
+	local PACKAGE="$1"
+	local TYPE="$2"
+	local CONFIG="$3"
+
+	if [ -z "$CONFIG" ]; then
+		export ${NO_EXPORT:+-n} CONFIG_SECTION="$(/sbin/uci add "$PACKAGE" "$TYPE")"
+	else
+		/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} set "$PACKAGE.$CONFIG=$TYPE"
+		export ${NO_EXPORT:+-n} CONFIG_SECTION="$CONFIG"
+	fi
+}
+
+uci_rename() {
+	local PACKAGE="$1"
+	local CONFIG="$2"
+	local VALUE="$3"
+
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} rename "$PACKAGE.$CONFIG=$VALUE"
+}
+
+uci_remove() {
+	local PACKAGE="$1"
+	local CONFIG="$2"
+	local OPTION="$3"
+
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} del "$PACKAGE.$CONFIG${OPTION:+.$OPTION}"
+}
+
+uci_commit() {
+	local PACKAGE="$1"
+	/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit $PACKAGE
+}
diff --git a/lib/debug/system b/lib/debug/system
new file mode 100644
index 0000000..3942036
--- /dev/null
+++ b/lib/debug/system
@@ -0,0 +1,34 @@
+#!/bin/sh /sbin/sysdebug
+#
+# Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+#
+# Permission to use, copy, modify, and/or 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.
+#
+
+log cat /sys/devices/system/soc/soc0/build_id
+log cat /etc/openwrt_release
+log cat /proc/version
+log cat /proc/meminfo
+log cat /proc/interrupts
+log uptime
+log ps
+log ifconfig
+log iptables -L
+log iptables -t nat -L
+log iptables -t mangle -L
+log cat /proc/net/igmp
+log cat /proc/net/ip_mr_cache
+log cat /proc/net/ip_mr_vif
+log cat /proc/net/igmp6
+log cat /proc/net/ip6_mr_cache
+log cat /proc/net/ip6_mr_vif
diff --git a/lib/delos-functions.sh b/lib/delos-functions.sh
new file mode 100755
index 0000000..5e79e00
--- /dev/null
+++ b/lib/delos-functions.sh
@@ -0,0 +1,142 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+[ -f /etc/delos-version ] && . /etc/delos-version
+
+[ -f /usr/share/libubox/jshn.sh ] && . /usr/share/libubox/jshn.sh
+
+dvl_is_developer_firmware() {
+    echo "$FIRMWARE_VERSION" | grep -q '\.D'
+}
+
+dvl_is_internal_firmware() {
+    echo "$FIRMWARE_VERSION" | grep -q '\.[ND]'
+}
+
+dvl_is_pts_firmware() {
+    [ -e /etc/delos-pts-image-marker ]
+}
+
+dvl_check_and_set_wifi_cfg_disabled() {
+    if [ -n "$(uci_get wireless wifi0)" ] ; then
+        # function only matters if two radios are available
+        if [ -n "$(uci_get wireless wifi1)" ] ; then
+            # both cfg_disabled options must be set from WebUI or App or TR69
+            # if both are unset -> switch both radios on
+            # if both radios are configured the same -> switch both on
+            # if the radios are configured different -> leave the options as they are
+            if [ "$(uci_get wireless wifi0 cfg_disabled 0)" = "$(uci_get wireless wifi1 cfg_disabled 0)" ] ; then
+                uci_set wireless wifi0 cfg_disabled 0
+                uci_set wireless wifi1 cfg_disabled 0
+            fi
+        fi
+    fi
+}
+
+dvl_time_to_mseconds() {
+    local time="$1"
+    # use "$(expr $x + 0)" to remove leading 0, because shell would "08" or "09" interpret as illegal octal number
+    local hours=$(expr ${time%%:*} + 0)
+    local minutes=$(expr ${time##*:} + 0)
+
+    local mseconds=$(( ( $hours * 3600 + $minutes * 60 ) * 1000 ))
+
+    echo "$mseconds"
+}
+
+dvl_make_default_ssid() {
+    local vap="$1"
+
+    local format="${_DVL_SSID_FORMAT:-sn-3}"
+    local src="${format%-*}"
+    local num="${format##*-}"
+
+    local prefix
+    case "$vap" in
+        main)
+            prefix="${_DVL_SSID_MAIN_PREFIX:-devolo-}"
+            ;;
+        guest)
+            prefix="${_DVL_SSID_GUEST_PREFIX:-devolo-guest-}"
+            ;;
+        *)
+            prefix=""
+            ;;
+    esac
+
+    local base
+    case "$src" in
+        sn)
+            base="$(uci_get_state delos baptization SerialNumber)"
+            ;;
+        wifimac)
+            base="$(uci_get_state delos baptization WiFiMacAddress)"
+            [ -z "$base" ] && base="$(uci_get_state delos baptization WiFiMacAddress0)"
+            base=$(echo "${base//:/}" | tr 'A-Z' 'a-z')
+            ;;
+        *)
+            base=""
+            ;;
+    esac
+
+    echo "${prefix}${base:$((-$num))}"
+}
+
+dvl_check_oemvariant() {
+    (
+        local trailer="$1"
+
+        local result=1
+        local bap="$(uci_get_state delos baptization OemVariant)"
+        local t keys k v
+
+        json_load "$trailer"
+        json_get_type t "oem_variants"
+
+        if [ "$t" = "array" ]; then
+            json_select "oem_variants"
+
+            json_get_keys keys
+            for k in $keys; do
+                json_get_var v "$k"
+                [ "$bap" = "$v" ] && result=0
+            done
+
+            json_select ..
+        else
+            [ -z "$bap" ] && result=0
+        fi
+
+        exit $result
+    )
+}
+
+dvl_insert_customization_info_file() {
+    local filename="$1"
+
+    local variant="$(uci_get customization config active_variant)"
+    local vendor_name="$(uci_get customization info vendor_name)"
+    local vendor_url="$(uci_get customization info vendor_url)"
+    local product_name="$(uci_get customization info product_name)"
+
+    sed -i \
+        -e "s~___ACTIVE_VARIANT___~$variant~"     \
+        -e "s~___VENDOR_NAME___~$vendor_name~"    \
+        -e "s~___VENDOR_URL___~$vendor_url~"      \
+        -e "s~___PRODUCT_NAME___~$product_name~"  \
+        "$filename"
+}
+
+dvl_insert_customization_info() {
+    local srcdir="$1"
+    local srcfile="$2"
+    local dstdir="${3:-${srcdir}}"
+
+    local tmpfile=$(mktemp /tmp/customization.XXXXXX)
+
+    cp -f "$srcdir"/"$srcfile" "$tmpfile"
+    dvl_insert_customization_info_file "$tmpfile"
+    mv -f "$tmpfile" "$dstdir"/"$srcfile"
+}
diff --git a/lib/dlan/baptization.sh b/lib/dlan/baptization.sh
new file mode 100644
index 0000000..63069d4
--- /dev/null
+++ b/lib/dlan/baptization.sh
@@ -0,0 +1,4 @@
+DlanDAK=$(uci_get_state delos-private baptization DlanDAK)
+DlanDevicePassword=$(uci_get_state delos-private baptization DlanDevicePassword)
+DlanMacAddress=$(uci_get_state delos baptization DlanMacAddress)
+MT=$(uci_get_state delos baptization MT)
diff --git a/lib/firmware/AR9888/hw.2/atf.bin b/lib/firmware/AR9888/hw.2/atf.bin
new file mode 100644
index 0000000..c6eccef
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/atf.bin differ
diff --git a/lib/firmware/AR9888/hw.2/athwlan.bin b/lib/firmware/AR9888/hw.2/athwlan.bin
new file mode 100644
index 0000000..1379cf7
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/athwlan.bin differ
diff --git a/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_cus223_523_gld.bin b/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_cus223_523_gld.bin
new file mode 100644
index 0000000..69eb13f
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_cus223_523_gld.bin differ
diff --git a/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_xb143_gld.bin b/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_xb143_gld.bin
new file mode 100644
index 0000000..3d353eb
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_xb143_gld.bin differ
diff --git a/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_cus261_gld.bin b/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_cus261_gld.bin
new file mode 100644
index 0000000..ccb66d4
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_cus261_gld.bin differ
diff --git a/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_xb141_gld.bin b/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_xb141_gld.bin
new file mode 100644
index 0000000..e07c4e5
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_xb141_gld.bin differ
diff --git a/lib/firmware/AR9888/hw.2/fakeBoardData_AR6004.bin b/lib/firmware/AR9888/hw.2/fakeBoardData_AR6004.bin
new file mode 100644
index 0000000..9ef7e7b
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/fakeBoardData_AR6004.bin differ
diff --git a/lib/firmware/AR9888/hw.2/lteu.bin b/lib/firmware/AR9888/hw.2/lteu.bin
new file mode 100644
index 0000000..9ed4cb2
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/lteu.bin differ
diff --git a/lib/firmware/AR9888/hw.2/otp.bin b/lib/firmware/AR9888/hw.2/otp.bin
new file mode 100644
index 0000000..0382582
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/otp.bin differ
diff --git a/lib/firmware/AR9888/hw.2/utf.bin b/lib/firmware/AR9888/hw.2/utf.bin
new file mode 100644
index 0000000..e058cdd
Binary files /dev/null and b/lib/firmware/AR9888/hw.2/utf.bin differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/MAC-7500-v2.6.0-01-NW6__-X-CS.nvm b/lib/firmware/plc/dlan-pro-1200-ac/MAC-7500-v2.6.0-01-NW6__-X-CS.nvm
new file mode 100644
index 0000000..7865d9c
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/MAC-7500-v2.6.0-01-NW6__-X-CS.nvm differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/default_mode_name.txt b/lib/firmware/plc/dlan-pro-1200-ac/default_mode_name.txt
new file mode 100644
index 0000000..ba394b0
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/default_mode_name.txt
@@ -0,0 +1 @@
+mimo_vdsl17a
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/fwconfig b/lib/firmware/plc/dlan-pro-1200-ac/fwconfig
new file mode 100644
index 0000000..0ed4153
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/fwconfig
@@ -0,0 +1,18 @@
+PLCFW_PATH=/lib/firmware/plc
+PLCFW_NVM='dlan-pro-1200-ac/MAC-7500-v2.6.0-01-NW6__-X-CS.nvm'
+PLCFW_PIB='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2673.pib'
+PLCFW_PIB_2673='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2673.pib'
+PLCFW_PIB_2674='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2674.pib'
+PLCFW_PIB_2675='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2675.pib'
+PLCFW_PIB_2676='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2676.pib'
+PLCFW_PIB_2730='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2730.pib'
+PLCFW_PIB_2731='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2731.pib'
+PLCFW_PIB_2732='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2732.pib'
+PLCFW_PIB_2910='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2910.pib'
+PLCFW_PIB_2911='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2911.pib'
+PLCFW_PIB_2912='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2912.pib'
+PLCFW_PIB_2913='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2913.pib'
+PLCFW_PIB_2966='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2966.pib'
+PLCFW_PIB_2973='dlan-pro-1200-ac/qca7500-pib15-devolo-mt2973.pib'
+PLCFW_HOST=/usr/bin/plchost
+PLCFW_SCHEMES=$PLCFW_PATH/dlan-pro-1200-ac
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_off b/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_off
new file mode 100755
index 0000000..ac7524e
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_off
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+setpib "$1" 0x1E26 data 000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_on b/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_on
new file mode 100755
index 0000000..0cc488d
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_on
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+setpib "$1" 0x1E26 data 000400000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_mimo_vdsl35b.txt
new file mode 100644
index 0000000..f981ff5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191C4A3B33343D4B1A181A1A1A1B1A1B1B1A1A1C1C1A1B1C1B1C1C1C1B1C1B1C1C1C1C1C1C1C1D1C1C1C1C1D1C1E1D1D1D1D1D1D1D1E1D1D1C1D1D1C1C1D473D35343435343335353D67542020212221212121222122212222222222212222222222222222222322222223232222242423232323232323232424252323242323242524252525252525252524234946383746422A2525262525252625252525252626262626262626262726262627272827272727272728272727272827282728282828282828282828292524253B37251919191818181818181818181717110E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101231373A353536363735353637353637373733383738363535373537363535373536363536353435363635353435363535353538373835373736353736353535353531353537373537353334353537353434353737373535353535353434333534353434353434343434335E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_mimo_vdsl35b.txt
new file mode 100644
index 0000000..f981ff5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191C4A3B33343D4B1A181A1A1A1B1A1B1B1A1A1C1C1A1B1C1B1C1C1C1B1C1B1C1C1C1C1C1C1C1D1C1C1C1C1D1C1E1D1D1D1D1D1D1D1E1D1D1C1D1D1C1C1D473D35343435343335353D67542020212221212121222122212222222222212222222222222222222322222223232222242423232323232323232424252323242323242524252525252525252524234946383746422A2525262525252625252525252626262626262626262726262627272827272727272728272727272827282728282828282828282828292524253B37251919191818181818181818181717110E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101231373A353536363735353637353637373733383738363535373537363535373536363536353435363635353435363535353538373835373736353736353535353531353537373537353334353537353434353737373535353535353434333534353434353434343434335E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_mimo_vdsl35b.txt
new file mode 100644
index 0000000..f981ff5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191C4A3B33343D4B1A181A1A1A1B1A1B1B1A1A1C1C1A1B1C1B1C1C1C1B1C1B1C1C1C1C1C1C1C1D1C1C1C1C1D1C1E1D1D1D1D1D1D1D1E1D1D1C1D1D1C1C1D473D35343435343335353D67542020212221212121222122212222222222212222222222222222222322222223232222242423232323232323232424252323242323242524252525252525252524234946383746422A2525262525252625252525252626262626262626262726262627272827272727272728272727272827282728282828282828282828292524253B37251919191818181818181818181717110E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101231373A353536363735353637353637373733383738363535373537363535373536363536353435363635353435363535353538373835373736353736353535353531353537373537353334353537353434353737373535353535353434333534353434353434343434335E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_mimo_vdsl35b.txt
new file mode 100644
index 0000000..f981ff5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191C4A3B33343D4B1A181A1A1A1B1A1B1B1A1A1C1C1A1B1C1B1C1C1C1B1C1B1C1C1C1C1C1C1C1D1C1C1C1C1D1C1E1D1D1D1D1D1D1D1E1D1D1C1D1D1C1C1D473D35343435343335353D67542020212221212121222122212222222222212222222222222222222322222223232222242423232323232323232424252323242323242524252525252525252524234946383746422A2525262525252625252525252626262626262626262726262627272827272727272728272727272827282728282828282828282828292524253B37251919191818181818181818181717110E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101231373A353536363735353637353637373733383738363535373537363535373536363536353435363635353435363535353538373835373736353736353535353531353537373537353334353537353434353737373535353535353434333534353434353434343434335E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_mimo_vdsl35b.txt
new file mode 100644
index 0000000..d2856f6
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A3028292E292D1200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505001D201F221D1D211D2121221F231F1D202020211D2222222123100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E282821262827272828282629272A2827282827262729282828272728282A010C0C0C010C0C0C011F1E29292A2A1A01040401010404010104040401052D2A2D2C2D2C282728312B2E2A302B2A2B263029292A272A2A27272C2A3128282C2C2D2E2A282C2D2A2A31302F2A2C2B30302D2F312A33302D332C2D2A2D2D312F1B010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0D0F0D0E060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F1109170000000000000000000000000005050000050500090A0A0B09090A090A0A0B0A0B0A090A0A0A0A090B0B0B0A0B100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E2828212628270C0D0D0D0C0D0C0D0D0C0D0D0C0C0C0D0D0D0D0C0C0D0D0D010C0C0C010C0C0C010A090D0D0D0D0801040401010404010104040401050E0D0E0E0E0E0D0C0D0F0E0F0D0F0E0D0E0C0F0D0D0D0C0D0D0C0C0E0D0F0D0D0E0E0E0F0D0D0E0E0D0D0F0F0F0D0E0E0F0F0E0F0F0D100F0E100E0E0D0E0E0F0F09010C0C010106060101060609100F0F0F0F100E0F0E0E0F100E100F0F0F0F100F10100F0F0F0F0F0E0F100F0F0F100F110F0F0F110F11101011100F100E110D0801060606010505010105050501060507110605070106060601040A12120E1010111110101010111010110F1010101211110F111210100F1112111011111110110F10111212101010120F1211111305050104040101040405110F1212111211141210111113111112101210101114111211131210111012121209373701181A1A011A1A19011918120A0B13111113090C0202020101010101010101010101010101010101010101020202020202020202020202020202020605050D373B35353636373535363735363737373438373836353537353736353537353636353635343536363535343536353535353837383537373635373635353535353135353737353735333435353735343435373737353535353535343434353435343435343434343434A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_mimo_vdsl35b.txt
new file mode 100644
index 0000000..d2856f6
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A3028292E292D1200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505001D201F221D1D211D2121221F231F1D202020211D2222222123100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E282821262827272828282629272A2827282827262729282828272728282A010C0C0C010C0C0C011F1E29292A2A1A01040401010404010104040401052D2A2D2C2D2C282728312B2E2A302B2A2B263029292A272A2A27272C2A3128282C2C2D2E2A282C2D2A2A31302F2A2C2B30302D2F312A33302D332C2D2A2D2D312F1B010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0D0F0D0E060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F1109170000000000000000000000000005050000050500090A0A0B09090A090A0A0B0A0B0A090A0A0A0A090B0B0B0A0B100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E2828212628270C0D0D0D0C0D0C0D0D0C0D0D0C0C0C0D0D0D0D0C0C0D0D0D010C0C0C010C0C0C010A090D0D0D0D0801040401010404010104040401050E0D0E0E0E0E0D0C0D0F0E0F0D0F0E0D0E0C0F0D0D0D0C0D0D0C0C0E0D0F0D0D0E0E0E0F0D0D0E0E0D0D0F0F0F0D0E0E0F0F0E0F0F0D100F0E100E0E0D0E0E0F0F09010C0C010106060101060609100F0F0F0F100E0F0E0E0F100E100F0F0F0F100F10100F0F0F0F0F0E0F100F0F0F100F110F0F0F110F11101011100F100E110D0801060606010505010105050501060507110605070106060601040A12120E1010111110101010111010110F1010101211110F111210100F1112111011111110110F10111212101010120F1211111305050104040101040405110F1212111211141210111113111112101210101114111211131210111012121209373701181A1A011A1A19011918120A0B13111113090C0202020101010101010101010101010101010101010101020202020202020202020202020202020605050D373B35353636373535363735363737373438373836353537353736353537353636353635343536363535343536353535353837383537373635373635353535353135353737353735333435353735343435373737353535353535343434353435343435343434343434A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_mimo_vdsl35b.txt
new file mode 100644
index 0000000..d2856f6
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A3028292E292D1200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505001D201F221D1D211D2121221F231F1D202020211D2222222123100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E282821262827272828282629272A2827282827262729282828272728282A010C0C0C010C0C0C011F1E29292A2A1A01040401010404010104040401052D2A2D2C2D2C282728312B2E2A302B2A2B263029292A272A2A27272C2A3128282C2C2D2E2A282C2D2A2A31302F2A2C2B30302D2F312A33302D332C2D2A2D2D312F1B010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0D0F0D0E060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F1109170000000000000000000000000005050000050500090A0A0B09090A090A0A0B0A0B0A090A0A0A0A090B0B0B0A0B100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E2828212628270C0D0D0D0C0D0C0D0D0C0D0D0C0C0C0D0D0D0D0C0C0D0D0D010C0C0C010C0C0C010A090D0D0D0D0801040401010404010104040401050E0D0E0E0E0E0D0C0D0F0E0F0D0F0E0D0E0C0F0D0D0D0C0D0D0C0C0E0D0F0D0D0E0E0E0F0D0D0E0E0D0D0F0F0F0D0E0E0F0F0E0F0F0D100F0E100E0E0D0E0E0F0F09010C0C010106060101060609100F0F0F0F100E0F0E0E0F100E100F0F0F0F100F10100F0F0F0F0F0E0F100F0F0F100F110F0F0F110F11101011100F100E110D0801060606010505010105050501060507110605070106060601040A12120E1010111110101010111010110F1010101211110F111210100F1112111011111110110F10111212101010120F1211111305050104040101040405110F1212111211141210111113111112101210101114111211131210111012121209373701181A1A011A1A19011918120A0B13111113090C0202020101010101010101010101010101010101010101020202020202020202020202020202020605050D373B35353636373535363735363737373438373836353537353736353537353636353635343536363535343536353535353837383537373635373635353535353135353737353735333435353735343435373737353535353535343434353435343435343434343434A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_mimo_vdsl35b.txt
new file mode 100644
index 0000000..3fd0b74
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B01101001010808010108080B1514141414151314121214151216141514141514161614141414151213161413151614161514151714161515161515161217110A01080808010707010107070701080709170907090108080801050E18171216161616161615161616161614151515181716141718151514161817151616171616141616171815161618151817171907060105050101050507171318171618171A181617161916161715181616161A17181719181516151818180D49490120222201222221012120180D0F191717190C0C0202020101010101010101010101010101010101010101020202020202020202020202020202020605050D373B35353636373535363735363737373438373836353537353736353537353636353635343536363535343536353535353837383537373635373635353535353135353737353735333435353735343435373737353535353535343434353435343435343434343434A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_mimo_vdsl35b.txt
new file mode 100644
index 0000000..3fd0b74
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B01101001010808010108080B1514141414151314121214151216141514141514161614141414151213161413151614161514151714161515161515161217110A01080808010707010107070701080709170907090108080801050E18171216161616161615161616161614151515181716141718151514161817151616171616141616171815161618151817171907060105050101050507171318171618171A181617161916161715181616161A17181719181516151818180D49490120222201222221012120180D0F191717190C0C0202020101010101010101010101010101010101010101020202020202020202020202020202020605050D373B35353636373535363735363737373438373836353537353736353537353636353635343536363535343536353535353837383537373635373635353535353135353737353735333435353735343435373737353535353535343434353435343435343434343434A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_mimo_vdsl35b.txt
new file mode 100644
index 0000000..3fd0b74
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B01101001010808010108080B1514141414151314121214151216141514141514161614141414151213161413151614161514151714161515161515161217110A01080808010707010107070701080709170907090108080801050E18171216161616161615161616161614151515181716141718151514161817151616171616141616171815161618151817171907060105050101050507171318171618171A181617161916161715181616161A17181719181516151818180D49490120222201222221012120180D0F191717190C0C0202020101010101010101010101010101010101010101020202020202020202020202020202020605050D373B35353636373535363735363737373438373836353537353736353537353636353635343536363535343536353535353837383537373635373635353535353135353737353735333435353735343435373737353535353535343434353435343435343434343434A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_mimo_vdsl35b.txt
new file mode 100644
index 0000000..3fd0b74
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B01101001010808010108080B1514141414151314121214151216141514141514161614141414151213161413151614161514151714161515161515161217110A01080808010707010107070701080709170907090108080801050E18171216161616161615161616161614151515181716141718151514161817151616171616141616171815161618151817171907060105050101050507171318171618171A181617161916161715181616161A17181719181516151818180D49490120222201222221012120180D0F191717190C0C0202020101010101010101010101010101010101010101020202020202020202020202020202020605050D373B35353636373535363735363737373438373836353537353736353537353636353635343536363535343536353535353837383537373635373635353535353135353737353735333435353735343435373737353535353535343434353435343435343434343434A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_mimo_vdsl35b.txt
new file mode 100644
index 0000000..f981ff5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191C4A3B33343D4B1A181A1A1A1B1A1B1B1A1A1C1C1A1B1C1B1C1C1C1B1C1B1C1C1C1C1C1C1C1D1C1C1C1C1D1C1E1D1D1D1D1D1D1D1E1D1D1C1D1D1C1C1D473D35343435343335353D67542020212221212121222122212222222222212222222222222222222322222223232222242423232323232323232424252323242323242524252525252525252524234946383746422A2525262525252625252525252626262626262626262726262627272827272727272728272727272827282728282828282828282828292524253B37251919191818181818181818181717110E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101231373A353536363735353637353637373733383738363535373537363535373536363536353435363635353435363535353538373835373736353736353535353531353537373537353334353537353434353737373535353535353434333534353434353434343434335E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_mimo_vdsl35b.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_mimo_vdsl35b.txt
new file mode 100644
index 0000000..f981ff5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_mimo_vdsl35b.txt
@@ -0,0 +1 @@
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A19191C4A3B33343D4B1A181A1A1A1B1A1B1B1A1A1C1C1A1B1C1B1C1C1C1B1C1B1C1C1C1C1C1C1C1D1C1C1C1C1D1C1E1D1D1D1D1D1D1D1E1D1D1C1D1D1C1C1D473D35343435343335353D67542020212221212121222122212222222222212222222222222222222322222223232222242423232323232323232424252323242323242524252525252525252524234946383746422A2525262525252625252525252626262626262626262726262627272827272727272728272727272827282728282828282828282828292524253B37251919191818181818181818181717110E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101231373A353536363735353637353637373733383738363535373537363535373536363536353435363635353435363535353538373835373736353736353535353531353537373537353334353537353434353737373535353535353434333534353434353434343434335E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_siso_full.txt b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_siso_full.txt
new file mode 100644
index 0000000..25d0750
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_siso_full.txt
@@ -0,0 +1,2 @@
+0x10C2 0x01
+0x25AF 0x03
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2673.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2673.pib
new file mode 100644
index 0000000..6b2cdbd
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2673.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2674.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2674.pib
new file mode 100644
index 0000000..b630a34
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2674.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2675.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2675.pib
new file mode 100644
index 0000000..b5dc51d
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2675.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2676.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2676.pib
new file mode 100644
index 0000000..f621778
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2676.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2730.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2730.pib
new file mode 100644
index 0000000..a3af0f5
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2730.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2731.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2731.pib
new file mode 100644
index 0000000..6049c52
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2731.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2732.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2732.pib
new file mode 100644
index 0000000..4b4503b
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2732.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2910.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2910.pib
new file mode 100644
index 0000000..8af1814
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2910.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2911.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2911.pib
new file mode 100644
index 0000000..e718fdf
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2911.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2912.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2912.pib
new file mode 100644
index 0000000..76822ff
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2912.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2913.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2913.pib
new file mode 100644
index 0000000..c6ba421
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2913.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2966.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2966.pib
new file mode 100644
index 0000000..301d33e
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2966.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2973.pib b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2973.pib
new file mode 100644
index 0000000..ab1d79d
Binary files /dev/null and b/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2973.pib differ
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2673.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2673.txt
new file mode 100644
index 0000000..cc8206b
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2673.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2674.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2674.txt
new file mode 100644
index 0000000..cc8206b
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2674.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2675.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2675.txt
new file mode 100644
index 0000000..cc8206b
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2675.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2676.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2676.txt
new file mode 100644
index 0000000..cc8206b
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2676.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2730.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2730.txt
new file mode 100644
index 0000000..2362eb5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2730.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A3028292E292D1200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505001D201F221D1D211D2121221F231F1D202020211D2222222123100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E282821262827272828282629272A2827282827262729282828272728282A010C0C0C010C0C0C011F1E29292A2A1A01040401010404010104040401052D2A2D2C2D2C282728312B2E2A302B2A2B263029292A272A2A27272C2A3128282C2C2D2E2A282C2D2A2A31302F2A2C2B30302D2F312A33302D332C2D2A2D2D312F1B010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0D0F0D0E060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F1109170000000000000000000000000005050000050500090A0A0B09090A090A0A0B0A0B0A090A0A0A0A090B0B0B0A0B100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E2828212628270C0D0D0D0C0D0C0D0D0C0D0D0C0C0C0D0D0D0D0C0C0D0D0D010C0C0C010C0C0C010A090D0D0D0D0801040401010404010104040401050E0D0E0E0E0E0D0C0D0F0E0F0D0F0E0D0E0C0F0D0D0D0C0D0D0C0C0E0D0F0D0D0E0E0E0F0D0D0E0E0D0D0F0F0F0D0E0E0F0F0E0F0F0D100F0E100E0E0D0E0E0F0F09010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2731.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2731.txt
new file mode 100644
index 0000000..2362eb5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2731.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A3028292E292D1200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505001D201F221D1D211D2121221F231F1D202020211D2222222123100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E282821262827272828282629272A2827282827262729282828272728282A010C0C0C010C0C0C011F1E29292A2A1A01040401010404010104040401052D2A2D2C2D2C282728312B2E2A302B2A2B263029292A272A2A27272C2A3128282C2C2D2E2A282C2D2A2A31302F2A2C2B30302D2F312A33302D332C2D2A2D2D312F1B010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0D0F0D0E060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F1109170000000000000000000000000005050000050500090A0A0B09090A090A0A0B0A0B0A090A0A0A0A090B0B0B0A0B100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E2828212628270C0D0D0D0C0D0C0D0D0C0D0D0C0C0C0D0D0D0D0C0C0D0D0D010C0C0C010C0C0C010A090D0D0D0D0801040401010404010104040401050E0D0E0E0E0E0D0C0D0F0E0F0D0F0E0D0E0C0F0D0D0D0C0D0D0C0C0E0D0F0D0D0E0E0E0F0D0D0E0E0D0D0F0F0F0D0E0E0F0F0E0F0F0D100F0E100E0E0D0E0E0F0F09010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2732.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2732.txt
new file mode 100644
index 0000000..2362eb5
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2732.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A3028292E292D1200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505001D201F221D1D211D2121221F231F1D202020211D2222222123100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E282821262827272828282629272A2827282827262729282828272728282A010C0C0C010C0C0C011F1E29292A2A1A01040401010404010104040401052D2A2D2C2D2C282728312B2E2A302B2A2B263029292A272A2A27272C2A3128282C2C2D2E2A282C2D2A2A31302F2A2C2B30302D2F312A33302D332C2D2A2D2D312F1B010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0D0F0D0E060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F1109170000000000000000000000000005050000050500090A0A0B09090A090A0A0B0A0B0A090A0A0A0A090B0B0B0A0B100E0E010E0E0E010E0E1D21211E1D1F1F231D201F202021160202010202020102021E2625262621262221252126262624271A01060601010E0E0E011E2828212628270C0D0D0D0C0D0C0D0D0C0D0D0C0C0C0D0D0D0D0C0C0D0D0D010C0C0C010C0C0C010A090D0D0D0D0801040401010404010104040401050E0D0E0E0E0E0D0C0D0F0E0F0D0F0E0D0E0C0F0D0D0D0C0D0D0C0C0E0D0F0D0D0E0E0E0F0D0D0E0E0D0D0F0F0F0D0E0E0F0F0E0F0F0D100F0E100E0E0D0E0E0F0F09010C0C01010606010106061B3231313130322D302B2B31322C3430312F2F3230343431312F30312B2E34302E31343135312F313731353333353331342C372818010606060105050101050505010610153714110701060606010D213A382B3434353634343334363434362F33333339373531373933332F3639373336363734362F3436383A3334343A313A37373C110F0104040101040411372E3A38353A373E3A3437363B35353832393434363E3739373B393236333939391E373701181A1A011A1A190119181220243D37373B1D0C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2910.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2910.txt
new file mode 100644
index 0000000..27f19e7
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2910.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2911.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2911.txt
new file mode 100644
index 0000000..27f19e7
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2911.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2912.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2912.txt
new file mode 100644
index 0000000..27f19e7
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2912.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2913.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2913.txt
new file mode 100644
index 0000000..27f19e7
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2913.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x5D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009400000000000000000000000100000000000000000000000000000000000000050500000404050028282F2A30282B302E321200101000001010100B2F290500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404162E2C31302F31312E351D1700000000000000000000000000050500000505002C2F2E322A2B312C3131322E332E2C30302F312A3232323134181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235333335353532363438353335353432333635353534333535370010101000101010002928363638382200050500000505000005050500063B383B3A3B3A35343540393D383F393839323F36363833383734333A374135353A3A3B3C38353A3B3738413F3E373A393F3F3B3E4138433F3B433A3B373B3B403E23011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A191918181919191919191918181818181818181818181718181717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000940000000000000000000000010000000000000000000000000000000000000005050000040405000D0D0F0D0F0D0E0F0F10060010100000101010030F0D0500050500000405050005050500050505002831282C2B2732000C0C0C00080808242F2E3418060500000505050004040000040404070F0E0F0F0F0F0F0F11091700000000000000000000000000050500000505000E0F0F100D0E0F0E0F0F100F100F0E0F0F0F0F0D1010100F10181515001515150015152B31312D2B2E2E342C2F2E2F30312103030003030300030328323132322B322D2C312C3232322F33220008080000131313002735352C3235331011111110111012111011111010101111111110101111110010101000101010000D0D111112120B000505000005050000050505000613121312131211101114121312141212121014111112101211101012111511111212131312111213111215141411121214141314151215141315121311131314140B011010010108080101080823424040403F423B3F393940423A453F413E3E423F454540403E3F41393D453F3C41454046413E414940464343464341443A4835200108080801070701010707070108151C481B17090108080801112B4D4A394444464744454344474445473E4343434B494640494B43433E474B494347474945473E45474A4C4345454C414C49484F17140105050101050516483C4C4A464C49524C4548474E46464A424B44454752494B484E4B4247434B4B4B2849490120222201222221012120182A2F5048484E260C05050504010404040404040404040404040404040404040505050505050505050505050505050512111128ADBAA7A7ACACADA7A7ACADA7ACADADADA3B0ADB0ACA7A7ADA7ADACA7A7ADA7ACACA7ACA7A6A7ACACA7A7A6A7ACA7A7A7A7B0ADB0A7ADADACA7ADACA7A7A7A7A79AA7A7ADADA7ADA7A2A6A7A7ADA7A3A6A7ADADADA7A7A7A7A7A7A6A6A3A7A3A7A6A6A7A6A3A6A3A6A3A7A6A3A3A3A6A3A7A7ACADA7ACACADA7A6A6A3A3A3A3A39DA3A3A6A3A7A3A3A3A3A3A3A2A3A6A6A3ACACACA3A3A3A3A7A6A7A7A3A3A2A2A3A3A3A3A2A3A3A3A3A3A0A19B9A999B8A999799969593938E928F8B888E8D8C8B858283808483827F807D7C77767A797C797A7D777372756D706F6D6A6F6B6E6B6A6865686667666160605F5E6160605F605F5F5C5B58585757565554565656535253514F4F524F4F4F4C4C4B4B4A4A4B4B4B4C4A47484843464446444444444443424341403E3E3D3D3D3C3D3B3C3A393A3A3A3838393838373737363636363435353535353334343433333133323233323233313031303030302F2F2F2E2F2E2E2E2D2E2D2D2C2C2D2C2C2A2B2C2B2B2B2A2B2A292928282928282827272826272626252525242525252525262424252424252524242423232224232323232222212222212121222121212021212020201F1F1F201F1F1F1F1E1E1F1E1E1D1D1D1D1D1D1D1D1D1D1C1D1C1C1C1C1C1C1B1C1C1B1B1B1B1B1B1B1A1A1A1A1A1A1A191A19191919191918191819181817181818181818181717171717171717171717171717171717171717171717181818181817191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1A1B1D1B1D1D1B1B1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1F1E1E1E1E1E1E1E1F212120202021202121202020212020202020202020202020201F1F1F1E1F1F1F1E1F1F1E1E1E1F1E1E1E1D1E1E1E1D1D1D1D1D1D1D1D1D1D1D1C1D1D1C1C1C1C1B1C1C1C1C1B1C1B1B1B1B1B1A1B1A1A1B1A1A1A1A1A1A1A1A1A1A191A1A1A1A19191818191919191919191818181818181818181818171818171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171700000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2966.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2966.txt
new file mode 100644
index 0000000..cc8206b
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2966.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2973.txt b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2973.txt
new file mode 100644
index 0000000..cc8206b
--- /dev/null
+++ b/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2973.txt
@@ -0,0 +1,3 @@
+0x10C2 0x00
+0x1158 0x55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E292526272A2E2827292A2A2A35322D2B2D2B2E2D2E2E2F302F2F32403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536363434364C41333A47353232323231303130303031323232302F302E302F2F2E2F302F2C2E324137342D2E2E2E303340222123242423242223222323232222222322232323232323222223221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252323232427282828272828282828282A292A2A29292A282928292929282A2A2A2A2A2A2A2A2A2929292B3A3431312F2E2E2E2E2F34332D2B2C2D2C2B2B2D2B2B2C2D2C2D2C2D2D2D2C2E2D2D2D2D2D2D2D2E2E2E2C2C2C2E2D2D2E2E2E2E2E2E2D2E2E2E2D2E2E2E2D2E2E2E2E2E2E2E2E2E2E2E2E2F2E2F2E2F2E2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B57575856555859575857585757580000000000000000000000000000000000000000000000000000000000000000000000000000000000000055000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078000000000000000000000001000000000000000000000000000000000000002D2D2B2B2D2E17151516181A1616171818181E1C191819181A191A1A1A1B1A1A1C403C322C2D2E2E2E2E2E2F2F333F3735353636363635353636353533353536363536361D1D1E4C41333A471E1C1C1C1C1C1B1C1B1B1B1C1C1C1C1B1A1B1A1B1A1A1A1A1B1A191A1C4137342D2E2E2E303340131314141414141314131414141313131413141414141414131323221E1C1C1E1E2223232424232324242423252423242523222225302E2B30292522222226262626262626252526262626262626282727282626272627272726252314141416161616161616161616161817181817171816171617171716181818181818181818171717183A3431312F2E2E2E2E2F341D191819191918181918181919191919191919191A191919191919191A1A1A1919191A19191A1A1A1A1A1A191A1A1A191A1A1A191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A2D2D314A3B33343D4B2F2B2E2F2F302F30302F2F31312F30313031313130313032323232313232333232323233323533333333333333353434323433323234473D35343435343335353D675439393A3D3A3A3B3B3C3A3D3B3D3C3C3C3C3B3D3C3D3D3D3D3D3D3D3E3D3D3D3E3E3D3D40403F3E3F3F3E3E3E3F4040413F3F403F3F4042404141414141414241403F4946383746424A4142434141424442414242424344444343444444444544444445454745454546464547464546464746474647474848474848484847494140426962422C2C2C2B2B2B2B2A2B2B2A2B29291E191A1A1A1B1B1B1A1B1B1A1A1B1A1A1A1A1B1A1A1A1A1D205862685F5F6060615E5F60615F606161615B636263605F5F615F61605F5E615F60605F605F5D5F60605F5F5D5F605F5F5F5F6362635F6162605E61605F5F5E5E5F575E5E61615F615F5A5D5E5E615E5C5D5E6261625F5E5F5E5E5F5D5D5B5E5C5F5D5D5E5D5C5D5C5D5B5E5D5C5C5C5D5B5E5F60625F6060625F5D5D5C5C5C5C5B595C5B5D5C5E5C5B5B5B5C5B5A5C5D5D5C6060605C5C5C5B5E5D5F5F5C5B5A5A5B5B5C5B5A5B5C5C5B5B5A5B5959585A515A5A5C5C5B5A5B595C5A58575B5B5C5B585758575A5A5A595A5959555658585C5A5B5E5A58595A56585957555A575A59595756585759585555565655585858585A5A5A585755565556565554575858565657565656585757585656565556565759595A58565759535756585557575958575758575655565555565657555754545657575455575656565555545655565356555655555456555555555355565657565758555455555656565454565455545555545556555454555455515455555555545554525352535453545253525451525251515151505153525252555353555354555554565554525255545455555354535554535452565656545255565554555354525555545554535455555553535353535356545555545554545555555554565555555454555557545454545655565455545555555655545654585654535655575555555755565657555656555657545555565857585656545556555757565656545656565656565555565557555656565556555657585756565A57585856565657575757575756565656575656575558575857575757565656575A5B595757585759585756555756575858575858575757575858575A56575A57565A585958595C585857565757585759585858585758575859595B5B5A5957585657585B58565B595858575756595656585957595A59595858575956575A5C5B5A5A5656575859595958585958585A595959585A57575658585858595758565D56585759595856585659555756585A5A59575A575759585758585856595356585A575B575758565558595758575857575800000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+0x25AF 0x00
diff --git a/lib/functions.sh b/lib/functions.sh
new file mode 100755
index 0000000..03df20e
--- /dev/null
+++ b/lib/functions.sh
@@ -0,0 +1,377 @@
+#!/bin/sh
+# Copyright (C) 2006-2014 OpenWrt.org
+# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
+# Copyright (C) 2010 Vertical Communications
+
+
+find_mmc_part() {
+	local DEVNAME PARTNAME
+
+	if grep -q "$1" /proc/mtd; then
+		echo "" && return 0
+	fi
+
+	for DEVNAME in /sys/block/mmcblk*/mmcblk*p*; do
+		PARTNAME=$(grep PARTNAME ${DEVNAME}/uevent | cut -f2 -d'=')
+		[ "$PARTNAME" = "$1" ] && echo "/dev/$(basename $DEVNAME)" && return 0
+	done
+}
+
+debug () {
+	${DEBUG:-:} "$@"
+}
+
+# newline
+N="
+"
+
+_C=0
+NO_EXPORT=1
+LOAD_STATE=1
+LIST_SEP=" "
+
+append() {
+	local var="$1"
+	local value="$2"
+	local sep="${3:- }"
+
+	eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
+}
+
+list_contains() {
+	local var="$1"
+	local str="$2"
+	local val
+
+	eval "val=\" \${$var} \""
+	[ "${val%% $str *}" != "$val" ]
+}
+
+config_load() {
+	[ -n "$IPKG_INSTROOT" ] && return 0
+	uci_load "$@"
+}
+
+reset_cb() {
+	config_cb() { return 0; }
+	option_cb() { return 0; }
+	list_cb() { return 0; }
+}
+reset_cb
+
+package() {
+	return 0
+}
+
+config () {
+	local cfgtype="$1"
+	local name="$2"
+
+	export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))
+	name="${name:-cfg$CONFIG_NUM_SECTIONS}"
+	append CONFIG_SECTIONS "$name"
+	[ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
+	export ${NO_EXPORT:+-n} CONFIG_SECTION="$name"
+	export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"
+}
+
+option () {
+	local varname="$1"; shift
+	local value="$*"
+
+	export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_${varname}=$value"
+	[ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"
+}
+
+list() {
+	local varname="$1"; shift
+	local value="$*"
+	local len
+
+	config_get len "$CONFIG_SECTION" "${varname}_LENGTH" 0
+	[ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}"
+	len=$(($len + 1))
+	config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"
+	config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"
+	append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP"
+	list_cb "$varname" "$*"
+}
+
+config_unset() {
+	config_set "$1" "$2" ""
+}
+
+# config_get <variable> <section> <option> [<default>]
+# config_get <section> <option>
+config_get() {
+	case "$3" in
+		"") eval echo "\"\${CONFIG_${1}_${2}:-\${4}}\"";;
+		*)  eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;
+	esac
+}
+
+# config_get_bool <variable> <section> <option> [<default>]
+config_get_bool() {
+	local _tmp
+	config_get _tmp "$2" "$3" "$4"
+	case "$_tmp" in
+		1|on|true|yes|enabled) _tmp=1;;
+		0|off|false|no|disabled) _tmp=0;;
+		*) _tmp="$4";;
+	esac
+	export ${NO_EXPORT:+-n} "$1=$_tmp"
+}
+
+config_set() {
+	local section="$1"
+	local option="$2"
+	local value="$3"
+	local old_section="$CONFIG_SECTION"
+
+	CONFIG_SECTION="$section"
+	option "$option" "$value"
+	CONFIG_SECTION="$old_section"
+}
+
+config_foreach() {
+	local ___function="$1"
+	[ "$#" -ge 1 ] && shift
+	local ___type="$1"
+	[ "$#" -ge 1 ] && shift
+	local section cfgtype
+
+	[ -z "$CONFIG_SECTIONS" ] && return 0
+	for section in ${CONFIG_SECTIONS}; do
+		config_get cfgtype "$section" TYPE
+		[ -n "$___type" -a "x$cfgtype" != "x$___type" ] && continue
+		eval "$___function \"\$section\" \"\$@\""
+	done
+}
+
+config_list_foreach() {
+	[ "$#" -ge 3 ] || return 0
+	local section="$1"; shift
+	local option="$1"; shift
+	local function="$1"; shift
+	local val
+	local len
+	local c=1
+
+	config_get len "${section}" "${option}_LENGTH"
+	[ -z "$len" ] && return 0
+	while [ $c -le "$len" ]; do
+		config_get val "${section}" "${option}_ITEM$c"
+		eval "$function \"\$val\" \"\$@\""
+		c="$(($c + 1))"
+	done
+}
+
+# by devolo: dump shell variables as readable config file
+# use only when required for debugging because it's actually quite slow
+config_quote_escape() {
+	# replace ' by '\'' for use in single quoted argument
+	echo "$1" | sed -e s,"'","'"'\\'"''",g
+}
+
+config_dump_option() {
+	printf "\t%s %s %s\n" $2 "$option" "'$(config_quote_escape "$1")'"
+}
+
+config_dump_section() {
+	local section="$1"
+	# don't forget options manipulated after config load!
+	local options=$(set | sed -n -e "/^CONFIG_${section}_/s,CONFIG_${section}_\([^=]*\)=.*,\1,p")
+	printf "\n%s %s %s\n" config "$(config_get "$section" TYPE)" "'$(config_quote_escape "$section")'"
+	local option
+	for option in $options; do
+		[ "$option" = TYPE ] && continue
+		expr "$option" : ".*_\(ITEM[0-9]\+\|LENGTH\)$" >/dev/null && continue
+		local val="$(config_get "$section" "$option")"
+		[ -z "$val" ] && continue
+		local len
+		config_get len "$section" "${option}_LENGTH"
+		if [ -z "$len" ]; then
+			config_dump_option "$val" option
+		else
+			config_list_foreach "$section" "$option" config_dump_option list
+		fi
+	done
+}
+
+# config_dump [section [...]]
+config_dump() {
+	[ -n "$*" ] && local CONFIG_SECTIONS="$*"
+	config_foreach config_dump_section
+}
+
+insert_modules() {
+	for m in $*; do
+		if [ -f /etc/modules.d/$m ]; then
+			sed 's/^[^#]/insmod &/' /etc/modules.d/$m | ash 2>&- || :
+		else
+			modprobe $m
+		fi
+	done
+}
+
+default_prerm() {
+	local name
+	name=$(basename ${1%.*})
+	[ -f /usr/lib/opkg/info/${name}.prerm-pkg ] && . /usr/lib/opkg/info/${name}.prerm-pkg
+	for i in `cat /usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do
+		$i disable
+		$i stop
+	done
+}
+
+default_postinst() {
+	local pkgname rusers ret
+	ret=0
+	pkgname=$(basename ${1%.*})
+	rusers=$(grep "Require-User:" ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.control)
+	[ -n "$rusers" ] && {
+		local user group uid gid
+		for a in $(echo $rusers | sed "s/Require-User://g"); do
+			user=""
+			group=""
+			for b in $(echo $a | sed "s/:/ /g"); do
+				local ugname ugid
+
+				ugname=$(echo $b | cut -d= -f1)
+				ugid=$(echo $b | cut -d= -f2)
+
+				[ -z "$user" ] && {
+					user=$ugname
+					uid=$ugid
+					continue
+				}
+
+				gid=$ugid
+				[ -n "$gid" ] && {
+					group_exists $ugname || group_add $ugname $gid
+				}
+
+				[ -z "$gid" ] && {
+					group_add_next $ugname
+					gid=$?
+				}
+
+				[ -z "$group" ] && {
+					user_exists $user || user_add $user "$uid" $gid
+					group=$ugname
+					continue
+				}
+
+				group_add_user $ugname $user
+			done
+		done
+	}
+
+	if [ -f ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.postinst-pkg ]; then
+		( . ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.postinst-pkg )
+		ret=$?
+	fi
+	[ -n "${IPKG_INSTROOT}" ] || rm -f /tmp/luci-indexcache 2>/dev/null
+
+	[ "$PKG_UPGRADE" = "1" ] || for i in `cat ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.list | grep "^/etc/init.d/"`; do
+		[ -n "${IPKG_INSTROOT}" ] && $(which bash) ${IPKG_INSTROOT}/etc/rc.common ${IPKG_INSTROOT}$i enable; \
+		[ -n "${IPKG_INSTROOT}" ] || {
+			$i enable
+			$i start
+		}
+	done
+	return $ret
+}
+
+include() {
+	local file
+
+	for file in $(ls $1/*.sh 2>/dev/null); do
+		. $file
+	done
+}
+
+find_mtd_index() {
+	local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"
+	local INDEX="${PART##mtd}"
+
+	echo ${INDEX}
+}
+
+find_mtd_part() {
+	local INDEX=$(find_mtd_index "$1")
+	local PREFIX=/dev/mtdblock
+
+	[ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/
+	echo "${INDEX:+$PREFIX$INDEX}"
+}
+
+group_add() {
+	local name="$1"
+	local gid="$2"
+	local rc
+	[ -f "${IPKG_INSTROOT}/etc/group" ] || return 1
+	[ -n "$IPKG_INSTROOT" ] || lock /var/lock/group
+	echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group
+	rc=$?
+	[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group
+	return $rc
+}
+
+group_exists() {
+	grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/group
+}
+
+group_add_next() {
+	local gid gids
+	gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
+	[ -n "$gid" ] && return $gid
+	gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
+	gid=100
+	while [ -n "$(echo $gids | grep $gid)" ] ; do
+	        gid=$((gid + 1))
+	done
+	group_add $1 $gid
+	return $gid
+}
+
+group_add_user() {
+	local grp delim=","
+	grp=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group)
+	[ -z "$(echo $grp | cut -d: -f4 | grep $2)" ] || return
+	[ -n "$(echo $grp | grep ":$")" ] && delim=""
+	[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
+	sed -i "s/$grp/$grp$delim$2/g" ${IPKG_INSTROOT}/etc/group
+	[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
+}
+
+user_add() {
+	local name="${1}"
+	local uid="${2}"
+	local gid="${3}"
+	local desc="${4:-$1}"
+	local home="${5:-/var/run/$1}"
+	local shell="${6:-/bin/false}"
+	local rc
+	[ -z "$uid" ] && {
+		uids=$(cat ${IPKG_INSTROOT}/etc/passwd | cut -d: -f3)
+		uid=100
+		while [ -n "$(echo $uids | grep $uid)" ] ; do
+		        uid=$((uid + 1))
+		done
+	}
+	[ -z "$gid" ] && gid=$uid
+	[ -f "${IPKG_INSTROOT}/etc/passwd" ] || return 1
+	[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
+	echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
+	echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow
+	rc=$?
+	[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
+	return $rc
+}
+
+user_exists() {
+	grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/passwd
+}
+
+[ -z "$IPKG_INSTROOT" -a -f /lib/config/uci.sh ] && . /lib/config/uci.sh
diff --git a/lib/functions/hyfi-debug.sh b/lib/functions/hyfi-debug.sh
new file mode 100755
index 0000000..0df021a
--- /dev/null
+++ b/lib/functions/hyfi-debug.sh
@@ -0,0 +1,57 @@
+if [ -n "${SERVICE_DEBUG_OUTPUT}" ]; then
+	[ "${SERVICE_DEBUG_OUTPUT}" -eq 1 ] && export SVCDBG="debug_"
+fi
+
+debug_service_start() {
+        local serv="`echo $1 | awk -F'/' '{print $NF}'`"
+
+        "$@" >/dev/console 2>/dev/console &
+        echo `ps | grep $1 | grep -v grep | awk '{print \$1}'`> /var/run/${serv}.pid
+}
+
+debug_service_stop() {
+        local serv="`echo $1 | awk -F'/' '{print $NF}'`"
+        local serv_pid="`ps | grep $1 | grep -v grep | awk '{print \$1}'`"
+
+        [ -z "$serv_pid" ] || kill $serv_pid
+        rm -f /var/run/${serv}.pid
+}
+
+hyfi_debug() {
+	if [ -n "$HYFI_DEBUG_OUTPUT" ]; then
+		if [ "$HYFI_DEBUG_OUTPUT" -gt 0 ]; then
+				echo "${1}: ""$2"> /dev/console
+		fi
+	fi
+}
+
+hyfi_echo() {
+	echo "${1}: ""$2"> /dev/console
+}
+
+hyfi_error() {
+	echo "${1}: ERROR: ""$2"> /dev/console
+}
+
+__LOCK=/var/run/`echo $0 | awk -F/ '{print $NF}'`${1}.lock
+
+__hyfi_trap_cb() {
+	hyfi_error $0 "unexpected termination"
+}
+
+# hyfi_lock
+# input: $1: (optional) lock suffix, $2: (optional) trap callback
+hyfi_lock() {
+	local trap_cb="$2"
+
+	__LOCK=/var/run/`echo $0 | awk -F/ '{print $NF}'`${1}.lock
+	lock $__LOCK
+	[ -z "$trap_cb" ] && trap_cb=__hyfi_trap_cb
+	trap $trap_cb INT TERM ABRT QUIT ALRM
+}
+
+# hyfi_unlock
+hyfi_unlock() {
+	trap - INT TERM ABRT QUIT ALRM
+	lock -u $__LOCK
+}
diff --git a/lib/functions/hyfi-iface.sh b/lib/functions/hyfi-iface.sh
new file mode 100755
index 0000000..e502eb1
--- /dev/null
+++ b/lib/functions/hyfi-iface.sh
@@ -0,0 +1,608 @@
+WLAN_DEVICES=
+WLAN_INCLUDED_DEVICES=
+WLAN_VLAN_DEVICES=
+WLAN_VLAN_STA_DEVICES=
+WLAN_DEVICE_NUM=
+ETHER_DEVICES=
+PLC_DEVICE=
+ALL_DEVICES=
+IFACE_VLANIDS=
+
+. /lib/functions/hyfi-debug.sh
+
+ieee1905managed_found=0
+ieee1905managed_bridge=""
+ieee1905managed_bridge2=""
+bound_bridge=""
+device_wlan=1
+backhaul_network="backhaul"
+traffic_separation_enabled=0
+traffic_separation_active=0
+iface_config=
+
+__hyfi_get_wlan_vifnum() {
+	local config="$1"
+	local iface network disabled
+	local phydev phydisabled
+
+	config_get network "$config" network
+	config_get disabled "$config" disabled '0'
+	config_get phydev "$config" device ""
+
+	if [ -z "$phydev" ]; then
+		return
+	fi
+
+	config_get phydisabled ${phydev} disabled 0
+	if [ $phydisabled -eq 0 -a "$2" = "$network" -a "$disabled" -eq 0 ]; then
+		WLAN_DEVICE_NUM=$((WLAN_DEVICE_NUM + 1))
+	fi
+}
+
+# hyfi_get_wlan_vifnum()
+# input: $1 IEEE1905.1 managed bridge interface
+# output: $2 number of WLAN interfaces bound to the bridge
+hyfi_get_wlan_vifnum() {
+	local ieee1905managed="$1"
+
+	WLAN_DEVICE_NUM=0
+	config_load wireless
+	config_foreach __hyfi_get_wlan_vifnum wifi-iface $ieee1905managed
+
+	eval "$2='${WLAN_DEVICE_NUM}'"
+}
+
+__hyfi_get_iface_vlanids() {
+	local config="$1"
+	local loc_iface loc_vid
+
+	config_get loc_iface "$config" ifname
+	config_get loc_vid "$config" vid
+
+	if [ "$loc_iface" -a "$loc_vid"  ]; then
+		IFACE_VLANIDS="${IFACE_VLANIDS}${IFACE_VLANIDS:+","}${loc_iface}.${loc_vid}"
+	fi
+}
+
+hyfi_get_iface_vlanids() {
+	IFACE_VLANIDS=""
+
+	config_load hyd
+	config_foreach __hyfi_get_iface_vlanids Vlanid
+
+	eval "$1='${IFACE_VLANIDS}'"
+}
+
+__hyfi_get_wlan_ifaces() {
+	local config="$1"
+	local iface network disabled device
+
+	config_get iface "$config" ifname
+	config_get network "$config" network
+	config_get disabled "$config" disabled '0'
+	config_get device "$config" device
+
+	if [ -n "$iface" -a "$disabled" -eq 0 ]; then
+		if [ "$network" = "$2" ]; then
+			WLAN_DEVICES="${WLAN_DEVICES}${WLAN_DEVICES:+","}${iface}@${device}:WLAN"
+		fi
+		# include network=backhaul for guest network support
+		if [ "$network" = "$2" -o "$network" = "backhaul" ]; then
+			WLAN_INCLUDED_DEVICES="${WLAN_INCLUDED_DEVICES}${WLAN_INCLUDED_DEVICES:+","}${device}:${iface}"
+		fi
+	fi
+}
+
+# hyfi_get_wlan_ifaces()
+# input: $1 IEEE1905.1 managed bridge interface
+# output: $2 List of all WLAN interfaces bound to the bridge
+# output: $3 List of all WLAN devices/radios bound to the bridge
+hyfi_get_wlan_ifaces() {
+	local ieee1905managed="$1"
+
+	WLAN_DEVICES=""
+	WLAN_INCLUDED_DEVICES=""
+	hyfi_network_sync
+	config_load wireless
+	config_foreach __hyfi_get_wlan_ifaces wifi-iface $ieee1905managed
+
+	eval "$2='${WLAN_DEVICES}'"
+	eval "$3='${WLAN_INCLUDED_DEVICES}'"
+}
+
+__hyfi_get_switch_iface() {
+	local loc_switch_iface loc_eswitch_support="0"
+	local ref_design
+
+	config_load hyd
+	config_get loc_switch_iface config SwitchInterface ""
+
+	if [ -z "$loc_switch_iface" ]; then
+		eval "$1=''"
+		eval "$2='$loc_eswitch_support'" 
+		return
+	fi
+	if [ "$loc_switch_iface" = "auto" ]; then
+		ref_design=`cat /tmp/sysinfo/board_name`
+
+		# List of supported reference designs. For other designs
+		# either add to cases, or setup SwitchInterface.
+		case "$ref_design" in
+		ap145|ap147|ap148*|db149|ap151)
+		# S17c switch
+		# ap148_1xx is also a supported board type
+			loc_switch_iface="eth1"
+			loc_eswitch_support="1"
+			;;
+		ap160|ap161)
+		# S17c switch support is disabled even though interface is identified
+			loc_switch_iface="eth1"
+			loc_eswitch_support="0"
+			;;
+		ap152|apjet01)
+			loc_switch_iface="eth0"
+			loc_eswitch_support="0"
+			;;
+		ap-dk*)
+		# Malibu switch with a single host port connected in a VLAN
+		# tagged manner. Since the switch config indicates the host
+		# port is tagged (as it is from the switch's perspective) but
+		# the host interfaces are not VLAN tagged, a special option
+		# is needed to force the interface names to be untagged.
+			loc_switch_iface="eth1"
+			force_untagged_iface=1
+			loc_eswitch_support="0"
+			;;
+		ap135)
+			loc_switch_iface="eth1"
+			loc_eswitch_support="0"
+			;;
+		*)
+			loc_switch_iface=""
+			;;
+		esac
+	fi
+
+	local loc_switch_cpu_port
+	__hyfi_get_switch_cpu_port loc_switch_cpu_port
+
+	local lan_vid
+	__hyfi_get_switch_lan_vid lan_vid
+
+	if [ -z "$switch_cpu_port_tagged" -o -n "$force_untagged_iface" ]; then
+		eval "$1='$loc_switch_iface'"
+	else
+		eval "$1='${loc_switch_iface}.${lan_vid}'"
+	fi
+
+	eval "$2='$loc_eswitch_support'"
+}
+
+__hyfi_get_switch_lan_vid() {
+	local loc_lan_vid
+
+	config_load hyd
+	config_get loc_lan_vid config SwitchLanVid ""
+
+	eval "$1='$loc_lan_vid'"
+}
+
+__hyfi_get_switch_cpu_port_iterate() {
+	config_get vlan "$1" "vlan"
+	config_get ports "$1" "ports"
+
+	if [ "${vlan}" = "$2" ]; then
+		switch_cpu_port=`echo ${ports} |sed 's/t//g' |cut -f 1 -d " "`
+		switch_cpu_port_tagged=`echo ${ports} |grep t`
+	fi
+}
+
+__hyfi_get_switch_cpu_port() {
+	local lan_vid
+	__hyfi_get_switch_lan_vid lan_vid
+
+	config_load network
+	config_foreach __hyfi_get_switch_cpu_port_iterate switch_vlan $lan_vid
+
+	eval "$1='$switch_cpu_port'"
+}
+
+__hyfi_get_ether_ifaces() {
+	local config="$1"
+	local ifnames network plciface bridge_name
+
+	#config_get ifnames "$config" device
+        ifnames=`uci get network.$1.ifname`
+	config_get bridge_name "$config" ifname
+	config_load plc
+	config_get plciface config PlcIfname
+
+
+	local switch_iface eswitch_support
+	__hyfi_get_switch_iface switch_iface eswitch_support
+
+	if [ "$2" = "$config" ]; then
+		# Check the ifnames parameter is populated correctly
+		if [ -z "$ifnames" ]; then
+			# If the ifnames parameter doesn't contain the device list, it should
+			# be present in the bridge_name.  However, it's possible a race
+			# condition occured, and neither parameter contains the device list.
+			# Check the device list again if the bridge_name actually contains the
+			# name of the bridge.
+			if echo $bridge_name | grep -q br-; then
+				hyfi_debug hyiface "Missing device names, and ifname matches bridge, fetching device names again"
+				config_get ifnames "$config" device
+				if [ -z "$ifnames" ]; then
+					ifnames=`uci get "network.$1.ifname"`
+					hyfi_error hyiface "Device names missing, defaulting to $ifnames"
+				else
+					hyfi_debug hyiface "Device names now populated correctly"
+				fi
+			else
+				ifnames=$bridge_name
+				hyfi_debug hyiface "Missing device names, so using ifname parameter instead"
+			fi
+		fi
+
+		for iface in $ifnames; do
+			[ "$iface" = "$plciface" ] && continue
+
+			if [ "$traffic_separation_enabled" -gt 0 ] && \
+				[ "$traffic_separation_active" -gt 0 ]; then
+					if __hyfi_is_vlan_iface $iface; then
+						if __hyfi_is_device_wlan $iface; then
+							continue
+						fi
+					fi
+			fi
+
+			if [ "$iface" = "$switch_iface" -a "$eswitch_support" = "1" ]; then
+				ETHER_DEVICES="${ETHER_DEVICES}${ETHER_DEVICES:+","}${iface}:ESWITCH"
+			else
+				ETHER_DEVICES="${ETHER_DEVICES}${ETHER_DEVICES:+","}${iface}:ETHER"
+			fi
+		done
+	fi
+}
+
+# hyfi_get_ether_ifaces()
+# input: $1 IEEE1905.1 managed bridge interface
+# output: $2 List of all Ethernet interfaces bound to the bridge
+hyfi_get_ether_ifaces() {
+	local ieee1905managed="$1"
+
+	ETHER_DEVICES=""
+	hyfi_network_sync
+
+	config_load repacd
+	config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+	config_get traffic_separation_active repacd TrafficSeparationActive '0'
+	config_get backhaul_network repacd NetworkBackhaul 'backhaul'
+
+	config_load network
+	config_foreach __hyfi_get_ether_ifaces interface $ieee1905managed
+
+	eval "$2='${ETHER_DEVICES}'"
+}
+
+__hyfi_is_vlan_iface() {
+	local iface="$1"
+
+	echo "$iface" | grep '\.' >/dev/null 2>&1
+	if [ "$?" -eq "0" ]; then
+		return 0
+	fi
+
+	return 1
+}
+
+__hyfi_iterate_wlan_ifaces() {
+	local config="$1"
+	local iface network disabled
+	local interface
+
+	config_get iface "$config" ifname
+	config_get network "$config" network
+	config_get disabled "$config" disabled '0'
+
+	if [ -n "$iface" -a "$backhaul_network" = "$network" -a "$disabled" -eq 0 ]; then
+		interface=`echo "$2" | cut -d '.' -f1`
+		if [ "$interface" = "$iface" ]; then
+			eval "$3='0'"
+			eval "$4=$config"
+		fi
+	fi
+}
+
+__hyfi_is_device_wlan() {
+	local iface="$1"
+	device_wlan=1
+
+	if [ -n "$backhaul_network" ]; then
+		config_load wireless
+		config_foreach __hyfi_iterate_wlan_ifaces wifi-iface $iface device_wlan iface_config
+	fi
+
+	return $device_wlan
+}
+
+__hyfi_get_wlan_vlan_ifaces() {
+	local config="$1"
+	local ifnames bridge_name
+
+	config_get ifnames "$config" device
+	config_get bridge_name "$config" ifname
+
+	if [ "$2" = "$config" ]; then
+                #initially VLAN interfaces are added using vconfig and brctl tool 
+                #to avoid multiple restarts.VLAN interfaces added this way are not 
+                #detected by config_get, so using direct command here.
+		ifnames=`uci get "network.$1.ifname"`
+		for iface in $ifnames; do
+			if __hyfi_is_vlan_iface $iface; then
+				if __hyfi_is_device_wlan $iface; then
+					WLAN_VLAN_DEVICES="${WLAN_VLAN_DEVICES}${WLAN_VLAN_DEVICES:+","}${iface}:WLAN_VLAN"
+				fi
+			fi
+		done
+	fi
+}
+
+__hyfi_get_wlan_vlan_sta_ifaces() {
+	local config="$1"
+	local ifnames bridge_name
+	local mode
+
+	config_get ifnames "$config" device
+	config_get bridge_name "$config" ifname
+
+	if [ "$2" = "$config" ]; then
+		ifnames=`uci get "network.$1.ifname"`
+		for iface in $ifnames; do
+			if __hyfi_is_vlan_iface $iface; then
+				if __hyfi_is_device_wlan $iface; then
+					config_load wireless
+					config_get mode "$iface_config" mode
+					if [ "$mode" = "sta" ]; then
+						WLAN_VLAN_STA_DEVICES="${WLAN_VLAN_STA_DEVICES}${WLAN_VLAN_STA_DEVICES:+","}${iface}"
+					fi
+				fi
+			fi
+		done
+	fi
+}
+
+hyfi_get_wlan_vlan_ifaces() {
+	local ieee1905managed="$1"
+
+	WLAN_VLAN_DEVICES=""
+	hyfi_network_sync
+
+	config_load repacd
+	config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+	config_get traffic_separation_active repacd TrafficSeparationActive '0'
+	config_get backhaul_network repacd NetworkBackhaul 'backhaul'
+	if [ "$traffic_separation_enabled" -gt 0 ] && \
+		[ "$traffic_separation_active" -gt 0 ]; then
+		config_load network
+		config_foreach __hyfi_get_wlan_vlan_ifaces interface $ieee1905managed
+	fi
+
+	eval "$2='${WLAN_VLAN_DEVICES}'"
+
+}
+
+hyfi_get_wlan_vlan_sta_ifaces() {
+	local ieee1905managed="$1"
+
+	WLAN_VLAN_STA_DEVICES=""
+	hyfi_network_sync
+
+	config_load repacd
+	config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+	config_get traffic_separation_active repacd TrafficSeparationActive '0'
+	config_get backhaul_network repacd NetworkBackhaul 'backhaul'
+	if [ "$traffic_separation_enabled" -gt 0 ] && \
+		[ "$traffic_separation_active" -gt 0 ]; then
+		config_load network
+		config_foreach __hyfi_get_wlan_vlan_sta_ifaces interface $ieee1905managed
+	fi
+
+	eval "$2='${WLAN_VLAN_STA_DEVICES}'"
+
+}
+
+__hyfi_get_plc_iface() {
+	local plciface iface bridge_name
+	local ieee1905managed="$1"
+
+	config_load plc
+	config_get plciface config PlcIfname
+
+	[ -z "$plciface" ] && return
+
+    config_get bridge_name "$ieee1905managed" ifname
+	config_load network
+	config_get ifnames $ieee1905managed device
+
+    # Check the ifnames parameter is populated correctly
+    if [ -z "$ifnames" ]; then
+        # If the ifnames parameter doesn't contain the device list, it should
+        # be present in the bridge_name.  However, it's possible a race
+        # condition occured, and neither parameter contains the device list.
+        # Check the device list again if the bridge_name actually contains the
+        # name of the bridge.
+        if echo $bridge_name | grep -q br-; then
+            hyfi_debug hyiface "Missing device names, and ifname matches bridge, fetching device names again"
+            config_get ifnames "$ieee1905managed" device
+            if [ -z "$ifnames" ]; then
+                ifnames=`uci get "network.$1.ifname"`
+                hyfi_error hyiface "Device names missing, defaulting to $ifnames"
+            else
+                hyfi_debug hyiface "Device names now populated correctly"
+            fi
+        else
+            ifnames=$bridge_name
+            hyfi_debug hyiface "Missing device names, so using ifname parameter instead"
+        fi
+    fi
+
+	for iface in $ifnames; do
+		if [ "$iface" = "$plciface" ]; then
+			PLC_DEVICE=${plciface}:PLC
+			return
+		fi
+	done
+}
+
+# hyfi_get_plc_iface()
+# input: $1 IEEE1905.1 managed bridge interface
+# output: $2 PLC interface bound to the bridge
+hyfi_get_plc_iface() {
+	local ieee1905managed="$1"
+
+	PLC_DEVICE=""
+	hyfi_network_sync
+
+	__hyfi_get_plc_iface $ieee1905managed
+	eval "$2='${PLC_DEVICE}'"
+}
+
+# hyfi_get_ifaces()
+# input: $1 IEEE1905.1 managed bridge interface
+# output: $2 List of ALL interface bound to the bridge
+# output: $3 List of ALL WLAN devices/radios bound to the bridge
+hyfi_get_ifaces() {
+	local ieee1905managed="$1"
+
+	WLAN_DEVICES=""
+	WLAN_INCLUDED_DEVICES=""
+	WLAN_VLAN_DEVICES=""
+	ETHER_DEVICES=""
+	PLC_DEVICE=""
+	hyfi_network_sync
+
+	config_load repacd
+	config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+	config_get traffic_separation_active repacd TrafficSeparationActive '0'
+	config_get backhaul_network repacd NetworkBackhaul 'backhaul'
+
+	config_load network
+	config_foreach __hyfi_get_ether_ifaces interface $ieee1905managed
+
+	config_load wireless
+	config_foreach __hyfi_get_wlan_ifaces wifi-iface $ieee1905managed
+
+	if [ "$traffic_separation_enabled" -gt 0 ] && \
+		[ "$traffic_separation_active" -gt 0 ]; then
+		config_load network
+		config_foreach __hyfi_get_wlan_vlan_ifaces interface $ieee1905managed
+	fi
+
+	__hyfi_get_plc_iface $ieee1905managed
+
+	ALL_DEVICES=$WLAN_DEVICES
+	if [ -n "$ETHER_DEVICES" ]; then
+		[ -z "$ALL_DEVICES" ] || ALL_DEVICES="${ALL_DEVICES},"
+		ALL_DEVICES="${ALL_DEVICES}${ETHER_DEVICES}"
+	fi
+	if [ -n "$PLC_DEVICE" ]; then
+		[ -z "$ALL_DEVICES" ] || ALL_DEVICES="${ALL_DEVICES},"
+		ALL_DEVICES="${ALL_DEVICES}${PLC_DEVICE}"
+	fi
+	if [ -n "$WLAN_VLAN_DEVICES" ]; then
+		[ -z "$ALL_DEVICES" ] || ALL_DEVICES="${ALL_DEVICES},"
+		ALL_DEVICES="${ALL_DEVICES}${WLAN_VLAN_DEVICES}"
+	fi
+
+	eval "$2='${ALL_DEVICES}'"
+	eval "$3='${WLAN_INCLUDED_DEVICES}'"
+}
+
+__hyfi_iterate_networks() {
+	local config="$1"
+	local type ieee1905managed
+
+	config_get type "$config" type
+	[ -z "$type" -o ! "$type" = "bridge" ] && return
+
+	config_get_bool ieee1905managed "$config" ieee1905managed
+
+	[ -z "$ieee1905managed" ] && return
+
+	if [ "$ieee1905managed" -eq "1" ]; then
+		ieee1905managed_found=1
+		if [ -n "$ieee1905managed_bridge" ]
+		then
+			ieee1905managed_bridge2="$config"
+		else
+			ieee1905managed_bridge="$config"
+		fi
+	fi
+}
+
+__hyfi_iterate_networks2() {
+	local config="$1"
+	local my_iface="$2"
+	local ifnames iface type
+
+	[ -n "$bound_bridge" ] && return
+
+	config_get type "$config" type
+	[ -z "$type" -o ! "$type" = "bridge" ] && return
+
+	config_get ifnames "$config" device
+
+	for iface in $ifnames; do
+		if [ "$iface" = "$my_iface" ]; then
+			bound_bridge=br-$config
+			return
+		fi
+	done
+}
+
+# hyfi_get_ieee1905_managed_iface()
+# output: $1 IEEE1905.1 managed bridge interface
+# output: $2 2nd IEEE1905.1 managed bridge interface
+# Note: If no entry exists, the function will set the "lan"
+# interface as the default managed bridge
+hyfi_get_ieee1905_managed_iface() {
+	ieee1905managed_found=0
+	ieee1905managed_bridge=""
+	ieee1905managed_bridge2=""
+
+	config_load network
+	config_foreach __hyfi_iterate_networks interface
+	eval "$1='$ieee1905managed_bridge'"
+	eval "$2='$ieee1905managed_bridge2'"
+	[ "$ieee1905managed_found" -eq "1" ] && return
+
+	ieee1905managed_bridge="lan"
+	uci_set network $ieee1905managed_bridge ieee1905managed 1
+	uci_commit network
+
+	config_load network
+	__hyfi_iterate_networks $ieee1905managed_bridge
+
+	eval "$1='$ieee1905managed_bridge'"
+}
+
+# hyfi_strip_list
+# input: $1 list of interfaces with attached type
+# output: $2 same list with type stripped
+hyfi_strip_list() {
+	eval "$2='`echo $1 | sed 's/@[a-zA-Z0-9]*//g' | sed 's/:[A-Z]*,/ /g' | sed 's/:[A-Z]*//g'`'"
+}
+
+# hyfi_get_bridge_from_iface()
+# input: $1 interface name
+# output: $2 bridge the interface is bound to
+hyfi_get_bridge_from_iface() {
+	bound_bridge=""
+	local iface="$1"
+
+	config_load network
+	config_foreach __hyfi_iterate_networks2 interface $iface
+
+	eval "$2='$bound_bridge'"
+}
diff --git a/lib/functions/hyfi-network.sh b/lib/functions/hyfi-network.sh
new file mode 100755
index 0000000..cfda977
--- /dev/null
+++ b/lib/functions/hyfi-network.sh
@@ -0,0 +1,22 @@
+hyfi_network_sync() {
+        lock -w /var/run/hyfi_network.lock
+}
+
+hyfi_network_restart() {
+	trap __hyfi_trap_cb INT ABRT QUIT ALRM
+
+	lock /var/run/hyfi_network.lock
+	hyfi_echo "hyfi network" "process $0 ($$) requested network restart"
+	/etc/init.d/network restart
+
+	local radios=`uci show wireless | grep ".disabled=" | grep -v "@" | wc -l`
+	local vaps=`uci show wireless | grep "].disabled=0" | wc -l`
+	if [ $vaps -gt $radios ]; then
+		# Workaround for Wi-Fi, needs a clean environment
+		env -i /sbin/wifi
+	fi
+
+	lock -u /var/run/hyfi_network.lock
+
+	trap - INT ABRT QUIT ALRM
+}
diff --git a/lib/functions/lbd-config.sh b/lib/functions/lbd-config.sh
new file mode 100755
index 0000000..5b9c5a4
--- /dev/null
+++ b/lib/functions/lbd-config.sh
@@ -0,0 +1,439 @@
+#
+# @@-COPYRIGHT-START-@@
+#
+# Copyright (c) 2015-2018 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2015-2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#
+# @@-COPYRIGHT-END-@@
+#
+
+. /lib/functions/whc-debug.sh
+. /lib/functions/whc-iface.sh
+
+# Append a config parameter to the file
+# input: $1 - parameter string to append (key and value)
+# input: $2 - filename to append to
+__lbd_cfg_append() {
+	echo "$1" >> "$2"
+}
+
+# Append a config parameter to the file preceded by a newline
+# input: $1 - parameter string to append (key and value)
+# input: $2 - filename to append to
+__lbd_cfg_nl_append() {
+	echo "" >> "$2"
+	echo "$1" >> "$2"
+}
+
+# __lbd_cfg_add_str <section> <option> <filename>
+__lbd_cfg_add_str() {
+	local key="$2"
+	local section="$1"
+	local option="$2"
+	local filename="$3"
+
+	config_get val "${section}" "${option}"
+	[ -n "${val}" ] && __lbd_cfg_append "${key}=${val}" $filename
+}
+
+# Add a string to the config file where the key in the UCI config is
+# different from the config in the generated config.
+# input: $1 - section name in UCI
+# input: $2 - parameter name in UCI
+# input: $3 - parameter name in the generated configuration
+# input: $4 - output filename
+__lbd_cfg_add_str_new_key() {
+	local section="$1"
+	local option="$2"
+	local newkey="$3"
+	local filename="$4"
+
+	config_get val "${section}" "${option}"
+	[ -n "${val}" ] && __lbd_cfg_append "${newkey}=${val}" $filename
+}
+
+# Add AP Steering threshold. If band specific parameter is present
+# use that, else use generic steering threshold.
+# input: $1 - section name in UCI
+# input: $2 - band specific steering parameter
+# input: $3 - generic steering parameter
+# input: $4 - parameter name in the generated configuration
+# input: $5 - output filename
+__lbd_cfg_add_ap_steering_thresh() {
+	local section="$1"
+	local band_option="$2"
+	local gen_option="$3"
+	local newkey="$4"
+	local filename="$5"
+	local val
+
+	config_get val "${section}" "${band_option}"
+	if [ -n "${val}" ]; then
+		__lbd_cfg_add_str_new_key "${section}" "${band_option}" "${newkey}" $filename
+	else
+		__lbd_cfg_add_str_new_key "${section}" "${gen_option}" "${newkey}" $filename
+	fi
+}
+
+# Given two (section, key) pairs, subtract the second value from the first
+# to arrive at an RSSI value and use that for the key being generated.
+# This is meant to convert an RSSI on one band to an RSSI on the
+# other band, albeit in such a way that is the mirror image of the estimates
+# performed by lbd.
+# To prevent value underflow/overflow, use 0 for the key if the base value
+# is smaller than the adjust value; use 255 if the base value subtracts the
+# adjust value is greater than 255
+#
+# The last parameter is the file to output.
+__lbd_cfg_add_rssi_est_str() {
+	local basevalsection="$1"
+	local basevalkey="$2"
+	local adjvalsection="$3"
+	local adjvalkey="$4"
+	local newkey="$5"
+	local filename="$6"
+
+	config_get baseval "${basevalsection}" "${basevalkey}"
+	config_get adjval  "${adjvalsection}" "${adjvalkey}"
+	if [ -n "${baseval}" ] && [ -n "${adjval}" ]; then
+		if [ "${baseval}" -gt "${adjval}" ] && \
+		   [ "${baseval}" -lt "$((255 + $adjval))" ]; then
+			val="$(($baseval - $adjval))"
+		elif [ "${baseval}" -le "${adjval}" ]; then
+			val="0"
+		elif [ "${baseval}" -ge "$((255 + $adjval))" ]; then
+			val="255"
+		fi
+	fi
+
+	[ -n "${val}" ] && __lbd_cfg_append "${newkey}=${val}" $filename
+}
+
+# Add the appropriate header for the lbd config params
+# input: $1 - filename: the name of the file to write
+# input: $2 - append_only: if non-empty, append to the file rather than
+#                          creating a new file
+__lbd_cfg_add_head() {
+	local filename=$1
+	local append_only=$2
+
+	if [ -n "$append_only" ]; then
+		echo ";"	>> "$filename"
+		__lbd_cfg_append '' $filename  # extra blank lines to demark the WLB params
+		__lbd_cfg_append ';  ' $filename
+		__lbd_cfg_append ';  Automatically generated Wi-Fi load balancing configuration' $filename
+	else
+		echo ";"	> "$filename"
+		__lbd_cfg_append ';  Automatically generated lbd config file,do not change it.' $filename
+	fi
+
+	__lbd_cfg_append ';' $filename
+	__lbd_cfg_append ';WLANIF		list of wlan interfaces' $filename
+	__lbd_cfg_append ';WLANIF2G		wlan driver interface for 2.4 GHz band' $filename
+	__lbd_cfg_append ';WLANIF5G		wlan driver interface for 5 GHz band' $filename
+	__lbd_cfg_append ';STADB:		station database' $filename
+	__lbd_cfg_append ';STAMON:		station monitor' $filename
+	__lbd_cfg_append ';BANDMON:		band monitor' $filename
+	__lbd_cfg_append ';ESTIMATOR:		rate estimator' $filename
+	__lbd_cfg_append ';STEEREXEC:		steering executor' $filename
+	__lbd_cfg_append ';STEERALG:		steering algorithm' $filename
+	__lbd_cfg_append ';DIAGLOG:		diagnostic logging' $filename
+}
+
+# Add the list of managed interfaces to the configuration file.
+# input: $1 - the name of the config file to write to
+__lbd_cfg_add_interface() {
+	local filename="$1"
+	local br_name="$2"
+	local section="config"
+	local option="MatchingSSID"
+	local all_wlan_ifaces
+	local all_wlan_ifaces_excluded
+	local ssid_to_match
+
+	#init the interface lists
+	whc_init_wlan_interface_list
+
+	# Get the list of wlan interfaces, seperated by comma
+	config_list_foreach "${section}" "${option}" whc_get_wlan_ifaces all_wlan_ifaces ssid_to_match "$br_name"
+
+	# get the excluded interface list
+	if [ ! -z "$ssid_to_match" ]; then
+		whc_get_wlan_ifaces_excl all_wlan_ifaces_excluded
+	fi
+
+	__lbd_cfg_append 'WlanInterfaces='$all_wlan_ifaces $filename
+	__lbd_cfg_append 'WlanInterfacesExcluded='$all_wlan_ifaces_excluded $filename
+}
+
+# Add IAS interference detection curve config parameters to the configuration file.
+# input: $1 - the name of the config file to write to
+__lbd_cfg_add_ias_curve() {
+	local filename=$1
+	for section in "IASCurve_24G_20M_1SS" "IASCurve_24G_20M_2SS" "IASCurve_5G_40M_1SS" \
+		       "IASCurve_5G_40M_2SS" "IASCurve_5G_80M_1SS" "IASCurve_5G_80M_2SS"
+	do
+		__lbd_cfg_add_str_new_key	$section	Degree0		$section"_d0"	$filename
+		__lbd_cfg_add_str_new_key	$section	RSSIDegree1	$section"_rd1"	$filename
+		__lbd_cfg_add_str_new_key	$section	MCSDegree1	$section"_md1"	$filename
+		__lbd_cfg_add_str_new_key	$section	RSSIDegree2	$section"_rd2"	$filename
+		__lbd_cfg_add_str_new_key	$section	RSSIMCSDegree1	$section"_rmd1"	$filename
+		__lbd_cfg_add_str_new_key	$section	MCSDegree2	$section"_md2"	$filename
+	done
+}
+
+lbd_create_config() {
+	local filename=$1
+	local multi_ap_mode=$2
+	local multi_ap_cap=0
+	local br_name=""
+	if [ -n "$multi_ap_mode" ]; then
+		multi_ap_cap=$3
+		br_name=$4
+	fi
+
+	config_load 'lbd'
+	__lbd_cfg_add_head $filename $multi_ap_mode # append config instead of truncating in multi AP mode
+
+	__lbd_cfg_nl_append '[WLANIF]' $filename
+	__lbd_cfg_add_interface $filename $br_name
+
+	if [ -n "$multi_ap_mode" ]; then
+		# Only makes sense in multi-AP mode (since the single-AP daemon would
+		# be useless if it is not managing any AP interfaces).
+		__lbd_cfg_add_str	config_Adv	AllowZeroAPInterfaces $filename
+	fi
+
+	__lbd_cfg_nl_append '[WLANIF2G]' $filename
+	__lbd_cfg_add_str_new_key	IAS	Enable_W2 InterferenceDetectionEnable $filename
+	__lbd_cfg_add_str_new_key	IdleSteer	NormalInactTimeout	InactIdleThreshold $filename
+	__lbd_cfg_add_str_new_key	IdleSteer	OverloadInactTimeout	InactOverloadThreshold $filename
+	__lbd_cfg_add_str	IdleSteer	InactCheckInterval $filename
+	__lbd_cfg_add_str   IdleSteer   AuthAllow $filename
+	__lbd_cfg_add_str   config   BlacklistOtherESS $filename
+	__lbd_cfg_add_rssi_est_str	IdleSteer	RSSISteeringPoint_UG	Estimator_Adv	RSSIDiff_EstW5FromW2	InactRSSIXingHighThreshold $filename
+	__lbd_cfg_add_str	SteerExec_Adv	LowRSSIXingThreshold $filename
+	__lbd_cfg_add_str	Estimator_Adv	BcnrptActiveDuration $filename
+	__lbd_cfg_add_str	Estimator_Adv	BcnrptPassiveDuration $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	TxRateXingThreshold_UG	HighTxRateXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	RateRSSIXingThreshold_UG	HighRateRSSIXingThreshold $filename
+	__lbd_cfg_add_str   config   InactDetectionFromTx $filename
+	if [ -n "$multi_ap_mode" ]; then
+		# Only include AP steering parameters for multi-AP setup
+		if [ "$multi_ap_mode" = 'map' ]; then
+			__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_SIG_W2	LowRSSIAPSteerThreshold_SIG	LowRSSIAPSteeringThreshold	"$filename"
+		else
+			if [ "$multi_ap_cap" -gt 0 ]; then
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_CAP_W2	LowRSSIAPSteerThreshold_CAP	LowRSSIAPSteeringThreshold	"$filename"
+			else
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_RE_W2	LowRSSIAPSteerThreshold_RE	LowRSSIAPSteeringThreshold	"$filename"
+			fi
+		fi
+	else
+		# Only include MU check interval to enable ACS report in single-AP setup
+		__lbd_cfg_add_str_new_key	BandMonitor_Adv	MUCheckInterval_W2	MUCheckInterval $filename
+		__lbd_cfg_add_str	Offload		MUAvgPeriod $filename
+	fi
+	__lbd_cfg_add_str	SteerExec_Adv	Delay24GProbeRSSIThreshold $filename
+	__lbd_cfg_add_str	SteerExec_Adv	Delay24GProbeTimeWindow $filename
+	__lbd_cfg_add_str	SteerExec_Adv	Delay24GProbeMinReqCount $filename
+
+	__lbd_cfg_nl_append '[WLANIF5G]' $filename
+	__lbd_cfg_add_str_new_key	IAS	Enable_W5 InterferenceDetectionEnable $filename
+	__lbd_cfg_add_str_new_key	IdleSteer	NormalInactTimeout	InactIdleThreshold $filename
+	__lbd_cfg_add_str_new_key	IdleSteer	OverloadInactTimeout	InactOverloadThreshold $filename
+	__lbd_cfg_add_str	IdleSteer	InactCheckInterval $filename
+	__lbd_cfg_add_str   IdleSteer   AuthAllow $filename
+	__lbd_cfg_add_str   config   BlacklistOtherESS $filename
+	__lbd_cfg_add_str_new_key	IdleSteer	RSSISteeringPoint_UG	InactRSSIXingHighThreshold $filename
+	__lbd_cfg_add_rssi_est_str	IdleSteer	RSSISteeringPoint_DG	Estimator_Adv	RSSIDiff_EstW2FromW5	InactRSSIXingLowThreshold $filename
+	__lbd_cfg_add_str	SteerExec_Adv	LowRSSIXingThreshold $filename
+	__lbd_cfg_add_str	Estimator_Adv	BcnrptActiveDuration $filename
+	__lbd_cfg_add_str	Estimator_Adv	BcnrptPassiveDuration $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	TxRateXingThreshold_DG	LowTxRateXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	RateRSSIXingThreshold_DG	LowRateRSSIXingThreshold $filename
+	__lbd_cfg_add_str   config   InactDetectionFromTx $filename
+	if [ -n "$multi_ap_mode" ]; then
+		# Only include AP steering parameters for multi-AP setup
+		if [ "$multi_ap_mode" = 'map' ]; then
+			__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_SIG_W5	LowRSSIAPSteerThreshold_SIG	LowRSSIAPSteeringThreshold	"$filename"
+		else
+			if [ "$multi_ap_cap" -gt 0 ]; then
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_CAP_W5	LowRSSIAPSteerThreshold_CAP	LowRSSIAPSteeringThreshold	"$filename"
+			else
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_RE_W5	LowRSSIAPSteerThreshold_RE	LowRSSIAPSteeringThreshold	"$filename"
+			fi
+		fi
+	else
+		# Only include MU check interval to enable ACS report in single-AP setup
+		__lbd_cfg_add_str_new_key	BandMonitor_Adv	MUCheckInterval_W5	MUCheckInterval $filename
+		__lbd_cfg_add_str	Offload		MUAvgPeriod $filename
+	fi
+
+	__lbd_cfg_nl_append '[STADB]' $filename
+	__lbd_cfg_add_str	StaDB		IncludeOutOfNetwork $filename
+	__lbd_cfg_add_str	StaDB		TrackRemoteAssoc $filename
+	__lbd_cfg_add_str	StaDB_Adv	AgingSizeThreshold $filename
+	__lbd_cfg_add_str	StaDB_Adv	AgingFrequency $filename
+	__lbd_cfg_add_str	StaDB_Adv	OutOfNetworkMaxAge $filename
+	__lbd_cfg_add_str	StaDB_Adv	InNetworkMaxAge $filename
+	__lbd_cfg_add_str_new_key	config_Adv	AgeLimit	ProbeMaxInterval $filename
+	if [ -n "$multi_ap_mode" ]; then
+		# Only set number of supported remote BSSes for multi-AP setup
+		__lbd_cfg_add_str	StaDB_Adv	NumNonServingBSSes		$filename
+	fi
+	__lbd_cfg_add_str	StaDB		MarkAdvClientAsDualBand $filename
+	__lbd_cfg_add_str	StaDB_Adv	PopulateNonServingPHYInfo $filename
+	__lbd_cfg_add_str   StaDB_Adv   LegacyUpgradeAllowedCnt $filename
+	__lbd_cfg_add_str   StaDB_Adv   LegacyUpgradeMonitorDur $filename
+	__lbd_cfg_add_str_new_key	StaDB	DisallowSteeringStaFile DisallowSteeringStaListFile $filename
+	__lbd_cfg_add_str	StaDB_Adv	MinAssocAgeForStatsAssocUpdate $filename
+
+	__lbd_cfg_nl_append '[STAMON]' $filename
+	__lbd_cfg_add_str	StaMonitor_Adv	RSSIMeasureSamples_W2 $filename
+	__lbd_cfg_add_str	StaMonitor_Adv	RSSIMeasureSamples_W5 $filename
+	__lbd_cfg_add_str	config_Adv	AgeLimit $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	TxRateXingThreshold_UG	HighTxRateXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	RateRSSIXingThreshold_UG	HighRateRSSIXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	TxRateXingThreshold_DG	LowTxRateXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	RateRSSIXingThreshold_DG	LowRateRSSIXingThreshold $filename
+	if [ -n "$multi_ap_mode" ]; then
+		# Parameters only relevant for multi-AP setup
+		__lbd_cfg_add_str	IdleSteer	RSSISteeringPoint_DG	$filename
+		if [ "$multi_ap_mode" = 'map' ]; then
+			__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_SIG_W2	LowRSSIAPSteerThreshold_SIG	LowRSSIAPSteeringThreshold_W2	$filename
+			__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_SIG_W5	LowRSSIAPSteerThreshold_SIG	LowRSSIAPSteeringThreshold_W5	$filename
+		else
+			if [ "$multi_ap_cap" -gt 0 ]; then
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_CAP_W2	LowRSSIAPSteerThreshold_CAP	LowRSSIAPSteeringThreshold_W2	$filename
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_CAP_W5	LowRSSIAPSteerThreshold_CAP	LowRSSIAPSteeringThreshold_W5	$filename
+			else
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_RE_W2	LowRSSIAPSteerThreshold_RE	LowRSSIAPSteeringThreshold_W2	$filename
+				__lbd_cfg_add_ap_steering_thresh	APSteer	LowRSSIAPSteerThreshold_RE_W5	LowRSSIAPSteerThreshold_RE	LowRSSIAPSteeringThreshold_W5	$filename
+			fi
+		fi
+	fi
+
+	__lbd_cfg_nl_append '[BANDMON]' $filename
+	__lbd_cfg_add_str	Offload		MUOverloadThreshold_W2 $filename
+	__lbd_cfg_add_str	Offload		MUOverloadThreshold_W5 $filename
+	__lbd_cfg_add_str	Offload		MUSafetyThreshold_W2 $filename
+	__lbd_cfg_add_str	Offload		MUSafetyThreshold_W5 $filename
+	__lbd_cfg_add_str_new_key	Offload	OffloadingMinRSSI	RSSISafetyThreshold $filename
+	__lbd_cfg_add_str_new_key	config_Adv	AgeLimit	RSSIMaxAge $filename
+	__lbd_cfg_add_str	BandMonitor_Adv	ProbeCountThreshold $filename
+	if [ -n "$multi_ap_mode" ]; then
+		# Parameters only relevant for multi-AP setup
+		if [ "$multi_ap_cap" -gt 0 ]; then
+			# Parameters only relevant for CAP
+			__lbd_cfg_add_str	BandMonitor_Adv	MUReportPeriod	$filename
+		fi
+		__lbd_cfg_add_str	BandMonitor_Adv	LoadBalancingAllowedMaxPeriod	$filename
+		__lbd_cfg_add_str	BandMonitor_Adv	NumRemoteChannels	$filename
+		__lbd_cfg_add_str_new_key	config_Adv	AllowZeroAPInterfaces AllowZeroLocalChannels $filename
+	fi
+
+	__lbd_cfg_nl_append '[ESTIMATOR]' $filename
+	__lbd_cfg_add_str	config_Adv	AgeLimit $filename
+	__lbd_cfg_add_str	Estimator_Adv	RSSIDiff_EstW5FromW2 $filename
+	__lbd_cfg_add_str	Estimator_Adv	RSSIDiff_EstW2FromW5 $filename
+	__lbd_cfg_add_str	Estimator_Adv	ProbeCountThreshold $filename
+	__lbd_cfg_add_str	Estimator_Adv	StatsSampleInterval $filename
+	__lbd_cfg_add_str	Estimator_Adv	Max11kUnfriendly $filename
+	__lbd_cfg_add_str	Estimator_Adv	11kProhibitTimeShort $filename
+	__lbd_cfg_add_str	Estimator_Adv	11kProhibitTimeLong $filename
+	__lbd_cfg_add_str	Estimator_Adv	PhyRateScalingForAirtime $filename
+	__lbd_cfg_add_str	Estimator_Adv	EnableContinuousThroughput $filename
+	__lbd_cfg_add_str	IAS		MaxPollutionTime $filename
+	__lbd_cfg_add_str	Estimator_Adv	FastPollutionDetectBufSize $filename
+	__lbd_cfg_add_str	Estimator_Adv	NormalPollutionDetectBufSize $filename
+	__lbd_cfg_add_str	Estimator_Adv	PollutionDetectThreshold $filename
+	__lbd_cfg_add_str	Estimator_Adv	PollutionClearThreshold $filename
+	__lbd_cfg_add_str	Estimator_Adv	InterferenceAgeLimit $filename
+	__lbd_cfg_add_str	Estimator_Adv	IASLowRSSIThreshold $filename
+	__lbd_cfg_add_str	Estimator_Adv	IASMaxRateFactor $filename
+	__lbd_cfg_add_str	Estimator_Adv	IASMinDeltaPackets $filename
+	__lbd_cfg_add_str	Estimator_Adv	IASMinDeltaBytes $filename
+	__lbd_cfg_add_str	Estimator_Adv	IASEnableSingleBandDetect $filename
+	__lbd_cfg_add_str	Estimator_Adv	ActDetectMinInterval $filename
+	__lbd_cfg_add_str	Estimator_Adv	ActDetectMinPktPerSec $filename
+	__lbd_cfg_add_ias_curve $filename
+
+	__lbd_cfg_nl_append '[STEEREXEC]' $filename
+	__lbd_cfg_add_str	SteerExec	SteeringProhibitTime $filename
+	__lbd_cfg_add_str	SteerExec_Adv	TSteering $filename
+	__lbd_cfg_add_str	SteerExec_Adv	InitialAuthRejCoalesceTime $filename
+	__lbd_cfg_add_str	SteerExec_Adv	AuthRejMax $filename
+	__lbd_cfg_add_str	SteerExec_Adv	SteeringUnfriendlyTime $filename
+	__lbd_cfg_add_str	SteerExec_Adv	MaxSteeringUnfriendly $filename
+	__lbd_cfg_add_str_new_key	SteerExec_Adv	LowRSSIXingThreshold	LowRSSIXingThreshold_W2 $filename
+	__lbd_cfg_add_str_new_key	SteerExec_Adv	LowRSSIXingThreshold	LowRSSIXingThreshold_W5 $filename
+	__lbd_cfg_add_str	SteerExec_Adv	TargetLowRSSIThreshold_W2 $filename
+	__lbd_cfg_add_str	SteerExec_Adv	TargetLowRSSIThreshold_W5 $filename
+	__lbd_cfg_add_str	SteerExec_Adv	BlacklistTime $filename
+	__lbd_cfg_add_str	SteerExec_Adv	BTMResponseTime $filename
+	__lbd_cfg_add_str	SteerExec_Adv	BTMAssociationTime $filename
+	__lbd_cfg_add_str	SteerExec_Adv	BTMAlsoBlacklist $filename
+	__lbd_cfg_add_str	SteerExec_Adv	BTMUnfriendlyTime $filename
+	__lbd_cfg_add_str	SteerExec	BTMSteeringProhibitShortTime $filename
+	__lbd_cfg_add_str	SteerExec_Adv	MaxBTMUnfriendly $filename
+	__lbd_cfg_add_str	SteerExec_Adv	MaxBTMActiveUnfriendly $filename
+	__lbd_cfg_add_str	config_Adv	AgeLimit $filename
+	__lbd_cfg_add_str	SteerExec_Adv	MinRSSIBestEffort $filename
+	__lbd_cfg_add_str_new_key	IAS	UseBestEffort IASUseBestEffort $filename
+	__lbd_cfg_add_str	SteerExec_Adv	StartInBTMActiveState $filename
+	__lbd_cfg_add_str	SteerExec_Adv	MaxConsecutiveBTMFailuresAsActive $filename
+	__lbd_cfg_add_str   SteerExec_Adv   LegacyUpgradeUnfriendlyTime $filename
+	__lbd_cfg_add_str	SteerExec	DisableLegacySteering $filename
+
+	__lbd_cfg_nl_append '[STEERALG]' $filename
+	__lbd_cfg_add_str_new_key	IdleSteer	RSSISteeringPoint_DG	InactRSSIXingThreshold_W2 $filename
+	__lbd_cfg_add_str_new_key	IdleSteer	RSSISteeringPoint_UG	InactRSSIXingThreshold_W5 $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	TxRateXingThreshold_UG	HighTxRateXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	RateRSSIXingThreshold_UG	HighRateRSSIXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	TxRateXingThreshold_DG	LowTxRateXingThreshold $filename
+	__lbd_cfg_add_str_new_key	ActiveSteer	RateRSSIXingThreshold_DG	LowRateRSSIXingThreshold $filename
+	__lbd_cfg_add_str	SteerAlg_Adv	MinTxRateIncreaseThreshold $filename
+	__lbd_cfg_add_str	config_Adv	AgeLimit $filename
+	__lbd_cfg_add_str	config		PHYBasedPrioritization $filename
+	__lbd_cfg_add_str_new_key	Offload	OffloadingMinRSSI	RSSISafetyThreshold $filename
+	__lbd_cfg_add_str	SteerAlg_Adv	MaxSteeringTargetCount $filename
+	__lbd_cfg_add_str	SteerAlg_Adv	ApplyEstimatedAirTimeOnSteering $filename
+	if [ -n "$multi_ap_mode" ]; then
+		# Only include AP steering parameters for multi-AP setup
+		# Consider both star and daisy chain topology, all the three parameters are required
+		__lbd_cfg_add_str	APSteer	APSteerToRootMinRSSIIncThreshold	$filename
+		__lbd_cfg_add_str	APSteer	APSteerToLeafMinRSSIIncThreshold	$filename
+		__lbd_cfg_add_str	APSteer	APSteerToPeerMinRSSIIncThreshold	$filename
+		__lbd_cfg_add_str       APSteer DownlinkRSSIThreshold_W5        	$filename
+		if [ "$multi_ap_cap" -gt 0 ]; then
+			__lbd_cfg_add_str       Offload MUOverloadThreshold_W2 			$filename
+			__lbd_cfg_add_str       Offload MUOverloadThreshold_W5 			$filename
+			__lbd_cfg_add_str	APSteer APSteerMaxRetryCount			$filename
+                        __lbd_cfg_add_str       SteerAlg_Adv UsePathCapacityToSelectBSS         $filename
+		fi
+	fi
+
+	__lbd_cfg_nl_append '[DIAGLOG]' $filename
+	__lbd_cfg_add_str	DiagLog		EnableLog $filename
+	__lbd_cfg_add_str	DiagLog		LogServerIP $filename
+	__lbd_cfg_add_str	DiagLog		LogServerPort $filename
+	__lbd_cfg_add_str	DiagLog		LogLevelWlanIF $filename
+	__lbd_cfg_add_str	DiagLog		LogLevelBandMon $filename
+	__lbd_cfg_add_str	DiagLog		LogLevelStaDB $filename
+	__lbd_cfg_add_str	DiagLog		LogLevelSteerExec $filename
+	__lbd_cfg_add_str	DiagLog		LogLevelStaMon $filename
+	__lbd_cfg_add_str	DiagLog		LogLevelEstimator $filename
+	__lbd_cfg_add_str	DiagLog		LogLevelDiagLog $filename
+
+	__hyd_cfg_nl_append '[PERSIST]' $filename
+	__hyd_cfg_add_str	Persist		PersistFile $filename
+	__hyd_cfg_add_str	Persist		PersistPeriod $filename
+}
diff --git a/lib/functions/leds.sh b/lib/functions/leds.sh
new file mode 100644
index 0000000..d4d4512
--- /dev/null
+++ b/lib/functions/leds.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+# Copyright (C) 2013 OpenWrt.org
+
+led_set_attr() {
+	[ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2"
+}
+
+led_timer() {
+	led_set_attr $1 "trigger" "timer"
+	led_set_attr $1 "delay_on" "$2"
+	led_set_attr $1 "delay_off" "$3"
+}
+
+led_on() {
+	led_set_attr $1 "trigger" "none"
+	led_set_attr $1 "brightness" 255
+}
+
+led_off() {
+	led_set_attr $1 "trigger" "none"
+	led_set_attr $1 "brightness" 0
+}
+
+led_morse() {
+	led_set_attr $1 "trigger" "morse"
+	led_set_attr $1 "delay" "$2"
+	led_set_attr $1 "message" "$3"
+}
+
+status_led_set_timer() {
+	led_timer $status_led "$1" "$2"
+	[ -n "$status_led2" ] && led_timer $status_led2 "$1" "$2"
+}
+
+status_led_set_heartbeat() {
+	led_set_attr $status_led "trigger" "heartbeat"
+}
+
+status_led_set_morse() {
+	led_morse $status_led "$1" "$2"
+	[ -n "$status_led2" ] && led_morse $status_led2 "$1" "$2"
+}
+
+status_led_on() {
+	led_on $status_led
+	[ -n "$status_led2" ] && led_on $status_led2
+}
+
+status_led_off() {
+	led_off $status_led
+	[ -n "$status_led2" ] && led_off $status_led2
+}
+
+status_led_blink_slow() {
+	led_timer $status_led 1000 1000
+}
+
+status_led_blink_fast() {
+	led_timer $status_led 100 100
+}
+
+status_led_blink_preinit() {
+	led_timer $status_led 100 100
+}
+
+status_led_blink_failsafe() {
+	led_timer $status_led 50 50
+}
+
+status_led_blink_preinit_regular() {
+	led_timer $status_led 200 200
+}
diff --git a/lib/functions/network.sh b/lib/functions/network.sh
new file mode 100644
index 0000000..1b0c717
--- /dev/null
+++ b/lib/functions/network.sh
@@ -0,0 +1,268 @@
+# 1: destination variable
+# 2: interface
+# 3: path
+# 4: separator
+# 5: limit
+__network_ifstatus() {
+	local __tmp
+
+	[ -z "$__NETWORK_CACHE" ] && \
+		export __NETWORK_CACHE="$(ubus call network.interface dump)"
+
+	__tmp="$(jsonfilter ${4:+-F "$4"} ${5:+-l "$5"} -s "$__NETWORK_CACHE" -e "$1=@.interface${2:+[@.interface='$2']}$3")"
+
+	[ -z "$__tmp" ] && \
+		unset "$1" && \
+		return 1
+
+	eval "$__tmp"
+}
+
+# determine first IPv4 address of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddr() {
+	__network_ifstatus "$1" "$2" "['ipv4-address'][0].address";
+}
+
+# determine first IPv6 address of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddr6() {
+	local __addr
+
+	if __network_ifstatus "__addr" "$2" "['ipv6-address','ipv6-prefix-assignment'][0].address"; then
+		case "$__addr" in
+			*:)	export "$1=${__addr}1" ;;
+			*)	export "$1=${__addr}" ;;
+		esac
+		return 0
+	fi
+
+	unset $1
+	return 1
+}
+
+# determine first IPv4 subnet of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_subnet() {
+	__network_ifstatus "$1" "$2" "['ipv4-address'][0]['address','mask']" "/"
+}
+
+# determine first IPv6 subnet of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_subnet6() {
+	__network_ifstatus "$1" "$2" "['ipv6-address'][0]['address','mask']" "/"
+}
+
+# determine first IPv6 prefix of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_prefix6() {
+	__network_ifstatus "$1" "$2" "['ipv6-prefix'][0]['address','mask']" "/"
+}
+
+# determine all IPv4 addresses of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddrs() {
+	__network_ifstatus "$1" "$2" "['ipv4-address'][*].address"
+}
+
+# determine all IPv6 addresses of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddrs6() {
+	local __addr
+	local __list=""
+
+	if __network_ifstatus "__addr" "$2" "['ipv6-address','ipv6-prefix-assignment'][*].address"; then
+		for __addr in $__addr; do
+			case "$__addr" in
+				*:) __list="${__list:+$__list }${__addr}1" ;;
+				*)  __list="${__list:+$__list }${__addr}"  ;;
+			esac
+		done
+
+		export "$1=$__list"
+		return 0
+	fi
+
+	unset "$1"
+	return 1
+}
+
+# determine all IP addresses of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_ipaddrs_all() {
+	local __addr
+	local __list=""
+
+	if __network_ifstatus "__addr" "$2" "['ipv4-address','ipv6-address','ipv6-prefix-assignment'][*].address"; then
+		for __addr in $__addr; do
+			case "$__addr" in
+				*:) __list="${__list:+$__list }${__addr}1" ;;
+				*)  __list="${__list:+$__list }${__addr}"  ;;
+			esac
+		done
+
+		export "$1=$__list"
+		return 0
+	fi
+
+	unset "$1"
+	return 1
+}
+
+# determine all IPv4 subnets of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_subnets() {
+	__network_ifstatus "$1" "$2" "['ipv4-address'][*]['address','mask']" "/ "
+}
+
+# determine all IPv6 subnets of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_subnets6() {
+	local __addr
+	local __list=""
+
+	if __network_ifstatus "__addr" "$2" "['ipv6-address','ipv6-prefix-assignment'][*]['address','mask']" "/ "; then
+		for __addr in $__addr; do
+			case "$__addr" in
+				*:/*) __list="${__list:+$__list }${__addr%/*}1/${__addr##*/}" ;;
+				*)    __list="${__list:+$__list }${__addr}"                   ;;
+			esac
+		done
+
+		export "$1=$__list"
+		return 0
+	fi
+
+	unset "$1"
+	return 1
+}
+
+# determine all IPv6 prefixes of given logical interface
+# 1: destination variable
+# 2: interface
+network_get_prefixes6() {
+	__network_ifstatus "$1" "$2" "['ipv6-prefix'][*]['address','mask']" "/ "
+}
+
+# determine IPv4 gateway of given logical interface
+# 1: destination variable
+# 2: interface
+# 3: consider inactive gateway if "true" (optional)
+network_get_gateway() {
+	__network_ifstatus "$1" "$2" ".route[@.target='0.0.0.0' && !@.table].nexthop" "" 1 && \
+		return 0
+
+	[ "$3" = 1 -o "$3" = "true" ] && \
+		__network_ifstatus "$1" "$2" ".inactive.route[@.target='0.0.0.0' && !@.table].nexthop" "" 1
+}
+
+# determine IPv6 gateway of given logical interface
+# 1: destination variable
+# 2: interface
+# 3: consider inactive gateway if "true" (optional)
+network_get_gateway6() {
+	__network_ifstatus "$1" "$2" ".route[@.target='::' && !@.table].nexthop" "" 1 && \
+		return 0
+
+	[ "$3" = 1 -o "$3" = "true" ] && \
+		__network_ifstatus "$1" "$2" ".inactive.route[@.target='::' && !@.table].nexthop" "" 1
+}
+
+# determine the DNS servers of the given logical interface
+# 1: destination variable
+# 2: interface
+# 3: consider inactive servers if "true" (optional)
+network_get_dnsserver() {
+	__network_ifstatus "$1" "$2" "['dns-server'][*]" && return 0
+
+	[ "$3" = 1 -o "$3" = "true" ] && \
+		__network_ifstatus "$1" "$2" ".inactive['dns-server'][*]"
+}
+
+# determine the domains of the given logical interface
+# 1: destination variable
+# 2: interface
+# 3: consider inactive domains if "true" (optional)
+network_get_dnssearch() {
+	__network_ifstatus "$1" "$2" "['dns-search'][*]" && return 0
+
+	[ "$3" = 1 -o "$3" = "true" ] && \
+		__network_ifstatus "$1" "$2" ".inactive['dns-search'][*]"
+}
+
+
+# 1: destination variable
+# 2: addr
+# 3: inactive
+__network_wan()
+{
+	__network_ifstatus "$1" "" \
+		"[@.route[@.target='$2' && !@.table]].interface" "" 1 && \
+			return 0
+
+	[ "$3" = 1 -o "$3" = "true" ] && \
+		__network_ifstatus "$1" "" \
+			"[@.inactive.route[@.target='$2' && !@.table]].interface" "" 1
+}
+
+# find the logical interface which holds the current IPv4 default route
+# 1: destination variable
+# 2: consider inactive default routes if "true" (optional)
+network_find_wan() { __network_wan "$1" "0.0.0.0" "$2"; }
+
+# find the logical interface which holds the current IPv6 default route
+# 1: destination variable
+# 2: consider inactive dafault routes if "true" (optional)
+network_find_wan6() { __network_wan "$1" "::" "$2"; }
+
+# test whether the given logical interface is running
+# 1: interface
+network_is_up()
+{
+	local __up
+	__network_ifstatus "__up" "$1" ".up" && [ "$__up" = 1 ]
+}
+
+# determine the protocol of the given logical interface
+# 1: destination variable
+# 2: interface
+network_get_protocol() { __network_ifstatus "$1" "$2" ".proto"; }
+
+# determine the layer 3 linux network device of the given logical interface
+# 1: destination variable
+# 2: interface
+network_get_device() { __network_ifstatus "$1" "$2" ".l3_device"; }
+
+# determine the layer 2 linux network device of the given logical interface
+# 1: destination variable
+# 2: interface
+network_get_physdev() { __network_ifstatus "$1" "$2" ".device"; }
+
+# defer netifd actions on the given linux network device
+# 1: device name
+network_defer_device()
+{
+	ubus call network.device set_state \
+		"$(printf '{ "name": "%s", "defer": true }' "$1")" 2>/dev/null
+}
+
+# continue netifd actions on the given linux network device
+# 1: device name
+network_ready_device()
+{
+	ubus call network.device set_state \
+		"$(printf '{ "name": "%s", "defer": false }' "$1")" 2>/dev/null
+}
+
+# flush the internal value cache to force re-reading values from ubus
+network_flush_cache() { unset __NETWORK_CACHE; }
diff --git a/lib/functions/preinit.sh b/lib/functions/preinit.sh
new file mode 100644
index 0000000..57862a1
--- /dev/null
+++ b/lib/functions/preinit.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+# Copyright (C) 2006-2013 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+boot_hook_splice_start() {
+	export -n PI_HOOK_SPLICE=1
+}
+
+boot_hook_splice_finish() {
+	local hook
+	for hook in $PI_STACK_LIST; do
+		local v; eval "v=\${${hook}_splice:+\$${hook}_splice }$hook"
+		export -n "${hook}=${v% }"
+		export -n "${hook}_splice="
+	done
+	export -n PI_HOOK_SPLICE=
+}
+
+boot_hook_init() {
+	local hook="${1}_hook"
+	export -n "PI_STACK_LIST=${PI_STACK_LIST:+$PI_STACK_LIST }$hook"
+	export -n "$hook="
+}
+
+boot_hook_add() {
+	local hook="${1}_hook${PI_HOOK_SPLICE:+_splice}"
+	local func="${2}"
+
+	[ -n "$func" ] && {
+		local v; eval "v=\$$hook"
+		export -n "$hook=${v:+$v }$func"
+	}
+}
+
+boot_hook_shift() {
+	local hook="${1}_hook"
+	local rvar="${2}"
+
+	local v; eval "v=\$$hook"
+	[ -n "$v" ] && {
+		local first="${v%% *}"
+
+		[ "$v" != "${v#* }" ] && \
+			export -n "$hook=${v#* }" || \
+			export -n "$hook="
+
+		export -n "$rvar=$first"
+		return 0
+	}
+
+	return 1
+}
+
+boot_run_hook() {
+	local hook="$1"
+	local func
+
+	while boot_hook_shift "$hook" func; do
+		local ran; eval "ran=\$PI_RAN_$func"
+		[ -n "$ran" ] || {
+			export -n "PI_RAN_$func=1"
+			$func "$1" "$2"
+		}
+	done
+}
+
+pivot() { # <new_root> <old_root>
+	/bin/mount -o noatime,move /proc $1/proc && \
+	pivot_root $1 $1$2 && {
+		/bin/mount -o noatime,move $2/dev /dev
+		/bin/mount -o noatime,move $2/tmp /tmp
+		/bin/mount -o noatime,move $2/sys /sys 2>&-
+		/bin/mount -o noatime,move $2/overlay /overlay 2>&-
+		return 0
+	}
+}
+
+fopivot() { # <rw_root> <work_dir> <ro_root> <dupe?>
+	/bin/mount -o noatime,lowerdir=/,upperdir=$1,workdir=$2 -t overlay "overlayfs:$1" /mnt
+	pivot /mnt $3
+}
+
+ramoverlay() {
+	mkdir -p /tmp/root
+	/bin/mount -t tmpfs -o noatime,mode=0755 root /tmp/root
+	mkdir -p /tmp/root/root /tmp/root/work
+	fopivot /tmp/root/root /tmp/root/work /rom 1
+}
diff --git a/lib/functions/procd.sh b/lib/functions/procd.sh
new file mode 100644
index 0000000..ba9043a
--- /dev/null
+++ b/lib/functions/procd.sh
@@ -0,0 +1,443 @@
+# procd API:
+#
+# procd_open_service(name, [script]):
+#   Initialize a new procd command message containing a service with one or more instances
+#
+# procd_close_service()
+#   Send the command message for the service
+#
+# procd_open_instance([name]):
+#   Add an instance to the service described by the previous procd_open_service call
+#
+# procd_set_param(type, [value...])
+#   Available types:
+#     command: command line (array).
+#     respawn info: array with 3 values $fail_threshold $restart_timeout $max_fail
+#     env: environment variable (passed to the process)
+#     data: arbitrary name/value pairs for detecting config changes (table)
+#     file: configuration files (array)
+#     netdev: bound network device (detects ifindex changes)
+#     limits: resource limits (passed to the process)
+#     user info: array with 1 values $username
+#
+#   No space separation is done for arrays/tables - use one function argument per command line argument
+#
+# procd_close_instance():
+#   Complete the instance being prepared
+#
+# procd_kill(service, [instance]):
+#   Kill a service instance (or all instances)
+#
+
+. $IPKG_INSTROOT/usr/share/libubox/jshn.sh
+
+_PROCD_SERVICE=
+
+_procd_call() {
+	local old_cb
+
+	json_set_namespace procd old_cb
+	"$@"
+	json_set_namespace $old_cb
+}
+
+_procd_wrapper() {
+	while [ -n "$1" ]; do
+		eval "$1() { _procd_call _$1 \"\$@\"; }"
+		shift
+	done
+}
+
+_procd_ubus_call() {
+	local cmd="$1"
+
+	[ -n "$PROCD_DEBUG" ] && json_dump >&2
+	ubus call service "$cmd" "$(json_dump)"
+	json_cleanup
+}
+
+_procd_open_service() {
+	local name="$1"
+	local script="$2"
+
+	_PROCD_SERVICE="$name"
+	_PROCD_INSTANCE_SEQ=0
+
+	json_init
+	json_add_string name "$name"
+	[ -n "$script" ] && json_add_string script "$script"
+	json_add_object instances
+}
+
+_procd_close_service() {
+	json_close_object
+	service_triggers
+	_procd_ubus_call set
+}
+
+_procd_add_array_data() {
+	while [ "$#" -gt 0 ]; do
+		json_add_string "" "$1"
+		shift
+	done
+}
+
+_procd_add_array() {
+	json_add_array "$1"
+	shift
+	_procd_add_array_data "$@"
+	json_close_array
+}
+
+_procd_add_table_data() {
+	while [ -n "$1" ]; do
+		local var="${1%%=*}"
+		local val="${1#*=}"
+		[ "$1" = "$val" ] && val=
+		json_add_string "$var" "$val"
+		shift
+	done
+}
+
+_procd_add_table() {
+	json_add_object "$1"
+	shift
+	_procd_add_table_data "$@"
+	json_close_object
+}
+
+_procd_open_instance() {
+	local name="$1"; shift
+
+	_PROCD_INSTANCE_SEQ="$(($_PROCD_INSTANCE_SEQ + 1))"
+	name="${name:-instance$_PROCD_INSTANCE_SEQ}"
+	json_add_object "$name"
+	[ -n "$TRACE_SYSCALLS" ] && json_add_boolean trace "1"
+}
+
+_procd_open_trigger() {
+	json_add_array "triggers"
+}
+
+_procd_open_validate() {
+	json_add_array "validate"
+}
+
+_procd_add_jail() {
+	json_add_object "jail"
+	json_add_string name "$1"
+	json_add_string root "/tmp/.jail/$1"
+
+	shift
+	
+	for a in $@; do
+		case $a in
+		log)	json_add_boolean "log" "1";;
+		ubus)	json_add_boolean "ubus" "1";;
+		procfs)	json_add_boolean "procfs" "1";;
+		sysfs)	json_add_boolean "sysfs" "1";;
+		esac
+	done
+	json_add_object "mount"
+	json_close_object
+	json_close_object
+}
+
+_procd_add_jail_mount() {
+	local _json_no_warning=1
+
+	json_select "jail"
+	[ $? = 0 ] || return
+	json_select "mount"
+	[ $? = 0 ] || {
+		json_select ..
+		return
+	}
+	for a in $@; do
+		json_add_string "$a" "0"
+	done
+	json_select ..
+	json_select ..
+}
+
+_procd_add_jail_mount_rw() {
+	local _json_no_warning=1
+
+	json_select "jail"
+	[ $? = 0 ] || return
+	json_select "mount"
+	[ $? = 0 ] || {
+		json_select ..
+		return
+	}
+	for a in $@; do
+		json_add_string "$a" "1"
+	done
+	json_select ..
+	json_select ..
+}
+
+_procd_set_param() {
+	local type="$1"; shift
+
+	case "$type" in
+		env|data|limits)
+			_procd_add_table "$type" "$@"
+		;;
+		command|netdev|file|respawn|watch)
+			_procd_add_array "$type" "$@"
+		;;
+		error)
+			json_add_array "$type"
+			json_add_string "" "$@"
+			json_close_array
+		;;
+		nice)
+			json_add_int "$type" "$1"
+		;;
+		user|seccomp)
+			json_add_string "$type" "$1"
+		;;
+		stdout|stderr)
+			json_add_boolean "$type" "$1"
+		;;
+	esac
+}
+
+_procd_add_interface_trigger() {
+	json_add_array
+	_procd_add_array_data "$1"
+	shift
+
+	json_add_array
+	_procd_add_array_data "if"
+
+	json_add_array
+	_procd_add_array_data "eq" "interface" "$1"
+	shift
+	json_close_array
+
+	json_add_array
+	_procd_add_array_data "run_script" "$@"
+	json_close_array
+
+	json_close_array
+	json_close_array
+}
+
+_procd_add_reload_interface_trigger() {
+	local script=$(readlink "$initscript")
+	local name=$(basename ${script:-$initscript})
+
+	_procd_open_trigger
+	_procd_add_interface_trigger "interface.*" $1 /etc/init.d/$name reload
+	_procd_close_trigger
+}
+
+_procd_add_config_trigger() {
+	json_add_array
+	_procd_add_array_data "$1"
+	shift
+
+	json_add_array
+	_procd_add_array_data "if"
+
+	json_add_array
+	_procd_add_array_data "eq" "package" "$1"
+	shift
+	json_close_array
+
+	json_add_array
+	_procd_add_array_data "run_script" "$@"
+	json_close_array
+
+	json_close_array
+
+	json_close_array
+}
+
+_procd_add_raw_trigger() {
+	json_add_array
+	_procd_add_array_data "$1"
+	shift
+	local timeout=$1
+	shift
+
+	json_add_array
+	json_add_array
+	_procd_add_array_data "run_script" "$@"
+	json_close_array
+	json_close_array
+
+	json_add_int "" "$timeout"
+
+	json_close_array
+}
+
+_procd_add_reload_trigger() {
+	local script=$(readlink "$initscript")
+	local name=$(basename ${script:-$initscript})
+	local file
+
+	_procd_open_trigger
+	for file in "$@"; do
+		_procd_add_config_trigger "config.change" "$file" /etc/init.d/$name reload
+	done
+	_procd_close_trigger
+}
+
+_procd_add_reload_trigger_with_argument() {
+	local script=$(readlink "$initscript")
+	local name=$(basename ${script:-$initscript})
+	local file
+
+	_procd_open_trigger
+	for file in "$@"; do
+		_procd_add_config_trigger "config.change" "$file" /etc/init.d/$name reload "$file"
+	done
+	_procd_close_trigger
+}
+
+_procd_add_validation() {
+	_procd_open_validate
+	$@
+	_procd_close_validate
+}
+
+_procd_append_param() {
+	local type="$1"; shift
+	local _json_no_warning=1
+
+	json_select "$type"
+	[ $? = 0 ] || {
+		_procd_set_param "$type" "$@"
+		return
+	}
+	case "$type" in
+		env|data|limits)
+			_procd_add_table_data "$@"
+		;;
+		command|netdev|file|respawn|watch)
+			_procd_add_array_data "$@"
+		;;
+		error)
+			json_add_string "" "$@"
+		;;
+	esac
+	json_select ..
+}
+
+_procd_close_instance() {
+	json_close_object
+}
+
+_procd_close_trigger() {
+	json_close_array
+}
+
+_procd_close_validate() {
+	json_close_array
+}
+
+_procd_add_instance() {
+	_procd_open_instance
+	_procd_set_param command "$@"
+	_procd_close_instance
+}
+
+_procd_kill() {
+	local service="$1"
+	local instance="$2"
+
+	json_init
+	[ -n "$service" ] && json_add_string name "$service"
+	[ -n "$instance" ] && json_add_string instance "$instance"
+	_procd_ubus_call delete
+}
+
+procd_open_data() {
+	local name="$1"
+	json_set_namespace procd __procd_old_cb
+	json_add_object data
+}
+
+procd_close_data() {
+	json_close_object
+	json_set_namespace $__procd_old_cb
+}
+
+_procd_set_config_changed() {
+	local package="$1"
+
+	json_init
+	json_add_string type config.change
+	json_add_object data
+	json_add_string package "$package"
+	json_close_object
+
+	ubus call service event "$(json_dump)"
+}
+
+procd_add_mdns_service() {
+	local service proto port
+	service=$1; shift
+	proto=$1; shift
+	port=$1; shift
+	json_add_object "${service}_$port"
+	json_add_string "service" "_$service._$proto.local"
+	json_add_int port "$port"
+	[ -n "$1" ] && {
+		json_add_array txt
+		for txt in $@; do json_add_string "" $txt; done
+		json_select ..
+	}
+	json_select ..
+}
+
+procd_add_mdns() {
+	procd_open_data
+	json_add_object "mdns"
+	procd_add_mdns_service $@
+	json_close_object
+	procd_close_data
+}
+
+uci_validate_section()
+{
+	local _package="$1"
+	local _type="$2"
+	local _name="$3"
+	local _result
+	local _error
+	shift; shift; shift
+	_result=`/sbin/validate_data "$_package" "$_type" "$_name" "$@" 2> /dev/null`
+	_error=$?
+	eval "$_result"
+	[ "$_error" = "0" ] || `/sbin/validate_data "$_package" "$_type" "$_name" "$@" 1> /dev/null`
+	return $_error
+}
+
+_procd_wrapper \
+	procd_open_service \
+	procd_close_service \
+	procd_add_instance \
+	procd_add_raw_trigger \
+	procd_add_config_trigger \
+	procd_add_interface_trigger \
+	procd_add_reload_trigger \
+	procd_add_reload_trigger_with_argument \
+	procd_add_reload_interface_trigger \
+	procd_open_trigger \
+	procd_close_trigger \
+	procd_open_instance \
+	procd_close_instance \
+	procd_open_validate \
+	procd_close_validate \
+	procd_add_jail \
+	procd_add_jail_mount \
+	procd_add_jail_mount_rw \
+	procd_set_param \
+	procd_append_param \
+	procd_add_validation \
+	procd_set_config_changed \
+	procd_kill
diff --git a/lib/functions/repacd-backhaulmgr.sh b/lib/functions/repacd-backhaulmgr.sh
new file mode 100755
index 0000000..c830aa9
--- /dev/null
+++ b/lib/functions/repacd-backhaulmgr.sh
@@ -0,0 +1,269 @@
+#!/bin/sh
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+BACKHAULMGRMON_DEBUG_OUTOUT=0
+
+. /lib/functions/repacd-plcmon.sh
+. /lib/functions/repacd-wifimon.sh
+
+backhaulmgr_rate_samples=0
+prev_plc_rate_compare_counter=0 prev_wlan_rate_compare_counter=0
+wlan_rate_consistent_num=0 plc_rate_consistent_num=0
+gw_not_reachable_consistent_num=0
+PingTimeoutsToCAP=0
+
+# Config Parameters
+config_eval_time_plc=0 select_only_one_backhaul_interface=0
+
+# PLC parameters
+is_plc_enabled=0 is_plc_connected=0
+is_plc_iface_brought_down=0 is_wlan_ifaces_brought_down=0
+prev_plc_rate=0 force_down_plc_timestamp=''
+prev_wlan_rate=0
+
+# Emit a message at debug level.
+# input: $1 - the message to log
+__repacd_backhaulmgrmon_debug() {
+    local stderr=''
+    if [ "$BACKHAULMGRMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.backhaulmgrmon -p user.debug "$1"
+}
+
+# Emit a message at info level.
+__repacd_backhaulmgrmon_info() {
+    local stderr=''
+    if [ "$BACKHAULMGRMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.backhaulmgrmon -p user.info "$1"
+}
+
+repacd_backhaulmgrmon_init() {
+    # First resolve the config parameters.
+    config_load repacd
+    config_get config_eval_time_plc 'PLCLink' 'PLCBackhaulEvalTime' '1800'
+    # Assuming that PLC link is guaranteed than 2G at configured threshold value
+    config_get plc_link_threshold_to_2G 'BackhaulMgr' 'PLCLinkThresholdto2G' '60'
+    config_get select_only_one_backhaul_interface 'BackhaulMgr' 'SelectOneBackHaulInterfaceInDaisy' '0'
+    config_get backhaulmgr_rate_samples 'BackhaulMgr' 'BackHaulMgrRateNumMeasurements' '5'
+    config_get PingTimeoutsToCAP 'BackhaulMgr' 'SwitchInterfaceAfterCAPPingTimeouts' '5'
+}
+
+repacd_backhaulmgrmon_check() {
+    if [ "$select_only_one_backhaul_interface" -gt 0 ]; then
+        if __repacd_plcmon_is_plc_enabled; then
+            local plc_iface_rate=0
+
+            if [ "$is_plc_enabled" -eq 0 ]; then
+                __repacd_backhaulmgrmon_debug "PLC is ENABLED"
+                is_plc_enabled=1
+            fi
+
+            if [ "$IS_GW_REACHABLE" -gt 0 ]; then
+                gw_not_reachable_consistent_num=0
+            else
+                if [ "$curr_root_distance" -eq "$RE_ROOT_AP_DISTANCE_INVALID" ]; then
+                    gw_not_reachable_consistent_num=$((gw_not_reachable_consistent_num + 1))
+                fi
+            fi
+
+            if __repacd_plcmon_is_plc_connected plc_iface_rate; then
+                if [ "$is_plc_connected" -eq 0 ]; then
+                    __repacd_backhaulmgrmon_debug "PLC CONNECTED"
+                    is_plc_connected=1
+                fi
+                __repacd_backhaulmgrmon_debug "Rate sample: PLC = $plc_iface_rate Mbps"
+
+                # curr_root_distance greater than 1 means the topology is Daisy Chain
+                if [ "$curr_root_distance" -gt 1 -a \
+                     "$curr_root_distance" -ne "$RE_ROOT_AP_DISTANCE_INVALID" ]; then
+
+                    # Check whether WLAN association is complete
+                    if [ "$bssid_assoc_count" -ge "$min_bssid_assoc" ]; then
+
+                        # In case of Daisy Chain, evaluate the link rate of available interfaces
+                        # At this moment WLAN and PLC interfaces are considered,
+                        # can be extend to other interfaces.
+
+                        # Check whether WLAN link rate more than PLC interface
+                        # For now, Rate to CAP is considered only 5G interface.
+                        if [ "$rate_to_CAP" -ge "$plc_iface_rate" ]; then
+                            # Increment the counter for WLAN rate samples
+                            wlan_rate_consistent_num=$((wlan_rate_consistent_num + 1))
+                            plc_rate_consistent_num=0
+
+                        # Assume that if Rate to CAP is zero and if curr_root_distance greater than 1
+                        # means 2Gis connected.
+                        # Assume 2G value would be around 80 - 120 Mbps in real world
+                        # then bring down PLC interface. In case the threshold value of PLC to 2G
+                        # interface is configured and if PLC link rate is consistently better than
+                        # threshold value then select PLC ineterface and bring down WLAN interfaces.
+                        elif [ "$rate_to_CAP" -eq 0 -a "$plc_iface_rate" -lt "$plc_link_threshold_to_2G" ]; then
+                            # Increment the counter for WLAN rate samples
+                            wlan_rate_consistent_num=$((wlan_rate_consistent_num + 1))
+                            plc_rate_consistent_num=0
+                        else
+                            # Increment the counter for PLC rate samples
+                            plc_rate_consistent_num=$((plc_rate_consistent_num + 1))
+                            wlan_rate_consistent_num=0
+                        fi
+
+                        # Choosing best uplink interface
+                        # Bringing down either of the interface avoids loop in SON network.
+                        if [ "$wlan_rate_consistent_num" -eq "$backhaulmgr_rate_samples" ]; then
+                            __repacd_backhaulmgrmon_debug "Bringing down PLC interface..."
+                            __repacd_plcmon_bring_plc_iface_down
+                            is_plc_iface_brought_down=1
+                            prev_plc_rate=$plc_iface_rate
+                            __repacd_wifimon_get_timestamp force_down_plc_timestamp
+                            wlan_rate_consistent_num=0
+                            plc_rate_consistent_num=0
+                        elif [ "$plc_rate_consistent_num" -eq "$backhaulmgr_rate_samples" ]; then
+                            __repacd_backhaulmgrmon_debug "Bringing down WLAN interface..."
+                            __repacd_wifimon_bring_iface_down $sta_iface_5g
+                            __repacd_wifimon_bring_iface_down $sta_iface_24g
+                            # Bringing down interfaces will not update Wifi assoc count to zero.
+                            # Backhaul Manager bringing down both 2G and 5G, so update Wifi assoc count to zero.
+                            bssid_assoc_count=0
+                            is_wlan_ifaces_brought_down=1
+                            prev_wlan_rate=$rate_to_CAP
+                            wlan_rate_consistent_num=0
+                            plc_rate_consistent_num=0
+                        fi
+                        rate_to_CAP=0
+                    fi
+                fi
+
+                if [ "$is_wlan_ifaces_brought_down" -eq 1 ]; then
+
+                    # Check if PLC link rate is bad then switch over to WLAN interface
+                    # and bring up WLAN interface to re-evaluate the Link metrics.
+                    if [ "$prev_wlan_rate" -gt "$plc_iface_rate" ]; then
+                        prev_wlan_rate_compare_counter=$((prev_wlan_rate_compare_counter + 1))
+                        if [ "$prev_wlan_rate_compare_counter" -eq "$backhaulmgr_rate_samples" ]; then
+                            __repacd_backhaulmgrmon_debug "PLC Link rate ($plc_iface_rate Mbps) is bad than previous rate of WLAN Link ($prev_wlan_rate Mbps)"
+
+                            # Check whether WLAN interfaces are in progress of association
+                            if [ "$bssid_assoc_count" -gt 0 ]; then
+                                __repacd_backhaulmgrmon_debug "WLAN interfaces are already trying to associate"
+                            else
+                                # Only bringup WLAN interfaces if WLAN interfaces are not up
+                                __repacd_backhaulmgrmon_debug "Bringing up WLAN interface..."
+                                __repacd_wifimon_bring_iface_up $sta_iface_5g
+                                __repacd_wifimon_bring_iface_up $sta_iface_24g
+                            fi
+                            is_wlan_ifaces_brought_down=0
+                            prev_wlan_rate_compare_counter=0
+                        fi
+                    else
+                        prev_wlan_rate_compare_counter=0
+                    fi
+
+                    # Check whether Gateway is reachable consitently, if not bringup WLAN interfaces
+                    if [ "$gw_not_reachable_consistent_num" -eq "$PingTimeoutsToCAP" ]; then
+                        # Check whether WLAN interfaces are in progress of association
+                        if [ "$bssid_assoc_count" -gt 0 ]; then
+                            __repacd_backhaulmgrmon_debug "WLAN interfaces are already trying to associate"
+                        else
+                            # Only bringup WLAN interfaces if WLAN interfaces are not up
+                            __repacd_backhaulmgrmon_debug "Bringing up WLAN interface..."
+                            __repacd_wifimon_bring_iface_up $sta_iface_5g
+                            __repacd_wifimon_bring_iface_up $sta_iface_24g
+                        fi
+                        is_wlan_ifaces_brought_down=0
+                        prev_wlan_rate_compare_counter=0
+                        gw_not_reachable_consistent_num=0
+                    fi
+                elif [ "$gw_not_reachable_consistent_num" -gt 0 ]; then
+
+                    # Check whether WLAN associated and bring down PLC interface if Daisy Chain topology is formed
+                    if [ "$curr_root_distance" -gt 1 -a \
+                         "$curr_root_distance" -ne "$RE_ROOT_AP_DISTANCE_INVALID" ]; then
+
+                        __repacd_backhaulmgrmon_debug "GW ($gw_ip) not reachable thru PLC, Bringing down PLC interface..."
+                        __repacd_plcmon_bring_plc_iface_down
+                        is_plc_iface_brought_down=1
+                        prev_plc_rate=0
+                        __repacd_wifimon_get_timestamp force_down_plc_timestamp
+                        wlan_rate_consistent_num=0
+                        plc_rate_consistent_num=0
+                    fi
+                fi
+            else
+                if [ "$is_plc_connected" -gt 0 ]; then
+                    __repacd_backhaulmgrmon_debug "PLC NOT CONNECTED"
+                    is_plc_connected=0
+                fi
+
+                # Try to bringup WLAN ifaces which were brought down earlier by repacd
+                # When PLC backhaul connection is lost
+                if [ "$is_wlan_ifaces_brought_down" -eq 1 -a \
+                     "$curr_root_distance" -eq "$RE_ROOT_AP_DISTANCE_INVALID" ]; then
+                    __repacd_backhaulmgrmon_debug "Bringing up WLAN interface..."
+                    __repacd_wifimon_bring_iface_up $sta_iface_5g
+                    __repacd_wifimon_bring_iface_up $sta_iface_24g
+                    is_wlan_ifaces_brought_down=0
+
+                # PLC not connected means either device is disconnected or
+                # repacd brought down PLC interface
+                # Check whether PLC is brought down by repacd
+                elif [ "$is_plc_iface_brought_down" -eq 1 ]; then
+                    # if curr_root_distance RE_ROOT_AP_DISTANCE_INVALID means WLAN interfaces were not
+                    # brought down by repacd but lost connection to CAP,
+                    # if curr_root_distance 1 means the topology is not Daisy Chain
+                    # in either of above cases bringup PLC interface
+                    if [ "$curr_root_distance" -eq "$RE_ROOT_AP_DISTANCE_INVALID" ] || \
+                       [ "$curr_root_distance" -eq 1 ]; then
+                        __repacd_backhaulmgrmon_debug "Bringing up PLC interface..."
+                        __repacd_plcmon_bring_plc_iface_up
+                        is_plc_iface_brought_down=0
+                    elif  __repacd_wifimon_is_timeout $force_down_plc_timestamp $config_eval_time_plc; then
+                        __repacd_backhaulmgrmon_debug "Bringing up PLC:eval interval $config_eval_time_plc sec expired"
+                        __repacd_plcmon_bring_plc_iface_up
+                        is_plc_iface_brought_down=0
+                        __repacd_wifimon_get_timestamp force_down_plc_timestamp
+                    fi
+
+                    if [ "$curr_root_distance" -gt 1 ]; then
+                        # Check if WLAN link rate is bad then switch over to PLC interface
+                        # and bring up PLC interface to re-evaluate the Link metrics.
+
+                        # For now, Rate to CAP is considered only 5G interface, assuming that if
+                        # Rate to CAP is zero and if curr_root_distance greater than 1 means 2G
+                        # is connected. Assume 2G value would be around 80 - 120 Mbps in real world
+                        # then bring down PLC interface. In case the threshold value of PLC to 2G
+                        # interface is configured and if PLC link rate is consistently better than
+                        # threshold value then select PLC ineterface and bring down WLAN interfaces.
+                        if [ "$rate_to_CAP" -eq 0 -a "$prev_plc_rate" -lt "$plc_link_threshold_to_2G" ]; then
+                            prev_plc_rate_compare_counter=0
+
+                        elif [ "$prev_plc_rate" -gt "$rate_to_CAP" ]; then
+                            prev_plc_rate_compare_counter=$((prev_plc_rate_compare_counter + 1))
+                            if [ "$prev_plc_rate_compare_counter" -eq "$backhaulmgr_rate_samples" ]; then
+                                __repacd_backhaulmgrmon_debug "WLAN Link rate ($rate_to_CAP Mbps) is bad than previous rate of PLC Link ($prev_plc_rate Mbps)"
+                                __repacd_backhaulmgrmon_debug "Bringing up PLC interface..."
+                                __repacd_plcmon_bring_plc_iface_up
+                                is_plc_iface_brought_down=0
+                                prev_plc_rate_compare_counter=0
+                            fi
+                        else
+                            prev_plc_rate_compare_counter=0
+                        fi
+                    fi
+                    rate_to_CAP=0
+                fi
+            fi
+        else
+            if [ "$is_plc_enabled" -gt 0 ]; then
+                __repacd_backhaulmgrmon_debug "PLC is DISABLED"
+                is_plc_enabled=0
+            fi
+        fi
+    fi
+}
diff --git a/lib/functions/repacd-ethmon.sh b/lib/functions/repacd-ethmon.sh
new file mode 100755
index 0000000..c59e003
--- /dev/null
+++ b/lib/functions/repacd-ethmon.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+ETHMON_DEBUG_OUTOUT=0
+
+# State information
+switch_state=''
+
+# Emit a message at debug level.
+# input: $1 - the message to log
+__ethmon_debug() {
+    local stderr=''
+    if [ "$ETHMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.ethmon -p user.debug "$1"
+}
+
+# Given switch_state from `swconfig dev switch0 show | grep "link: port:"`
+# and a port number, return the state of that port.
+__ethmon_get_port_state() {
+    local switch_state="$1"
+    local port=$2
+    if [ -z "$switch_state" ]; then
+        echo "unknown"
+        return
+    fi
+    echo "$switch_state" | while read line; do
+        local curr_port=$(echo $line | awk '{ print $2 }' | cut -d: -f2)
+        if [ $port -eq $curr_port ]; then
+            local link_state=$(echo $line | awk '{ print $3 }' | cut -d: -f2)
+            echo $link_state
+            return
+        fi
+    done
+}
+
+# Check the status of the Ethernet links (link state, speed, duplex).
+repacd_ethmon_check() {
+    local new_state
+    new_state=$(swconfig dev switch0 show | grep "link: port:" | grep -v "port:0")
+    if [ "$new_state" != "$switch_state" ]; then
+        # One or more of the switch ports have changed state
+        echo "$new_state" | while read line; do
+            local port=$(echo $line | awk '{ print $2 }' | cut -d: -f2)
+            local new_link_state=$(echo $line | awk '{ print $3 }' | cut -d: -f2)
+            local link_state=$(__ethmon_get_port_state "$switch_state" $port)
+            if [ "$link_state" != "$new_link_state" ]; then
+                __ethmon_debug "port $port state changed from $link_state to $new_link_state"
+                (export PORT=$port; export EVENT="link"; export STATE=$new_link_state; hotplug-call switch)
+            fi
+        done
+        switch_state="$new_state"
+    fi
+}
diff --git a/lib/functions/repacd-fronthaulmgr.sh b/lib/functions/repacd-fronthaulmgr.sh
new file mode 100755
index 0000000..6314627
--- /dev/null
+++ b/lib/functions/repacd-fronthaulmgr.sh
@@ -0,0 +1,202 @@
+#!/bin/sh
+# Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+FRONTHAULMGRMON_DEBUG_OUTOUT=0
+
+# This file assumes the gwmon and wifimon (the appropriate sub-version)
+# have already been sourced.
+
+. /lib/functions/whc-network.sh
+
+is_front_haul_VAPs_brought_down=0
+
+# Config Parameters
+manage_fronthaul_and_backhaul_independently=0
+fronthaul_VAPs_bringdown_time=0
+
+# Local parameters
+ap_ifaces_24g='' ap_ifaces_5g=''
+
+# Emit a message at debug level.
+# input: $1 - the message to log
+__repacd_fronthaulmgrmon_debug() {
+    local stderr=''
+    if [ "$FRONTHAULMGRMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.fronthaulmgrmon -p user.debug "$1"
+}
+
+# Emit a message at info level.
+__repacd_fronthaulmgrmon_info() {
+    local stderr=''
+    if [ "$BACKHAULMGRMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.fronthaulmgrmon -p user.info "$1"
+}
+
+__repacd_fronthaulmgrmon_get_fronthaul_vaps() {
+    local config="$1"
+    local network_to_match="$2"
+    local network iface disabled mode device hwmode
+
+    config_get network "$config" network
+    config_get iface "$config" ifname
+    config_get disabled "$config" disabled '0'
+    config_get mode "$config" mode
+    config_get bssid "$config" bssid
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = "$network_to_match" ] && [ -n "$iface" ] && \
+			[ "$mode" = "ap" ] && [ "$disabled" -eq 0 ]; then
+
+            if whc_is_5g_vap "$config"; then
+                __repacd_fronthaulmgrmon_debug "5 GHz AP VAP ($iface) found"
+                if [ -z "${ap_ifaces_5g}" ]; then
+                    ap_ifaces_5g="$iface"
+                else
+                    ap_ifaces_5g="$ap_ifaces_5g $iface"
+                fi
+            else
+                __repacd_fronthaulmgrmon_debug "2.4 GHz AP VAP ($iface) found"
+                if [ -z "${ap_ifaces_24g}" ]; then
+                    ap_ifaces_24g="$iface"
+                else
+                    ap_ifaces_24g="$ap_ifaces_24g $iface"
+                fi
+            fi
+        fi
+    fi
+}
+
+# Check whether all of the provided interfaces are up
+#
+# input: $1 - list of AP VAPs to check
+#
+# return 0 if all VAPs are up, otherwise non-zero
+__repacd_fronthaulmgrmon_all_AP_VAPs_up() {
+    local ap_ifaces="$1"
+    if [ -n "${ap_ifaces}" ]; then
+        # Check whether all VAPs are up
+        for item in $ap_ifaces
+        do
+            if ip link show ${item} | grep -q 'state DOWN'; then
+                __repacd_fronthaulmgrmon_debug "Fronthaul $item is down; will re-attempt"
+                return 1
+            fi
+        done
+    fi
+
+    return 0
+}
+
+__repacd_fronthaulmgrmon_bringup_AP_VAPs() {
+    if [ -z "${ap_ifaces_5g}" ]; then
+        __repacd_fronthaulmgrmon_debug "No 5 GHz AP VAPs found"
+    else
+        # Bring Up all 5G AP VAPs
+        for item in $ap_ifaces_5g
+        do
+            ifconfig "$item" up
+        done
+    fi
+
+    if [ -z "${ap_ifaces_24g}" ]; then
+        __repacd_fronthaulmgrmon_debug "No 2.4 GHz AP VAPs found"
+    else
+        # Bring Up all 2.4G AP VAPs
+        for item in $ap_ifaces_24g
+        do
+            ifconfig "$item" up
+        done
+    fi
+}
+
+__repacd_fronthaulmgrmon_bringdown_AP_VAPs() {
+    if [ -z "${ap_ifaces_5g}" ]; then
+        __repacd_fronthaulmgrmon_debug "No 5 GHz AP VAPs found"
+    else
+        # Bring Down all 5G AP VAPs
+        for item in $ap_ifaces_5g
+        do
+            ifconfig "$item" down
+        done
+    fi
+
+    if [ -z "${ap_ifaces_24g}" ]; then
+        __repacd_fronthaulmgrmon_debug "No 2.4 GHz AP VAPs found"
+    else
+        # Bring Down all 2.4G AP VAPs
+        for item in $ap_ifaces_24g
+        do
+            ifconfig "$item" down
+        done
+    fi
+}
+
+# Initialize the fronthaul manager, taking action to bring down the fronthaul
+# VAPs if the feature is enabled and the gateway is not reachable.
+repacd_fronthaulmgrmon_init() {
+    local force_down_on_start
+
+    # First resolve the config parameters.
+    config_load repacd
+    config_get manage_fronthaul_and_backhaul_independently 'FrontHaulMgr' \
+        'ManageFrontAndBackHaulsIndependently' '0'
+    config_get fronthaul_VAPs_bringdown_time 'FrontHaulMgr' \
+        'FrontHaulMgrTimeout' '300'
+    config_get force_down_on_start 'FrontHaulMgr' 'ForceDownOnStart' 0
+
+    if [ "$manage_fronthaul_and_backhaul_independently" -gt 0 ]; then
+        config_load wireless
+        config_foreach __repacd_fronthaulmgrmon_get_fronthaul_vaps wifi-iface "lan"
+
+        __repacd_fronthaulmgrmon_debug "Resolved 2.4 GHz: $ap_ifaces_24g"
+        __repacd_fronthaulmgrmon_debug "Resolved 5 GHz: $ap_ifaces_5g"
+
+        if [ "$IS_GW_REACHABLE" -gt 0 ]; then
+            __repacd_fronthaulmgrmon_debug "Bringing up Front-haul VAPs"
+            __repacd_fronthaulmgrmon_bringup_AP_VAPs
+            is_front_haul_VAPs_brought_down=0
+        elif [ "$force_down_on_start" -gt 0 ]; then
+            __repacd_fronthaulmgrmon_debug "Bringing down fronthaul VAPs on start"
+            __repacd_fronthaulmgrmon_bringdown_AP_VAPs
+            is_front_haul_VAPs_brought_down=1
+        fi
+    fi
+}
+
+# Perform the periodic check to determine whether the fronthual interface
+# states need to be updated or not.
+repacd_fronthaulmgrmon_check() {
+    if [ "$manage_fronthaul_and_backhaul_independently" -gt 0 ]; then
+        if [ "$IS_GW_REACHABLE" -eq 0 ]; then
+            if [ "$is_front_haul_VAPs_brought_down" -eq 0 ]; then
+                if  __repacd_wifimon_is_timeout "$GW_NOT_REACHABLE_TIMESTAMP" \
+                    $fronthaul_VAPs_bringdown_time; then
+                    __repacd_fronthaulmgrmon_debug "Expired $fronthaul_VAPs_bringdown_time sec, Bringing down Front-haul VAPs"
+                    __repacd_fronthaulmgrmon_bringdown_AP_VAPs
+                    is_front_haul_VAPs_brought_down=1
+                fi
+            fi
+        else
+            if [ "$is_front_haul_VAPs_brought_down" -gt 0 ]; then
+                __repacd_fronthaulmgrmon_debug "Bringing up Front-haul VAPs"
+                __repacd_fronthaulmgrmon_bringup_AP_VAPs
+
+                if __repacd_fronthaulmgrmon_all_AP_VAPs_up "${ap_ifaces_5g}" &&
+                    __repacd_fronthaulmgrmon_all_AP_VAPs_up "${ap_ifaces_24g}"; then
+                    __repacd_fronthaulmgrmon_debug "All Front-haul VAPs are up"
+                    is_front_haul_VAPs_brought_down=0
+                fi
+            fi
+        fi
+    fi
+}
diff --git a/lib/functions/repacd-gwmon.sh b/lib/functions/repacd-gwmon.sh
new file mode 100755
index 0000000..78ea15a
--- /dev/null
+++ b/lib/functions/repacd-gwmon.sh
@@ -0,0 +1,441 @@
+#!/bin/sh
+# Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2015-2016 Qualcomm Atheros, Inc.
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+GWMON_DEBUG_OUTOUT=0
+GWMON_SWITCH_CONFIG_COMMAND=swconfig
+
+GWMON_MODE_NO_CHANGE=0
+GWMON_MODE_CAP=1
+GWMON_MODE_NON_CAP=2
+GWMON_KERNEL="4.4.60"
+GWMON_PLATFORM=QCA
+
+config_load 'repacd'
+config_get_bool gwmon_cfg config 'cfg80211_enable' '0'
+if [ "$gwmon_cfg" == "1" ]; then
+    REPACD_CFG80211=-cfg80211
+else
+    REPACD_CFG80211=
+fi
+
+. /lib/functions.sh
+. /lib/functions/hyfi-iface.sh
+. /lib/functions/hyfi-network.sh
+. /lib/functions/repacd-wifimon.sh
+
+prev_gw_link='' router_detected=0 gw_iface="" gw_switch_port=""
+managed_network='' switch_iface="" vlan_group="" switch_ports=''
+cpu_portmap=0
+eswitch_support="0"
+gw_mac=""
+last_hop_count=255
+
+IS_GW_REACHABLE=0
+GW_NOT_REACHABLE_TIMESTAMP=0
+
+#Check for Platform & Kernel version
+dut_kernel=$(uname -a  | awk '{print $3}')
+dut_platform=$(grep -w DISTRIB_RELEASE /etc/openwrt_release | awk -F "='" '{print $2}' | awk '{gsub(/.{3}/,"& ")}1' | awk '{print $1}')
+
+# Emit a log message
+# input: $1 - level: the symbolic log level
+# input: $2 - msg: the message to log
+__gwmon_log() {
+    local stderr=''
+    if [ "$GWMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.gwmon -p "user.$1" "$*"
+}
+
+# Emit a log message at debug level
+# input: $1 - msg: the message to log
+__gwmon_debug() {
+    __gwmon_log 'debug' "$1"
+}
+
+# Emit a log message at info level
+# input: $1 - msg: the message to log
+__gwmon_info() {
+    __gwmon_log 'info' "$1"
+}
+
+# Emit a log message at warning level
+# input: $1 - msg: the message to log
+__gwmon_warn() {
+    __gwmon_log 'warn' "$1"
+}
+
+# Obtain a timestamp from the system.
+#
+# These timestamps will be monontonically increasing and be unaffected by
+# any time skew (eg. via NTP or manual date commands).
+#
+# output: $1 - the timestamp as an integer (with any fractional time truncated)
+__gwmon_get_timestamp() {
+    timestamp=$(cut -d' ' -f1 < /proc/uptime | cut -d. -f 1)
+    eval "$1=$timestamp"
+}
+
+__gwmon_find_switch() {
+    local vlan_grp
+
+    #Ignore value returned by eswitch_support in repacd. It is to be used by hyd only.
+    __hyfi_get_switch_iface switch_iface eswitch_support
+
+    if [ -n "$switch_iface" ]; then
+        $GWMON_SWITCH_CONFIG_COMMAND dev switch0 set flush_arl 2>/dev/null
+        vlan_grp="$(echo $switch_iface | awk -F. '{print $2}' 2>/dev/null)"
+    fi
+
+    if [ -z "$vlan_grp" ]; then
+        vlan_group="1"
+    else
+        vlan_group="$vlan_grp"
+    fi
+}
+
+__gwmon_get_switch_ports() {
+    local config="$1"
+    local vlan_group="$2"
+    local ports vlan cpu_port __cpu_portmap
+
+    config_get vlan "$config" vlan
+    config_get ports "$config" ports
+
+    [ ! "$vlan" = "$vlan_group" ] && return
+
+    cpu_port=$(echo "$ports" | awk '{print $1}')
+    ports=$(echo "$ports" | sed "s/$cpu_port //g")
+    eval "$3='$ports'"
+
+    cpu_port=$(echo "$cpu_port" | awk -Ft '{print $1}')
+
+    case $cpu_port in
+        0) __cpu_portmap=0x01;;
+        1) __cpu_portmap=0x02;;
+        2) __cpu_portmap=0x04;;
+        3) __cpu_portmap=0x08;;
+        4) __cpu_portmap=0x10;;
+        5) __cpu_portmap=0x20;;
+        6) __cpu_portmap=0x40;;
+        7) __cpu_portmap=0x80;;
+    esac
+    eval "$4='$__cpu_portmap'"
+}
+
+__gwmon_set_hop_count() {
+    local config=$1
+    local iface mode
+
+    config_get mode "$config" mode
+    config_get iface "$config" ifname
+
+    if [ "$mode" = "ap" ]; then
+        __gwmon_info "Setting intf [$iface] hop count $2"
+        if [ -z $REPACD_CFG80211 ]; then
+            iwpriv "$iface" set_whc_dist "$2"
+        else
+            cfg80211tool "$iface" set_whc_dist "$2"
+        fi
+    fi
+}
+
+# Check GW reachability over Ethernet backhaul,
+# Set hop count correctly to prevent isolated island condition
+__gwmon_prevent_island_loop() {
+    local retries=3
+    local gw_ip next_hop_count=255
+
+    while [ "$retries" -gt 0 ]; do
+        gw_ip=$(route -n | grep ^0.0.0.0 | grep "br-$1" | awk '{print $2}')
+        [ -z "$gw_ip" ] && break
+
+        # Ping returns zero if at least one response was heard from the specified host
+        if ping -W 2 "$gw_ip" -c1 > /dev/null; then
+            __gwmon_debug "Ping to GW IP[$gw_ip] success"
+            next_hop_count=1
+            break
+        else
+            # no ping response was received, retry
+            retries=$((retries -1))
+            __gwmon_debug "Ping to GW IP[$gw_ip] failed ($retries retries left)"
+        fi
+    done
+
+    if [ $last_hop_count -ne $next_hop_count ]; then
+        __gwmon_info "Changing hop_count from $last_hop_count to $next_hop_count"
+        config_load wireless
+        config_foreach __gwmon_set_hop_count wifi-iface $next_hop_count
+        last_hop_count=$next_hop_count
+    fi
+}
+
+__gwmon_check_gwinterface() {
+    local gw_iface_found=1
+    local giface
+    local siface
+
+    # Check the inteface is the vlan of ether_iface
+    giface=${1//.[0-9]*/}
+    siface=${2//.[0-9]*/}
+    if [ "$siface" = "$giface" ]; then
+        eval "$3=$gw_iface_found"
+        __gwmon_info "Both Switch and Gw Interface Match"
+    else
+        eval "$3=0"
+    fi
+}
+
+# Check the link status of the interface connected to the gataway
+# returns: 0 if gateway is detected; non-zero if it is not
+__gwmon_check_gw_iface_link() {
+    local ret
+    local interf
+
+    __gwmon_check_gwinterface $gw_iface $switch_iface interf
+    if [ "$interf" -gt 0 ]; then
+        local link_status
+
+        # Before we check local link status, make sure gw_iface (eth) is up
+        ret=$(ifconfig $gw_iface | grep "UP[A-Z' ']*RUNNING")
+        __gwmon_info "Checking ifconfig $gw_iface is up and running, ret= $ret"
+        [ -z "$ret" ] && prev_gw_link="down" && return 1
+        for switch_port in $gw_switch_port;do
+            if [ "$switch_port" = '0' ]; then
+                continue
+            fi
+            link_status=$($GWMON_SWITCH_CONFIG_COMMAND dev switch0 port $gw_switch_port show | grep link | awk -F: '{print $NF}')
+        done
+        if [ ! "$link_status" = "down" ]; then
+            # link is up
+            if [ ! "$prev_gw_link" = "up" ]; then
+                __gwmon_info "Link to GW UP"
+                prev_gw_link="up"
+            fi
+            # Check if GW is reachable, set appropriate hop count to avoid isolated island condition
+            __gwmon_prevent_island_loop $managed_network
+            return 0
+        fi
+    else
+        ret=$(ifconfig $gw_iface | grep "UP[A-Z' ']*RUNNING")
+        [ -n "$ret" ] && return 0
+    fi
+
+    if [ ! "$prev_gw_link" = "down" ]; then
+        __gwmon_info "Link to GW DOWN"
+        prev_gw_link="down"
+    fi
+    return 1
+}
+
+# __gwmon_check_gateway
+# input: $1 1905.1 managed bridge
+# output: $2 Gateway interface
+# returns: 0 if gateway is detected; non-zero if not detected
+__gwmon_check_gateway() {
+    local gw_ip gw_br_port __gw_iface
+    local ether_ifaces_full ether_ifaces
+    local ether_iface ret
+    local interface_gw
+
+    gw_ip=$(route -n | grep ^0.0.0.0 | grep "br-$1" | awk '{print $2}')
+    [ -z "$gw_ip" ] && return 1
+
+    if ping -W 2 "$gw_ip" -c1 > /dev/null; then
+        if [ "$IS_GW_REACHABLE" -eq 0 ]; then
+            __gwmon_info "GW ($gw_ip) reachable"
+        fi
+        IS_GW_REACHABLE=1
+        GW_NOT_REACHABLE_TIMESTAMP=0
+    else
+        if [ "$IS_GW_REACHABLE" -eq 1 ]; then
+            __gwmon_info "GW ($gw_ip) NOT reachable"
+        fi
+        IS_GW_REACHABLE=0
+        if [ "$GW_NOT_REACHABLE_TIMESTAMP" -eq 0 ]; then
+            __gwmon_get_timestamp GW_NOT_REACHABLE_TIMESTAMP
+        fi
+    fi
+
+    gw_mac=$(grep -w "$gw_ip" /proc/net/arp | grep -w "$1" | awk '{print $4}')
+    [ -z "$gw_mac" ] && return 1
+
+    # Instead of using hyctl (which may not be installed if not running the
+    # full Hy-Fi build), use brctl instead. One additional step of mapping
+    # the port number to an interface name is needed though.
+    gw_br_port=$(brctl showmacs "br-$1" | grep -i "$gw_mac" | awk '{print $1}')
+    [ -z "$gw_br_port" ] && return 1
+
+    __gw_iface=$(brctl showstp "br-$1" | grep \("$gw_br_port"\) | awk '{print $1}')
+    [ -z "$__gw_iface" ] && return 1
+
+    # Get all Ethernet interfaces
+    hyfi_get_ether_ifaces "$1" ether_ifaces_full
+    hyfi_strip_list "$ether_ifaces_full" ether_ifaces
+
+    # Check if this interface belongs to our network
+    for ether_iface in $ether_ifaces; do
+        if [ "$ether_iface" = "$__gw_iface" ]; then
+            gw_iface=$__gw_iface
+            __gwmon_info "Detected Gateway on interface $gw_iface"
+            __gwmon_check_gwinterface "$gw_iface" "$switch_iface" interface_gw
+            if [ "$interface_gw" -gt 0 ]; then
+                local portmap __gw_switch_port=99
+                if [[ "$dut_kernel" = "$GWMON_KERNEL" && "$dut_platform" = "$GWMON_PLATFORM" ]]; then
+                    __gw_switch_port=$($GWMON_SWITCH_CONFIG_COMMAND dev switch0 get arl_table | grep -i "$gw_mac" | awk -F ":" '{print $1}' | awk '{print $2}')
+                else
+                    portmap=$($GWMON_SWITCH_CONFIG_COMMAND dev switch0 get dump_arl | grep -i "$gw_mac" | grep -v $cpu_portmap | awk '{print $4}')
+
+                    case $portmap in
+                        0x01) __gw_switch_port=0;;
+                        0x02) __gw_switch_port=1;;
+                        0x04) __gw_switch_port=2;;
+                        0x08) __gw_switch_port=3;;
+                        0x10) __gw_switch_port=4;;
+                        0x20) __gw_switch_port=5;;
+                        0x40) __gw_switch_port=6;;
+                        0x80) __gw_switch_port=7;;
+                    esac
+                fi
+                if [ "$__gw_switch_port" -eq 99 ]; then
+                    __gwmon_warn "invalid port map $portmap"
+                    return 1
+                fi
+                gw_switch_port=$__gw_switch_port
+            fi
+            __repacd_wifimon_bring_iface_down $sta_iface_5g
+            __repacd_wifimon_bring_iface_down $sta_iface_24g
+            return 0
+        fi
+    done
+
+    # also check the loop prevention code to see if it believes we have
+    # an upstream facing Ethernet interface
+    local num_upstream
+    num_upstream=$(lp_numupstream)
+    if [ "${num_upstream}" -gt 0 ]; then
+        return 0
+    fi
+
+    return 1
+}
+
+# Determine if the GW is reachable and update the router_detected global
+# variable accordingly.
+__gwmon_update_router_detected() {
+    if __gwmon_check_gateway "$managed_network"; then
+        router_detected=1
+    else
+        router_detected=0
+    fi
+}
+
+# Check whether the configured mode matches the mode that is determined by
+# checking for connectivity to the gateway.
+#
+# input: $1 cur_role: the current mode that is configured
+# input: $2 start_mode: the mode in which the auto-configuration script is being
+#                       run; This is used by the init script to help indicate
+#                       that it was an explicit change into this mode.
+#                       If the mode was CAP, then it should take some time
+#                       before it is willing to switch back to non-CAP due
+#                       to lack of a gateway.
+# input: $3 managed_network: the logical name for the network interfaces to
+#                            monitor
+#
+# return: value indicating the desired mode of operation
+#  - $GWMON_MODE_CAP to act as the main AP
+#  - $GWMON_MODE_NON_CAP to switch to being a secondary AP
+#  - $GWMON_MODE_NO_CHANGE for now change in the mode
+__gwmon_init() {
+    local cur_mode=$1
+    local start_mode=$2
+    local eth_mon_enabled
+
+    managed_network=$3
+    __gwmon_find_switch "$managed_network"
+    [ -n "$switch_iface" ] && __gwmon_info "found switch on $switch_iface VLAN=$vlan_group"
+
+    config_load repacd
+    config_get eth_mon_enabled repacd 'EnableEthernetMonitoring' '0'
+
+    config_load network
+    config_foreach __gwmon_get_switch_ports switch_vlan "$vlan_group" switch_ports cpu_portmap
+    __gwmon_info "switch ports in the $managed_network network: $switch_ports"
+
+    __gwmon_update_router_detected
+
+    if [ "$cur_mode" = "CAP" ]; then
+        if [ "$router_detected" -eq 0 ]; then
+            if [ "$eth_mon_enabled" -eq 0 ] && [ ! "$start_mode" = "CAP" ]; then
+                return $GWMON_MODE_NON_CAP
+            else
+                local retries=3
+
+                while [ "$retries" -gt 0 ]; do
+                    __gwmon_update_router_detected
+                    [ "$router_detected" -gt 0 ] && break
+                    retries=$((retries - 1))
+                    __gwmon_debug "redetecting gateway ($retries retries left)"
+                done
+
+                # If gateway was still not detected after our attempts,
+                # indicate we should change to non-CAP mode.
+                if [ "$router_detected" -eq 0 ]; then
+                    if [ "$eth_mon_enabled" -eq 0 ]; then
+                        return $GWMON_MODE_NON_CAP
+                    else
+                        return $GWMON_MODE_NO_CHANGE
+                    fi
+                fi
+            fi
+        fi
+    else   # non-CAP mode
+        if [ "$router_detected" -eq 1 ]; then
+            local mixedbh
+            mixedbh=$(uci get repacd.repacd.EnableMixedBackhaul 2>/dev/null)
+            if [ "$mixedbh" != "1" ]; then
+                return $GWMON_MODE_CAP
+            fi
+        fi
+    fi
+
+    return $GWMON_MODE_NO_CHANGE
+}
+
+# return: 2 to indicate CAP mode; 1 for non-CAP mode; 0 for no change
+__gwmon_check() {
+    if [ "$router_detected" -eq 0 ]; then
+        __gwmon_update_router_detected
+
+        if [ "$router_detected" -gt 0 ]; then
+            local mixedbh
+            mixedbh=$(uci get repacd.repacd.EnableMixedBackhaul 2>/dev/null)
+            # if we want to support mixed backhaul, e.g., if we want to
+            # enable both WiFi and Ethernet backhaul, then we stay in
+            # non-cap mode so the STA interfaces remain up.  otherwise,
+            # set to cap mode which brings down the STA interfaces.
+            if [ "$mixedbh" != "1" ]; then
+                return $GWMON_MODE_CAP
+            fi
+        fi
+    else
+        if ! __gwmon_check_gw_iface_link "$managed_network"; then
+            # Gateway is gone
+            router_detected=0
+            gw_iface=""
+            gw_switch_port=""
+            return $GWMON_MODE_NON_CAP
+        fi
+    fi
+
+    return $GWMON_MODE_NO_CHANGE
+}
diff --git a/lib/functions/repacd-led.sh b/lib/functions/repacd-led.sh
new file mode 100755
index 0000000..013e8a6
--- /dev/null
+++ b/lib/functions/repacd-led.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+# Copyright (c) 2015 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+. /lib/functions.sh
+
+# Determine the SysFS path corresponding to the LED with the given name.
+# input: $1 - name: the virtual name of the LED (used within the UCI system
+#                   configuration)
+# output: $2 - sysfs path: the parameter into which to store the sysfs path
+# return: 0 on success; 1 if the LED could not be located by name
+__repacd_led_get_path() {
+    local led_name=$1 sysfs_name
+    config_load system
+    config_get sysfs_name "$led_name" 'sysfs' ''
+    if [ -n "$sysfs_name" ]; then
+        eval "$2=/sys/class/leds/$sysfs_name"
+        return 0
+    else  # not found
+        return 1
+    fi
+}
+
+__repacd_led_set_state() {
+    local state_name=$1 index=$2
+    local name trigger brightness delay_on delay_off
+    local sysfs_path
+
+    config_load repacd
+    config_get name "$state_name" "Name_${index}" ''
+    if [ -n "$name" ]; then
+        config_get trigger "$state_name" "Trigger_${index}" ''
+        config_get brightness "$state_name" "Brightness_${index}" ''
+        if [ "$trigger" = 'timer' ]; then
+            config_get delay_on "$state_name" "DelayOn_${index}" ''
+            config_get delay_off "$state_name" "DelayOff_${index}" ''
+        fi
+
+        __repacd_led_get_path "$name" sysfs_path
+
+        # Now activate the changes if all of the values are valid.
+        if [ -n "$trigger" ] && [ -n "$brightness" ] && [ -n "$sysfs_path" ]; then
+            # Change the mode first so that any additional values can be set.
+            echo "$trigger" > "$sysfs_path/trigger"
+            echo "$brightness" > "$sysfs_path/brightness"
+
+            # The on/off values only get written for timer mode (as the sysfs
+            # files do not even exist in other modes).
+            #
+            # Note that a different value is first written to force the blink
+            # rate to be updated. Without this, it seems that the LEDs do not
+            # blink if the default values (of 500 ms on/off) are written.
+            if [ "$trigger" = 'timer' ] && [ -n "$delay_on" ]; then
+                echo 1 > "$sysfs_path/delay_on"
+                echo "$delay_on" > "$sysfs_path/delay_on"
+            fi
+
+            if [ "$trigger" = 'timer' ] && [ -n "$delay_off" ]; then
+                echo 1 > "$sysfs_path/delay_off"
+                echo "$delay_off" > "$sysfs_path/delay_off"
+            fi
+        fi
+    fi
+}
+
+# Update the LEDs to the state indicated based on the configuration file.
+# input: $1 - state name: the name to use as the section name when looking
+#                         up the LED configuration
+repacd_led_set_states() {
+    # For now, we only support up to 2 LEDs
+    for index in $(seq 1 2)
+    do
+        __repacd_led_set_state "$1" "$index"
+    done
+}
diff --git a/lib/functions/repacd-lp.sh b/lib/functions/repacd-lp.sh
new file mode 100755
index 0000000..ad8088c
--- /dev/null
+++ b/lib/functions/repacd-lp.sh
@@ -0,0 +1,395 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+. /usr/share/libubox/jshn.sh
+. /lib/functions/repacd-netdet.sh
+
+LP_DIRECTION_UPSTREAM="upstream"
+LP_DIRECTION_DOWNSTREAM="downstream"
+LP_DIRECTION_UNKNOWN="unknown"
+LP_ROLE_CAP="CAP"
+LP_ROLE_RE="RE"
+LP_VLAN_OFFSET=10
+
+LP_DIRECTION_DB="/etc/ports.dir"
+
+EDMA_ETH0_PORTBMP="/proc/sys/net/edma/default_group1_bmp"
+EDMA_ETH1_PORTBMP="/proc/sys/net/edma/default_group2_bmp"
+
+#TODO - these values need to be determined by board
+#Port number of the port in the eth0 vlan by default
+LP_ETH0_PORT=5
+#Port number of the cpu port including the "t" for tagging if appropriate
+LP_CPU_PORT="0t"
+
+#TODO - these should probably be configurable from outside ths script
+#Timeout for dhcp requests from CA
+LP_DHCP_TO_CAP=15
+#Timeout for dhcp requests from RE (needs to be longer than from CA)
+LP_DHCP_TO_RE=30
+
+__lp_loginfo() {
+    logger -t repacd.lp -p user.info "$1"
+}
+
+__lp_logdebug() {
+    logger -t repacd.lp -p user.debug "$1"
+}
+
+#Returns the default interface for the given port
+lp_defaultinterface() {
+    if [ $port = $LP_ETH0_PORT ]; then
+        echo "eth0"
+    else
+        echo "eth1"
+    fi
+}
+#Returns the isolated inteface name for a given port
+lp_interfacebyport() {
+    local port=$1
+    local baseinterface=$(lp_defaultinterface $port)
+    local interface="${baseinterface}.$(( $port + $LP_VLAN_OFFSET ))"
+    echo $interface
+}
+
+#Returns the role of the device, either "CAP" or "RE"
+lp_devicerole() {
+    #A CAP should have an entry for network.wan.ifname, an RE should not
+    uci get network.wan.ifname >/dev/null
+    if [ $? = 0 ]; then
+        echo $LP_ROLE_CAP
+    else
+        echo $LP_ROLE_RE
+    fi
+}
+
+#Returns the determined direction (upstream, downstram, or unknown) for the
+#given port
+lp_getportdirection() {
+    local port=$1
+    local direction=$LP_DIRECTION_UNKNOWN
+    if [ -f $LP_DIRECTION_DB ]; then
+        json_load "$(cat $LP_DIRECTION_DB)"
+        json_select "port" >/dev/null
+        json_get_var direction $port
+    fi
+
+    echo $direction
+}
+
+#set the current direction (upstream, downstream, or unknown) in a
+#persistent db
+lp_setportdb() {
+    local port=$1
+    local direction=$2
+    local current
+    local new
+    local nports=$(lp_numports)
+    local dir
+
+    if [ -f $LP_DIRECTION_DB ]; then
+        current=$(cat $LP_DIRECTION_DB)
+    else
+        current="{}"
+    fi
+    json_init
+    json_add_array "port"
+    new=$(json_dump)
+    for p in $(seq 1 $nports); do
+        if [ $p = $port ]; then
+            dir=$direction
+        else
+            json_load "$current"
+            dir=$LP_DIRECTION_UNKNOWN
+            json_select "port" >/dev/null
+            json_get_var dir $p
+        fi
+        json_load "$new"
+        json_select "port"
+        json_add_string $p $dir
+        new=$(json_dump)
+    done
+    json_close_array
+    new=$(json_dump)
+
+    local tmpfile="$(dirname $LP_DIRECTION_DB)/.$(basename $LP_DIRECTION_DB)"
+    echo "$new" > $tmpfile
+    mv $tmpfile $LP_DIRECTION_DB
+}
+
+#Returns the current number of ports which are marked upstream
+lp_numupstream() {
+    local nup=0
+    local dir
+    local nports=$(lp_numports)
+
+    if [ -f $LP_DIRECTION_DB ]; then
+        json_load "$(cat $LP_DIRECTION_DB)"
+        json_select "port" >/dev/null
+        for p in $(seq 1 $nports); do
+            dir=$LP_DIRECTION_UNKNOWN
+            json_get_var dir $p
+            if [ $dir = $LP_DIRECTION_UPSTREAM ]; then
+                nup=$(( nup + 1 ))
+            fi
+        done
+    fi
+    echo $nup
+}
+
+
+#Returns the number of ethernet ports on switch0
+lp_numports() {
+    local lines=$(swconfig dev switch0 show | grep ports | wc -l)
+    local words=$(swconfig dev switch0 show | grep ports | wc -w)
+
+    echo $(( (( $words - $lines )) - $lines ))
+}
+
+#Determines whether the given interface is upstream or downstream
+lp_determinedirection() {
+
+    local port=$1
+    #If netdet has already determined that this is a CAP device
+    #then we will already have an upstream connection, and all
+    #subsequent connections (including this one) should be
+    #considered downstream
+    local netdetmode=$(netdet_get_mode_db)
+    local upstrmports=$(lp_numupstream)
+    local portdirection=$(lp_getportdirection $port)
+
+    logger -t repacd.lp -p user.debug "netdetmode: $netdetmode"
+    logger -t repacd.lp -p user.debug "upstrmports: $upstrmports"
+    if [ $netdetmode = "cap" ] && [ $upstrmports -gt 0 ] && [ $portdirection != $LP_DIRECTION_UPSTREAM ]; then
+        logger -t repacd.lp -p user.info "Port $port assumed downstream on cap"
+        echo $LP_DIRECTION_DOWNSTREAM
+    else
+        local role=$2
+        local iface=$(lp_interfacebyport $port)
+        local timeout
+        if [ $role = $LP_ROLE_CAP ]; then
+            timeout=$LP_DHCP_TO_CAP
+        else
+            timeout=$LP_DHCP_TO_RE
+        fi
+
+        if udhcpc -i $iface -t $timeout -T1 -n -q -R > /dev/null 2>&1; then
+            __lp_loginfo "Port $port determined upstream"
+            echo $LP_DIRECTION_UPSTREAM
+        else
+            __lp_loginfo "Port $port determined downstream"
+            echo $LP_DIRECTION_DOWNSTREAM
+        fi
+    fi
+}
+
+#Isolate port in its own vlan and create virtual interface
+lp_isolateport() {
+    local port=$1
+    local isovlan=$(( $port + $LP_VLAN_OFFSET ))
+    local currvlan=$(swconfig dev switch0 port $port get pvid)
+    local currports=$(swconfig dev switch0 vlan $currvlan show | grep ports | cut -d: -f2)
+    local newports=""
+
+    __lp_loginfo "Isolating switch port $port into its own vlan"
+    #remove port from its current vlan
+    for p in $currports; do
+        if [ $p != $port ]; then
+            newports="$newports $p"
+        fi
+    done
+    __lp_logdebug "swconfig dev switch0 vlan $currvlan set ports \"$LP_CPU_PORT $newports\""
+    swconfig dev switch0 vlan $currvlan set ports "$LP_CPU_PORT $newports"
+
+    #add port to isovlan
+    currports=$(swconfig dev switch0 vlan $isovlan show | grep ports | cut -d: -f2)
+    __lp_logdebug "swconfig dev switch0 vlan $isovlan set ports \"$LP_CPU_PORT $currports $port\""
+    swconfig dev switch0 vlan $isovlan set ports "$LP_CPU_PORT $currports $port"
+    __lp_logdebug "swconfig dev switch0 set apply"
+    swconfig dev switch0 set apply
+
+    if [ $port = $LP_ETH0_PORT ]; then
+        __lp_logdebug "vconfig add eth0 $isovlan"
+        vconfig add eth0 $isovlan
+    else
+        __lp_logdebug "vconfig add eth1 $isovlan"
+        vconfig add eth1 $isovlan
+    fi
+    lp_setedmamasks $port $(lp_defaultinterface $port)
+}
+
+lp_deisolateport() {
+    local port=$1
+    local isovlan=$(( $port + $LP_VLAN_OFFSET ))
+    local currvlan=$(swconfig dev switch0 port $port get pvid)
+
+    if [ $isovlan = $currvlan ]; then
+        #This check might not be necessary, but it prevents us from
+        #manipulating a port which is not isolated
+
+        local isoiface=$(lp_interfacebyport $port)
+        local unisovlan
+
+        #Remove port form the isolated vlan
+        swconfig dev switch0 vlan $isovlan set ports ""
+        #Remove virtual interface
+        vconfig rem $isoiface
+        #put port back in the appropriate eth0 or eth1 vlan
+        if [ $port = $LP_ETH0_PORT ]; then
+            unisovlan=2
+        else
+            unisovlan=1
+        fi
+
+        local currports=$(swconfig dev switch0 vlan $unisovlan show | grep ports | cut -d: -f2)
+        swconfig dev switch0 vlan $unisovlan set ports "$currports $port"
+        swconfig dev switch0 set apply
+    fi
+}
+
+#set the edma masks so the bitmap for the given iface (eth0 or eth1)
+#contains the given port, and the bitmask fot the other iface does not
+lp_setedmamasks() {
+    local port=$1
+    local dest_iface=$2
+    local currmask_eth0=$(cat $EDMA_ETH0_PORTBMP)
+    local currmask_eth1=$(cat $EDMA_ETH1_PORTBMP)
+    local newmask_eth0
+    local newmask_eth1
+
+    if [ $dest_iface = "eth0" ]; then
+        newmask_eth0=$(( $currmask_eth0 | (1 << $port) ))
+        newmask_eth1=$(( $currmask_eth1 & ~(1 << $port) ))
+    elif [ $dest_iface = "eth1" ]; then
+        newmask_eth0=$(( $currmask_eth0 & ~(1 << $port) ))
+        newmask_eth1=$(( $currmask_eth1 | (1 << $port) ))
+    else
+        #should not get here, but if we do do not adjust either bitmap
+        newmask_eth0=$currmask_eth0
+        newmask_eth1=$currmask_eth1
+    fi
+
+    printf "0x%x" $newmask_eth0 > $EDMA_ETH0_PORTBMP
+    printf "0x%x" $newmask_eth1 > $EDMA_ETH1_PORTBMP
+}
+
+#moves the given port to the eth0 vlan (2) or the eth1 vlan (1)
+#and removes it from the other via swconfig
+lp_moveportswconfig() {
+    local port=$1
+    local dest_iface=$2
+    local removefromvlan
+    local addtovlan
+    local isovlan=$(( $port + $LP_VLAN_OFFSET ))
+    local isoiface=$(lp_interfacebyport $port)
+
+    if [ $dest_iface = "eth0" ]; then
+        removefromvlan=1
+        addtovlan=2
+    elif [ $dest_iface = "eth1" ]; then
+        removefromvlan=2
+        addtovlan=1
+    else
+        #should not get here, but if we do do not move port
+        removefromvlan=3
+        addtovlan=3
+    fi
+
+    local currports=$(swconfig dev switch0 vlan $removefromvlan show | grep ports | cut -d: -f2)
+    local newports
+    for p in $currports; do
+        if [ $p != $port ]; then
+            newports="$newports $p"
+        fi
+    done
+    __lp_logdebug "swconfig dev switch0 vlan $removefromvlan set ports $newports"
+    swconfig dev switch0 vlan $removefromvlan set ports $newports
+
+    currports=$(swconfig dev switch0 vlan $addtovlan show | grep ports | cut -d: -f2)
+    __lp_logdebug "swconfig dev switch0 vlan $addtovlan set ports \"$currports $port\""
+    swconfig dev switch0 vlan $addtovlan set ports "$currports $port"
+
+    #eliminate the isolation vlan and virtual interface
+    __lp_logdebug "swconfig dev switch0 vlan $isovlan set ports \"\""
+    swconfig dev switch0 vlan $isovlan set ports ""
+    __lp_logdebug "vconfig rem $isoiface"
+    vconfig rem $isoiface
+
+    __lp_logdebug "swconfig dev switch0 set apply"
+    swconfig dev switch0 set apply
+}
+
+
+#Move the given port to the eth0 vlan
+lp_moveporttoeth0() {
+    local port=$1
+    __lp_loginfo "Moving switch port $port into the eth0 vlan"
+    lp_moveportswconfig $port "eth0"
+    lp_setedmamasks $port "eth0"
+}
+
+#Move the given port to the eth1 vlan
+lp_moveporttoeth1() {
+    local port=$1
+    __lp_loginfo "Moving switch port $port into the eth1 vlan"
+    lp_moveportswconfig $port "eth1"
+    lp_setedmamasks $port "eth1"
+}
+
+
+#Make the hotplug call to signal the direction has been determined for
+#the given port
+lp_signaldirectionhotplug() {
+    local port=$1
+    local direction=$2
+    (export PORT=$port; export EVENT="direction"; export STATE=$direction; hotplug-call switch)
+}
+
+#Called by hotplug whenever a port transtions to link-up status
+lp_onlinkup() {
+    local port=$1
+    local role=$(lp_devicerole)
+    local direction
+    local current_direction=$(lp_getportdirection $port)
+
+    logger -t repacd.lp -p user.debug "did we miss a down notification for port $port? current_direction: $current_direction"
+    if [ $current_direction != $LP_DIRECTION_UNKNOWN ]; then
+        logger -t repacd.lp -p user.debug "we missed a down notification for port $port so act like we didn't"
+        lp_onlinkdown $port
+    fi
+    direction=$(lp_determinedirection $port $role)
+    lp_signaldirectionhotplug $port $direction
+}
+
+#Called by hotplug whenever a port transtions to link-down status
+lp_onlinkdown() {
+    local port=$1
+    lp_setportdb $port $LP_DIRECTION_UNKNOWN
+    #isolate port back into its own iface
+    lp_isolateport $port
+}
+
+#Called by hotplug whenever a port direction has been determined upstream
+lp_onupstream() {
+    local port=$1
+    lp_setportdb $port $LP_DIRECTION_UPSTREAM
+    lp_moveporttoeth0 $port
+}
+
+#Called by hotplug whenever a port direction has been determined downstream
+lp_ondownstream() {
+    local port=$1
+    lp_setportdb $port $LP_DIRECTION_DOWNSTREAM
+    lp_moveporttoeth1 $port
+}
+
+repacd_lp_init() {
+    local nports=$(lp_numports)
+    for p in $(seq 1 $nports); do
+        lp_isolateport $p
+        lp_setportdb $p $LP_DIRECTION_UNKNOWN
+    done
+}
diff --git a/lib/functions/repacd-netdet.sh b/lib/functions/repacd-netdet.sh
new file mode 100755
index 0000000..dadd0b0
--- /dev/null
+++ b/lib/functions/repacd-netdet.sh
@@ -0,0 +1,348 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+
+# NOTE: At boot, even if we add 'list interface "wan"' to /etc/config/lldpd,
+# lldpd doesn't listen on eth0.  We have to restart lldpd and then it starts
+# listening.
+
+NETDET_DEBUG_OUTOUT=0
+
+NETDET_MODE_DB=/etc/ap.mode
+
+NETDET_RESULT_ROOTAP=0
+NETDET_RESULT_RE=1
+NETDET_RESULT_INDETERMINATE=2
+
+NETDET_CAP_BRIDGE_ROUTER_RESULT_ROUTER=0
+NETDET_CAP_BRIDGE_ROUTER_RESULT_BRIDGE=1
+
+NETDET_IS_WIFISON_DEVICE_VISIBLE_TRUE=0
+NETDET_IS_WIFISON_DEVICE_VISIBLE_FALSE=1
+
+NETDET_LLDP_WIFISON_CUSTOM_TLV_OUI=33,44,55
+NETDET_LLDP_WIFISON_CUSTOM_TLV_SUBTYPE=44
+NETDET_LLDP_WIFISON_CUSTOM_TLV_DATA=45,45,45,45,45
+
+NETDET_CURRENT_MODE_ROOTAP=0
+NETDET_CURRENT_MODE_RE=1
+
+#Note: On some systems, the lan bridge might be named br0 or something
+#else other than br-lan
+NETDET_LANBRIDGE="br-lan"
+
+# Emit a message at debug level.
+# input: $1 - the message to log
+__netdet_debug() {
+    local stderr=''
+    if [ "$NETDET_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.netdet -p user.debug "$1"
+}
+
+# Check to see if lldpd is listening on a particular port
+__netdet_is_lldpd_listening() {
+    local port=$1
+    lldpcli show configuration | grep "Interface pattern: " | grep $port > /dev/null
+}
+
+# Are there any Wi-Fi SON neighbors reachable via a particular port?
+__netdet_has_wifison_neighbors() {
+    local port=$1
+    lldpcli show neighbors ports $port details | grep "TLV:.*OUI: ${NETDET_LLDP_WIFISON_CUSTOM_TLV_OUI}, SubType: ${NETDET_LLDP_WIFISON_CUSTOM_TLV_SUBTYPE},.* ${NETDET_LLDP_WIFISON_CUSTOM_TLV_DATA}$" > /dev/null
+}
+
+# Does a particular interface have an IPv4 address?
+__netdet_has_address() {
+    local intf=$1
+    ifconfig $intf | grep "inet addr:[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" > /dev/null
+}
+
+# Is dhcpc running on a particular interface?
+__netdet_is_running_dhcp_client() {
+    local intf=$1
+    ps -w | grep dhcpc | grep $intf > /dev/null
+}
+
+# Does a particular interface have a DHCP-assigned IPv4 address?
+__netdet_has_dhcp_address() {
+    local intf=$1
+    __netdet_is_running_dhcp_client $intf && __netdet_has_address $intf
+}
+
+# Can you see WiFiSON devices on a particular port?
+__netdet_is_wifison_device_visible() {
+    local port=$1
+    if ! __netdet_is_lldpd_listening $port; then
+        __netdet_debug "warning: lldpd wasn't listening on $port so restarting"
+        repacd_netdet_lldpd_init restart
+    fi
+    local timeout=30 # secs
+    local currtime=$(date +%s)
+    local timeouttime=$(($currtime + $timeout))
+    while [ $currtime -le $timeouttime ]; do
+        if __netdet_has_wifison_neighbors $port; then
+            return $NETDET_IS_WIFISON_DEVICE_VISIBLE_TRUE
+        fi
+        sleep 1
+        currtime=$(date +%s)
+    done
+    return $NETDET_IS_WIFISON_DEVICE_VISIBLE_FALSE
+}
+
+# Return a list of all the network interfaces that we care about
+__netdet_get_interfaces() {
+    ifconfig | grep "^\(eth\|ath\|br\)" | awk '{ print $1 }'
+}
+
+# Enable/disable DHCP server
+__repacd_netdet_dhcpd() {
+    case $1 in
+        disable | off | stop)
+            uci set dhcp.lan.ignore=1
+            ;;
+        enable | on | start)
+            uci set dhcp.lan.ignore=0
+            ;;
+        *)
+            echo "error: unknown parameter: $1" >&2
+            return 2
+            ;;
+    esac
+    uci commit dhcp
+    /etc/init.d/dnsmasq restart
+}
+
+# Returns the determined mode (cap, re, or unknown)
+netdet_get_mode_db() {
+    local mode="unknown"
+    if [ -f $NETDET_MODE_DB ]; then
+        mode="$(cat $NETDET_MODE_DB)"
+    fi
+    echo $mode
+}
+
+# Saves the given mode to the database
+netdet_set_mode_db() {
+    local mode="$1"
+    local tmpfile="$(dirname $NETDET_MODE_DB)/.$(basename $NETDET_MODE_DB)"
+    echo "$mode" > $tmpfile
+    mv $tmpfile $NETDET_MODE_DB
+}
+
+# Add our custom WiFi SON TLV to lldpd
+netdet_set_custom_wifison_lldp_tlv() {
+    # remove any existing custom TLVs
+    lldpcli unconfigure lldp custom-tlv > /dev/null
+    lldpcli configure lldp custom-tlv oui $NETDET_LLDP_WIFISON_CUSTOM_TLV_OUI subtype $NETDET_LLDP_WIFISON_CUSTOM_TLV_SUBTYPE oui-info $NETDET_LLDP_WIFISON_CUSTOM_TLV_DATA > /dev/null
+}
+
+# Set lldpd interfaces
+netdet_set_lldpd_interfaces() {
+    lldpcli configure system interface pattern $(__netdet_get_interfaces | tr '\n' ',')
+}
+
+# Set lldp tx interval
+# input: $1 - the interval in seconds
+netdet_set_lldpd_tx_interval() {
+    lldpcli configure lldp tx-interval $1
+}
+
+# Do WAN/LAN detection
+netdet_wan_lan_detect() {
+    __netdet_debug "running wan/lan detection"
+    local is_uplink_no_wifison="false"
+    local is_uplink_with_wifison="false"
+    local int="eth0"
+    __netdet_is_wifison_device_visible $int
+    case $? in
+    $NETDET_IS_WIFISON_DEVICE_VISIBLE_TRUE)
+        is_uplink_with_wifison="true"
+        __netdet_debug "$int: LAN (with visible Wi-Fi SON device)"
+        ;;
+    $NETDET_IS_WIFISON_DEVICE_VISIBLE_FALSE)
+        is_uplink_no_wifison="true"
+        __netdet_debug "$int: WAN"
+        ;;
+    *)
+        __netdet_debug "got unknown return from __netdet_is_wifison_device_visible"
+        ;;
+    esac
+    if [ "$is_uplink_no_wifison" == "true" ]; then
+        __netdet_debug "looks like a root AP"
+        return $NETDET_RESULT_ROOTAP
+    elif [ "$is_uplink_with_wifison" == "true" ]; then
+        __netdet_debug "looks like a range extender"
+        return $NETDET_RESULT_RE
+    else
+        __netdet_debug "indeterminate"
+        return $NETDET_RESULT_INDETERMINATE
+    fi
+}
+
+# determines if the local device should be configured for bridge mode or router
+# mode.  the decision is based on whether the WAN interface is configured on
+# a private network.
+netdet_detect_cap_bridge_router_mode() {
+    local dev
+    local ipaddr
+    local net
+    local privnets
+
+    __netdet_debug "detecting whether this cap should be a bridge or router"
+
+    dev=$(uci get network.wan.ifname 2>/dev/null)
+    [ -z "${dev}" ] && {
+        dev=$NETDET_LANBRIDGE
+    }
+
+    ipaddr=$(ip addr show dev $dev | grep "inet " | awk '{print $2}')
+    [ -z '${ipaddr}' ] && {
+        # assume router so the firewall will be up when the interface comes up
+        __netdet_debug "no IP addr configured, should configure as router"
+        return $NETDET_CAP_BRIDGE_ROUTER_RESULT_ROUTER
+    }
+    net=$(ipcalc.sh ${ipaddr} | grep NETWORK)
+
+    privnets=$(uci get repacd.repacd.rfc1918 2>/dev/null)
+    [ -z "${privnets}" ] && {
+        privnets='10.0.0.0/8 172.16.0.0/12 192.168.0.0/16'
+    }
+
+    __netdet_debug "checking the wan iface against the list of private networks"
+    for privcidr in ${privnets}; do
+        local privnet=$(ipcalc.sh ${privcidr} | grep NETWORK)
+        [ "${net}" = "${privnet}" ] && {
+            __netdet_debug "the wan iface is on a private network, should configure as bridge"
+            return $NETDET_CAP_BRIDGE_ROUTER_RESULT_BRIDGE
+        }
+    done
+
+    __netdet_debug "should configure as router"
+    return $NETDET_CAP_BRIDGE_ROUTER_RESULT_ROUTER
+}
+
+# modifies the local device to run in bridge mode
+netdet_configure_cap_bridge_mode() {
+    __netdet_debug "configuring cap in bridge mode"
+    uci set dhcp.lan.ignore=1
+    uci commit dhcp
+    /etc/init.d/dnsmasq restart
+
+    uci set network.lan.ifname='eth0 eth1'
+    uci set network.lan.proto='dhcp'
+    uci delete network.wan
+    uci commit network
+    /etc/init.d/network restart
+
+    uci set repacd.GatewayConnectedMode='CAP'
+    uci commit repacd
+    /etc/init.d/repacd restart
+}
+
+# modifies the local device to run in router mode
+netdet_configure_cap_router_mode() {
+    __netdet_debug "configuring cap in router mode"
+    uci set network.lan.ifname='eth1'
+    uci set network.lan.proto='static'
+    uci set network.lan.ipaddr='192.168.1.1'
+
+    uci set network.wan=interface
+    uci set network.wan.ifname='eth0'
+    uci set network.wan.proto='dhcp'
+
+    uci commit network
+    /etc/init.d/network restart
+
+    uci delete dhcp.lan.ignore
+    uci commit dhcp
+    /etc/init.d/dnsmasq restart
+    /etc/init.d/repacd restart
+}
+
+# setup lldpd parameters since these don't persist across restart
+repacd_netdet_lldpd_setup() {
+    netdet_set_lldpd_interfaces
+    netdet_set_lldpd_tx_interval 10
+    netdet_set_custom_wifison_lldp_tlv
+}
+
+repacd_netdet_init() {
+    repacd_netdet_lldpd_setup
+}
+
+repacd_netdet_lldpd_init() {
+    /etc/init.d/lldpd $1
+    if [ $1 != "stop" ]; then
+        while ! [ -e /var/run/lldpd.socket ]; do
+            sleep 1
+        done
+        repacd_netdet_lldpd_setup
+    fi
+}
+
+# Get the device's currently configured mode
+repacd_netdet_get_current_device_mode() {
+    if uci get network.wan > /dev/null; then
+        return $NETDET_CURRENT_MODE_ROOTAP
+    else
+        return $NETDET_CURRENT_MODE_RE
+    fi
+}
+
+# Configure this device as either a rootap or an re
+repacd_netdet_set_current_device_mode() {
+    local mode="$1"
+    case $mode in
+        rootap)
+            netdet_detect_cap_bridge_router_mode
+            local result=$?
+            case $result in
+                $NETDET_CAP_BRIDGE_ROUTER_RESULT_ROUTER)
+                    netdet_configure_cap_router_mode
+                ;;
+                $NETDET_CAP_BRIDGE_ROUTER_RESULT_BRIDGE)
+                    netdet_configure_cap_bridge_mode
+                ;;
+                *)
+                    echo "error: unknown mode: $result" >&2
+                    return 3
+                ;;
+            esac
+            ;;
+        re)
+            __repacd_netdet_dhcpd disable
+            uci set network.lan.ifname='eth0 eth1'
+            uci set network.lan.proto=dhcp
+            uci delete network.wan
+            uci commit network
+            /etc/init.d/network restart
+            /etc/init.d/repacd restart
+            ;;
+        *)
+            echo "error: unknown mode: $mode" >&2
+            return 2
+            ;;
+    esac
+}
+
+repacd_netdet_wait_for_dhcp_addr() {
+    local intf=$1
+    local timeout=$2
+    if [ -z "$timeout" ]; then
+        timeout=15
+    fi
+    local endtime=$(( $(date +%s) + $timeout ))
+    while ! __netdet_has_dhcp_address $intf; do
+        sleep 1
+        if [ $(date +%s) -gt $endtime ]; then
+            return 1
+        fi
+    done
+    return 0
+}
diff --git a/lib/functions/repacd-plcmon.sh b/lib/functions/repacd-plcmon.sh
new file mode 100755
index 0000000..cfb7c69
--- /dev/null
+++ b/lib/functions/repacd-plcmon.sh
@@ -0,0 +1,156 @@
+#!/bin/sh
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+
+PLCMON_DEBUG_OUTOUT=0
+
+PLCMON_LINK_METRICS='/var/run/plcmetrics'
+PLCMON_UDP_EFFICIENCY="65"
+PLCMON_TX="TX"
+PLCMON_BDA="BDA"
+PLCMON_BDA_NONE="FF:FF:FF:FF:FF:FF"
+PLCMON_REMOTE=":Remote"
+
+# PLC config parameters
+plc_enabled=0 plc_ifname="" plc_host_speed=0
+
+# Emit a message at debug level.
+# input: $1 - the message to log
+__repacd_plcmon_debug() {
+    local stderr=''
+    if [ "$PLCMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.plcmon -p user.debug "$1"
+}
+
+# Emit a message at info level.
+__repacd_plcmon_info() {
+    local stderr=''
+    if [ "$PLCMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.plcmon -p user.info "$1"
+}
+
+# Bringup PLC interface
+# input: None
+# output: None
+__repacd_plcmon_bring_plc_iface_up() {
+    if [ ! -z "$plc_ifname" ]; then
+        ifconfig $plc_ifname up
+        __repacd_plcmon_debug "PLC interface ($plc_ifname) Brought up"
+    fi
+}
+
+# Bringdown PLC interface
+# input: None
+# output: None
+__repacd_plcmon_bring_plc_iface_down() {
+    if [ ! -z "$plc_ifname" ]; then
+        ifconfig $plc_ifname down
+        __repacd_plcmon_debug "PLC interface ($plc_ifname) Brought down"
+    fi
+
+    __repacd_plcmon_get_timestamp force_down_plc_timestamp
+}
+
+# Check whether PLC is enabled in configuration file
+# output: 0 - success; if configured
+#         1 - failure; if not configured
+__repacd_plcmon_is_plc_enabled() {
+    if [ "$plc_enabled" -eq 0 ]; then
+        return 1
+    else
+        return 0
+    fi
+}
+
+repacd_plcmon_init() {
+    config_load plc
+    config_get plc_enabled "config" "Enabled" '0'
+    config_get plc_ifname "config" "PlcIfname" ""
+
+    config_load hyd
+    config_get plc_host_speed "PathChPlc" "HostPLCInterfaceSpeed" '1000'
+}
+
+# Measure the PLC link rate
+# output: $1 - The supported PLC Link rate
+# Returns: 0, success -- if PLC device is connected to CAP
+#          1, failure -- if CAP MAC address is not found in any of the Remote
+#                        devices BDA address
+__repacd_plcmon_measure_plc_rate() {
+    local plc_iface_tx_rate=0
+    local is_w_bda=0
+    local is_w_bdanone=0
+    local found_cap_mac=0
+    local found_remote_devices=0
+
+    # Get the PLC Link Metrics
+    /usr/sbin/plchost -i br-lan -m > $PLCMON_LINK_METRICS
+
+    plc_iface_tx_rate=0
+    # Parse every line in the the file PLCMON_LINK_METRICS
+    while IFS= read -r line; do
+        for w in $line; do
+            # Check if Bridged DA is found,
+            # i.e., connected to host
+            if [ "$w" = $PLCMON_BDA ]; then
+                is_w_bda=1
+            fi
+            if [ $is_w_bda -gt 0 ]; then
+                if echo $w | grep -i "$gw_mac" > /dev/null; then
+                    found_cap_mac=1
+                    is_w_bda=0
+                fi
+            fi
+            if [ "$w" = $PLCMON_REMOTE ]; then
+                found_remote_devices=$((found_remote_devices+1))
+            fi
+            if [ $found_cap_mac -gt 0 ]; then
+                if [ "$w" = $PLCMON_TX ]; then
+                    plc_iface_tx_rate=$(echo $line | tr -dc '0-9')
+                    plc_iface_tx_rate=$(echo $plc_iface_tx_rate | sed 's/^0*//')
+                    found_cap_mac=0
+                    break
+                fi
+            fi
+        done
+    done < $PLCMON_LINK_METRICS
+
+    if [ -z "${plc_iface_tx_rate}" ]; then
+        plc_iface_tx_rate=0
+    fi
+
+    if [ "$plc_iface_tx_rate" -gt 0 ]; then
+        plc_iface_tx_rate=$((($plc_iface_tx_rate*$PLCMON_UDP_EFFICIENCY)/100))
+        if [ "$plc_iface_tx_rate" -ge "$plc_host_speed" ]; then
+            plc_iface_tx_rate=$plc_host_speed
+        fi
+    fi
+    eval "$1=$plc_iface_tx_rate"
+
+    if [ "$found_remote_devices" -gt 0 ]; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+# Check whether PLC device is connected
+# output: 0 - success; if MME return is successful
+#         1 - failure; if MME return is not successful
+__repacd_plcmon_is_plc_connected() {
+    local plc_tx_rate=0
+
+    if __repacd_plcmon_measure_plc_rate plc_tx_rate; then
+        eval "$1=$plc_tx_rate"
+        return 0
+    else
+        return 1
+    fi
+}
diff --git a/lib/functions/repacd-wifimon-map.sh b/lib/functions/repacd-wifimon-map.sh
new file mode 100755
index 0000000..c89accf
--- /dev/null
+++ b/lib/functions/repacd-wifimon-map.sh
@@ -0,0 +1,948 @@
+#!/bin/sh
+# Copyright (c) 2015-2018 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2015-2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+WIFIMON_DEBUG_OUTOUT=0
+
+# Set this to a filename to log all commands executed.
+# The output of relevant commands will be appended to the file.
+WIFIMON_DEBUG_COMMAND_FILE=
+
+WIFIMON_STATE_NOT_ASSOCIATED='NotAssociated'
+WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS='AutoConfigInProgress'
+WIFIMON_STATE_MEASURING='Measuring'
+WIFIMON_STATE_WPS_TIMEOUT='WPSTimeout'
+WIFIMON_STATE_ASSOC_TIMEOUT='AssocTimeout'
+WIFIMON_STATE_RE_BACKHAUL_GOOD='RE_BackhaulGood'
+WIFIMON_STATE_RE_BACKHAUL_FAIR='RE_BackhaulFair'
+WIFIMON_STATE_RE_BACKHAUL_POOR='RE_BackhaulPoor'
+WIFIMON_STATE_RE_SWITCH_BSTA='RE_SwitchingBSTA'
+
+WIFIMON_PIPE_NAME='/var/run/repacd.pipe'
+
+. /lib/functions.sh
+. /lib/functions/whc-network.sh
+
+# State information
+sta_iface_24g='' sta_iface_24g_config_name=''
+sta_iface_5g='' sta_iface_5g_config_name='' unknown_ifaces=0
+assoc_timeout_logged=0 wps_timeout_logged=0
+wps_in_progress=0 wps_start_time=''
+wps_stabilization=0 wps_assoc_count=0
+assoc_start_time='' last_assoc_state=0
+ping_running=0 last_ping_gw_ip=
+rssi_num=0 rssi_filename=
+bsta_max_preference=
+
+# Config parameters
+rssi_samples=''
+backhaul_rssi_2='' backhaul_rssi_5='' backhaul_rssi_offset=''
+min_wps_assoc=
+assoc_timeout='' wps_timeout=''
+measuring_cnt=0 measuring_attempts=0
+force_bsses_down_on_all_bsta_switches=0
+cnt_5g_attempts=0 max_5g_attempts=0
+
+# Emit a message at debug level.
+# input: $1 - the message to log
+__repacd_wifimon_debug() {
+    local stderr=''
+    if [ "$WIFIMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.wifimon -p user.debug "$1"
+}
+
+# Log the output of a command to a file (when enabled).
+# This is a nop unless WIFIMON_DEBUG_COMMAND_FILE is set.
+# input: $1 - command output to log
+__repacd_wifimon_dump_cmd() {
+    if [ -n "$WIFIMON_DEBUG_COMMAND_FILE" ]; then
+        touch $WIFIMON_DEBUG_COMMAND_FILE
+        { date; echo "$1"; echo; } >> $WIFIMON_DEBUG_COMMAND_FILE
+    fi
+}
+
+# Emit a message at info level.
+__repacd_wifimon_info() {
+    local stderr=''
+    if [ "$WIFIMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.wifimon -p user.info "$1"
+}
+
+# Obtain a timestamp from the system.
+#
+# These timestamps will be monontonically increasing and be unaffected by
+# any time skew (eg. via NTP or manual date commands).
+#
+# output: $1 - the timestamp as an integer (with any fractional time truncated)
+__repacd_wifimon_get_timestamp() {
+    timestamp=$(cut -d' ' -f1 < /proc/uptime | cut -d. -f 1)
+    eval "$1=$timestamp"
+}
+
+# Terminate any background ping that may be running.
+# If no background pings are running, this will be a nop.
+__repacd_stop_ping() {
+    if [ "$ping_running" -gt 0 ]; then
+        kill "$(jobs -p)"
+        ping_running=0
+        __repacd_wifimon_debug "Stopped ping to GW IP $last_ping_gw_ip"
+    fi
+
+    if [ -n "$rssi_filename" ]; then
+        # Clean up the temporary file
+        rm -f $rssi_filename
+        rssi_filename=
+    fi
+}
+
+# Start a background ping to the gateway address (if it can be resolved).
+# This helps ensure the RSSI values are updated (as firmware will not report
+# updates if only beacons are being received on the STA interface).
+# input: $1 - network: the name of the network being managed
+# return: 0 if the ping was started or is already running; otherwise 1
+__repacd_start_ping() {
+    gw_ip=$(route -n | grep ^0.0.0.0 | grep "br-$1" | awk '{print $2}')
+    if [ -n "$gw_ip" ]; then
+        if [ ! "$gw_ip" = "$last_ping_gw_ip" ]; then
+            # First need to kill the existing one due to the IP change.
+            __repacd_stop_ping
+            # This will leave ping_running set to 0.
+        fi
+
+        if [ "$ping_running" -eq 0 ]; then
+            __repacd_wifimon_debug "Pinging GW IP $gw_ip"
+
+            # Unfortunately the busybox ping command does not support an
+            # interval. Thus, we can only ping once per second so there will
+            # only be a handful of measurements over the course of our RSSI
+            # sampling.
+            ping "$gw_ip" > /dev/null &
+            ping_running=1
+            last_ping_gw_ip=$gw_ip
+        fi
+
+        # Ping is running now or was started.
+        return 0
+    fi
+
+    __repacd_wifimon_info "Failed to resolve GW when starting ping; will re-attempt"
+    return 1
+}
+
+# Determine if the gateway is reachable.
+#
+# Ideally this would be limited to only the 5 GHz STA interface, but there
+# is no good way to do this (since packets would need to be received on the
+# bridge interface).
+#
+# return: 0 if the gateway is reachable; otherwise 1
+__repacd_is_gw_reachable() {
+    if [ -n "$last_ping_gw_ip" ]; then
+        if ping -c 1 -W 1 "${last_ping_gw_ip}" > /dev/null; then
+            return 0
+        fi
+    fi
+
+    # Gateway is unknown or is not reachable
+    return 1
+}
+
+# Determine if the STA interface named is current associated and active.
+#
+# input: $1 - sta_iface: the name of the interface (eg. ath01)
+# return: 0 if associated; 1 if not associated or empty interface name
+__repacd_wifimon_is_active_assoc() {
+    local sta_iface=$1
+    if [ -n "$sta_iface" ]; then
+        local assoc_str=
+        assoc_str=$(iwconfig "$sta_iface")
+        __repacd_wifimon_dump_cmd "State of $sta_iface: $assoc_str"
+
+        if echo "$assoc_str" | grep 'Access Point: ' | grep -v 'Not-Associated' > /dev/null; then
+            return 0
+        else
+            return 1
+        fi
+    else
+        # An unknown STA interface is considered not associated.
+        return 1
+    fi
+}
+
+# Determine if the STA interface named is current associated.
+#
+# Note that for the purposes of this function, an empty interface name is
+# considered associated. This is done because in some configurations, only
+# one interface is enabled.
+#
+# input: $1 - sta_iface: the name of the interface (eg. ath01)
+# return: 0 if associated or if the interface name is empty; otherwise 1
+__repacd_wifimon_is_assoc() {
+    local sta_iface=$1
+    if [ -n "$sta_iface" ];
+    then
+        if __repacd_wifimon_is_active_assoc "$sta_iface"; then
+            return 0
+        else
+            return 1
+        fi
+    else
+        # An unknown STA interface is considered associated.
+        return 0
+    fi
+}
+
+# Determine if the STA association is stable enough to be able to start
+# the next step of the process.
+# return: 0 if the association is stable; non-zero if it is not yet deemed
+#         stable
+__repacd_wifimon_is_assoc_stable() {
+    if [ "$wps_stabilization" -gt 0 ]; then
+        if [ "$wps_assoc_count" -ge "$min_wps_assoc" ]; then
+            return 0
+        else
+            return 1
+        fi
+    else
+        # No stabilization in progress
+        return 0
+    fi
+}
+
+# Determine if the STA is associated and update the state accordingly.
+# input: $1 - network: the name of the network being managed
+# input: $2 - cur_re_mode: the currently configured range extender mode
+# input: $3 - cur_re_submode: the currently configured range extender sub-mode
+# input: $4 - whether this is a check during init for a restart triggered
+#             by mode switching
+# output: $5 - state: the variable to update with the new state name (if there
+#                     was a change)
+# output: $6 - re_mode: the desired range extender mode
+# output: $7 - re_submode: the desired range extender sub-mode
+# return: 0 if associated; otherwise 1
+__repacd_wifimon_check_associated() {
+    local network=$1
+    local associated=0
+
+    if __repacd_wifimon_is_assoc $sta_iface_24g \
+        && __repacd_wifimon_is_assoc $sta_iface_5g; then
+        associated=1
+    fi
+
+    if [ "$associated" -gt 0 ]; then
+        # Only update the LED state if we transitioned from not associated
+        # to associated.
+        if [ "$last_assoc_state" -eq 0 ]; then
+            if [ "$wps_in_progress" -gt 0 ]; then
+                # If WPS was triggered, it could take some time for the
+                # interfaces to settle into their final state. Thus, update
+                # the start time for the measurement to the point at which
+                # the WPS button was pressed.
+                assoc_start_time=$wps_start_time
+
+                # Clear this as we only want to extend the association time
+                # for this one instance. All subsequent ones should be based
+                # on the time we detect a disassociation (unless WPS is
+                # triggered again).
+                wps_start_time=''
+
+                # Clear this flag so that we now use the association timer
+                # instead of the WPS one.
+                wps_in_progress=0
+
+                wps_stabilization=1
+            fi
+
+            if [ "$wps_stabilization" -gt 0 ]; then
+                wps_assoc_count=$((wps_assoc_count + 1))
+                __repacd_wifimon_debug "Assoc post WPS (#$wps_assoc_count)"
+            fi
+
+            if __repacd_wifimon_is_assoc_stable; then
+                # Assume we are going into the measuring state. This may be
+                # overruled if we decide to switch to a different bSTA
+                # interface.
+                eval "$5=$WIFIMON_STATE_MEASURING"
+                assoc_start_time=''
+                last_assoc_state=1
+                wps_stabilization=0
+
+                # Restart the measurements. We do not remember any past
+                # ones as they might not reflect the current state (eg.
+                # if the root AP was moved).
+                rssi_num=0
+
+                if [ "$wps_stabilization" -gt 0 ]; then
+                    # Once WPS completes, switch to the most preferred bSTA.
+                    local sta_iface_config=''
+                    if [ -n "$sta_iface_24g" ]; then
+                        sta_iface_config="$sta_iface_24g_config_name"
+                    else
+                        sta_iface_config="$sta_iface_5g_config_name"
+                    fi
+
+                    # Be optimistic that the most preferred bSTA will have a
+                    # good link, so don't force the BSSes down.
+                    local force_bsses_down=0
+                    __repacd_wifimon_select_next_bsta "$sta_iface_config" \
+                        $force_bsses_down \
+                        "$WIFIMON_STATE_MEASURING" "$5"
+
+                    # Although we're stable, since in most cases we're going to
+                    # change the bSTA radio, we don't want to proceed into the
+                    # measuring state below. If it turns out we didn't switch
+                    # to a new radio, we'll pick up the measurements in the
+                    # next iteration.
+                    return 0
+                fi
+            else
+                # Pretend like we are not associated since we need it to be
+                # stable.
+                return 1
+            fi
+        fi
+
+        # Association is considered stable. Measure the link RSSI.
+        if [ "$rssi_num" -le "$rssi_samples" ] && \
+            __repacd_start_ping "$network"; then
+            __repacd_wifimon_measure_link "$network" "$5"
+        fi
+        return 0
+    elif [ "$wps_in_progress" -eq 0 ] && [ "$wps_stabilization" -eq 0 ]; then
+        # Record the first time we detected ourselves as not being associated.
+        # This will drive a timer in the check function that will change the
+        # state if we stay disassociated for too long.
+        if [ -z "$assoc_start_time" ]; then
+            __repacd_wifimon_get_timestamp assoc_start_time
+        fi
+
+        last_assoc_state=0
+        eval "$5=$WIFIMON_STATE_NOT_ASSOCIATED"
+    elif [ "$wps_in_progress" -gt 0 ]; then
+        if [ "$wps_timeout_logged" -eq 0 ] && [ "$assoc_timeout_logged" -eq 0 ]; then
+            # Suppress logs after we've timed out
+            __repacd_wifimon_debug "Auto config in progress - not assoc"
+        fi
+
+        wps_assoc_count=0
+    fi
+
+    # Not associated and WPS is in progress. No LED update.
+    return 1
+}
+
+# Find the median from the samples file.
+# This is a crude way to compute the median when the number of
+# samples is odd. It is not strictly correct for an even number
+# of samples since it does not compute the average of the two
+# samples in the middle and rather just takes the lower one, but
+# this should be sufficient for our purposes. The average is not
+# performed due to the values being on the logarithmic scale and
+# because shell scripts do not directly support floating point
+# arithmetic.
+# input: $1 - Samples filename
+# input: $2 - Number of samples in the samples file
+# output: $3 - computed Median
+__repacd_wifimon_compute_median() {
+    local median median_index
+    local samples_filename="$1"
+
+    median_index=$((($2 + 1) / 2))
+    median=$(sort -n < "$samples_filename" | head -n $median_index | tail -n 1)
+
+    eval "$3=$median"
+}
+
+# Measure the RSSI to the serving AP and update the state accordingly.
+# input: $1 - network: the name of the network being monitored
+# output: $2 - state: the variable to update with the new state name (if there
+#                     was a change)
+__repacd_wifimon_measure_link() {
+    local rssi
+
+    if ! __repacd_is_gw_reachable; then
+        if [ -n "$last_ping_gw_ip" ]; then
+            __repacd_wifimon_debug "GW ${last_ping_gw_ip} not reachable"
+        else
+            __repacd_wifimon_debug "GW unknown"
+        fi
+        return
+    fi
+
+    if [ "$rssi_num" -eq 0 ]; then
+        if [ "$measuring_cnt" -gt 0 ]; then
+            __repacd_wifimon_debug "Measurement failed attempt # $measuring_cnt"
+        fi
+        measuring_cnt=$((measuring_cnt + 1))
+    fi
+
+    if [ "$measuring_cnt" -gt "$measuring_attempts" ]; then
+        # Could not complete measurements with this interface as a bSTA.
+        #
+        # Try switching to the next most preferred interface.
+        # Since this interface was so flaky, the next one might be too, so
+        # tell the fronthaul manager to force the BSSes down at the next
+        # startup.
+        local force_bsses_down=1
+        __repacd_wifimon_select_next_bsta "$sta_iface_config_name" \
+            $force_bsses_down "$WIFIMON_STATE_RE_BACKHAUL_POOR" "$2"
+        return
+    fi
+
+    # Currently only one STA interface is allocated at a time. Determine the
+    # active one so that it can be used to check the RSSI.
+    local sta_iface=''
+    local rssi_threshold=''
+    local rssi_led_state=''  # state of LEDs if above RSSI threshold
+    if [ -n "$sta_iface_5g" ]; then
+        sta_iface="$sta_iface_5g"
+        sta_iface_config_name="$sta_iface_5g_config_name"
+        rssi_threshold="$backhaul_rssi_5"
+        rssi_led_state="$WIFIMON_STATE_RE_BACKHAUL_GOOD"
+    else
+        sta_iface="$sta_iface_24g"
+        sta_iface_config_name="$sta_iface_24g_config_name"
+        rssi_threshold="$backhaul_rssi_2"
+        rssi_led_state="$WIFIMON_STATE_RE_BACKHAUL_FAIR"
+    fi
+
+    rssi=$(iwconfig $sta_iface | grep 'Signal level' | awk -F'=' '{print $3}' | awk '{print $1}')
+
+    # We explicitly ignore clearly bogus values. -95 dBm has been seen in
+    # some instances where the STA is not associated by the time the RSSI
+    # check is done. The check against 0 tries to guard against scenarios
+    # where the firmware has yet to report an RSSI value (although this may
+    # never happen if the RSSI gets primed through the association messaging).
+    if [ "$rssi" -gt -95 ] && [ "$rssi" -lt 0 ]; then
+        if [ "$rssi_num" -lt "$rssi_samples" ]; then
+            __repacd_wifimon_debug "RSSI sample #$rssi_num = $rssi dBm"
+
+            # Ignore the very first sample since it is taken at the same time
+            # the ping is started (and thus the RSSI might not have been
+            # updated).
+            if [ "$rssi_num" -eq 0 ]; then
+                rssi_filename=$(mktemp /tmp/repacd-rssi.XXXXXX)
+            else
+                # Not the first sample
+                echo "$rssi" >> "$rssi_filename"
+            fi
+            rssi_num=$((rssi_num + 1))
+        elif [ "$rssi_num" -eq "$rssi_samples" ]; then
+            __repacd_wifimon_debug "RSSI sample #$rssi_num = $rssi dBm"
+
+            # We will take one more sample and then draw the conclusion.
+            # No further measurements will be taken (although this may be
+            # changed in the future).
+            echo "$rssi" >> "$rssi_filename"
+
+            # We got the required number of samples, now derive the median rssi.
+            local rssi_median
+            __repacd_wifimon_compute_median "$rssi_filename" $rssi_num rssi_median
+            __repacd_wifimon_debug "Median RSSI = $rssi_median dBm"
+            __repacd_wifimon_debug "RSSI threshold = $rssi_threshold dBm"
+
+            measuring_cnt=0
+            rssi_num=$((rssi_num + 1))  # to prevent future samples
+
+            # We have our measurement, so the ping is no longer needed.
+            __repacd_stop_ping
+
+            # In case we disassociate after this, we will want to start the
+            # association timer again, so clear our state of the last time we
+            # started it so that it can be started afresh upon disassociation.
+            assoc_start_time=''
+
+            if [ "$rssi_median" -gt "$rssi_threshold" ]; then
+                local keep_24g_bsta_threshold=$((rssi_threshold + backhaul_rssi_offset))
+                if [ "$sta_iface" = "$sta_iface_24g" ]; then
+                    if [ "$cnt_5g_attempts" -ge "$max_5g_attempts" ] ||
+                        [ "$rssi_median" -lt "$keep_24g_bsta_threshold" ]; then
+                        eval "$2=$rssi_led_state"
+                    else
+                        # 2.4 GHz is good enough that 5 GHz might be viable. Try it again.
+                        __repacd_wifimon_debug "2.4 GHz good; considering 5 GHz"
+
+                        # Let's be optimistic that 5 GHz will be good enough
+                        # and thus we should leave the BSSes up at startup.
+                        local force_bsses_down=0
+                        __repacd_wifimon_select_next_bsta "$sta_iface_config_name" \
+                            $force_bsses_down "$rssi_led_state" "$2"
+                        return
+                    fi
+                else
+                    # 5 GHz bSTA with sufficient; we are done
+                    eval "$2=$rssi_led_state"
+                fi
+            elif [ "$sta_iface" = "$sta_iface_24g" ]; then
+                __repacd_wifimon_debug "2.4 GHz bSTA weak; not re-attempting 5 GHz"
+                eval "$2=$WIFIMON_STATE_RE_BACKHAUL_POOR"
+            else
+                # Try next best bSTA radio
+                __repacd_wifimon_debug "5 GHz bSTA too weak; trying next radio"
+
+                # Until we know we can get a good bSTA link, let's be
+                # conservative and bring the BSSes down at startup.
+                local force_bsses_down=1
+                __repacd_wifimon_select_next_bsta "$sta_iface_config_name" \
+                    $force_bsses_down "$WIFIMON_STATE_RE_BACKHAUL_POOR" "$2"
+                return
+            fi
+        fi
+    fi
+}
+
+# Determine the radio that is next most preferred radio.
+#
+# If the current radio's preference value is not set, pick the highest
+# preference radio.
+#
+# input: $1 config: section name
+# input: $2 cur_pref: the preference level for the current bSTA
+# output: $3 preferred_radio: the radio with the highest preference, but below
+#                             the cur_pref value if it is set
+__repacd_wifimon_resolve_next_bsta_radio() {
+    local config="$1"
+    local cur_pref="$2"
+
+    local bsta_preference=''
+    config_get bsta_preference "$config" repacd_map_bsta_preference 0
+
+    # Skip radios that have no preference set. Maybe the OEM never wants
+    # to use that radio.
+    if [ -n "$bsta_preference" ]; then
+        if [ -n "$cur_pref" ]; then
+            if [ "$bsta_preference" -lt "$cur_pref" ] &&
+                [ "$bsta_preference" -gt "$bsta_max_preference" ]; then
+                eval "$3=$config"
+                bsta_max_preference="$bsta_preference"
+            fi
+        else
+            if [ "$bsta_preference" -gt "$bsta_max_preference" ]; then
+                eval "$3=$config"
+                bsta_max_preference="$bsta_preference"
+            fi
+        fi
+    fi
+}
+
+# Mark the desired radio as selected for the bSTA.
+#
+# If a radio is marked as selected (using the repacd_map_bsta_selected config
+# option), it will be used. If instead none is marked, the radio with the
+# highest repacd_map_bsta_pref value will be used.
+#
+# input: $1 config: section name
+# input: $2 selected_radio: the radio that should be selected
+__repacd_wifimon_select_bsta_radio() {
+    local config="$1"
+    local selected_radio="$2"
+
+    if [ "$config" = "$selected_radio" ]; then
+        uci_set wireless "$config" repacd_map_bsta_selected '1'
+    else
+        uci_set wireless "$config" repacd_map_bsta_selected '0'
+    fi
+}
+
+# Update the radio on which to instantiate the bSTA.
+#
+# If the currently selected bSTA is 2.4 GHz, select the highest priority radio.
+# Otherwise, select the highest priority radio that is less than the current
+# priority.
+#
+# input: $1 - config: the name of the config section for the bSTA
+# input: $2 - force_bsses_down: whether to force the BSSes down on the next
+#                               startup
+# input: $3 - state_no_bsta_radios: the state to transition into if there are
+#                                   no other bSTA radios to switch to
+# output: $4 - state: the variable to update with the new state name (if there
+#                     was a change)
+__repacd_wifimon_select_next_bsta() {
+    local config="$1"
+    local force_bsses_down="$2"
+    local state_no_bsta_radios="$3"
+
+    # Resolve the current preference value
+    local device
+    config_load wireless
+    config_get device "$config" device
+
+    local cur_pref
+    config_get cur_pref "$device" repacd_map_bsta_preference
+
+    if [ -n "$sta_iface_24g" ]; then
+        # We want to take the maximum one
+        cur_pref=''
+    fi
+
+    local preferred_radio=''
+    bsta_max_preference=0
+    config_foreach __repacd_wifimon_resolve_next_bsta_radio wifi-device \
+        "$cur_pref" preferred_radio
+
+    if [ "$device" != "$preferred_radio" ]; then
+        __repacd_wifimon_debug "Selected $preferred_radio as next bSTA"
+
+        # If switching from 5 GHz to 2.4 GHz, increment the count to record we
+        # have tried all 5 GHz bSTAs. The assumption here is that 2.4 GHz will
+        # always come after 5 GHz in the preference order.
+        if [ -n "$sta_iface_5g" ] && ! whc_is_5g_radio "$preferred_radio"; then
+            cnt_5g_attempts=$((cnt_5g_attempts + 1))
+            uci_set repacd MAPWiFiLink '5gAttemptsCount' "$cnt_5g_attempts"
+            uci_commit repacd
+
+            __repacd_wifimon_debug "Completed 5 GHz bSTA attempt #$cnt_5g_attempts"
+        fi
+
+        config_foreach __repacd_wifimon_select_bsta_radio wifi-device \
+            "$preferred_radio"
+        uci_commit wireless
+
+        if [ "$force_bsses_down_on_all_bsta_switches" -gt 0 ]; then
+            force_bsses_down=1
+        fi
+
+        __repacd_wifimon_debug "Updating ForceDownOnStart to $force_bsses_down"
+        uci_set repacd FrontHaulMgr ForceDownOnStart "$force_bsses_down"
+        uci_commit repacd
+
+        eval "$4=$WIFIMON_STATE_RE_SWITCH_BSTA"
+    else
+        __repacd_wifimon_debug "No other bSTA radios available"
+        eval "$4=$state_no_bsta_radios"
+    fi
+}
+
+# Determine if a provided amount of time has elapsed.
+# input: $1 - start_time: the timestamp (in seconds)
+# input: $2 - duration: the amount of time to check against (in seconds)
+# return: 0 on timeout; non-zero if no timeout
+__repacd_wifimon_is_timeout() {
+    local start_time=$1
+    local duration=$2
+
+    # Check if the amount of elapsed time exceeds the timeout duration.
+    local cur_time
+    __repacd_wifimon_get_timestamp cur_time
+    local elapsed_time=$((cur_time - start_time))
+    if [ "$elapsed_time" -gt "$duration" ]; then
+        return 0
+    fi
+
+    return 1
+}
+
+# Check whether the given interface is the STA interface on the desired
+# network and the desired band.
+#
+# input: $1 - config: the name of the interface config section
+# input: $2 - network: the name of the network to which the STA interface
+#                      must belong to be matched
+# output: $3 - iface: the resolved STA interface name on 2.4 GHz (if found)
+# output: $4 - iface_config_name: the resolved name of the config section
+#                                 for the STA interface on 2.4 GHz (if found)
+# output: $5 - iface: the resolved STA interface name on 5 GHz (if found)
+# output: $6 - iface_config_name: the resolved name of the config section
+#                                 for the STA interface on 5 GHz (if found)
+# output: $7 - unknown_ifaces: whether any Wi-Fi interfaces are as yet
+#                              unknown (in terms of their interface name)
+__repacd_wifimon_is_sta_iface() {
+    local config="$1"
+    local network_to_match="$2"
+    local iface disabled mode device hwmode
+
+    config_get network "$config" network
+    config_get iface "$config" ifname
+    config_get disabled "$config" disabled '0'
+    config_get mode "$config" mode
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = "$network_to_match" ] && [ -n "$iface" ] && [ "$mode" = "sta" ] && \
+            [ "$disabled" -eq 0 ]; then
+            if whc_is_5g_vap "$config"; then
+                eval "$5=$iface"
+                eval "$6=$config"
+            else
+                eval "$3=$iface"
+                eval "$4=$config"
+            fi
+        elif [ -z "$iface" ] && [ "$disabled" -eq 0 ]; then
+            # If an interface is showing as enabled but no name is known for it,
+            # mark it as such. Without doing this, we can resolve the interface
+            # names improperly.
+            eval "$7=1"
+        fi
+    fi
+}
+
+# Initialize the sta_iface_5g variable with the STA interface that is enabled
+# on the specified network (if any).
+# input: $1 - network: the name of the network being managed
+__repacd_wifimon_get_sta_iface() {
+    unknown_ifaces=0
+
+    config_load wireless
+    config_foreach __repacd_wifimon_is_sta_iface wifi-iface "$1" \
+        sta_iface_24g sta_iface_24g_config_name \
+        sta_iface_5g sta_iface_5g_config_name unknown_ifaces
+
+    if [ "$unknown_ifaces" -gt 0 ]; then
+        # Clear out everything because we cannot be certain we have the
+        # right names (eg. interfaces may not all be up yet).
+        sta_iface_24g=
+        sta_iface_24g_config_name=
+        sta_iface_5g=
+        sta_iface_5g_config_name=
+    fi
+}
+
+# Initialize the Wi-Fi monitoring logic with the name of the network being
+# monitored.
+# input: $1 - network: the name of the network being managed
+# input: $2 - cur_re_mode: the current operating range extender mode
+# input: $3 - cur_re_submode: the current operating range extender submode
+# input: $4 - autoconfig: whether it was an auto-config restart
+# output: $5 - state: the name of the initial state
+# output: $6 - new_re_mode: the resolved range extender mode
+# output: $7 - new_re_submode: the resolved range extender submode
+repacd_wifimon_init() {
+    # Resolve the STA interfaces.
+    # Here we assume that if we have the 5 GHz interface, that is sufficient,
+    # as not all modes will have a 2.4 GHz interface.
+    __repacd_wifimon_get_sta_iface "$1"
+    if [ -n "$sta_iface_5g" ] || [ -n "$sta_iface_24g" ]; then
+        if [ -n "$sta_iface_24g" ]; then
+            __repacd_wifimon_debug "Resolved 2.4 GHz STA interface to $sta_iface_24g"
+            __repacd_wifimon_debug "2.4 GHz STA interface section $sta_iface_24g_config_name"
+        fi
+
+        if [ -n "$sta_iface_5g" ]; then
+            __repacd_wifimon_debug "Resolved 5 GHz STA interface to $sta_iface_5g"
+            __repacd_wifimon_debug "5 GHz STA interface section $sta_iface_5g_config_name"
+        fi
+
+        # First resolve the config parameters.
+        config_load repacd
+        config_get min_wps_assoc 'MAPWiFiLink' 'MinAssocCheckPostWPS' '5'
+        config_get wps_timeout 'MAPWiFiLink' 'WPSTimeout' '120'
+        config_get assoc_timeout 'MAPWiFiLink' 'AssociationTimeout' '300'
+        config_get rssi_samples 'MAPWiFiLink' 'RSSINumMeasurements' '5'
+        config_get backhaul_rssi_2 'MAPWiFiLink' 'BackhaulRSSIThreshold_2' '-78'
+        config_get backhaul_rssi_5 'MAPWiFiLink' 'BackhaulRSSIThreshold_5' '-78'
+        config_get backhaul_rssi_offset 'MAPWiFiLink' 'BackhaulRSSIThreshold_offset' '10'
+        config_get max_5g_attempts 'MAPWiFiLink' 'Max5gAttempts' '3'
+        config_get cnt_5g_attempts 'MAPWiFiLink' '5gAttemptsCount' '0'
+        config_get measuring_attempts 'MAPWiFiLink' 'MaxMeasuringStateAttempts' '3'
+        config_get force_bsses_down_on_all_bsta_switches 'MAPWiFiLink' \
+            'ForceBSSesDownOnAllBSTASwitches' '0'
+
+        # Create ourselves a named pipe so we can be informed of WPS push
+        # button events.
+        if [ -e $WIFIMON_PIPE_NAME ]; then
+            rm -f $WIFIMON_PIPE_NAME
+        fi
+
+        mkfifo $WIFIMON_PIPE_NAME
+
+        # If already associated, go to the InProgress state.
+        __repacd_wifimon_check_associated "$1" "$2" "$3" "$4" "$5" "$6" "$7"
+    fi
+    # Otherwise, must be operating in CAP mode.
+}
+
+# Check the status of the Wi-Fi link (WPS, association, and RSSI).
+# input: $1 - network: the name of the network being managed
+# input: $2 - cur_re_mode: the currently configured range extender mode
+# input: $3 - cur_re_submode: the currently configured range extender sub-mode
+# output: $4 - state: the name of the new state (only set upon a change)
+# output: $5 - re_mode: the desired range extender mode (updated only once
+#                       the link to the AP is considered stable)
+# output: $6 - re_submode: the desired range extender submode (updated only once
+#                       the link to the AP is considered stable)
+repacd_wifimon_check() {
+    local wps_pressed=0
+    if [ -n "$sta_iface_24g" ] || [ -n "$sta_iface_5g" ]; then
+        local wps_pbc
+        if read -r -t 1 wps_pbc <>$WIFIMON_PIPE_NAME; then
+            __repacd_wifimon_debug "Received $wps_pbc on wifimon pipe"
+
+            eval "$4=$WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS"
+            wps_in_progress=1
+            __repacd_wifimon_get_timestamp wps_start_time
+        fi
+
+        if __repacd_wifimon_check_associated "$1" "$2" "$3" 0 "$4" "$5" "$6"; then
+            assoc_timeout_logged=0
+            wps_timeout_logged=0
+        else  # not associated
+            # If the WPS button was pressed, do not proceed to checking the
+            # association timeouts. That will happen in subsequent checks.
+            if [ "$wps_pressed" -gt 0 ]; then
+                return 1
+            fi
+
+            if [ "$wps_in_progress" -gt 0 ]; then
+                if __repacd_wifimon_is_timeout $wps_start_time $wps_timeout; then
+                    if [ "$wps_timeout_logged" -eq 0 ]; then
+                        __repacd_wifimon_debug "WPS timeout"
+                        wps_timeout_logged=1
+                    fi
+
+                    eval "$4=$WIFIMON_STATE_WPS_TIMEOUT"
+                fi
+            else
+                if __repacd_wifimon_is_timeout $assoc_start_time $assoc_timeout; then
+                    if [ "$assoc_timeout_logged" -eq 0 ]; then
+                        __repacd_wifimon_debug "Association timeout"
+                        assoc_timeout_logged=1
+                    fi
+
+                    if [ -n "$sta_iface_5g" ]; then
+                        # Try falling back to another interface
+                        __repacd_wifimon_debug "Trying next bSTA radio"
+
+                        # Since this bSTA could not associate, assume the next
+                        # one might not be able to either. Thus, tell the
+                        # fronthaul manager to force the BSSes down at startup.
+                        local force_bsses_down=1
+                        __repacd_wifimon_select_next_bsta "$sta_iface_5g_config_name" \
+                            $force_bsses_down \
+                            "$WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS" "$4"
+                    else
+                        # Already on 2.4 GHz. If we cannot associate here, we
+                        # probably cannot associate on 5 GHz.
+                        eval "$4=$WIFIMON_STATE_ASSOC_TIMEOUT"
+                    fi
+                fi
+            fi
+        fi
+    fi
+}
+
+# Hook function that, in SON mode, would determine whether to bring up/down the
+# 2.4 GHz backhaul. In Multi-AP SIG mode, this is not currently relevant
+# (given the 1 backhaul link assumption).
+repacd_wifimon_independent_channel_check() {
+    /bin/true
+}
+
+# Terminate the Wi-Fi link monitoring, cleaning up any state in preparation
+# for shutdown.
+repacd_wifimon_fini() {
+    /bin/true
+}
+
+# Resolve the credentials for any VAP that has bBSS support.
+#
+# input: $1 - config: the name of the interface config section
+# input: $2 - network: the name of the network to which the AP interface
+#                      must belong to be matched
+# output: $3 - ssid: the backhaul SSID
+# output: $4 - key: the backhaul key (aka. passphrase)
+# output: $5 - enc: the backhaul encryption mode
+__repacd_wifimon_resolve_bbss_creds() {
+    local config="$1"
+    local network_to_match="$2"
+
+    local network mode device hwmode disabled
+    local ssid key enc map map_type
+
+    config_get network "$config" network
+    config_get mode "$config" mode
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+    config_get disabled "$config" disabled '0'
+
+    config_get ssid "$config" ssid
+    config_get key "$config" key
+    config_get enc "$config" encryption
+    config_get map "$config" map '0'
+    config_get map_type "$config" MapBSSType
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = "$network_to_match" ] && [ "$mode" = "ap" ] && \
+            [ "$disabled" -eq 0 ] && [ "$map" -gt 0 ]; then
+            local bbss=$(( map_type & 64 ))
+            if [ ${bbss} -eq 64 ]; then
+                # Has bBSS capabilty, so record the credentials
+                eval "$3='${ssid}'"
+                eval "$4='${key}'"
+                eval "$5='${enc}'"
+            fi
+        fi
+    fi
+}
+
+# Set the credentials on the bSTA VAP(s).
+#
+# input: $1 - config: the name of the interface config section
+# input: $2 - network: the name of the network to which the STA interface
+#                      must belong to be matched
+# input: $3 - ssid: the backhaul SSID
+# input: $4 - key: the backhaul key (aka. passphrase)
+# input: $5 - enc: the backhaul encryption mode
+__repacd_wifimon_set_bsta_creds() {
+    local config="$1"
+    local network_to_match="$2"
+    local ssid="$3"
+    local key="$4"
+    local enc="$5"
+
+    local network mode hwmode device disabled
+    local ssid key enc map map_type
+
+    config_get network "$config" network
+    config_get mode "$config" mode
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+    config_get disabled "$config" disabled '0'
+
+    config_get map "$config" map '0'
+    config_get map_type "$config" MapBSSType
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = "$network_to_match" ] && [ "$mode" = "sta" ] && \
+            [ "$map" -gt 0 ]; then
+            if [ "$map_type" -eq 128 ]; then  # bSTA
+                uci_set wireless "$config" ssid "$ssid"
+                uci_set wireless "$config" key "$key"
+                uci_set wireless "$config" encryption "$enc"
+                uci_commit wireless
+            fi
+        fi
+    fi
+}
+
+# Copy the backhaul credentials from a bBSS interface (or a combined
+# fBSS + bBSS) to the bSTA interface. This ensures the credentials obtained
+# during Ethernet onboarding can be used when switching into RE mode.
+repacd_wifimon_config_bsta() {
+    bbss_ssid=''
+    bbss_key=''
+    bbss_enc=''
+
+    # First resolve the SSID, passphrase, and encryption from the bBSS
+    # capable AP interfaces.
+    config_load wireless
+    config_foreach __repacd_wifimon_resolve_bbss_creds wifi-iface "$1" \
+        bbss_ssid bbss_key bbss_enc
+
+    # Now apply these values to the bSTA interface.
+    config_foreach __repacd_wifimon_set_bsta_creds wifi-iface "$1" \
+        "${bbss_ssid}" "${bbss_key}" "${bbss_enc}"
+}
diff --git a/lib/functions/repacd-wifimon.sh b/lib/functions/repacd-wifimon.sh
new file mode 100755
index 0000000..a6faab8
--- /dev/null
+++ b/lib/functions/repacd-wifimon.sh
@@ -0,0 +1,2389 @@
+#!/bin/sh
+# Copyright (c) 2015-2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2015-2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+WIFIMON_DEBUG_OUTOUT=0
+
+# Set this to a filename to log all commands executed.
+# The output of relevant commands will be appended to the file.
+WIFIMON_DEBUG_COMMAND_FILE=
+
+WIFIMON_STATE_NOT_ASSOCIATED='NotAssociated'
+WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS='AutoConfigInProgress'
+WIFIMON_STATE_MEASURING='Measuring'
+WIFIMON_STATE_WPS_TIMEOUT='WPSTimeout'
+WIFIMON_STATE_BSSID_ASSOC_TIMEOUT='BSSIDAssocTimeout'
+WIFIMON_STATE_ASSOC_TIMEOUT='AssocTimeout'
+WIFIMON_STATE_RE_MOVE_CLOSER='RE_MoveCloser'
+WIFIMON_STATE_RE_MOVE_FARTHER='RE_MoveFarther'
+WIFIMON_STATE_RE_LOCATION_SUITABLE='RE_LocationSuitable'
+WIFIMON_STATE_CL_LINK_SUFFICIENT='CL_LinkSufficient'
+WIFIMON_STATE_CL_LINK_INADEQUATE='CL_LinkInadequate'
+WIFIMON_STATE_CL_ACTING_AS_RE='CL_ActingAsRE'
+
+WIFIMON_PIPE_NAME='/var/run/repacd.pipe'
+
+RE_ROOT_AP_DISTANCE_INVALID='255'
+RE_ZERO_BSSID="00:00:00:00:00:00"
+
+config_load 'repacd'
+config_get_bool wifimon_cfg config 'cfg80211_enable' '0'
+if [ "$wifimon_cfg" == "1" ]; then
+    REPACD_CFG80211=-cfg80211
+else
+    REPACD_CFG80211=
+fi
+
+. /lib/functions.sh
+. /lib/functions/whc-network.sh
+
+# State information
+sta_iface_24g= sta_iface_24g_config_name=
+sta_iface_5g= sta_iface_5g_config_name= unknown_ifaces=0
+measurement_sta_iface= measurement_sta_iface_config_name=
+assoc_timeout_logged=0 wps_timeout_logged=0
+wps_in_progress=0 wps_start_time=''
+wps_stabilization=0 wps_assoc_count=0
+auto_mode_stabilization=0 auto_mode_assoc_count=0
+bssid_stabilization=0 bssid_assoc_count=0 bssid_resolve_complete=0
+assoc_start_time='' last_assoc_state=0 backhaul_eval_time='' force_down_5g_timestamp=''
+ping_running=0 last_ping_gw_ip=
+rssi_num=0 rssi_filename=
+force_down_5g=0 down_time_2g='' measurement_eval_count=0
+force_down_24g=0 badlink_start_time_5g='' badlink_switch_inprogress=0
+rate_num=0 rate_min=0 rate_max=0 rate_pref2G=0 rate_to_CAP_filename=''
+rssi_counter=0
+is_24G_down_by_independent_channel=0
+rssi_idle_time=0
+new_bestap='' new_bestap_otherband='' bestap_filename=''
+bssid_resolve_state= nolink_detected_5g=0
+curr_root_distance=$RE_ROOT_AP_DISTANCE_INVALID
+ignore_24g_assoc=0
+my_uplink_rate_filename=
+MoveFromCAP_snr_threshold= CAP_snr_filename=
+wifi_2G_interface_name=
+rate_to_CAP=0
+
+# Config parameters
+device_type= config_re_mode= default_re_mode=
+min_wps_assoc= min_auto_mode_assoc= min_bssid_assoc=
+rssi_samples= rssi_far= rssi_near= rssi_min= rssi_pref2G=
+assoc_timeout= wps_timeout= config_downtime2G= measuring_attempts=0
+rate_samples= percent_rate_min5G= percent_rate_max5G= percent_rate_pref2G=
+daisy_chain= bssid_assoc_timeout= badlink_timeout5G=
+config_short_eval_time5g=0 config_long_eval_time5g=0 config_eval_time24g=0
+traffic_separation_enabled=0 traffic_separation_active=0
+guest_backhaul= network_guest=
+guest_preflink_down_start_time=0 guest_preflink_down_timeout=15
+guest_preflink_up_start_time=0 guest_preflink_up_timeout=5
+guest_link_override=0 guest_vid=102
+is_independent_channel=_selection_enable=
+quality_5g_rssi_level=
+rssi_check_total_counter=
+CAP_snr_threshold= MoveFromCAP_snr_hysteresis=
+
+# Emit a message at debug level.
+# input: $1 - the message to log
+__repacd_wifimon_debug() {
+    local stderr=''
+    if [ "$WIFIMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.wifimon -p user.debug "$1"
+}
+
+# Log the output of a command to a file (when enabled).
+# This is a nop unless WIFIMON_DEBUG_COMMAND_FILE is set.
+# input: $1 - command output to log
+__repacd_wifimon_dump_cmd() {
+    if [ -n "$WIFIMON_DEBUG_COMMAND_FILE" ]; then
+        touch $WIFIMON_DEBUG_COMMAND_FILE
+        date >> $WIFIMON_DEBUG_COMMAND_FILE
+        echo "$1" >> $WIFIMON_DEBUG_COMMAND_FILE
+        echo >> $WIFIMON_DEBUG_COMMAND_FILE
+    fi
+}
+
+# Emit a message at info level.
+__repacd_wifimon_info() {
+    local stderr=''
+    if [ "$WIFIMON_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd.wifimon -p user.info "$1"
+}
+
+# Obtain a timestamp from the system.
+#
+# These timestamps will be monontonically increasing and be unaffected by
+# any time skew (eg. via NTP or manual date commands).
+#
+# output: $1 - the timestamp as an integer (with any fractional time truncated)
+__repacd_wifimon_get_timestamp() {
+    timestamp=`cat /proc/uptime | cut -d' ' -f1 | cut -d. -f 1`
+    eval "$1=$timestamp"
+}
+
+# Terminate any background ping that may be running.
+# If no background pings are running, this will be a nop.
+__repacd_stop_ping() {
+    if [ "$ping_running" -gt 0 ]; then
+        kill $(jobs -p)
+        ping_running=0
+        __repacd_wifimon_debug "Stopped ping to GW IP $last_ping_gw_ip"
+    fi
+
+    if [ -n "$rssi_filename" ]; then
+        # Clean up the temporary file
+        rm -f $rssi_filename
+        rssi_filename=
+    fi
+    if [ -n "$rate_to_CAP_filename" ]; then
+        # Clean up the temporary file
+        rm -f $rate_to_CAP_filename
+        rate_to_CAP_filename=
+    fi
+    if [ -n "$my_uplink_rate_filename" ]; then
+        # Clean up the temporary file
+        rm -f $my_uplink_rate_filename
+        my_uplink_rate_filename=
+    fi
+    if [ -n "$bestap_filename" ]; then
+        # Clean up the temporary file
+        rm -f $bestap_filename
+        bestap_filename=
+    fi
+    if [ -n "$CAP_snr_filename" ]; then
+        # Clean up the temporary file
+        rm -f $CAP_snr_filename
+        CAP_snr_filename=
+    fi
+}
+
+# Start a background ping to the gateway address (if it can be resolved).
+# This helps ensure the RSSI values are updated (as firmware will not report
+# updates if only beacons are being received on the STA interface).
+# input: $1 - network: the name of the network being managed
+# return: 0 if the ping was started or is already running; otherwise 1
+__repacd_start_ping() {
+    gw_ip=`route -n | grep ^0.0.0.0 | grep br-$1 | awk '{print $2}'`
+    if [ -n "$gw_ip" ]; then
+        if [ ! "$gw_ip" = "$last_ping_gw_ip" ]; then
+            # First need to kill the existing one due to the IP change.
+            __repacd_stop_ping
+            # This will leave ping_running set to 0.
+        fi
+
+        if [ "$ping_running" -eq 0 ]; then
+            __repacd_wifimon_debug "Pinging GW IP $gw_ip"
+
+            # Unfortunately the busybox ping command does not support an
+            # interval. Thus, we can only ping once per second so there will
+            # only be a handful of measurements over the course of our RSSI
+            # sampling.
+            ping $gw_ip > /dev/null &
+            ping_running=1
+            last_ping_gw_ip=$gw_ip
+        fi
+
+        # Ping is running now or was started.
+        return 0
+    fi
+
+    __repacd_wifimon_info "Failed to resolve GW when starting ping; will re-attempt"
+    return 1
+}
+
+# Determine if the gateway is reachable.
+#
+# Ideally this would be limited to only the 5 GHz STA interface, but there
+# is no good way to do this (since packets would need to be received on the
+# bridge interface).
+#
+# return: 0 if the gateway is reachable; otherwise 1
+__repacd_is_gw_reachable() {
+    if [ -n "$last_ping_gw_ip" ]; then
+        if ping -c 1 -W 1 ${last_ping_gw_ip} > /dev/null; then
+            return 0
+        fi
+    fi
+
+    # Gateway is unknown or is not reachable
+    return 1
+}
+
+# Determine if the STA interface named is current associated and active.
+#
+# input: $1 - sta_iface: the name of the interface (eg. ath01)
+# return: 0 if associated; 1 if not associated or empty interface name
+__repacd_wifimon_is_active_assoc() {
+    local sta_iface=$1
+    if [ -n "$sta_iface" ]; then
+        local assoc_str=$(iwconfig $sta_iface)
+        __repacd_wifimon_dump_cmd "State of $sta_iface: $assoc_str"
+
+        if $(echo "$assoc_str" | grep 'Access Point: ' | grep -v 'Not-Associated' > /dev/null); then
+            return 0
+        else
+            return 1
+        fi
+    else
+        # An unknown STA interface is considered not associated.
+        return 1
+    fi
+}
+
+# Determine if the STA interface named is current associated.
+#
+# Note that for the purposes of this function, an empty interface name is
+# considered associated. This is done because in some configurations, only
+# one interface is enabled.
+#
+# input: $1 - sta_iface: the name of the interface (eg. ath01)
+# return: 0 if associated or if the interface name is empty; otherwise 1
+__repacd_wifimon_is_assoc() {
+    local sta_iface=$1
+    if [ -n "$sta_iface" ];
+    then
+        if [ "$sta_iface" = "$sta_iface_5g" ] &&
+               [ "$force_down_5g" -gt 0 ];then
+            return 0
+        elif [ "$sta_iface" = "$sta_iface_24g" ] \
+            && [ "$force_down_24g" -gt 0 ]; then
+            return 0
+        elif [ "$sta_iface" = "$sta_iface_24g" ] \
+            && [ "$is_24G_down_by_independent_channel" -gt 0 ]; then
+            return 0
+        fi
+
+        if __repacd_wifimon_is_active_assoc $sta_iface; then
+            return 0
+        else
+            return 1
+        fi
+    else
+        # An unknown STA interface is considered associated.
+        return 0
+    fi
+}
+
+# Determine if the device is already operating in the desired range extender
+# mode when using automatic mode switching.
+#
+# input: $1 - cur_re_mode: the current operating range extender mode
+# input: $2 - cur_re_submode: the current operating range extender sub-mode
+# output: $3 - new_re_mode: the new range extender mode
+# output: $4 - new_re_submode: the new range extender sub-mode
+# return: 0 if already operating in the desired mode & submode; otherwise 1
+__repacd_wifimon_resolve_mode() {
+    local old_re_mode=$1
+    local old_re_submode=$2
+    local re_mode_changed=0
+
+    # Finally, if the serving AP is operating in one of the special
+    # modes, write back the association derived RE mode. Otherwise,
+    # write back the default mode.
+    if [ "$config_re_mode" = 'auto' ]; then
+        # Since when operating in SON mode we rely on wsplcd/daisy to force
+        # the association to the CAP, do not check whether the CAP is
+        # the serving AP when determining whether to switch modes.
+        if __repacd_wifimon_is_serving_ap_son; then
+            if [ ! "$old_re_mode" = 'son' ]; then
+                __repacd_wifimon_info "Serving AP has SON enabled"
+                eval "$3=son"
+                re_mode_changed=1
+            fi
+        elif __repacd_wifimon_is_serving_ap_wds; then
+            if [ ! "$old_re_mode" = 'wds' ]; then
+                __repacd_wifimon_info "Serving AP has WDS enabled"
+                eval "$3=wds"
+                re_mode_changed=1
+            fi
+        else
+            if [ ! "$old_re_mode" = "$default_re_mode" ]; then
+                __repacd_wifimon_info "Serving AP does not advertise WDS"
+                eval "$3=$default_re_mode"
+                re_mode_changed=1
+            fi
+        fi
+    fi
+
+    # By definition, when operating in non-auto mode, we are always in
+    # the desired mode. But if there is any special sub-modes, handle it here.
+    if __repacd_wifimon_is_serving_ap_son; then
+        __repacd_wifimon_get_son_submode submode
+        if [ ! "$old_re_submode" = "$submode" ]; then
+            eval "$4=$submode"
+        fi
+    fi
+
+    if [ "$re_mode_changed" -gt 0 ]; then
+        return 1
+    else
+        return 0
+    fi
+}
+
+# Determine if the peer BSSID has been written back to UCI.
+# This assumes the wireless config file has already been loaded.
+# input: $1 - iface_section: the name of the section in UCI
+# return: 0 if the BSSID has been set or there is no section; otherwise 1
+__repacd_wifimon_is_peer_bssid_set() {
+    local iface_section=$1
+
+    if [ -z "$iface_section" ]; then
+        # Nothing to clone.
+        return 0
+    elif [ -n "$iface_section" ]; then
+        config_get peer_bssid $iface_section 'bssid' ''
+        #Change peer to resolved iff BSSID non-zero.
+        if [ -n "$peer_bssid" -a "$peer_bssid" != "00:00:00:00:00:00" ]; then
+            return 0
+        fi
+    fi
+
+    return 1
+}
+
+# Determine if the deep cloning process has completed (if enabled).
+# return: 0 if the process is complete or is not enabled; otherwise 1
+__repacd_wifimon_is_deep_cloning_complete() {
+    # First check if wsplcd and deep cloning are even enabled. If not,
+    # then consider it complete.
+    local wsplcd_enabled
+    local deep_cloning_enabled
+    local config_sta_enabled
+    local peer_bssid
+
+    config_load wsplcd
+    config_get wsplcd_enabled 'config' 'HyFiSecurity' '0'
+    config_get deep_cloning_enabled 'config' 'DeepClone' '0'
+    config_get config_sta_enabled 'config' 'ConfigSta' '0'
+
+    if [ "$wsplcd_enabled" -eq 0 -o "$deep_cloning_enabled" -eq 0 -o \
+         "$config_sta_enabled" -eq 0 ]; then
+        return 0
+    fi
+
+    # For each of the STA interfaces, see if the peer BSSID has been set.
+    config_load wireless
+    __repacd_wifimon_is_peer_bssid_set $sta_iface_24g_config_name || return 1
+    __repacd_wifimon_is_peer_bssid_set $sta_iface_5g_config_name || return 1
+
+    return 0
+}
+
+# Determine if the STA association is stable enough to be able to start
+# the next step of the process.
+# return: 0 if the association is stable; non-zero if it is not yet deemed
+#         stable
+__repacd_wifimon_is_assoc_stable() {
+    if [ "$wps_stabilization" -gt 0 ]; then
+        if [ "$wps_assoc_count" -ge "$min_wps_assoc" ]; then
+            return 0
+        else
+            return 1
+        fi
+    elif [ "$bssid_stabilization" -gt 0 ]; then
+        if [ "$bssid_assoc_count" -ge "$min_bssid_assoc" ]; then
+            return 0
+        else
+            return 1
+        fi
+    elif [ "$wps_stabilization" -gt 0 ]; then
+        if [ "$wps_assoc_count" -ge "$min_wps_assoc" ]; then
+            return 0
+        else
+            return 1
+        fi
+    elif [ "$auto_mode_stabilization" -gt 0 ]; then
+        if [ "$auto_mode_assoc_count" -ge "$min_auto_mode_assoc" ]; then
+            return 0
+        else
+            return 1
+        fi
+    else
+        # No stabilization in progress
+        return 0
+    fi
+}
+
+# Determine if the guest network's backhaul interface should be changed
+# from prefered interface to non-prefered interface based on link status.
+# If change has already made then monitor prefered interface, if prefered
+# interface link looks good then change back to prefered interface.
+# input: $1 - pref_iface: prefered sta interface
+# input: $2 - other_iface: other non prefered interface
+__repacd_wifimon_override_guest_backhaul() {
+    local pref_iface=$1
+    local other_iface=$2
+    local force_pref_down=0
+    local force_other_down=0
+    local ifname
+
+    if [ "$pref_iface" = "$sta_iface_5g" ]; then
+        force_pref_down=$force_down_5g
+        force_other_down=$force_down_24g
+    elif [ "$pref_iface" = "$sta_iface_24g" ]; then
+        force_pref_down=$force_down_24g
+        force_other_down=$force_down_5g
+    fi
+
+    if ! __repacd_wifimon_is_assoc $pref_iface || \
+           [ "$force_pref_down" -gt 0 ]; then
+        if __repacd_wifimon_is_assoc $other_iface &&
+               [ "$force_other_down" -eq 0 ]; then
+            if [ "$guest_link_override" -eq 0 ]; then
+                if [ "$guest_preflink_down_start_time" -eq 0 ]; then
+                    __repacd_wifimon_get_timestamp guest_preflink_down_start_time
+                    guest_preflink_up_start_time=0
+                elif __repacd_wifimon_is_timeout $guest_preflink_down_start_time \
+                         $guest_preflink_down_timeout; then
+                    ifname=`iwconfig 2>&1 | grep "$other_iface.$guest_vid" | cut -d ' ' -f1`
+                    if [ -z "$ifname" ]; then
+                        vconfig add $other_iface $guest_vid
+                    fi
+                    brctl delif "br-$network_guest" "$pref_iface.$guest_vid"
+                    brctl addif "br-$network_guest" "$other_iface.$guest_vid"
+                    ifconfig $other_iface.$guest_vid up
+                    guest_link_override=1
+                fi
+            fi
+        elif ! __repacd_wifimon_is_assoc $other_iface || \
+                 [ "$force_other_down" -gt 0 ]; then
+            if [ -n "$guest_preflink_down_start_time" ]; then
+                guest_preflink_down_start_time=0
+            fi
+
+            if [ "$guest_link_override" -gt 0 ]; then
+                brctl delif "br-$network_guest" "$other_iface.$guest_vid"
+                brctl addif "br-$network_guest" "$pref_iface.$guest_vid"
+                ifconfig $pref_iface.$guest_vid up
+                guest_link_override=0
+            fi
+        fi
+    elif __repacd_wifimon_is_assoc $pref_iface &&
+             [ "$force_pref_down" -eq 0 ]; then
+        if [ "$guest_link_override" -gt 0 ]; then
+           if [ "$guest_preflink_up_start_time" -eq 0 ]; then
+               __repacd_wifimon_get_timestamp guest_preflink_up_start_time
+               guest_preflink_down_start_time=0
+           elif __repacd_wifimon_is_timeout $guest_preflink_up_start_time \
+                    $guest_preflink_up_timeout; then
+               brctl delif "br-$network_guest" "$other_iface.$guest_vid"
+               brctl addif "br-$network_guest" "$pref_iface.$guest_vid"
+               ifconfig $pref_iface.$guest_vid up
+               guest_link_override=0
+           fi
+        fi
+    fi
+}
+
+# Determine the 5G RSSI backhaul quality
+# input $1 -- 5G RSSI value
+__repacd_wifimon_independent_channel_check() {
+    local rssi="$1"
+    if [ "$rssi_idle_time" -eq 0 ]; then
+        if [ -n "$sta_iface_24g" ]; then
+            __repacd_wifimon_debug "rssi = $rssi quality_5g_rssi_level=$quality_5g_rssi_level force_down_24g=$force_down_24g force_down_5g=$force_down_5g rssi_counter=$rssi_counter"
+            if [ "$rssi" -gt -95 -a "$rssi" -lt 0 ]; then
+                if [ "$rssi" -gt "$quality_5g_rssi_level" ]; then
+                    __repacd_wifimon_debug "rssi good then quality_5g_rssi_level"
+                    if [ "$is_24G_down_by_independent_channel" -eq 0 ]; then
+                        rssi_counter=$((rssi_counter + 1))
+                    else
+                        rssi_counter=0
+                    fi
+                else
+                    __repacd_wifimon_debug "rssi less then quality_5g_rssi_level force_down_24g=$force_down_24g"
+                    if [ "$is_24G_down_by_independent_channel" -eq 0 ]; then
+                        rssi_counter=0
+                    else
+                        rssi_counter=$((rssi_counter + 1))
+                    fi
+                fi
+            fi
+        else
+            __repacd_wifimon_debug "sta_iface_24g=$sta_iface_24g"
+        fi
+    else
+        rssi_idle_time=$((rssi_idle_time - 1))
+        __repacd_wifimon_debug "rssi_idle_time=$rssi_idle_time"
+    fi
+}
+
+# Determine if the STA is associated and update the state accordingly.
+# input: $1 - network: the name of the network being managed
+# input: $2 - cur_re_mode: the currently configured range extender mode
+# input: $3 - cur_re_submode: the currently configured range extender sub-mode
+# input: $4 - whether this is a check during init for a restart triggered
+#             by mode switching
+# output: $5 - state: the variable to update with the new state name (if there
+#                     was a change)
+# output: $6 - re_mode: the desired range extender mode
+# output: $7 - re_submode: the desired range extender sub-mode
+# return: 0 if associated; otherwise 1
+__repacd_wifimon_check_associated() {
+    local network=$1
+    local cur_re_mode=$2
+    local cur_re_submode=$3
+    local autoconf_start=$4
+    local associated=0 resolving=0
+
+    config_load repacd
+    config_get bssid_resolve_state WiFiLink 'BSSIDResolveState' 'resolving'
+    # In Daisy chaining, when we are at hop 2 and above, allow monitoring
+    # even if single backhaul is associated provided other backhaul is forced down.
+    if __repacd_wifimon_is_assoc $sta_iface_5g \
+        && __repacd_wifimon_is_assoc $sta_iface_24g; then
+        associated=1
+    elif [ "$ignore_24g_assoc" -gt 0 ] \
+        && __repacd_wifimon_is_assoc $sta_iface_5g; then
+        associated=1
+    elif [ "$bssid_resolve_state" = "resolving" ]; then
+        if __repacd_wifimon_is_assoc $sta_iface_5g; then
+            resolving=1
+        elif __repacd_wifimon_is_assoc $sta_iface_24g \
+            && [ "$nolink_detected_5g" -gt 0 ]; then
+            resolving=1
+        fi
+    fi
+    if [ "$associated" -gt 0 -o "$resolving" -gt 0 ]; then
+        # Only update the LED state if we transitioned from not associated
+        # to associated.
+        if [ "$last_assoc_state" -eq 0 ]; then
+            if [ "$wps_in_progress" -gt 0 ]; then
+                # If WPS was triggered, it could take some time for the
+                # interfaces to settle into their final state. Thus, update
+                # the start time for the measurement to the point at which
+                # the WPS button was pressed.
+                assoc_start_time=$wps_start_time
+
+                # Clear this as we only want to extend the association time
+                # for this one instance. All subsequent ones should be based
+                # on the time we detect a disassociation (unless WPS is
+                # triggered again).
+                wps_start_time=''
+
+                # Clear this flag so that we now use the association timer
+                # instead of the WPS one.
+                wps_in_progress=0
+
+                wps_stabilization=1
+            elif [ "$daisy_chain" -gt 0 -a "$bssid_stabilization" -eq 0 ]; then
+                if [ -n "$sta_iface_5g" -a "$force_down_5g" -eq 0 ] \
+                    && __repacd_wifimon_is_assoc $sta_iface_5g; then
+                    # Daisy chaining enabled, so deep cloning would have been disabled.
+                    # Update the 5G BSSID, because we will proceed assuming current
+                    # connection is stable.
+                    if [ "$badlink_switch_inprogress" -eq 0 ]; then
+                        __repacd_wifimon_config_current_bssid $sta_iface_5g $sta_iface_5g_config_name
+                        bssid_resolve_complete=0
+                    else
+                        bssid_resolve_complete=1
+                    fi
+
+                    __repacd_wifimon_get_timestamp assoc_start_time
+
+                    bssid_stabilization=1
+                    bssid_assoc_count=0
+                    assoc_timeout_logged=0
+
+                    eval "$5=$WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS"
+                elif [ "$nolink_detected_5g" -gt 0 -a -n "$sta_iface_24g" -a "$force_down_24g" -eq 0 ] \
+                    && __repacd_wifimon_is_assoc $sta_iface_24g; then
+                    # We are here because we detected Nolink or Badlink in 5G band.
+                    __repacd_wifimon_config_current_bssid $sta_iface_24g $sta_iface_24g_config_name
+                    bssid_resolve_complete=0
+
+                    __repacd_wifimon_get_timestamp assoc_start_time
+
+                    bssid_stabilization=1
+                    bssid_assoc_count=0
+                    assoc_timeout_logged=0
+
+                    eval "$5=$WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS"
+                fi
+            elif [ "$config_re_mode" = 'auto' ] && [ "$auto_mode_stabilization" -eq 0 ]; then
+                # When making mode switching decisions, we also want to allow
+                # for enough time for the interfaces to stabilize.
+                __repacd_wifimon_get_timestamp assoc_start_time
+
+                auto_mode_stabilization=1
+                auto_mode_assoc_count=0
+                assoc_timeout_logged=0
+
+                eval "$5=$WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS"
+            fi
+
+            if [ "$wps_stabilization" -gt 0 ]; then
+                wps_assoc_count=$((wps_assoc_count + 1))
+                __repacd_wifimon_debug "Assoc post WPS (#$wps_assoc_count)"
+            elif [ "$bssid_stabilization" -gt 0 ]; then
+                if [ "$bssid_resolve_complete" -gt 0 ]; then
+                    bssid_assoc_count=$((bssid_assoc_count + 1))
+                    __repacd_wifimon_debug "Assoc post BSSID resolve (#$bssid_assoc_count)"
+                elif [ "$cur_re_mode" = "son" -a "$bssid_resolve_state" = "resolving" ]; then
+                    local otherband_sta_iface_config_name
+                    # Try configuring otherband backhaul BSSID.
+                    # Otherband BSSID is arrived from beacon of current associated link.
+                    # If successfully configured, we are ready to enable
+                    # otherband station and check for association.
+                    if [ "$nolink_detected_5g" -eq 0 ]; then
+                        __repacd_wifimon_find_and_config_otherband_bssid $sta_iface_5g
+                        otherband_sta_iface_config_name=$sta_iface_24g_config_name
+                    else
+                        __repacd_wifimon_find_and_config_otherband_bssid $sta_iface_24g
+                        otherband_sta_iface_config_name=$sta_iface_5g_config_name
+                    fi
+
+                    config_load wireless
+                    if __repacd_wifimon_is_peer_bssid_set $otherband_sta_iface_config_name; then
+                        # Marking BSSIDResolveState=resolved to indicate
+                        # BSSID resolve completion.
+                        uci_set repacd WiFiLink BSSIDResolveState 'resolved'
+                        uci_commit repacd
+                        bssid_resolve_complete=1
+                    else
+                        __repacd_wifimon_debug "Waiting for BSSID resolve"
+                    fi
+                else
+                    bssid_resolve_complete=1
+                fi
+            elif [ "$auto_mode_stabilization" -gt 0 ]; then
+                if __repacd_wifimon_is_deep_cloning_complete; then
+                    auto_mode_assoc_count=$((auto_mode_assoc_count + 1))
+                    __repacd_wifimon_debug "Auto mode stabilization (#$auto_mode_assoc_count)"
+                else
+                    __repacd_wifimon_debug "Waiting for deep cloning"
+                fi
+            fi
+
+            if __repacd_wifimon_is_assoc_stable; then
+                auto_mode_stabilization=0
+                bssid_stabilization=0
+
+                # Check the mode to see if we are already in the desired mode.
+                # If not, we will want to trigger the mode switch first as
+                # otherwise the RSSI measurements may not be updated (due to
+                # pings not going through).
+                if __repacd_wifimon_resolve_mode $cur_re_mode $cur_re_submode $6 $7; then
+                    eval "$5=$WIFIMON_STATE_MEASURING"
+                    assoc_start_time=''
+                    last_assoc_state=1
+                    wps_stabilization=0
+
+                    # If daisy chain mode is enabled, get the phyrate of the associated sta interface
+                    # and calculate the min and max threshold rates from the configured percent_rate_min5G
+                    # and percent_rate_max5G value.
+                    if [ "$daisy_chain" -gt 0 ]; then
+                        __repacd_wifimon_set_rate_measurement_iface "5g"
+                    fi
+
+                    # Restart the measurements. We do not remember any past
+                    # ones as they might not reflect the current state (eg.
+                    # if the root AP was moved).
+                    rssi_num=0
+                    rate_num=0
+                else
+                    # RE mode switch is required. Do not start measuring link.
+                    return 0
+                fi
+            else
+                # Pretend like we are not associated since we need it to be
+                # stable.
+                return 1
+            fi
+        fi
+
+        # Association is considered stable. Measure the link, we measure the WiFi link
+        # based on RSSI or Rate, RSSI measurement is used in star topology where we
+        # know the APs location and REs placement is adjusted based on LED feedback.
+        # But in Daisy chain, REs might have connected to any best link, REs auto detects
+        # the best link so we will not know the position of connected AP and LED
+        # feedback is not useful for the user. First make sure all sta interfaces are under
+        # our control.
+        if [ "$force_down_24g" -gt 0 ] \
+            && __repacd_wifimon_is_active_assoc $sta_iface_24g; then
+            __repacd_wifimon_bring_iface_down $sta_iface_24g
+        fi
+
+        if [ "$force_down_5g" -gt 0 ] \
+            && __repacd_wifimon_is_active_assoc $sta_iface_5g; then
+            __repacd_wifimon_bring_iface_down $sta_iface_5g
+        fi
+
+        # Waiting for 2.4G backhaul to associate in case of badlink.
+        # Bring down 5G backhaul once 2.4G is associated and stable.
+        if [ "$badlink_switch_inprogress" -gt 0 ] \
+            && __repacd_wifimon_is_assoc $sta_iface_24g; then
+            __repacd_wifimon_debug "Bringing down 5G due to bad link"
+            __repacd_wifimon_bring_iface_down $sta_iface_5g
+            badlink_switch_inprogress=0
+            badlink_start_time_5g=''
+        fi
+
+        if [ "$daisy_chain" -gt 0 -a "$force_down_5g" -eq 0 ]; then
+            # Measure the link rate, so that we trigger the best link selection logic.
+            if [ "$rate_num" -le "$rate_samples" ] && \
+                __repacd_start_ping $network; then
+                __repacd_wifimon_measure_rate $network $5
+                return 0
+            else
+                # Restart the rate measurement
+                rate_num=0
+                #make sure it can continue to check the RSSI
+                if [ "$is_independent_channel_selection_enable" -gt 0 ] &&\
+                __repacd_start_ping $network; then
+                    __repacd_wifimon_independent_channel_check`iwconfig $sta_iface_5g | grep 'Signal level' | awk -F'=' '{print $3}' | awk '{print $1}'`
+                fi
+            fi
+
+        else
+            if [ "$force_down_5g" -gt 0 ]; then
+                eval "$5=$WIFIMON_STATE_RE_MOVE_CLOSER"
+                return 0;
+            fi
+
+            # Association is considered stable. Measure the link RSSI.
+            if [ "$rssi_num" -le "$rssi_samples" ] && \
+                __repacd_start_ping $network; then
+                __repacd_wifimon_measure_link $network $5
+            else
+                #make sure it can continue to check the RSSI
+                if [ "$is_independent_channel_selection_enable" -gt 0 ] &&\
+                      __repacd_start_ping $network; then
+                    __repacd_wifimon_independent_channel_check `iwconfig $sta_iface_5g | grep 'Signal level' | awk -F'=' '{print $3}' | awk '{print $1}'`
+                fi
+            fi
+        fi
+        return 0
+    # All cases below are for not associated.
+    elif [ "$autoconf_start" -gt 0 ]; then
+        # When making mode switching decisions, we also want to allow
+        # for enough time for the interfaces to stabilize.
+        __repacd_wifimon_get_timestamp assoc_start_time
+
+        auto_mode_stabilization=1
+        auto_mode_assoc_count=0
+        assoc_timeout_logged=0
+
+        eval "$5=$WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS"
+    elif [ "$wps_in_progress" -eq 0 -a "$wps_stabilization" -eq 0 -a \
+           "$auto_mode_stabilization" -eq 0 -a "$bssid_stabilization" -eq 0 ]; then
+        # Record the first time we detected ourselves as not being associated.
+        # This will drive a timer in the check function that will change the
+        # state if we stay disassociated for too long.
+        if [ -z "$assoc_start_time" ]; then
+            __repacd_wifimon_get_timestamp assoc_start_time
+        fi
+        if [ "$is_independent_channel_selection_enable" -gt 0 ];then
+            if  __repacd_wifimon_is_assoc $sta_iface_5g && \
+            __repacd_start_ping $network; then
+            __repacd_wifimon_independent_channel_check `iwconfig $sta_iface_5g | grep 'Signal level' | awk -F'=' '{print $3}' | awk '{print $1}'`
+            fi
+        else
+            __repacd_stop_ping
+        fi
+        last_assoc_state=0
+        eval "$5=$WIFIMON_STATE_NOT_ASSOCIATED"
+    elif [ "$wps_in_progress" -gt 0 -o "$auto_mode_stabilization" -gt 0 \
+        -o "$bssid_stabilization" -gt 0 ]; then
+        if [ "$wps_timeout_logged" -eq 0 -a "$assoc_timeout_logged" -eq 0 ]; then
+            # Suppress logs after we've timed out
+            __repacd_wifimon_debug "Auto config in progress - not assoc"
+        fi
+
+        bssid_assoc_count=0
+        wps_assoc_count=0
+        auto_mode_assoc_count=0
+    fi
+
+    # Not associated and WPS is in progress. No LED update.
+    return 1
+}
+
+# Check whether the given WHC feature is advertised by the AP on which the
+# given STA interface is connected.
+# input: $1 - sta_iface: the interface to check for the AP capabilities
+# input: $2 - ioctl_name: the name of the private ioctl to use to check the
+#                         feature
+# return: 0 if the feature is on or the interface name is invalid; otherwise 1
+__repacd_wifimon_is_whc_feature_on_iface() {
+    local sta_iface=$1
+    local ioctl_name=$2
+    local command_result
+
+    if [ -z "$sta_iface" ]; then
+        return 0
+    fi
+
+    if [ "$sta_iface" = "$sta_iface_5g" ] &&
+           [ "$force_down_5g" -gt 0 ]; then
+        return 0
+    elif [ "$sta_iface" = "$sta_iface_24g" ] &&
+           [ "$force_down_24g" -gt 0 -o "$ignore_24g_assoc" -gt 0 ]; then
+        return 0
+    fi
+
+    if [ -z $REPACD_CFG80211 ]; then
+        command_result=$(iwpriv $sta_iface $ioctl_name)
+    else
+        command_result=$(cfg80211tool $sta_iface $ioctl_name)
+    fi
+    __repacd_wifimon_dump_cmd "$ioctl_name on $sta_iface: $command_result"
+
+    if [ -n "$command_result" ]; then
+        local feature_enabled
+        feature_enabled=$(echo "$command_result" | cut -d: -f2)
+        if [ "$feature_enabled" -gt 0 ]; then
+            return 0
+        fi
+    else
+        __repacd_wifimon_debug "iwpriv failed on $sta_iface for $ioctl_name"
+    fi
+
+    # Feature must not be enabled or we cannot resolve it.
+    return 1
+}
+
+# Determine if the serving AP has WDS enabled or not on all valid interfaces.
+# return: 0 if it does have WDS enabled; otherwise 1
+__repacd_wifimon_is_serving_ap_wds() {
+    if __repacd_wifimon_is_whc_feature_on_iface "$sta_iface_24g" 'get_whc_wds' &&
+       __repacd_wifimon_is_whc_feature_on_iface "$sta_iface_5g" 'get_whc_wds'; then
+        return 0
+    fi
+
+    return 1
+}
+
+# Determine if the serving AP has SON mode enabled or not.
+# return: 0 if it does have SON enabled; otherwise 1
+__repacd_wifimon_is_serving_ap_son() {
+    if __repacd_wifimon_is_whc_feature_on_iface "$sta_iface_24g" 'get_whc_son' &&
+       __repacd_wifimon_is_whc_feature_on_iface "$sta_iface_5g" 'get_whc_son'; then
+        return 0
+    fi
+
+    return 1
+}
+
+# Determine if the serving AP has SON mode enabled and it is an RE.
+# return: 0 if it is RE and does have SON enabled; otherwise 1
+__repacd_wifimon_is_serving_ap_daisy_son() {
+    if [ "$daisy_chain" -gt 0 ] \
+        && __repacd_wifimon_is_whc_feature_on_iface "$sta_iface_5g" 'get_whc_son'; then
+        __repacd_get_root_ap_dist $sta_iface_5g root_distance
+        if [ "$root_distance" -gt 1 ]; then
+            return 0
+        fi
+    fi
+
+    return 1
+}
+
+# Determine the number of hops a given STA interface is from the
+# root AP.
+# input: $1 - sta_iface: the name of the STA interface (eg. ath01)
+# output: $2 - dist: the distance (in terms of hops) from the root AP
+__repacd_get_root_ap_dist() {
+    local sta_iface=$1
+
+    local command_result
+
+    if [ -z "$sta_iface" ]; then
+        return 0
+    fi
+
+
+    if [ -z $REPACD_CFG80211 ]; then
+        command_result=$(iwpriv $sta_iface get_whc_dist)
+    else
+        command_result=$(cfg80211tool $sta_iface get_whc_dist)
+    fi
+    __repacd_wifimon_dump_cmd "root dist for $sta_iface: $command_result"
+
+    if [ -n "$command_result" ]; then
+        local root_dist
+        root_dist=$(echo "$command_result" | cut -d: -f2)
+        eval "$2=$root_dist"
+    fi
+}
+
+# Determine the maximum number of hops the STA interfaces are from the
+# root AP.
+# output: $1 - max_dist: the maximum distance (in terms of hops) from the
+#                       root AP
+__repacd_get_max_root_ap_dist() {
+    local root_dist_24g=0 root_dist_5g=0
+    if [ -n "$sta_iface_24g" ]; then
+        __repacd_get_root_ap_dist $sta_iface_24g root_dist_24g
+    fi
+
+    if [ -n "$sta_iface_5g" ]; then
+        __repacd_get_root_ap_dist $sta_iface_5g root_dist_5g
+    fi
+
+    # If daisy chaining enabled and 5G is active,
+    # determine root distance from 5G only.
+    if [ "$daisy_chain" -gt 0 ] \
+        && [ -n "$sta_iface_5g" -a "$force_down_5g" -eq 0 ]; then
+            eval "$1=$root_dist_5g"
+    else
+        if [ "$root_dist_24g" -eq $RE_ROOT_AP_DISTANCE_INVALID ]; then
+            eval "$1=$root_dist_5g"
+            return
+        elif [ "$root_dist_5g" -eq $RE_ROOT_AP_DISTANCE_INVALID ]; then
+            eval "$1=$root_dist_24g"
+            return
+        fi
+        if [ "$root_dist_24g" -gt "$root_dist_5g" ]; then
+            eval "$1=$root_dist_24g"
+        else
+            eval "$1=$root_dist_5g"
+        fi
+    fi
+}
+
+# Determine if the serving AP is currently the CAP or not.
+# return: 0 if associated to the CAP; otherwise 1
+__repacd_wifimon_is_cap_serving() {
+    # If the root AP is not operating in WDS mode, it may not even be a WHC
+    # AP. To be conservative, we do not enable the AP functionality.
+    local wds_enabled root_dist
+
+    if __repacd_wifimon_is_serving_ap_wds; then
+        __repacd_get_max_root_ap_dist root_dist
+        if [ "$root_dist" -eq 1 ]; then
+            # The STA device saying it is 1 hop away means that the serving
+            # AP indicated it was 0 hops away from the CAP. This means that
+            # the serving AP is the CAP.
+            return 0
+        fi
+    else
+        __repacd_wifimon_debug "Serving AP is not WHC enabled"
+    fi
+
+    # Either we are more than 1 hop from the root or the distance is
+    # unknown. In either case, indicate that the CAP is not serving.
+    return 1
+}
+
+# Determine the minimum number of hops the STA interfaces are from the
+# root AP.
+# output: $1 - min_dist: the minimum distance (in terms of hops) from the
+#                       root AP
+__repacd_get_min_root_ap_dist() {
+    local root_distance_24g=$RE_ROOT_AP_DISTANCE_INVALID
+    local root_distance_5g=$RE_ROOT_AP_DISTANCE_INVALID
+
+    if [ -n "$sta_iface_5g" ]; then
+        __repacd_get_root_ap_dist $sta_iface_5g root_distance_5g
+    fi
+    if [ -n "$sta_iface_24g" ]; then
+        __repacd_get_root_ap_dist $sta_iface_24g root_distance_24g
+    fi
+
+    if [ "$root_distance_24g" -le "$root_distance_5g" ]; then
+        eval "$1=$root_distance_24g"
+    else
+        eval "$1=$root_distance_5g"
+    fi
+}
+
+# Set the Root AP distance based on STA association state to AP interface.
+# input $1: config: interface configuration name
+# input $2: distance: new root distance to configure on AP interface
+__repacd_wifimon_set_root_distance() {
+    local config=$1
+    local distance=$2
+    local iface mode
+
+    config_get mode "$config" mode
+    config_get iface $config ifname
+
+    if [ "$mode" = "ap" ]; then
+        if [ -z $REPACD_CFG80211 ]; then
+            iwpriv $iface set_whc_dist $distance
+        else
+            cfg80211tool $iface set_whc_dist $distance
+        fi
+    fi
+}
+
+# Copy the Uplink rate from associated STA to non associated STA.
+# input $1: source_iface: source(associated) interface name to get rate
+# input $2: target_iface: target(non-associated) interface name to set rate
+__repacd_wifimon_copy_uplink_rate() {
+    local src_iface=$1
+    local tgt_iface=$2
+    local src_rate
+
+    if [ -n "$src_iface" -a -n "$tgt_iface" ] \
+        && __repacd_wifimon_is_assoc $src_iface; then
+        if [ -z $REPACD_CFG80211 ]; then
+            src_rate=`iwpriv $src_iface get_whc_ul_rate | awk -F':' '{print $2}'`
+            iwpriv $tgt_iface set_whc_ul_rate $src_rate
+        else
+            src_rate=`cfg80211tool $src_iface get_whc_ul_rate | awk -F':' '{print $2}'`
+            cfg80211tool $tgt_iface set_whc_ul_rate $src_rate
+        fi
+    fi
+}
+
+# Set the desired Uplink rate for the provided interace.
+# input $1: iface: interface name to get rate
+# input $2: rate: rate to set
+__repacd_wifimon_set_uplink_rate() {
+    local iface=$1
+    local rate=$2
+
+    if [ -n "$iface" ]; then
+        if [ -z $REPACD_CFG80211 ]; then
+            iwpriv $iface set_whc_ul_rate $rate
+        else
+            cfg80211tool $iface set_whc_ul_rate $rate
+        fi
+    fi
+}
+
+# Determine the current SON sub-mode.
+# output: $1 - submode: sub mode we are operating in.
+__repacd_wifimon_get_son_submode() {
+    if __repacd_wifimon_is_cap_serving; then
+        eval "$1=star"
+    else
+        eval "$1=daisy"
+    fi
+}
+
+# Bring down sta vap interface.
+# input: $1 - sta interface: the name of the interface for bringing down.
+__repacd_wifimon_bring_iface_down() {
+
+    local sta_iface=$1
+    if [ -n "$sta_iface" ];then
+        wpa_cli -p /var/run/wpa_supplicant-$sta_iface disable_network 0
+        __repacd_wifimon_info "Interface $sta_iface Brought down "
+        if [ "$sta_iface" = "$sta_iface_5g" ]; then
+            force_down_5g=1
+            if [ -n "$force_down_5g_timestamp" ] ;then
+                backhaul_eval_time=$config_long_eval_time5g
+            else
+                backhaul_eval_time=$config_short_eval_time5g
+            fi
+            __repacd_wifimon_get_timestamp force_down_5g_timestamp
+        else
+            force_down_24g=1
+        fi
+        rssi_counter=0
+    fi
+}
+
+# Bring up sta vap interface.
+# input: $1 - sta interface: the name of the interface for bringing up.
+__repacd_wifimon_bring_iface_up() {
+    local sta_iface=$1
+
+    if [ -n "$sta_iface" ];then
+        wpa_cli -p /var/run/wpa_supplicant-$sta_iface enable_network 0
+        __repacd_wifimon_info "Interface $sta_iface Brought up "
+        if [ "$sta_iface" = "$sta_iface_5g" ]; then
+            force_down_5g=0
+        else
+            force_down_24g=0
+            #if 2.4G interface up, force reset independent_channel parameters to 0
+            is_24G_down_by_independent_channel=0
+            uci_set wireless $wifi_2G_interface_name independent_channel_set '0'
+            uci_commit wireless
+        fi
+        rssi_counter=0
+        last_assoc_state=0
+    fi
+}
+
+# Find the median from the samples file.
+# Find the median from the samples file.
+# This is a crude way to compute the median when the number of
+# samples is odd. It is not strictly correct for an even number
+# of samples since it does not compute the average of the two
+# samples in the middle and rather just takes the lower one, but
+# this should be sufficient for our purposes. The average is not
+# performed due to the values being on the logarithmic scale and
+# because shell scripts do not directly support floating point
+# arithmetic.
+# input: $1 - Samples filename
+# input: $2 - Number of samples in the samples file
+# output: $3 - computed Median
+__repacd_wifimon_compute_median() {
+    local median median_index
+    local samples_filename="$1"
+
+    median_index=$((($2 + 1) / 2))
+    median=$(cat $samples_filename | sort -n |
+                        head -n $median_index | tail -n 1)
+
+    eval "$3=$median"
+}
+
+# Find the maximum duplicated entry from the samples file.
+# input: $1 - Samples filename
+# output: $2 - Maximum duplicated entry
+__repacd_wifimon_get_max_duplicated_entry() {
+    local max_duplicated
+    local samples_filename="$1"
+
+    max_duplicated="$(cat $samples_filename | sort -n |
+                        uniq -c | sort -nr | head -n 1 |
+                        awk -F " " '{print $2}')"
+
+    eval "$2='$max_duplicated'"
+}
+
+# Parse the provided BSSID list and set Best BSSID variables.
+# input: $1 - best_bssid_list
+__repacd_wifimon_parse_best_bssid_list() {
+    local best_bssid_list="$1"
+
+    __repacd_wifimon_debug "Best BSSID list: "$best_bssid_list""
+    new_bestap=`echo "$best_bssid_list" | awk -F ";" '{print $1}'`
+    new_bestap_otherband=`echo "$best_bssid_list" | awk -F ";" '{print $2}'`
+}
+
+# Measure the Rate to the serving AP and update the state accordingly.
+# input: $1 - network: the name of the network being monitored
+# output: $2 - state: the variable to update with the new state name (if there
+#                     was a change)
+__repacd_wifimon_measure_rate() {
+    local bestap bestap_otherband
+    local rssi CAP_snr my_uplink_rate
+
+    # Just check Gateway link and proceed to rate measurement.
+    if ! __repacd_is_gw_reachable; then
+        if [ -n "$last_ping_gw_ip" ]; then
+            __repacd_wifimon_debug "GW ${last_ping_gw_ip} not reachable"
+        else
+            __repacd_wifimon_debug "GW unknown"
+        fi
+    fi
+
+    # Get the 5G RSSI level
+    rssi=`iwconfig $sta_iface_5g | grep 'Signal level' | awk -F'=' '{print $3}' | awk '{print $1}'`
+
+    # Only the 5 GHz link is measured. This is especially done since we
+    # generally cannot control which interface is used to reach upstream.
+    # Generally 5 GHz will be used (per the rules to set the broadcast bit
+    # and choose a default path), so we may not have any valid Rate data on
+    # 2.4 GHz.
+
+    if [ -z $REPACD_CFG80211 ]; then
+        # Get the rate to CAP estimate.
+        rate_to_CAP=`iwpriv $measurement_sta_iface get_whc_rate | awk -F':' '{print $2}'`
+        # Get the uplink rate with connected node.
+        my_uplink_rate=`iwpriv $measurement_sta_iface get_whc_ul_rate | awk -F':' '{print $2}'`
+        # Get the current CAP SNR.
+        CAP_snr=`iwpriv $measurement_sta_iface g_curr_caprssi | awk -F':' '{print $2}'`
+    else
+        # Get the rate to CAP estimate.
+        rate_to_CAP=`cfg80211tool $measurement_sta_iface get_whc_rate | awk -F':' '{print $2}'`
+        # Get the uplink rate with connected node.
+        my_uplink_rate=`cfg80211tool $measurement_sta_iface get_whc_ul_rate | awk -F':' '{print $2}'`
+        # Get the current CAP SNR.
+        CAP_snr=`cfg80211tool $measurement_sta_iface g_curr_caprssi | awk -F':' '{print $2}'`
+    fi
+    # Get the current Best AP, later it will be used for finding the Best AP
+    # once the measurement is completed.
+    __repacd_wifimon_get_current_best_ap $measurement_sta_iface bestap bestap_otherband
+
+    if [ "$is_independent_channel_selection_enable" -gt 0 ]; then
+        # Only the 5 GHz link is measured. This is especially done since we
+        # generally cannot control which interface is used to reach upstream.
+        # Generally 5 GHz will be used (per the rules to set the broadcast bit
+        # and choose a default path), so we may not have any valid RSSI data on
+        # 2.4 GHz.
+        __repacd_wifimon_independent_channel_check $rssi
+    fi
+    # We explicitly ignore clearly bogus values. 0 Mbps seen in
+    # some instances where the STA is not associated by the time the Rate
+    # check is done.
+    if [ -n "$rate_to_CAP" ]; then
+        if [ "$rate_num" -lt "$rate_samples" ]; then
+            __repacd_wifimon_debug "Sample #$rate_num RSSI = $rssi dBm CAP SNR = $CAP_snr Rate to CAP = $rate_to_CAP Mbps"
+
+            # Ignore the very first sample since it is taken at the same time
+            # the ping is started (and thus the Rate might not have been
+            # updated).
+            if [ "$rate_num" -eq 0 ]; then
+                rssi_filename=`mktemp /tmp/repacd-rssi.XXXXXX`
+                rate_to_CAP_filename=`mktemp /tmp/repacd-rate-toCAP.XXXXXX`
+                CAP_snr_filename=`mktemp /tmp/repacd-CAP-snr.XXXXXX`
+                bestap_filename=`mktemp /tmp/repacd-bestap.XXXXXX`
+                if [ -n "$sta_iface_24g" ]; then
+                    my_uplink_rate_filename=`mktemp /tmp/repacd-rate-myUplink.XXXXXX`
+                fi
+            else
+                # Not the first sample
+                echo $rssi >> $rssi_filename
+                echo $rate_to_CAP >> $rate_to_CAP_filename
+                echo $CAP_snr >> $CAP_snr_filename
+                echo "$bestap;$bestap_otherband" >> $bestap_filename
+                if [ -n "$sta_iface_24g" ]; then
+                    echo $my_uplink_rate >> $my_uplink_rate_filename
+                fi
+            fi
+        elif [ "$rate_num" -eq "$rate_samples" ]; then
+            __repacd_wifimon_debug "Sample #$rate_num RSSI = $rssi dBm CAP SNR = $CAP_snr Rate to CAP = $rate_to_CAP Mbps"
+
+            # We will take one more sample and then draw the conclusion.
+            # No further measurements will be taken (although this may be
+            # changed in the future).
+            echo $rssi >> $rssi_filename
+            echo $rate_to_CAP >> $rate_to_CAP_filename
+            echo $CAP_snr >> $CAP_snr_filename
+            echo "$bestap;$bestap_otherband" >> $bestap_filename
+            if [ -n "$sta_iface_24g" ]; then
+                echo $my_uplink_rate >> $my_uplink_rate_filename
+            fi
+
+            # We got the required number of samples, now derive the median rate.
+            local rssi_median rate_to_CAP_median my_uplink_rate_median CAP_snr_median bestap_bssid_list restarted=0 config_success=0
+            __repacd_wifimon_compute_median $rssi_filename $rate_num rssi_median
+            __repacd_wifimon_compute_median $rate_to_CAP_filename $rate_num rate_to_CAP_median
+            __repacd_wifimon_compute_median $CAP_snr_filename $rate_num CAP_snr_median
+            __repacd_wifimon_debug "Median RSSI = $rssi_median CAP SNR = $CAP_snr_median Rate to CAP = $rate_to_CAP_median Mbps"
+            if [ "$device_type" = 'RE' ]; then
+                # Set the LED state
+                if [ $rssi_median -lt $rssi_far ]; then
+                    eval "$2=$WIFIMON_STATE_RE_MOVE_CLOSER"
+                elif [ $rssi_median -gt $rssi_near ]; then
+                    eval "$2=$WIFIMON_STATE_RE_MOVE_FARTHER"
+                else
+                    eval "$2=$WIFIMON_STATE_RE_LOCATION_SUITABLE"
+                fi
+
+                # Check if CAP SNR is greater than CAP SNR threshold, if greater then
+                # Connect to CAP and ignore rate measurement result.
+                if [ $CAP_snr_threshold -gt 0 -a $CAP_snr_median -ge $CAP_snr_threshold ]; then
+                    __repacd_wifimon_get_max_duplicated_entry $bestap_filename bestap_bssid_list
+                    __repacd_wifimon_parse_best_bssid_list "$bestap_bssid_list"
+                    __repacd_wifimon_config_best_ap $measurement_sta_iface $measurement_sta_iface_config_name restarted config_success
+                    if [ "$restarted" -gt 0 ]; then
+                        __repacd_wifimon_debug "CAP SNR >= $CAP_snr_threshold, Connecting to CAP"
+                    fi
+                else
+                    if __repacd_wifimon_is_cap_serving \
+                        && [ $CAP_snr_threshold -gt 0 -a $CAP_snr_median -ge $MoveFromCAP_snr_threshold ]; then
+                        __repacd_wifimon_debug "Stay connected to CAP, CAP SNR is good"
+                    else
+                        if [ "$rate_to_CAP_median" -lt "$rate_min" ]; then
+                            __repacd_wifimon_get_max_duplicated_entry $bestap_filename bestap_bssid_list
+                            __repacd_wifimon_parse_best_bssid_list "$bestap_bssid_list"
+                            __repacd_wifimon_config_best_ap $measurement_sta_iface $measurement_sta_iface_config_name restarted config_success
+                        elif [ "$rate_to_CAP_median" -gt "$rate_max" ]; then
+                            __repacd_wifimon_get_max_duplicated_entry $bestap_filename bestap_bssid_list
+                            __repacd_wifimon_parse_best_bssid_list "$bestap_bssid_list"
+                            __repacd_wifimon_config_best_ap $measurement_sta_iface $measurement_sta_iface_config_name restarted config_success
+                        fi
+                    fi
+                fi
+            fi
+
+            # If 5G link is very bad and below the prefered limit,
+            # switch to 2.4G backhaul link.
+            if [ "$restarted" -eq 0 ]; then
+                if [ -n "$sta_iface_24g" ]; then
+                    __repacd_wifimon_compute_median $my_uplink_rate_filename $rate_num my_uplink_rate_median
+
+                    # RSSI based interface bring down prioritize to mantain back ward compatiblity
+                    if [ -n "$rssi_median" -a "$rssi_median" -lt "$rssi_pref2G" ];then
+                        if  __repacd_wifimon_is_assoc $sta_iface_24g;then
+                            __repacd_wifimon_debug "Bringing down 5G Due to Bad rssi"
+                            __repacd_wifimon_bring_iface_down $sta_iface_5g
+                            __repacd_wifimon_get_timestamp assoc_start_time
+                        fi
+                    elif [ "$my_uplink_rate_median" -lt "$rate_pref2G" ]; then
+                        # Start the 5G bad link timer, if not started before.
+                        if [ -z "$badlink_start_time_5g" ]; then
+                            __repacd_wifimon_get_timestamp badlink_start_time_5g
+                        elif __repacd_wifimon_is_timeout $badlink_start_time_5g $badlink_timeout5G; then
+                            # Bring up 2.4G link if forced down before and wait for association
+                            # and then disable 5G backhaul link. 5G backhaul will be
+                            # back when the 2.4G link goes down or 5G evaluation timedout.
+                            __repacd_wifimon_debug "Median My uplink rate = $my_uplink_rate_median Mbps"
+                            __repacd_wifimon_debug "Bad 5G link detected, will bring down 5G once 2.4G is UP"
+                            if [ "$force_down_24g" -gt 0 ]; then
+                                __repacd_wifimon_bring_iface_up $sta_iface_24g
+                            fi
+                            badlink_switch_inprogress=1
+                            badlink_start_time_5g=''
+                        fi
+                    elif [ "$my_uplink_rate_median" -ge "$rate_pref2G" ]; then
+                        # We detected good link in 5G, disable the timer.
+                        badlink_start_time_5g=''
+                    fi
+                fi
+            else
+                # If VAP was restarted, restart the BSSID stabilization.
+                last_assoc_state=0
+                badlink_switch_inprogress=0
+                badlink_start_time_5g=''
+            fi
+
+            # We detected a link in 5G, clear the no-link flag.
+            if [ "$nolink_detected_5g" -gt 0 ]; then
+                nolink_detected_5g=0
+            fi
+
+            # We have our measurement, so the ping is no longer needed.
+            __repacd_stop_ping
+
+            # In case we disassociate after this, we will want to start the
+            # association timer again, so clear our state of the last time we
+            # started it so that it can be started afresh upon disassociation.
+            assoc_start_time=''
+        fi
+        rate_num=$((rate_num + 1))
+    fi
+}
+
+# Measure the RSSI to the serving AP and update the state accordingly.
+# input: $1 - network: the name of the network being monitored
+# output: $2 - state: the variable to update with the new state name (if there
+#                     was a change)
+__repacd_wifimon_measure_link() {
+    local rssi
+
+    if ! __repacd_is_gw_reachable; then
+        if [ -n "$last_ping_gw_ip" ]; then
+            __repacd_wifimon_debug "GW ${last_ping_gw_ip} not reachable"
+        else
+            __repacd_wifimon_debug "GW unknown"
+        fi
+        return
+    fi
+
+    if [ "$rssi_num" -eq 0 ]; then
+        if [ "$measuring_cnt" -gt 0 ]; then
+            __repacd_wifimon_debug "Measurement failed attempt # $measuring_cnt"
+        fi
+        measuring_cnt=$((measuring_cnt + 1))
+    fi
+
+    if [ "$measuring_cnt" -gt "$measuring_attempts" ]; then
+        if [ -n "$sta_iface_24g" ] &&
+               __repacd_wifimon_is_assoc $sta_iface_24g ; then
+            __repacd_wifimon_bring_iface_down $sta_iface_5g
+            measuring_cnt=0
+            eval "$2=$WIFIMON_STATE_RE_MOVE_CLOSER"
+            return
+        fi
+    fi
+
+    # Only the 5 GHz link is measured. This is especially done since we
+    # generally cannot control which interface is used to reach upstream.
+    # Generally 5 GHz will be used (per the rules to set the broadcast bit
+    # and choose a default path), so we may not have any valid RSSI data on
+    # 2.4 GHz.
+    rssi=`iwconfig $sta_iface_5g | grep 'Signal level' | awk -F'=' '{print $3}' | awk '{print $1}'`
+    if [ "$is_independent_channel_selection_enable" -gt 0 ]; then
+        __repacd_wifimon_independent_channel_check $rssi
+        if [ "$rssi_num" -gt "$rssi_samples" ]; then
+            return 0
+        fi
+    fi
+    # We explicitly ignore clearly bogus values. -95 dBm has been seen in
+    # some instances where the STA is not associated by the time the RSSI
+    # check is done. The check against 0 tries to guard against scenarios
+    # where the firmware has yet to report an RSSI value (although this may
+    # never happen if the RSSI gets primed through the association messaging).
+    if [ "$rssi" -gt -95 -a "$rssi" -lt 0 ]; then
+        if [ "$rssi_num" -lt "$rssi_samples" ]; then
+            __repacd_wifimon_debug "RSSI sample #$rssi_num = $rssi dBm"
+
+            # Ignore the very first sample since it is taken at the same time
+            # the ping is started (and thus the RSSI might not have been
+            # updated).
+            if [ "$rssi_num" -eq 0 ]; then
+                rssi_filename=`mktemp /tmp/repacd-rssi.XXXXXX`
+            else
+                # Not the first sample
+                echo $rssi >> $rssi_filename
+            fi
+            rssi_num=$((rssi_num + 1))
+        elif [ "$rssi_num" -eq "$rssi_samples" ]; then
+            __repacd_wifimon_debug "RSSI sample #$rssi_num = $rssi dBm"
+
+            # We will take one more sample and then draw the conclusion.
+            # No further measurements will be taken (although this may be
+            # changed in the future).
+            echo $rssi >> $rssi_filename
+
+            # We got the required number of samples, now derive the median rssi.
+            local rssi_median
+            __repacd_wifimon_compute_median $rssi_filename $rssi_num rssi_median
+            __repacd_wifimon_debug "Median RSSI = $rssi_median dBm"
+            measuring_cnt=0
+            if [ "$device_type" = 'RE' ]; then
+                if [ "$rssi_median" -lt "$rssi_far" ]; then
+                    eval "$2=$WIFIMON_STATE_RE_MOVE_CLOSER"
+                elif [ "$rssi_median" -gt "$rssi_near" ]; then
+                    eval "$2=$WIFIMON_STATE_RE_MOVE_FARTHER"
+                else
+                    eval "$2=$WIFIMON_STATE_RE_LOCATION_SUITABLE"
+                fi
+
+                if [ "$rssi_median" -le "$rssi_pref2G" ] ;then
+                    if [ -n "$sta_iface_24g" ] &&
+                           __repacd_wifimon_is_assoc $sta_iface_24g ; then
+                        __repacd_wifimon_bring_iface_down $sta_iface_5g
+                    fi
+                fi
+            else  # must be standalone client
+                if [ "$rssi_median" -lt "$rssi_min" ]; then
+                    eval "$2=$WIFIMON_STATE_CL_LINK_INADEQUATE"
+                elif [ "$rssi_median" -gt "$rssi_near" ]; then
+                    eval "$2=$WIFIMON_STATE_CL_LINK_SUFFICIENT"
+                elif __repacd_wifimon_is_cap_serving; then
+                    eval "$2=$WIFIMON_STATE_CL_ACTING_AS_RE"
+                else
+                    eval "$2=$WIFIMON_STATE_CL_LINK_SUFFICIENT"
+                fi
+            fi
+
+            rssi_num=$((rssi_num + 1))  # to prevent future samples
+
+            # We have our measurement, so the ping is no longer needed.
+            __repacd_stop_ping
+
+            # In case we disassociate after this, we will want to start the
+            # association timer again, so clear our state of the last time we
+            # started it so that it can be started afresh upon disassociation.
+            assoc_start_time=''
+        fi
+    fi
+}
+
+# Determine if a provided amount of time has elapsed.
+# input: $1 - start_time: the timestamp (in seconds)
+# input: $2 - duration: the amount of time to check against (in seconds)
+# return: 0 on timeout; non-zero if no timeout
+__repacd_wifimon_is_timeout() {
+    local start_time=$1
+    local duration=$2
+
+    # Check if the amount of elapsed time exceeds the timeout duration.
+    local cur_time
+    __repacd_wifimon_get_timestamp cur_time
+    local elapsed_time=$(($cur_time - $start_time))
+    if [ "$elapsed_time" -gt $duration ]; then
+        return 0
+    fi
+
+    return 1
+}
+
+# Check whether the given interface is the STA interface on the desired
+# network and the desired band.
+#
+# For now, only the 5 GHz band is monitored.
+#
+# input: $1 - config: the name of the interface config section
+# input: $2 - network: the name of the network to which the STA interface
+#                      must belong to be matched
+# output: $3 - iface: the resolved STA interface name on 2.4 GHz (if found)
+# output: $4 - iface_config_name: the resolved name of the config section
+#                                 for the STA interface on 2.4 GHz (if found)
+# output: $5 - iface: the resolved STA interface name on 5 GHz (if found)
+# output: $6 - iface_config_name: the resolved name of the config section
+#                                 for the STA interface on 5 GHz (if found)
+# output: $7 - unknown_ifaces: whether any Wi-Fi interfaces are as yet
+#                              unknown (in terms of their interface name)
+__repacd_wifimon_is_sta_iface() {
+    local config="$1"
+    local network_to_match="$2"
+    local iface disabled mode bssid device hwmode
+
+    config_get network "$config" network
+    config_get iface "$config" ifname
+    config_get disabled "$config" disabled '0'
+    config_get mode "$config" mode
+    config_get bssid "$config" bssid
+    config_get device "$config" device
+    config_get hwmode "$device" hwmode
+
+    if [ "$hwmode" != "11ad" ]; then
+        if [ "$network" = $network_to_match -a -n "$iface" -a "$mode" = "sta" \
+            -a "$disabled" -eq 0 ]; then
+            if whc_is_5g_vap $config; then
+                eval "$5=$iface"
+                eval "$6=$config"
+            else
+                eval "$3=$iface"
+                eval "$4=$config"
+            fi
+        elif [ -z "$iface" -a "$disabled" -eq 0 ]; then
+            # If an interface is showing as enabled but no name is known for it,
+            # mark it as such. Without doing this, we can resolve the interface
+            # names improperly.
+            eval "$7=1"
+        fi
+    fi
+}
+
+# Initialize the sta_iface_5g variable with the STA interface that is enabled
+# on the specified network (if any).
+# input: $1 - network: the name of the network being managed
+__repacd_wifimon_get_sta_iface() {
+    unknown_ifaces=0
+
+    config_load wireless
+    config_foreach __repacd_wifimon_is_sta_iface wifi-iface $1 \
+        sta_iface_24g sta_iface_24g_config_name \
+        sta_iface_5g sta_iface_5g_config_name unknown_ifaces
+
+    if [ "$unknown_ifaces" -gt 0 ]; then
+        # Clear out everything because we cannot be certain we have the
+        # right names (eg. interfaces may not all be up yet).
+        sta_iface_24g=
+        sta_iface_24g_config_name=
+        sta_iface_5g=
+        sta_iface_5g_config_name=
+    fi
+}
+
+# Back haul  monitoring logic : in case 5G was brought down
+# forcefully due to RSSI constraints and 2.4 G also went down
+# and stayed of for more then 2GBackhaulSwitchDownTime sec
+# bring back 5G.
+# input: $1 - re_mode: Current RE mode we are operating in.
+# input: $2 - re_submode: Current RE sub-mode we are operating in.
+# output:None
+
+__repacd_wifimon_evaluate_backhaul_link() {
+    local re_mode=$1
+    local re_submode=$2
+
+    if [ "$force_down_5g" -gt 0 ] ; then
+        if  ! __repacd_wifimon_is_assoc $sta_iface_24g;then
+            if [ -z "$down_time_2g" ]; then
+                __repacd_wifimon_get_timestamp down_time_2g
+            fi
+
+            if __repacd_wifimon_is_timeout $down_time_2g $config_downtime2G; then
+                __repacd_wifimon_debug "Bringing up 5G: 2G backhaul went down"
+                __repacd_wifimon_bring_iface_up $sta_iface_5g
+                __repacd_wifimon_get_timestamp assoc_start_time
+                down_time_2g=''
+                badlink_switch_inprogress=0
+            fi
+        else
+            down_time_2g=''
+        fi
+
+        if  __repacd_wifimon_is_timeout $force_down_5g_timestamp $backhaul_eval_time; then
+            __repacd_wifimon_debug "Bringing up 5G:eval interval $backhaul_eval_time sec expired"
+            __repacd_wifimon_bring_iface_up $sta_iface_5g
+            __repacd_wifimon_get_timestamp force_down_5g_timestamp
+            __repacd_wifimon_get_timestamp assoc_start_time
+        fi
+    elif [ "$force_down_24g" -gt 0 ]; then
+        # If we are associated to CAP and 2.4G was brought down due to badlink,
+        # Try enabling 2.4G after specified timeout.
+        if [ "$last_assoc_state" -gt 0 ] \
+            && __repacd_wifimon_is_assoc $sta_iface_5g; then
+            if [ -z "$down_time_2g" ]; then
+                __repacd_wifimon_get_timestamp down_time_2g
+            fi
+
+            if __repacd_wifimon_is_timeout $down_time_2g $config_eval_time24g; then
+                __repacd_wifimon_debug "Bringing up 2.4G: Trying to associate"
+                __repacd_wifimon_bring_iface_up $sta_iface_24g
+                down_time_2g=''
+            fi
+        else
+            down_time_2g=''
+        fi
+    fi
+}
+
+# Get phyrate in mbps
+# input: $1 - 'interface on which phyrate is to be calculated'
+# output: $2 - current maximum phyrate possible in Mbps
+__repacd_wifimon_get_current_phyrate_in_mbps() {
+    local  measurement_iface=$1
+    local phyrate_in_mbps
+    local phyrate_unit
+    local padding="00000"
+
+    # Get the phyrate and rate units of the interface.
+    eval $(iwconfig $measurement_iface |grep 'Bit Rate' | awk -F':' '{print $2}' | awk '{ \
+       a = $1;b = $2} END{print "phyrate_in_mbps=\""a"\"; \
+       phyrate_unit=\""b"\""}')
+
+    # If the phyrate is in Gbps, then convert it to Mbps
+    if [ $phyrate_unit = "Gb/s" ]; then
+       phyrate_in_mbps=$(echo $phyrate_in_mbps${padding:${#phyrate_in_mbps}} | sed 's/\.//g' | cut -c1-4)
+    else
+       phyrate_in_mbps=$(echo "$phyrate_in_mbps" | sed 's/\.//g' | cut -c1-3)
+    fi
+
+    eval "$2=$phyrate_in_mbps"
+}
+
+
+# Set rate measurement interface on which rate measurement
+# is to be done.
+# input: $1 - '5g' or '24g'
+__repacd_wifimon_set_rate_measurement_iface() {
+    local measurement_sta_iface_rate
+
+    if [ "$1" = '5g' ]; then
+        measurement_sta_iface=$sta_iface_5g
+        measurement_sta_iface_config_name=$sta_iface_5g_config_name
+    elif [ "$1" = '24g' ]; then
+        measurement_sta_iface=$sta_iface_24g
+        measurement_sta_iface_config_name=$sta_iface_24g_config_name
+    fi
+
+    # Not associated, we will not get valid rate, return
+    if [ "$force_down_5g" -gt 0 ] \
+        || ! __repacd_wifimon_is_assoc $sta_iface_5g; then
+        return
+    fi
+
+    # Get the phyrate of the measurement sta interface.
+    __repacd_wifimon_get_current_phyrate_in_mbps $measurement_sta_iface measurement_sta_iface_rate
+    __repacd_wifimon_debug "Current maxrate is $measurement_sta_iface_rate"
+
+    # Update the state variables depending upon the phyrate
+    # of the associated sta interface. (Currently 5G)
+    rate_min=$(($percent_rate_min5G*${measurement_sta_iface_rate}/100))
+    rate_max=$(($percent_rate_max5G*${measurement_sta_iface_rate}/100))
+    rate_pref2G=$(($percent_rate_pref2G*${measurement_sta_iface_rate}/100))
+
+    MoveFromCAP_snr_threshold=$(($CAP_snr_threshold-$MoveFromCAP_snr_hysteresis))
+
+    __repacd_wifimon_debug "Rate thresholds Min=$rate_min Max=$rate_max Pref2G=$rate_pref2G"
+    __repacd_wifimon_debug "SNR thresholds CAP attach=$CAP_snr_threshold db CAP detach=$MoveFromCAP_snr_threshold db"
+}
+
+# Check for configured BSSID in wireless file and update if required.
+# Driver will arrive at the best AP based on rate and return the BSSID,
+# the BSSID is written to the wireless config file using UCI.
+# input: $1 - sta_iface: sta interface to configure
+# input: $2 - sta_iface_config_name: config name of the sta interface
+# input: $3 - new_bssid: BSSID value to configure
+# output: $4 - restart wifi required or not
+# output: $5 - Configuration changed
+__repacd_wifimon_check_and_config_bssid() {
+    local sta_iface=$1
+    local sta_iface_config_name=$2
+    local new_bssid=$3
+    local current_bssid peer_bssid
+
+    eval "$4=0"
+    eval "$5=0"
+
+    # If BSSID is empty, return
+    if [ -z "$new_bssid" ]; then
+        return
+    fi
+
+    current_bssid=`iwconfig $sta_iface | grep "Access Point" | awk -F" " '{print $6}'`
+
+    config_load wireless
+    # If supplied BSSID and configured BSSID are same, simply return.
+    if __repacd_wifimon_is_peer_bssid_set $sta_iface_config_name; then
+        if [ "$new_bssid" = "$peer_bssid" ]; then
+            __repacd_wifimon_debug "$sta_iface: BSSID up to date"
+            return
+        fi
+    elif [ "$new_bssid" = "$current_bssid" ]; then
+        # Associated BSSID and supplied BSSID are same, just update
+        # the config file, no restart required.
+        uci_set wireless $sta_iface_config_name bssid $new_bssid
+        uci_commit wireless
+        __repacd_wifimon_debug "$sta_iface: BSSID updated, NO RESTART required"
+        eval "$5=1"
+        return
+    fi
+
+    # Write the new BSSID to wireless config file
+    uci_set wireless $sta_iface_config_name bssid $new_bssid
+    uci_commit wireless
+    eval "$5=1"
+    eval "$4=1"
+    __repacd_wifimon_debug "$sta_iface: BSSID updated, RESTART required"
+}
+
+# Configure BSSID via wpa_cli interface of given sta interface
+# and restart interface if requested.
+# input: $1 - sta_iface: sta interface to configure
+# input: $2 - new_bssid: BSSID value to configure
+# output: $3 - restart wifi required or not
+__repacd_wifimon_wpa_config_bssid() {
+    local sta_iface=$1
+    local new_bssid=$2
+    local restart=$3
+
+    if [ -n "$sta_iface" ]; then
+        if [ "$restart" -gt 0 ]; then
+            # Restart the network with configured BSSID
+            wpa_cli -p /var/run/wpa_supplicant-$sta_iface disable_network 0
+            wpa_cli -p /var/run/wpa_supplicant-$sta_iface set_network 0 bssid $new_bssid
+            wpa_cli -p /var/run/wpa_supplicant-$sta_iface enable_network 0
+        else
+            # Just configure the BSSID
+            wpa_cli -p /var/run/wpa_supplicant-$sta_iface set_network 0 bssid $new_bssid
+        fi
+    fi
+}
+
+# Get current best AP based on Rate estimate.
+# Driver will arrive at the best AP based on rate and return the BSSIDs.
+# Best AP is determined on provided STA interface which will
+# also return otherband BSSID of the same device (i.e. Best uplink node).
+# input:  $1 - sta_iface - STA interface to get best uplink BSSID
+# output: $2 - bestap BSSID
+# output: $3 - bestap otherband BSSID
+__repacd_wifimon_get_current_best_ap() {
+    local sta_iface=$1
+    local best_bssid best_otherband_bssid
+
+    # Driver returns BSSID without separator(:), add the separator before writting
+    # to config file.
+    # Send ioctl request to send bcast probe req with configured ssid to discover
+    # neighbor backhaul APs with hidden ssids. The initial reading may not contain
+    # the updated bssid list as newly discovered bssid(s) may not be a part of scan
+    # result. Subsequent reading should get updated scan list as reading is done
+    # every 2secs.
+    if [ -z $REPACD_CFG80211 ]; then
+        iwpriv $sta_iface sendprobereq 1
+        best_bssid=`iwpriv $sta_iface get_whc_bssid | awk -F":" '{print $2}' | \
+            sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+        best_otherband_bssid=`iwpriv $sta_iface g_best_ob_bssid | awk -F":" '{print $2}' | \
+            sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+    else
+        cfg80211tool $sta_iface sendprobereq 1
+        best_bssid=`cfg80211tool $sta_iface get_whc_bssid | awk -F":" '{print $2}' | \
+            sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+        best_otherband_bssid=`cfg80211tool $sta_iface g_best_ob_bssid | awk -F":" '{print $2}' | \
+            sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+    fi
+
+    eval "$2=$best_bssid"
+    eval "$3=$best_otherband_bssid"
+}
+
+# Configure Best AP based on Rate for given sta interface
+# Driver will arrive at the best AP based on rate and return the BSSID,
+# the BSSID is written to the wireless config file using UCI.
+# input: $1 - sta_iface - station interface to configure best BSSID
+# input: $2 - sta_iface_config_name - station interface config name
+# output: $3 - VAP restart done or not
+# output: $4 - BSSID configuration status 1 - success & 0 - failed
+__repacd_wifimon_config_best_ap() {
+    local sta_iface=$1
+    local sta_iface_config_name=$2
+    local otherband_sta_iface otherband_sta_iface_config_name
+    local selected_bssid peer_bssid
+    local sta1_config_changed=0 sta2_config_changed=0
+    local config_status=0 sta1_restart=0 sta2_restart=0
+
+    eval "$3=0"
+
+    if [ -n "$sta_iface" ]; then
+       __repacd_wifimon_debug "$sta_iface: Configure Best AP"
+
+       if [ "$sta_iface" = "$sta_iface_5g" ]; then
+           otherband_sta_iface=$sta_iface_24g
+           otherband_sta_iface_config_name=$sta_iface_24g_config_name
+       else
+           otherband_sta_iface=$sta_iface_5g
+           otherband_sta_iface_config_name=$sta_iface_5g_config_name
+       fi
+       if [ -n "$new_bestap" -a "$new_bestap" != "00:00:00:00:00:00" ]; then
+           if [ -n "$otherband_sta_iface" -a -n "$new_bestap_otherband" \
+               -a "$new_bestap_otherband" != "00:00:00:00:00:00" ] \
+               || [ -z "$otherband_sta_iface" ]; then
+               __repacd_wifimon_debug "Best AP = $new_bestap"
+               __repacd_wifimon_check_and_config_bssid $sta_iface \
+                   $sta_iface_config_name $new_bestap sta1_restart sta1_config_changed
+               if [ "$sta1_restart" -gt 0 ]; then
+                   wpa_cli -p /var/run/wpa_supplicant-$sta_iface disable_network 0
+               fi
+
+               # Configure the otherband BSSID also.
+               if [ -n "$otherband_sta_iface" ]; then
+                   __repacd_wifimon_debug "Best AP otherband = $new_bestap_otherband"
+                   __repacd_wifimon_check_and_config_bssid $otherband_sta_iface \
+                       $otherband_sta_iface_config_name $new_bestap_otherband sta2_restart sta2_config_changed
+                   if [ "$sta2_restart" -gt 0 ]; then
+                       wpa_cli -p /var/run/wpa_supplicant-$otherband_sta_iface disable_network 0
+                   fi
+               fi
+
+               # Enable disabled VAPs now, so that both bands connect to the same node.
+               if [ "$sta1_config_changed" -gt 0 ]; then
+                   __repacd_wifimon_wpa_config_bssid $sta_iface $new_bestap 0
+                   if [ "$sta1_restart" -gt 0 ]; then
+                       wpa_cli -p /var/run/wpa_supplicant-$sta_iface enable_network 0
+                   fi
+               fi
+               if [ "$sta2_config_changed" -gt 0 ]; then
+                   __repacd_wifimon_wpa_config_bssid $otherband_sta_iface $new_bestap_otherband 0
+                   if [ "$sta2_restart" -gt 0 ]; then
+                       wpa_cli -p /var/run/wpa_supplicant-$otherband_sta_iface enable_network 0
+                   fi
+               fi
+
+               eval "$3=$((sta1_restart + sta2_restart))"
+               config_status=1
+           fi
+       else
+           config_status=0
+           __repacd_wifimon_debug "No valid Best AP found"
+       fi
+    fi
+
+    eval "$4=$config_status"
+}
+
+# Configure BSSID of Current association to the provided sta interface.
+# The BSSID is arrived from iwconfig command.
+# The BSSID is written to the wireless config file using UCI.
+# input: $1 - sta_iface: station interface to configure current BSSID
+# input: $2 - sta_iface_config_name: station interface config name
+__repacd_wifimon_config_current_bssid() {
+    local sta_iface=$1
+    local sta_iface_config_name=$2
+    local selected_bssid restart=0 config_changed=0
+
+    if [ -n "$sta_iface" ]; then
+        # Get the currently associated BSSID from iwconfig.
+        selected_bssid=`iwconfig $sta_iface | grep "Access Point" | awk -F" " '{print $6}'`
+        __repacd_wifimon_debug "$sta_iface: BSSID = $selected_bssid"
+
+        if [ "$selected_bssid" != "00:00:00:00:00:00" ]; then
+            __repacd_wifimon_check_and_config_bssid $sta_iface \
+                $sta_iface_config_name $selected_bssid restart config_changed
+        fi
+        # Restart the network with configured BSSID, if required.
+        if [ "$config_changed" -gt 0 ]; then
+            __repacd_wifimon_wpa_config_bssid $sta_iface $selected_bssid $restart
+        fi
+    fi
+}
+
+# Configure 2.4G BSSID of CAP for the provided sta interface.
+# Driver will arrive at the CAP 2.4G BSSID,
+# the BSSID is written to the wireless config file using UCI.
+# input: None
+__repacd_wifimon_config_cap_24g_bssid() {
+    local selected_bssid restart=0 config_changed=0
+
+    if [ -n "$sta_iface_24g" ]; then
+        # Driver returns BSSID without separator(:), add the separator before writting
+        # to config file.
+        if [ -z $REPACD_CFG80211 ]; then
+            selected_bssid=`iwpriv $sta_iface_24g g_whc_cap_bssid | awk -F":" '{print $2}' | \
+            sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+        else
+            selected_bssid=`cfg80211tool $sta_iface_24g g_whc_cap_bssid | awk -F":" '{print $2}' | \
+            sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+        fi
+        __repacd_wifimon_debug "$sta_iface_24g: CAP BSSID = $selected_bssid"
+
+        if [ "$selected_bssid" != "00:00:00:00:00:00" ]; then
+            __repacd_wifimon_check_and_config_bssid $sta_iface_24g \
+                $sta_iface_24g_config_name $selected_bssid restart config_changed
+        fi
+        if [ "$restart" -gt 0 ]; then
+            # Restart the network with configured BSSID
+            __repacd_wifimon_wpa_config_bssid $sta_iface_24g $selected_bssid $restart
+        elif [ "$config_changed" -gt 0 ]; then
+            __repacd_wifimon_wpa_config_bssid $sta_iface_24g $selected_bssid $restart
+        fi
+    fi
+}
+
+# Configure BSSID for the disabled sta interface.
+# Driver will arrive at the otherband BSSIDs from provided STA interface,
+# the BSSID is written to the wireless config file using UCI and update the network.
+# input: $1 - sta_iface: station interface on which otherband BSSIDs to be found
+__repacd_wifimon_find_and_config_otherband_bssid() {
+    local selected_bssid restart=0 config_changed=0
+    local otherband_sta_iface otherband_sta_iface_config_name
+    local sta_iface=$1
+
+    if [ -n "$sta_iface" ]; then
+        if [ "$sta_iface" = "$sta_iface_5g" ]; then
+            otherband_sta_iface=$sta_iface_24g
+            otherband_sta_iface_config_name=$sta_iface_24g_config_name
+        else
+            otherband_sta_iface=$sta_iface_5g
+            otherband_sta_iface_config_name=$sta_iface_5g_config_name
+        fi
+        if [ -n "$otherband_sta_iface" -a -n "$otherband_sta_iface_config_name" ]; then
+            # Driver returns BSSID without separator(:), add the separator before writting
+            # to config file.
+            if [ -z $REPACD_CFG80211 ]; then
+                selected_bssid=`iwpriv $sta_iface g_whc_ob_bssid | awk -F":" '{print $2}' | \
+                sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+            else
+                selected_bssid=`cfg80211tool $sta_iface g_whc_ob_bssid | awk -F":" '{print $2}' | \
+                sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1:\2:\3:\4:\5:\6/"`
+            fi
+            __repacd_wifimon_debug "OtherBand BSSID = $selected_bssid"
+
+            if [ "$selected_bssid" != "00:00:00:00:00:00" ]; then
+                __repacd_wifimon_check_and_config_bssid $otherband_sta_iface \
+                    $otherband_sta_iface_config_name $selected_bssid restart config_changed
+            fi
+            # Restart the network with configured BSSID, if required.
+            if [ "$config_changed" -gt 0 ]; then
+                __repacd_wifimon_wpa_config_bssid $otherband_sta_iface $selected_bssid $restart
+            fi
+        fi
+    fi
+}
+
+# Initialize the Wi-Fi monitoring logic with the name of the network being
+# monitored.
+# input: $1 - network: the name of the network being managed
+# input: $2 - cur_re_mode: the current operating range extender mode
+# input: $3 - cur_re_submode: the current operating range extender submode
+# input: $4 - autoconfig: whether it was an auto-config restart
+# output: $5 - state: the name of the initial state
+# output: $6 - new_re_mode: the resolved range extender mode
+# output: $7 - new_re_submode: the resolved range extender submode
+repacd_wifimon_init() {
+    # Resolve the STA interfaces.
+    # Here we assume that if we have the 5 GHz interface, that is sufficient,
+    # as not all modes will have a 2.4 GHz interface.
+    __repacd_wifimon_get_sta_iface $1
+    if [ -n "$sta_iface_5g" -o -n "$sta_iface_24g" ]; then
+        local re_mode=$2
+        local re_submode=$3
+
+        if [ -n "$sta_iface_24g" ]; then
+            __repacd_wifimon_debug "Resolved 2.4 GHz STA interface to $sta_iface_24g"
+            __repacd_wifimon_debug "2.4 GHz STA interface section $sta_iface_24g_config_name"
+        fi
+
+        if [ -n "$sta_iface_5g" ]; then
+            __repacd_wifimon_debug "Resolved 5 GHz STA interface to $sta_iface_5g"
+            __repacd_wifimon_debug "5 GHz STA interface section $sta_iface_5g_config_name"
+        fi
+        # First resolve the config parameters.
+        config_load repacd
+        config_get device_type 'repacd' 'DeviceType' 'RE'
+        config_get config_re_mode 'repacd' 'ConfigREMode' 'auto'
+        config_get default_re_mode 'repacd' 'DefaultREMode' 'qwrap'
+        config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+        config_get traffic_separation_active repacd TrafficSeparationActive '0'
+        config_get guest_backhaul repacd NetworkGuestBackhaulInterface 'both'
+        config_get network_guest repacd NetworkGuest 'guest'
+
+        config_get min_auto_mode_assoc 'WiFiLink' 'MinAssocCheckAutoMode' '5'
+        config_get min_wps_assoc 'WiFiLink' 'MinAssocCheckPostWPS' '5'
+        config_get min_bssid_assoc 'WiFiLink' 'MinAssocCheckPostBSSIDConfig' '5'
+        config_get wps_timeout 'WiFiLink' 'WPSTimeout' '120'
+        config_get assoc_timeout 'WiFiLink' 'AssociationTimeout' '300'
+        config_get rssi_samples 'WiFiLink' 'RSSINumMeasurements' '5'
+        config_get rssi_far 'WiFiLink' 'RSSIThresholdFar' '-75'
+        config_get rssi_near 'WiFiLink' 'RSSIThresholdNear' '-60'
+        config_get rssi_min 'WiFiLink' 'RSSIThresholdMin' '-75'
+        config_get rssi_pref2G 'WiFiLink' 'RSSIThresholdPrefer2GBackhaul' '-100'
+        config_get config_downtime2G 'WiFiLink' '2GBackhaulSwitchDownTime' '10'
+        config_get measuring_attempts 'WiFiLink' 'MaxMeasuringStateAttempts' '3'
+        config_get daisy_chain 'WiFiLink' 'DaisyChain' '0'
+        config_get rate_samples 'WiFiLink' 'RateNumMeasurements' '5'
+        config_get percent_rate_min5G 'WiFiLink' 'RateThresholdMin5GInPercent' '40'
+        config_get percent_rate_max5G 'WiFiLink' 'RateThresholdMax5GInPercent' '70'
+        config_get percent_rate_pref2G 'WiFiLink' 'RateThresholdPrefer2GBackhaulInPercent' '5'
+        config_get bssid_assoc_timeout 'WiFiLink' 'BSSIDAssociationTimeout' '90'
+        config_get badlink_timeout5G 'WiFiLink' '5GBackhaulBadlinkTimeout' '60'
+        config_get config_short_eval_time5g 'WiFiLink' '5GBackhaulEvalTimeShort' '1800'
+        config_get config_long_eval_time5g  'WiFiLink' '5GBackhaulEvalTimeLong' '7200'
+        config_get config_eval_time24g 'WiFiLink' '2GBackhaulEvalTime' '1800'
+        config_get is_independent_channel_selection_enable 'WiFiLink' '2GIndependentChannelSelectionEnable' '0'
+        config_get quality_5g_rssi_level 'WiFiLink' '2GIndependentChannelSelectionRssiLevel' '-70'
+        config_get rssi_check_total_counter 'WiFiLink' '2GIndependentChannelSelectionTotalRssiCounter' '10'
+        config_get rssi_idle_time 'WiFiLink' '2GIndependentChannelSelectionStartRssiCheckTime' '60'
+        config_get CAP_snr_threshold 'WiFiLink' 'PreferCAPSNRThreshold5G' '0'
+        config_get MoveFromCAP_snr_hysteresis 'WiFiLink' 'MoveFromCAPSNRHysteresis5G' '3'
+
+        # Find the 2.4G wifi interface and set independent_channel_set to defalut value zero to avoid
+        # if device re-power on without unknow reason to keep it as 1.
+        uci show wireless | grep 11ng | sed 's/.hwmode.*//g' | sed 's/wireless.//g' > /tmp/wifi_2G_interface.txt
+        exec < '/tmp/wifi_2G_interface.txt'
+        while read line
+        do
+            __repacd_wifimon_debug $line
+            wifi_2G_interface_name=$line
+            uci_set wireless $wifi_2G_interface_name independent_channel_set '0'
+            uci_commit wireless
+        done
+        rm -rf /tmp/wifi_2G_interface.txt
+
+        # Create ourselves a named pipe so we can be informed of WPS push
+        # button events.
+        if [ -e $WIFIMON_PIPE_NAME ]; then
+            rm -f $WIFIMON_PIPE_NAME
+        fi
+
+        mkfifo $WIFIMON_PIPE_NAME
+
+        # If already associated, go to the InProgress state.
+        __repacd_wifimon_check_associated $1 $2 $3 $4 $5 $6 $7
+    fi
+    # Otherwise, must be operating in CAP mode.
+}
+
+# Check the status of the Wi-Fi link (WPS, association, and RSSI).
+# input: $1 - network: the name of the network being managed
+# input: $2 - cur_re_mode: the currently configured range extender mode
+# input: $3 - cur_re_submode: the currently configured range extender sub-mode
+# output: $4 - state: the name of the new state (only set upon a change)
+# output: $5 - re_mode: the desired range extender mode (updated only once
+#                       the link to the AP is considered stable)
+# output: $6 - re_submode: the desired range extender submode (updated only once
+#                       the link to the AP is considered stable)
+repacd_wifimon_check() {
+    if [ -n "$sta_iface_5g" ]; then
+        local new_root_distance
+
+        # Make sure all the AP interfaces are broadcasting right hop count.
+        # If required, inherit the root distance from active station interface.
+        __repacd_get_min_root_ap_dist new_root_distance
+
+        if [ "$new_root_distance" != "$curr_root_distance" ]; then
+            __repacd_wifimon_debug "Root AP distance: $new_root_distance"
+
+            config_load wireless
+            config_foreach __repacd_wifimon_set_root_distance wifi-iface $new_root_distance
+            curr_root_distance=$new_root_distance
+
+            if [ "$new_root_distance" -eq $RE_ROOT_AP_DISTANCE_INVALID ]; then
+                __repacd_wifimon_set_uplink_rate $sta_iface_5g 0
+                __repacd_wifimon_set_uplink_rate $sta_iface_24g 0
+            fi
+        fi
+
+        # We depend on 5G interface for measuring rate, if forced down,
+        # copy the rate from 2.4G interface.
+        if [ "$force_down_5g" -gt 0 ]; then
+            __repacd_wifimon_copy_uplink_rate $sta_iface_24g $sta_iface_5g
+        fi
+
+        if __repacd_wifimon_check_associated $1 $2 $3 0 $4 $5 $6; then
+            assoc_timeout_logged=0
+            wps_timeout_logged=0
+        else  # not associated
+            # Check if the WPS button was pressed.
+            local wps_pbc
+            read -t 1 wps_pbc <>$WIFIMON_PIPE_NAME
+            if [ $? -eq 0 ]; then
+                eval "$4=$WIFIMON_STATE_AUTOCONFIG_IN_PROGRESS"
+                wps_in_progress=1
+                __repacd_wifimon_get_timestamp wps_start_time
+
+                # Forcefully delete the BSSID from the STA interface in case
+                # the new AP does not support IEEE1905.1+QCA extensions deep
+                # cloning.
+                __repacd_wifimon_debug "Delete BSSID for $sta_iface_5g"
+                uci delete wireless.${sta_iface_5g_config_name}.bssid
+
+                if [ -n "$sta_iface_24g" ]; then
+                    __repacd_wifimon_debug "Delete BSSID for $sta_iface_24g"
+                    uci delete wireless.${sta_iface_24g_config_name}.bssid
+                fi
+
+                uci commit wireless
+
+                # Do not check the association timeout below.
+                return 0
+            fi
+
+            if [ "$wps_in_progress" -gt 0 ]; then
+                if __repacd_wifimon_is_timeout $wps_start_time $wps_timeout; then
+                    if [ "$wps_timeout_logged" -eq 0 ]; then
+                        __repacd_wifimon_debug "WPS timeout"
+                        wps_timeout_logged=1
+                    fi
+
+                    eval "$4=$WIFIMON_STATE_WPS_TIMEOUT"
+                fi
+            else
+                # if 2.4G inteface is down by independent channel selection
+                # and 5G itnerface is gone, wake up the 2.4G interface
+                if [ "$is_independent_channel_selection_enable" -gt 0 ]; then
+                    if [ "$is_24G_down_by_independent_channel" -gt 0 ]; then
+                        if __repacd_wifimon_is_assoc $sta_iface_5g; then
+                           __repacd_wifimon_info "5G still alive"
+                        else
+                            __repacd_wifimon_bring_iface_up $sta_iface_24g
+                            return 0
+                        fi
+                    fi
+                fi
+                if [ "$daisy_chain" -gt 0 ]; then
+                    if __repacd_wifimon_is_timeout $assoc_start_time $bssid_assoc_timeout; then
+                        local reset_bssid=0
+                        local restarted=0 config_success=0
+
+                        config_load wireless
+                        # If one backhaul link is associated and other one is not associated,
+                        # bring down non associated backhaul and proceed to link measurement.
+                        if [ -n "$sta_iface_24g" ] && [ -n "$sta_iface_5g" ]; then
+                            if [ "$force_down_24g" -eq 0 -a "$force_down_5g" -eq 0 ]; then
+                                if __repacd_wifimon_is_assoc $sta_iface_5g; then
+                                    # Ignore 2.4G backhaul association check,
+                                    # we are not associated for long time.
+                                    # 5G backhaul is ready to take over.
+                                    __repacd_wifimon_debug "BSSID Assoc timeout: Ignoring 2.4G Association check"
+                                    __repacd_wifimon_get_timestamp assoc_start_time
+                                    ignore_24g_assoc=1
+                                elif __repacd_wifimon_is_assoc $sta_iface_24g; then
+                                    # Before bringing down 5G backhaul try finding best AP,
+                                    # still if no best AP found bringdown 5G backhaul.
+                                    if __repacd_wifimon_is_peer_bssid_set $sta_iface_5g_config_name; then
+                                        __repacd_wifimon_debug "BSSID Assoc timeout: 5G not associated"
+                                        __repacd_wifimon_get_current_best_ap $sta_iface_5g new_bestap new_bestap_otherband
+                                        __repacd_wifimon_config_best_ap $sta_iface_5g $sta_iface_5g_config_name restarted config_success
+                                        if [ "$config_success" -gt 0 ]; then
+                                            __repacd_wifimon_get_timestamp assoc_start_time
+                                            eval "$4=$WIFIMON_STATE_BSSID_ASSOC_TIMEOUT"
+                                            return
+                                        fi
+                                    fi
+                                    # Bring down 5G backhaul, we are not associated for long time.
+                                    # 2.4G backhaul is ready to take over.
+                                    __repacd_wifimon_debug "BSSID Assoc timeout: bringing down 5G"
+                                    __repacd_wifimon_bring_iface_down $sta_iface_5g
+                                    __repacd_wifimon_get_timestamp assoc_start_time
+                                else
+                                    # Both the backhaul links are not associated, try resetting BSSID.
+                                    __repacd_wifimon_debug "BSSID Assoc timeout: both 5G and 2.4G not associated"
+                                    reset_bssid=1
+                                fi
+                            else
+                                # We are already operating in single link,
+                                # try resetting BSSID.
+                                __repacd_wifimon_debug "BSSID Assoc timeout: already in single link, not associated"
+                                reset_bssid=1
+                            fi
+                        else
+                            __repacd_wifimon_debug "BSSID Assoc timeout: try clearing BSSID, if any"
+                            reset_bssid=1
+                        fi
+
+                        if [ "$reset_bssid" -gt 0 ]; then
+                            # Configured BSSID association timed out,
+                            # the desired BSSID might have powered down or not reachable.
+                            # Try running Best AP selection to find an AP.
+                            if [ -n "$sta_iface_5g" ]; then
+                                if [ "$force_down_5g" -gt 0 ]; then
+                                    __repacd_wifimon_bring_iface_up $sta_iface_5g
+                                fi
+                                __repacd_wifimon_get_current_best_ap $sta_iface_5g new_bestap new_bestap_otherband
+                                __repacd_wifimon_config_best_ap $sta_iface_5g $sta_iface_5g_config_name restarted config_success
+                                if [ "$config_success" -gt 0 ]; then
+                                    __repacd_wifimon_get_timestamp assoc_start_time
+                                fi
+                            fi
+                            eval "$4=$WIFIMON_STATE_BSSID_ASSOC_TIMEOUT"
+                        fi
+                    fi
+                fi
+
+                if __repacd_wifimon_is_timeout $assoc_start_time $assoc_timeout; then
+                    # If we have two STA interfaces and only 5 GHz is
+                    # associated, see if mode switching is necessary for it
+                    # alone. Note that here we are temporarily resetting the
+                    # other interface name to ensure mode switching only
+                    # considers the one that is associated.
+                    #
+                    # If we eventually start supporting multiple STA interfaces
+                    # even in the fallback modes, we may need to make this
+                    # smarter and consider both possible STA interfaces that
+                    # may be associated.
+                    if [ "$daisy_chain" -gt 0 ]; then
+                        if [ "$nolink_detected_5g" -eq 0 ]; then
+                            if [ -n "$sta_iface_24g" ]; then
+                                # Even after resetting BSSIDs 5G is not associated,
+                                # Now time to check on 2.4G link.
+                                nolink_detected_5g=1
+                                # We are left with no option, link stays disconnected
+                                # till something found on 2.4G link.
+                                __repacd_wifimon_debug "Waiting for association in 2.4G"
+                            fi
+                        else
+                            local restarted config_success
+                            __repacd_wifimon_get_current_best_ap $sta_iface_24g new_bestap new_bestap_otherband
+                            __repacd_wifimon_config_best_ap $sta_iface_24g $sta_iface_24g_config_name restarted config_success
+                            if [ "$config_success" -gt 0 ]; then
+                                __repacd_wifimon_get_timestamp assoc_start_time
+                            fi
+                        fi
+                    elif [ -n "$sta_iface_24g" -a -n "$sta_iface_5g" ]; then
+                        if [ "$force_down_5g" -eq 0 ] \
+                            && __repacd_wifimon_is_assoc $sta_iface_5g; then
+                            local tmp_sta_iface_24g=$sta_iface_24g
+                            sta_iface_24g=
+                            if ! __repacd_wifimon_resolve_mode $2 $3 $5 $6; then
+                                # Not currently in the right mode. Restore the
+                                # interface name and return to allow for a restart.
+                                sta_iface_24g=$tmp_sta_iface_24g
+                                return
+                            fi
+                        fi
+                    fi
+
+                    if [ "$assoc_timeout_logged" -eq 0 ]; then
+                        __repacd_wifimon_debug "Association timeout"
+                        assoc_timeout_logged=1
+                    fi
+
+                    eval "$4=$WIFIMON_STATE_ASSOC_TIMEOUT"
+                fi
+            fi
+        fi
+        __repacd_wifimon_evaluate_backhaul_link $2 $3
+
+        if [ "$traffic_separation_enabled" -gt 0 ] &&
+               [ "$traffic_separation_active" -gt 0 ]; then
+            if ! __repacd_wifimon_is_assoc $sta_iface_5g || \
+               ! __repacd_wifimon_is_assoc $sta_iface_24g || [ "$guest_link_override" -gt 0 ] || \
+               [ "$force_down_5g" -gt 0 ] || [ "$force_down_24g" -gt 0 ]; then
+                if [ -n "$sta_iface_24g" ] && [ -n "$sta_iface_5g" ]; then
+                    if [ "$guest_backhaul" = '5G' ]; then
+                        __repacd_wifimon_override_guest_backhaul $sta_iface_5g $sta_iface_24g
+                    elif [ "$guest_backhaul" = '2.4G' ]; then
+                        __repacd_wifimon_override_guest_backhaul $sta_iface_24g $sta_iface_5g
+                    fi
+                fi
+            fi
+        fi
+
+    fi
+}
+# determin does it need to down the 2.4G backhaul or wake up 2.4G backhaul
+repacd_wifimon_independent_channel_check() {
+    local inteface_24g
+    local i=0
+    local macaddress
+    local channel
+
+    if [ -n "$sta_iface_24g" ]; then
+        if [ "$is_independent_channel_selection_enable" -gt 0 ]; then
+            __repacd_wifimon_debug "rssi_counter=$rssi_counter rssi_check_total_counter=$rssi_check_total_counter
+            force_down_24g=$force_down_24g force_down_5g=$force_down_5g sta_iface_24g=$sta_iface_24g"
+
+            if [ "$rssi_counter" -ge "$rssi_check_total_counter" ]; then
+                    if [ "$is_24G_down_by_independent_channel" -eq 0 ]; then
+                        #__repacd_wifimon_debug "need to down 2.4G"
+
+                        __repacd_wifimon_debug "5G backhaul Signal is good, down the 2.4G backhaul interface and 2.4G AP VAP to do the ACS"
+
+                        is_24G_down_by_independent_channel=1
+
+                        uci_set wireless $wifi_2G_interface_name independent_channel_set '1'
+                        uci_commit wireless
+
+                        ((echo td s; sleep 1) | hyt | awk -F " " '/WLAN2G/ && $4 < 255 {printf "%s \n %s \n",$3,$4}' \
+	                    | sed 's/[[:space:]]//g') > /tmp/innetworkresult.txt
+
+                        # find the AP VAP for 2.4G to down the interface first
+                        # then set the channel to 0
+                        # then wake up all interface
+                        # in multiple VAP setting ACS will re-run when All VAPs channel is 0
+                        (iwconfig | grep 'Mode:Master  Frequency:2' -B1 | sed '/wireless/d' |\
+                        sed 's/IEEE.* //g' | sed 's/Mode.* //g' | sed 's/--//g' | sed 's/[[:space:]]//g' \
+                        | sed '/^$/d') > /tmp/all_interface
+
+                        exec < '/tmp/all_interface'
+                        while read line
+                        do
+                           __repacd_wifimon_debug $line
+                           inteface_24g=$line
+                        done
+                        # clear the in network information
+                        wifitool $inteface_24g set_innetwork_2g 00:00:00:00:00:00 0
+                        exec < '/tmp/innetworkresult.txt'
+
+                        while read line
+                        do
+                            __repacd_wifimon_debug $line
+                            if [ "$i" -eq 0 ]; then
+                                macaddress=$line
+                                i=$((i + 1))
+                            else
+                                channel=$line
+                                /usr/sbin/wifitool $inteface_24g set_innetwork_2g $macaddress $channel
+                                i=0
+                            fi
+                        done
+
+                        wpa_cli -p /var/run/wpa_supplicant-$sta_iface_24g disable_network 0
+
+                        exec < '/tmp/all_interface'
+                        while read line
+                        do
+                           __repacd_wifimon_debug $line
+                           ifconfig $line down
+                           iwconfig $line channel 0
+                        done
+                        exec < '/tmp/all_interface'
+                        while read line
+                        do
+                           ifconfig $line up
+                        done
+                        rm -rf /tmp/all_interface
+                        rm -rf /tmp/innetworkresult.txt
+                    else
+                        if [ "$force_down_24g" -eq 0 ]; then
+                            __repacd_wifimon_debug "5G backhaul signal is bad, up the 2.4G backhaul"
+                            is_24G_down_by_independent_channel=0
+                            uci_set wireless $wifi_2G_interface_name independent_channel_set '0'
+                            uci_commit wireless
+                            wpa_cli -p /var/run/wpa_supplicant-$sta_iface_24g enable_network 0
+                        else
+                            __repacd_wifimon_debug "2.4G backhaul interface is down by anohter process don't wake up it"
+                       fi
+                   fi
+                    rssi_counter=0
+            fi
+        fi
+    else
+        __repacd_wifimon_debug "sta_iface_24g=$sta_iface_24g is null, cannot do anything"
+    fi
+}
+# Terminate the Wi-Fi link monitoring, cleaning up any state in preparation
+# for shutdown.
+repacd_wifimon_fini() {
+
+    __repacd_wifimon_debug "sta_iface_24g=$sta_iface_24g is_24G_down_by_independent_channel=$is_24G_down_by_independent_channel force_down_24g=$force_down_24g"
+
+    if [ -n "$sta_iface_24g" ]; then
+        if [ "$is_24G_down_by_independent_channel" -gt 0 ]; then
+            if [ "$force_down_24g" -eq 0 ]; then
+                uci_set wireless $wifi_2G_interface_name independent_channel_set '0'
+                uci_commit wireless
+                wpa_cli -p /var/run/wpa_supplicant-$sta_iface_24g enable_network 0
+            fi
+        fi
+    fi
+    __repacd_stop_ping
+}
diff --git a/lib/functions/service.sh b/lib/functions/service.sh
new file mode 100644
index 0000000..3d08e14
--- /dev/null
+++ b/lib/functions/service.sh
@@ -0,0 +1,103 @@
+#
+# service: simple wrapper around start-stop-daemon
+#
+# Usage: service ACTION EXEC ARGS...
+#
+# Action:
+#   -C	check if EXEC is alive
+#   -S	start EXEC, passing it ARGS as its arguments
+#   -K	kill EXEC, sending it a TERM signal if not specified otherwise
+#
+# Environment variables exposed:
+#   SERVICE_DAEMONIZE	run EXEC in background
+#   SERVICE_WRITE_PID	create a pid-file and use it for matching
+#   SERVICE_MATCH_EXEC	use EXEC command-line for matching (default)
+#   SERVICE_MATCH_NAME	use EXEC process name for matching
+#   SERVICE_USE_PID	assume EXEC create its own pid-file and use it for matching
+#   SERVICE_NAME	process name to use (default to EXEC file part)
+#   SERVICE_PID_FILE	pid file to use (default to /var/run/$SERVICE_NAME.pid)
+#   SERVICE_SIG		signal to send when using -K
+#   SERVICE_SIG_RELOAD	default signal used when reloading
+#   SERVICE_SIG_STOP	default signal used when stopping
+#   SERVICE_STOP_TIME	time to wait for a process to stop gracefully before killing it
+#   SERVICE_UID		user EXEC should be run as
+#   SERVICE_GID		group EXEC should be run as
+#
+#   SERVICE_DEBUG	don't do anything, but show what would be done
+#   SERVICE_QUIET	don't print anything
+#
+
+SERVICE_QUIET=1
+SERVICE_SIG_RELOAD="HUP"
+SERVICE_SIG_STOP="TERM"
+SERVICE_STOP_TIME=5
+SERVICE_MATCH_EXEC=1
+
+service() {
+	local ssd
+	local exec
+	local name
+	local start
+	ssd="${SERVICE_DEBUG:+echo }start-stop-daemon${SERVICE_QUIET:+ -q}"
+	case "$1" in
+	  -C)
+		ssd="$ssd -K -t"
+		;;
+	  -S)
+		ssd="$ssd -S${SERVICE_DAEMONIZE:+ -b}${SERVICE_WRITE_PID:+ -m}"
+		start=1
+		;;
+	  -K)
+		ssd="$ssd -K${SERVICE_SIG:+ -s $SERVICE_SIG}"
+		;;
+	  *)
+		echo "service: unknown ACTION '$1'" 1>&2
+		return 1
+	esac
+	shift
+	exec="$1"
+	[ -n "$exec" ] || {
+		echo "service: missing argument" 1>&2
+		return 1
+	}
+	[ -x "$exec" ] || {
+		echo "service: file '$exec' is not executable" 1>&2
+		return 1
+	}
+	name="${SERVICE_NAME:-${exec##*/}}"
+	[ -z "$SERVICE_USE_PID$SERVICE_WRITE_PID$SERVICE_PID_FILE" ] \
+		|| ssd="$ssd -p ${SERVICE_PID_FILE:-/var/run/$name.pid}"
+	[ -z "$SERVICE_MATCH_NAME" ] || ssd="$ssd -n $name"
+	ssd="$ssd${SERVICE_UID:+ -c $SERVICE_UID${SERVICE_GID:+:$SERVICE_GID}}"
+	[ -z "$SERVICE_MATCH_EXEC$start" ] || ssd="$ssd -x $exec"
+	shift
+	$ssd${1:+ -- "$@"}
+}
+
+service_check() {
+	service -C "$@"
+}
+
+service_signal() {
+	SERVICE_SIG="${SERVICE_SIG:-USR1}" service -K "$@"
+}
+
+service_start() {
+	service -S "$@"
+}
+
+service_stop() {
+	local try
+	SERVICE_SIG="${SERVICE_SIG:-$SERVICE_SIG_STOP}" service -K "$@" || return 1
+	while [ $((try++)) -lt $SERVICE_STOP_TIME ]; do
+		service -C "$@" || return 0
+		sleep 1
+	done
+	SERVICE_SIG="KILL" service -K "$@"
+	sleep 1
+	! service -C "$@"
+}
+
+service_reload() {
+	SERVICE_SIG="${SERVICE_SIG:-$SERVICE_SIG_RELOAD}" service -K "$@"
+}
diff --git a/lib/functions/system.sh b/lib/functions/system.sh
new file mode 100644
index 0000000..8d75a5a
--- /dev/null
+++ b/lib/functions/system.sh
@@ -0,0 +1,112 @@
+# Copyright (C) 2006-2013 OpenWrt.org
+
+find_mtd_chardev() {
+	local INDEX=$(find_mtd_index "$1")
+	local PREFIX=/dev/mtd
+
+	[ -d /dev/mtd ] && PREFIX=/dev/mtd/
+	echo "${INDEX:+$PREFIX$INDEX}"
+}
+
+mtd_get_mac_ascii()
+{
+	local mtdname="$1"
+	local key="$2"
+	local part
+	local mac_dirty
+
+	part=$(find_mtd_part "$mtdname")
+	if [ -z "$part" ]; then
+		echo "mtd_get_mac_ascii: partition $mtdname not found!" >&2
+		return
+	fi
+
+	mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p')
+
+	# "canonicalize" mac
+	[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty"
+}
+
+mtd_get_mac_binary() {
+	local mtdname="$1"
+	local offset="$2"
+	local part
+
+	part=$(find_mtd_part "$mtdname")
+	if [ -z "$part" ]; then
+		echo "mtd_get_mac_binary: partition $mtdname not found!" >&2
+		return
+	fi
+
+	dd bs=1 skip=$offset count=6 if=$part 2>/dev/null | hexdump -v -n 6 -e '5/1 "%02x:" 1/1 "%02x"'
+}
+
+mtd_get_part_size() {
+	local part_name=$1
+	local first dev size erasesize name
+	while read dev size erasesize name; do
+		name=${name#'"'}; name=${name%'"'}
+		if [ "$name" = "$part_name" ]; then
+			echo $((0x$size))
+			break
+		fi
+	done < /proc/mtd
+}
+
+macaddr_add() {
+	local mac=$1
+	local val=$2
+	local oui=${mac%:*:*:*}
+	local nic=${mac#*:*:*:}
+
+	nic=$(printf "%06x" $((0x${nic//:/} + $val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/')
+	echo $oui:$nic
+}
+
+macaddr_setbit_la()
+{
+	local mac=$1
+
+	printf "%02x:%s" $((0x${mac%%:*} | 0x02)) ${mac#*:}
+}
+
+macaddr_2bin()
+{
+	local mac=$1
+
+	echo -ne \\x${mac//:/\\x}
+}
+
+macaddr_canonicalize()
+{
+	local mac="$1"
+	local canon=""
+
+	mac=$(echo -n $mac | tr -d \")
+	[ ${#mac} -gt 17 ] && return
+	[ -n "${mac//[a-fA-F0-9\.: -]/}" ] && return
+
+	for octet in ${mac//[\.:-]/ }; do
+		case "${#octet}" in
+		1)
+			octet="0${octet}"
+			;;
+		2)
+			;;
+		4)
+			octet="${octet:0:2} ${octet:2:2}"
+			;;
+		12)
+			octet="${octet:0:2} ${octet:2:2} ${octet:4:2} ${octet:6:2} ${octet:8:2} ${octet:10:2}"
+			;;
+		*)
+			return
+			;;
+		esac
+		canon=${canon}${canon:+ }${octet}
+	done
+
+	[ ${#canon} -ne 17 ] && return
+
+	printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${canon// / 0x} 2>/dev/null
+}
diff --git a/lib/functions/timer.sh b/lib/functions/timer.sh
new file mode 100755
index 0000000..c5a1e16
--- /dev/null
+++ b/lib/functions/timer.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+# Copyright (C) 2018 devolo AG
+
+timer_prefix_foreach() {
+    local prefix="${1}"
+    local function="${2}"
+    local matched="$(ubus call timer list | jsonfilter -e "@.ids[@~\"^$prefix\"]")"
+    local timer_id
+
+    for timer_id in $matched; do
+        local name="${timer_id#$prefix}"
+        eval "$function \"$timer_id\" \"$name\""
+    done
+}
+
+timer_foreach() {
+    local function="${1}"
+
+    timer_prefix_foreach "" "$function"
+}
+
+timer_query() {
+    local id="${1}"
+    ubus call timer query "{\"id\":\"$id\"}"
+}
+
+timer_get_remaining() {
+    jsonfilter -s "$(timer_query "${1}")" -e '$.remaining'
+}
+
+timer_get_state() {
+    jsonfilter -s "$(timer_query "${1}")" -e '$.state'
+}
+
+timer_get_initial_timeout() {
+    jsonfilter -s "$(timer_query "${1}")" -e '$.timeout'
+}
diff --git a/lib/functions/uci-defaults-new.sh b/lib/functions/uci-defaults-new.sh
new file mode 100755
index 0000000..5b29a34
--- /dev/null
+++ b/lib/functions/uci-defaults-new.sh
@@ -0,0 +1,318 @@
+#!/bin/ash
+
+CFG=/etc/board.json
+
+. /usr/share/libubox/jshn.sh
+
+json_select_array() {
+	local _json_no_warning=1
+
+	json_select "$1"
+	[ $? = 0 ] && return
+
+	json_add_array $1
+	json_close_array
+
+	json_select "$1"
+}
+
+json_select_object() {
+	local _json_no_warning=1
+
+	json_select "$1"
+	[ $? = 0 ] && return
+
+	json_add_object $1
+	json_close_object
+
+	json_select "$1"
+}
+
+_ucidef_set_interface() {
+	local name=$1
+	local iface=$2
+
+	json_select_object $name
+	json_add_string ifname "${iface%%.*}"
+	[ "$iface" = "${iface%%.*}" ] || json_add_boolean create_vlan 1
+	json_select ..
+}
+
+ucidef_set_interface_loopback()
+{
+	# stub
+	local a=$1
+}
+
+ucidef_set_interface_lan() {
+	local lan_if=$1
+
+	json_select_object network
+	_ucidef_set_interface lan $lan_if
+	json_select ..
+}
+
+ucidef_set_interfaces_lan_wan() {
+	local lan_if=$1
+	local wan_if=$2
+
+	json_select_object network
+	_ucidef_set_interface lan $lan_if
+	_ucidef_set_interface wan $wan_if
+	json_select ..
+}
+
+ucidef_add_switch() {
+	local name=$1
+	local reset=$2
+	local enable=$3
+
+	json_select_object switch
+
+	json_select_object $name
+	json_add_boolean enable $enable
+	json_add_boolean reset $reset
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_add_switch_attr() {
+	local name=$1
+	local key=$2
+	local val=$3
+
+	json_select_object switch
+
+	json_select_object $name
+	json_add_string $key $val
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_add_switch_vlan() {
+	local name=$1
+	local vlan=$2
+	local ports=$3
+	local cpu_port=''
+
+	case $vlan in
+	1)	vlan=lan;;
+	2)	vlan=wan;;
+	*)	vlan=vlan$vlan;;
+	esac
+
+	json_select_object switch
+	json_select_object $name
+	json_select_object vlans
+
+	json_add_array $vlan
+	for p in $ports; do
+		if [ ${p%t} != $p ]; then
+			cpu_port=$p
+		else
+			json_add_int "" $p
+		fi
+	done
+	json_close_array
+
+	json_select ..
+	[ -n "$cpu_port" ] && json_add_int cpu_port $cpu_port
+	json_select ..
+	json_select ..
+}
+
+ucidef_set_interface_macaddr() {
+	local network=$1
+	local macaddr=$2
+
+	json_select_object network
+
+	json_select $network
+	[ $? -eq 0 ] || {
+		json_select ..
+		return
+	}
+
+	json_add_string macaddr $macaddr
+	json_select ..
+	
+	json_select ..
+}
+
+ucidef_set_led_netdev() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local dev=$4
+
+	json_select_object led
+	
+	json_select_object $1
+	json_add_string name $name
+	json_add_string type netdev
+	json_add_string sysfs $sysfs
+	json_add_string device $dev
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_led_interface() {
+	local name=$1
+	local sysfs=$2
+
+	json_select_object led
+	
+	json_select_object $1
+	json_add_string name $name
+	json_add_string type interface
+	json_add_string sysfs $sysfs
+	json_add_string interface $name
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_led_usbdev() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local dev=$4
+
+	json_select_object led
+	
+	json_select_object $1
+	json_add_string name $name	
+	json_add_string type usb
+	json_add_string sysfs $sysfs
+	json_add_string device $dev
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_led_wlan() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local trigger=$4
+
+	json_select_object led
+	
+	json_select_object $1
+	json_add_string name $name
+	json_add_string type trigger
+	json_add_string sysfs $sysfs
+	json_add_string trigger $trigger
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_led_switch() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local trigger=$4
+	local port_mask=$5
+
+	json_select_object led
+	
+	json_select_object $1
+	json_add_string name $name
+	json_add_string type switch
+	json_add_string sysfs $sysfs
+	json_add_string trigger $trigger
+	json_add_string port_mask $port_mask
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_led_default() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local default=$4
+
+	json_select_object led
+	
+	json_select_object $1
+	json_add_string name $name
+	json_add_string sysfs $sysfs
+	json_add_string default $default
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_led_rssi() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local iface=$4
+	local minq=$5
+	local maxq=$6
+	local offset=$7
+	local factor=$8
+
+	json_select_object led
+	
+	json_select_object rssi
+	json_select_object $1
+	json_add_string name $name
+	json_add_string sysfs $sysfs
+	json_add_string minq $minq
+	json_add_string maxq $maxq
+	json_add_string offset $offset
+	json_add_string factor $factor
+	json_select ..
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_button() {
+	local cfg="button_$1"
+	local name=$2
+    local script=$3
+	local disabled='0'
+
+	json_select_object button
+	
+	json_select_object $1
+	json_add_string name $name
+	json_add_string disabled $disabled
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_set_rssimon() {
+	local dev="$1"
+	local refresh="$2"
+	local threshold="$3"
+
+	json_select_object led
+	
+	json_select_object rssi
+	json_add_string type rssi
+	json_add_string dev $dev
+	json_add_string threshold $threshold
+	json_select ..
+
+	json_select ..
+	
+}
+
+board_config_update() {
+	json_init
+	[ -f ${CFG} ] && json_load "$(cat ${CFG})"
+}
+
+board_config_flush() {
+	json_dump -i > /tmp/.board.json
+	mv /tmp/.board.json ${CFG}
+}
diff --git a/lib/functions/uci-defaults.sh b/lib/functions/uci-defaults.sh
new file mode 100755
index 0000000..fc1262f
--- /dev/null
+++ b/lib/functions/uci-defaults.sh
@@ -0,0 +1,448 @@
+#!/bin/sh
+# Copyright (C) 2011 OpenWrt.org
+
+UCIDEF_LEDS_CHANGED=0
+
+ucidef_set_led_netdev() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local dev=$4
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='netdev'
+set system.$cfg.dev='$dev'
+set system.$cfg.mode='link tx rx'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_usbdev() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local dev=$4
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='usbdev'
+set system.$cfg.dev='$dev'
+set system.$cfg.interval='50'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_wlan() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local trigger=$4
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='$trigger'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_switch() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local trigger=$4
+	local port_mask=$5
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='$trigger'
+set system.$cfg.port_mask='$port_mask'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_default() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local default=$4
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.default='$default'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_rssi() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local iface=$4
+	local minq=$5
+	local maxq=$6
+	local offset=$7
+	local factor=$8
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='rssi'
+set system.$cfg.iface='rssid_$iface'
+set system.$cfg.minq='$minq'
+set system.$cfg.maxq='$maxq'
+set system.$cfg.offset='$offset'
+set system.$cfg.factor='$factor'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_timer() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local delayon=$4
+	local delayoff=$5
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='timer'
+set system.$cfg.delayon='$delayon'
+set system.$cfg.delayoff='$delayoff'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_mmc() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local trigger=$4
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='$trigger'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_led_trigger_gpio() {
+	local cfg="led_$1"
+	local name=$2
+	local sysfs=$3
+	local gpio=$4
+	local inverted=$5
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='led'
+set system.$cfg.name='$name'
+set system.$cfg.sysfs='$sysfs'
+set system.$cfg.trigger='gpio'
+set system.$cfg.gpio='$gpio'
+set system.$cfg.inverted='$inverted'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_set_rssimon() {
+	local dev="$1"
+	local refresh="$2"
+	local threshold="$3"
+
+	local cfg="rssid_$dev"
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='rssid'
+set system.$cfg.dev='$dev'
+set system.$cfg.refresh='$refresh'
+set system.$cfg.threshold='$threshold'
+EOF
+	UCIDEF_LEDS_CHANGED=1
+}
+
+ucidef_commit_leds()
+{
+	[ "$UCIDEF_LEDS_CHANGED" = "1" ] && uci commit system
+}
+
+UCIDEF_BUTTONS_CHANGED=0
+
+ucidef_set_button() {
+	local cfg="button_$1"
+	local name=$2
+    local disabled='0'
+
+	uci -q get system.$cfg && return 0
+
+	uci batch <<EOF
+set system.$cfg='button'
+set system.$cfg.name='$name'
+set system.$cfg.disabled='$disabled'
+EOF
+	UCIDEF_BUTTONS_CHANGED=1
+}
+
+ucidef_commit_buttons()
+{
+	[ "$UCIDEF_BUTTONS_CHANGED" = "1" ] && uci commit system
+}
+
+ucidef_set_interface_loopback() {
+	uci batch <<EOF
+set network.loopback='interface'
+set network.loopback.ifname='lo'
+set network.loopback.proto='static'
+set network.loopback.ipaddr='127.0.0.1'
+set network.loopback.netmask='255.0.0.0'
+set network.globals='globals'
+set network.globals.ula_prefix='auto'
+EOF
+}
+
+ucidef_set_interface_raw() {
+	local cfg=$1
+	local ifname=$2
+	local proto=${3:-"none"}
+
+	uci batch <<EOF
+set network.$cfg='interface'
+set network.$cfg.ifname='$ifname'
+set network.$cfg.proto='$proto'
+EOF
+}
+
+ucidef_set_interface_lan() {
+	local ifname=$1
+
+	uci batch <<EOF
+set network.lan='interface'
+set network.lan.ifname='$ifname'
+set network.lan.force_link=1
+set network.lan.type='bridge'
+set network.lan.proto='static'
+set network.lan.ipaddr='192.168.1.1'
+set network.lan.netmask='255.255.255.0'
+set network.lan.ip6assign='60'
+EOF
+}
+
+ucidef_set_interface_wan() {
+	local ifname=$1
+
+	uci batch <<EOF
+set network.wan='interface'
+set network.wan.ifname='$ifname'
+set network.wan.proto='dhcp'
+set network.wan6='interface'
+set network.wan6.ifname='$ifname'
+set network.wan6.proto='dhcpv6'
+EOF
+}
+
+ucidef_set_interfaces_lan_wan() {
+	local lan_ifname=$1
+	local wan_ifname=$2
+
+	ucidef_set_interface_lan "$lan_ifname"
+	ucidef_set_interface_wan "$wan_ifname"
+}
+
+ucidef_set_interface_bond() {
+	local ifname=$1
+	local hash_policy=$2
+	local slave_list=$3
+	local mode=$4
+	uci batch <<EOF
+set network.bond='interface'
+set network.bond.ifname='$ifname'
+set network.bond.type='bonding'
+set network.bond.proto='static'
+set network.bond.xmit_hash_policy='$hash_policy'
+set network.bond.slaves='$slave_list'
+set network.bond.mode='$mode'
+EOF
+}
+
+ucidef_set_interface_macaddr() {
+	local ifname=$1
+	local mac=$2
+
+	uci batch <<EOF
+set network.$ifname.macaddr='$mac'
+EOF
+}
+
+ucidef_add_switch() {
+	local name=$1
+	local reset=$2
+	local enable=$3
+	uci batch <<EOF
+add network switch
+set network.@switch[-1].name='$name'
+set network.@switch[-1].reset='$reset'
+set network.@switch[-1].enable_vlan='$enable'
+EOF
+}
+
+ucidef_add_switch_vlan() {
+	local device=$1
+	local vlan=$2
+	local ports=$3
+	uci batch <<EOF
+add network switch_vlan
+set network.@switch_vlan[-1].device='$device'
+set network.@switch_vlan[-1].vlan='$vlan'
+set network.@switch_vlan[-1].ports='$ports'
+EOF
+}
+
+ucidef_add_switch_ext() {
+	local device=$1
+	local name=$2
+	local port=$3
+	local mode=$4
+	local status=$5
+	uci batch <<EOF
+add network switch_ext
+set network.@switch_ext[-1].device='$device'
+set network.@switch_ext[-1].name='$name'
+set network.@switch_ext[-1].port_id='$port'
+set network.@switch_ext[-1].mode='$mode'
+set network.@switch_ext[-1].status='$status'
+EOF
+}
+
+ucidef_add_switch_ext_profile() {
+	local device=$1
+	local name=$2
+	local profile_id=$3
+	local rfdb_macaddr=$4
+	uci batch <<EOF
+add network switch_ext
+set network.@switch_ext[-1].device='$device'
+set network.@switch_ext[-1].name='$name'
+set network.@switch_ext[-1].profile_id='$profile_id'
+set network.@switch_ext[-1].rfdb_macaddr='$rfdb_macaddr'
+EOF
+}
+
+ucidef_add_switch_ext_hkxx() {
+	local device=$1
+	local name=$2
+	local port_bitmap=$3
+	local ethtype_profile_bitmap=$4
+	local rfdb_profile_bitmap=$5
+	local eapol_en=$6
+	local pppoe_en=$7
+	local igmp_en=$8
+	local arp_request_en=$9
+	local arp_reponse_en=$10
+	local dhcp4_en=$11
+	local dhcp6_en=$12
+	local mld_en=$13
+	local ip6ns_en=$14
+	local ip6na_en=$15
+	local ctrlpkt_profile_action=$16
+	local sourceguard_bypass=$17
+	local l2filter_bypass=$18
+	local ingress_stp_bypass=$19
+	local ingress_vlan_filter_bypass=$20
+	uci batch <<EOF
+add network switch_ext
+set network.@switch_ext[-1].device='$device'
+set network.@switch_ext[-1].name='$name'
+set network.@switch_ext[-1].port_bitmap='$port_bitmap'
+set network.@switch_ext[-1].ethtype_profile_bitmap='$ethtype_profile_bitmap'
+set network.@switch_ext[-1].rfdb_profile_bitmap='$rfdb_profile_bitmap'
+set network.@switch_ext[-1].eapol_en='$eapol_en'
+set network.@switch_ext[-1].pppoe_en='$pppoe_en'
+set network.@switch_ext[-1].igmp_en='$igmp_en'
+set network.@switch_ext[-1].arp_request_en='$arp_request_en'
+set network.@switch_ext[-1].arp_reponse_en='$arp_reponse_en'
+set network.@switch_ext[-1].dhcp4_en='$dhcp4_en'
+set network.@switch_ext[-1].dhcp6_en='$dhcp6_en'
+set network.@switch_ext[-1].mld_en='$mld_en'
+set network.@switch_ext[-1].ip6ns_en='$ip6ns_en'
+set network.@switch_ext[-1].ip6na_en='$ip6na_en'
+set network.@switch_ext[-1].ctrlpkt_profile_action='$ctrlpkt_profile_action'
+set network.@switch_ext[-1].sourceguard_bypass='$sourceguard_bypass'
+set network.@switch_ext[-1].l2filter_bypass='$l2filter_bypass'
+set network.@switch_ext[-1].ingress_stp_bypass='$ingress_stp_bypass'
+set network.@switch_ext[-1].ingress_vlan_filter_bypass='$ingress_vlan_filter_bypass'
+EOF
+}
+
+ucidef_add_switch_ext_trunk() {
+	local device=$1
+	local name=$2
+	local trunk=$3
+	local status=$4
+	local trunk_port_bitmap=$5
+	uci batch <<EOF
+add network switch_ext
+set network.@switch_ext[-1].device='$device'
+set network.@switch_ext[-1].name='$name'
+set network.@switch_ext[-1].trunk_id='$trunk'
+set network.@switch_ext[-1].status='$status'
+set network.@switch_ext[-1].trunk_port_bitmap='$trunk_port_bitmap'
+EOF
+}
+
+ucidef_add_switch_port() {
+	local device=$1
+	local port=$2
+	uci batch <<EOF
+add network switch_port
+set network.@switch_port[-1].device='$device'
+set network.@switch_port[-1].port='$port'
+EOF
+}
+
+ucidef_set_skb_recycler() {
+
+	uci batch <<EOF
+add skb_recycler skb
+EOF
+}
+
+ucidef_set_skb() {
+
+	uci batch <<EOF
+set skb_recycler.@skb[-1].'${1}'='$2'
+EOF
+}
diff --git a/lib/functions/whc-debug.sh b/lib/functions/whc-debug.sh
new file mode 100755
index 0000000..e98ef12
--- /dev/null
+++ b/lib/functions/whc-debug.sh
@@ -0,0 +1,72 @@
+if [ -n "${SERVICE_DEBUG_OUTPUT}" ]; then
+	[ "${SERVICE_DEBUG_OUTPUT}" -eq 1 ] && export SVCDBG="debug_"
+fi
+ 
+debug_service_start() {
+        local serv="`echo $1 | awk -F'/' '{print $NF}'`"
+
+        "$@" >/dev/console 2>/dev/console &
+        echo `ps | grep $1 | grep -v grep | awk '{print \$1}'`> /var/run/${serv}.pid
+}
+
+debug_service_stop() {
+        local serv="`echo $1 | awk -F'/' '{print $NF}'`"
+        local serv_pid="`ps | grep $1 | grep -v grep | awk '{print \$1}'`"
+
+        [ -z "$serv_pid" ] || kill $serv_pid
+        rm -f /var/run/${serv}.pid
+}
+
+whc_debug() {
+	if [ -n "$WHC_DEBUG_OUTPUT" ]; then
+		if [ "$WHC_DEBUG_OUTPUT" -gt 0 ]; then
+				echo "${1}: ""$2"> /dev/console
+		fi
+	fi
+}
+
+whc_echo() {
+	echo "${1}: ""$2"> /dev/console
+}
+
+whc_error() {
+	echo "${1}: ERROR: ""$2"> /dev/console
+}
+
+__CONFIG_LOCK_SUFFIX='-wifi-config'
+
+# Protect against simultaneous changes to the Wi-Fi configuration (via WHC
+# components) by grabbing this lock.
+whc_wifi_config_lock() {
+    __whc_lock $__CONFIG_LOCK_SUFFIX
+}
+
+# Release the lock used to protect against simultaneous changes to Wi-Fi
+# configuration by WHC components.
+whc_wifi_config_unlock() {
+    __whc_unlock $__CONFIG_LOCK_SUFFIX
+}
+
+__whc_trap_cb() {
+	whc_error $0 "unexpected termination"
+}
+
+# whc_lock
+# input: $1: (optional) lock suffix, $2: (optional) trap callback
+__whc_lock() {
+	local trap_cb="$2"
+
+	local lock=/var/run/whc${1}.lock
+	lock $lock
+	[ -z "$trap_cb" ] && trap_cb=__whc_trap_cb
+	trap $trap_cb INT TERM ABRT QUIT ALRM
+}
+
+# whc_unlock
+# input: $1: (optional) lock suffix
+__whc_unlock() {
+	local lock=/var/run/whc${1}.lock
+
+	trap - INT TERM ABRT QUIT ALRM
+	lock -u $lock
+}
diff --git a/lib/functions/whc-iface.sh b/lib/functions/whc-iface.sh
new file mode 100755
index 0000000..ca67105
--- /dev/null
+++ b/lib/functions/whc-iface.sh
@@ -0,0 +1,111 @@
+guest_network="guest"
+traffic_separation_enabled=0
+traffic_separation_active=0
+WLAN_INCLUDED_IFACES=""
+WLAN_INCLUDED_DEVICES=""
+WLAN_EXCLUDE=
+
+__whc_get_wlan_ifaces() {
+	local config="$1"
+	local ssid_to_match="$2"
+	local network_to_match="$3"
+	local device iface disabled mode ssid network radio_disabled
+
+	config_get device "$config" device
+	config_get iface "$config" ifname
+	config_get disabled "$config" disabled '0'
+	config_get mode "$config" mode
+	config_get ssid "$config" ssid
+	config_get network "$config" network
+	config_get radio_disabled "$device" disabled '0'
+
+	if [ "$traffic_separation_enabled" -gt 0 ] && \
+		[ "$traffic_separation_active" -gt 0 ] && \
+                [ -n "$network_to_match" -a "$network" != "$network_to_match" -a "$network" != "backhaul" ]; then
+			return
+	fi
+
+	driver=$(lsmod | cut -d' ' -f 1 | grep ath10k_core)
+	#TODO: Read the interface name from config rather than assuming single interface per radio.
+	if [ "$driver" == "ath10k_core" -a "$radio_disabled" -eq 0 ]; then
+		if [ "$device" == "radio0" ]; then
+			iface="wlan0"
+		elif [ "$device" == "radio1" ]; then
+			iface="wlan1"
+		else
+			iface="wlan2"
+		fi
+	fi
+
+	if [ -n "$iface" -a "$disabled" -eq 0 ]; then
+		if [ "$mode" == "ap" -o "$mode" == "wrap" ]; then
+			if [ -z "$ssid_to_match" ]; then
+				WLAN_INCLUDED_DEVICES="${WLAN_INCLUDED_DEVICES}${WLAN_INCLUDED_DEVICES:+","}${device}:${iface}"
+			else
+				if [ ! -n "$ssid_to_match" -o "$ssid" == "$ssid_to_match" ]; then
+					WLAN_INCLUDED_DEVICES="${WLAN_INCLUDED_DEVICES}${WLAN_INCLUDED_DEVICES:+","}${device}:${iface}"
+					WLAN_INCLUDED_IFACES="${WLAN_INCLUDED_IFACES}${WLAN_INCLUDED_IFACES:+","}${iface}"
+					return
+				fi
+			fi
+		fi
+	fi
+}
+__whc_get_wlan_excluded() {
+	local config="$1"
+	local ifaces_to_match="$2"
+	config_get device "$config" device
+	config_get iface "$config" ifname
+	config_get disabled "$config" disabled '0'
+	config_get mode "$config" mode
+	config_get ssid "$config" ssid
+	config_get network "$config" network
+
+	local iface_array=$(echo $ifaces_to_match | tr ',' "\n")
+	if [ -n "$iface" -a "$disabled" -eq 0 ]; then
+		if [ "$mode" == "ap" -o "$mode" == "wrap" ]; then
+			for i in $iface_array
+			do
+				if [ ! -n "$i" -o "$iface" == "$i" ]; then
+					return
+				fi
+			done
+				WLAN_EXCLUDE="${WLAN_EXCLUDE}${WLAN_EXCLUDE:+","}${device}:${iface}"
+		fi
+	fi
+}
+
+
+# whc_get_wlan_ifaces()
+# input:  $1 The desired SSID. If it is null string, then get all WLAN
+#	  $4 The disired network name. Only the interfaces with matching network name included
+# output: $2 List of all WLAN interfaces matching the SSID provided and the network name
+#            if no matching ssid, only the network name will be checked
+#	  $3 the matching SSID returned back to the caller
+whc_get_wlan_ifaces() {
+	config_load 'repacd'
+	config_get guest_network repacd NetworkGuest 'guest'
+	config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+	config_get traffic_separation_active repacd TrafficSeparationActive '0'
+
+	config_load wireless
+	config_foreach __whc_get_wlan_ifaces wifi-iface "$1" "$4"
+
+	eval "$2='${WLAN_INCLUDED_DEVICES}'"
+	eval "$3='$1'"
+}
+
+# return the EXCLUDE interface list. This should be called after the interface list is created
+whc_get_wlan_ifaces_excl()
+{
+	config_load wireless
+	config_foreach __whc_get_wlan_excluded wifi-iface $WLAN_INCLUDED_IFACES
+	eval "$1='${WLAN_EXCLUDE}'"
+}
+
+# clean the global variables. This should be called before create the new lists
+whc_init_wlan_interface_list()
+{
+	WLAN_EXCLUDE=""
+	WLAN_INCLUDED_DEVICES=""
+}
diff --git a/lib/functions/whc-network.sh b/lib/functions/whc-network.sh
new file mode 100755
index 0000000..8d7f04e
--- /dev/null
+++ b/lib/functions/whc-network.sh
@@ -0,0 +1,56 @@
+#!/bin/sh /etc/rc.common
+# Copyright (c) 2015 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+whc_network_restart() {
+    # This already grabs a lock when reconfiguring the Wi-Fi interfaces.
+    # If WHC ever grows to configure more than just Wi-Fi, then we may
+    # need to grab an additional lock.
+    /sbin/wifi
+}
+
+# Determine  if the device provided is for 5 GHz or not
+# Currently this relies on the hwmode config parameter and is meant for
+# a radio tied to a specific band.
+#
+# The wireless configuration needs to have been loaded prior to this function
+# being invoked.
+#
+# input: $1 device - name of the device
+# return: 0 if the device operates on 5 GHz; otherwise 1
+whc_is_5g_radio() {
+    local hwmode
+    config_get hwmode $1 hwmode '11ng'
+
+    case "$hwmode" in
+        11axa|11ac|11na|11a)
+            return 0
+        ;;
+
+        *)
+            return 1
+        ;;
+    esac
+}
+
+# Determine if the VAP provided (identified by its section name) operates
+# on 5 GHz or not.
+#
+# See the caveat about this being intended for platforms where each radio is
+# dedicated to a band as mentioned in the __repacd_is_5g_radio documentation
+# above.
+#
+# The wireless configuration needs to have been loaded prior to this function
+# being invoked.
+#
+# input: $1 vap - name of the wifi-iface section
+# return: 0 if the VAP operates on 5 GHz; otherwise 1
+whc_is_5g_vap() {
+    local device
+    config_get device $1 device
+
+    whc_is_5g_radio $device
+    return $?
+}
diff --git a/lib/ld-uClibc-1.0.14.so b/lib/ld-uClibc-1.0.14.so
new file mode 100755
index 0000000..7ceb1fd
Binary files /dev/null and b/lib/ld-uClibc-1.0.14.so differ
diff --git a/lib/ld-uClibc.so.0 b/lib/ld-uClibc.so.0
new file mode 120000
index 0000000..96e71c8
--- /dev/null
+++ b/lib/ld-uClibc.so.0
@@ -0,0 +1 @@
+ld-uClibc.so.1
\ No newline at end of file
diff --git a/lib/ld-uClibc.so.1 b/lib/ld-uClibc.so.1
new file mode 120000
index 0000000..4c13255
--- /dev/null
+++ b/lib/ld-uClibc.so.1
@@ -0,0 +1 @@
+ld-uClibc-1.0.14.so
\ No newline at end of file
diff --git a/lib/libblobmsg_json.so b/lib/libblobmsg_json.so
new file mode 100644
index 0000000..f557d07
Binary files /dev/null and b/lib/libblobmsg_json.so differ
diff --git a/lib/libc.so.1 b/lib/libc.so.1
new file mode 120000
index 0000000..ca5227e
--- /dev/null
+++ b/lib/libc.so.1
@@ -0,0 +1 @@
+libuClibc-1.0.14.so
\ No newline at end of file
diff --git a/lib/libcrypt-1.0.14.so b/lib/libcrypt-1.0.14.so
new file mode 100755
index 0000000..58f8a4e
Binary files /dev/null and b/lib/libcrypt-1.0.14.so differ
diff --git a/lib/libcrypt.so.1 b/lib/libcrypt.so.1
new file mode 120000
index 0000000..cffc554
--- /dev/null
+++ b/lib/libcrypt.so.1
@@ -0,0 +1 @@
+libcrypt-1.0.14.so
\ No newline at end of file
diff --git a/lib/libdl-1.0.14.so b/lib/libdl-1.0.14.so
new file mode 100755
index 0000000..b40989b
Binary files /dev/null and b/lib/libdl-1.0.14.so differ
diff --git a/lib/libdl.so.1 b/lib/libdl.so.1
new file mode 120000
index 0000000..50013b4
--- /dev/null
+++ b/lib/libdl.so.1
@@ -0,0 +1 @@
+libdl-1.0.14.so
\ No newline at end of file
diff --git a/lib/libfstools.so b/lib/libfstools.so
new file mode 100644
index 0000000..e9bbfb7
Binary files /dev/null and b/lib/libfstools.so differ
diff --git a/lib/libgcc_s.so.1 b/lib/libgcc_s.so.1
new file mode 100644
index 0000000..16999f3
Binary files /dev/null and b/lib/libgcc_s.so.1 differ
diff --git a/lib/libjson_script.so b/lib/libjson_script.so
new file mode 100644
index 0000000..fa67d0b
Binary files /dev/null and b/lib/libjson_script.so differ
diff --git a/lib/libm-1.0.14.so b/lib/libm-1.0.14.so
new file mode 100755
index 0000000..c7d4af0
Binary files /dev/null and b/lib/libm-1.0.14.so differ
diff --git a/lib/libm.so.1 b/lib/libm.so.1
new file mode 120000
index 0000000..52d3b3c
--- /dev/null
+++ b/lib/libm.so.1
@@ -0,0 +1 @@
+libm-1.0.14.so
\ No newline at end of file
diff --git a/lib/libpthread-1.0.14.so b/lib/libpthread-1.0.14.so
new file mode 100755
index 0000000..0d63575
Binary files /dev/null and b/lib/libpthread-1.0.14.so differ
diff --git a/lib/libpthread.so.1 b/lib/libpthread.so.1
new file mode 120000
index 0000000..33ad42c
--- /dev/null
+++ b/lib/libpthread.so.1
@@ -0,0 +1 @@
+libpthread-1.0.14.so
\ No newline at end of file
diff --git a/lib/librpc.so b/lib/librpc.so
new file mode 100644
index 0000000..3245ab8
Binary files /dev/null and b/lib/librpc.so differ
diff --git a/lib/librt-1.0.14.so b/lib/librt-1.0.14.so
new file mode 100755
index 0000000..22774fa
Binary files /dev/null and b/lib/librt-1.0.14.so differ
diff --git a/lib/librt.so.1 b/lib/librt.so.1
new file mode 120000
index 0000000..a80839b
--- /dev/null
+++ b/lib/librt.so.1
@@ -0,0 +1 @@
+librt-1.0.14.so
\ No newline at end of file
diff --git a/lib/libsetlbf.so b/lib/libsetlbf.so
new file mode 100644
index 0000000..c1e2175
Binary files /dev/null and b/lib/libsetlbf.so differ
diff --git a/lib/libuClibc-1.0.14.so b/lib/libuClibc-1.0.14.so
new file mode 100755
index 0000000..6892882
Binary files /dev/null and b/lib/libuClibc-1.0.14.so differ
diff --git a/lib/libubox.so b/lib/libubox.so
new file mode 100644
index 0000000..c32a433
Binary files /dev/null and b/lib/libubox.so differ
diff --git a/lib/libubus.so b/lib/libubus.so
new file mode 100644
index 0000000..9001752
Binary files /dev/null and b/lib/libubus.so differ
diff --git a/lib/libuci.so b/lib/libuci.so
new file mode 100755
index 0000000..179ce79
Binary files /dev/null and b/lib/libuci.so differ
diff --git a/lib/libustream-ssl.so b/lib/libustream-ssl.so
new file mode 100644
index 0000000..d90b813
Binary files /dev/null and b/lib/libustream-ssl.so differ
diff --git a/lib/libutil-1.0.14.so b/lib/libutil-1.0.14.so
new file mode 100755
index 0000000..9ef9b5d
Binary files /dev/null and b/lib/libutil-1.0.14.so differ
diff --git a/lib/libutil.so.1 b/lib/libutil.so.1
new file mode 120000
index 0000000..0461991
--- /dev/null
+++ b/lib/libutil.so.1
@@ -0,0 +1 @@
+libutil-1.0.14.so
\ No newline at end of file
diff --git a/lib/libvalidate.so b/lib/libvalidate.so
new file mode 100644
index 0000000..cbcb2f9
Binary files /dev/null and b/lib/libvalidate.so differ
diff --git a/lib/migration/migration.sh b/lib/migration/migration.sh
new file mode 100755
index 0000000..fdc8560
--- /dev/null
+++ b/lib/migration/migration.sh
@@ -0,0 +1,77 @@
+if [ -z "$MIGTEST" ]; then
+    if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+    elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+    fi  
+
+
+    . /lib/functions.sh
+    BOARD=$(${PLATFORM}_board_name)
+fi
+
+if [ -z "$MIG_BASE" ];then
+    MIG_BASE="/etc/migration/"
+fi
+
+if [ -z "$MIG_DIRS" ]; then
+    MIG_DIRS=$(find "$MIG_BASE" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;)
+fi
+
+if [ -z "$CURRENT_CONFIG_VERSION" ]; then
+    CURRENT_CONFIG_VERSION=$(grep CONFIG_VERSION /etc/delos-version |
+                            awk -F'=' '{print $2}')
+    if [ "$CURRENT_CONFIG_VERSION" = "" ]; then
+        #assume 2.0.0 due empty CONFIG_VERSION
+        CURRENT_CONFIG_VERSION="2.0.0"
+    fi
+fi
+
+if [ -z "$UCI_TOOL" ];then
+    UCI_TOOL="$(command -v uci)"
+fi
+
+if [ -z "$LOG_TOOL" ]; then
+    LOG_TOOL="$(command -v logger)" || LOG_TOOL=":"
+fi
+
+migrationIsUpgrade() {
+    if [ -z "$MIGTEST" ]; then
+        # if downgrading the first migration step is not contained in /rom, not part of the firmware
+        if [ -d "/rom/etc/migration/$1" ]; then
+            $LOG_TOOL "Upgrade migration."
+            return 1
+        else
+            $LOG_TOOL "Downgrade migration."
+            return 0
+        fi
+    else
+        $LOG_TOOL "Emulate migrationIsUpgrade: TBD"
+        return 0
+    fi
+}
+
+#used in 99_delos_migration
+updateMigrationScripts() {
+    migrationIsUpgrade $1
+    if [ "$?" -eq "1" ]; then
+        $LOG_TOOL "Need migration of update scripts (/etc/migration)"
+        rm -rf "$MIG_BASE"*
+        cp -af /rom/etc/migration/* "$MIG_BASE"
+    fi
+}
+
+#used in 00_delos
+updateUciDefaultsScript() {
+    rm -rf /etc/uci-defaults/99_delos_migration
+    cp -af /rom/etc/uci-defaults/99_delos_migration /etc/uci-defaults/99_delos_migration 
+}
+
+forceCurrentMigrationScripts() {
+    if [ -z "$MIGTEST" ];then
+        cp -af /rom/etc/uci-defaults/99_delos_migration /etc/uci-defaults/99_delos_migration
+        cp -af /rom/lib/migration/* /lib/migration/
+    fi
+}
diff --git a/lib/migration/plc-pib.sh b/lib/migration/plc-pib.sh
new file mode 100755
index 0000000..5198d41
--- /dev/null
+++ b/lib/migration/plc-pib.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+
+# 1st pib migration for Wifi ac. Up.
+migrate_pib_wifiac_1u() (
+    
+    if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+    elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+    fi
+    board=$(${PLATFORM}_board_name)
+
+
+    . /lib/functions.sh
+
+    [ -e /lib/firmware/plc/$board/fwconfig ] && . /lib/firmware/plc/$board/fwconfig || exit 1
+
+    USR_PIB=$PLCFW_PATH/user.pib
+    NEW_PIB=$PLCFW_PATH/user.pib.tmp
+    TMP_PIB=/tmp/user.pib
+    eval ORG_PIB="\"$PLCFW_PATH/\${PLCFW_PIB_$(uci_get_state delos baptization MT):-$PLCFW_PIB}\""
+
+    # validate new user PIB and user PIB
+    chkpib -q "$NEW_PIB" && mv "$NEW_PIB" "$USR_PIB"
+    chkpib -q "$USR_PIB" || {
+        rm -f "$USR_PIB"
+        exit 0
+    }
+
+    # migrate only valid user PIB
+    move_data() { # fromfile tofile offset type [size]
+        setpib "$2" "$3" "$4" "$(getpib "$1" "$3" "$4" ${5:+"$5"})"
+    }
+
+    # transplant old pib into new pib overriding all configs (size of 1.5 PIB format)
+    cp "$ORG_PIB" "$TMP_PIB"
+    move_data "$USR_PIB" "$TMP_PIB" 0 data 21384
+
+    # copy changed parts from new PIB template
+    # prescalers, ttl, customer reserved
+    move_data "$ORG_PIB" "$TMP_PIB" 0x1158 data 0x5bc
+    move_data "$ORG_PIB" "$TMP_PIB" 0x1714 data 0x5bc
+    move_data "$ORG_PIB" "$TMP_PIB" 0x708 long
+    move_data "$ORG_PIB" "$TMP_PIB" 0x18c data 0x40
+
+    # mfg string (3.0.0 always used MT2730 PIB)
+    move_data "$ORG_PIB" "$TMP_PIB" 0x24 hfid
+
+    mv "$TMP_PIB" "$USR_PIB"
+)
+
+# 1st pib migration for Wifi ac. Down.
+migrate_pib_wifiac_1d() migrate_pib_wifiac_1u "$@"
+
+#####
+# 2nd pib migration for Wifi ac. Up to 2.4.0-01.
+migrate_pib_wifiac_2u() (
+    . /lib/ar71xx.sh
+    board=$(ar71xx_board_name)
+    . /lib/functions.sh
+
+    [ -e /lib/firmware/plc/$board/fwconfig ] && . /lib/firmware/plc/$board/fwconfig || exit 1
+
+    USR_PIB=$PLCFW_PATH/user.pib
+    NEW_PIB=$PLCFW_PATH/user.pib.tmp
+    TMP_PIB=/tmp/user.pib
+    eval ORG_PIB="\"$PLCFW_PATH/\${PLCFW_PIB_$(uci_get_state delos baptization MT):-$PLCFW_PIB}\""
+
+    # validate new user PIB and user PIB
+    chkpib -q "$NEW_PIB" && mv "$NEW_PIB" "$USR_PIB"
+    chkpib -q "$USR_PIB" || {
+        rm -f "$USR_PIB"
+        exit 0
+    }
+
+    # migrate only valid user PIB
+    move_data() { # fromfile tofile offset type [size]
+        setpib "$2" "$3" "$4" "$(getpib "$1" "$3" "$4" ${5:+"$5"})"
+    }
+
+    cp "$USR_PIB" "$TMP_PIB"
+
+    # copy changed parts from new PIB template
+    # devolo version, ttl, stability fix
+    move_data "$ORG_PIB" "$TMP_PIB" 0x6 byte
+    move_data "$ORG_PIB" "$TMP_PIB" 0x708 long
+    move_data "$ORG_PIB" "$TMP_PIB" 0x25c8 long
+
+    mv "$TMP_PIB" "$USR_PIB"
+)
+
+# 2nd pib migration for Wifi ac. Down.
+migrate_pib_wifiac_2d() migrate_pib_wifiac_2u "$@"
+
+########
+# 1st pib migration for Wifi n. Up/Down. (same as 2nd ac)
+migrate_pib_wifin_1u() migrate_pib_wifiac_2u "$@"
+migrate_pib_wifin_1d() migrate_pib_wifiac_2d "$@"
diff --git a/lib/modules/4.4.60/asf.ko b/lib/modules/4.4.60/asf.ko
new file mode 100644
index 0000000..9742f79
Binary files /dev/null and b/lib/modules/4.4.60/asf.ko differ
diff --git a/lib/modules/4.4.60/ath_dev.ko b/lib/modules/4.4.60/ath_dev.ko
new file mode 100644
index 0000000..5add174
Binary files /dev/null and b/lib/modules/4.4.60/ath_dev.ko differ
diff --git a/lib/modules/4.4.60/ath_dfs.ko b/lib/modules/4.4.60/ath_dfs.ko
new file mode 100644
index 0000000..e772777
Binary files /dev/null and b/lib/modules/4.4.60/ath_dfs.ko differ
diff --git a/lib/modules/4.4.60/ath_hal.ko b/lib/modules/4.4.60/ath_hal.ko
new file mode 100644
index 0000000..ad5528b
Binary files /dev/null and b/lib/modules/4.4.60/ath_hal.ko differ
diff --git a/lib/modules/4.4.60/ath_pktlog.ko b/lib/modules/4.4.60/ath_pktlog.ko
new file mode 100644
index 0000000..9312186
Binary files /dev/null and b/lib/modules/4.4.60/ath_pktlog.ko differ
diff --git a/lib/modules/4.4.60/ath_rate_atheros.ko b/lib/modules/4.4.60/ath_rate_atheros.ko
new file mode 100644
index 0000000..c0745db
Binary files /dev/null and b/lib/modules/4.4.60/ath_rate_atheros.ko differ
diff --git a/lib/modules/4.4.60/ath_spectral.ko b/lib/modules/4.4.60/ath_spectral.ko
new file mode 100644
index 0000000..f016627
Binary files /dev/null and b/lib/modules/4.4.60/ath_spectral.ko differ
diff --git a/lib/modules/4.4.60/crc-ccitt.ko b/lib/modules/4.4.60/crc-ccitt.ko
new file mode 100644
index 0000000..b22f8ab
Binary files /dev/null and b/lib/modules/4.4.60/crc-ccitt.ko differ
diff --git a/lib/modules/4.4.60/ebt_802_3.ko b/lib/modules/4.4.60/ebt_802_3.ko
new file mode 100644
index 0000000..dd37f57
Binary files /dev/null and b/lib/modules/4.4.60/ebt_802_3.ko differ
diff --git a/lib/modules/4.4.60/ebt_among.ko b/lib/modules/4.4.60/ebt_among.ko
new file mode 100644
index 0000000..b846d17
Binary files /dev/null and b/lib/modules/4.4.60/ebt_among.ko differ
diff --git a/lib/modules/4.4.60/ebt_arp.ko b/lib/modules/4.4.60/ebt_arp.ko
new file mode 100644
index 0000000..e8a7f68
Binary files /dev/null and b/lib/modules/4.4.60/ebt_arp.ko differ
diff --git a/lib/modules/4.4.60/ebt_arpreply.ko b/lib/modules/4.4.60/ebt_arpreply.ko
new file mode 100644
index 0000000..5da767d
Binary files /dev/null and b/lib/modules/4.4.60/ebt_arpreply.ko differ
diff --git a/lib/modules/4.4.60/ebt_dnat.ko b/lib/modules/4.4.60/ebt_dnat.ko
new file mode 100644
index 0000000..346d5c0
Binary files /dev/null and b/lib/modules/4.4.60/ebt_dnat.ko differ
diff --git a/lib/modules/4.4.60/ebt_ip.ko b/lib/modules/4.4.60/ebt_ip.ko
new file mode 100644
index 0000000..f9c446d
Binary files /dev/null and b/lib/modules/4.4.60/ebt_ip.ko differ
diff --git a/lib/modules/4.4.60/ebt_ip6.ko b/lib/modules/4.4.60/ebt_ip6.ko
new file mode 100644
index 0000000..c483bbd
Binary files /dev/null and b/lib/modules/4.4.60/ebt_ip6.ko differ
diff --git a/lib/modules/4.4.60/ebt_limit.ko b/lib/modules/4.4.60/ebt_limit.ko
new file mode 100644
index 0000000..854d382
Binary files /dev/null and b/lib/modules/4.4.60/ebt_limit.ko differ
diff --git a/lib/modules/4.4.60/ebt_mark.ko b/lib/modules/4.4.60/ebt_mark.ko
new file mode 100644
index 0000000..88d61da
Binary files /dev/null and b/lib/modules/4.4.60/ebt_mark.ko differ
diff --git a/lib/modules/4.4.60/ebt_mark_m.ko b/lib/modules/4.4.60/ebt_mark_m.ko
new file mode 100644
index 0000000..c280a9e
Binary files /dev/null and b/lib/modules/4.4.60/ebt_mark_m.ko differ
diff --git a/lib/modules/4.4.60/ebt_pkttype.ko b/lib/modules/4.4.60/ebt_pkttype.ko
new file mode 100644
index 0000000..553dd8b
Binary files /dev/null and b/lib/modules/4.4.60/ebt_pkttype.ko differ
diff --git a/lib/modules/4.4.60/ebt_redirect.ko b/lib/modules/4.4.60/ebt_redirect.ko
new file mode 100644
index 0000000..09f994b
Binary files /dev/null and b/lib/modules/4.4.60/ebt_redirect.ko differ
diff --git a/lib/modules/4.4.60/ebt_snat.ko b/lib/modules/4.4.60/ebt_snat.ko
new file mode 100644
index 0000000..e1ad2e9
Binary files /dev/null and b/lib/modules/4.4.60/ebt_snat.ko differ
diff --git a/lib/modules/4.4.60/ebt_stp.ko b/lib/modules/4.4.60/ebt_stp.ko
new file mode 100644
index 0000000..a2c1720
Binary files /dev/null and b/lib/modules/4.4.60/ebt_stp.ko differ
diff --git a/lib/modules/4.4.60/ebt_vlan.ko b/lib/modules/4.4.60/ebt_vlan.ko
new file mode 100644
index 0000000..a616c3d
Binary files /dev/null and b/lib/modules/4.4.60/ebt_vlan.ko differ
diff --git a/lib/modules/4.4.60/ebtable_broute.ko b/lib/modules/4.4.60/ebtable_broute.ko
new file mode 100644
index 0000000..a1da166
Binary files /dev/null and b/lib/modules/4.4.60/ebtable_broute.ko differ
diff --git a/lib/modules/4.4.60/ebtable_filter.ko b/lib/modules/4.4.60/ebtable_filter.ko
new file mode 100644
index 0000000..bfb315a
Binary files /dev/null and b/lib/modules/4.4.60/ebtable_filter.ko differ
diff --git a/lib/modules/4.4.60/ebtable_nat.ko b/lib/modules/4.4.60/ebtable_nat.ko
new file mode 100644
index 0000000..9893df0
Binary files /dev/null and b/lib/modules/4.4.60/ebtable_nat.ko differ
diff --git a/lib/modules/4.4.60/ebtables.ko b/lib/modules/4.4.60/ebtables.ko
new file mode 100644
index 0000000..8fcef18
Binary files /dev/null and b/lib/modules/4.4.60/ebtables.ko differ
diff --git a/lib/modules/4.4.60/gpio-button-hotplug.ko b/lib/modules/4.4.60/gpio-button-hotplug.ko
new file mode 100644
index 0000000..65f23c7
Binary files /dev/null and b/lib/modules/4.4.60/gpio-button-hotplug.ko differ
diff --git a/lib/modules/4.4.60/hst_tx99.ko b/lib/modules/4.4.60/hst_tx99.ko
new file mode 100644
index 0000000..f221f38
Binary files /dev/null and b/lib/modules/4.4.60/hst_tx99.ko differ
diff --git a/lib/modules/4.4.60/hyfi-bridging.ko b/lib/modules/4.4.60/hyfi-bridging.ko
new file mode 100644
index 0000000..c98df58
Binary files /dev/null and b/lib/modules/4.4.60/hyfi-bridging.ko differ
diff --git a/lib/modules/4.4.60/hyfi-iptv-helper.ko b/lib/modules/4.4.60/hyfi-iptv-helper.ko
new file mode 100644
index 0000000..527fee0
Binary files /dev/null and b/lib/modules/4.4.60/hyfi-iptv-helper.ko differ
diff --git a/lib/modules/4.4.60/hyfi_qdisc.ko b/lib/modules/4.4.60/hyfi_qdisc.ko
new file mode 100644
index 0000000..b05f8fc
Binary files /dev/null and b/lib/modules/4.4.60/hyfi_qdisc.ko differ
diff --git a/lib/modules/4.4.60/ip6_tables.ko b/lib/modules/4.4.60/ip6_tables.ko
new file mode 100644
index 0000000..1667f80
Binary files /dev/null and b/lib/modules/4.4.60/ip6_tables.ko differ
diff --git a/lib/modules/4.4.60/ip6t_REJECT.ko b/lib/modules/4.4.60/ip6t_REJECT.ko
new file mode 100644
index 0000000..1187730
Binary files /dev/null and b/lib/modules/4.4.60/ip6t_REJECT.ko differ
diff --git a/lib/modules/4.4.60/ip6table_filter.ko b/lib/modules/4.4.60/ip6table_filter.ko
new file mode 100644
index 0000000..7427add
Binary files /dev/null and b/lib/modules/4.4.60/ip6table_filter.ko differ
diff --git a/lib/modules/4.4.60/ip6table_mangle.ko b/lib/modules/4.4.60/ip6table_mangle.ko
new file mode 100644
index 0000000..9488975
Binary files /dev/null and b/lib/modules/4.4.60/ip6table_mangle.ko differ
diff --git a/lib/modules/4.4.60/ip6table_raw.ko b/lib/modules/4.4.60/ip6table_raw.ko
new file mode 100644
index 0000000..d099cda
Binary files /dev/null and b/lib/modules/4.4.60/ip6table_raw.ko differ
diff --git a/lib/modules/4.4.60/ip_tables.ko b/lib/modules/4.4.60/ip_tables.ko
new file mode 100644
index 0000000..e784e56
Binary files /dev/null and b/lib/modules/4.4.60/ip_tables.ko differ
diff --git a/lib/modules/4.4.60/ipt_MASQUERADE.ko b/lib/modules/4.4.60/ipt_MASQUERADE.ko
new file mode 100644
index 0000000..51b3bd1
Binary files /dev/null and b/lib/modules/4.4.60/ipt_MASQUERADE.ko differ
diff --git a/lib/modules/4.4.60/ipt_REJECT.ko b/lib/modules/4.4.60/ipt_REJECT.ko
new file mode 100644
index 0000000..8752371
Binary files /dev/null and b/lib/modules/4.4.60/ipt_REJECT.ko differ
diff --git a/lib/modules/4.4.60/iptable_filter.ko b/lib/modules/4.4.60/iptable_filter.ko
new file mode 100644
index 0000000..34913b1
Binary files /dev/null and b/lib/modules/4.4.60/iptable_filter.ko differ
diff --git a/lib/modules/4.4.60/iptable_mangle.ko b/lib/modules/4.4.60/iptable_mangle.ko
new file mode 100644
index 0000000..c672bd2
Binary files /dev/null and b/lib/modules/4.4.60/iptable_mangle.ko differ
diff --git a/lib/modules/4.4.60/iptable_nat.ko b/lib/modules/4.4.60/iptable_nat.ko
new file mode 100644
index 0000000..3bee8d8
Binary files /dev/null and b/lib/modules/4.4.60/iptable_nat.ko differ
diff --git a/lib/modules/4.4.60/iptable_raw.ko b/lib/modules/4.4.60/iptable_raw.ko
new file mode 100644
index 0000000..dfc6bbd
Binary files /dev/null and b/lib/modules/4.4.60/iptable_raw.ko differ
diff --git a/lib/modules/4.4.60/ledtrig-gpio.ko b/lib/modules/4.4.60/ledtrig-gpio.ko
new file mode 100644
index 0000000..b9ca03b
Binary files /dev/null and b/lib/modules/4.4.60/ledtrig-gpio.ko differ
diff --git a/lib/modules/4.4.60/ledtrig-wifiled.ko b/lib/modules/4.4.60/ledtrig-wifiled.ko
new file mode 100644
index 0000000..65364e9
Binary files /dev/null and b/lib/modules/4.4.60/ledtrig-wifiled.ko differ
diff --git a/lib/modules/4.4.60/mem_manager.ko b/lib/modules/4.4.60/mem_manager.ko
new file mode 100644
index 0000000..20e14d1
Binary files /dev/null and b/lib/modules/4.4.60/mem_manager.ko differ
diff --git a/lib/modules/4.4.60/nf_conntrack.ko b/lib/modules/4.4.60/nf_conntrack.ko
new file mode 100644
index 0000000..052e1f7
Binary files /dev/null and b/lib/modules/4.4.60/nf_conntrack.ko differ
diff --git a/lib/modules/4.4.60/nf_conntrack_ipv4.ko b/lib/modules/4.4.60/nf_conntrack_ipv4.ko
new file mode 100644
index 0000000..25c2840
Binary files /dev/null and b/lib/modules/4.4.60/nf_conntrack_ipv4.ko differ
diff --git a/lib/modules/4.4.60/nf_conntrack_ipv6.ko b/lib/modules/4.4.60/nf_conntrack_ipv6.ko
new file mode 100644
index 0000000..b4f6bee
Binary files /dev/null and b/lib/modules/4.4.60/nf_conntrack_ipv6.ko differ
diff --git a/lib/modules/4.4.60/nf_conntrack_rtcache.ko b/lib/modules/4.4.60/nf_conntrack_rtcache.ko
new file mode 100644
index 0000000..71e2aea
Binary files /dev/null and b/lib/modules/4.4.60/nf_conntrack_rtcache.ko differ
diff --git a/lib/modules/4.4.60/nf_defrag_ipv4.ko b/lib/modules/4.4.60/nf_defrag_ipv4.ko
new file mode 100644
index 0000000..ce41811
Binary files /dev/null and b/lib/modules/4.4.60/nf_defrag_ipv4.ko differ
diff --git a/lib/modules/4.4.60/nf_defrag_ipv6.ko b/lib/modules/4.4.60/nf_defrag_ipv6.ko
new file mode 100644
index 0000000..daa04c7
Binary files /dev/null and b/lib/modules/4.4.60/nf_defrag_ipv6.ko differ
diff --git a/lib/modules/4.4.60/nf_log_common.ko b/lib/modules/4.4.60/nf_log_common.ko
new file mode 100644
index 0000000..a9d01da
Binary files /dev/null and b/lib/modules/4.4.60/nf_log_common.ko differ
diff --git a/lib/modules/4.4.60/nf_log_ipv4.ko b/lib/modules/4.4.60/nf_log_ipv4.ko
new file mode 100644
index 0000000..4619570
Binary files /dev/null and b/lib/modules/4.4.60/nf_log_ipv4.ko differ
diff --git a/lib/modules/4.4.60/nf_log_ipv6.ko b/lib/modules/4.4.60/nf_log_ipv6.ko
new file mode 100644
index 0000000..35c389d
Binary files /dev/null and b/lib/modules/4.4.60/nf_log_ipv6.ko differ
diff --git a/lib/modules/4.4.60/nf_nat.ko b/lib/modules/4.4.60/nf_nat.ko
new file mode 100644
index 0000000..1e9a45f
Binary files /dev/null and b/lib/modules/4.4.60/nf_nat.ko differ
diff --git a/lib/modules/4.4.60/nf_nat_ipv4.ko b/lib/modules/4.4.60/nf_nat_ipv4.ko
new file mode 100644
index 0000000..f1acdb9
Binary files /dev/null and b/lib/modules/4.4.60/nf_nat_ipv4.ko differ
diff --git a/lib/modules/4.4.60/nf_nat_masquerade_ipv4.ko b/lib/modules/4.4.60/nf_nat_masquerade_ipv4.ko
new file mode 100644
index 0000000..28502cf
Binary files /dev/null and b/lib/modules/4.4.60/nf_nat_masquerade_ipv4.ko differ
diff --git a/lib/modules/4.4.60/nf_nat_redirect.ko b/lib/modules/4.4.60/nf_nat_redirect.ko
new file mode 100644
index 0000000..37b2ca7
Binary files /dev/null and b/lib/modules/4.4.60/nf_nat_redirect.ko differ
diff --git a/lib/modules/4.4.60/nf_reject_ipv4.ko b/lib/modules/4.4.60/nf_reject_ipv4.ko
new file mode 100644
index 0000000..08370b9
Binary files /dev/null and b/lib/modules/4.4.60/nf_reject_ipv4.ko differ
diff --git a/lib/modules/4.4.60/nf_reject_ipv6.ko b/lib/modules/4.4.60/nf_reject_ipv6.ko
new file mode 100644
index 0000000..ebe24b2
Binary files /dev/null and b/lib/modules/4.4.60/nf_reject_ipv6.ko differ
diff --git a/lib/modules/4.4.60/ppp_async.ko b/lib/modules/4.4.60/ppp_async.ko
new file mode 100644
index 0000000..f8a7ae9
Binary files /dev/null and b/lib/modules/4.4.60/ppp_async.ko differ
diff --git a/lib/modules/4.4.60/ppp_generic.ko b/lib/modules/4.4.60/ppp_generic.ko
new file mode 100644
index 0000000..d76b4f7
Binary files /dev/null and b/lib/modules/4.4.60/ppp_generic.ko differ
diff --git a/lib/modules/4.4.60/qca-ssdk.ko b/lib/modules/4.4.60/qca-ssdk.ko
new file mode 100644
index 0000000..f3742da
Binary files /dev/null and b/lib/modules/4.4.60/qca-ssdk.ko differ
diff --git a/lib/modules/4.4.60/qca_da.ko b/lib/modules/4.4.60/qca_da.ko
new file mode 100644
index 0000000..54eec93
Binary files /dev/null and b/lib/modules/4.4.60/qca_da.ko differ
diff --git a/lib/modules/4.4.60/qca_ol.ko b/lib/modules/4.4.60/qca_ol.ko
new file mode 100644
index 0000000..bdba3e9
Binary files /dev/null and b/lib/modules/4.4.60/qca_ol.ko differ
diff --git a/lib/modules/4.4.60/qdf.ko b/lib/modules/4.4.60/qdf.ko
new file mode 100644
index 0000000..7891205
Binary files /dev/null and b/lib/modules/4.4.60/qdf.ko differ
diff --git a/lib/modules/4.4.60/slhc.ko b/lib/modules/4.4.60/slhc.ko
new file mode 100644
index 0000000..7031a88
Binary files /dev/null and b/lib/modules/4.4.60/slhc.ko differ
diff --git a/lib/modules/4.4.60/smart_antenna.ko b/lib/modules/4.4.60/smart_antenna.ko
new file mode 100644
index 0000000..f24ad53
Binary files /dev/null and b/lib/modules/4.4.60/smart_antenna.ko differ
diff --git a/lib/modules/4.4.60/ts_bm.ko b/lib/modules/4.4.60/ts_bm.ko
new file mode 100644
index 0000000..be7db81
Binary files /dev/null and b/lib/modules/4.4.60/ts_bm.ko differ
diff --git a/lib/modules/4.4.60/ts_fsm.ko b/lib/modules/4.4.60/ts_fsm.ko
new file mode 100644
index 0000000..707d5d9
Binary files /dev/null and b/lib/modules/4.4.60/ts_fsm.ko differ
diff --git a/lib/modules/4.4.60/ts_kmp.ko b/lib/modules/4.4.60/ts_kmp.ko
new file mode 100644
index 0000000..a61038c
Binary files /dev/null and b/lib/modules/4.4.60/ts_kmp.ko differ
diff --git a/lib/modules/4.4.60/umac.ko b/lib/modules/4.4.60/umac.ko
new file mode 100644
index 0000000..f2d95ec
Binary files /dev/null and b/lib/modules/4.4.60/umac.ko differ
diff --git a/lib/modules/4.4.60/x_tables.ko b/lib/modules/4.4.60/x_tables.ko
new file mode 100644
index 0000000..75e2986
Binary files /dev/null and b/lib/modules/4.4.60/x_tables.ko differ
diff --git a/lib/modules/4.4.60/xt_CT.ko b/lib/modules/4.4.60/xt_CT.ko
new file mode 100644
index 0000000..112cda7
Binary files /dev/null and b/lib/modules/4.4.60/xt_CT.ko differ
diff --git a/lib/modules/4.4.60/xt_LOG.ko b/lib/modules/4.4.60/xt_LOG.ko
new file mode 100644
index 0000000..c47bffb
Binary files /dev/null and b/lib/modules/4.4.60/xt_LOG.ko differ
diff --git a/lib/modules/4.4.60/xt_REDIRECT.ko b/lib/modules/4.4.60/xt_REDIRECT.ko
new file mode 100644
index 0000000..02f00c8
Binary files /dev/null and b/lib/modules/4.4.60/xt_REDIRECT.ko differ
diff --git a/lib/modules/4.4.60/xt_TCPMSS.ko b/lib/modules/4.4.60/xt_TCPMSS.ko
new file mode 100644
index 0000000..3568eec
Binary files /dev/null and b/lib/modules/4.4.60/xt_TCPMSS.ko differ
diff --git a/lib/modules/4.4.60/xt_addrtype.ko b/lib/modules/4.4.60/xt_addrtype.ko
new file mode 100644
index 0000000..2a0203d
Binary files /dev/null and b/lib/modules/4.4.60/xt_addrtype.ko differ
diff --git a/lib/modules/4.4.60/xt_comment.ko b/lib/modules/4.4.60/xt_comment.ko
new file mode 100644
index 0000000..b60448b
Binary files /dev/null and b/lib/modules/4.4.60/xt_comment.ko differ
diff --git a/lib/modules/4.4.60/xt_conntrack.ko b/lib/modules/4.4.60/xt_conntrack.ko
new file mode 100644
index 0000000..dcbaa85
Binary files /dev/null and b/lib/modules/4.4.60/xt_conntrack.ko differ
diff --git a/lib/modules/4.4.60/xt_id.ko b/lib/modules/4.4.60/xt_id.ko
new file mode 100644
index 0000000..8eba3af
Binary files /dev/null and b/lib/modules/4.4.60/xt_id.ko differ
diff --git a/lib/modules/4.4.60/xt_limit.ko b/lib/modules/4.4.60/xt_limit.ko
new file mode 100644
index 0000000..d22dd9d
Binary files /dev/null and b/lib/modules/4.4.60/xt_limit.ko differ
diff --git a/lib/modules/4.4.60/xt_mac.ko b/lib/modules/4.4.60/xt_mac.ko
new file mode 100644
index 0000000..fd2a660
Binary files /dev/null and b/lib/modules/4.4.60/xt_mac.ko differ
diff --git a/lib/modules/4.4.60/xt_mark.ko b/lib/modules/4.4.60/xt_mark.ko
new file mode 100644
index 0000000..ee00403
Binary files /dev/null and b/lib/modules/4.4.60/xt_mark.ko differ
diff --git a/lib/modules/4.4.60/xt_multiport.ko b/lib/modules/4.4.60/xt_multiport.ko
new file mode 100644
index 0000000..dd129ab
Binary files /dev/null and b/lib/modules/4.4.60/xt_multiport.ko differ
diff --git a/lib/modules/4.4.60/xt_nat.ko b/lib/modules/4.4.60/xt_nat.ko
new file mode 100644
index 0000000..9bd654f
Binary files /dev/null and b/lib/modules/4.4.60/xt_nat.ko differ
diff --git a/lib/modules/4.4.60/xt_owner.ko b/lib/modules/4.4.60/xt_owner.ko
new file mode 100644
index 0000000..271c11b
Binary files /dev/null and b/lib/modules/4.4.60/xt_owner.ko differ
diff --git a/lib/modules/4.4.60/xt_physdev.ko b/lib/modules/4.4.60/xt_physdev.ko
new file mode 100644
index 0000000..a11ddd1
Binary files /dev/null and b/lib/modules/4.4.60/xt_physdev.ko differ
diff --git a/lib/modules/4.4.60/xt_pkttype.ko b/lib/modules/4.4.60/xt_pkttype.ko
new file mode 100644
index 0000000..9af1919
Binary files /dev/null and b/lib/modules/4.4.60/xt_pkttype.ko differ
diff --git a/lib/modules/4.4.60/xt_quota.ko b/lib/modules/4.4.60/xt_quota.ko
new file mode 100644
index 0000000..687498e
Binary files /dev/null and b/lib/modules/4.4.60/xt_quota.ko differ
diff --git a/lib/modules/4.4.60/xt_state.ko b/lib/modules/4.4.60/xt_state.ko
new file mode 100644
index 0000000..ba1f7cd
Binary files /dev/null and b/lib/modules/4.4.60/xt_state.ko differ
diff --git a/lib/modules/4.4.60/xt_string.ko b/lib/modules/4.4.60/xt_string.ko
new file mode 100644
index 0000000..9f487d3
Binary files /dev/null and b/lib/modules/4.4.60/xt_string.ko differ
diff --git a/lib/modules/4.4.60/xt_tcpudp.ko b/lib/modules/4.4.60/xt_tcpudp.ko
new file mode 100644
index 0000000..f809eed
Binary files /dev/null and b/lib/modules/4.4.60/xt_tcpudp.ko differ
diff --git a/lib/modules/4.4.60/xt_time.ko b/lib/modules/4.4.60/xt_time.ko
new file mode 100644
index 0000000..ff6241f
Binary files /dev/null and b/lib/modules/4.4.60/xt_time.ko differ
diff --git a/lib/netifd/dhcp.script b/lib/netifd/dhcp.script
new file mode 100755
index 0000000..b3a61e2
--- /dev/null
+++ b/lib/netifd/dhcp.script
@@ -0,0 +1,102 @@
+#!/bin/sh
+[ -z "$1" ] && echo "Error: should be run by udhcpc" && exit 1
+
+. /lib/functions.sh
+. /lib/netifd/netifd-proto.sh
+
+set_classless_routes() {
+	local max=128
+	while [ -n "$1" -a -n "$2" -a $max -gt 0 ]; do
+		proto_add_ipv4_route "${1%%/*}" "${1##*/}" "$2" "$ip"
+		max=$(($max-1))
+		shift 2
+	done
+}
+
+setup_interface () {
+	proto_init_update "*" 1
+	proto_add_ipv4_address "$ip" "${subnet:-255.255.255.0}"
+	# TODO: apply $broadcast
+
+	for i in $router; do
+		proto_add_ipv4_route "$i" 32 "" "$ip"
+		proto_add_ipv4_route 0.0.0.0 0 "$i" "$ip"
+
+		for r in $CUSTOMROUTES; do
+			proto_add_ipv4_route "${r%%/*}" "${r##*/}" "$i" "$ip"
+		done
+	done
+
+	# CIDR STATIC ROUTES (rfc3442)
+	[ -n "$staticroutes" ] && set_classless_routes $staticroutes
+	[ -n "$msstaticroutes" ] && set_classless_routes $msstaticroutes
+
+	for dns in $dns; do
+		proto_add_dns_server "$dns"
+	done
+	for domain in $domain; do
+		proto_add_dns_search "$domain"
+	done
+
+	proto_add_data
+	[ -n "$ZONE" ]     && json_add_string zone "$ZONE"
+	[ -n "$ntpsrv" ]   && json_add_string ntpserver "$ntpsrv"
+	[ -n "$timesvr" ]  && json_add_string timeserver "$timesvr"
+	[ -n "$hostname" ] && json_add_string hostname "$hostname"
+	[ -n "$message" ]  && json_add_string message "$message"
+	[ -n "$timezone" ] && json_add_int timezone "$timezone"
+	[ -n "$lease" ]    && json_add_int leasetime "$lease"
+	proto_close_data
+
+	proto_send_update "$INTERFACE"
+
+
+	if [ "$IFACE6RD" != 0 -a -n "$ip6rd" ]; then
+		local v4mask="${ip6rd%% *}"
+		ip6rd="${ip6rd#* }"
+		local ip6rdprefixlen="${ip6rd%% *}"
+		ip6rd="${ip6rd#* }"
+		local ip6rdprefix="${ip6rd%% *}"
+		ip6rd="${ip6rd#* }"
+		local ip6rdbr="${ip6rd%% *}"
+
+		[ -n "$ZONE" ] || ZONE=$(fw3 -q network $INTERFACE)
+		[ -z "$IFACE6RD" -o "$IFACE6RD" = 1 ] && IFACE6RD=${INTERFACE}_6
+
+		json_init
+		json_add_string name "$IFACE6RD"
+		json_add_string ifname "@$INTERFACE"
+		json_add_string proto "6rd"
+		json_add_string peeraddr "$ip6rdbr"
+		json_add_int ip4prefixlen "$v4mask"
+		json_add_string ip6prefix "$ip6rdprefix"
+		json_add_int ip6prefixlen "$ip6rdprefixlen"
+		json_add_string tunlink "$INTERFACE"
+		[ -n "$IFACE6RD_DELEGATE" ] && json_add_boolean delegate "$IFACE6RD_DELEGATE"
+		[ -n "$ZONE6RD" ] || ZONE6RD=$ZONE
+		[ -n "$ZONE6RD" ] && json_add_string zone "$ZONE6RD"
+		[ -n "$MTU6RD" ] && json_add_string mtu "$MTU6RD"
+		json_close_object
+
+		ubus call network add_dynamic "$(json_dump)"
+	fi
+}
+
+deconfig_interface() {
+	proto_init_update "*" 0
+	proto_send_update "$INTERFACE"
+}
+
+case "$1" in
+	deconfig)
+		deconfig_interface
+	;;
+	renew|bound)
+		setup_interface
+	;;
+esac
+
+# user rules
+[ -f /etc/udhcpc.user ] && . /etc/udhcpc.user "$@"
+
+exit 0
diff --git a/lib/netifd/dhcpv6.script b/lib/netifd/dhcpv6.script
new file mode 100755
index 0000000..677d35f
--- /dev/null
+++ b/lib/netifd/dhcpv6.script
@@ -0,0 +1,214 @@
+#!/bin/sh
+[ -z "$2" ] && echo "Error: should be run by odhcpc6c" && exit 1
+. /lib/functions.sh
+. /lib/netifd/netifd-proto.sh
+
+setup_interface () {
+	local device="$1"
+	local prefsig=""
+	local addrsig=""
+	proto_init_update "*" 1
+
+	# Merge RA-DNS
+	for radns in $RA_DNS; do
+		local duplicate=0
+		for dns in $RDNSS; do
+			[ "$radns" = "$dns" ] && duplicate=1
+		done
+		[ "$duplicate" = 0 ] && RDNSS="$RDNSS $radns"
+	done
+
+	for dns in $RDNSS; do
+		proto_add_dns_server "$dns"
+	done
+
+	for radomain in $RA_DOMAINS; do
+		local duplicate=0
+		for domain in $DOMAINS; do
+			[ "$radomain" = "$domain" ] && duplicate=1
+		done
+		[ "$duplicate" = 0 ] && DOMAINS="$DOMAINS $radomain"
+	done
+
+	for domain in $DOMAINS; do
+		proto_add_dns_search "$domain"
+	done
+
+	for prefix in $PREFIXES; do
+		proto_add_ipv6_prefix "$prefix"
+		prefsig="$prefsig ${prefix%%,*}"
+		local entry="${prefix#*/}"
+		entry="${entry#*,}"
+		entry="${entry#*,}"
+		local valid="${entry%%,*}"
+
+		if [ -z "$RA_ADDRESSES" -a -z "$RA_ROUTES" -a \
+				-z "$RA_DNS" -a "$FAKE_ROUTES" = 1 ]; then
+			RA_ROUTES="::/0,$SERVER,$valid,4096"
+		fi
+	done
+
+	[ -n "$USERPREFIX" ] && proto_add_ipv6_prefix "$USERPREFIX"
+
+	# Merge addresses
+	for entry in $RA_ADDRESSES; do
+		local duplicate=0
+		local addr="${entry%%/*}"
+		for dentry in $ADDRESSES; do
+			local daddr="${dentry%%/*}"
+			[ "$addr" = "$daddr" ] && duplicate=1
+		done
+		[ "$duplicate" = "0" ] && ADDRESSES="$ADDRESSES $entry"
+	done
+
+	for entry in $ADDRESSES; do
+		local addr="${entry%%/*}"
+		entry="${entry#*/}"
+		local mask="${entry%%,*}"
+		entry="${entry#*,}"
+		local preferred="${entry%%,*}"
+		entry="${entry#*,}"
+		local valid="${entry%%,*}"
+
+		proto_add_ipv6_address "$addr" "$mask" "$preferred" "$valid" 1
+		addrsig="$addrsig $addr/$mask"
+
+		if [ -z "$RA_ADDRESSES" -a -z "$RA_ROUTES" -a \
+				-z "$RA_DNS" -a "$FAKE_ROUTES" = 1 ]; then
+			RA_ROUTES="::/0,$SERVER,$valid,4096"
+		fi
+	done
+
+	for entry in $RA_ROUTES; do
+		local duplicate=$NOSOURCEFILTER
+		local addr="${entry%%/*}"
+		entry="${entry#*/}"
+		local mask="${entry%%,*}"
+		entry="${entry#*,}"
+		local gw="${entry%%,*}"
+		entry="${entry#*,}"
+		local valid="${entry%%,*}"
+		entry="${entry#*,}"
+		local metric="${entry%%,*}"
+
+		for xentry in $RA_ROUTES; do
+			local xprefix="${xentry%%,*}"
+			xentry="${xentry#*,}"
+			local xgw="${xentry%%,*}"
+
+			[ -n "$gw" -a -z "$xgw" -a "$addr/$mask" = "$xprefix" ] && duplicate=1
+		done
+
+		if [ -z "$gw" -o "$duplicate" = 1 ]; then
+			proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid"
+		else
+			for prefix in $PREFIXES $ADDRESSES; do
+				local paddr="${prefix%%,*}"
+				proto_add_ipv6_route "$addr" "$mask" "$gw" "$metric" "$valid" "$paddr"
+			done
+		fi
+	done
+
+	proto_add_data
+	[ -n "$CER" ] && json_add_string cer "$CER"
+	[ -n "$PASSTHRU" ] && json_add_string passthru "$PASSTHRU"
+	[ -n "$ZONE" ] && json_add_string zone "$ZONE"
+	proto_close_data
+
+	proto_send_update "$INTERFACE"
+
+	MAPTYPE=""
+	MAPRULE=""
+
+	if [ -n "$MAPE" -a -f /lib/netifd/proto/map.sh ]; then
+		MAPTYPE="map-e"
+		MAPRULE="$MAPE"
+	elif [ -n "$MAPT" -a -f /lib/netifd/proto/map.sh -a -f /proc/net/nat46/control ]; then
+		MAPTYPE="map-t"
+		MAPRULE="$MAPT"
+	elif [ -n "$LW4O6" -a -f /lib/netifd/proto/map.sh ]; then
+		MAPTYPE="lw4o6"
+		MAPRULE="$LW4O6"
+	fi
+
+	[ -n "$ZONE" ] || ZONE=$(fw3 -q network $INTERFACE 2>/dev/null)
+
+	if [ "$IFACE_MAP" != 0 -a -n "$MAPTYPE" -a -n "$MAPRULE" ]; then
+		[ -z "$IFACE_MAP" -o "$IFACE_MAP" = 1 ] && IFACE_MAP=${INTERFACE}_4
+		json_init
+		json_add_string name "$IFACE_MAP"
+		json_add_string ifname "@$INTERFACE"
+		json_add_string proto map
+		json_add_string type "$MAPTYPE"
+		json_add_string _prefsig "$prefsig"
+		[ "$MAPTYPE" = lw4o6 ] && json_add_string _addrsig "$addrsig"
+		json_add_string rule "$MAPRULE"
+		json_add_string tunlink "$INTERFACE"
+		[ -n "$ZONE_MAP" ] || ZONE_MAP=$ZONE
+		[ -n "$ZONE_MAP" ] && json_add_string zone "$ZONE_MAP"
+		[ -n "$IFACE_MAP_DELEGATE" ] && json_add_boolean delegate "$IFACE_MAP_DELEGATE"
+		json_close_object
+		ubus call network add_dynamic "$(json_dump)"
+	elif [ -n "$AFTR" -a "$IFACE_DSLITE" != 0 -a -f /lib/netifd/proto/dslite.sh ]; then
+		[ -z "$IFACE_DSLITE" -o "$IFACE_DSLITE" = 1 ] && IFACE_DSLITE=${INTERFACE}_4
+		json_init
+		json_add_string name "$IFACE_DSLITE"
+		json_add_string ifname "@$INTERFACE"
+		json_add_string proto "dslite"
+		json_add_string peeraddr "$AFTR"
+		json_add_string tunlink "$INTERFACE"
+		[ -n "$ZONE_DSLITE" ] || ZONE_DSLITE=$ZONE
+		[ -n "$ZONE_DSLITE" ] && json_add_string zone "$ZONE_DSLITE"
+		[ -n "$IFACE_DSLITE_DELEGATE" ] && json_add_boolean delegate "$IFACE_DSLITE_DELEGATE"
+		json_close_object
+		ubus call network add_dynamic "$(json_dump)"
+	elif [ "$IFACE_464XLAT" != 0 -a -f /lib/netifd/proto/464xlat.sh ]; then
+		[ -z "$IFACE_464XLAT" -o "$IFACE_464XLAT" = 1 ] && IFACE_464XLAT=${INTERFACE}_4
+		json_init
+		json_add_string name "$IFACE_464XLAT"
+		json_add_string ifname "@$INTERFACE"
+		json_add_string proto "464xlat"
+		json_add_string tunlink "$INTERFACE"
+		json_add_string _addrsig "$addrsig"
+		[ -n "$ZONE_464XLAT" ] || ZONE_464XLAT=$ZONE
+		[ -n "$ZONE_464XLAT" ] && json_add_string zone "$ZONE_464XLAT"
+		[ -n "$IFACE_464XLAT_DELEGATE" ] && json_add_boolean delegate "$IFACE_464XLAT_DELEGATE"
+		json_close_object
+		ubus call network add_dynamic "$(json_dump)"
+	fi
+
+	# Apply IPv6 / ND configuration
+	HOPLIMIT=$(cat /proc/sys/net/ipv6/conf/$device/hop_limit)
+	[ -n "$RA_HOPLIMIT" -a -n "$HOPLIMIT" ] && [ "$RA_HOPLIMIT" -gt "$HOPLIMIT" ] && echo "$RA_HOPLIMIT" > /proc/sys/net/ipv6/conf/$device/hop_limit
+	[ -n "$RA_MTU" ] && [ "$RA_MTU" -gt 0 ] && echo "$RA_MTU" > /proc/sys/net/ipv6/conf/$device/mtu
+	[ -n "$RA_REACHABLE" ] && [ "$RA_REACHABLE" -gt 0 ] && echo "$RA_REACHABLE" > /proc/sys/net/ipv6/neigh/$device/base_reachable_time_ms
+	[ -n "$RA_RETRANSMIT" ] && [ "$RA_RETRANSMIT" -gt 0 ] && echo "$RA_RETRANSMIT" > /proc/sys/net/ipv6/neigh/$device/retrans_time_ms
+
+	# TODO: $SNTP_IP $SIP_IP $SNTP_FQDN $SIP_DOMAIN
+}
+
+teardown_interface() {
+	proto_init_update "*" 0
+	proto_send_update "$INTERFACE"
+}
+
+case "$2" in
+	bound)
+		teardown_interface "$1"
+		setup_interface "$1"
+	;;
+	informed|updated|rebound)
+		setup_interface "$1"
+	;;
+	ra-updated)
+		[ -n "$ADDRESSES$RA_ADDRESSES$PREFIXES$USERPREFIX" ] && setup_interface "$1"
+	;;
+	started|stopped|unbound)
+		teardown_interface "$1"
+	;;
+esac
+
+# user rules
+[ -f /etc/odhcp6c.user ] && . /etc/odhcp6c.user
+
+exit 0
diff --git a/lib/netifd/netifd-proto.sh b/lib/netifd/netifd-proto.sh
new file mode 100644
index 0000000..447f0f6
--- /dev/null
+++ b/lib/netifd/netifd-proto.sh
@@ -0,0 +1,401 @@
+NETIFD_MAIN_DIR="${NETIFD_MAIN_DIR:-/lib/netifd}"
+
+. /usr/share/libubox/jshn.sh
+. $NETIFD_MAIN_DIR/utils.sh
+
+proto_config_add_int() {
+	config_add_int "$@"
+}
+
+proto_config_add_string() {
+	config_add_string "$@"
+}
+
+proto_config_add_boolean() {
+	config_add_boolean "$@"
+}
+
+_proto_do_teardown() {
+	json_load "$data"
+	eval "proto_$1_teardown \"$interface\" \"$ifname\""
+}
+
+_proto_do_renew() {
+	json_load "$data"
+	eval "proto_$1_renew \"$interface\" \"$ifname\""
+}
+
+_proto_do_setup() {
+	json_load "$data"
+	_EXPORT_VAR=0
+	_EXPORT_VARS=
+	eval "proto_$1_setup \"$interface\" \"$ifname\""
+}
+
+proto_init_update() {
+	local ifname="$1"
+	local up="$2"
+	local external="$3"
+
+	PROTO_KEEP=0
+	PROTO_INIT=1
+	PROTO_TUNNEL_OPEN=
+	PROTO_IPADDR=
+	PROTO_IP6ADDR=
+	PROTO_ROUTE=
+	PROTO_ROUTE6=
+	PROTO_PREFIX6=
+	PROTO_DNS=
+	PROTO_DNS_SEARCH=
+	json_init
+	json_add_int action 0
+	[ -n "$ifname" -a "*" != "$ifname" ] && json_add_string "ifname" "$ifname"
+	json_add_boolean "link-up" "$up"
+	[ -n "$3" ] && json_add_boolean "address-external" "$external"
+}
+
+proto_set_keep() {
+	PROTO_KEEP="$1"
+}
+
+proto_close_nested() {
+	[ -n "$PROTO_NESTED_OPEN" ] && json_close_object
+	PROTO_NESTED_OPEN=
+}
+
+proto_add_nested() {
+	PROTO_NESTED_OPEN=1
+	json_add_object "$1"
+}
+
+proto_add_tunnel() {
+	proto_add_nested "tunnel"
+}
+
+proto_close_tunnel() {
+	proto_close_nested
+}
+
+proto_add_data() {
+	proto_add_nested "data"
+}
+
+proto_close_data() {
+	proto_close_nested
+}
+
+proto_add_dns_server() {
+	local address="$1"
+
+	append PROTO_DNS "$address"
+}
+
+proto_add_dns_search() {
+	local address="$1"
+
+	append PROTO_DNS_SEARCH "$address"
+}
+
+proto_add_ipv4_address() {
+	local address="$1"
+	local mask="$2"
+	local broadcast="$3"
+	local ptp="$4"
+
+	append PROTO_IPADDR "$address/$mask/$broadcast/$ptp"
+}
+
+proto_add_ipv6_address() {
+	local address="$1"
+	local mask="$2"
+	local preferred="$3"
+	local valid="$4"
+	local offlink="$5"
+	local class="$6"
+
+	append PROTO_IP6ADDR "$address/$mask/$preferred/$valid/$offlink/$class"
+}
+
+proto_add_ipv4_route() {
+	local target="$1"
+	local mask="$2"
+	local gw="$3"
+	local source="$4"
+	local metric="$5"
+
+	append PROTO_ROUTE "$target/$mask/$gw/$metric///$source"
+}
+
+proto_add_ipv6_route() {
+	local target="$1"
+	local mask="$2"
+	local gw="$3"
+	local metric="$4"
+	local valid="$5"
+	local source="$6"
+	local table="$7"
+
+	append PROTO_ROUTE6 "$target/$mask/$gw/$metric/$valid/$table/$source"
+}
+
+proto_add_ipv6_prefix() {
+	local prefix="$1"
+	local valid="$2"
+	local preferred="$3"
+
+	if [ -z "$valid" ]; then
+		append PROTO_PREFIX6 "$prefix"
+	else
+		[ -z "$preferred" ] && preferred="$valid"
+		append PROTO_PREFIX6 "$prefix,$valid,$preferred"
+	fi
+}
+
+_proto_push_ipv4_addr() {
+	local str="$1"
+	local address mask broadcast ptp
+
+	address="${str%%/*}"
+	str="${str#*/}"
+	mask="${str%%/*}"
+	str="${str#*/}"
+	broadcast="${str%%/*}"
+	str="${str#*/}"
+	ptp="$str"
+
+	json_add_object ""
+	json_add_string ipaddr "$address"
+	[ -n "$mask" ] && json_add_string mask "$mask"
+	[ -n "$broadcast" ] && json_add_string broadcast "$broadcast"
+	[ -n "$ptp" ] && json_add_string ptp "$ptp"
+	json_close_object
+}
+
+_proto_push_ipv6_addr() {
+	local str="$1"
+	local address mask preferred valid offlink
+
+	address="${str%%/*}"
+	str="${str#*/}"
+	mask="${str%%/*}"
+	str="${str#*/}"
+	preferred="${str%%/*}"
+	str="${str#*/}"
+	valid="${str%%/*}"
+	str="${str#*/}"
+	offlink="${str%%/*}"
+	str="${str#*/}"
+	class="${str%%/*}"
+
+	json_add_object ""
+	json_add_string ipaddr "$address"
+	[ -n "$mask" ] && json_add_string mask "$mask"
+	[ -n "$preferred" ] && json_add_int preferred "$preferred"
+	[ -n "$valid" ] && json_add_int valid "$valid"
+	[ -n "$offlink" ] && json_add_boolean offlink "$offlink"
+	[ -n "$class" ] && json_add_string class "$class"
+	json_close_object
+}
+
+_proto_push_string() {
+	json_add_string "" "$1"
+}
+
+_proto_push_route() {
+	local str="$1";
+	local target="${str%%/*}"
+	str="${str#*/}"
+	local mask="${str%%/*}"
+	str="${str#*/}"
+	local gw="${str%%/*}"
+	str="${str#*/}"
+	local metric="${str%%/*}"
+	str="${str#*/}"
+	local valid="${str%%/*}"
+	str="${str#*/}"
+	local table="${str%%/*}"
+	str="${str#*/}"
+	local source="${str}"
+
+	json_add_object ""
+	json_add_string target "$target"
+	json_add_string netmask "$mask"
+	[ -n "$gw" ] && json_add_string gateway "$gw"
+	[ -n "$metric" ] && json_add_int metric "$metric"
+	[ -n "$valid" ] && json_add_int valid "$valid"
+	[ -n "$source" ] && json_add_string source "$source"
+	[ -n "$table" ] && json_add_string table "$table"
+	json_close_object
+}
+
+_proto_push_array() {
+	local name="$1"
+	local val="$2"
+	local cb="$3"
+
+	[ -n "$val" ] || return 0
+	json_add_array "$name"
+	for item in $val; do
+		eval "$cb \"\$item\""
+	done
+	json_close_array
+}
+
+_proto_notify() {
+	local interface="$1"
+	local options="$2"
+	json_add_string "interface" "$interface"
+	ubus $options call network.interface notify_proto "$(json_dump)"
+}
+
+proto_send_update() {
+	local interface="$1"
+
+	proto_close_nested
+	json_add_boolean keep "$PROTO_KEEP"
+	_proto_push_array "ipaddr" "$PROTO_IPADDR" _proto_push_ipv4_addr
+	_proto_push_array "ip6addr" "$PROTO_IP6ADDR" _proto_push_ipv6_addr
+	_proto_push_array "routes" "$PROTO_ROUTE" _proto_push_route
+	_proto_push_array "routes6" "$PROTO_ROUTE6" _proto_push_route
+	_proto_push_array "ip6prefix" "$PROTO_PREFIX6" _proto_push_string
+	_proto_push_array "dns" "$PROTO_DNS" _proto_push_string
+	_proto_push_array "dns_search" "$PROTO_DNS_SEARCH" _proto_push_string
+	_proto_notify "$interface"
+}
+
+proto_export() {
+	local var="VAR${_EXPORT_VAR}"
+	_EXPORT_VAR="$(($_EXPORT_VAR + 1))"
+	export -- "$var=$1"
+	append _EXPORT_VARS "$var"
+}
+
+proto_run_command() {
+	local interface="$1"; shift
+
+	json_init
+	json_add_int action 1
+	json_add_array command
+	while [ $# -gt 0 ]; do
+		json_add_string "" "$1"
+		shift
+	done
+	json_close_array
+	[ -n "$_EXPORT_VARS" ] && {
+		json_add_array env
+		for var in $_EXPORT_VARS; do
+			eval "json_add_string \"\" \"\${$var}\""
+		done
+		json_close_array
+	}
+	_proto_notify "$interface"
+}
+
+proto_kill_command() {
+	local interface="$1"; shift
+
+	json_init
+	json_add_int action 2
+	[ -n "$1" ] && json_add_int signal "$1"
+	_proto_notify "$interface"
+}
+
+proto_notify_error() {
+	local interface="$1"; shift
+
+	json_init
+	json_add_int action 3
+	json_add_array error
+	while [ $# -gt 0 ]; do
+		json_add_string "" "$1"
+		shift
+	done
+	json_close_array
+	_proto_notify "$interface"
+}
+
+proto_block_restart() {
+	local interface="$1"; shift
+
+	json_init
+	json_add_int action 4
+	_proto_notify "$interface"
+}
+
+proto_set_available() {
+	local interface="$1"
+	local state="$2"
+	json_init
+	json_add_int action 5
+	json_add_boolean available "$state"
+	_proto_notify "$interface"
+}
+
+proto_add_host_dependency() {
+	local interface="$1"
+	local host="$2"
+	local ifname="$3"
+
+	# execute in subshell to not taint callers env
+	# see tickets #11046, #11545, #11570
+	(
+		json_init
+		json_add_int action 6
+		json_add_string host "$host"
+		[ -n "$ifname" ] && json_add_string ifname "$ifname"
+		_proto_notify "$interface" -S
+	)
+}
+
+proto_setup_failed() {
+	local interface="$1"
+	json_init
+	json_add_int action 7
+	_proto_notify "$interface"
+}
+
+init_proto() {
+	proto="$1"; shift
+	cmd="$1"; shift
+
+	case "$cmd" in
+		dump)
+			add_protocol() {
+				no_device=0
+				no_proto_task=0
+				available=0
+				renew_handler=0
+
+				add_default_handler "proto_$1_init_config"
+
+				json_init
+				json_add_string "name" "$1"
+				json_add_array "config"
+				eval "proto_$1_init_config"
+				json_close_array
+				json_add_boolean no-device "$no_device"
+				json_add_boolean no-proto-task "$no_proto_task"
+				json_add_boolean available "$available"
+				json_add_boolean renew-handler "$renew_handler"
+				json_add_boolean lasterror "$lasterror"
+				json_dump
+			}
+		;;
+		setup|teardown|renew)
+			interface="$1"; shift
+			data="$1"; shift
+			ifname="$1"; shift
+
+			add_protocol() {
+				[[ "$proto" == "$1" ]] || return 0
+
+				case "$cmd" in
+					setup) _proto_do_setup "$1";;
+					teardown) _proto_do_teardown "$1" ;;
+					renew) _proto_do_renew "$1" ;;
+					*) return 1 ;;
+				esac
+			}
+		;;
+	esac
+}
diff --git a/lib/netifd/netifd-wireless.sh b/lib/netifd/netifd-wireless.sh
new file mode 100644
index 0000000..9062137
--- /dev/null
+++ b/lib/netifd/netifd-wireless.sh
@@ -0,0 +1,361 @@
+NETIFD_MAIN_DIR="${NETIFD_MAIN_DIR:-/lib/netifd}"
+
+. /usr/share/libubox/jshn.sh
+. $NETIFD_MAIN_DIR/utils.sh
+
+CMD_UP=0
+CMD_SET_DATA=1
+CMD_PROCESS_ADD=2
+CMD_PROCESS_KILL_ALL=3
+CMD_SET_RETRY=4
+
+add_driver() {
+	return
+}
+
+wireless_setup_vif_failed() {
+	local error="$1"
+	echo "Interface $_w_iface setup failed: $error"
+}
+
+wireless_setup_failed() {
+	local error="$1"
+
+	echo "Device setup failed: $error"
+	wireless_set_retry 0
+}
+
+prepare_key_wep() {
+	local key="$1"
+	local hex=1
+
+	echo -n "$key" | grep -qE "[^a-fA-F0-9]" && hex=0
+	[ "${#key}" -eq 10 -a $hex -eq 1 ] || \
+	[ "${#key}" -eq 26 -a $hex -eq 1 ] || {
+		[ "${key:0:2}" = "s:" ] && key="${key#s:}"
+		key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')"
+	}
+	echo "$key"
+}
+
+_wdev_prepare_channel() {
+	json_get_vars channel hwmode
+
+	auto_channel=0
+	enable_ht=0
+	htmode=
+	hwmode="${hwmode##11}"
+	hwmode_n="${hwmode##n}"
+
+	case "$channel" in
+		""|0|auto)
+			channel=0
+			auto_channel=1
+		;;
+		[0-9]*) ;;
+		*)
+			wireless_setup_failed "INVALID_CHANNEL"
+		;;
+	esac
+
+	[[ "$hwmode_n" = "$hwmode" ]] || {
+		enable_ht=1
+		hwmode="$hwmode_n"
+
+		json_get_vars htmode
+		case "$htmode" in
+			HT20|HT40+|HT40-);;
+			*) htmode= ;;
+		esac
+	}
+
+	case "$hwmode" in
+		a|b|g|ad) ;;
+		*)
+			if [ "$channel" -gt 14 ]; then
+				hwmode=a
+			else
+				hwmode=g
+			fi
+		;;
+	esac
+}
+
+_wdev_handler() {
+	json_load "$data"
+
+	json_select config
+	_wdev_prepare_channel
+	json_select ..
+
+	eval "drv_$1_$2 \"$interface\""
+}
+
+_wdev_msg_call() {
+	local old_cb
+
+	json_set_namespace wdev old_cb
+	"$@"
+	json_set_namespace $old_cb
+}
+
+_wdev_wrapper() {
+	while [ -n "$1" ]; do
+		eval "$1() { _wdev_msg_call _$1 \"\$@\"; }"
+		shift
+	done
+}
+
+_wdev_notify_init() {
+	local command="$1"
+	local interface="$2"
+
+	json_init
+	json_add_int "command" "$command"
+	json_add_string "device" "$__netifd_device"
+	[ -n "$interface" ] && json_add_string "interface" "$interface"
+	json_add_object "data"
+}
+
+_wdev_notify() {
+	local options="$1"
+
+	json_close_object
+	ubus $options call network.wireless notify "$(json_dump)"
+}
+
+_wdev_add_variables() {
+	while [ -n "$1" ]; do
+		local var="${1%%=*}"
+		local val="$1"
+		shift
+		[[ "$var" = "$val" ]] && continue
+		val="${val#*=}"
+		json_add_string "$var" "$val"
+	done
+}
+
+_wireless_add_vif() {
+	local name="$1"; shift
+	local ifname="$1"; shift
+
+	_wdev_notify_init $CMD_SET_DATA "$name"
+	json_add_string "ifname" "$ifname"
+	_wdev_add_variables "$@"
+	_wdev_notify
+}
+
+_wireless_set_up() {
+	_wdev_notify_init $CMD_UP
+	_wdev_notify
+}
+
+_wireless_set_data() {
+	_wdev_notify_init $CMD_SET_DATA
+	_wdev_add_variables "$@"
+	_wdev_notify
+}
+
+_wireless_add_process() {
+	_wdev_notify_init $CMD_PROCESS_ADD
+	local exe="$2"
+	[ -L "$exe" ] && exe="$(readlink -f "$exe")"
+	json_add_int pid "$1"
+	json_add_string exe "$exe"
+	[ -n "$3" ] && json_add_boolean required 1
+	exe2="$(readlink -f /proc/$1/exe)"
+	[ "$exe" != "$exe2" ] && echo "WARNING (wireless_add_process): executable path $exe does not match process $1 path ($exe2)"
+	_wdev_notify
+}
+
+_wireless_process_kill_all() {
+	_wdev_notify_init $CMD_PROCESS_KILL_ALL
+	[ -n "$1" ] && json_add_int signal "$1"
+	_wdev_notify
+}
+
+_wireless_set_retry() {
+	_wdev_notify_init $CMD_SET_RETRY
+	json_add_int retry "$1"
+	_wdev_notify
+}
+
+_wdev_wrapper \
+	wireless_add_vif \
+	wireless_set_up \
+	wireless_set_data \
+	wireless_add_process \
+	wireless_process_kill_all \
+	wireless_set_retry \
+
+wireless_vif_parse_encryption() {
+	json_get_vars encryption
+	set_default encryption none
+
+	auth_mode_open=1
+	auth_mode_shared=0
+	auth_type=none
+	wpa=0
+	wpa_pairwise=
+	eapol_key_index_workaround=0
+
+	case "$encryption" in
+		*tkip+aes|*tkip+ccmp|*aes+tkip|*ccmp+tkip) wpa_pairwise="CCMP TKIP";;
+		*aes|*ccmp| psk2 | wpa2) wpa_pairwise="CCMP";;
+		*tkip | wpa | psk) wpa_pairwise="TKIP";;
+	esac
+
+
+	# Examples:
+	# psk-mixed/tkip    => WPA1+2 PSK, TKIP
+	# wpa-psk2/tkip+aes => WPA2 PSK, CCMP+TKIP
+	# wpa2/tkip+aes     => WPA2 RADIUS, CCMP+TKIP
+
+	case "$encryption" in
+		none)
+			wpa=0
+			wpa_pairwise=
+		;;
+		wpa2*|*psk2*)
+			wpa=2
+		;;
+		*mixed*)
+			wpa=3
+			wpa_pairwise="CCMP TKIP"
+		;;
+		wpa*|*psk*)
+			wpa=1
+		;;
+		*)
+			wpa=0
+			wpa_pairwise=
+		;;
+	esac
+
+	# Standlone TKIP is no longer allowed
+	# TKIP alone is now prohibited by WFA so the only
+	# combination left must be CCMP+TKIP (wpa=3)
+	[ "$wpa_pairwise" = "TKIP" ] && {
+		wpa=3
+		wpa_pairwise="CCMP TKIP"
+	}
+
+	case "$encryption" in
+		*psk*)
+			auth_type=psk
+		;;
+		*wpa*)
+			auth_type=eap
+			eapol_key_index_workaround=1
+		;;
+		*8021x*)
+			auth_type=eap
+			eapol_version=2
+			eap_server=0
+		;;
+		*wep*)
+			auth_type=wep
+			wpa=0
+			wpa_pairwise=
+			case "$encryption" in
+				*shared*)
+					auth_mode_open=0
+					auth_mode_shared=1
+				;;
+				*mixed*)
+					auth_mode_shared=1
+				;;
+			esac
+		;;
+		*sae*)
+			auth_type=sae
+		;;
+	esac
+}
+
+_wireless_set_brsnoop_isolation() {
+	local multicast_to_unicast="$1"
+	local isolate
+
+	json_get_var isolate isolate
+
+	[ ${isolate:-0} -gt 0 -o -z "$network_bridge" ] && return
+	[ ${multicast_to_unicast:-0} -gt 0 ] && json_add_boolean isolate 1
+}
+
+for_each_interface() {
+	local _w_types="$1"; shift
+	local _w_ifaces _w_iface
+	local _w_type
+	local _w_found
+
+	local multicast_to_unicast
+
+	json_get_keys _w_ifaces interfaces
+	json_select interfaces
+	for _w_iface in $_w_ifaces; do
+		json_select "$_w_iface"
+		if [ -n "$_w_types" ]; then
+			json_get_var network_bridge bridge
+			json_get_var multicast_to_unicast multicast_to_unicast
+			json_select config
+			_wireless_set_brsnoop_isolation "$multicast_to_unicast"
+			json_get_var _w_type mode
+			json_select ..
+			_w_types=" $_w_types "
+			[[ "${_w_types%$_w_type*}" = "$_w_types" ]] && {
+				json_select ..
+				continue
+			}
+		fi
+		"$@" "$_w_iface"
+		json_select ..
+	done
+	json_select ..
+}
+
+_wdev_common_device_config() {
+	config_add_string channel hwmode htmode
+}
+
+_wdev_common_iface_config() {
+	config_add_string mode ssid encryption 'key:wpakey'
+}
+
+init_wireless_driver() {
+	name="$1"; shift
+	cmd="$1"; shift
+
+	case "$cmd" in
+		dump)
+			add_driver() {
+				eval "drv_$1_cleanup"
+
+				json_init
+				json_add_string name "$1"
+
+				json_add_array device
+				_wdev_common_device_config
+				eval "drv_$1_init_device_config"
+				json_close_array
+
+				json_add_array iface
+				_wdev_common_iface_config
+				eval "drv_$1_init_iface_config"
+				json_close_array
+
+				json_dump
+			}
+		;;
+		setup|teardown)
+			interface="$1"; shift
+			data="$1"; shift
+			export __netifd_device="$interface"
+
+			add_driver() {
+				[[ "$name" == "$1" ]] || return 0
+				_wdev_handler "$1" "$cmd"
+			}
+		;;
+	esac
+}
diff --git a/lib/netifd/proto/dhcp.sh b/lib/netifd/proto/dhcp.sh
new file mode 100755
index 0000000..bf91c29
--- /dev/null
+++ b/lib/netifd/proto/dhcp.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. ../netifd-proto.sh
+init_proto "$@"
+
+proto_dhcp_init_config() {
+	renew_handler=1
+
+	proto_config_add_string 'ipaddr:ipaddr'
+	proto_config_add_string 'hostname:hostname'
+	proto_config_add_string clientid
+	proto_config_add_string vendorid
+	proto_config_add_boolean 'broadcast:bool'
+	proto_config_add_string 'reqopts:list(string)'
+	proto_config_add_string iface6rd
+	proto_config_add_string sendopts
+	proto_config_add_boolean delegate
+	proto_config_add_string zone6rd
+	proto_config_add_string zone
+	proto_config_add_string mtu6rd
+	proto_config_add_string customroutes
+}
+
+proto_dhcp_setup() {
+	local config="$1"
+	local iface="$2"
+
+	local ipaddr hostname clientid vendorid broadcast reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
+	json_get_vars ipaddr hostname clientid vendorid broadcast reqopts iface6rd sendopts delegate zone6rd zone mtu6rd customroutes
+
+	local opt dhcpopts
+	for opt in $reqopts; do
+		append dhcpopts "-O $opt"
+	done
+
+	for opt in $sendopts; do
+		append dhcpopts "-x $opt"
+	done
+
+	[ "$broadcast" = 1 ] && broadcast="-B" || broadcast=
+	[ -n "$clientid" ] && clientid="-x 0x3d:${clientid//:/}" || clientid="-C"
+	[ -n "$iface6rd" ] && proto_export "IFACE6RD=$iface6rd"
+	[ "$iface6rd" != 0 -a -f /lib/netifd/proto/6rd.sh ] && append dhcpopts "-O 212"
+	[ -n "$zone6rd" ] && proto_export "ZONE6RD=$zone6rd"
+	[ -n "$zone" ] && proto_export "ZONE=$zone"
+	[ -n "$mtu6rd" ] && proto_export "MTU6RD=$mtu6rd"
+	[ -n "$customroutes" ] && proto_export "CUSTOMROUTES=$customroutes"
+	[ "$delegate" = "0" ] && proto_export "IFACE6RD_DELEGATE=0"
+	[ -z "$hostname" ] && hostname="$(uci_get system @system[0] hostname OpenWrt)"
+
+	proto_export "INTERFACE=$config"
+	proto_run_command "$config" udhcpc \
+		-p /var/run/udhcpc-$iface.pid \
+		-s /lib/netifd/dhcp.script \
+		-f -t 0 -i "$iface" \
+		${ipaddr:+-r $ipaddr} \
+		${hostname:+-H $hostname} \
+		${vendorid:+-V $vendorid} \
+		$clientid $broadcast $dhcpopts
+}
+
+proto_dhcp_renew() {
+	local interface="$1"
+	# SIGUSR1 forces udhcpc to renew its lease
+	local sigusr1="$(kill -l SIGUSR1)"
+	[ -n "$sigusr1" ] && proto_kill_command "$interface" $sigusr1
+}
+
+proto_dhcp_teardown() {
+	local interface="$1"
+	proto_kill_command "$interface"
+}
+
+add_protocol dhcp
diff --git a/lib/netifd/proto/dhcpv6.sh b/lib/netifd/proto/dhcpv6.sh
new file mode 100755
index 0000000..4a453fd
--- /dev/null
+++ b/lib/netifd/proto/dhcpv6.sh
@@ -0,0 +1,101 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. ../netifd-proto.sh
+init_proto "$@"
+
+proto_dhcpv6_init_config() {
+	renew_handler=1
+
+	proto_config_add_string 'reqaddress:or("try","force","none")'
+	proto_config_add_string 'reqprefix:or("auto","no",range(0, 64))'
+	proto_config_add_string clientid
+	proto_config_add_string 'reqopts:list(uinteger)'
+	proto_config_add_string 'noslaaconly:bool'
+	proto_config_add_string 'forceprefix:bool'
+	proto_config_add_string 'norelease:bool'
+	proto_config_add_string 'ip6prefix:ip6addr'
+	proto_config_add_string iface_dslite
+	proto_config_add_string zone_dslite
+	proto_config_add_string iface_map
+	proto_config_add_string zone_map
+	proto_config_add_string iface_464xlat
+	proto_config_add_string zone_464xlat
+	proto_config_add_string zone
+	proto_config_add_string 'ifaceid:ip6addr'
+	proto_config_add_string "userclass"
+	proto_config_add_string "vendorclass"
+	proto_config_add_boolean delegate
+	proto_config_add_int "soltimeout"
+	proto_config_add_boolean fakeroutes
+	proto_config_add_boolean sourcefilter
+}
+
+proto_dhcpv6_setup() {
+	local config="$1"
+	local iface="$2"
+
+	local reqaddress reqprefix clientid reqopts noslaaconly forceprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes sourcefilter
+	json_get_vars reqaddress reqprefix clientid reqopts noslaaconly forceprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes sourcefilter
+
+
+	# Configure
+	local opts=""
+	[ -n "$reqaddress" ] && append opts "-N$reqaddress"
+
+	[ -z "$reqprefix" -o "$reqprefix" = "auto" ] && reqprefix=0
+	[ "$reqprefix" != "no" ] && append opts "-P$reqprefix"
+
+	[ -n "$clientid" ] && append opts "-c$clientid"
+
+	[ "$noslaaconly" = "1" ] && append opts "-S"
+
+	[ "$forceprefix" = "1" ] && append opts "-F"
+
+	[ "$norelease" = "1" ] && append opts "-k"
+
+	[ -n "$ifaceid" ] && append opts "-i$ifaceid"
+
+	[ -n "$vendorclass" ] && append opts "-V$vendorclass"
+
+	[ -n "$userclass" ] && append opts "-u$userclass"
+
+	for opt in $reqopts; do
+		append opts "-r$opt"
+	done
+
+	append opts "-t${soltimeout:-120}"
+
+	[ -n "$ip6prefix" ] && proto_export "USERPREFIX=$ip6prefix"
+	[ -n "$iface_dslite" ] && proto_export "IFACE_DSLITE=$iface_dslite"
+	[ -n "$iface_map" ] && proto_export "IFACE_MAP=$iface_map"
+	[ -n "$iface_464xlat" ] && proto_export "IFACE_464XLAT=$iface_464xlat"
+	[ "$delegate" = "0" ] && proto_export "IFACE_DSLITE_DELEGATE=0"
+	[ "$delegate" = "0" ] && proto_export "IFACE_MAP_DELEGATE=0"
+	[ -n "$zone_dslite" ] && proto_export "ZONE_DSLITE=$zone_dslite"
+	[ -n "$zone_map" ] && proto_export "ZONE_MAP=$zone_map"
+	[ -n "$zone_464xlat" ] && proto_export "ZONE_464XLAT=$zone_464xlat"
+	[ -n "$zone" ] && proto_export "ZONE=$zone"
+	[ "$fakeroutes" != "0" ] && proto_export "FAKE_ROUTES=1"
+	[ "$sourcefilter" = "0" ] && proto_export "NOSOURCEFILTER=1"
+
+	proto_export "INTERFACE=$config"
+	proto_run_command "$config" odhcp6c \
+		-s /lib/netifd/dhcpv6.script \
+		$opts $iface
+}
+
+proto_dhcpv6_renew() {
+	local interface="$1"
+	# SIGUSR1 forces odhcp6c to renew its lease
+	local sigusr1="$(kill -l SIGUSR1)"
+	[ -n "$sigusr1" ] && proto_kill_command "$interface" $sigusr1
+}
+
+proto_dhcpv6_teardown() {
+	local interface="$1"
+	proto_kill_command "$interface"
+}
+
+add_protocol dhcpv6
+
diff --git a/lib/netifd/utils.sh b/lib/netifd/utils.sh
new file mode 100644
index 0000000..60470a5
--- /dev/null
+++ b/lib/netifd/utils.sh
@@ -0,0 +1,50 @@
+N="
+"
+
+append() {
+	local var="$1"
+	local value="$2"
+	local sep="${3:- }"
+
+	eval "export -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
+}
+
+add_default_handler() {
+	case "$(type $1 2>/dev/null)" in
+		*function*) return;;
+		*) eval "$1() { return; }"
+	esac
+}
+
+set_default() {
+	local __s_var="$1"
+	local __s_val="$2"
+	eval "export -- \"$__s_var=\${$__s_var:-\$__s_val}\""
+}
+
+_config_add_generic() {
+	local type="$1"; shift
+
+	for name in "$@"; do
+		json_add_array ""
+		json_add_string "" "$name"
+		json_add_int "" "$type"
+		json_close_array
+	done
+}
+
+config_add_int() {
+	_config_add_generic 5 "$@"
+}
+
+config_add_array() {
+	_config_add_generic 1 "$@"
+}
+
+config_add_string() {
+	_config_add_generic 3 "$@"
+}
+
+config_add_boolean() {
+	_config_add_generic 7 "$@"
+}
diff --git a/lib/network/config.sh b/lib/network/config.sh
new file mode 100755
index 0000000..9128971
--- /dev/null
+++ b/lib/network/config.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+# Copyright (C) 2011 OpenWrt.org
+
+. /usr/share/libubox/jshn.sh
+
+find_config() {
+	local device="$1"
+	local ifdev ifl3dev ifobj
+	for ifobj in `ubus list network.interface.\*`; do
+		interface="${ifobj##network.interface.}"
+		(
+			json_load "$(ifstatus $interface)"
+			json_get_var ifdev device
+			json_get_var ifl3dev l3_device
+			if [[ "$device" = "$ifdev" ]] || [[ "$device" = "$ifl3dev" ]]; then
+				echo "$interface"
+				exit 0
+			else
+				exit 1
+			fi
+		) && return
+	done
+}
+
+unbridge() {
+	return
+}
+
+ubus_call() {
+	json_init
+	local _data="$(ubus -S call "$1" "$2")"
+	[ -z "$_data" ] && return 1
+	json_load "$_data"
+	return 0
+}
+
+
+fixup_interface() {
+	local config="$1"
+	local ifname type device l3dev
+
+	config_get type "$config" type
+	config_get ifname "$config" ifname
+	config_get device "$config" device "$ifname"
+	[ "bridge" = "$type" ] && ifname="br-$config"
+	config_set "$config" device "$ifname"
+	ubus_call "network.interface.$config" status || return 0
+	json_get_var l3dev l3_device
+	[ -n "$l3dev" ] && ifname="$l3dev"
+	json_init
+	config_set "$config" ifname "$ifname"
+	config_set "$config" device "$device"
+}
+
+scan_interfaces() {
+	config_load network
+	config_foreach fixup_interface interface
+}
+
+prepare_interface_bridge() {
+	local config="$1"
+
+	[ -n "$config" ] || return 0
+	ubus call network.interface."$config" prepare
+}
+
+setup_interface() {
+	local iface="$1"
+	local config="$2"
+
+	[ -n "$config" ] || return 0
+	ubus call network.interface."$config" add_device "{ \"name\": \"$iface\" }"
+}
+
+do_sysctl() {
+	[ -n "$2" ] && \
+		sysctl -n -e -w "$1=$2" >/dev/null || \
+		sysctl -n -e "$1"
+}
diff --git a/lib/network/switch.sh b/lib/network/switch.sh
new file mode 100644
index 0000000..ba6924d
--- /dev/null
+++ b/lib/network/switch.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+# Copyright (C) 2009 OpenWrt.org
+
+setup_switch_dev() {
+	local name
+	config_get name "$1" name
+	name="${name:-$1}"
+	[ -d "/sys/class/net/$name" ] && ifconfig "$name" up
+	swconfig dev "$name" load network
+}
+
+setup_switch() {
+	config_load network
+	config_foreach setup_switch_dev switch
+}
diff --git a/lib/preinit/02_default_set_state b/lib/preinit/02_default_set_state
new file mode 100644
index 0000000..df43395
--- /dev/null
+++ b/lib/preinit/02_default_set_state
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+define_default_set_state() {
+	. /etc/diag.sh
+}
+
+boot_hook_add preinit_main define_default_set_state
diff --git a/lib/preinit/03_preinit_do_ar71xx.sh b/lib/preinit/03_preinit_do_ar71xx.sh
new file mode 100644
index 0000000..ff5407a
--- /dev/null
+++ b/lib/preinit/03_preinit_do_ar71xx.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+do_ar71xx() {
+	. /lib/ar71xx.sh
+
+	ar71xx_board_detect
+}
+
+boot_hook_add preinit_main do_ar71xx
diff --git a/lib/preinit/05_set_iface_mac_ar71xx b/lib/preinit/05_set_iface_mac_ar71xx
new file mode 100644
index 0000000..955e0be
--- /dev/null
+++ b/lib/preinit/05_set_iface_mac_ar71xx
@@ -0,0 +1,138 @@
+#!/bin/sh
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+
+. /lib/ar71xx.sh
+. /lib/functions.sh            
+. /lib/functions/system.sh
+
+fetch_mac_from_mtd() {
+        local mtd_part=$1
+        local lan_env=$2
+        local wan_env=$3
+        local mtd mac
+
+        mtd=$(grep $mtd_part /proc/mtd | cut -d: -f1)
+        [ -z $mtd ] && return
+
+        mac=$(grep $lan_env /dev/$mtd | cut -d= -f2)
+        [ ! -z $mac ] && ifconfig eth0 hw ether $mac 2>/dev/null
+
+        mac=$(grep $wan_env /dev/$mtd | cut -d= -f2)
+        [ ! -z $mac ] && ifconfig eth1 hw ether $mac 2>/dev/null
+}
+
+fetch_mac_from_uboot() {
+    tmpmac=`fw_printenv $1 2>&1`
+    case $tmpmac in
+    *Error*defined*)
+        ;;
+    *)
+        echo $tmpmac
+        ;;
+    esac
+}
+
+wp_gen_mac_addr() {
+    local addr_offset=$1
+    local bapt_name=$2
+    local bapt_mac=`fetch_mac_from_uboot $bapt_name | awk -F"=" '{print $2}'`
+
+    if [ -z $bapt_mac ]; then
+        local uboot_mac=`fetch_mac_from_uboot ethaddr | awk -F"=" '{print $2}'`
+        uboot_mac=`macaddr_canonicalize $uboot_mac`
+        local mac=`macaddr_add $uboot_mac $addr_offset`
+        local ret=0
+    else
+        local mac=`macaddr_canonicalize $bapt_mac`
+        local ret=1
+    fi  
+
+    echo $mac
+    return $ret
+}
+
+wp_set_mac_addr() {
+    local interface=$1
+    local addr_offset=$2
+    local bapt_name=$3
+
+    mac=`wp_gen_mac_addr $addr_offset $bapt_name`
+    local ret=$?
+    ifconfig $interface hw ether $mac 2>/dev/null
+    return $ret
+}
+
+wp_check_mac_addresses() {
+    eth0mac=`mtd_get_mac_binary art 0`      #0x0000
+    eth1mac=`mtd_get_mac_binary art 6`      #0x0006
+    wlan0mac=`mtd_get_mac_binary art 20486` #0x5006 #5 GHz section
+    wlan1mac=`mtd_get_mac_binary art 4098`  #0x1002 #2.4 GHz section
+
+    if [ "$eth0mac" == "00:c0:02:11:55:99" \
+        -a "$eth1mac" == "00:c0:02:11:55:88" \
+        -a "$wlan0mac" == "00:03:07:12:34:56" \
+        -a "$wlan1mac" == "00:c0:02:11:55:88" ]; then
+        return 1
+    fi
+    return 0
+}
+
+wp_set_wifi_mac_fixup() {
+    local phy=$1
+    local addr_offset=$2
+    local bapt_name=$3
+    uci_toggle_state wireless $phy "" phy
+    uci_set_state wireless $phy macaddr_fixup "$(wp_gen_mac_addr $addr_offset $bapt_name)"
+}
+
+preinit_set_mac_address() {
+        case $(ar71xx_board_name) in
+                tew-632brp)
+                        fetch_mac_from_mtd config lan_mac wan_mac
+                        ;;
+                dir-615-c1)
+                        fetch_mac_from_mtd config lan_mac wan_mac
+                        echo 1 > /sys/class/leds/dir-615-c1:green:wancpu/brightness
+                        ;;
+                dir-615-i1)
+                        fetch_mac_from_mtd nvram sys_lan_mac sys_wan_mac
+                        ;;
+                r6100)
+                        mac_lan=$(mtd_get_mac_binary caldata 0)
+                        [ -n "$mac_lan" ] && ifconfig eth1 hw ether "$mac_lan"
+                        mac_wan=$(mtd_get_mac_binary caldata 6)
+                        [ -n "$mac_wan" ] && ifconfig eth0 hw ether "$mac_wan"
+                        ;;
+                wrt160nl)
+                        fetch_mac_from_mtd nvram lan_hwaddr wan_hwaddr
+                        ;;
+                dvl-1200e|\
+                dvl-1750e)
+                        wp_check_mac_addresses
+                        if [ $? -eq 1 ]; then
+                            wp_set_mac_addr eth0 2 "MacAddress0"
+                            wp_set_mac_addr eth1 3 "MacAddress1"
+
+                            wp_set_wifi_mac_fixup phy0 1 "WiFiMacAddress1"
+                            wp_set_wifi_mac_fixup phy1 0 "WiFiMacAddress0"
+                        fi
+                        ;;
+                dvl-1200i|\
+                dvl-1750i|\
+                dvl-1750c|\
+                dvl-1750x)
+                        wp_check_mac_addresses
+                        if [ $? -eq 1 ]; then
+                            wp_set_mac_addr eth0 2 "MacAddress0"
+
+                            wp_set_wifi_mac_fixup phy0 1 "WiFiMacAddress1"
+                            wp_set_wifi_mac_fixup phy1 0 "WiFiMacAddress0"
+                        fi
+                        ;;
+        esac
+}
+
+boot_hook_add preinit_main preinit_set_mac_address
+
diff --git a/lib/preinit/05_set_preinit_iface_ar71xx b/lib/preinit/05_set_preinit_iface_ar71xx
new file mode 100644
index 0000000..f552453
--- /dev/null
+++ b/lib/preinit/05_set_preinit_iface_ar71xx
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+
+. /lib/ar71xx.sh
+
+set_preinit_iface() {
+	case $(ar71xx_board_name) in
+	alfa-ap96 |\
+	alfa-nx |\
+	ap135-020 |\
+	ap136-020 |\
+	ap83 |\
+	archer-c5 |\
+	archer-c7 |\
+	dir-505-a1 |\
+	gl-inet |\
+	jwap003 |\
+	pb42 |\
+	pb44 |\
+	rb-433 |\
+	rb-433u |\
+	rb-435g |\
+	rb-450 |\
+	rb-450g |\
+	routerstation |\
+	routerstation-pro |\
+	smart-300 |\
+	tl-mr3420-v2 |\
+	tl-wdr4900-v2 |\
+	tl-wr1043nd-v2 |\
+	tl-wr710n |\
+	tl-wr720n-v3 |\
+	tl-wr841n-v8 |\
+	tl-wr842n-v2 |\
+	tl-wr941nd-v6 |\
+	wnr2000-v3 |\
+	wnr2200 |\
+	wnr612-v2 |\
+	wnr1000-v2 |\
+	wpn824n |\
+	wpe72)
+		ifname=eth1
+		;;
+	*)
+		ifname=eth0
+		;;
+	esac
+}
+
+boot_hook_add preinit_main set_preinit_iface
+
+
+
diff --git a/lib/preinit/10_indicate_failsafe b/lib/preinit/10_indicate_failsafe
new file mode 100644
index 0000000..6afae41
--- /dev/null
+++ b/lib/preinit/10_indicate_failsafe
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+# commands for emitting messages to network in failsafe mode
+
+indicate_failsafe_led () {
+	set_state failsafe
+}
+
+indicate_failsafe() {
+	echo "- failsafe -"
+	preinit_net_echo "Entering Failsafe!\n"
+	indicate_failsafe_led
+}
+
+boot_hook_add failsafe indicate_failsafe
diff --git a/lib/preinit/10_indicate_preinit b/lib/preinit/10_indicate_preinit
new file mode 100644
index 0000000..8e94df9
--- /dev/null
+++ b/lib/preinit/10_indicate_preinit
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+preinit_ip() {
+	# if the preinit interface isn't specified and ifname is set in
+	# preinit.arch use that interface
+	if [ -z "$pi_ifname" ]; then
+		pi_ifname=$ifname
+	fi
+
+	[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
+		ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
+	}
+}
+
+preinit_ip_deconfig() {
+	[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
+		ifconfig $pi_ifname 0.0.0.0 down
+	}
+}
+
+preinit_net_echo() {
+	[ -n "$pi_ifname" ] && grep -q "$pi_ifname" /proc/net/dev && {
+		{
+			[ "$pi_preinit_net_messages" = "y" ] || {
+				[ "$pi_failsafe_net_message" = "true" ] &&
+					[ "$pi_preinit_no_failsafe_netmsg" != "y" ]
+			}
+		} && netmsg $pi_broadcast "$1"
+	}
+}
+
+preinit_echo() {
+	preinit_net_echo $1
+	echo $1
+}
+
+pi_indicate_preinit() {
+	preinit_net_echo "Doing OpenWrt Preinit\n"
+	set_state preinit
+}
+
+boot_hook_add preinit_main preinit_ip
+boot_hook_add preinit_main pi_indicate_preinit
diff --git a/lib/preinit/10_sysinfo b/lib/preinit/10_sysinfo
new file mode 100644
index 0000000..42fd5b6
--- /dev/null
+++ b/lib/preinit/10_sysinfo
@@ -0,0 +1,10 @@
+do_sysinfo_generic() {
+	[ -d /proc/device-tree ] || return
+	mkdir -p /tmp/sysinfo
+	[ -e /tmp/sysinfo/board_name ] || \
+		echo "$(strings /proc/device-tree/compatible | head -1)" > /tmp/sysinfo/board_name
+	[ -e /tmp/sysinfo/model ] || \
+		echo "$(cat /proc/device-tree/model)" > /tmp/sysinfo/model
+}
+
+boot_hook_add preinit_main do_sysinfo_generic
diff --git a/lib/preinit/30_failsafe_wait b/lib/preinit/30_failsafe_wait
new file mode 100644
index 0000000..5561a6f
--- /dev/null
+++ b/lib/preinit/30_failsafe_wait
@@ -0,0 +1,97 @@
+#!/bin/sh
+# Copyright (C) 2006-2010 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+fs_wait_for_key () {
+	local timeout=$3
+	local timer
+	local do_keypress
+	local keypress_true="$(mktemp)"
+	local keypress_wait="$(mktemp)"
+	local keypress_sec="$(mktemp)"
+	if [ -z "$keypress_wait" ]; then
+		keypress_wait=/tmp/.keypress_wait
+		touch $keypress_wait
+	fi
+	if [ -z "$keypress_true" ]; then
+		keypress_true=/tmp/.keypress_true
+		touch $keypress_true
+	fi
+	if [ -z "$keypress_sec" ]; then
+		keypress_sec=/tmp/.keypress_sec
+		touch $keypress_sec
+	fi
+
+	trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT
+	trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1
+
+	[ -n "$timeout" ] || timeout=1
+	[ $timeout -ge 1 ] || timeout=1
+	timer=$timeout
+	lock $keypress_wait
+	{
+		while [ $timer -gt 0 ]; do
+			echo "$timer" >$keypress_sec
+			timer=$(($timer - 1))
+			sleep 1
+		done
+		lock -u $keypress_wait
+		rm -f $keypress_wait
+	} &
+
+	echo "Press the [$1] key and hit [enter] $2"
+	echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level"
+	# if we're on the console we wait for input
+	{
+		while [ -r $keypress_wait ]; do
+			timer="$(cat $keypress_sec)"
+
+			[ -n "$timer" ] || timer=1
+			timer="${timer%%\ *}"
+			[ $timer -ge 1 ] || timer=1
+			do_keypress=""
+			{
+				read -t "$timer" do_keypress
+				case "$do_keypress" in
+				$1)
+					echo "true" >$keypress_true
+					;;
+				1 | 2 | 3 | 4)
+					echo "$do_keypress" >/tmp/debug_level
+					;;
+				*)
+					continue;
+					;;
+				esac
+				lock -u $keypress_wait
+				rm -f $keypress_wait
+			}
+		done
+	}
+	lock -w $keypress_wait
+
+	keypressed=1
+	[ "$(cat $keypress_true)" = "true" ] && keypressed=0
+
+	rm -f $keypress_true
+	rm -f $keypress_wait
+	rm -f $keypress_sec
+
+	return $keypressed
+}
+
+failsafe_wait() {
+	FAILSAFE=
+	grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE
+	if [ "$FAILSAFE" != "true" ]; then
+		pi_failsafe_net_message=true
+		preinit_net_echo "Please press button now to enter failsafe"
+		pi_failsafe_net_message=false
+		fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true
+		[ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -"
+		[ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe
+	fi
+}
+
+[ -e /etc/delos-pts-image-marker ] &&
+    boot_hook_add preinit_main failsafe_wait
diff --git a/lib/preinit/40_run_failsafe_hook b/lib/preinit/40_run_failsafe_hook
new file mode 100644
index 0000000..cb43ad3
--- /dev/null
+++ b/lib/preinit/40_run_failsafe_hook
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Copyright (C) 2006-2010 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+run_failsafe_hook() {
+    if [ "$FAILSAFE" = "true" ]; then
+	boot_run_hook failsafe
+	lock -w /tmp/.failsafe
+    fi
+}
+
+boot_hook_add preinit_main run_failsafe_hook
diff --git a/lib/preinit/50_indicate_regular_preinit b/lib/preinit/50_indicate_regular_preinit
new file mode 100644
index 0000000..5b7523f
--- /dev/null
+++ b/lib/preinit/50_indicate_regular_preinit
@@ -0,0 +1,10 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+indicate_regular_preinit() {
+	preinit_net_echo "Continuing with Regular Preinit\n"
+	set_state preinit_regular
+}
+
+boot_hook_add preinit_main indicate_regular_preinit
diff --git a/lib/preinit/70_initramfs_test b/lib/preinit/70_initramfs_test
new file mode 100644
index 0000000..8504e34
--- /dev/null
+++ b/lib/preinit/70_initramfs_test
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+initramfs_test() {
+	if [ -n "$INITRAMFS" ]; then
+		boot_run_hook initramfs
+		preinit_ip_deconfig
+		break
+	fi
+}
+
+boot_hook_add preinit_main initramfs_test
diff --git a/lib/preinit/80_mount_root b/lib/preinit/80_mount_root
new file mode 100644
index 0000000..582a209
--- /dev/null
+++ b/lib/preinit/80_mount_root
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+do_mount_root() {
+	echo "Before mount_root"
+	mount_root
+	boot_run_hook preinit_mount_root
+	[ -f /sysupgrade.tgz ] && {
+		echo "- config restore -"
+		cd /
+		tar xzf /sysupgrade.tgz
+	}
+	echo "After mount_root"
+}
+
+[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main do_mount_root
diff --git a/lib/preinit/81_load_wifi_board_bin b/lib/preinit/81_load_wifi_board_bin
new file mode 100644
index 0000000..321a33b
--- /dev/null
+++ b/lib/preinit/81_load_wifi_board_bin
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+. /lib/ar71xx.sh
+
+do_load_ath10k_board_bin() {
+    local board=$(ar71xx_board_name)
+    local mtdblock=$(find_mtd_part art)
+
+        [ -n "$mtdblock" ] || return
+
+    local dir="/lib/firmware/ath10k/QCA988X/hw2.0"
+    local cal_data_path="/tmp"
+
+    # load board.bin
+    case "$board" in
+        ap152)
+            mkdir -p ${dir}
+            dd if=${mtdblock} of=${dir}/board.bin \
+                bs=1 skip=20480 count=2116
+            mkdir -p ${cal_data_path}
+            dd if=${mtdblock} of=${cal_data_path}/wifi0.caldata bs=32 count=377 skip=128
+            dd if=${mtdblock} of=${cal_data_path}/wifi1.caldata bs=32 count=377 skip=640
+        ;;
+        dlan-pro-1200-ac | dlan-pro-1200-n | dvl-1750c | dlan-1000-ac | dlan-550-wifi | \
+        ap147 | ap151 | ap135 | ap137 | ap135-020 | ap147-010 | apjet01 )
+            mkdir -p ${cal_data_path}
+            dd if=${mtdblock} of=${cal_data_path}/wifi0.caldata bs=32 count=377 skip=128
+            dd if=${mtdblock} of=${cal_data_path}/wifi1.caldata bs=32 count=377 skip=640
+        ;;
+        *)
+            echo "Support to copy caldata is not there for $board"
+        ;;
+    esac
+}
+
+boot_hook_add preinit_main do_load_ath10k_board_bin
+boot_hook_add initramfs do_load_ath10k_board_bin
diff --git a/lib/preinit/82_patch_ath10k b/lib/preinit/82_patch_ath10k
new file mode 100644
index 0000000..af12bd5
--- /dev/null
+++ b/lib/preinit/82_patch_ath10k
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+. /lib/functions/system.sh
+. /lib/ar71xx.sh
+
+
+do_patch_ath10k_firmware() {
+	local firmware_file="/lib/firmware/ath10k/QCA988X/hw2.0/firmware-5.bin"
+
+	# bail out if firmware does not exist
+	[ -f "$firmware_file" ] || {
+		return
+	}
+
+	local firmware_md5_orig="fcb2fbd42d73a63fbf603505c718cbde"
+	local firmware_md5_current="$(md5sum $firmware_file)"
+	local firmware_md5_current="${firmware_md5_current%% *}"
+
+	# verify md5sum before patching
+	[ "$firmware_md5_orig" != "$firmware_md5_current" ] || {
+		return
+	}
+
+	# some boards have bogus mac in otp, patch the default mac in the firmware
+	case $(ar71xx_board_name) in
+		dgl-5500-a1 | tew-823dru)
+			local mac
+			mac=$(mtd_get_mac_ascii nvram wlan1_mac)
+
+			cp $firmware_file /tmp/ath10k-firmware.bin
+			macaddr_2bin $mac | dd of=/tmp/ath10k-firmware.bin \
+				conv=notrunc bs=1 seek=276 count=6
+
+		;;
+	esac
+	[ -f /tmp/ath10k-firmware.bin ] || {
+		return
+	}
+	cp /tmp/ath10k-firmware.bin $firmware_file
+	rm /tmp/ath10k-firmware.bin
+}
+
+check_patch_ath10k_firmware() {
+	case $(ar71xx_board_name) in
+		dgl-5500-a1 | tew-823dru)
+			do_patch_ath10k_firmware
+		;;
+	esac
+}
+
+boot_hook_add preinit_main check_patch_ath10k_firmware
diff --git a/lib/preinit/99_10_failsafe_login b/lib/preinit/99_10_failsafe_login
new file mode 100644
index 0000000..b12e317
--- /dev/null
+++ b/lib/preinit/99_10_failsafe_login
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Copyright (C) 2006-2015 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+failsafe_netlogin () {
+	dropbearkey -t rsa -s 1024 -f /tmp/dropbear_failsafe_host_key
+	dropbear -r /tmp/dropbear_failsafe_host_key <> /dev/null 2>&1
+}
+
+failsafe_shell() {
+	lock /tmp/.failsafe
+	ash --login
+	echo "Please reboot system when done with failsafe network logins"
+}
+
+boot_hook_add failsafe failsafe_netlogin
+boot_hook_add failsafe failsafe_shell
diff --git a/lib/preinit/99_10_run_init b/lib/preinit/99_10_run_init
new file mode 100644
index 0000000..b4f0ec2
--- /dev/null
+++ b/lib/preinit/99_10_run_init
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2010 Vertical Communications
+
+run_init() {
+	preinit_ip_deconfig
+}
+
+boot_hook_add preinit_main run_init
diff --git a/lib/sbin/wifi_try b/lib/sbin/wifi_try
new file mode 100755
index 0000000..0b4db30
--- /dev/null
+++ b/lib/sbin/wifi_try
@@ -0,0 +1,218 @@
+#!/bin/sh
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+#
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+
+. /lib/config/uci.sh
+
+DEBUG=
+
+WPA_CLI() {
+	local iface=$1;shift
+	local opt
+	case ${iface} in
+		global) opt="-g /var/run/wpa_supplicant-${iface}" ;;
+		*) opt="-p /var/run/wpa_supplicant-${iface} -i ${iface}";;
+	esac
+	if [ -n "${DEBUG}" ]; then
+		echo wpa_cli ${opt} "$@" >&2
+		wpa_cli ${opt} "$@" || exit 2
+		return 0
+	fi
+	wpa_cli ${opt} "$@" >/dev/null 2>&1 || exit 2
+}
+
+showhelp() {
+	cat << EOF
+  $0 -c <chan> -s <ssid> -a <auth>
+     [-p <passphrase>] [-k key] [-i index] [ -t timeout ] [ -d ]
+
+  Mandatory parameters:
+    -c <chan>: Search on channel <chan>
+    -s <ssid>: Connect to SSID <ssid>
+    -a <auth>: Use authentication <auth>, where <auth> can be one of:
+        "open": No authentication
+        "wep": WEP authentication
+        "wpa": WPA/WPA2 authentication
+
+  Optional parameters:
+    -p <passphrase>: (WEP or WPA only) Set the WEP (string) or WPA passphrase
+    -k <key>: (WEP only) Set the key (hex key only, either 5 or 13 bytes len)
+    -i <index>: (WEP only) Set the key index (0-3)
+    -t <timeout>: Set the connection timeout (in seconds) - default=4
+    -d : enable debug
+    -h : print this help
+
+  Return value:
+    0: Connection Success
+    1: Connection Failed
+    2: Error
+EOF
+}
+
+check_params() {
+	local chan=$1
+	local auth=$2
+	local psk=$3
+	local key=$4
+	local index=$5
+
+	if [ -z "${chan}" ] || [ -z "${auth}" ] || [ -z "${ssid}" ]; then
+		echo "Error: channel, ssid or authentication not found" >&2
+		return 1
+	fi
+
+	if [ ! ${chan} -ge 1 ] && [ ! ${chan} -le 13 ] || \
+	[ ! ${chan} -ge 36 ] && [ ! ${chan} -le 64 ] && [ ! $((${chan}%4)) -eq 0 ] || \
+	[ ! ${chan} -ge 100 ] && [ ! ${chan} -le 150 ] && [ ! $((${chan}%4)) -eq 0 ]; then
+		echo "Invalid channel \"${chan}\"" >&2
+		echo "Please specify a valid channel in the following range:" >&2
+		echo " *1-13" >&2
+		echo " *36-64 (HT20 aligned) " >&2
+		echo " *100-150 (HT20 aligned) " >&2
+		return 1;
+	fi
+
+	# Using passphrase and/or key and/or index in Open mode is inconsistent
+	if [ "${auth}" = "open" ]; then
+		if [ -n "${key}" -o -n "${index}" -o -n "${psk}" ]; then
+			echo "Open mode can't be used with passphrase/key/index" >&2
+			return 1
+		fi
+	fi
+
+	# If wep is used, make sure we also got a key & its index
+	if [ "${auth}" = "wep" ]; then
+		if [ -z "${key}" ] || [ -z "${index}" ]; then
+			echo "In WEP, please specify the key and index" >&2
+			return 1
+		fi
+	fi
+
+	# Having a key and/or index with non-WEP encryption is inconsistent
+	if [ "${auth}" != "wep" ]; then
+		if [ -n "${key}" -o -n "${index}" ]; then
+			echo "Index/Key can't be used with non-WEP authentication " >&2
+			return 1
+		fi
+	fi
+
+	# If wpa is used, make sure we also got a passphrase
+	if [ "${auth}" = "wpa" ]; then
+		if [ -z "${psk}" ]; then
+			echo "In WPA, please specify a passphrase" >&2
+			return 1
+		fi
+	fi
+
+	return 0
+}
+
+# Process arguments
+chan ssid auth psk key index
+timeout=4
+while [ -n "$1" ];do
+	case "$1" in
+	-c) chan="$2"; shift;;
+	-s) ssid=$2; shift;;
+	-a) auth=$2; shift
+		[ ${auth} = "open" ] || [ ${auth} = "wep" ] || [ ${auth} = "wpa" ] || {
+			echo "Invalid authentication \"${auth}\"" >&2
+			echo "Valid authentication values are \"open\", \"wep\", \"wpa\"" >&2
+			showhelp
+			exit 2;
+		};;
+	-p) psk=$2; shift;;
+	-k) key=$2; shift;;
+	-i) index=$2; shift
+		if [ ! ${index} -ge 0 ] && [ ! ${index} -le 3 ]; then
+			echo "Invalid index \"${index}\"" >&2
+			echo "Valid index values are \"0\", \"1\", \"2\", \"3\"" >&2
+			showhelp
+			exit 2
+		fi;;
+	-t) timeout=$2; shift;;
+	-d) DEBUG=1;;
+	-h) showhelp; exit 2;;
+	*)
+		echo "Invalid opton: -${OPTARG}" >&2
+		showhelp
+		exit 2
+		;;
+	esac
+	shift
+done
+# Perform sanity checks on the script arguments
+check_params "${chan}" "${auth}" "${psk}" "${key}" "${index}" || {
+	showhelp
+	exit 2
+}
+
+
+# Ok, we're ready. Let's perform the WiFi operations now
+
+# Step 1: we create the interface and launch the right wpa daemons
+nid
+oldchan=$(uci_get wireless @wifi-device[0] channel)
+iface=$(wlanconfig ath create wlandev wifi0 wlanmode sta)
+
+wpa_supplicant -g /var/run/wpa_supplicant-global -B -P /var/run/wpa_supplicant-configme.pid > /dev/null 2>&1
+WPA_CLI global interface_add ${iface} "" athr /var/run/wpa_supplicant-${iface}
+nid=$(wpa_cli -p /var/run/wpa_supplicant-${iface} -i ${iface} add_network)
+
+# Step 2: we set the network parameters
+WPA_CLI ${iface} set_network ${nid} ssid \"${ssid}\"
+WPA_CLI ${iface} set_network ${nid} scan_freq ${chan}
+WPA_CLI ${iface} set_network ${nid} scan_ssid 1
+case ${auth} in
+	"open")
+		WPA_CLI ${iface} set_network ${nid} key_mgmt NONE
+		;;
+	"wep")
+		WPA_CLI ${iface} set_network ${nid} key_mgmt NONE
+		WPA_CLI ${iface} set_network ${nid} wep_key${index} \"${key}\"
+		WPA_CLI ${iface} set_network ${nid} wep_tx_keyidx ${index}
+		;;
+	"wpa")
+		WPA_CLI ${iface} set_network ${nid} key_mgmt WPA-PSK
+		WPA_CLI ${iface} set_network ${nid} psk \"${psk}\"
+		;;
+esac
+
+# Step 3: we enable the network with the previously set parameters
+WPA_CLI ${iface} enable_network ${nid}
+
+conn_state=
+while [ ${timeout} -gt 0 ]; do
+	sleep 1
+	conn_state=$(wpa_cli -p /var/run/wpa_supplicant-${iface} -i ${iface} status 2>/dev/null | grep wpa_state | cut -d= -f2)
+	if [ ${conn_state} = "COMPLETED" ]; then
+		break;
+	fi
+	timeout=$((--timeout))
+done
+
+# Step 4: Clean-up
+if [ ${conn_state} != "COMPLETED" ]; then
+	echo "Timeout --> connection failed"
+	WPA_CLI ${iface} remove_network ${nid}
+	WPA_CLI global interface_remove ${iface}
+	iwconfig ath0 channel ${oldchan}
+	wlanconfig ${iface} destroy
+	kill $(cat /var/run/wpa_supplicant-configme.pid)
+	exit 1
+fi
+
+echo "Connection success"
+WPA_CLI ${iface} remove_network ${nid}
+WPA_CLI global interface_remove ${iface}
+iwconfig ath0 channel ${oldchan}
+wlanconfig ${iface} destroy
+kill $(cat /var/run/wpa_supplicant-configme.pid)
+exit 0
diff --git a/lib/uboot-envtools.sh b/lib/uboot-envtools.sh
new file mode 100644
index 0000000..e21b283
--- /dev/null
+++ b/lib/uboot-envtools.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# Copyright (C) 2011-2012 OpenWrt.org
+#
+
+ubootenv_add_uci_config() {
+	local dev=$1
+	local offset=$2
+	local envsize=$3
+	local secsize=$4
+	local numsec=$5
+	uci batch <<EOF
+add ubootenv ubootenv
+set ubootenv.@ubootenv[-1].dev='$dev'
+set ubootenv.@ubootenv[-1].offset='$offset'
+set ubootenv.@ubootenv[-1].envsize='$envsize'
+set ubootenv.@ubootenv[-1].secsize='$secsize'
+set ubootenv.@ubootenv[-1].numsec='$numsec'
+EOF
+	uci commit ubootenv
+}
+
+ubootenv_add_app_config() {
+	local dev
+	local offset
+	local envsize
+	local secsize
+	local numsec
+	config_get dev "$1" dev
+	config_get offset "$1" offset
+	config_get envsize "$1" envsize
+	config_get secsize "$1" secsize
+	config_get numsec "$1" numsec
+	echo "$dev $offset $envsize $secsize $numsec" >>/etc/fw_env.config
+}
+
diff --git a/lib/upgrade/allnet.sh b/lib/upgrade/allnet.sh
new file mode 100644
index 0000000..98b368d
--- /dev/null
+++ b/lib/upgrade/allnet.sh
@@ -0,0 +1,162 @@
+# The U-Boot loader of the some Allnet devices requires image sizes and
+# checksums to be provided in the U-Boot environment.
+# In case the check fails during boot, a failsafe-system is started to provide
+# a minimal web-interface for flashing a new firmware.
+
+# make sure we got uboot-envtools and fw_env.config copied over to the ramfs
+# create /var/lock for the lock "fw_setenv.lock" of fw_setenv
+platform_add_ramfs_ubootenv() {
+	[ -e /usr/sbin/fw_printenv ] && install_bin /usr/sbin/fw_printenv /usr/sbin/fw_setenv
+	[ -e /etc/fw_env.config ] && install_file /etc/fw_env.config
+	mkdir -p $RAM_ROOT/var/lock
+}
+append sysupgrade_pre_upgrade platform_add_ramfs_ubootenv
+
+# determine size of the main firmware partition
+platform_get_firmware_size() {
+	local dev size erasesize name
+	while read dev size erasesize name; do
+		name=${name#'"'}; name=${name%'"'}
+		case "$name" in
+			firmware)
+				printf "%d" "0x$size"
+				break
+			;;
+		esac
+	done < /proc/mtd
+}
+
+# get the first 4 bytes (magic) of a given file starting at offset in hex format
+get_magic_long_at() {
+	dd if="$1" skip=$(( $CI_BLKSZ / 4 * $2 )) bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+get_filesize() {
+	wc -c "$1" | while read image_size _n ; do echo $image_size ; break; done
+}
+
+# scan through the update image pages until matching a magic
+platform_get_offset() {
+	offsetcount=0
+	magiclong="x"
+	if [ -n "$3" ]; then
+		offsetcount=$3
+	fi
+	while magiclong=$( get_magic_long_at "$1" "$offsetcount" ) && [ -n "$magiclong" ]; do
+		case "$magiclong" in
+			"2705"*)
+				# U-Boot image magic
+				if [ "$2" = "uImage" ]; then
+					echo $offsetcount
+					return
+				fi
+			;;
+			"68737173"|"73717368")
+				# SquashFS
+				if [ "$2" = "rootfs" ]; then
+					echo $offsetcount
+					return
+				fi
+			;;
+			"deadc0de"|"19852003")
+				# JFFS2 empty page
+				if [ "$2" = "rootfs-data" ]; then
+					echo $offsetcount
+					return
+				fi
+			;;
+		esac
+		offsetcount=$(( $offsetcount + 1 ))
+	done
+}
+
+platform_check_image_allnet() {
+	local fw_printenv=/usr/sbin/fw_printenv
+	[ ! -n "$fw_printenv" -o ! -x "$fw_printenv" ] && {
+		echo "Please install uboot-envtools!"
+		return 1
+	}
+
+	[ ! -r "/etc/fw_env.config" ] && {
+		echo "/etc/fw_env.config is missing"
+		return 1
+	}
+
+	local image_size=$( get_filesize "$1" )
+	local firmware_size=$( platform_get_firmware_size )
+	[ $image_size -ge $firmware_size ] &&
+	{
+		echo "upgrade image is too big (${image_size}b > ${firmware_size}b)"
+	}
+
+	local vmlinux_blockoffset=$( platform_get_offset "$1" uImage )
+	[ -z $vmlinux_blockoffset ] && {
+		echo "vmlinux-uImage not found"
+		return 1
+	}
+
+	local rootfs_blockoffset=$( platform_get_offset "$1" rootfs "$vmlinux_blockoffset" )
+	[ -z $rootfs_blockoffset ] && {
+		echo "missing rootfs"
+		return 1
+	}
+
+	local data_blockoffset=$( platform_get_offset "$1" rootfs-data "$rootfs_blockoffset" )
+	[ -z $data_blockoffset ] && {
+		echo "rootfs doesn't have JFFS2 end marker"
+		return 1
+	}
+
+	return 0
+}
+
+platform_do_upgrade_allnet() {
+	local firmware_base_addr=$( printf "%d" "$1" )
+	local vmlinux_blockoffset=$( platform_get_offset "$2" uImage )
+	if [ ! -n "$vmlinux_blockoffset" ]; then
+		echo "can't determine uImage offset"
+		return 1
+	fi
+	local rootfs_blockoffset=$( platform_get_offset "$2" rootfs $(( $vmlinux_blockoffset + 1 )) )
+	local vmlinux_offset=$(( $vmlinux_blockoffset * $CI_BLKSZ ))
+	local vmlinux_addr=$(( $firmware_base_addr + $vmlinux_offset ))
+	local vmlinux_hexaddr=0x$( printf "%08x" "$vmlinux_addr" )
+	if [ ! -n "$rootfs_blockoffset" ]; then
+		echo "can't determine rootfs offset"
+		return 1
+	fi
+	local rootfs_offset=$(( $rootfs_blockoffset * $CI_BLKSZ ))
+	local rootfs_addr=$(( $firmware_base_addr + $rootfs_offset ))
+	local rootfs_hexaddr=0x$( printf "%08x" "$rootfs_addr" )
+	local vmlinux_blockcount=$(( $rootfs_blockoffset - $vmlinux_blockoffset ))
+	local vmlinux_size=$(( $rootfs_offset - $vmlinux_offset ))
+	local vmlinux_hexsize=0x$( printf "%08x" "$vmlinux_size" )
+	local data_blockoffset=$( platform_get_offset "$2" rootfs-data $(( $rootfs_blockoffset + 1 )) )
+	if [ ! -n "$data_blockoffset" ]; then
+		echo "can't determine rootfs size"
+		return 1
+	fi
+	local data_offset=$(( $data_blockoffset * $CI_BLKSZ ))
+	local rootfs_blockcount=$(( $data_blockoffset - $rootfs_blockoffset ))
+	local rootfs_size=$(( $data_offset - $rootfs_offset ))
+	local rootfs_hexsize=0x$( printf "%08x" "$rootfs_size" )
+
+	local rootfs_md5=$( dd if="$2" bs=$CI_BLKSZ skip=$rootfs_blockoffset count=$rootfs_blockcount 2>/dev/null | md5sum -); rootfs_md5="${rootfs_md5%% *}"
+	local vmlinux_md5=$( dd if="$2" bs=$CI_BLKSZ skip=$vmlinux_blockoffset count=$vmlinux_blockcount 2>/dev/null | md5sum -); vmlinux_md5="${vmlinux_md5%% *}"
+	# this needs a recent version of uboot-envtools!
+	cat >/tmp/fw_env_upgrade <<EOF
+vmlinux_start_addr $vmlinux_hexaddr
+vmlinux_size $vmlinux_hexsize
+vmlinux_checksum $vmlinux_md5
+rootfs_start_addr $rootfs_hexaddr
+rootfs_size $rootfs_hexsize
+rootfs_checksum $rootfs_md5
+bootcmd bootm $vmlinux_hexaddr
+EOF
+	fw_setenv -s /tmp/fw_env_upgrade || {
+		echo "failed to update U-Boot environment"
+		return 1
+	}
+	shift
+	default_do_upgrade "$@"
+}
diff --git a/lib/upgrade/common.sh b/lib/upgrade/common.sh
new file mode 100644
index 0000000..d6c3c55
--- /dev/null
+++ b/lib/upgrade/common.sh
@@ -0,0 +1,252 @@
+#!/bin/sh
+
+RAM_ROOT=/tmp/root
+
+[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
+libs() { ldd $* 2>/dev/null | sed -r 's/(.* => )?(.*) .*/\2/'; }
+
+install_file() { # <file> [ <file> ... ]
+	for file in "$@"; do
+		dest="$RAM_ROOT/$file"
+		[ -f $file -a ! -f $dest ] && {
+			dir="$(dirname $dest)"
+			mkdir -p "$dir"
+			cp $file $dest
+		}
+	done
+}
+
+install_bin() { # <file> [ <symlink> ... ]
+	src=$1
+	files=$1
+	[ -x "$src" ] && files="$src $(libs $src)"
+	install_file $files
+	shift
+	for link in "$@"; do {
+		dest="$RAM_ROOT/$link"
+		dir="$(dirname $dest)"
+		mkdir -p "$dir"
+		[ -f "$dest" ] || ln -s $src $dest
+	}; done
+}
+
+supivot() { # <new_root> <old_root>
+	/bin/mount | grep "on $1 type" 2>&- 1>&- || /bin/mount -o bind $1 $1
+	mkdir -p $1$2 $1/proc $1/sys $1/dev $1/tmp $1/overlay && \
+	/bin/mount -o noatime,move /proc $1/proc && \
+	pivot_root $1 $1$2 || {
+		/bin/umount -l $1 $1
+		return 1
+	}
+
+	/bin/mount -o noatime,move $2/sys /sys
+	/bin/mount -o noatime,move $2/dev /dev
+	/bin/mount -o noatime,move $2/tmp /tmp
+	/bin/mount -o noatime,move $2/overlay /overlay 2>&-
+	return 0
+}
+
+run_ramfs() { # <command> [...]
+	install_bin /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount	\
+		/sbin/pivot_root /usr/bin/wget /sbin/reboot /bin/sync /bin/dd	\
+		/bin/grep /bin/cp /bin/mv /bin/tar /usr/bin/md5sum "/usr/bin/["	\
+		/bin/dd /bin/vi /bin/ls /bin/cat /usr/bin/awk /usr/bin/hexdump	\
+		/bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc \
+		/bin/cut /usr/bin/printf /bin/sync /bin/mkdir /bin/rmdir	\
+		/bin/rm /usr/bin/basename /bin/kill /bin/chmod
+
+	install_bin /sbin/mtd
+	install_bin /sbin/mount_root
+	install_bin /sbin/snapshot
+	install_bin /sbin/snapshot_tool
+	install_bin /usr/sbin/ubiupdatevol
+	install_bin /usr/sbin/ubiattach
+	install_bin /usr/sbin/ubiblock
+	install_bin /usr/sbin/ubiformat
+	install_bin /usr/sbin/ubidetach
+	install_bin /usr/sbin/ubirsvol
+	install_bin /usr/sbin/ubirmvol
+	install_bin /usr/sbin/ubimkvol
+	install_bin /usr/sbin/ubinfo
+	install_bin /sbin/ubi
+	install_bin /usr/sbin/mkfs.ubifs
+	for file in $RAMFS_COPY_BIN; do
+		install_bin ${file//:/ }
+	done
+	install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA
+
+	[ -L "/lib64" ] && ln -s /lib $RAM_ROOT/lib64
+
+	supivot $RAM_ROOT /mnt || {
+		echo "Failed to switch over to ramfs. Please reboot."
+		exit 1
+	}
+
+	/bin/mount -o remount,ro /mnt
+	/bin/umount -l /mnt
+
+	grep /overlay /proc/mounts > /dev/null && {
+		/bin/mount -o noatime,remount,ro /overlay
+		/bin/umount -l /overlay
+	}
+
+	# spawn a new shell from ramdisk to reduce the probability of cache issues
+	exec /bin/busybox ash -c "$*"
+}
+
+kill_remaining() { # [ <signal> ]
+	local sig="${1:-TERM}"
+	echo -n "Sending $sig to remaining processes ... "
+
+	local my_pid=$$
+	local my_ppid=$(cut -d' ' -f4  /proc/$my_pid/stat)
+	local my_ppisupgraded=
+	grep -q upgraded /proc/$my_ppid/cmdline >/dev/null && {
+		local my_ppisupgraded=1
+	}
+	
+	local stat
+	for stat in /proc/[0-9]*/stat; do
+		[ -f "$stat" ] || continue
+
+		local pid name state ppid rest
+		read pid name state ppid rest < $stat
+		name="${name#(}"; name="${name%)}"
+
+		local cmdline
+		read cmdline < /proc/$pid/cmdline
+
+		# Skip kernel threads
+		[ -n "$cmdline" ] || continue
+
+		if [ $$ -eq 1 ] || [ $my_ppid -eq 1 ] && [ -n "$my_ppisupgraded" ]; then
+			# Running as init process, kill everything except me
+			if [ $pid -ne $$ ] && [ $pid -ne $my_ppid ]; then
+				echo -n "$name "
+				kill -$sig $pid 2>/dev/null
+			fi
+		else 
+			case "$name" in
+				# Skip essential services
+				*procd*|*ash*|*init*|*watchdog*|*ssh*|*dropbear*|*telnet*|*login*|*hostapd*|*wpa_supplicant*|*nas*) : ;;
+
+				# Killable process
+				*)
+					if [ $pid -ne $$ ] && [ $ppid -ne $$ ]; then
+						echo -n "$name "
+						kill -$sig $pid 2>/dev/null
+					fi
+				;;
+			esac
+		fi
+	done
+	echo ""
+}
+
+run_hooks() {
+	local arg="$1"; shift
+	for func in "$@"; do
+		eval "$func $arg"
+	done
+}
+
+ask_bool() {
+	local default="$1"; shift;
+	local answer="$default"
+
+	[ "$INTERACTIVE" -eq 1 ] && {
+		case "$default" in
+			0) echo -n "$* (y/N): ";;
+			*) echo -n "$* (Y/n): ";;
+		esac
+		read answer
+		case "$answer" in
+			y*) answer=1;;
+			n*) answer=0;;
+			*) answer="$default";;
+		esac
+	}
+	[ "$answer" -gt 0 ]
+}
+
+v() {
+	[ "$VERBOSE" -ge 1 ] && echo "$@"
+}
+
+rootfs_type() {
+	/bin/mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }'
+}
+
+get_image() { # <source> [ <command> ]
+	local from="$1"
+	local conc="$2"
+	local cmd
+
+	case "$from" in
+		http://*|ftp://*) cmd="wget -O- -q";;
+		*) cmd="cat";;
+	esac
+	if [ -z "$conc" ]; then
+		local magic="$(eval $cmd \"$from\" 2>/dev/null | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
+		case "$magic" in
+			1f8b) conc="zcat";;
+			425a) conc="bzcat";;
+		esac
+	fi
+
+	eval "$cmd \"$from\" 2>/dev/null ${conc:+| $conc}"
+}
+
+get_magic_word() {
+	(get_image "$@" | dd bs=2 count=1 | hexdump -v -n 2 -e '1/1 "%02x"') 2>/dev/null
+}
+
+get_magic_long() {
+	(get_image "$@" | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2>/dev/null
+}
+
+jffs2_copy_config() {
+	if grep rootfs_data /proc/mtd >/dev/null; then
+		# squashfs+jffs2
+		mtd -e rootfs_data jffs2write "$CONF_TAR" rootfs_data
+	else
+		# jffs2
+		mtd jffs2write "$CONF_TAR" rootfs
+	fi
+}
+
+# Flash firmware to MTD partition
+#
+# $(1): path to image
+# $(2): (optional) pipe command to extract firmware, e.g. dd bs=n skip=m
+default_do_upgrade() {
+	sync
+	if [ "$SAVE_CONFIG" -eq 1 ]; then
+		get_image "$1" "$2" | mtd $MTD_CONFIG_ARGS -j "$CONF_TAR" write - "${PART_NAME:-image}"
+	else
+		get_image "$1" "$2" | mtd write - "${PART_NAME:-image}"
+	fi
+}
+
+do_upgrade() {
+	v "Performing system upgrade..."
+	if type 'platform_do_upgrade' >/dev/null 2>/dev/null; then
+		platform_do_upgrade "$ARGV"
+	else
+		default_do_upgrade "$ARGV"
+	fi
+
+	if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_copy_config' >/dev/null 2>/dev/null; then
+		platform_copy_config
+	fi
+
+	v "Upgrade completed"
+	[ -n "$DELAY" ] && sleep "$DELAY"
+	ask_bool 1 "Reboot" && {
+		v "Rebooting system..."
+		sleep 2
+		reboot -f
+		sleep 5
+		echo b 2>/dev/null >/proc/sysrq-trigger
+	}
+}
diff --git a/lib/upgrade/delos.sh b/lib/upgrade/delos.sh
new file mode 100644
index 0000000..cb2ab19
--- /dev/null
+++ b/lib/upgrade/delos.sh
@@ -0,0 +1,170 @@
+#
+# Copyright (C) 2012 OpenWrt.org
+# Copyright (C) 2018 devolo AG
+#
+
+. /lib/delos-functions.sh
+
+signatureFile="/tmp/signature.bin"
+publicKeyFile="/etc/keys/fw_pub_key.pem"
+
+# get the first 4 bytes (magic) of a given file starting at offset in hex format
+delos_get_magic_long_at() {
+	dd if="$1" skip=$2 bs=1 count=4 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+# scan through the update image pages until matching magic 'deadc0de' @ page start. return the offset.
+delos_get_jffs2_trailer_offset() {
+	local magiclong
+	local offsetcount=0
+	local offset
+	if [ -n "$2" ]; then
+		offsetcount=$2
+	fi
+	while magiclong=$(delos_get_magic_long_at "$1" "$offsetcount") && [ -n "$magiclong" ]; do
+		[ "$magiclong" = "deadc0de" ] && {
+			offset="$offsetcount"
+		}
+		offsetcount=$(( $offsetcount + $CI_BLKSZ ))
+	done
+	[ -n "$offset" ] && echo "$offset"
+}
+
+delos_check_image_dvl() {
+	# check for valid matching dvl image.
+	local ret
+	case "$board" in
+	dlan-pro-1200-ac)
+		chunk -F "$1" -s inspect || {
+			echo "Invalid image type."
+			return 1
+		}
+		chunk -F "$1" -s dump -d "$1.$$.device" -v "$1.$$.oem"
+		ret=$?
+		if [ $ret = 0 ] ; then
+			[ -e "$1.$$.device" ] &&
+			[ -e "$1.$$.oem" ] &&
+			[ "$(uci_get_state delos baptization DeviceType)" = "$(cat "$1.$$.device")" ] &&
+			[ "$(uci_get_state delos baptization OemVariant)" = "$(cat "$1.$$.oem")" ] || ret=1
+		fi
+		if [ $ret != 0 ] ; then
+			echo "Invalid image type."
+		fi
+		# cleanup working files
+		rm -f "$1".$$.*
+		return $ret
+		;;
+
+	esac
+	echo "Invalid image type."
+	return 1
+}
+
+delos_unpack_image_dvl() {
+	# convert to image in sysupgrade format
+	# (only works if image is a file!)
+	case "$board" in
+	dlan-pro-1200-ac)
+		local magicl="$(get_magic_long "$1")"
+		[ "$magicl" != "8664564c" ] && return
+		chunk -F "$1" -s dump -k - -f - >"$1.$$.fw"
+		ret=$?
+		if [ $ret = 0 ] ; then
+			rm -f "$1"
+			mv "$1.$$.fw" "$1"
+		fi
+		;;
+	esac
+}
+
+platform_check_image_delos() {
+	local magicl="$(get_magic_long "$1")"
+	local magic="$(echo "$magicl" | head -c 4)"
+
+	[ "$magicl" = "8664564c" ] && {
+		delos_check_image_dvl "$1"
+		return
+	}
+
+	[ "$magic" != "2705" ] && {
+		echo "Invalid image type."
+		return 1
+	}
+
+	# Find trailer
+	local offsetTrailer="$(delos_get_jffs2_trailer_offset "$1")"
+	if [ -z "$offsetTrailer" ]; then
+		echo "Invalid image contents."
+		return 1
+	fi
+
+	trailerLength=$(dd if=$1 skip=$offsetTrailer bs=1 2> /dev/null | tr "\0" "\n" | sed -e '/^SIG:/,$d' | wc -c)
+	signatureOffset=$((offsetTrailer+trailerLength))
+
+	# Extract signature; Verify signature; There is a \0 before SIG: => signatureOffset-1
+	dd if="$1" skip=$(( $signatureOffset + 4 )) bs=1 2>/dev/null |
+	openssl base64 -A -d -out "$signatureFile"
+	if [ ! -s "$signatureFile" ]; then
+		echo "No signature found."
+		return 1
+	fi
+
+	output=$(head -c $(($signatureOffset-1)) "$1" | openssl dgst -sha256 -verify /etc/keys/fw_pub_key.pem -signature "$signatureFile")
+	opensslExitCode="$?"
+	rm "$signatureFile"
+	[ "$opensslExitCode" != 0 ] || [ "$output" != "Verified OK" ] && {
+		echo "Invalid signature."
+		return 1
+	}
+
+	# Extract trailer
+	local trailer="$(dd if="$1" skip=$(( $offsetTrailer + 4 )) bs=1 count=$(( $signatureOffset - $offsetTrailer - 4 )) 2>/dev/null)"
+	if [ -z "$trailer" ]; then
+		echo "Invalid image contents."
+		return 1
+	fi
+	(
+		. /usr/share/libubox/jshn.sh
+		json_load "$trailer"
+
+		# compare current and image platform device type / oem variant
+		json_get_var dev_img device_type
+		DEVICE_TYPE=
+		. /etc/delos-image
+		if [ "$dev_img" = "$DEVICE_TYPE" ] && dvl_check_oemvariant "$trailer"; then
+			:
+		else
+			echo "Image is not qualified for this device."
+			return 1
+		fi
+	) || return 1
+
+	return 0
+}
+
+platform_do_upgrade_delos() {
+	default_do_upgrade "$@"
+}
+
+platform_check_config_delos() {
+	# all in one check for gzip, tar, delos config
+	tar -xzf "$1" -O etc/config/delos >/tmp/config-delos 2>/dev/null || {
+		return 1
+	}
+	local type
+	type="$(uci -c /tmp -q get config-delos.delos.device_type)" || {
+		# backward compatibility accept config w/o device-type
+		return 0
+	}
+	. /etc/delos-image
+	[ "$type" != "$DEVICE_TYPE" ] && {
+		return 1
+	}
+	return 0
+}
+
+platform_pre_upgrade_delos() {
+	delos_unpack_image_dvl "$1"
+	. /lib/functions/leds.sh
+	led_set_attr "devolo:status:wlan" operation update
+}
diff --git a/lib/upgrade/dir825.sh b/lib/upgrade/dir825.sh
new file mode 100644
index 0000000..7ad3dd8
--- /dev/null
+++ b/lib/upgrade/dir825.sh
@@ -0,0 +1,165 @@
+#!/bin/sh
+#
+# Copyright (C) 2012 OpenWrt.org
+#
+
+. /lib/functions.sh
+. /lib/ar71xx.sh
+
+get_magic_at() {
+	local mtddev=$1
+	local pos=$2
+	dd bs=1 count=2 skip=$pos if=$mtddev 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+dir825b_is_caldata_valid() {
+	local mtddev=$1
+	local magic
+
+	magic=$(get_magic_at $mtddev 4096)
+	[ "$magic" != "a55a" ] && return 0
+
+	magic=$(get_magic_at $mtddev 20480)
+	[ "$magic" != "a55a" ] && return 0
+
+	return 1
+}
+
+dir825b_copy_caldata() {
+	local cal_src=$1
+	local cal_dst=$2
+	local mtd_src
+	local mtd_dst
+	local md5_src
+	local md5_dst
+
+	mtd_src=$(find_mtd_part $cal_src)
+	[ -z "$mtd_src" ] && {
+		echo "no $cal_src partition found"
+		return 1
+	}
+
+	mtd_dst=$(find_mtd_part $cal_dst)
+	[ -z "$mtd_dst" ] && {
+		echo "no $cal_dst partition found"
+		return 1
+	}
+
+	dir825b_is_caldata_valid "$mtd_src" && {
+		echo "no valid calibration data found in $cal_src"
+		return 1
+	}
+
+	dir825b_is_caldata_valid "$mtd_dst" && {
+		echo "Copying calibration data from $cal_src to $cal_dst..."
+		dd if="$mtd_src" 2>/dev/null | mtd -q -q write - "$cal_dst"
+	}
+
+        md5_src=$(md5sum "$mtd_src") && md5_src="${md5_src%% *}"
+        md5_dst=$(md5sum "$mtd_dst") && md5_dst="${md5_dst%% *}"
+
+	[ "$md5_src" != "$md5_dst" ] && {
+		echo "calibration data mismatch $cal_src:$md5_src $cal_dst:$md5_dst"
+		return 1
+	}
+
+	return 0
+}
+
+dir825b_do_upgrade_combined() {
+	local fw_part=$1
+	local fw_file=$2
+	local fw_mtd=$(find_mtd_part $fw_part)
+	local fw_length=0x$(dd if="$fw_file" bs=2 skip=1 count=4 2>/dev/null)
+	local fw_blocks=$(($fw_length / 65536))
+
+	if [ -n "$fw_mtd" ] &&  [ ${fw_blocks:-0} -gt 0 ]; then
+		local append=""
+		[ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+
+		sync
+		dd if="$fw_file" bs=64k skip=1 count=$fw_blocks 2>/dev/null | \
+			mtd $append write - "$fw_part"
+	fi
+}
+
+dir825b_check_image() {
+	local magic="$(get_magic_long "$1")"
+	local fw_mtd=$(find_mtd_part "firmware_orig")
+
+	case "$magic" in
+	"27051956")
+		;;
+	"43493030")
+		local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null)
+		local md5_chk=$(dd if="$1" bs=64k skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}"
+		local fw_len=$(dd if="$1" bs=2 skip=1 count=4 2>/dev/null)
+		local fw_part_len=$(mtd_get_part_size "firmware")
+
+		if [ -z "$fw_mtd" ]; then
+			ask_bool 0 "Do you have a backup of the caldata partition?" || {
+				echo "Warning, please make sure that you have a backup of the caldata partition."
+				echo "Once you have that, use 'sysupgrade -i' for upgrading to the 'fat' firmware."
+				return 1
+			}
+		fi
+
+		if [ -z "$md5_img" -o -z "$md5_chk" ]; then
+			echo "Unable to get image checksums. Maybe you are using a streamed image?"
+			return 1
+		fi
+
+		if [ "$md5_img" != "$md5_chk" ]; then
+			echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)"
+			return 1
+		fi
+
+		fw_len=$((0x$fw_len))
+		fw_part_len=${fw_part_len:-0}
+
+		if [ $fw_part_len -lt $fw_len ]; then
+			echo "The upgrade image is too big (size:$fw_len available:$fw_part_len)"
+			return 1
+		fi
+		;;
+	*)
+		echo "Unsupported image format."
+		return 1
+		;;
+	esac
+
+	return 0
+}
+
+platform_do_upgrade_dir825b() {
+	local magic="$(get_magic_long "$1")"
+	local fw_mtd=$(find_mtd_part "firmware_orig")
+
+	case "$magic" in
+	"27051956")
+		if [ -n "$fw_mtd" ]; then
+			# restore calibration data before downgrading to
+			# the normal image
+			dir825b_copy_caldata "caldata" "caldata_orig" || {
+				echo "unable to restore calibration data"
+				exit 1
+			}
+			PART_NAME="firmware_orig"
+		else
+			PART_NAME="firmware"
+		fi
+		default_do_upgrade "$ARGV"
+		;;
+	"43493030")
+		if [ -z "$fw_mtd" ]; then
+			# backup calibration data before upgrading to the
+			# fat image
+			dir825b_copy_caldata "caldata" "caldata_copy" || {
+				echo "unable to backup calibration data"
+				exit 1
+			}
+		fi
+		dir825b_do_upgrade_combined "firmware" "$ARGV"
+		;;
+	esac
+}
diff --git a/lib/upgrade/ioe.sh b/lib/upgrade/ioe.sh
new file mode 100644
index 0000000..182ea07
--- /dev/null
+++ b/lib/upgrade/ioe.sh
@@ -0,0 +1,219 @@
+# Copyright (c) 2015 The Linux Foundation. All rights reserved.
+#
+# Permission to use, copy, modify, and/or 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.
+
+USE_REFRESH=
+
+# make sure we got the tools we need during the fw upgrade process
+platform_add_ramfs_ioe_tools()
+{
+	install_bin /usr/sbin/fw_printenv /usr/sbin/fw_setenv
+	install_bin /bin/busybox /usr/bin/cut /usr/bin/sed
+	install_bin /usr/bin/md5sum
+	install_bin /usr/sbin/nandwrite
+	install_bin /usr/sbin/ubiattach
+	install_bin /usr/sbin/ubidetach
+	install_file /etc/fw_env.config
+}
+append sysupgrade_pre_upgrade platform_add_ramfs_ioe_tools
+
+# determine size of the main firmware partition
+platform_get_firmware_size() {
+	local dev size erasesize name
+	while read dev size erasesize name; do
+		name=${name#'"'}; name=${name%'"'}
+		case "$name" in
+			firmware)
+				printf "%d" "0x$size"
+				break
+			;;
+		esac
+	done < /proc/mtd
+}
+
+get_filesize() {
+	wc -c "$1" | while read image_size _n ; do echo $image_size ; break; done
+}
+
+# This function read the MTD mapping in /proc/mtd and output
+# its offset in flash
+# @1) (OUTPUT) variable to store the offset to
+# @2) partition name
+# @3) NAND flash
+get_mtdpart_offset() {
+	local varname=$1
+	local partname=$2
+	local offset=0
+	local mtdsize=0
+
+	# Iterate over every line in mtd until the partition name matches
+	local line
+	while read line && echo ${line} | grep -vq ".*\"${partname}\""; do
+		# If the line doesn't start with mtd* (like first line)
+		# we just skip it
+		echo ${line} | grep -q "^mtd.*" || continue
+		echo ${line} | grep -q "rootfs_data" && continue
+		echo ${line} | grep -q "firmware" && continue
+		echo ${line} | grep -q "fw-2" && continue
+		# Here we extract the size info and add it to the previous offset
+		mtdsize=$(echo ${line}|cut -f2 -d' ')
+		offset=$(printf '%x' $((0x${offset} + 0x${mtdsize})))
+	done < /proc/mtd
+
+	eval "${varname}=${offset}"
+}
+
+platform_check_image_ioe() {
+	local image_size=$( get_filesize "$1" )
+	local firmware_size=$( platform_get_firmware_size )
+
+	[ $image_size -ge $firmware_size ] &&
+	{
+		echo "upgrade image is too big (${image_size}b > ${firmware_size}b)"
+		return 1
+	}
+
+	return 0
+}
+
+ioe_update_uboot_env() {
+	local file="$1"
+	local nand=$2
+        # NOR0 size - 16MB hex (dual NOR)
+        local nor0_size=1000000
+        # NOR0 size - 512kB hex (NAND flash)
+        local nor0_size_nand=80000
+
+	local kernel_addr
+	local bootargs bootcmd
+
+	# Perform sanity checks to make sure we've got all the tools we need
+	[ -x /usr/sbin/fw_printenv -a -x /usr/sbin/fw_setenv -a \
+	  -x /bin/grep -a -x /usr/bin/cut -a -x /usr/bin/md5sum ] || {
+		v "Error: missing tools to perform FW upgrade"
+		return 1
+	}
+	[ -f /etc/fw_env.config ] || {
+		v "/etc/fw_env.config does not exist"
+		return 1
+	}
+
+	get_mtdpart_offset kernel_addr "k-2"
+
+	local bootcmd_old=$(fw_printenv -n bootcmd)
+        local bootargs_old=$(fw_printenv -n bootargs)
+        
+        local ubi=$(fw_printenv -n bootargs |grep ubi)
+        [ -n "$ubi" ] && {
+                mtdx=$(cat /proc/mtd |grep "r-2" |cut -f1 -d ":")
+                r_n=$(echo $mtdx |cut -f2 -d "d")
+
+                while read line; do
+                        echo $line | grep -q "rootfs" || continue
+                        mtdx=$(echo $line |cut -f1 -d ":")
+                        rootfs_n=$(echo $mtdx |cut -f2 -d "d")
+                        break
+                done < /proc/mtd
+        }
+
+	v "Updating cus-531 u-boot-env..."
+	bootargs=$(fw_printenv -n bootargs | sed \
+		-e 's/(kernel)/(tmp-k-1)/' \
+		-e 's/(rootfs)/(tmp-r-1)/' \
+		-e 's/(vendor)/(tmp-v-1)/' \
+		-e 's/(firmware)/(tmp-fw-1)/' \
+		\
+		-e 's/(k-2)/(kernel)/' \
+		-e 's/(r-2)/(rootfs)/' \
+		-e 's/(v-2)/(vendor)/' \
+		-e 's/(fw-2)/(firmware)/' \
+		\
+		-e 's/(tmp-k-1)/(k-2)/' \
+		-e 's/(tmp-r-1)/(r-2)/' \
+		-e 's/(tmp-v-1)/(v-2)/' \
+		-e 's/(tmp-fw-1)/(fw-2)/' \
+	)
+
+	_kernel_addr=$(printf '%d' 0x${kernel_addr})
+	_nor0_size=$(printf '%d' 0x${nor0_size})
+
+	if [ -n "$nand" ]; then
+		# Kernel and rootfs for NAND flash are on second SPI partition
+		v "NAND flash detected"
+		kernel_addr=$(printf '%x' $((0x${kernel_addr} - 0x${nor0_size_nand})))
+		bootcmd="nboot 0x81000000 0 0x${kernel_addr}; run fail"
+                [ -n "$ubi" ] && bootargs=$(echo ${bootargs} | sed -e 's/ubi.mtd='"${rootfs_n}"'/ubi.mtd='"${r_n}"'/')
+	elif [ $_kernel_addr -lt $_nor0_size ]; then
+		bootcmd="bootm 0x9f${kernel_addr}; run fail"
+	else
+		v "32M NOR flash detected"
+		kernel_addr=$(printf '%x' $((0x${kernel_addr} - 0x${nor0_size})))
+		bootcmd="flselect 1; bootm 0x9f${kernel_addr}; run fail"
+	fi
+
+	fw_setenv -s - << EOF
+	swap_root set bootargs_tmp \${bootargs}; set bootargs \${bootargs_old}; set bootargs_old \${bootargs_tmp}
+	swap_kernel set bootcmd_tmp \${bootcmd}; set bootcmd \${bootcmd_old}; set bootcmd_old \${bootcmd_tmp}
+	fail run swap_root; run swap_kernel; save; reset
+	bootargs ${bootargs}
+	bootcmd ${bootcmd}
+	bootargs_old ${bootargs_old}
+	bootcmd_old ${bootcmd_old}
+EOF
+	v "done"
+}
+
+platform_do_upgrade_ioe() {
+	local file=$1
+	local name=$2
+	local fw="firmware"
+	local ubi_vol="0"
+	local rootfs="rootfs"
+	local rootfs_data="rootfs_data"
+	local valid_env=$(fw_printenv | grep "bootcmd=bootp")
+
+	[ -n "$valid_env" ] && {
+		v "ERROR, invalid u-boot-env, sysupgrade failed"
+		return
+	}
+
+	dual=$(cat /proc/mtd | grep fw-2)
+	[ -n "$dual" ] && fw="fw-2"
+
+	sync
+
+	nand=$(echo $name | grep "nand");
+        if [ -n "$nand" ] || [ "$name" = "cus532k" ]; then
+		mtd_fw=$(cat /proc/mtd |grep $fw |cut -f1 -d ":")
+		mtd_dev="/dev/$mtd_fw"
+
+		ubidetach -d $ubi_vol
+		mtd erase $mtd_dev
+		mtd_ubi_rootfs="/dev/$(cat /proc/mtd |grep $rootfs |cut -f1 -d ":")"
+		dd if=$file bs=2048 | nandwrite -p $mtd_dev -
+		ubiattach -p $mtd_ubi_rootfs
+		sleep 2
+		mtd_ubi_rootfs_data="$(cat /proc/mtd |grep $rootfs_data |cut -f1 -d ":" | awk ' // {sub(/mtd/, "", $0);print("/dev/mtdblock"$0)}')"
+		echo $mtd_ubi_rootfs_data
+		mount -t jffs2 $mtd_ubi_rootfs_data /mnt
+		echo $CONF_TAR
+		tar xzf $CONF_TAR -C /mnt/upper
+		sync
+		umount /mnt
+	else
+		get_image "$1" | mtd -j "$CONF_TAR" write - $fw
+	fi
+
+	[ -n "$dual" ] && ioe_update_uboot_env "$file" "$nand"
+}
+
diff --git a/lib/upgrade/keep.d/base-files b/lib/upgrade/keep.d/base-files
new file mode 100644
index 0000000..ca975e4
--- /dev/null
+++ b/lib/upgrade/keep.d/base-files
@@ -0,0 +1,4 @@
+/etc/config/network
+/etc/config/
+/etc/dropbear/
+/etc/crontabs/
diff --git a/lib/upgrade/keep.d/base-files-essential b/lib/upgrade/keep.d/base-files-essential
new file mode 100644
index 0000000..2fa5f02
--- /dev/null
+++ b/lib/upgrade/keep.d/base-files-essential
@@ -0,0 +1,9 @@
+# Essential files that will be always kept
+/etc/hosts
+/etc/group
+/etc/passwd
+/etc/profile
+/etc/shadow
+/etc/shells
+/etc/sysctl.conf
+/etc/rc.local
diff --git a/lib/upgrade/keep.d/delos-migration b/lib/upgrade/keep.d/delos-migration
new file mode 100644
index 0000000..babef70
--- /dev/null
+++ b/lib/upgrade/keep.d/delos-migration
@@ -0,0 +1 @@
+/etc/migration
diff --git a/lib/upgrade/keep.d/dlan-plc b/lib/upgrade/keep.d/dlan-plc
new file mode 100644
index 0000000..208d2dc
--- /dev/null
+++ b/lib/upgrade/keep.d/dlan-plc
@@ -0,0 +1,5 @@
+/lib/firmware/plc/user.nvm
+/lib/firmware/plc/user.pib
+/lib/firmware/plc/user.pib.tmp
+/lib/firmware/plc/security-id
+/lib/firmware/plc/dak
diff --git a/lib/upgrade/keep.d/easycwmp b/lib/upgrade/keep.d/easycwmp
new file mode 100644
index 0000000..6508c76
--- /dev/null
+++ b/lib/upgrade/keep.d/easycwmp
@@ -0,0 +1 @@
+/usr/share/easycwmp/defaults
diff --git a/lib/upgrade/keep.d/opkg b/lib/upgrade/keep.d/opkg
new file mode 100644
index 0000000..7996194
--- /dev/null
+++ b/lib/upgrade/keep.d/opkg
@@ -0,0 +1 @@
+/etc/opkg/keys/
diff --git a/lib/upgrade/keep.d/uboot-envtools b/lib/upgrade/keep.d/uboot-envtools
new file mode 100644
index 0000000..7e6aa56
--- /dev/null
+++ b/lib/upgrade/keep.d/uboot-envtools
@@ -0,0 +1,2 @@
+/etc/config/ubootenv
+/etc/fw_env.config
diff --git a/lib/upgrade/keep.d/uhttpd b/lib/upgrade/keep.d/uhttpd
new file mode 100644
index 0000000..b2d07bf
--- /dev/null
+++ b/lib/upgrade/keep.d/uhttpd
@@ -0,0 +1,2 @@
+/etc/uhttpd.crt
+/etc/uhttpd.key
diff --git a/lib/upgrade/nand.sh b/lib/upgrade/nand.sh
new file mode 100644
index 0000000..0ed1b63
--- /dev/null
+++ b/lib/upgrade/nand.sh
@@ -0,0 +1,364 @@
+#!/bin/sh
+# Copyright (C) 2014 OpenWrt.org
+#
+
+. /lib/functions.sh
+
+# 'kernel' partition on NAND contains the kernel
+CI_KERNPART="kernel"
+
+# 'ubi' partition on NAND contains UBI
+CI_UBIPART="ubi"
+
+ubi_mknod() {
+	local dir="$1"
+	local dev="/dev/$(basename $dir)"
+
+	[ -e "$dev" ] && return 0
+
+	local devid="$(cat $dir/dev)"
+	local major="${devid%%:*}"
+	local minor="${devid##*:}"
+	mknod "$dev" c $major $minor
+}
+
+nand_find_volume() {
+	local ubidevdir ubivoldir
+	ubidevdir="/sys/devices/virtual/ubi/$1"
+	[ ! -d "$ubidevdir" ] && return 1
+	for ubivoldir in $ubidevdir/${1}_*; do
+		[ ! -d "$ubivoldir" ] && continue
+		if [ "$( cat $ubivoldir/name )" = "$2" ]; then
+			basename $ubivoldir
+			ubi_mknod "$ubivoldir"
+			return 0
+		fi
+	done
+}
+
+nand_find_ubi() {
+	local ubidevdir ubidev mtdnum
+	mtdnum="$( find_mtd_index $1 )"
+	[ ! "$mtdnum" ] && return 1
+	for ubidevdir in /sys/devices/virtual/ubi/ubi*; do
+		[ ! -d "$ubidevdir" ] && continue
+		cmtdnum="$( cat $ubidevdir/mtd_num )"
+		[ ! "$mtdnum" ] && continue
+		if [ "$mtdnum" = "$cmtdnum" ]; then
+			ubidev=$( basename $ubidevdir )
+			ubi_mknod "$ubidevdir"
+			echo $ubidev
+			return 0
+		fi
+	done
+}
+
+nand_get_magic_long() {
+	dd if="$1" skip=$2 bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+get_magic_long_tar() {
+	( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null
+}
+
+identify_magic() {
+	local magic=$1
+	case "$magic" in
+		"55424923")
+			echo "ubi"
+			;;
+		"31181006")
+			echo "ubifs"
+			;;
+		"68737173")
+			echo "squashfs"
+			;;
+		"d00dfeed")
+			echo "fit"
+			;;
+		"4349"*)
+			echo "combined"
+			;;
+		*)
+			echo "unknown $magic"
+			;;
+	esac
+}
+
+
+identify() {
+	identify_magic $(nand_get_magic_long "$1" "${2:-0}")
+}
+
+identify_tar() {
+	identify_magic $(get_magic_long_tar "$1" "$2")
+}
+
+nand_restore_config() {
+	sync
+	local ubidev=$( nand_find_ubi $CI_UBIPART )
+	local ubivol="$( nand_find_volume $ubidev rootfs_data )"
+	[ ! "$ubivol" ] &&
+		ubivol="$( nand_find_volume $ubidev rootfs )"
+	mkdir /tmp/new_root
+	if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then
+		echo "mounting ubifs $ubivol failed"
+		rmdir /tmp/new_root
+		return 1
+	fi
+	mv "$1" "/tmp/new_root/sysupgrade.tgz"
+	umount /tmp/new_root
+	sync
+	rmdir /tmp/new_root
+}
+
+nand_upgrade_prepare_ubi() {
+	local rootfs_length="$1"
+	local rootfs_type="$2"
+	local has_kernel="${3:-0}"
+	local has_env="${4:-0}"
+
+	local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
+	if [ ! "$mtdnum" ]; then
+		echo "cannot find ubi mtd partition $CI_UBIPART"
+		return 1
+	fi
+
+	local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+	if [ ! "$ubidev" ]; then
+		ubiattach -m "$mtdnum"
+		sync
+		ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+	fi
+
+	if [ ! "$ubidev" ]; then
+		ubiformat /dev/mtd$mtdnum -y
+		ubiattach -m "$mtdnum"
+		sync
+		ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+		[ "$has_env" -gt 0 ] && {
+			ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
+			ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
+		}
+	fi
+
+	local kern_ubivol="$( nand_find_volume $ubidev kernel )"
+	local root_ubivol="$( nand_find_volume $ubidev rootfs )"
+	local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
+
+	# remove ubiblock device of rootfs
+	local root_ubiblk="ubiblock${root_ubivol:3}"
+	if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then
+		echo "removing $root_ubiblk"
+		if ! ubiblock -r /dev/$root_ubivol; then
+			echo "cannot remove $root_ubiblk"
+			return 1;
+		fi
+	fi
+
+	# kill volumes
+	[ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N kernel || true
+	[ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true
+	[ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
+
+	# update kernel
+	if [ "$has_kernel" = "1" ]; then
+		if ! ubimkvol /dev/$ubidev -N kernel -s $kernel_length; then
+			echo "cannot create kernel volume"
+			return 1;
+		fi
+	fi
+
+	# update rootfs
+	local root_size_param
+	if [ "$rootfs_type" = "ubifs" ]; then
+		root_size_param="-m"
+	else
+		root_size_param="-s $rootfs_length"
+	fi
+	if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then
+		echo "cannot create rootfs volume"
+		return 1;
+	fi
+
+	# create rootfs_data for non-ubifs rootfs
+	if [ "$rootfs_type" != "ubifs" ]; then
+		if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then
+			echo "cannot initialize rootfs_data volume"
+			return 1
+		fi
+	fi
+	sync
+	return 0
+}
+
+nand_do_upgrade_success() {
+	local conf_tar="/tmp/sysupgrade.tgz"
+	
+	sync
+	[ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
+	echo "sysupgrade successful"
+	reboot -f
+}
+
+# Flash the UBI image to MTD partition
+nand_upgrade_ubinized() {
+	local ubi_file="$1"
+	local mtdnum="$(find_mtd_index "$CI_UBIPART")"
+
+	[ ! "$mtdnum" ] && {
+		CI_UBIPART="rootfs"
+		mtdnum="$(find_mtd_index "$CI_UBIPART")"
+	}
+
+	if [ ! "$mtdnum" ]; then
+		echo "cannot find mtd device $CI_UBIPART"
+		reboot -f
+	fi
+
+	local mtddev="/dev/mtd${mtdnum}"
+	ubidetach -p "${mtddev}" || true
+	sync
+	ubiformat "${mtddev}" -y -f "${ubi_file}"
+	ubiattach -p "${mtddev}"
+	nand_do_upgrade_success
+}
+
+# Write the UBIFS image to UBI volume
+nand_upgrade_ubifs() {
+	local rootfs_length=`(cat $1 | wc -c) 2> /dev/null`
+
+	nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0"
+	
+	local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+	local root_ubivol="$(nand_find_volume $ubidev rootfs)"
+	ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1
+
+	nand_do_upgrade_success
+}
+
+nand_upgrade_tar() {
+	local tar_file="$1"
+	local board_name="$(cat /tmp/sysinfo/board_name)"
+	local kernel_mtd="$(find_mtd_index $CI_KERNPART)"
+
+	local kernel_length=`(tar xf $tar_file sysupgrade-$board_name/kernel -O | wc -c) 2> /dev/null`
+	local rootfs_length=`(tar xf $tar_file sysupgrade-$board_name/root -O | wc -c) 2> /dev/null`
+
+	local rootfs_type="$(identify_tar "$tar_file" sysupgrade-$board_name/root)"
+
+	local has_kernel=1
+	local has_env=0
+
+	[ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && {
+		tar xf $tar_file sysupgrade-$board_name/kernel -O | mtd write - $CI_KERNPART
+	}
+	[ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0
+
+	nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env"
+
+	local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
+	[ "$has_kernel" = "1" ] && {
+		local kern_ubivol="$(nand_find_volume $ubidev kernel)"
+	 	tar xf $tar_file sysupgrade-$board_name/kernel -O | \
+			ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
+	}
+
+	local root_ubivol="$(nand_find_volume $ubidev rootfs)"
+	tar xf $tar_file sysupgrade-$board_name/root -O | \
+		ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
+
+	nand_do_upgrade_success
+}
+
+# Recognize type of passed file and start the upgrade process
+nand_do_upgrade_stage2() {
+	local file_type=$(identify $1)
+
+	[ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs"
+
+	case "$file_type" in
+		"ubi")		nand_upgrade_ubinized $1;;
+		"ubifs")	nand_upgrade_ubifs $1;;
+		*)		nand_upgrade_tar $1;;
+	esac
+}
+
+nand_upgrade_stage2() {
+	[ $1 = "nand" ] && {
+		[ -f "$2" ] && {
+			touch /tmp/sysupgrade
+
+			killall -9 telnetd
+			killall -9 dropbear
+			killall -9 ash
+
+			kill_remaining TERM
+			sleep 3
+			kill_remaining KILL
+
+			sleep 1
+
+			if [ -n "$(rootfs_type)" ]; then
+				v "Switching to ramdisk..."
+				run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2"
+			else
+				nand_do_upgrade_stage2 $2
+			fi
+			return 0
+		}
+		echo "Nand upgrade failed"
+		exit 1
+	}
+}
+
+nand_upgrade_stage1() {
+	[ -f /tmp/sysupgrade-nand-path ] && {
+		path="$(cat /tmp/sysupgrade-nand-path)"
+		[ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] &&
+			rm $CONF_TAR
+
+		ubus call system nandupgrade "{\"path\": \"$path\" }"
+		exit 0
+	}
+}
+append sysupgrade_pre_upgrade nand_upgrade_stage1
+
+# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts
+# 3 types of files:
+# 1) UBI - should contain an ubinized image, header is checked for the proper
+#    MAGIC
+# 2) UBIFS - should contain UBIFS partition that will replace "rootfs" volume,
+#    header is checked for the proper MAGIC
+# 3) TAR - archive has to include "sysupgrade-BOARD" directory with a non-empty
+#    "CONTROL" file (at this point its content isn't verified)
+#
+# You usually want to call this function in platform_check_image.
+#
+# $(1): board name, used in case of passing TAR file
+# $(2): file to be checked
+nand_do_platform_check() {
+	local board_name="$1"
+	local tar_file="$2"
+	local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null`
+	local file_type="$(identify $2)"
+
+	[ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && {
+		echo "Invalid sysupgrade file."
+		return 1
+	}
+
+	echo -n $2 > /tmp/sysupgrade-nand-path
+	cp /sbin/upgraded /tmp/
+
+	return 0
+}
+
+# Start NAND upgrade process
+#
+# $(1): file to be used for upgrade
+nand_do_upgrade() {
+	echo -n $1 > /tmp/sysupgrade-nand-path
+	cp /sbin/upgraded /tmp/
+	nand_upgrade_stage1
+}
diff --git a/lib/upgrade/openmesh.sh b/lib/upgrade/openmesh.sh
new file mode 100644
index 0000000..95d39bf
--- /dev/null
+++ b/lib/upgrade/openmesh.sh
@@ -0,0 +1,226 @@
+# The U-Boot loader of the OpenMesh devices requires image sizes and
+# checksums to be provided in the U-Boot environment.
+# The OpenMesh devices come with 2 main partitions - while one is active
+# sysupgrade will flash the other. The boot order is changed to boot the
+# newly flashed partition. If the new partition can't be booted due to
+# upgrade failures the previously used partition is loaded.
+
+trim()
+{
+	echo $1
+}
+
+cfg_value_get()
+{
+	local cfg=$1 cfg_opt
+	local section=$2 our_section=0
+	local param=$3 our_param=
+
+	for cfg_opt in $cfg
+		do
+			[ "$cfg_opt" = "[$section]" ] && our_section=1 && continue
+			[ "$our_section" = "1" ] || continue
+
+			our_param=$(echo ${cfg_opt%%=*})
+			[ "$param" = "$our_param" ] && echo ${cfg_opt##*=} && break
+		done
+}
+
+# make sure we got uboot-envtools and fw_env.config copied over to the ramfs
+# create /var/lock for the lock "fw_setenv.lock" of fw_setenv
+platform_add_ramfs_ubootenv()
+{
+	[ -e /usr/sbin/fw_printenv ] && install_bin /usr/sbin/fw_printenv /usr/sbin/fw_setenv
+	[ -e /etc/fw_env.config ] && install_file /etc/fw_env.config
+	mkdir -p $RAM_ROOT/var/lock
+}
+append sysupgrade_pre_upgrade platform_add_ramfs_ubootenv
+
+platform_check_image_openmesh()
+{
+	local img_magic=$1
+	local img_path=$2
+	local fw_printenv=/usr/sbin/fw_printenv
+	local img_board_target= img_num_files= i=0
+	local cfg_name= kernel_name= rootfs_name=
+
+	case "$img_magic" in
+		# Combined Extended Image v1
+		43453031)
+			img_board_target=$(trim $(dd if="$img_path" bs=4 skip=1 count=8 2>/dev/null))
+			img_num_files=$(trim $(dd if="$img_path" bs=2 skip=18 count=1 2>/dev/null))
+			;;
+		*)
+			echo "Invalid image ($img_magic). Use combined extended images on this platform"
+			return 1
+			;;
+	esac
+
+	case "$img_board_target" in
+		OM2P)
+			[ "$board" = "om2p" ] && break
+			[ "$board" = "om2pv2" ] && break
+			[ "$board" = "om2p-lc" ] && break
+			[ "$board" = "om2p-hs" ] && break
+			[ "$board" = "om2p-hsv2" ] && break
+			[ "$board" = "om2p-hsv3" ] && break
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
+			return 1
+			;;
+		OM5P)
+			[ "$board" = "om5p" ] && break
+			[ "$board" = "om5p-an" ] && break
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
+			return 1
+			;;
+		OM5PAC)
+			[ "$board" = "om5p-ac" ] && break
+			[ "$board" = "om5p-acv2" ] && break
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
+			return 1
+			;;
+		MR1750)
+			[ "$board" = "mr1750" ] && break
+			[ "$board" = "mr1750v2" ] && break
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
+			return 1
+			;;
+		MR600)
+			[ "$board" = "mr600" ] && break
+			[ "$board" = "mr600v2" ] && break
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
+			return 1
+			;;
+		MR900)
+			[ "$board" = "mr900" ] && break
+			[ "$board" = "mr900v2" ] && break
+			echo "Invalid image board target ($img_board_target) for this platform: $board. Use the correct image for this platform"
+			return 1
+			;;
+		*)
+			echo "Invalid board target ($img_board_target). Use the correct image for this platform"
+			return 1
+			;;
+	esac
+
+	[ $img_num_files -ne 3 ] && {
+		echo "Invalid number of embedded images ($img_num_files). Use the correct image for this platform"
+		return 1
+	}
+
+	cfg_name=$(trim $(dd if="$img_path" bs=2 skip=19 count=16 2>/dev/null))
+
+	[ "$cfg_name" != "fwupgrade.cfg" ] && {
+		echo "Invalid embedded config file ($cfg_name). Use the correct image for this platform"
+		return 1
+	}
+
+	kernel_name=$(trim $(dd if="$img_path" bs=2 skip=55 count=16 2>/dev/null))
+
+	[ "$kernel_name" != "kernel" ] && {
+		echo "Invalid embedded kernel file ($kernel_name). Use the correct image for this platform"
+		return 1
+	}
+
+	rootfs_name=$(trim $(dd if="$img_path" bs=2 skip=91 count=16 2>/dev/null))
+
+	[ "$rootfs_name" != "rootfs" ] && {
+		echo "Invalid embedded kernel file ($rootfs_name). Use the correct image for this platform"
+		return 1
+	}
+
+	[ ! -x "$fw_printenv" ] && {
+		echo "Please install uboot-envtools!"
+		return 1
+	}
+
+	[ ! -r "/etc/fw_env.config" ] && {
+		echo "/etc/fw_env.config is missing"
+		return 1
+	}
+
+	return 0
+}
+
+platform_do_upgrade_openmesh()
+{
+	local img_path=$1 img_board_target=
+	local kernel_start_addr= kernel_start_addr1= kernel_start_addr2=
+	local kernel_size= kernel_md5=
+	local rootfs_size= rootfs_checksize= rootfs_md5=
+	local kernel_bsize= total_size=
+	local data_offset=$((64 * 1024)) block_size= offset=
+	local uboot_env_upgrade="/tmp/fw_env_upgrade"
+	local cfg_size= kernel_size= rootfs_size=
+	local append=""
+
+	[ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+
+	cfg_size=$(dd if="$img_path" bs=2 skip=35 count=4 2>/dev/null)
+	kernel_size=$(dd if="$img_path" bs=2 skip=71 count=4 2>/dev/null)
+	rootfs_size=$(dd if="$img_path" bs=2 skip=107 count=4 2>/dev/null)
+
+	img_board_target=$(trim $(dd if="$img_path" bs=4 skip=1 count=8 2>/dev/null))
+	cfg_content=$(dd if="$img_path" bs=1 skip=$data_offset count=$(echo $((0x$cfg_size))) 2>/dev/null)
+
+	case $img_board_target in
+		OM2P)
+			block_size=$((256 * 1024))
+			total_size=7340032
+			kernel_start_addr1=0x9f1c0000
+			kernel_start_addr2=0x9f8c0000
+			;;
+		OM5P|OM5PAC|MR600|MR900|MR1750)
+			block_size=$((64 * 1024))
+			total_size=7995392
+			kernel_start_addr1=0x9f0b0000
+			kernel_start_addr2=0x9f850000
+			;;
+	esac
+
+	kernel_md5=$(cfg_value_get "$cfg_content" "vmlinux" "md5sum")
+	rootfs_md5=$(cfg_value_get "$cfg_content" "rootfs" "md5sum")
+	rootfs_checksize=$(cfg_value_get "$cfg_content" "rootfs" "checksize")
+
+	if [ "$((0x$kernel_size % $block_size))" = "0" ]
+		then
+			kernel_bsize=$(echo $((0x$kernel_size)))
+		else
+			kernel_bsize=$((0x$kernel_size + ($block_size - (0x$kernel_size % $block_size))))
+	fi
+
+	mtd -q erase inactive
+
+	offset=$(echo $(($data_offset + 0x$cfg_size + 0x$kernel_size)))
+	dd if="$img_path" bs=1 skip=$offset count=$(echo $((0x$rootfs_size))) 2>&- | mtd -n -p $kernel_bsize $append write - "inactive"
+
+	offset=$(echo $(($data_offset + 0x$cfg_size)))
+	dd if="$img_path" bs=1 skip=$offset count=$(echo $((0x$kernel_size))) 2>&- | mtd -n write - "inactive"
+
+	rm $uboot_env_upgrade 2>&-
+
+	if [ "$(grep 'mtd3:.*inactive' /proc/mtd)" ]
+		then
+			printf "kernel_size_1 %u\n" $(($kernel_bsize / 1024)) >> $uboot_env_upgrade
+			printf "rootfs_size_1 %u\n" $((($total_size - $kernel_bsize) / 1024)) >> $uboot_env_upgrade
+			printf "bootseq 1,2\n" >> $uboot_env_upgrade
+			kernel_start_addr=$kernel_start_addr1
+		else
+			printf "kernel_size_2 %u\n" $(($kernel_bsize / 1024)) >> $uboot_env_upgrade
+			printf "rootfs_size_2 %u\n" $((($total_size - $kernel_bsize) / 1024)) >> $uboot_env_upgrade
+			printf "bootseq 2,1\n" >> $uboot_env_upgrade
+			kernel_start_addr=$kernel_start_addr2
+	fi
+
+	printf "vmlinux_start_addr %s\n" $kernel_start_addr >> $uboot_env_upgrade
+	printf "vmlinux_size 0x%s\n" $kernel_size >> $uboot_env_upgrade
+	printf "vmlinux_checksum %s\n" $kernel_md5 >> $uboot_env_upgrade
+	printf "rootfs_start_addr 0x%x\n" $(($kernel_start_addr + $kernel_bsize)) >> $uboot_env_upgrade
+	printf "rootfs_size %s\n" $rootfs_checksize >> $uboot_env_upgrade
+	printf "rootfs_checksum %s\n" $rootfs_md5 >> $uboot_env_upgrade
+
+	fw_setenv -s $uboot_env_upgrade || {
+		echo "failed to update U-Boot environment"
+		return 1
+	}
+}
diff --git a/lib/upgrade/platform.sh b/lib/upgrade/platform.sh
new file mode 100755
index 0000000..3dfca44
--- /dev/null
+++ b/lib/upgrade/platform.sh
@@ -0,0 +1,629 @@
+#
+# Copyright (C) 2011 OpenWrt.org
+#
+
+. /lib/functions/system.sh
+. /lib/ar71xx.sh
+
+PART_NAME=firmware
+RAMFS_COPY_DATA=/lib/ar71xx.sh
+
+CI_BLKSZ=65536
+CI_LDADR=0x80060000
+
+platform_find_partitions() {
+	local first dev size erasesize name
+	while read dev size erasesize name; do
+		name=${name#'"'}; name=${name%'"'}
+		case "$name" in
+			vmlinux.bin.l7|vmlinux|kernel|linux|linux.bin|rootfs|filesystem)
+				if [ -z "$first" ]; then
+					first="$name"
+				else
+					echo "$erasesize:$first:$name"
+					break
+				fi
+			;;
+		esac
+	done < /proc/mtd
+}
+
+platform_find_kernelpart() {
+	local part
+	for part in "${1%:*}" "${1#*:}"; do
+		case "$part" in
+			vmlinux.bin.l7|vmlinux|kernel|linux|linux.bin)
+				echo "$part"
+				break
+			;;
+		esac
+	done
+}
+
+platform_do_upgrade_combined() {
+	local partitions=$(platform_find_partitions)
+	local kernelpart=$(platform_find_kernelpart "${partitions#*:}")
+	local erase_size=$((0x${partitions%%:*})); partitions="${partitions#*:}"
+	local kern_length=0x$(dd if="$1" bs=2 skip=1 count=4 2>/dev/null)
+	local kern_blocks=$(($kern_length / $CI_BLKSZ))
+	local root_blocks=$((0x$(dd if="$1" bs=2 skip=5 count=4 2>/dev/null) / $CI_BLKSZ))
+
+	if [ -n "$partitions" ] && [ -n "$kernelpart" ] && \
+	   [ ${kern_blocks:-0} -gt 0 ] && \
+	   [ ${root_blocks:-0} -gt 0 ] && \
+	   [ ${erase_size:-0} -gt 0 ];
+	then
+		local append=""
+		[ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+
+		( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \
+		  dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \
+			mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions
+	fi
+}
+
+tplink_get_image_hwid() {
+	get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+tplink_get_image_boot_size() {
+	get_image "$@" | dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+tplink_pharos_check_image() {
+	local magic_long="$(get_magic_long "$1")"
+	[ "$magic_long" != "7f454c46" ] && {
+		echo "Invalid image magic '$magic_long'"
+		return 1
+	}
+
+	local model_string="$(tplink_pharos_get_model_string)"
+	local line
+
+	# Here $1 is given to dd directly instead of get_image as otherwise the skip
+	# will take almost a second (as dd can't seek then)
+	#
+	# This will fail if the image isn't local, but that's fine: as the
+	# read loop won't be executed at all, it will return true, so the image
+	# is accepted (loading the first 1.5M of a remote image for this check seems
+	# a bit extreme)
+	dd if="$1" bs=1 skip=1511432 count=1024 2>/dev/null | while read line; do
+		[ "$line" == "$model_string" ] && break
+	done || {
+		echo "Unsupported image (model not in support-list)"
+		return 1
+	}
+
+	return 0
+}
+
+seama_get_type_magic() {
+	get_image "$@" | dd bs=1 count=4 skip=53 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
+}
+
+cybertan_get_image_magic() {
+	get_image "$@" | dd bs=8 count=1 skip=0  2>/dev/null | hexdump -v -n 8 -e '1/1 "%02x"'
+}
+
+cybertan_check_image() {
+	local magic="$(cybertan_get_image_magic "$1")"
+	local fw_magic="$(cybertan_get_hw_magic)"
+
+	[ "$fw_magic" != "$magic" ] && {
+		echo "Invalid image, ID mismatch, got:$magic, but need:$fw_magic"
+		return 1
+	}
+
+	return 0
+}
+
+platform_do_upgrade_compex() {
+	local fw_file=$1
+	local fw_part=$PART_NAME
+	local fw_mtd=$(find_mtd_part $fw_part)
+	local fw_length=0x$(dd if="$fw_file" bs=2 skip=1 count=4 2>/dev/null)
+	local fw_blocks=$(($fw_length / 65536))
+
+	if [ -n "$fw_mtd" ] &&  [ ${fw_blocks:-0} -gt 0 ]; then
+		local append=""
+		[ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+
+		sync
+		dd if="$fw_file" bs=64k skip=1 count=$fw_blocks 2>/dev/null | \
+			mtd $append write - "$fw_part"
+	fi
+}
+
+alfa_check_image() {
+	local magic_long="$(get_magic_long "$1")"
+	local fw_part_size=$(mtd_get_part_size firmware)
+
+	case "$magic_long" in
+	"27051956")
+		[ "$fw_part_size" != "16318464" ] && {
+			echo "Invalid image magic \"$magic_long\" for $fw_part_size bytes"
+			return 1
+		}
+		;;
+
+	"68737173")
+		[ "$fw_part_size" != "7929856" ] && {
+			echo "Invalid image magic \"$magic_long\" for $fw_part_size bytes"
+			return 1
+		}
+		;;
+	esac
+
+	return 0
+}
+
+platform_check_image() {
+	local board=$(ar71xx_board_name)
+	local magic="$(get_magic_word "$1")"
+	local magic_long="$(get_magic_long "$1")"
+
+	[ "$#" -gt 1 ] && return 1
+
+	case "$board" in
+	all0315n | \
+	all0258n | \
+	cap4200ag)
+		platform_check_image_allnet "$1" && return 0
+		return 1
+		;;
+	alfa-ap96 | \
+	alfa-nx | \
+	ap113 | \
+	ap121 | \
+	ap121-mini | \
+	ap136-010 | \
+	ap136-020 | \
+	ap137 |\
+	ap135 |\
+	ap135-020 | \
+	ap147 |\
+	ap147-010 | \
+	ap152 |\
+	ap96 | \
+	apjet01 |\
+	bxu2000n-2-a1 | \
+	db120 | \
+	dw33d | \
+	f9k1115v2 |\
+	hornet-ub | \
+	mr12 | \
+	mr16 | \
+	wpj558 | \
+	zcn-1523h-2 | \
+	zcn-1523h-5)
+		[ "$magic_long" != "68737173" -a "$magic_long" != "19852003" -a "$magic_long" != "1985e001" ] && {
+			echo "Invalid image type."
+			return 1
+		}
+		return 0
+		;;
+	ap81 | \
+	ap83 | \
+	ap132 | \
+	dgl-5500-a1 |\
+	dhp-1565-a1 |\
+	dir-505-a1 | \
+	dir-600-a1 | \
+	dir-615-c1 | \
+	dir-615-e1 | \
+	dir-615-e4 | \
+	dir-615-i1 | \
+	dir-825-c1 | \
+	dir-835-a1 | \
+	dlan-pro-500-wp | \
+	dragino2 | \
+	epg5000 | \
+	esr1750 | \
+	esr900 | \
+	ew-dorin | \
+	ew-dorin-router | \
+	hiwifi-hc6361 | \
+	hornet-ub-x2 | \
+	mzk-w04nu | \
+	mzk-w300nh | \
+	tew-632brp | \
+	tew-712br | \
+	tew-732br | \
+	wrt400n | \
+	airgateway | \
+	airrouter | \
+	bullet-m | \
+	loco-m-xw | \
+	nanostation-m | \
+	rocket-m | \
+	rocket-m-xw | \
+	nanostation-m-xw | \
+	rw2458n | \
+	wpj531 | \
+	wndap360 | \
+	wpj344 | \
+	wzr-hp-g300nh2 | \
+	wzr-hp-g300nh | \
+	wzr-hp-g450h | \
+	wzr-hp-ag300h | \
+	wzr-450hp2 | \
+	whr-g301n | \
+	whr-hp-g300n | \
+	whr-hp-gn | \
+	wlae-ag300n | \
+	nbg460n_550n_550nh | \
+	unifi | \
+	unifi-outdoor | \
+	carambola2 | \
+	weio )
+		[ "$magic" != "2705" ] && {
+			echo "Invalid image type."
+			return 1
+		}
+		return 0
+		;;
+
+	ap151 |\
+	devolo-* | \
+	dlan-* | \
+	dvl-*)
+		platform_check_image_delos "$1" && return 0
+		return 1
+		;;
+
+	cpe510)
+		tplink_pharos_check_image "$1" && return 0
+		return 1
+		;;
+
+	bsb | \
+	dir-825-b1 | \
+	tew-673gru)
+		dir825b_check_image "$1" && return 0
+		;;
+
+	mynet-rext|\
+	e2100l|\
+	wrt160nl)
+		cybertan_check_image "$1" && return 0
+		return 1
+		;;
+
+	qihoo-c301 | \
+	mynet-n600 | \
+	mynet-n750)
+		[ "$magic_long" != "5ea3a417" ] && {
+			echo "Invalid image, bad magic: $magic_long"
+			return 1
+		}
+
+		local typemagic=$(seama_get_type_magic "$1")
+		[ "$typemagic" != "6669726d" ] && {
+			echo "Invalid image, bad type: $typemagic"
+			return 1
+		}
+
+		return 0;
+		;;
+	mr1750 | \
+	mr1750v2 | \
+	mr600 | \
+	mr600v2 | \
+	mr900 | \
+	mr900v2 | \
+	om2p | \
+	om2pv2 | \
+	om2p-hs | \
+	om2p-hsv2 | \
+	om2p-hsv3 | \
+	om2p-lc | \
+	om5p | \
+	om5p-an | \
+	om5p-ac | \
+	om5p-acv2)
+		platform_check_image_openmesh "$magic_long" "$1" && return 0
+		return 1
+		;;
+
+	antminer-s1 | \
+	antminer-s3 | \
+	archer-c5 | \
+	archer-c7 | \
+	el-m150 | \
+	el-mini | \
+	gl-inet | \
+	mc-mac1200r | \
+	minibox-v1 |\
+	onion-omega | \
+	oolite | \
+	smart-300 | \
+	tl-mr10u | \
+	tl-mr11u | \
+	tl-mr12u | \
+	tl-mr13u | \
+	tl-mr3020 | \
+	tl-mr3040 | \
+	tl-mr3040-v2 | \
+	tl-mr3220 | \
+	tl-mr3220-v2 | \
+	tl-mr3420 | \
+	tl-mr3420-v2 | \
+	tl-wa701nd-v2 | \
+	tl-wa7210n-v2 | \
+	tl-wa7510n | \
+	tl-wa750re | \
+	tl-wa850re | \
+	tl-wa860re | \
+	tl-wa801nd-v2 | \
+	tl-wa901nd | \
+	tl-wa901nd-v2 | \
+	tl-wa901nd-v3 | \
+	tl-wa901nd-v4 | \
+	tl-wdr3500 | \
+	tl-wdr4300 | \
+	tl-wdr4900-v2 | \
+	tl-wr703n | \
+	tl-wr710n | \
+	tl-wr720n-v3 | \
+	tl-wr741nd | \
+	tl-wr741nd-v4 | \
+	tl-wr841n-v1 | \
+	tl-wa830re-v2 | \
+	tl-wr841n-v7 | \
+	tl-wr841n-v8 | \
+	tl-wr841n-v9 | \
+	tl-wr841n-v11 | \
+	tl-wr842n-v2 | \
+	tl-wr941nd | \
+	tl-wr941nd-v5 | \
+	tl-wr941nd-v6 | \
+	tl-wr1041n-v2 | \
+	tl-wr1043nd | \
+	tl-wr1043nd-v2 | \
+	tl-wr2543n)
+		[ "$magic" != "0100" ] && {
+			echo "Invalid image type."
+			return 1
+		}
+
+		local hwid
+		local imageid
+
+		hwid=$(tplink_get_hwid)
+		imageid=$(tplink_get_image_hwid "$1")
+
+		[ "$hwid" != "$imageid" ] && {
+			echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid."
+			return 1
+		}
+
+		local boot_size
+
+		boot_size=$(tplink_get_image_boot_size "$1")
+		[ "$boot_size" != "00000000" ] && {
+			echo "Invalid image, it contains a bootloader."
+			return 1
+		}
+
+		return 0
+		;;
+
+	tube2h)
+		alfa_check_image "$1" && return 0
+		return 1
+		;;
+
+	unifi-outdoor-plus | \
+	uap-pro)
+		[ "$magic_long" != "19852003" ] && {
+			echo "Invalid image type."
+			return 1
+		}
+		return 0
+		;;
+	wndr3700 | \
+	wnr2000-v3 | \
+	wnr612-v2 | \
+	wnr1000-v2 | \
+	wpn824n)
+		local hw_magic
+
+		hw_magic="$(ar71xx_get_mtd_part_magic firmware)"
+		[ "$magic_long" != "$hw_magic" ] && {
+			echo "Invalid image, hardware ID mismatch, hw:$hw_magic image:$magic_long."
+			return 1
+		}
+		return 0
+		;;
+	nbg6716 | \
+	r6100 | \
+	wndr3700v4 | \
+	wndr4300 )
+		nand_do_platform_check $board $1
+		return $?;
+		;;
+	routerstation | \
+	routerstation-pro | \
+	ls-sr71 | \
+	pb42 | \
+	pb44 | \
+	all0305 | \
+	eap300v2 | \
+	eap7660d | \
+	ja76pf | \
+	ja76pf2 | \
+	jwap003 | \
+	wp543 | \
+	wpe72)
+		[ "$magic" != "4349" ] && {
+			echo "Invalid image. Use *-sysupgrade.bin files on this board"
+			return 1
+		}
+
+		local md5_img=$(dd if="$1" bs=2 skip=9 count=16 2>/dev/null)
+		local md5_chk=$(dd if="$1" bs=$CI_BLKSZ skip=1 2>/dev/null | md5sum -); md5_chk="${md5_chk%% *}"
+
+		if [ -n "$md5_img" -a -n "$md5_chk" ] && [ "$md5_img" = "$md5_chk" ]; then
+			return 0
+		else
+			echo "Invalid image. Contents do not match checksum (image:$md5_img calculated:$md5_chk)"
+			return 1
+		fi
+		return 0
+		;;
+	wnr2000-v4)
+		[ "$magic_long" != "32303034" ] && {
+			echo "Invalid image type."
+			return 1
+		}
+		return 0
+		;;
+	wnr2200)
+                [ "$magic_long" != "32323030" ] && {
+                        echo "Invalid image type."
+                        return 1
+                }
+                return 0
+                ;;
+
+	ap143 | \
+	cus531 | \
+	cus531-dual | \
+	cus531-nand | \
+	cus531mp3 | \
+	cus531mp3-dual | \
+	cus531mp3-nand | \
+	cus532k)
+		platform_check_image_ioe "$1" && return 0
+		return 1
+		;;
+	esac
+
+	echo "Sysupgrade is not yet supported on $board."
+	return 1
+}
+
+platform_check_config() {
+	local board=$(ar71xx_board_name)
+	local magic="$(get_magic_word "$1")"
+	local magic_long="$(get_magic_long "$1")"
+
+	[ "$#" -gt 1 ] && return 1
+
+	case "$board" in
+	devolo-* | \
+	dlan-* | \
+	dvl-*)
+		platform_check_config_delos "$1"
+		return $?
+		;;
+	esac
+
+	return 0
+}
+
+platform_pre_upgrade() {
+	local board=$(ar71xx_board_name)
+
+	case "$board" in
+	nbg6716 | \
+	r6100 | \
+	wndr3700v4 | \
+	wndr4300 )
+		nand_do_upgrade "$1"
+		;;
+	devolo-* | \
+	dlan-* | \
+	dvl-*)
+		platform_pre_upgrade_delos "$1"
+		;;
+	esac
+}
+
+platform_do_upgrade() {
+	local board=$(ar71xx_board_name)
+
+	case "$board" in
+	routerstation | \
+	routerstation-pro | \
+	ls-sr71 | \
+	all0305 | \
+	eap7660d | \
+	pb42 | \
+	pb44 | \
+	ja76pf | \
+	ja76pf2 | \
+	jwap003)
+		platform_do_upgrade_combined "$ARGV"
+		;;
+	wp543|\
+	wpe72)
+		platform_do_upgrade_compex "$ARGV"
+		;;
+	all0258n )
+		platform_do_upgrade_allnet "0x9f050000" "$ARGV"
+		;;
+	all0315n )
+		platform_do_upgrade_allnet "0x9f080000" "$ARGV"
+		;;
+	eap300v2 |\
+	cap4200ag)
+		platform_do_upgrade_allnet "0xbf0a0000" "$ARGV"
+		;;
+	dir-825-b1 |\
+	tew-673gru)
+		platform_do_upgrade_dir825b "$ARGV"
+		;;
+	mr1750 | \
+	mr1750v2 | \
+	mr600 | \
+	mr600v2 | \
+	mr900 | \
+	mr900v2 | \
+	om2p | \
+	om2pv2 | \
+	om2p-hs | \
+	om2p-hsv2 | \
+	om2p-hsv3 | \
+	om2p-lc | \
+	om5p | \
+	om5p-an | \
+	om5p-ac | \
+	om5p-acv2)
+		platform_do_upgrade_openmesh "$ARGV"
+		;;
+	devolo-* | \
+	dlan-* | \
+	dvl-*)
+		platform_do_upgrade_delos "$ARGV"
+		;;
+	unifi-outdoor-plus | \
+	uap-pro)
+		MTD_CONFIG_ARGS="-s 0x180000"
+		default_do_upgrade "$ARGV"
+		;;
+	ap143 | \
+	cus531 | \
+	cus531-dual | \
+	cus531-nand | \
+	cus531mp3 | \
+	cus531mp3-dual | \
+	cus531mp3-nand | \
+	cus532k)
+		platform_do_upgrade_ioe "$ARGV" "$board"
+		;;
+	*)
+		default_do_upgrade "$ARGV"
+		;;
+	esac
+}
+
+disable_watchdog() {
+	killall watchdog
+	( ps | grep -v 'grep' | grep '/dev/watchdog' ) && {
+		echo 'Could not disable watchdog'
+		return 1
+	}
+}
+
+append sysupgrade_pre_upgrade disable_watchdog
diff --git a/lib/wifi/debug/counters_wlan_prompt_akronite.sh b/lib/wifi/debug/counters_wlan_prompt_akronite.sh
new file mode 100755
index 0000000..4e16104
--- /dev/null
+++ b/lib/wifi/debug/counters_wlan_prompt_akronite.sh
@@ -0,0 +1,139 @@
+#! /bin/sh
+#
+# Copyright (c) 2018 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+echo "=============> Syntax counters_wlan.sh <WIFI IF NAME> <ATH IF NAME> ============ "
+echo "----------- Make sure you have passed right arguments -----------"
+sleep 4
+
+echo "Start collecting data"
+echo "Clear kernel log"
+        dmesg -c > /tmp/droplog
+        rm /tmp/droplog
+
+echo "======================================"
+echo "switch port 0"
+echo "======================================"
+	swconfig dev switch0 port 0 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 1"
+echo "======================================"
+	swconfig dev switch0 port 1 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 2"
+echo "======================================"
+	swconfig dev switch0 port 2 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 3"
+echo "======================================"
+	swconfig dev switch0 port 3 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 4"
+echo "======================================"
+	swconfig dev switch0 port 4 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 5"
+echo "======================================"
+	swconfig dev switch0 port 5 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 6"
+echo "======================================"
+	swconfig dev switch0 port 6 get mib
+	sleep 2
+
+echo "======================================"
+echo "NSS"
+echo "======================================"
+        cat /sys/kernel/debug/qca-nss-drv/stats/*
+echo "======================================"
+
+echo "Scaling command"
+echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
+echo "performance" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
+echo 0 > /proc/sys/dev/nss/clock/auto_scale
+echo 800000000 > /proc/sys/dev/nss/clock/current_freq
+
+cat /sys/class/net/ath0/queues/rx-0/rps_cpus
+cat /sys/class/net/ath1/queues/rx-0/rps_cpus
+cat /sys/class/net/ath2/queues/rx-0/rps_cpus
+
+echo 1 > /proc/sys/net/gmac/per_prec_stats_enable
+echo "48 1 1" > /proc/sys/dev/nss/ipv4cfg/ipv4_dscp_map
+echo "40 1 1" > /proc/sys/dev/nss/ipv4cfg/ipv4_dscp_map
+
+
+
+ifconfig eth0
+ifconfig eth1
+ifconfig eth2
+
+echo "GMAC0"
+echo "======================================"
+        ethtool -S eth0
+        sleep 1
+echo "======================================"
+echo "GMAC1"
+echo "======================================"
+        ethtool -S eth1
+        sleep 2
+echo "======================================"
+echo "GMAC2"
+echo "======================================"
+        ethtool -S eth2
+        sleep 2
+echo "======================================"
+echo "Wifi Host Q stats"
+echo "=================================="
+        iwpriv $1 fc_stats_global 1
+        sleep 3
+echo "===>>>  Enabling Delay Stats ========"
+	iwpriv $1 fc_delay_stats 1
+echo "===== WIFI Video Stats ============"
+	iwpriv $1 fc_video_stats
+        sleep 2
+        iwpriv $1 fc_tidq_map 1
+        sleep 2
+        iwpriv $2 txrx_fw_stats 8
+        sleep 1
+	ifconfig $2
+echo "========= FW Stats ================= "
+        wifitool $2 beeliner_fw_test 191 0
+        wifitool $2 beeliner_fw_test 191 1
+        wifitool $2 beeliner_fw_test 191 2
+        wifitool $2 beeliner_fw_test 191 3
+        wifitool $2 beeliner_fw_test 195 1
+        wifitool $2 beeliner_fw_test 195 2
+        wifitool $2 beeliner_fw_test 195 3
+        wifitool $2 beeliner_fw_test 195 4
+        wifitool $2 beeliner_fw_test 195 5
+echo "=================================="
+        sleep 1
+        iwpriv $2 txrx_fw_stats 19
+        iwpriv $2 txrx_fw_stats 20
+        sleep 1
+        iwpriv $2 txrx_fw_stats 21
+        iwpriv $2 txrx_fw_stats 22
+        iwpriv $2 txrx_fw_stats 23
+        sleep 1
+	iwpriv $2 txrx_fw_stats 1
+        iwpriv $2 txrx_fw_stats 2
+        sleep 1
+        iwpriv $2 txrx_fw_stats 3
+        iwpriv $2 txrx_fw_stats 6
+        iwpriv $2 txrx_fw_stats 12
+        sleep 1
+echo "======================================"
+echo "Kernel log"
+echo "======================================"
+echo "Stop collecting data"
+
+        exit 0
diff --git a/lib/wifi/debug/counters_wlan_prompt_dakota.sh b/lib/wifi/debug/counters_wlan_prompt_dakota.sh
new file mode 100755
index 0000000..5b78657
--- /dev/null
+++ b/lib/wifi/debug/counters_wlan_prompt_dakota.sh
@@ -0,0 +1,137 @@
+#! /bin/sh
+#
+# Copyright (c) 2018 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+echo "=============> Syntax counters_wlan.sh <WIFI IF NAME> <ATH IF NAME> ============ "
+echo "----------- Make sure you have passed right arguments -----------"
+sleep 4
+
+echo "Start collecting data"
+echo "Clear kernel log"
+        dmesg -c > /tmp/droplog
+        rm /tmp/droplog
+
+echo "======================================"
+echo "switch port 0"
+echo "======================================"
+	swconfig dev switch0 port 0 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 1"
+echo "======================================"
+	swconfig dev switch0 port 1 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 2"
+echo "======================================"
+	swconfig dev switch0 port 2 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 3"
+echo "======================================"
+	swconfig dev switch0 port 3 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 4"
+echo "======================================"
+	swconfig dev switch0 port 4 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 5"
+echo "======================================"
+	swconfig dev switch0 port 5 get mib
+	sleep 1
+echo "======================================"
+echo "switch port 6"
+echo "======================================"
+	swconfig dev switch0 port 6 get mib
+	sleep 2
+
+echo "======================================"
+echo "NSS"
+echo "======================================"
+        cat /sys/kernel/debug/qca-nss-drv/stats/*
+echo "======================================"
+
+echo "Scaling command"
+echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
+echo "performance" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
+echo "performance" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
+echo "performance" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
+
+echo " RPS settings reading only NOT setting "
+
+cat /sys/class/net/ath0/queues/rx-0/rps_cpus
+cat /sys/class/net/ath1/queues/rx-0/rps_cpus
+cat /sys/class/net/ath2/queues/rx-0/rps_cpus
+
+echo 1 > /proc/sys/net/edma/per_prec_stats_enable
+
+ifconfig eth0
+ifconfig eth1
+ifconfig eth2
+
+echo "GMAC0"
+echo "======================================"
+        ethtool -S eth0
+        sleep 1
+echo "======================================"
+echo "GMAC1"
+echo "======================================"
+        ethtool -S eth1
+        sleep 2
+echo "======================================"
+echo "GMAC2"
+echo "======================================"
+        ethtool -S eth2
+        sleep 2
+echo "======================================"
+echo "Wifi Host Q stats"
+echo "=================================="
+        iwpriv $1 fc_stats_global 1
+        sleep 3
+echo "===>>>  Enabling Delay Stats ========"
+	iwpriv $1 fc_delay_stats 1
+echo "===== WIFI Video Stats ============"
+	iwpriv $1 fc_video_stats
+        sleep 2
+        iwpriv $1 fc_tidq_map 1
+        sleep 2
+        iwpriv $2 txrx_fw_stats 8
+        sleep 1
+	ifconfig $2
+echo "========= FW Stats ================= "
+        wifitool $2 beeliner_fw_test 191 0
+        wifitool $2 beeliner_fw_test 191 1
+        wifitool $2 beeliner_fw_test 191 2
+        wifitool $2 beeliner_fw_test 191 3
+        wifitool $2 beeliner_fw_test 195 1
+        wifitool $2 beeliner_fw_test 195 2
+        wifitool $2 beeliner_fw_test 195 3
+        wifitool $2 beeliner_fw_test 195 4
+        wifitool $2 beeliner_fw_test 195 5
+echo "=================================="
+        sleep 1
+        iwpriv $2 txrx_fw_stats 19
+        iwpriv $2 txrx_fw_stats 20
+        sleep 1
+        iwpriv $2 txrx_fw_stats 21
+        iwpriv $2 txrx_fw_stats 22
+        iwpriv $2 txrx_fw_stats 23
+        sleep 1
+	iwpriv $2 txrx_fw_stats 1
+        iwpriv $2 txrx_fw_stats 2
+        sleep 1
+        iwpriv $2 txrx_fw_stats 3
+        iwpriv $2 txrx_fw_stats 6
+        iwpriv $2 txrx_fw_stats 12
+        sleep 1
+echo "======================================"
+echo "Kernel log"
+echo "======================================"
+echo "Stop collecting data"
+
+        exit 0
diff --git a/lib/wifi/delos-wifi/10_delos-peer-isolation b/lib/wifi/delos-wifi/10_delos-peer-isolation
new file mode 100644
index 0000000..7024385
--- /dev/null
+++ b/lib/wifi/delos-wifi/10_delos-peer-isolation
@@ -0,0 +1,197 @@
+#
+# Copyright 2018 devolo AG
+#
+
+set_delos_peer_isolation() { (
+	#local EBLOG=--log
+	action="$1"
+
+	delos_determine_prefixes
+
+	# throw away current user-defined chains
+	ebtables -D FORWARD -i ${INTERFACE_PREFIX}0+ -o ${INTERFACE_PREFIX}1+ -j ssid-isolation $EBLOG 2>/dev/null
+	ebtables -D FORWARD -i ${INTERFACE_PREFIX}1+ -o ${INTERFACE_PREFIX}0+ -j ssid-isolation $EBLOG 2>/dev/null
+	ebtables -X ssid-isolation 2>/dev/null
+
+	[ "$action" = "disable" ] && return 0
+
+	# enabled radios
+	radios=$(ubus call uci get '{"config":"wireless","type":"wifi-device"}' | jsonfilter -e '$.*[!(@.disabled="1")][".name"]')
+	radios=$(echo $radios)   	# sic! DO NOT ADD QUOTES!
+	# if at most 1 radio is enabled no rules are required
+	[ $(echo $radios | wc -w) -lt 2 ] && return
+
+	. /usr/share/libubox/jshn.sh
+	json_load "$(ubus call uci get '{"config":"wireless","type":"wifi-iface"}')"
+
+	json_select values
+
+        # Note: result is returned in devs (radios), aps_<radio> (for each radio)
+	delos_enumerate_${DRIVER}
+
+	# if SSIDs for at most 1 radio are enabled no rules are required
+	[ $(echo "$devs" | wc -w) -lt 2 ] && return
+
+	# add the specific peer isolation rules to chain ssid-isolation
+	# problem: must use same wlan iface enumeration as netifd/mac80211.sh
+	#   ebtables -A ssid-isolation -i <wlan0...> -o <wlan1...> -j DROP
+	#   ebtables -A ssid-isolation -i <wlan1...> -o <wlan0...> -j DROP
+
+	# match paired APs ifnames (conditions as in delos-webui: same ssid+encr+key)
+	# for APs with client isolation/guest wifi restrictions enabled!
+	## works for 2 radios only. match first device SSIDs with those of 2nd
+	echo $devs | {
+		read dev1 dev2 _
+		eval "ifs1=\${aps_$dev1}"
+		eval "ifs2=\${aps_$dev2}"
+		pairs=$(for if1 in $ifs1; do
+			json_select $if1
+			json_get_vars ifname ssid encryption key isolate:0 dvl_guest:0 dvl_unrestricted_access:0
+			# isolate too if guest wifi internet is not unrestricted
+			[ "$isolate" = "1" ] || ([ "$dvl_guest" = "1" ] && [ "$dvl_unrestricted_access" = "0" ]) && (
+				# subshell! for separate json context
+				ifname1=$ifname
+				ssid1=$ssid
+				encryption1=$encryption
+				key1=$key
+				json_get_var dynamic_vlan dynamic_vlan 0
+				for if2 in $ifs2; do
+					json_select ..
+					json_select $if2
+					json_get_vars ifname ssid encryption key
+					[ "$ssid1" = "$ssid" ] &&
+					[ "$encryption1" = "$encryption" ] &&
+					[ "$key1" = "$key" ] && {
+						echo "$if1;$if2"
+						break
+					}
+				done
+			)
+			json_select ..
+		done)
+		# make rules
+		chains_installed=
+		for pair in $pairs; do
+			json_select ${pair%;*}
+			json_get_var ifname1 ifname
+			json_get_vars dynamic_vlan
+			json_select ..
+			json_select ${pair#*;}
+			json_get_var ifname2 ifname
+			json_select ..
+			# Once install user-defined chains to group rules for easier deletion
+			[ -z "$chains_installed" ] && {
+				chains_installed=1
+				ebtables -N ssid-isolation -P RETURN
+				ebtables -A FORWARD -i ${INTERFACE_PREFIX}0+ -o ${INTERFACE_PREFIX}1+ -j ssid-isolation $EBLOG
+				ebtables -A FORWARD -i ${INTERFACE_PREFIX}1+ -o ${INTERFACE_PREFIX}0+ -j ssid-isolation $EBLOG
+			}
+			# rule for plain vlan
+			ebtables -A ssid-isolation -i $ifname1 -o $ifname2 -j DROP $EBLOG
+			ebtables -A ssid-isolation -i $ifname2 -o $ifname1 -j DROP $EBLOG
+			[ "$dynamic_vlan" -gt 0 ] &&  {
+				# rule for dynamic vlans
+				ebtables -A ssid-isolation -i $ifname1.+ -o $ifname2.+ -j DROP $EBLOG
+				ebtables -A ssid-isolation -i $ifname2.+ -o $ifname1.+ -j DROP $EBLOG
+			}
+		done
+	}
+	json_select ..
+	json_cleanup
+) }
+
+delos_determine_prefixes() {
+	if [ -d /sys/class/net/wifi0 ]; then
+		DRIVER=qcawifi
+		RADIO_PREFIX="wifi"
+		INTERFACE_PREFIX="ath"
+	else
+		DRIVER=mac80211
+		RADIO_PREFIX="radio"
+		INTERFACE_PREFIX="wlan"
+	fi
+}
+
+delos_enumerate_mac80211() {
+	# APs' ifnames are generated after those of non AP-interfaces (idx covers this)
+	# find enabled APs of enabled radios, save new radios list in devs
+	devs=
+	json_get_keys ifs
+	for iface in $ifs; do
+		json_select $iface
+		json_get_vars disabled mode device
+		list_contains radios $device && [ "$disabled" != "1" ] && {
+			list_contains devs $device || {
+				append devs $device
+				eval "non_aps_$device="
+				eval "aps_$device="
+			}
+			[ "$mode" != "ap" ] && {
+				eval ": \$((non_aps_$device++))"
+			}
+			[ "$mode" = "ap" ] && {
+				eval "append aps_$device $iface"
+			}
+		}
+		json_select ..
+	done
+	for i in $devs; do
+		eval "logger \"$i: \${non_aps_$i:-0} non-APs. APs:\${aps_$i}\""
+	done
+
+	for i in $devs; do
+		eval "idx=\${non_aps_$i}"
+		eval "ifs=\${aps_$i}"
+		[ -z "$ifs" ] && return
+		for iface in $ifs; do
+			json_select $iface
+			json_get_vars ifname mode device
+			[ "$mode" = "ap" ] && [ -z "$ifname" ] && {
+				json_add_string ifname "${INTERFACE_PREFIX}${i#${RADIO_PREFIX}}${idx:+-${idx}}"
+				: $((idx++))
+			}
+			json_select ..
+		done
+	done
+}
+
+delos_enumerate_qcawifi() {
+	# enumerate APs ifnames as in qcawifi, add to json-config
+	# qcawifi script just takes one interface after another regardless of its type -> skip non-aps
+	devs=
+	json_get_keys ifs
+	for radio in $radios; do
+		eval idx_$radio=
+	done
+	for iface in $ifs; do
+		json_select $iface
+		json_get_vars disabled mode device
+		list_contains radios $device && [ "$disabled" != "1" ] && {
+			list_contains devs $device || {
+				append devs $device
+			}
+			[ "$mode" = "ap" ] && {
+				eval "append aps_$device $iface"
+			}
+			eval "json_add_string ifname \"${INTERFACE_PREFIX}\${device#\${RADIO_PREFIX}}\${idx_$device:+\$idx_$device}\""
+			eval ": \$((idx_$device++))"
+		}
+		json_select ..
+	done
+}
+
+delos_wifi_peer_isolation_post() {
+	set_delos_peer_isolation "$@"
+}
+
+# is DELOS_WIFI_DRIVERS defined at all (empty or non-empty)? (force exit code 0 if empty,
+# don't exit current script if not defined)
+if (: ${DELOS_WIFI_DRIVERS?}) 2>/dev/null; then
+	# we were sourced to register as a plugin
+	delos_wifi_driver_peer_isolation() {
+		type=$1; shift
+		type delos_wifi_peer_isolation_$type >/dev/null 2>/dev/null && delos_wifi_peer_isolation_$type "$@"
+	}
+
+	append DELOS_WIFI_DRIVERS delos_wifi_driver_peer_isolation
+fi
diff --git a/lib/wifi/delos-wifi/20_delos-guest-wifi b/lib/wifi/delos-wifi/20_delos-guest-wifi
new file mode 100644
index 0000000..e71311d
--- /dev/null
+++ b/lib/wifi/delos-wifi/20_delos-guest-wifi
@@ -0,0 +1,280 @@
+#
+# Copyright 2018 devolo AG
+#
+SCRIPT=/usr/sbin/wifi_guest.sh
+
+_rm_cron_script(){
+    crontab -l | grep -v "$1" | sort -u | crontab -
+}
+
+_rm_and_add_cron_script(){
+    (crontab -l | grep -v "$1"; [ -n "$2" ] && echo "$2") | sort -u | crontab -
+}
+
+
+set_delos_guestwifi() {
+	#local EBLOG=--log
+
+	# determine new guest interfaces (from tmpfile written by a wifi hook)
+	[ -f /tmp/guestwifi-ifs ] && . /tmp/guestwifi-ifs || GUEST_IFS=
+	# determine new GW addresses (from tmpfile written by a dhcp hook)
+	[ -f /tmp/guestwifi-ipv4 ] && . /tmp/guestwifi-ipv4 || GW4_IP= GW4_MAC=
+	[ -f /tmp/guestwifi-ipv6 ] && . /tmp/guestwifi-ipv6 || GW6_IP= GW6_MAC=
+
+	# read saved interfaces and GW addresses of the installed rules
+	[ -f /var/run/guest-wifi-restricted ] && . /var/run/guest-wifi-restricted ||
+		CUR_GUEST_IFS= CUR_GW4_IP= CUR_GW4_MAC= CUR_GW6_IP= CUR_GW6_MAC=
+
+	# check if new parameters are same as last used
+	[ "$GUEST_IFS/$GW4_IP/$GW4_MAC/$GW6_IP/$GW6_MAC" = "$CUR_GUEST_IFS/$CUR_GW4_IP/$CUR_GW4_MAC/$CUR_GW6_IP/$CUR_GW6_MAC" ] &&
+		return
+	# reinstall rules only if changed
+
+	# throw away current user-defined chains
+	for iface in $CUR_GUEST_IFS; do
+		ebtables -D INPUT -i $iface -j i-guestwifi $EBLOG 2>/dev/null
+		ebtables -D OUTPUT -o $iface -j o-guestwifi $EBLOG 2>/dev/null
+		ebtables -D FORWARD -i $iface -j fi-guestwifi $EBLOG 2>/dev/null
+		ebtables -D FORWARD -o $iface -j fo-guestwifi $EBLOG 2>/dev/null
+	done
+	ebtables -X i-guestwifi 2>/dev/null
+	ebtables -X o-guestwifi 2>/dev/null
+	ebtables -X fi-guestwifi 2>/dev/null
+	ebtables -X fo-guestwifi 2>/dev/null
+
+	# but don't install new rules when there are no restricted interfaces
+	[ -z "$GUEST_IFS" ] && {
+		rm -f /var/run/guest-wifi-restricted
+		return
+	}
+
+	# use user-defined chains to group rules for easier deletion
+	ebtables -N i-guestwifi -P RETURN
+	ebtables -N o-guestwifi -P RETURN
+	ebtables -N fi-guestwifi -P RETURN
+	ebtables -N fo-guestwifi -P RETURN
+	for iface in $GUEST_IFS; do
+		ebtables -A INPUT -i $iface -j i-guestwifi $EBLOG 2>/dev/null
+		ebtables -A OUTPUT -o $iface -j o-guestwifi $EBLOG 2>/dev/null
+		ebtables -A FORWARD -i $iface -j fi-guestwifi $EBLOG 2>/dev/null
+		ebtables -A FORWARD -o $iface -j fo-guestwifi $EBLOG 2>/dev/null
+	done
+
+	# save current rule parameters for later
+	cat >/var/run/guest-wifi-restricted <<-EOF
+	CUR_GUEST_IFS="$GUEST_IFS"
+	CUR_GW4_IP="$GW4_IP"
+	CUR_GW4_MAC="$GW4_MAC"
+	CUR_GW6_IP="$GW6_IP"
+	CUR_GW6_MAC="$GW6_MAC"
+	EOF
+
+	# actual rules
+	# We return but don't accept so that more chains after ours are considered
+
+	#allow EAPOL frames destined to the adapter itself (needed for wifi authentication)
+	ebtables -A i-guestwifi -p 0x888e -j RETURN $EBLOG
+
+	#allow ARP frames destinated to the adapter itself
+	ebtables -A i-guestwifi -p ARP -j RETURN $EBLOG
+
+	#deny any other frame destined to the adapter itself
+	# TODO use DROP policy instead of using this rule as the last one everywhere!?
+	ebtables -A i-guestwifi -j DROP $EBLOG
+
+
+	#allow EAPOL frames originating from the adapter itself (needed for wifi authentication)
+	ebtables -A o-guestwifi -p 0x888e -j RETURN $EBLOG
+
+	#allow ARP frames originationg from the adapter itself
+	ebtables -A o-guestwifi -p ARP -j RETURN $EBLOG
+
+	#deny any frame originating from the adapter itself being destined to a guest account station
+	ebtables -A o-guestwifi -j DROP $EBLOG
+
+
+	# some IP-based restrictions to strengthen security
+	# FIXME what if no MAC? leave it out and use IP only?
+	[ -n "$GW4_IP" ] && {
+		#allow DHCP, DNS and ICMP unicast packets destined to the current default gateway
+		ebtables -A fi-guestwifi -d $GW4_MAC -p IPv4 --ip-dst $GW4_IP --ip-proto tcp --ip-dport 53 -j RETURN $EBLOG
+		ebtables -A fi-guestwifi -d $GW4_MAC -p IPv4 --ip-dst $GW4_IP --ip-proto udp --ip-dport 53 -j RETURN $EBLOG
+		ebtables -A fi-guestwifi -d $GW4_MAC -p IPv4 --ip-dst $GW4_IP --ip-proto udp --ip-dport 67 -j RETURN $EBLOG
+		ebtables -A fi-guestwifi -d $GW4_MAC -p IPv4 --ip-dst $GW4_IP --ip-proto icmp -j RETURN $EBLOG
+
+		#deny any other IP unicast packets destined to the current default gateway
+		ebtables -A fi-guestwifi -d $GW4_MAC -p IPv4 --ip-dst $GW4_IP -j DROP $EBLOG
+	}
+
+	#allow DHCP broadcast packets originating from a guest account station
+	ebtables -A fi-guestwifi -p IPv4 --ip-dst 255.255.255.255 --ip-proto udp --ip-dport 67 -j RETURN $EBLOG
+
+	#deny any other IP broadcast packets originating from a guest account station
+	ebtables -A fi-guestwifi -p IPv4 --ip-dst 255.255.255.255 -j DROP $EBLOG
+
+	[ -n "$GW4_IP" ] && {
+		#allow DHCP, DNS and ICMP packets originating from the current default gateway
+		ebtables -A fo-guestwifi -s $GW4_MAC -p IPv4 --ip-src $GW4_IP --ip-proto tcp --ip-sport 53 -j RETURN $EBLOG
+		ebtables -A fo-guestwifi -s $GW4_MAC -p IPv4 --ip-src $GW4_IP --ip-proto udp --ip-sport 53 -j RETURN $EBLOG
+		ebtables -A fo-guestwifi -s $GW4_MAC -p IPv4 --ip-src $GW4_IP --ip-proto udp --ip-sport 67 -j RETURN $EBLOG
+		ebtables -A fo-guestwifi -s $GW4_MAC -p IPv4 --ip-src $GW4_IP --ip-proto icmp -j RETURN $EBLOG
+
+		#deny any other IP packets originating from the current default gateway
+		ebtables -A fo-guestwifi -s $GW4_MAC -p IPv4 --ip-src $GW4_IP -j DROP $EBLOG
+	}
+
+	#if GW6_IP isn't known then deny all IPv6 frames originating from or destined to a guest account station
+	[ -z "$GW6_IP" ] && {
+		ebtables -A fo-guestwifi -p IPv6 -j DROP $EBLOG
+		ebtables -A fi-guestwifi -p IPv6 -j DROP $EBLOG
+	}
+
+	# some IPv6-based restrictions to strengthen security
+	[ -n "$GW6_IP" ] && {
+		#allow DNS packets destined to the current default gateway
+		ebtables -A fi-guestwifi -d $GW6_MAC -p IPv6 --ip6-dst $GW6_IP --ip6-proto tcp --ip6-dport 53 -j RETURN $EBLOG
+		ebtables -A fi-guestwifi -d $GW6_MAC -p IPv6 --ip6-dst $GW6_IP --ip6-proto udp --ip6-dport 53 -j RETURN $EBLOG
+
+		#allow DHCPv6 packets (using multicast)
+		ebtables -A fi-guestwifi -p IPv6 --ip6-proto udp --ip6-sport 546 --ip6-dport 547 -j RETURN $EBLOG
+
+		#allow ipv6-icmp type router-solicitation, router-advertisement, neighbour-solicitation, neighbour-advertisement
+		ebtables -A fi-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-solicitation -j RETURN $EBLOG
+		ebtables -A fi-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j RETURN $EBLOG
+		ebtables -A fi-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type neighbour-solicitation -j RETURN $EBLOG
+		ebtables -A fi-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type neighbour-advertisement -j RETURN $EBLOG
+
+		#deny any other IPv6 packets destined to the current default gateway
+		ebtables -A fi-guestwifi -d $GW6_MAC -p IPv6 --ip6-dst $GW6_IP -j DROP $EBLOG
+	}
+
+	[ -n "$GW6_IP" ] && {
+		#allow DNS packets originating from the current default gateway
+		ebtables -A fo-guestwifi -s $GW6_MAC -p IPv6 --ip6-src $GW6_IP --ip6-proto tcp --ip6-sport 53 -j RETURN $EBLOG
+		ebtables -A fo-guestwifi -s $GW6_MAC -p IPv6 --ip6-src $GW6_IP --ip6-proto udp --ip6-sport 53 -j RETURN $EBLOG
+
+		#allow DHCPv6 reply packets
+		ebtables -A fo-guestwifi -p IPv6 --ip6-proto udp --ip6-sport 547 --ip6-dport 546 -j RETURN $EBLOG
+
+		#allow ipv6-icmp type router-solicitation, router-advertisement, neighbour-solicitation, neighbour-advertisement
+		ebtables -A fo-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-solicitation -j RETURN $EBLOG
+		ebtables -A fo-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j RETURN $EBLOG
+		ebtables -A fo-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type neighbour-solicitation -j RETURN $EBLOG
+		ebtables -A fo-guestwifi -p IPv6 --ip6-proto ipv6-icmp --ip6-icmp-type neighbour-advertisement -j RETURN $EBLOG
+
+		#deny any other IP packets originating from the current default gateway
+		ebtables -A fo-guestwifi -s $GW6_MAC -p IPv6 --ip6-src $GW6_IP -j DROP $EBLOG
+	}
+
+	#allow all broadcast frames transporting plausible protocols for Internet usage (e.g. no MMEs)
+	ebtables -A fi-guestwifi -p ARP -d FF:FF:FF:FF:FF:FF -j RETURN $EBLOG
+	ebtables -A fi-guestwifi -p IPv4 -d FF:FF:FF:FF:FF:FF -j RETURN $EBLOG
+
+	#allow all frames destined to the current default gateway (and thus, most likely to the Internet)
+	[ -n "$GW4_MAC" ] && {
+		ebtables -A fi-guestwifi -d $GW4_MAC -j RETURN $EBLOG
+	}
+	[ -n "$GW6_MAC" ] && {
+		ebtables -A fi-guestwifi -d $GW6_MAC -j RETURN $EBLOG
+	}
+
+	#deny all frames originating from a guest account station, that have not been allowed already
+	ebtables -A fi-guestwifi -j DROP $EBLOG
+
+	#allow all frames originating from the current default gateway destined to a guest account station
+	[ -n "$GW4_MAC" ] && {
+		ebtables -A fo-guestwifi -s $GW4_MAC -j RETURN $EBLOG
+	}
+	[ -n "$GW6_MAC" ] && {
+		ebtables -A fo-guestwifi -s $GW6_MAC -j RETURN $EBLOG
+	}
+
+	#deny all still unallowed frames destined to a guest account station
+	ebtables -A fo-guestwifi -j DROP $EBLOG
+}
+
+delos_wifi_guest_timer() {
+	local auto_switch_off=
+
+	config_get_bool auto_switch_off guest_wifi auto_switch_off 0
+
+	if [ "$auto_switch_off" = "1" ]; then
+		local starttime=
+		local stoptime=
+		local interval=
+
+		config_get interval guest_wifi interval '00:30'
+		config_get starttime guest_wifi starttime
+		if [ -n "$starttime" -a ${interval//:} -gt 0 ]; then
+			stoptime=$(($starttime + $(echo $interval | awk -F: '{ print ($1 * 3600) + ($2 * 60) + 60 }')))
+			_rm_and_add_cron_script "${SCRIPT}" "$(date -D %s -d ${stoptime} "+%M %H %d %m %a ${SCRIPT} stop")"
+		fi
+	else
+		_rm_cron_script "${SCRIPT}"
+	fi
+}
+
+delos_wifi_guest_post() {
+	local action=$1; shift # enable/disable
+	local iface_list
+	local ifname
+
+	case "$action" in
+	enable)
+		check_access() {
+			# check guest wifi restriction option
+			[ "$(config_get $1 disabled)" != "1" ] &&
+			[ "$(config_get $(config_get $1 device) disabled)" != "1" ] &&
+			[ "$(config_get $1 dvl_guest)" = "1" ] || return
+			local dvl_unrestricted_access
+			config_get dvl_unrestricted_access $1 dvl_unrestricted_access 0
+			[ "$dvl_unrestricted_access" = "0" ] &&
+			ifname=$(uci_get_state wireless $1 ifname 2>/dev/null) &&
+				echo $ifname
+		}
+		iface_list=$(config_foreach check_access wifi-iface | sort)
+		iface_list="$(echo $iface_list)"
+		delos_wifi_guest_timer
+		;;
+	disable)
+		iface_list=
+		;;
+	*)
+		return
+		;;
+	esac
+
+
+	if [ -n "$iface_list" ]; then (
+		# subshell for new trap context
+		TMP=
+		trap '[ -n "$TMP" ] && rm -f "$TMP"; TMP=' EXIT HUP INT QUIT TERM
+		TMP=$(mktemp)
+		cat >$TMP <<-EOF
+		GUEST_IFS="$iface_list"
+		EOF
+		# if changed:
+		cmp -s /tmp/guestwifi-ifs $TMP || {
+			mv $TMP /tmp/guestwifi-ifs
+			TMP=
+			( set_delos_guestwifi )
+		}
+	) else
+		# if removed:
+		rm /tmp/guestwifi-ifs 2>/dev/null && {
+			( set_delos_guestwifi )
+		}
+	fi
+}
+
+# is DELOS_WIFI_DRIVERS defined at all (empty or non-empty)? (force exit code 0 if empty,
+# don't exit current script if not defined)
+if (: ${DELOS_WIFI_DRIVERS?}) 2>/dev/null; then
+	# we were sourced to register as a plugin
+	delos_wifi_driver_guest() {
+		type=$1; shift
+		type delos_wifi_guest_$type >/dev/null 2>/dev/null && delos_wifi_guest_$type "$@"
+	}
+
+	append DELOS_WIFI_DRIVERS delos_wifi_driver_guest
+fi
diff --git a/lib/wifi/delos-wifi/30_delos-wps-clone b/lib/wifi/delos-wifi/30_delos-wps-clone
new file mode 100644
index 0000000..199f6f1
--- /dev/null
+++ b/lib/wifi/delos-wifi/30_delos-wps-clone
@@ -0,0 +1,26 @@
+#
+# Copyright 2018 devolo AG
+#
+
+delos_wps_clone_post() {
+	local action=$1; shift # enable/disable
+
+	case "$action" in
+	disable)
+		# Clear the wps_clone state when wifi is stopped.
+		uci_revert_state wireless wps_clone "" wps_clone
+		;;
+	esac
+}
+
+# is DELOS_WIFI_DRIVERS defined at all (empty or non-empty)? (force exit code 0 if empty,
+# don't exit current script if not defined)
+if (: ${DELOS_WIFI_DRIVERS?}) 2>/dev/null; then
+	# we were sourced to register as a plugin
+	delos_wps_clone() {
+		type=$1; shift
+		type delos_wps_clone_$type >/dev/null 2>/dev/null && delos_wps_clone_$type "$@"
+	}
+
+	append DELOS_WIFI_DRIVERS delos_wps_clone
+fi
diff --git a/lib/wifi/delos-wifi/delos-wifi.sh b/lib/wifi/delos-wifi/delos-wifi.sh
new file mode 100644
index 0000000..b668dd3
--- /dev/null
+++ b/lib/wifi/delos-wifi/delos-wifi.sh
@@ -0,0 +1,35 @@
+#
+# Copyright (C) 2018 devolo AG
+#
+
+# This script is sourced by /sbin/wifi if name is *.sh
+
+# This driver is inserted to $DRIVERS in the position determined by the name of this file
+# to make it last start the filename with z! (after e.g. mac80211 or qcawifi)
+append DRIVERS delos_wifi
+
+# We're not interested in these driver calls
+detect_delos_wifi() :
+disable_delos_wifi() :
+disable_recover_delos_wifi() :
+enable_delos_wifi() :
+enable_recover_delos_wifi() :
+load_delos_wifi() :
+pre_delos_wifi() :
+scan_delos_wifi() :
+trap_delos_wifi() :
+unload_delos_wifi() :
+
+# When the post hook is called wireless is already loaded with config_load by
+# qcawifi.sh and the ifnames are in /var/state/wireless
+post_delos_wifi() {
+	for hook in $DELOS_WIFI_DRIVERS; do
+		$hook post "$@"
+	done
+}
+
+# register delos-wifi driver plugins
+DELOS_WIFI_DRIVERS=
+for source_file in $(ls /lib/wifi/delos-wifi/[0-9][0-9]_* 2>/dev/null); do
+	. $source_file
+done
diff --git a/lib/wifi/dpp-hostapd-update-uci b/lib/wifi/dpp-hostapd-update-uci
new file mode 100755
index 0000000..f3447ab
--- /dev/null
+++ b/lib/wifi/dpp-hostapd-update-uci
@@ -0,0 +1,51 @@
+#!/bin/sh
+#
+# Copyright (c) 2018 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+IFNAME=$1
+CMD=$2
+CONFIG=$3
+
+parent=$(cat /sys/class/net/${IFNAME}/parent)
+
+case "$CMD" in
+	DPP-CONF-RECEIVED)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set wpa 2
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set wpa_key_mgmt DPP
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set ieee80211w 1
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set rsn_pairwise CCMP
+		;;
+	DPP-CONFOBJ-AKM)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set wpa_key_mgmt $CONFIG
+		;;
+	DPP-CONFOBJ-SSID)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set ssid $CONFIG
+		;;
+	DPP-CONNECTOR)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set dpp_connector $CONFIG
+		;;
+	DPP-CONFOBJ-PASS)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set wpa_key_mgmt WPA-PSK
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set wpa_passphrase $CONFIG
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent disable
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent enable
+		;;
+	DPP-CONFOBJ-PSK)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set wpa_key_mgmt WPA-PSK
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set wpa_psk $CONFIG
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent disable
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent enable
+		;;
+	DPP-C-SIGN-KEY)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set dpp_csign $CONFIG
+		;;
+	DPP-NET-ACCESS-KEY)
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent set dpp_netaccesskey $CONFIG
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent disable
+		hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent enable
+		;;
+esac
diff --git a/lib/wifi/hostapd.sh b/lib/wifi/hostapd.sh
new file mode 100644
index 0000000..21f733c
--- /dev/null
+++ b/lib/wifi/hostapd.sh
@@ -0,0 +1,1106 @@
+#
+# Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+#
+# Copyright (c) 2015, The Linux Foundation. All rights reserved.
+#
+
+wps_possible=
+config_methods=
+
+hostapd_set_extra_cred() {
+	local var="$1"
+	local vif="$2"
+	local ifname="$3"
+	local temp
+	local enc enc_list
+
+	config_get ssid "$vif" ssid
+	config_get enc "$vif" encryption "none"
+
+	#wps_build_cred_network_idx
+	append "$var" "1026"
+	append "$var" "0001"
+	append "$var" "01"
+
+	temp=`expr length "$ssid"`
+	temp=` printf "%04X" $temp`
+
+	#wps_build_cred_ssid
+	append "$var" "1045"
+	append "$var"   "$temp"
+	temp=`echo -n "$ssid" | hexdump -v -e '/1 "%02X "'`
+	append "$var" "$temp"
+
+	#wps_build_cred_auth_type
+	append "$var" "1003"
+	append "$var" "0002"
+
+	case "$enc" in
+		none)
+			append "$var" "0001"
+			;;
+		# Need ccmp*|gcmp* check for SAE and OWE auth type
+		wpa2*|*psk2*|ccmp*|gcmp*)
+			append "$var" "0020"
+			;;
+		*)
+			# TKIP alone is now prohibited by WFA so the only
+			# combination left must be CCMP+TKIP (wpa=3)
+			append "$var" "0022"
+			;;
+	esac
+
+	#wps_build_cred_encr_type
+	append "$var" "100f"
+	append "$var" "0002"
+	crypto=
+
+	enc_list=`echo "$enc" | sed "s/+/ /g"`
+
+	case "$enc_list" in
+		*tkip*)
+			append "$var" "0004"
+			;;
+		*aes* | *ccmp*)
+			append "$var" "0008"
+			;;
+		*mixed*)
+			append "$var" "000c"
+			;;
+	esac
+
+
+	#Key Index
+	append "$var" "1028"
+	append "$var" "0001"
+	append "$var" "01"
+
+	#wps_build_cred_network_key
+	config_get psk "$vif" key
+	append "$var" "1027"
+
+	temp=`expr length "$psk"`
+	temp=` printf "%04X" $temp`
+
+	append "$var" "$temp"
+	temp=`echo -n  $psk | hexdump -v -e '/1 "%02X "'`
+	append "$var" "$temp"
+
+	#wps_build_mac_addr
+	macaddr=$(cat /sys/class/net/${ifname}/address)
+        macaddr="00:00:00:00:00:00"
+	append "$var" "1020"
+	append "$var" "0006"
+	append "$var" "$macaddr"
+}
+hostapd_common_add_device_config() {
+	config_add_array basic_rate
+
+	config_add_string country
+	config_add_boolean country_ie doth
+	config_add_int beacon_int
+}
+
+
+hostapd_prepare_device_config() {
+        local config="$1"
+        local driver="$2"
+
+        local base="${config%%.conf}"
+        local base_cfg=
+
+        json_get_vars country country_ie beacon_int doth
+
+        hostapd_set_log_options base_cfg
+
+        set_default country_ie 1
+        set_default doth 1
+
+        [ -n "$country" ] && {
+                append base_cfg "country_code=$country" "$N"
+
+                [ "$country_ie" -gt 0 ] && append base_cfg "ieee80211d=1" "$N"
+                [ "$hwmode" = "a" -a "$doth" -gt 0 ] && append base_cfg "ieee80211h=1" "$N"
+        }
+        [ -n "$hwmode" ] && append base_cfg "hw_mode=$hwmode" "$N"
+
+        local brlist= br
+        json_get_values basic_rate_list basic_rate
+        for br in $basic_rate_list; do
+                hostapd_add_basic_rate brlist "$br"
+        done
+        [ -n "$brlist" ] && append base_cfg "basic_rates=$brlist" "$N"
+        [ -n "$beacon_int" ] && append base_cfg "beacon_int=$beacon_int" "$N"
+
+        cat > "$config" <<EOF
+driver=$driver
+$base_cfg
+EOF
+}
+
+hostapd_eap_config_parameters() {
+	local var="$1"
+	local vif="$2"
+	config_get auth_server "$vif" auth_server
+	[ -z "$auth_server" ] && config_get auth_server "$vif" server
+	append "$var" "auth_server_addr=$auth_server" "$N"
+	config_get auth_port "$vif" auth_port
+	[ -z "$auth_port" ] && config_get auth_port "$vif" port
+	auth_port=${auth_port:-1812}
+	append "$var" "auth_server_port=$auth_port" "$N"
+	config_get auth_secret "$vif" auth_secret
+	[ -z "$auth_secret" ] && config_get auth_secret "$vif" key
+	append "$var" "auth_server_shared_secret=$auth_secret" "$N"
+	config_get acct_server "$vif" acct_server
+	[ -n "$acct_server" ] && append "$var" "acct_server_addr=$acct_server" "$N"
+	config_get acct_port "$vif" acct_port
+	[ -n "$acct_port" ] && acct_port=${acct_port:-1813}
+	[ -n "$acct_port" ] && append "$var" "acct_server_port=$acct_port" "$N"
+	config_get acct_secret "$vif" acct_secret
+	[ -n "$acct_secret" ] && append "$var" "acct_server_shared_secret=$acct_secret" "$N"
+	config_get eap_reauth_period "$vif" eap_reauth_period
+	[ -n "$eap_reauth_period" ] && append "$var" "eap_reauth_period=$eap_reauth_period" "$N"
+	config_get wep_key_len_broadcast "$vif" wep_key_len_broadcast
+	config_get wep_key_len_unicast "$vif" wep_key_len_unicast
+	append "$var" "eapol_key_index_workaround=1" "$N"
+	append "$var" "ieee8021x=1" "$N"
+	config_get identity_request_retry_interval "$vif" identity_request_retry_interval
+	[ -n "$identity_request_retry_interval" ] && append "$var" "identity_request_retry_interval=$identity_request_retry_interval" "$N"
+	config_get radius_server_retries "$vif" radius_server_retries
+	[ -n "$radius_server_retries" ] && append "$var" "radius_server_retries=$radius_server_retries" "$N"
+	config_get radius_max_retry_wait "$vif" radius_max_retry_wait
+	[ -n "$radius_max_retry_wait" ] && append "$var" "radius_max_retry_wait=$radius_max_retry_wait" "$N"
+	[ -n "$wpa_group_rekey"  ] && append "$var" "wpa_group_rekey=$wpa_group_rekey" "$N"
+	[ -n "$wpa_strict_rekey"  ] && append "$var" "wpa_strict_rekey=$wpa_strict_rekey" "$N"
+	[ -n "$wpa_pair_rekey"   ] && append "$var" "wpa_ptk_rekey=$wpa_pair_rekey"    "$N"
+	[ -n "$wpa_master_rekey" ] && append "$var" "wpa_gmk_rekey=$wpa_master_rekey"  "$N"
+	[ -n "$wep_key_len_broadcast" ] && append "$var" "wep_key_len_broadcast=$wep_key_len_broadcast" "$N"
+	[ -n "$wep_key_len_unicast" ] && append "$var" "wep_key_len_unicast=$wep_key_len_unicast" "$N"
+	[ -n "$wep_rekey" ] && append "$var" "wep_rekey_period=$wep_rekey" "$N"
+
+	config_get wpa_group_update_count "$vif" wpa_group_update_count
+	[ -n "$wpa_group_update_count" ] && append "$var" "wpa_group_update_count=$wpa_group_update_count" "$N"
+
+	config_get wpa_pairwise_update_count "$vif" wpa_pairwise_update_count
+	[ -n "$wpa_pairwise_update_count" ] && append "$var" "wpa_pairwise_update_count=$wpa_pairwise_update_count" "$N"
+
+	config_get wpa_disable_eapol_key_retries "$vif" wpa_disable_eapol_key_retries
+	[ -n "$wpa_disable_eapol_key_retries" ] && append "$var" "wpa_disable_eapol_key_retries=$wpa_disable_eapol_key_retries" "$N"
+}
+
+hostapd_set_bss_options() {
+	local var="$1"
+	local vif="$2"
+	local enc wep_rekey wpa_group_rekey wpa_strict_rekey wpa_pair_rekey wpa_master_rekey pid sae owe suite_b
+	local add_sha256_str ieee80211r_str enc_list ieee80211ai_sha256_str ieee80211ai_sha384_str sae_str owe_str suite_b_str
+	local owe_transition_bssid owe_transition_ssid owe_transition_ifname owe_groups
+	local sae_reflection_attack sae_commit_override sae_password sae_anti_clogging_threshold sae_groups sae_sync sae_require_mfp
+
+	[ -z "$vif" ] && hostapd_get_vif_name
+
+	config_get enc "$vif" encryption "none"
+	config_get wep_rekey        "$vif" wep_rekey        # 300
+	config_get wpa_group_rekey  "$vif" wpa_group_rekey  # 300
+	config_get wpa_strict_rekey  "$vif" wpa_strict_rekey  # 300
+	config_get wpa_pair_rekey   "$vif" wpa_pair_rekey   # 300
+	config_get wpa_master_rekey "$vif" wpa_master_rekey # 640
+	config_get_bool ap_isolate "$vif" isolate 0
+	config_get_bool ieee80211r "$vif" ieee80211r 0
+	config_get_bool ieee80211ai "$vif" ieee80211ai 0
+	config_get kh_key_hex "$vif" kh_key_hex "000102030405060708090a0b0c0d0e0f"
+	config_get_bool sae "$vif" sae 0
+	config_get_bool owe "$vif" owe 0
+	config_get suite_b "$vif" suite_b 0
+
+	config_get device "$vif" device
+	config_get hwmode "$device" hwmode
+	config_get phy "$device" phy
+	config_get maxassoc "$vif" maxassoc 0
+
+	[ -f /var/run/hostapd-$phy/$ifname ] && rm /var/run/hostapd-$phy/$ifname
+	ctrl_interface=/var/run/hostapd-$phy
+
+	append "$var" "ctrl_interface=$ctrl_interface" "$N"
+
+	if [ "$ap_isolate" -gt 0 ]; then
+		append "$var" "ap_isolate=$ap_isolate" "$N"
+	fi
+
+	if [ "$maxassoc" -gt 0 ]; then
+		append "$var" "max_num_sta=$maxassoc" "$N"
+	fi
+
+	config_get  owe_transition_bssid   "$vif" owe_transition_bssid
+	[ -n "$owe_transition_bssid" ] && append "$var" "owe_transition_bssid=$owe_transition_bssid" "$N"
+
+	config_get  owe_transition_ssid   "$vif" owe_transition_ssid
+	[ -n "$owe_transition_ssid" ] && append "$var" "owe_transition_ssid=\"$owe_transition_ssid\"" "$N"
+
+	config_get  owe_transition_ifname "$vif" owe_transition_ifname
+	[ -n "$owe_transition_ifname" ] && append "$var" "owe_transition_ifname=$owe_transition_ifname" "$N"
+
+	config_get own_ie_override "$vif" own_ie_override
+	[ -n "$own_ie_override" ] && append "$var" "own_ie_override=$own_ie_override" "$N"
+
+	# Examples:
+	# psk-mixed/tkip 	=> WPA1+2 PSK, TKIP
+	# wpa-psk2/tkip+aes	=> WPA2 PSK, CCMP+TKIP
+	# wpa2/tkip+aes 	=> WPA2 RADIUS, CCMP+TKIP
+	# ...
+
+	# TODO: move this parsing function somewhere generic, so that
+	# later it can be reused by drivers that don't use hostapd
+
+	# crypto defaults: WPA2 vs WPA1
+
+	# If suite_b is set then hard code
+	# wpa as 2
+	# set ieee80211w as 2
+	# set group_mgmt_cipher as BIP-GMAC-256
+	# set pairwise as GCMP-256
+
+	if [ "${suite_b}" -eq 192 ]
+	then
+		wpa=2
+		config_set "$vif" ieee80211w 2
+		config_set "$vif" group_mgmt_cipher "BIP-GMAC-256"
+		hostapd_eap_config_parameters "$var" "$vif"
+		append "$var" "wpa_pairwise=GCMP-256" "$N"
+	else
+		case "$enc" in
+			none)
+				wpa=0
+			;;
+			# Need ccmp*|gcmp* check for SAE and OWE auth type
+			wpa2*|*psk2*|ccmp*|gcmp*)
+				wpa=2
+			;;
+			*)
+				# TKIP alone is now prohibited by WFA so the only
+				# combination left must be CCMP+TKIP (wpa=3)
+				wpa=3
+			;;
+		esac
+
+		crypto=
+		enc_list=`echo "$enc" | sed "s/+/ /g"`
+
+		for enc_var in $enc_list; do
+			case "$enc_var" in
+				*tkip)
+					crypto="TKIP $crypto"
+				;;
+				*aes)
+					crypto="CCMP $crypto"
+				;;
+				*ccmp)
+					crypto="CCMP $crypto"
+				;;
+				*ccmp-256)
+					crypto="CCMP-256 $crypto"
+				;;
+				*gcmp)
+					crypto="GCMP $crypto"
+				;;
+				*gcmp-256)
+					crypto="GCMP-256 $crypto"
+			esac
+		done
+
+		case "$enc_list" in
+			psk | wpa)
+				crypto="TKIP"
+			;;
+			psk2 | wpa2)
+				crypto="CCMP"
+			;;
+			*mixed*)
+				[ -z "$crypto" ] && crypto="CCMP TKIP"
+			;;
+		esac
+
+		# WPA TKIP alone is no longer allowed for certification
+		case "$hwmode:$crypto" in
+			*:TKIP*) crypto="CCMP TKIP";;
+		esac
+
+		# use crypto/auth settings for building the hostapd config
+		case "$enc" in
+			none)
+				wps_possible=1
+				# Here we make the assumption that if we're in open mode
+				# with WPS enabled, we got to be in unconfigured state.
+				wps_configured_state=1
+			;;
+			# Need ccmp*|gcmp* check for SAE and OWE auth type
+			*psk*|ccmp*|gcmp*)
+				config_get psk "$vif" key
+				if [ ${#psk} -eq 64 ]; then
+					append "$var" "wpa_psk=$psk" "$N"
+				else
+					[ -n "$psk" ] && append "$var" "wpa_passphrase=$psk" "$N"
+				fi
+				wps_possible=1
+				# By default we assume we are in configured state,
+				# while the user has the provision to override this.
+				wps_configured_state=2
+				[ -n "$wpa_group_rekey"  ] && append "$var" "wpa_group_rekey=$wpa_group_rekey" "$N"
+				[ -n "$wpa_strict_rekey"  ] && append "$var" "wpa_strict_rekey=$wpa_strict_rekey" "$N"
+				[ -n "$wpa_pair_rekey"   ] && append "$var" "wpa_ptk_rekey=$wpa_pair_rekey"    "$N"
+				[ -n "$wpa_master_rekey" ] && append "$var" "wpa_gmk_rekey=$wpa_master_rekey"  "$N"
+
+				config_get wpa_group_update_count "$vif" wpa_group_update_count
+				[ -n "$wpa_group_update_count" ] && append "$var" "wpa_group_update_count=$wpa_group_update_count" "$N"
+
+				config_get wpa_pairwise_update_count "$vif" wpa_pairwise_update_count
+				[ -n "$wpa_pairwise_update_count" ] && append "$var" "wpa_pairwise_update_count=$wpa_pairwise_update_count" "$N"
+
+				config_get wpa_disable_eapol_key_retries "$vif" wpa_disable_eapol_key_retries
+				[ -n "$wpa_disable_eapol_key_retries" ] && append "$var" "wpa_disable_eapol_key_retries=$wpa_disable_eapol_key_retries" "$N"
+			;;
+			*wpa*)
+				hostapd_eap_config_parameters "$var" "$vif"
+			;;
+			*wep*)
+				config_get key "$vif" key
+				key="${key:-1}"
+				case "$key" in
+					[1234])
+						for idx in 1 2 3 4; do
+							local zidx
+							zidx=$(($idx - 1))
+							config_get ckey "$vif" "key${idx}"
+							[ -n "$ckey" ] && \
+								append "$var" "wep_key${zidx}=$(prepare_key_wep "$ckey")" "$N"
+						done
+						append "$var" "wep_default_key=$((key - 1))"  "$N"
+					;;
+					*)
+						append "$var" "wep_key0=$(prepare_key_wep "$key")" "$N"
+						append "$var" "wep_default_key=0" "$N"
+						[ -n "$wep_rekey" ] && append "$var" "wep_rekey_period=$wep_rekey" "$N"
+					;;
+				esac
+				case "$enc" in
+					*shared*)
+						auth_algs=2
+					;;
+					*mixed*)
+						auth_algs=3
+					;;
+				esac
+				wpa=0
+				crypto=
+			;;
+			8021x)
+				# For Dynamic WEP 802.1x,maybe need more fields
+				config_get auth_server "$vif" auth_server
+				[ -z "$auth_server" ] && config_get auth_server "$vif" server
+				append "$var" "auth_server_addr=$auth_server" "$N"
+				config_get auth_port "$vif" auth_port
+				[ -z "$auth_port" ] && config_get auth_port "$vif" port
+				auth_port=${auth_port:-1812}
+				append "$var" "auth_server_port=$auth_port" "$N"
+				config_get auth_secret "$vif" auth_secret
+				[ -z "$auth_secret" ] && config_get auth_secret "$vif" key
+				config_get eap_reauth_period "$vif" eap_reauth_period
+				[ -n "$eap_reauth_period" ] && append "$var" "eap_reauth_period=$eap_reauth_period" "$N"
+				config_get wep_rekey "$vif" wep_rekey 300
+
+				append "$var" "ieee8021x=1" "$N"
+				append "$var" "auth_server_shared_secret=$auth_secret" "$N"
+				append "$var" "wep_rekey_period=$wep_rekey" "$N"
+				append "$var" "eap_server=0" "$N"
+				append "$var" "eapol_version=2" "$N"
+				append "$var" "eapol_key_index_workaround=0" "$N"
+				append "$var" "wep_key_len_broadcast=13" "$N"
+				append "$var" "wep_key_len_unicast=13" "$N"
+				auth_algs=1
+				wpa=0
+				crypto=
+			;;
+			*)
+				wpa=0
+				crypto=
+			;;
+		esac
+	#termination of suite_b enable or not check
+	fi
+
+	append "$var" "auth_algs=${auth_algs:-1}" "$N"
+	append "$var" "wpa=$wpa" "$N"
+
+	if [ "${suite_b}" -ne 192 ]
+	then
+		[ -n "$crypto" ] && append "$var" "wpa_pairwise=$crypto" "$N"
+	fi
+
+	[ -n "$wpa_group_rekey" ] && append "$var" "wpa_group_rekey=$wpa_group_rekey" "$N"
+	[ -n "$wpa_strict_rekey" ] && append "$var" "wpa_strict_rekey=$wpa_strict_rekey" "$N"
+
+	config_get nasid "$vif" nasid
+	[ -n "$nasid" ] && append "$var" "nas_identifier=$nasid" "$N"
+
+	config_get ssid "$vif" ssid
+	config_get bridge "$vif" bridge
+	config_get ieee80211d "$vif" ieee80211d
+	config_get iapp_interface "$vif" iapp_interface
+
+	config_get_bool wps_pbc "$vif" wps_pbc 0
+	config_get_bool wps_label "$vif" wps_label 0
+
+	config_get config_methods "$vif" wps_config
+	[ "$wps_pbc" -gt 0 ] && append config_methods push_button
+
+	# WPS 2.0 test case 4.1.7:
+	# if we're configured to enable WPS and we hide our SSID, then
+	# we have to require an "explicit user operation to continue"
+	config_get_bool hidden "$vif" hidden 0
+	[ -n "$wps_possible" -a -n "$config_methods" -a "$hidden" -gt 0 ] && {
+		echo "Hidden SSID is enabled on \"$ifname\", WPS will be automatically disabled"
+		echo "Please press any key to continue."
+		# devolo: Don't read from stdin here, this will stall the AP initialization in
+		# case no serial console is attached! Let the GUI deal with the test requirements.
+		# read -s -n 1
+		wps_possible=
+	}
+
+	[ -n "$wps_possible" -a -n "$config_methods" ] && {
+		config_get device_type "$vif" wps_device_type "6-0050F204-1"
+		config_get device_name "$vif" wps_device_name "OpenWrt AP"
+		config_get manufacturer "$vif" wps_manufacturer "openwrt.org"
+		config_get model_name "$vif" model_name "WAP"
+		config_get model_number "$vif" model_number "123"
+		config_get serial_number "$vif" serial_number "12345"
+		config_get wps_pin "$vif" wps_pin "12345670"
+		config_get wps_state "$vif" wps_state $wps_configured_state
+		config_get_bool wps_independent "$vif" wps_independent 0
+
+		config_get pbc_in_m1 "$vif" pbc_in_m1 1
+		[ -n "$pbc_in_m1" ] && append "$var" "pbc_in_m1=$pbc_in_m1" "$N"
+
+		config_get_bool ext_registrar "$vif" ext_registrar 0
+		[ "$ext_registrar" -gt 0 -a -n "$bridge" ] && append "$var" "upnp_iface=$bridge" "$N"
+
+		append "$var" "eap_server=1" "$N"
+		append "$var" "ap_pin=$wps_pin" "$N"
+		append "$var" "wps_state=$wps_state" "$N"
+		append "$var" "ap_setup_locked=0" "$N"
+		append "$var" "device_type=$device_type" "$N"
+		append "$var" "device_name=$device_name" "$N"
+		append "$var" "manufacturer=$manufacturer" "$N"
+		append "$var" "model_name=$model_name" "$N"
+		append "$var" "model_number=$model_number" "$N"
+		append "$var" "serial_number=$serial_number" "$N"
+		append "$var" "config_methods=$config_methods" "$N"
+		append "$var" "wps_independent=$wps_independent" "$N"
+
+		# fix the overlap session of WPS PBC for dual band AP
+		local macaddr=$(cat /sys/class/net/${bridge}/address)
+		uuid=$(echo "$macaddr" | sed 's/://g')
+		[ -n "$uuid" ] && {
+			append "$var" "uuid=87654321-9abc-def0-1234-$uuid" "$N"
+		}
+
+	}
+
+	append "$var" "ssid=$ssid" "$N"
+	[ -n "$bridge" ] && append "$var" "bridge=$bridge" "$N"
+	[ -n "$ieee80211d" ] && append "$var" "ieee80211d=$ieee80211d" "$N"
+	[ -n "$iapp_interface" ] && append "$var" iapp_interface=$(uci_get_state network "$iapp_interface" ifname "$iapp_interface") "$N"
+
+	if [ "$wpa" -ge "2" ]
+	then
+		# RSN -> allow preauthentication
+		config_get rsn_preauth "$vif" rsn_preauth
+		if [ -n "$bridge" -a "$rsn_preauth" = 1 ]
+		then
+			append "$var" "rsn_preauth=1" "$N"
+			append "$var" "rsn_preauth_interfaces=$bridge" "$N"
+		fi
+
+		# RSN -> allow management frame protection
+
+		config_get ieee80211w "$vif" ieee80211w 0
+
+		# Allow SHA256
+		case "$enc" in
+			*wpa*) keymgmt=EAP
+			       key_mgmt_str="WPA-EAP"
+			;;
+			*psk*) keymgmt=PSK
+			       key_mgmt_str="WPA-PSK"
+			;;
+		esac
+
+		config_get_bool add_sha256 "$vif" add_sha256 0
+		config_get_bool add_sha384 "$vif" add_sha384 0
+
+		if [ "${ieee80211w}" -eq 2 ]
+		then
+			add_sha256=1
+		fi
+
+
+		if [ "${ieee80211r}" -gt 0 ]
+		then
+			ieee80211r_str="${keymgmt:+FT-${keymgmt}}"
+		fi
+
+		if [ "${sae}" -eq 1 ]
+		then
+			config_get  sae_reflection_attack  "$vif" sae_reflection_attack
+			[ -n "$sae_reflection_attack" ] && append "$var" "sae_reflection_attack=$sae_reflection_attack" "$N"
+
+			config_get  sae_commit_override  "$vif" sae_commit_override
+			[ -n "$sae_commit_override" ] && append "$var" "sae_commit_override=$sae_commit_override" "$N"
+
+			config_get  sae_password  "$vif" sae_password
+			[ -n "$sae_password" ] && append "$var" "sae_password=$sae_password" "$N"
+
+			config_get  sae_anti_clogging_threshold   "$vif" sae_anti_clogging_threshold
+			[ -n "$sae_anti_clogging_threshold" ] && append "$var" "sae_anti_clogging_threshold=$sae_anti_clogging_threshold" "$N"
+
+			add_sae_groups() {
+				local sae_groups=$(echo $1 | tr "," " ")
+				[ -n "$sae_groups" ] && append "$var" "sae_groups=$sae_groups" "$N"
+			}
+			config_list_foreach  "$vif" sae_groups add_sae_groups
+
+			if [ "${ieee80211r}" -gt 0 ]
+			then
+				sae_str="SAE FT-SAE"
+			else
+				sae_str="SAE"
+			fi
+			config_get sae_sync  "$vif" sae_sync
+			[ -n "$sae_sync" ] && append "$var" "sae_sync=$sae_sync" "$N"
+
+			config_get sae_require_mfp  "$vif" sae_require_mfp
+
+			case "$enc" in
+				*wpa*);;
+				*psk*)
+					if [ "${ieee80211w}" -eq 0 ]
+					then
+						ieee80211w=1
+						sae_require_mfp=1
+					elif [ "${ieee80211w}" -eq 1 ]
+					then
+						sae_require_mfp=1
+					fi
+				;;
+				*)
+					ieee80211w=2
+					add_sha256=0
+			esac
+
+			[ -n "$sae_require_mfp" ] && append "$var" "sae_require_mfp=$sae_require_mfp" "$N"
+
+		fi
+
+		if [ "${owe}" -eq 1 ]
+		then
+			owe_str="OWE"
+			add_owe_groups() {
+				local owe_groups=$(echo $1 | tr "," " ")
+				[ -n "$owe_groups" ] && append "$var" "owe_groups=$owe_groups" "$N"
+			}
+			config_list_foreach  "$vif" owe_groups add_owe_groups
+
+			case "$enc" in
+				*wpa*);;
+				*psk*);;
+				*)
+					ieee80211w=2
+					add_sha256=0
+			esac
+		fi
+
+		if [ "${suite_b}" -eq 192 ]
+		then
+			suite_b_str="WPA-EAP-SUITE-B-192"
+		fi
+
+		append "$var" "ieee80211w=$ieee80211w" "$N"
+		[ "$ieee80211w" -gt "0" ] && {
+			config_get ieee80211w_max_timeout "$vif" ieee80211w_max_timeout
+			config_get ieee80211w_retry_timeout "$vif" ieee80211w_retry_timeout
+			config_get group_mgmt_cipher "$vif" group_mgmt_cipher
+			[ -n "$ieee80211w_max_timeout" ] && \
+				append "$var" "assoc_sa_query_max_timeout=$ieee80211w_max_timeout" "$N"
+			[ -n "$ieee80211w_retry_timeout" ] && \
+				append "$var" "assoc_sa_query_retry_timeout=$ieee80211w_retry_timeout" "$N"
+			[ -n "$group_mgmt_cipher" ] && \
+				append "$var" "group_mgmt_cipher=$group_mgmt_cipher" "$N"
+		}
+
+		[ "${add_sha256}" -gt 0 ] && add_sha256_str="${key_mgmt_str}-SHA256"
+
+        	if [ "${ieee80211ai}" -gt 0 ]
+	        then
+			if [ "${ieee80211r}" -gt 0 ]
+			then
+				[ "${add_sha256}" -gt 0 ] && ieee80211ai_sha256_str="FT-FILS-SHA256"
+				[ "${add_sha384}" -gt 0 ] && ieee80211ai_sha384_str="FT-FILS-SHA384"
+			else
+				[ "${add_sha256}" -gt 0 ] && ieee80211ai_sha256_str="FILS-SHA256"
+				[ "${add_sha384}" -gt 0 ] && ieee80211ai_sha384_str="FILS-SHA384"
+			fi
+			config_get erp_send_reauth_start "$vif" erp_send_reauth_start
+			[ -n "$erp_send_reauth_start" ] && append "$var" "erp_send_reauth_start=$erp_send_reauth_start" "$N"
+			config_get erp_domain "$vif" erp_domain
+			[ -n "$erp_domain" ] && append "$var" "erp_domain=$erp_domain" "$N"
+			config_get fils_realm "$vif" fils_realm
+			[ -n "$fils_realm" ] && append "$var" "fils_realm=$fils_realm" "$N"
+			config_get fils_cache_id "$vif" fils_cache_id
+			[ -n "$fils_cache_id" ] && append "$var" "fils_cache_id=$fils_cache_id" "$N"
+			config_get disable_pmksa_caching "$vif" disable_pmksa_caching
+			[ -n "$disable_pmksa_caching" ] && append "$var" "disable_pmksa_caching=$disable_pmksa_caching" "$N"
+			config_get own_ip_addr "$vif" own_ip_addr
+			[ -n "$own_ip_addr" ] && append "$var" "own_ip_addr=$own_ip_addr" "$N"
+			config_get dhcp_server "$vif" dhcp_server
+			[ -n "$dhcp_server" ] && append "$var" "dhcp_server=$dhcp_server" "$N"
+			config_get fils_hlp_wait_time "$vif" fils_hlp_wait_time
+			[ -n "$fils_hlp_wait_time" ] && append "$var" "fils_hlp_wait_time=$fils_hlp_wait_time" "$N"
+			config_get dhcp_rapid_commit_proxy "$vif" dhcp_rapid_commit_proxy
+			[ -n "$dhcp_rapid_commit_proxy" ] && append "$var" "dhcp_rapid_commit_proxy=$dhcp_rapid_commit_proxy" "$N"
+        	fi
+
+		case "$ieee80211w" in
+			[01]) append "$var" "wpa_key_mgmt=${key_mgmt_str} ${add_sha256_str} ${ieee80211r_str} ${ieee80211ai_sha256_str} ${ieee80211ai_sha384_str} ${sae_str} ${owe_str}" "$N";;
+			2)
+				if [ "${suite_b}" -eq 192 ]
+				then
+					append "$var" "wpa_key_mgmt=${suite_b_str}" "$N"
+				else
+					append "$var" "wpa_key_mgmt=${add_sha256_str} ${ieee80211r_str} ${ieee80211ai_sha256_str} ${ieee80211ai_sha384_str} ${sae_str} ${owe_str}" "$N"
+				fi
+			;;
+		esac
+	fi
+
+	config_get map "$vif" map
+	[ -n "$map" ] && append "$var" "map=$map" "$N"
+
+	config_get multi_cred "$vif" multi_cred 0
+
+	if [ "$multi_cred" -gt 0 ]; then
+		append "$var" "skip_cred_build=1" "$N"
+		if [ "$map" -gt 0 ]; then
+			append "$var" "extra_cred=/var/run/map_cred_${device}.bin" "$N"
+		else
+			append "$var" "extra_cred=/var/run/hostapd_cred_${device}.bin" "$N"
+		fi
+	fi
+
+	config_get_bool hs20 "$vif" hs20 0
+	if [ "$hs20" -gt 0 ]
+	then
+		append "$var" "hs20=1" "$N"
+		config_get disable_dgaf "$vif" disable_dgaf
+		[ -n "$disable_dgaf" ] && append "$var" "disable_dgaf=$disable_dgaf" "$N"
+
+		add_hs20_oper_friendly_name() {
+			append "$var" "hs20_oper_friendly_name=${1}" "$N"
+		}
+
+		config_list_foreach "$vif" hs20_oper_friendly_name add_hs20_oper_friendly_name
+
+		add_hs20_conn_capab() {
+			append "$var" "hs20_conn_capab=${1}" "$N"
+		}
+
+		config_list_foreach "$vif" hs20_conn_capab add_hs20_conn_capab
+
+		config_get hs20_wan_metrics "$vif" hs20_wan_metrics
+		[ -n "$hs20_wan_metrics" ] && append "$var" "hs20_wan_metrics=$hs20_wan_metrics" "$N"
+		config_get hs20_operating_class "$vif" hs20_operating_class
+		[ -n "$hs20_operating_class" ] && append "$var" "hs20_operating_class=$hs20_operating_class" "$N"
+
+		append "$var" "interworking=1" "$N"
+		append "$var" "manage_p2p=1" "$N"
+		append "$var" "tdls_prohibit=1" "$N"
+		config_get hessid "$vif" hessid
+		[ -n "$hessid" ] && append "$var" "hessid=$hessid" "$N"
+		config_get access_network_type "$vif" access_network_type
+		[ -n "$access_network_type" ] && append "$var" "access_network_type=$access_network_type" "$N"
+		config_get internet "$vif" internet
+		[ -n "$internet" ] && append "$var" "internet=$internet" "$N"
+		config_get asra "$vif" asra
+		[ -n "$asra" ] && append "$var" "asra=$asra" "$N"
+		config_get esr "$vif" esr
+		[ -n "$esr" ] && append "$var" "esr=$esr" "$N"
+		config_get uesa "$vif" uesa
+		[ -n "$uesa" ] && append "$var" "uesa=$uesa" "$N"
+		config_get venue_group "$vif" venue_group
+		[ -n "$venue_group" ] && append "$var" "venue_group=$venue_group" "$N"
+		config_get venue_type "$vif" venue_type
+		[ -n "$venue_type" ] && append "$var" "venue_type=$venue_type" "$N"
+		add_roaming_consortium() {
+			append "$var" "roaming_consortium=${1}" "$N"
+		}
+		config_list_foreach "$vif" roaming_consortium add_roaming_consortium
+
+		add_venue_name() {
+			append "$var" "venue_name=${1}" "$N"
+		}
+		config_list_foreach "$vif" venue_name add_venue_name
+
+		add_network_auth_type() {
+			append "$var" "network_auth_type=${1}" "$N"
+		}
+		config_list_foreach "$vif" network_auth_type add_network_auth_type
+		config_get ipaddr_type_availability "$vif" ipaddr_type_availability
+		[ -n "$ipaddr_type_availability" ] && append "$var" "ipaddr_type_availability=$ipaddr_type_availability" "$N"
+
+
+		add_domain_name() {
+			append "$var" "domain_name=${1}" "$N"
+		}
+
+		config_list_foreach "$vif" domain_name add_domain_name
+
+		config_get anqp_3gpp_cell_net "$vif" anqp_3gpp_cell_net
+		[ -n "$anqp_3gpp_cell_net" ] && append "$var" "anqp_3gpp_cell_net=$anqp_3gpp_cell_net" "$N"
+
+		config_get qos_map_set "$vif" qos_map_set
+		[ -n "$qos_map_set" ] && append "$var" "qos_map_set=$qos_map_set" "$N"
+		config_get gas_frag_limit "$vif" gas_frag_limit
+		[ -n "$gas_frag_limit" ] && append "$var" "gas_frag_limit=$gas_frag_limit" "$N"
+		config_get hs20_deauth_req_timeout "$vif" hs20_deauth_req_timeout
+		[ -n "$hs20_deauth_req_timeout" ] && append "$var" "hs20_deauth_req_timeout=$hs20_deauth_req_timeout" "$N"
+
+		add_nai_realm() {
+			append "$var" "nai_realm=${1}" "$N"
+		}
+		config_list_foreach "$vif" nai_realm add_nai_realm
+
+		add_hs20_icon() {
+			append "$var" "hs20_icon=${1}" "$N"
+		}
+		config_list_foreach "$vif" hs20_icon add_hs20_icon
+
+		config_get osu_ssid "$vif" osu_ssid
+		[ -n "$osu_ssid" ] && append "$var" "osu_ssid=$osu_ssid" "$N"
+
+		add_osu_server_uri() {
+			[ -n "${1}" ] && append "$var" "osu_server_uri=${1}" "$N"
+		}
+		config_list_foreach "$vif" osu_server_uri add_osu_server_uri
+
+		add_osu_friendly_name() {
+			append "$var" "osu_friendly_name=${1}" "$N"
+		}
+		config_list_foreach "$vif" osu_friendly_name add_osu_friendly_name
+
+		config_get osu_nai "$vif" osu_nai
+		[ -n "$osu_nai" ] && append "$var" "osu_nai=$osu_nai" "$N"
+
+		config_get osu_method_list "$vif" osu_method_list
+		[ -n "$osu_method_list" ] && append "$var" "osu_method_list=$osu_method_list" "$N"
+
+		add_osu_icon() {
+			append "$var" "osu_icon=${1}" "$N"
+		}
+		config_list_foreach "$vif" osu_icon add_osu_icon
+
+		add_osu_service_desc() {
+			append "$var" "osu_service_desc=${1}" "$N"
+		}
+		config_list_foreach "$vif" osu_service_desc add_osu_service_desc
+
+	else
+		config_get interworking "$vif" interworking
+		[ -n "$interworking" ] && append "$var" "interworking=$interworking" "$N"
+	fi
+
+	add_anqp_elem() {
+		append "$var" "anqp_elem=${1}" "$N"
+	}
+	config_list_foreach "$vif" anqp_elem add_anqp_elem
+
+	config_get mbo_cell_data_conn_pref "$vif" mbo_cell_data_conn_pref
+	[ -n "$mbo_cell_data_conn_pref" ] && append "$var" "mbo_cell_data_conn_pref=$mbo_cell_data_conn_pref" "$N"
+
+	config_get osen "$vif" osen
+	[ -n "$osen" ] && append "$var" "osen=$osen" "$N"
+
+	config_get gas_comeback_delay "$vif" gas_comeback_delay
+	[ -n "$gas_comeback_delay" ] && append "$var" "gas_comeback_delay=$gas_comeback_delay" "$N"
+
+	if [ "$ieee80211r" -gt 0 ]
+	then
+
+		config_get mobility_domain "$vif" mobility_domain
+		[ -n "$mobility_domain" ] && append "$var" "mobility_domain=$mobility_domain" "$N"
+		config_get r0_key_lifetime "$vif" r0_key_lifetime 10000
+		append "$var" "r0_key_lifetime=$r0_key_lifetime" "$N"
+		config_get r1_key_holder "$vif" r1_key_holder
+		[ -n "$r1_key_holder" ] && append "$var" "r1_key_holder=$r1_key_holder" "$N"
+		config_get reassociation_deadline "$vif" reassociation_deadline 1000
+		append "$var" "reassociation_deadline=$reassociation_deadline" "$N"
+		config_get pmk_r1_push "$vif" pmk_r1_push 1
+		append "$var" "pmk_r1_push=$pmk_r1_push" "$N"
+		config_get ft_over_ds "$vif" ft_over_ds
+		[ -n "$ft_over_ds" ] && append "$var" "ft_over_ds=$ft_over_ds" "$N"
+		config_get ft_psk_generate_local "$vif" ft_psk_generate_local 1
+		append "$var" "ft_psk_generate_local=$ft_psk_generate_local" "$N"
+
+		config_get nasid2 "$vif" nasid2
+		config_get ap_macaddr "$vif" ap_macaddr
+		config_get ap2_macaddr "$vif" ap2_macaddr
+		config_get ap2_r1_key_holder "$vif" ap2_r1_key_holder
+
+		append "$var" "r0kh=$ap_macaddr $nasid2 $kh_key_hex" "$N"
+		append "$var" "r1kh=$ap2_macaddr $ap2_r1_key_holder $kh_key_hex" "$N"
+	fi
+
+	config_get_bool wnm_sleep_mode "$vif" wnm_sleep_mode
+	[ -n "$wnm_sleep_mode" ] && append "$var" "wnm_sleep_mode=$wnm_sleep_mode" "$N"
+
+	config_get_bool wnm_sleep_mode_no_keys "$vif" wnm_sleep_mode_no_keys
+	[ -n "$wnm_sleep_mode_no_keys" ] && append "$var" "wnm_sleep_mode_no_keys=$wnm_sleep_mode_no_keys" "$N"
+
+	config_get_bool bss_transition "$vif" bss_transition
+	[ -n "$bss_transition" ] && append "$var" "bss_transition=$bss_transition" "$N"
+	return 0
+}
+
+hostapd_get_vif_name () {
+	[ -e /lib/functions.sh ] && . /lib/functions.sh
+	DEVICES=
+	config_cb() {
+		local type="$1"
+		local section="$2"
+		local index="$(cat /sys/class/ieee80211/$phy/index)"
+
+		# section start
+		case "$type" in
+			wifi-device)
+				append DEVICES "$section"
+				config_set "$section" vifs ""
+				config_set "$section" ht_capab ""
+			;;
+		esac
+
+		# section end
+		config_get TYPE "$CONFIG_SECTION" TYPE
+		case "$TYPE" in
+			wifi-iface)
+				config_get device "$CONFIG_SECTION" device
+				config_get vifs "$device" vifs
+				append vifs "$CONFIG_SECTION"
+				config_set "$device" vifs "$vifs"
+				for vif_interface in $vifs; do
+					[ "$device" == "radio$index" ] && {
+						config_set "$device" phy "$phy"
+						vif=$vif_interface
+						config_get_bool hidden "$vif" hidden 0
+						append "$var" "ignore_broadcast_ssid=$hidden" "$N"
+					}
+				done
+			;;
+		esac
+	}
+}
+
+hostapd_set_log_options() {
+	local var="$1"
+	local cfg="$2"
+	local log_level log_80211 log_8021x log_radius log_wpa log_driver log_iapp log_mlme
+
+	config_get log_level "$cfg" log_level 2
+
+	config_get_bool log_80211  "$cfg" log_80211  1
+	config_get_bool log_8021x  "$cfg" log_8021x  1
+	config_get_bool log_radius "$cfg" log_radius 1
+	config_get_bool log_wpa    "$cfg" log_wpa    1
+	config_get_bool log_driver "$cfg" log_driver 1
+	config_get_bool log_iapp   "$cfg" log_iapp   1
+	config_get_bool log_mlme   "$cfg" log_mlme   1
+
+	[ -z "$cfg" ] && {
+		set_default log_level 2
+		set_default log_80211  1
+		set_default log_8021x  1
+		set_default log_radius 1
+		set_default log_wpa    1
+		set_default log_driver 1
+		set_default log_iapp   1
+		set_default log_mlme   1
+	}
+
+	local log_mask=$((       \
+		($log_80211  << 0) | \
+		($log_8021x  << 1) | \
+		($log_radius << 2) | \
+		($log_wpa    << 3) | \
+		($log_driver << 4) | \
+		($log_iapp   << 5) | \
+		($log_mlme   << 6)   \
+	))
+
+	append "$var" "logger_syslog=$log_mask" "$N"
+	append "$var" "logger_syslog_level=$log_level" "$N"
+	append "$var" "logger_stdout=$log_mask" "$N"
+	append "$var" "logger_stdout_level=$log_level" "$N"
+}
+
+hostapd_config_multi_cred() {
+	local vif="$1" && shift
+	local ifname device
+	local cred_config temp
+	extra_cred=
+
+	config_get ifname "$vif" ifname
+	config_get device "$vif" device
+	config_get map "$vif" map 0
+	config_get MapBSSType "$vif" MapBSSType 0
+	file="/var/run/map_cred_$device.bin"
+
+	if [ $((MapBSSType >> 6)) -eq 1 ]; then
+		[ -e "$file" ] && rm -- $file
+	fi
+
+	if [ $((MapBSSType >> 5)) -eq 1 ] && [ -f "$file" ]; then
+		return 0
+	fi
+
+	hostapd_set_extra_cred extra_cred "$vif" "$ifname"
+
+
+	extra_cred=$(echo $extra_cred | tr -d ' ')
+	extra_cred=$(echo $extra_cred | tr -d ':')
+
+	temp=`expr length "$extra_cred" / 2 `
+	temp=` printf "%04X" $temp`
+
+	#ATTR_CRED
+	cred_config="100e$temp$extra_cred"
+
+	if [ "$map" -gt 0 ]; then
+		cat > /var/run/map_cred_tmp.conf <<EOF
+$cred_config
+EOF
+	else
+		cat > /var/run/hostapd_cred_tmp.conf <<EOF
+$cred_config
+EOF
+	fi
+
+	if [ "$map" -gt 0 ]; then
+		sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' /var/run/map_cred_tmp.conf | xargs printf >> /var/run/map_cred_$device.bin
+	else
+		sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' /var/run/hostapd_cred_tmp.conf | xargs printf >> /var/run/hostapd_cred_$device.bin
+	fi
+}
+
+
+hostapd_setup_vif() {
+	local vif="$1" && shift
+	local driver="$1" && shift
+	local no_nconfig
+	local ifname device channel hwmode
+	local fst_disabled
+	local fst_iface1
+	local fst_iface2
+	local fst_group_id
+	local fst_priority1
+	local fst_priority2
+
+	hostapd_cfg=
+
+	# These are flags that may or may not be used when calling
+	# "hostapd_setup_vif()". These are not mandatory and may be called in
+	# any order
+	while [ $# -ne 0 ]; do
+		local tmparg="$1" && shift
+		case "$tmparg" in
+		no_nconfig)
+			no_nconfig=1
+			;;
+		esac
+	done
+
+	config_get ifname "$vif" ifname
+	config_get device "$vif" device
+	config_get_bool dpp "$vif" dpp 0
+	config_get channel "$device" channel
+	config_get hwmode "$device" hwmode
+
+	hostapd_set_log_options hostapd_cfg "$device"
+	hostapd_set_bss_options hostapd_cfg "$vif"
+
+	config_load fst && {
+		config_get fst_disabled config disabled
+		config_get fst_iface1 config interface1
+		config_get fst_iface2 config interface2
+		config_get fst_group_id config mux_interface
+		config_get fst_priority1 config interface1_priority
+		config_get fst_priority2 config interface2_priority
+
+		if [ $fst_disabled -eq 0 ]; then
+			if [ "$ifname" == $fst_iface1 ] ; then
+				append hostapd_cfg "fst_group_id=$fst_group_id" "$N"
+				append hostapd_cfg "fst_priority=$fst_priority1" "$N"
+			elif [ "$ifname" == $fst_iface2 ] ; then
+				append hostapd_cfg "fst_group_id=$fst_group_id" "$N"
+				append hostapd_cfg "fst_priority=$fst_priority2" "$N"
+			fi
+		fi
+	}
+
+	case "$hwmode" in
+		*bg|*gdt|*gst|*fh) hwmode=g;;
+		*adt|*ast) hwmode=a;;
+	esac
+	[ "$channel" = auto ] && channel=
+	[ -n "$channel" -a -z "$hwmode" ] && wifi_fixup_hwmode "$device"
+	rm -f /var/run/hostapd-$ifname.conf
+	cat > /var/run/hostapd-$ifname.conf <<EOF
+driver=$driver
+interface=$ifname
+#${channel:+channel=$channel}
+$hostapd_cfg
+EOF
+	[ -z "${no_nconfig}" ] &&
+		echo ${hwmode:+hw_mode=${hwmode#11}} >> /var/run/hostapd-$ifname.conf
+
+	entropy_file=/var/run/entropy-$ifname.bin
+
+	# Run a single hostapd instance for all the radio's
+	# Enables WPS VAP TIE feature
+	config_get_bool wps_vap_tie_dbdc qcawifi wps_vap_tie_dbdc 0
+
+	if [ $wps_vap_tie_dbdc -ne 0 ]; then
+		echo -e "/var/run/hostapd-$ifname.conf \c\h" >> /tmp/hostapd_conf_filename
+	else
+		[ -f "/var/run/hostapd-$ifname.lock" ] &&
+			rm /var/run/hostapd-$ifname.lock
+		result=$(wpa_cli -g /var/run/hostapd/global raw ADD bss_config=$ifname:/var/run/hostapd-$ifname.conf)
+		[ "$result" = "OK" ] || return
+		touch /var/run/hostapd-$ifname.lock
+
+		if [ -n "$wps_possible" -a -n "$config_methods" ]; then
+			pid=/var/run/hostapd_cli-$ifname.pid
+			hostapd_cli -i $ifname  -P $pid -a /lib/wifi/wps-hostapd-update-uci -p /var/run/hostapd-$device &>/dev/null </dev/null &
+		elif [ "${dpp}" -eq 1 ]
+		then
+			config_get dpp_type "$vif" dpp_type "qrcode"
+			config_get dpp_curve "$vif" dpp_curve "P-256"
+			config_get dpp_key "$vif" dpp_key
+
+			pid=/var/run/hostapd_cli-$ifname.pid
+			hostapd_cli -i $ifname  -P $pid -a /lib/wifi/dpp-hostapd-update-uci -p /var/run/hostapd-$device -B
+			hostapd_cli -i $ifname  -p /var/run/hostapd-$device DPP_BOOTSTRAP_GEN type=$dpp_type curve=$dpp_curve chan=81/$channel mac=$(cat /sys/class/net/$ifname/address | sed 's/://g') key=$dpp_key
+		fi
+
+	fi
+}
+
diff --git a/lib/wifi/iface_mgr.sh b/lib/wifi/iface_mgr.sh
new file mode 100644
index 0000000..ea09ea1
--- /dev/null
+++ b/lib/wifi/iface_mgr.sh
@@ -0,0 +1,215 @@
+#
+# Copyright (c) 2016-2018 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+#
+
+. /lib/functions.sh
+
+pref_uplink_idx=0
+
+iface_mgr_config() {
+        local device=$1
+        local ifidx=0
+        local group0=0
+        local group1=1
+        local radioidx=${device#wifi}
+        local iface_mgr_op_mode=$2
+        config_get disabled "$device" disabled 0
+
+        [ "$disabled" -eq 0 ] || return
+
+        config_get fast_lane "$device" fast_lane 0
+        config_get pref_uplink "$device" pref_uplink 0
+
+        [ "$iface_mgr_op_mode" -eq 2 ] && [ "$fast_lane" -eq 0 ] && return
+
+        config_get vifs $device vifs
+
+        for vif in $vifs; do
+                local vifname
+                exclude_flag=0
+                config_get vifname "$vif" ifname
+
+                if [ -n $vifname ]; then
+                        [ $ifidx -gt 0 ] && vifname="ath${radioidx}$ifidx" || vifname="ath${radioidx}"
+                fi
+                config_get mode "$vif" mode
+
+		config_get group "$vif" group 0
+		config_get exclude "$vif" exclude 0
+		config_get wrap "$vif" wrap 0
+		config_get extap "$vif" extap 0
+		config_get device "$vif" device
+		config_get lp_stavap "$vif" lp_stavap 0
+		config_get hp_stavap "$vif" hp_stavap 0
+		[ "$exclude" -gt 0 ] && exclude_flag=1
+		[ "$wrap" -gt 0 ] && exclude_flag=1
+		[ "$extap" -gt 0 ] && exclude_flag=1
+                [ "$fast_lane" -gt 0 ] && exclude_flag=1
+
+                case "$mode" in
+                  ap | wrap | ap_smart_monitor)
+                                [ $exclude_flag -ne 1 ] && { \
+                                        ap_ifname="$vifname"
+                                        echo "group=$group ap_vap=$ap_ifname" >> /var/run/iface_mgr.conf
+                                        echo "radio=$device" >> /var/run/iface_mgr.conf
+                                }
+                                if [ $exclude_flag -eq 1 ] && [ $iface_mgr_op_mode -eq 2 ]; then
+                                        [ $pref_uplink -eq 1 ] && {\
+                                                ap_ifname="$vifname"
+                                                echo "group=$group0 ap_vap=$ap_ifname" >> /var/run/iface_mgr.conf
+                                        }
+                                        [ $pref_uplink -eq 0 ] && { \
+                                                ap_ifname="$vifname"
+                                                echo "group=$group1 ap_vap=$ap_ifname" >> /var/run/iface_mgr.conf
+                                        }
+                                fi
+                        ;;
+                        sta)
+                                [ $exclude_flag -ne 1 ] && { \
+                                        sta_ifname="$vifname"
+					priority=0
+                                        [ $hp_stavap -eq 1 ] && {\
+					    priority=1
+                                        }
+                                        [ $lp_stavap -eq 1 ] && {\
+					    priority=2
+                                        }
+                                        [ $priority -ne 0 ] && {\
+                                        echo "group=$group sta_vap=$sta_ifname priority=$priority" >> /var/run/iface_mgr.conf
+                                        }
+                                        [ $priority -eq 0 ] && {\
+                                        echo "group=$group sta_vap=$sta_ifname" >> /var/run/iface_mgr.conf
+                                        }
+                                }
+                                if [ $exclude_flag -eq 1 ] && [ $iface_mgr_op_mode -eq 2 ]; then
+                                        [ $pref_uplink -eq 1 ] && {\
+                                                sta_ifname="$vifname"
+                                                echo "group=$group1 sta_vap=$sta_ifname" >> /var/run/iface_mgr.conf
+                                        }
+                                        [ $pref_uplink -eq 0 ] && { \
+                                                sta_ifname="$vifname"
+                                                echo "group=$group0 sta_vap=$sta_ifname" >> /var/run/iface_mgr.conf
+                                        }
+                                fi
+                        ;;
+                esac
+                ifidx=$(($ifidx + 1))
+       done
+}
+
+iface_mgr_config_mode1() {
+        iface_mgr_config $1 1
+}
+
+iface_mgr_config_mode2() {
+        iface_mgr_config $1 2
+}
+
+iface_mgr_setup() {
+
+        local iface_mgr_op_mode=0
+        local backhaul_cnt=0
+        config_load wireless
+
+        handle_son_wps_op_mode() {
+                local device=$1
+                config_get vifs $device vifs
+
+                for vif in $vifs; do
+                        config_get backhaul "$vif" backhaul 0
+                        if [ "$backhaul" -eq 1 ]
+                        then
+                                let backhaul_cnt++
+                        fi
+                done
+        }
+
+        config_foreach handle_son_wps_op_mode wifi-device
+
+        if [ "$backhaul_cnt" -gt 0 ] ;  then
+                iface_mgr_op_mode=3
+        else
+                rm /var/run/son.conf
+        fi
+
+        config_get  global_wds qcawifi global_wds 0
+
+        [ "$global_wds" -gt 0 ] && iface_mgr_op_mode=1
+
+        handle_iface_mgr_op_mode() {
+                local device=$1
+                config_get fast_lane $device fast_lane 0
+                config_get pref_uplink "$device" pref_uplink 0
+
+                [ "$fast_lane" -gt 0 ] && iface_mgr_op_mode=2
+                if [ $pref_uplink -eq 1 ] && [ $iface_mgr_op_mode -eq 2 ]; then
+                        pref_uplink_idx=$(($pref_uplink_idx + 1))
+                fi
+        }
+
+        config_foreach handle_iface_mgr_op_mode wifi-device
+
+        [ "$iface_mgr_op_mode" -gt 0 ] || return
+        [ "$iface_mgr_op_mode" -eq 2 ] && [ "$pref_uplink_idx" -ne 1 ] && return
+
+        config_get  discon_time qcawifi discon_time 10
+        config_get  reconfig_time qcawifi reconfig_time 60
+        config_get  pref_uplink_time qcawifi pref_uplink_time 60
+        config_get  hp_sta_scan_time qcawifi hp_sta_scan_time 120
+        config_get  hp_sta_periodic_time qcawifi hp_sta_periodic_time 600
+
+	if [ "$iface_mgr_op_mode" -eq 1 ] ;  then
+	    [ "$discon_time" -ge "$reconfig_time" ] && timeout=$discon_time
+	    [ "$discon_time" -lt "$reconfig_time" ] && timeout=$reconfig_time
+	else
+	    if [ "$iface_mgr_op_mode" -eq 2 ] ;  then
+		timeout=$pref_uplink_time
+	    fi
+	fi
+
+        killall iface-mgr
+        rm -rf /var/run/iface_mgr.conf
+
+        echo "#Interface manager configuration file should strictly meet below template" >> /var/run/iface_mgr.conf
+        echo "#mode=x">> /var/run/iface_mgr.conf
+        echo "#timeout=xx" >> /var/run/iface_mgr.conf
+        echo "#group=x ap_vap=athx" >> /var/run/iface_mgr.conf
+        echo "#group=x sta_vap=athx" >> /var/run/iface_mgr.conf
+
+
+        echo "  " >> /var/run/iface_mgr.conf
+        echo "mode=$iface_mgr_op_mode" >> /var/run/iface_mgr.conf
+        echo "  " >> /var/run/iface_mgr.conf
+        echo "timeout=$timeout" >> /var/run/iface_mgr.conf
+        echo "  " >> /var/run/iface_mgr.conf
+        echo "scan_time=$hp_sta_scan_time" >> /var/run/iface_mgr.conf
+        echo "  " >> /var/run/iface_mgr.conf
+        echo "periodic_time=$hp_sta_periodic_time" >> /var/run/iface_mgr.conf
+        echo "  " >> /var/run/iface_mgr.conf
+
+        [ "$iface_mgr_op_mode" -eq 1 ] && {
+                config_foreach iface_mgr_config_mode1 wifi-device
+        }
+
+        [ "$iface_mgr_op_mode" -eq 2 ] && {
+                config_foreach iface_mgr_config_mode2 wifi-device
+        }
+
+        config_load plc
+        config_get plc_ifname config PlcIfname
+        config_get group config group 0
+
+        echo "  " >> /var/run/iface_mgr.conf
+        echo "group=$group plc_iface=$plc_ifname" >> /var/run/iface_mgr.conf
+
+        iface-mgr > /dev/console 2>&1 &
+
+        return 1
+}
diff --git a/lib/wifi/qca-wifi-modules b/lib/wifi/qca-wifi-modules
new file mode 100644
index 0000000..f18f15d
--- /dev/null
+++ b/lib/wifi/qca-wifi-modules
@@ -0,0 +1,14 @@
+mem_manager
+asf
+qdf
+ath_dfs
+ath_spectral
+umac
+ath_hal
+ath_rate_atheros
+hst_tx99
+ath_dev
+qca_da
+qca_ol
+ath_pktlog
+smart_antenna
diff --git a/lib/wifi/qcawifi.sh b/lib/wifi/qcawifi.sh
new file mode 100644
index 0000000..d0fa578
--- /dev/null
+++ b/lib/wifi/qcawifi.sh
@@ -0,0 +1,2601 @@
+#!/bin/sh
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# Copyright (c) 2014, 2016, The Linux Foundation. All rights reserved.
+#
+#
+append DRIVERS "qcawifi"
+
+DEBUG=1
+DEBUG_FILE=/var/run/qcawifi.log
+wlanconfig() {
+	[ -n "${DEBUG}" ] && echo wlanconfig "$@" >>$DEBUG_FILE
+	/usr/sbin/wlanconfig "$@"
+}
+
+iwconfig() {
+	[ -n "${DEBUG}" ] && echo iwconfig "$@" >>$DEBUG_FILE
+	/usr/sbin/iwconfig "$@"
+}
+
+iwpriv() {
+	[ -n "${DEBUG}" ] && echo iwpriv "$@" >>$DEBUG_FILE
+	/usr/sbin/iwpriv "$@"
+}
+
+ifconfig() {
+	[ -n "${DEBUG}" ] && echo ifconfig "$@" >>$DEBUG_FILE
+	command ifconfig "$@"
+}
+
+wifitool() {
+	[ -n "${DEBUG}" ] && echo wifitool "$@" >>$DEBUG_FILE
+	command wifitool "$@"
+}
+
+find_qcawifi_phy() {
+	local device="$1"
+
+	local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')"
+	config_get phy "$device" phy
+	[ -z "$phy" -a -n "$macaddr" ] && {
+		cd /sys/class/net
+		for phy in $(ls -d wifi* 2>&-); do
+			[ "$macaddr" = "$(cat /sys/class/net/${phy}/address)" ] || continue
+			config_set "$device" phy "$phy"
+			break
+		done
+		config_get phy "$device" phy
+	}
+	[ -n "$phy" -a -d "/sys/class/net/$phy" ] || {
+		echo "phy for wifi device $1 not found"
+		return 1
+	}
+	[ -z "$macaddr" ] && {
+		config_set "$device" macaddr "$(cat /sys/class/net/${phy}/address)"
+	}
+	return 0
+}
+
+scan_qcawifi() {
+	local device="$1"
+	local wds
+	local adhoc sta ap monitor ap_monitor ap_smart_monitor mesh ap_lp_iot disabled
+
+	[ ${device%[0-9]} = "wifi" ] && config_set "$device" phy "$device"
+
+	local ifidx=0
+	local radioidx=${device#wifi}
+
+	config_get vifs "$device" vifs
+	for vif in $vifs; do
+		config_get_bool disabled "$vif" disabled 0
+		[ $disabled = 0 ] || continue
+
+		local vifname
+		[ $ifidx -gt 0 ] && vifname="ath${radioidx}$ifidx" || vifname="ath${radioidx}"
+
+		config_set "$vif" ifname $vifname
+
+		config_get mode "$vif" mode
+		case "$mode" in
+			adhoc|sta|ap|monitor|wrap|ap_monitor|ap_smart_monitor|mesh|ap_lp_iot)
+				append "$mode" "$vif"
+			;;
+			wds)
+				config_get ssid "$vif" ssid
+				[ -z "$ssid" ] && continue
+
+				config_set "$vif" wds 1
+				config_set "$vif" mode sta
+				mode="sta"
+				addr="$ssid"
+				${addr:+append "$mode" "$vif"}
+			;;
+			*) echo "$device($vif): Invalid mode, ignored."; continue;;
+		esac
+
+		ifidx=$(($ifidx + 1))
+	done
+
+	case "${adhoc:+1}:${sta:+1}:${ap:+1}" in
+		# valid mode combinations
+		1::) wds="";;
+		1::1);;
+		:1:1)config_set "$device" nosbeacon 1;; # AP+STA, can't use beacon timers for STA
+		:1:);;
+		::1);;
+		::);;
+		*) echo "$device: Invalid mode combination in config"; return 1;;
+	esac
+
+	config_set "$device" vifs "${ap:+$ap }${ap_monitor:+$ap_monitor }${mesh:+$mesh }${ap_smart_monitor:+$ap_smart_monitor }${wrap:+$wrap }${sta:+$sta }${adhoc:+$adhoc }${wds:+$wds }${monitor:+$monitor}${ap_lp_iot:+$ap_lp_iot}"
+}
+
+# The country ID is set at the radio level. When the driver attaches the radio,
+# it sets the default country ID to 840 (US STA). This is because the desired
+# VAP modes are not known at radio attach time, and STA functionality is the
+# common unit of 802.11 operation.
+# If the user desires any of the VAPs to be in AP mode, then we set a new
+# default of 843 (US AP with TDWR) from this script. Even if any of the other
+# VAPs are in non-AP modes like STA or Monitor, the stricter default of 843
+# will apply.
+# No action is required here if none of the VAPs are in AP mode.
+set_default_country() {
+	local device="$1"
+	local mode
+
+	find_qcawifi_phy "$device" || return 1
+	config_get phy "$device" phy
+
+	config_get vifs "$device" vifs
+	for vif in $vifs; do
+		config_get_bool disabled "$vif" disabled 0
+		[ $disabled = 0 ] || continue
+
+		config_get mode "$vif" mode
+		case "$mode" in
+			ap|wrap|ap_monitor|ap_smart_monitor|ap_lp_iot)
+				iwpriv "$phy" setCountryID 843
+				return 0;
+			;;
+		*) ;;
+		esac
+	done
+
+	return 0
+}
+
+config_low_targ_clkspeed() {
+        local board_name
+        [ -f /tmp/sysinfo/board_name ] && {
+                board_name=$(cat /tmp/sysinfo/board_name)
+        }
+
+        case "$board_name" in
+                dlan-1000-ac |\
+                ap147 | ap151 | ap-dk*)
+                   echo "true"
+                ;;
+                *) echo "false"
+                ;;
+        esac
+}
+
+# configure tx queue fc_buf_max
+config_tx_fc_buf() {
+	local phy="$1"
+	local board_name
+	[ -f /tmp/sysinfo/board_name ] && {
+		board_name=$(cat /tmp/sysinfo/board_name)
+	}
+	memtotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
+
+	case "$board_name" in
+		ew7479cap |\
+		dlan2-2400-ac |\
+		ap-dk*)
+			if [ $memtotal -le 131072 ]; then
+				# 4MB tx queue max buffer size
+				iwpriv "$phy" fc_buf_max 4096
+				iwpriv "$phy" fc_q_max 512
+				iwpriv "$phy" fc_q_min 32
+			elif [ $memtotal -le 256000 ]; then
+				# 8MB tx queue max buffer size
+				iwpriv "$phy" fc_buf_max 8192
+				iwpriv "$phy" fc_q_max 1024
+				iwpriv "$phy" fc_q_min 64
+			fi
+				# default value from code memsize > 256MB
+		;;
+
+		*)
+		;;
+	esac
+}
+
+load_qcawifi() {
+	lock /var/run/wifilock
+	local umac_args
+	local qdf_args
+	local ol_args
+	local cfg_low_targ_clkspeed
+	local qca_da_needed=0
+	local qca_ol_needed=0
+	local device
+	local board_name
+	local def_pktlog_support=1
+	local ath_dev_args
+
+	# trigger memory compaction when we reconfigure WiFi
+	echo 1 > /proc/sys/vm/compact_memory
+
+	[ -f /tmp/sysinfo/board_name ] && {
+		board_name=$(cat /tmp/sysinfo/board_name)
+	}
+	memtotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
+
+	case "$board_name" in
+		ew7479cap |\
+		dlan2-2400-ac |\
+		ap-dk01.1-c1 | ap-dk01.1-c2 | ap-dk04.1-c1 | ap-dk04.1-c2 | ap-dk04.1-c3)
+			if [ $memtotal -le 131072 ]; then
+				echo 1 > /proc/net/skb_recycler/max_skbs
+				echo 1 > /proc/net/skb_recycler/max_spare_skbs
+				append umac_args "low_mem_system=1"
+			fi
+		;;
+		dlan-550-wifi |\
+		ap152 | ap147 | ap151 | ap135 | ap137)
+			if [ $memtotal -le 66560 ]; then
+				def_pktlog_support=0
+			fi
+		;;
+	esac
+
+	config_get_bool testmode qcawifi testmode
+	[ -n "$testmode" ] && append ol_args "testmode=$testmode"
+
+	config_get vow_config qcawifi vow_config
+	[ -n "$vow_config" ] && append ol_args "vow_config=$vow_config"
+
+	config_get carrier_vow_config qcawifi carrier_vow_config
+	[ -n "$carrier_vow_config" ] && append ol_args "carrier_vow_config=$carrier_vow_config"
+
+	config_get wlanstats_config qcawifi wlanstats_config
+	[ -n "$wlanstats_config" ] && append ol_args "wlanstats_config=$wlanstats_config"
+
+	config_get fw_vow_stats_enable qcawifi fw_vow_stats_enable
+	[ -n "$fw_vow_stats_enable" ] && append ol_args "fw_vow_stats_enable=$fw_vow_stats_enable"
+
+	config_get ol_bk_min_free qcawifi ol_bk_min_free
+	[ -n "$ol_bk_min_free" ] && append ol_args "OL_ACBKMinfree=$ol_bk_min_free"
+
+	config_get ol_be_min_free qcawifi ol_be_min_free
+	[ -n "$ol_be_min_free" ] && append ol_args "OL_ACBEMinfree=$ol_be_min_free"
+
+	config_get ol_vi_min_free qcawifi ol_vi_min_free
+	[ -n "$ol_vi_min_free" ] && append ol_args "OL_ACVIMinfree=$ol_vi_min_free"
+
+	config_get ol_vo_min_free qcawifi ol_vo_min_free
+	[ -n "$ol_vo_min_free" ] && append ol_args "OL_ACVOMinfree=$ol_vo_min_free"
+
+	config_get_bool ar900b_emu qcawifi ar900b_emu
+	[ -n "$ar900b_emu" ] && append ol_args "ar900b_emu=$ar900b_emu"
+
+	config_get frac qcawifi frac
+	[ -n "$frac" ] && append ol_args "frac=$frac"
+
+	config_get intval qcawifi intval
+	[ -n "$intval" ] && append ol_args "intval=$intval"
+
+	config_get atf_mode qcawifi atf_mode
+	[ -n "$atf_mode" ] && append umac_args "atf_mode=1"  # always enable ATF support in driver, we enable/disable ATF via commitatf later
+
+        config_get atf_msdu_desc qcawifi atf_msdu_desc
+        [ -n "$atf_msdu_desc" ] && append umac_args "atf_msdu_desc=$atf_msdu_desc"
+
+        config_get atf_peers qcawifi atf_peers
+        [ -n "$atf_peers" ] && append umac_args "atf_peers=$atf_peers"
+
+        config_get atf_max_vdevs qcawifi atf_max_vdevs
+        [ -n "$atf_max_vdevs" ] && append umac_args "atf_max_vdevs=$atf_max_vdevs"
+
+	config_get fw_dump_options qcawifi fw_dump_options
+	[ -n "$fw_dump_options" ] && append ol_args "fw_dump_options=$fw_dump_options"
+
+	config_get enableuartprint qcawifi enableuartprint
+	[ -n "$enableuartprint" ] && append ol_args "enableuartprint=$enableuartprint"
+
+	config_get ar900b_20_targ_clk qcawifi ar900b_20_targ_clk
+	[ -n "$ar900b_20_targ_clk" ] && append ol_args "ar900b_20_targ_clk=$ar900b_20_targ_clk"
+
+	config_get qca9888_20_targ_clk qcawifi qca9888_20_targ_clk
+	[ -n "$qca9888_20_targ_clk" ] && append ol_args "qca9888_20_targ_clk=$qca9888_20_targ_clk"
+
+        cfg_low_targ_clkspeed=$(config_low_targ_clkspeed)
+        [ -z "$qca9888_20_targ_clk" ] && [ $cfg_low_targ_clkspeed = "true" ] && append ol_args "qca9888_20_targ_clk=300000000"
+
+	config_get ipq4019_20_targ_clk qcawifi ipq4019_20_targ_clk
+	[ -n "$ipq4019_20_targ_clk" ] && append ol_args "ipq4019_20_targ_clk=$ipq4019_20_targ_clk"
+
+	cfg_low_targ_clkspeed=$(config_low_targ_clkspeed)
+	[ -z "$ipq4019_20_targ_clk" ] && [ $cfg_low_targ_clkspeed = "true" ] && append ol_args "ipq4019_20_targ_clk=250000000"
+
+	config_get max_descs qcawifi max_descs
+	[ -n "$max_descs" ] && append ol_args "max_descs=$max_descs"
+
+	config_get max_peers qcawifi max_peers
+	[ -n "$max_peers" ] && append ol_args "max_peers=$max_peers"
+
+	config_get qwrap_enable qcawifi qwrap_enable
+	[ -n "$qwrap_enable" ] && append ol_args "qwrap_enable=$qwrap_enable"
+
+	config_get otp_mod_param qcawifi otp_mod_param
+	[ -n "$otp_mod_param" ] && append ol_args "otp_mod_param=$otp_mod_param"
+
+	config_get max_active_peers qcawifi max_active_peers
+	[ -n "$max_active_peers" ] && append ol_args "max_active_peers=$max_active_peers"
+
+	config_get enable_smart_antenna qcawifi enable_smart_antenna
+	[ -n "$enable_smart_antenna" ] && append ol_args "enable_smart_antenna=$enable_smart_antenna"
+
+	config_get nss_wifi_olcfg qcawifi nss_wifi_olcfg
+	if [ -n "$nss_wifi_olcfg" ]; then
+		append ol_args "nss_wifi_olcfg=$nss_wifi_olcfg"
+	elif [ -f /lib/wifi/wifi_nss_olcfg ]; then
+		nss_wifi_olcfg="$(cat /lib/wifi/wifi_nss_olcfg)"
+
+		if [ $nss_wifi_olcfg != 0 ]; then
+			if [ -f /lib/wifi/wifi_nss_override ] && [ $(cat /lib/wifi/wifi_nss_override) = 1 ]; then
+				echo "NSS offload disabled due to unsupported config" >&2
+				append ol_args "nss_wifi_olcfg=0"
+			else
+				append ol_args "nss_wifi_olcfg=$nss_wifi_olcfg"
+			fi
+		fi
+	fi
+
+	config_get max_clients qcawifi max_clients
+	[ -n "$max_clients" ] && append ol_args "max_clients=$max_clients"
+
+	config_get max_vaps qcawifi max_vaps
+	[ -n "$max_vaps" ] && append ol_args "max_vaps=$max_vaps"
+
+	config_get enable_smart_antenna_da qcawifi enable_smart_antenna_da
+	[ -n "$enable_smart_antenna_da" ] && append umac_args "enable_smart_antenna_da=$enable_smart_antenna_da"
+
+	config_get prealloc_disabled qcawifi prealloc_disabled
+	[ -n "$prealloc_disabled" ] && append qdf_args "prealloc_disabled=$prealloc_disabled"
+
+	if [ -n "$nss_wifi_olcfg" ] && [ "$nss_wifi_olcfg" != "0" ]; then
+		sysctl dev.nss.n2hcfg.n2h_high_water_core0 >/dev/null 2>/dev/null
+	        nss_wifi_olnum="$(cat /lib/wifi/wifi_nss_olnum)"
+		if [ "$nss_wifi_olnum" == "2" ]; then
+		    sysctl -w dev.nss.n2hcfg.extra_pbuf_core0=5939200 >/dev/null 2>/dev/null
+		    sysctl -w dev.nss.n2hcfg.n2h_high_water_core0=59392 >/dev/null 2>/dev/null
+		    sysctl -w dev.nss.n2hcfg.n2h_wifi_pool_buf=35584 >/dev/null 2>/dev/null
+		else
+		    sysctl -w dev.nss.n2hcfg.extra_pbuf_core0=4096000 >/dev/null 2>/dev/null
+		    sysctl -w dev.nss.n2hcfg.n2h_high_water_core0=43008 >/dev/null 2>/dev/null
+		    sysctl -w dev.nss.n2hcfg.n2h_wifi_pool_buf=19200 >/dev/null 2>/dev/null
+		fi
+	fi
+
+	config_get lteu_support qcawifi lteu_support
+	[ -n "$lteu_support" ] && append ol_args "lteu_support=$lteu_support"
+
+	config_get enable_mesh_support qcawifi enable_mesh_support
+	[ -n "$enable_mesh_support" ] && append ol_args "enable_mesh_support=$enable_mesh_support"
+
+
+    if [ -n "$enable_mesh_support" ]
+    then
+        config_get enable_mesh_peer_cap_update qcawifi enable_mesh_peer_cap_update
+        [ -n "$enable_mesh_peer_cap_update" ] && append umac_args "enable_mesh_peer_cap_update=$enable_mesh_peer_cap_update"
+    fi
+
+	config_get enable_pktlog_support qcawifi enable_pktlog_support $def_pktlog_support
+	[ -n "$enable_pktlog_support" ] && append umac_args "enable_pktlog_support=$enable_pktlog_support"
+
+	config_get paprd_enable qcawifi paprd_enable
+	[ -n "$paprd_enable" ] && append ath_dev_args "paprd_enable=$paprd_enable"
+
+	config_get skb_reuse_enable qcawifi skb_reuse_enable
+	[ -n "$skb_reuse_enable" ] && append ath_dev_args "skb_reuse_enable=$skb_reuse_enable"
+
+	for mod in $(cat /lib/wifi/qca-wifi-modules); do
+		case ${mod} in
+			umac) [ -d /sys/module/${mod} ] || { \
+
+				insmod ${mod} ${umac_args} || { \
+					lock -u /var/run/wifilock
+					unload_qcawifi
+					return 1
+				}
+			};;
+
+			qdf) [ -d /sys/module/${mod} ] || { \
+				insmod ${mod} ${qdf_args} || { \
+					lock -u /var/run/wifilock
+					unload_qcawifi
+					return 1
+				}
+			};;
+
+			qca_ol) [ -f /tmp/no_qca_ol ] || { \
+					[ -d /sys/module/${mod} ] || { \
+					insmod ${mod} ${ol_args} || { \
+						lock -u /var/run/wifilock
+						unload_qcawifi
+						return 1
+					}
+				}
+			};;
+
+			ath_dev) [ -f /tmp/no_qca_da ] || { \
+				[ -d /sys/module/${mod} ] || { \
+					insmod ${mod} ${ath_dev_args} || { \
+						lock -u /var/run/wifilock
+						unload_qcawifi
+						return 1
+					}
+				}
+			};;
+
+			qca_da|hst_tx99|ath_rate_atheros|ath_hal) [ -f /tmp/no_qca_da ] || { \
+				[ -d /sys/module/${mod} ] || { \
+					insmod ${mod} || { \
+						lock -u /var/run/wifilock
+						unload_qcawifi
+						return 1
+					}
+				}
+			};;
+
+			ath_pktlog) [ $enable_pktlog_support -eq 0 ] || { \
+				[ -d /sys/module/${mod} ] || { \
+					insmod ${mod} || { \
+						lock -u /var/run/wifilock
+						unload_qcawifi
+						return 1
+					}
+				}
+			};;
+
+			*) [ -d /sys/module/${mod} ] || { \
+				insmod ${mod} || { \
+					lock -u /var/run/wifilock
+					unload_qcawifi
+					return 1
+				}
+			};;
+
+		esac
+	done
+
+       # Remove DA/OL modules, if no DA/OL chipset found
+	for device in $(ls -d /sys/class/net/wifi* 2>&-); do
+		[[ -f $device/is_offload ]] || {
+			qca_da_needed=1
+		}
+		[[ -f $device/is_offload ]] && {
+			qca_ol_needed=1
+		}
+	done
+
+	if [ $qca_ol_needed -eq 0 ]; then
+		if [ ! -f /tmp/no_qca_ol ]; then
+			echo "No offload chipsets found." >/dev/console
+			rmmod qca_ol > /dev/null 2> /dev/null
+			echo "1" > /tmp/no_qca_ol
+		fi
+	fi
+
+	if [ $qca_da_needed -eq 0 ]; then
+		if [ ! -f /tmp/no_qca_da ]; then
+			echo "No Direct-Attach chipsets found." >/dev/console
+			rmmod qca_da > /dev/null 2> /dev/null
+			rmmod ath_dev > /dev/null 2> /dev/null
+			rmmod hst_tx99 > /dev/null 2> /dev/null
+			rmmod ath_rate_atheros > /dev/null 2> /dev/null
+			rmmod ath_hal > /dev/null 2> /dev/null
+			echo "1" > /tmp/no_qca_da
+		fi
+	fi
+	lock -u /var/run/wifilock
+}
+
+unload_qcawifi() {
+	config_foreach disable_qcawifi wifi-device
+	eval "type lowi_teardown" >/dev/null 2>&1 && lowi_teardown
+	sleep 3
+	lock /var/run/wifilock
+	for mod in $(cat /lib/wifi/qca-wifi-modules | sed '1!G;h;$!d'); do
+        case ${mod} in
+            mem_manager) continue;
+            esac
+		[ -d /sys/module/${mod} ] && rmmod ${mod}
+	done
+	lock -u /var/run/wifilock
+}
+
+disable_recover_qcawifi() {
+	disable_qcawifi $@ 1
+}
+
+enable_recover_qcawifi() {
+	enable_qcawifi $@ 1
+}
+
+_disable_qcawifi() {
+	local device="$1"
+	local parent
+	local retval=0
+	local recover="$2"
+
+	echo "$DRIVERS disable radio $1" >/dev/console
+
+	find_qcawifi_phy "$device" >/dev/null || return 1
+
+	# If qrfs is disabled in enable_qcawifi(),need to enable it
+	if [ -f /var/qrfs_disabled_by_wifi ] && [ $(cat /var/qrfs_disabled_by_wifi) == 1 ]; then
+		echo "1" > /proc/qrfs/enable
+		echo "0" > /var/qrfs_disabled_by_wifi
+	fi
+
+	config_get phy "$device" phy
+
+	set_wifi_down "$device"
+
+	include /lib/network
+	cd /sys/class/net
+	for dev in *; do
+		[ -f /sys/class/net/${dev}/parent ] && { \
+			local parent=$(cat /sys/class/net/${dev}/parent)
+			[ -n "$parent" -a "$parent" = "$device" ] && { \
+				[ -f "/var/run/hostapd-${dev}.lock" ] && { \
+					wpa_cli -g /var/run/hostapd/global raw REMOVE ${dev}
+					rm /var/run/hostapd-${dev}.lock
+				}
+				[ -f "/var/run/wpa_supplicant-${dev}.lock" ] && { \
+					wpa_cli -g /var/run/wpa_supplicantglobal  interface_remove  ${dev}
+					rm /var/run/wpa_supplicant-${dev}.lock
+				}
+				[ -f "/var/run/wapid-${dev}.conf" ] && { \
+					kill "$(cat "/var/run/wifi-${dev}.pid")"
+				}
+				ifconfig "$dev" down
+				unbridge "$dev"
+				if [ -z "$recover" ] || [ "$recover" -eq "0" ]; then
+				    wlanconfig "$dev" destroy
+				fi
+			}
+			[ -f /var/run/hostapd_cred_${device}.bin ] && { \
+				rm /var/run/hostapd_cred_${device}.bin
+			}
+		}
+	done
+
+	return 0
+}
+
+destroy_vap() {
+	local ifname="$1"
+	ifconfig $ifname down
+	wlanconfig $ifname destroy
+}
+
+disable_qcawifi() {
+	local device="$1"
+	lock /var/run/wifilock
+	_disable_qcawifi "$device" $2
+	lock -u /var/run/wifilock
+}
+
+enable_qcawifi() {
+	local device="$1"
+	local count=0
+	echo "$DRIVERS: enable radio $1" >/dev/console
+	local num_radio_instamode=0
+	local recover="$2"
+
+	load_qcawifi
+
+	find_qcawifi_phy "$device" || return 1
+
+	if [ ! -f /lib/wifi/wifi_nss_override ]; then
+		if [ -f /lib/wifi/wifi_nss_olcfg ] && [ $(cat /lib/wifi/wifi_nss_olcfg) != 0 ]; then
+			touch /lib/wifi/wifi_nss_override
+			echo 0 > /lib/wifi/wifi_nss_override
+		fi
+	fi
+
+	if [ -f /lib/wifi/wifi_nss_override ]; then
+		cd /sys/class/net
+		for all_device in $(ls -d wifi* 2>&-); do
+			config_get_bool disabled "$all_device" disabled 0
+			[ $disabled = 0 ] || continue
+			config_get vifs "$all_device" vifs
+
+			for vif in $vifs; do
+				config_get mode "$vif" mode
+				if [ $mode = "sta" ]; then
+					num_radio_instamode=$(($num_radio_instamode + 1))
+					break
+				fi
+			done
+			if [ $num_radio_instamode = "0" ]; then
+				break
+			fi
+		done
+
+		nss_override="$(cat /lib/wifi/wifi_nss_override)"
+		if [ $num_radio_instamode = "3" ]; then
+			config_get nss_wifi_olcfg qcawifi nss_wifi_olcfg
+			if [ -n "$nss_wifi_olcfg" ] && [ $nss_wifi_olcfg != 0 ]; then
+				echo " Invalid Configuration: 3 stations in offload not supported"
+				return 1
+			fi
+			if [ $nss_override = "0" ]; then
+				echo 1 > /lib/wifi/wifi_nss_override
+				unload_qcawifi
+				device=$1
+				load_qcawifi
+			fi
+		else
+			if [ $nss_override != "0" ]; then
+				echo 0 > /lib/wifi/wifi_nss_override
+				unload_qcawifi
+				device=$1
+				load_qcawifi
+			fi
+		fi
+	fi
+
+	lock /var/run/wifilock
+
+	config_get phy "$device" phy
+
+	delos_translate_radio_config "$device" "$phy"
+
+	config_get country "$device" country
+	if [ -z "$country" ]; then
+		if ! set_default_country $device; then
+			lock -u /var/run/wifilock
+			return 1
+		fi
+	else
+		# If the country parameter is a number (either hex or decimal), we
+		# assume it's a regulatory domain - i.e. we use iwpriv setCountryID.
+		# Else we assume it's a country code - i.e. we use iwpriv setCountry.
+		case "$country" in
+			[0-9]*)
+				iwpriv "$phy" setCountryID "$country"
+			;;
+			*)
+				[ -n "$country" ] && iwpriv "$phy" setCountry "$country"
+			;;
+		esac
+	fi
+
+	config_get preCACEn "$device" preCACEn
+	[ -n "$preCACEn" ] && iwpriv "$phy" preCACEn "$preCACEn"
+
+	config_get enable_macreq "$device" enable_macreq
+	[ -n "$enable_macreq" ] && iwpriv "$phy" enable_macreq "$enable_macreq"
+
+	config_get channel "$device" channel
+	config_get vifs "$device" vifs
+	config_get txpower "$device" txpower
+
+	[ auto = "$channel" ] && channel=0
+
+	config_get_bool antdiv "$device" diversity
+	config_get antrx "$device" rxantenna
+	config_get anttx "$device" txantenna
+	config_get_bool softled "$device" softled
+	config_get antenna "$device" antenna
+	config_get distance "$device" distance
+
+	[ -n "$antdiv" ] && echo "antdiv option not supported on this driver"
+	[ -n "$antrx" ] && echo "antrx option not supported on this driver"
+	[ -n "$anttx" ] && echo "anttx option not supported on this driver"
+	[ -n "$softled" ] && echo "softled option not supported on this driver"
+	[ -n "$antenna" ] && echo "antenna option not supported on this driver"
+	[ -n "$distance" ] && echo "distance option not supported on this driver"
+
+	# Advanced QCA wifi per-radio parameters configuration
+	config_get txchainmask "$device" txchainmask
+	[ -n "$txchainmask" ] && iwpriv "$phy" txchainmask "$txchainmask"
+
+	config_get rxchainmask "$device" rxchainmask
+	[ -n "$rxchainmask" ] && iwpriv "$phy" rxchainmask "$rxchainmask"
+
+        config_get regdomain "$device" regdomain
+        [ -n "$regdomain" ] && iwpriv "$phy" setRegdomain "$regdomain"
+
+	config_get AMPDU "$device" AMPDU
+	[ -n "$AMPDU" ] && iwpriv "$phy" AMPDU "$AMPDU"
+
+	config_get ampdudensity "$device" ampdudensity
+	[ -n "$ampdudensity" ] && iwpriv "$phy" ampdudensity "$ampdudensity"
+
+	config_get_bool AMSDU "$device" AMSDU
+	[ -n "$AMSDU" ] && iwpriv "$phy" AMSDU "$AMSDU"
+
+	config_get AMPDULim "$device" AMPDULim
+	[ -n "$AMPDULim" ] && iwpriv "$phy" AMPDULim "$AMPDULim"
+
+	config_get AMPDUFrames "$device" AMPDUFrames
+	[ -n "$AMPDUFrames" ] && iwpriv "$phy" AMPDUFrames "$AMPDUFrames"
+
+	config_get AMPDURxBsize "$device" AMPDURxBsize
+	[ -n "$AMPDURxBsize" ] && iwpriv "$phy" AMPDURxBsize "$AMPDURxBsize"
+
+	config_get_bool bcnburst "$device" bcnburst 0
+	[ "$bcnburst" -gt 0 ] && iwpriv "$phy" set_bcnburst "$bcnburst"
+
+	config_get set_smart_antenna "$device" set_smart_antenna
+	[ -n "$set_smart_antenna" ] && iwpriv "$phy" setSmartAntenna "$set_smart_antenna"
+
+	config_get current_ant "$device" current_ant
+	[ -n  "$current_ant" ] && iwpriv "$phy" current_ant "$current_ant"
+
+	config_get default_ant "$device" default_ant
+	[ -n "$default_ant" ] && iwpriv "$phy" default_ant "$default_ant"
+
+	config_get ant_retrain "$device" ant_retrain
+	[ -n "$ant_retrain" ] && iwpriv "$phy" ant_retrain "$ant_retrain"
+
+	config_get retrain_interval "$device" retrain_interval
+	[ -n "$retrain_interval" ] && iwpriv "$phy" retrain_interval "$retrain_interval"
+
+	config_get retrain_drop "$device" retrain_drop
+	[ -n "$retrain_drop" ] && iwpriv "$phy" retrain_drop "$retrain_drop"
+
+	config_get ant_train "$device" ant_train
+	[ -n "$ant_train" ] && iwpriv "$phy" ant_train "$ant_train"
+
+	config_get ant_trainmode "$device" ant_trainmode
+	[ -n "$ant_trainmode" ] && iwpriv "$phy" ant_trainmode "$ant_trainmode"
+
+	config_get ant_traintype "$device" ant_traintype
+	[ -n "$ant_traintype" ] && iwpriv "$phy" ant_traintype "$ant_traintype"
+
+	config_get ant_pktlen "$device" ant_pktlen
+	[ -n "$ant_pktlen" ] && iwpriv "$phy" ant_pktlen "$ant_pktlen"
+
+	config_get ant_numpkts "$device" ant_numpkts
+	[ -n "$ant_numpkts" ] && iwpriv "$phy" ant_numpkts "$ant_numpkts"
+
+	config_get ant_numitr "$device" ant_numitr
+	[ -n "$ant_numitr" ] && iwpriv "$phy" ant_numitr "$ant_numitr"
+
+	config_get ant_train_thres "$device" ant_train_thres
+	[ -n "$ant_train_thres" ] && iwpriv "$phy" train_threshold "$ant_train_thres"
+
+	config_get ant_train_min_thres "$device" ant_train_min_thres
+	[ -n "$ant_train_min_thres" ] && iwpriv "$phy" train_threshold "$ant_train_min_thres"
+
+	config_get ant_traffic_timer "$device" ant_traffic_timer
+	[ -n "$ant_traffic_timer" ] && iwpriv "$phy" traffic_timer "$ant_traffic_timer"
+
+	config_get dcs_enable "$device" dcs_enable
+	[ -n "$dcs_enable" ] && iwpriv "$phy" dcs_enable "$dcs_enable"
+
+	config_get dcs_coch_int "$device" dcs_coch_int
+	[ -n "$dcs_coch_int" ] && iwpriv "$phy" set_dcs_coch_int "$dcs_coch_int"
+
+	config_get dcs_errth "$device" dcs_errth
+	[ -n "$dcs_errth" ] && iwpriv "$phy" set_dcs_errth "$dcs_errth"
+
+	config_get dcs_phyerrth "$device" dcs_phyerrth
+	[ -n "$dcs_phyerrth" ] && iwpriv "$phy" set_dcs_phyerrth "$dcs_phyerrth"
+
+	config_get dcs_usermaxc "$device" dcs_usermaxc
+	[ -n "$dcs_usermaxc" ] && iwpriv "$phy" set_dcs_usermaxc "$dcs_usermaxc"
+
+	config_get dcs_debug "$device" dcs_debug
+	[ -n "$dcs_debug" ] && iwpriv "$phy" set_dcs_debug "$dcs_debug"
+
+	config_get set_ch_144 "$device" set_ch_144
+	[ -n "$set_ch_144" ] && iwpriv "$phy" setCH144 "$set_ch_144"
+
+	config_get eppovrd_ch_144 "$device" eppovrd_ch_144
+	[ -n "$eppovrd_ch_144" ] && iwpriv "$phy" setCH144EppOvrd "$eppovrd_ch_144"
+
+	config_get_bool ani_enable "$device" ani_enable
+	[ -n "$ani_enable" ] && iwpriv "$phy" ani_enable "$ani_enable"
+
+	config_get_bool acs_bkscanen "$device" acs_bkscanen
+	[ -n "$acs_bkscanen" ] && iwpriv "$phy" acs_bkscanen "$acs_bkscanen"
+
+	config_get acs_scanintvl "$device" acs_scanintvl
+	[ -n "$acs_scanintvl" ] && iwpriv "$phy" acs_scanintvl "$acs_scanintvl"
+
+	config_get acs_rssivar "$device" acs_rssivar
+	[ -n "$acs_rssivar" ] && iwpriv "$phy" acs_rssivar "$acs_rssivar"
+
+	config_get acs_chloadvar "$device" acs_chloadvar
+	[ -n "$acs_chloadvar" ] && iwpriv "$phy" acs_chloadvar "$acs_chloadvar"
+
+	config_get acs_lmtobss "$device" acs_lmtobss
+	[ -n "$acs_lmtobss" ] && iwpriv "$phy" acs_lmtobss "$acs_lmtobss"
+
+	config_get acs_ctrlflags "$device" acs_ctrlflags
+	[ -n "$acs_ctrlflags" ] && iwpriv "$phy" acs_ctrlflags "$acs_ctrlflags"
+
+	config_get acs_dbgtrace "$device" acs_dbgtrace
+	[ -n "$acs_dbgtrace" ] && iwpriv "$phy" acs_dbgtrace "$acs_dbgtrace"
+
+	config_get_bool dscp_ovride "$device" dscp_ovride
+	[ -n "$dscp_ovride" ] && iwpriv "$phy" set_dscp_ovride "$dscp_ovride"
+
+	config_get reset_dscp_map "$device" reset_dscp_map
+	[ -n "$reset_dscp_map" ] && iwpriv "$phy" reset_dscp_map "$reset_dscp_map"
+
+	config_get dscp_tid_map "$device" dscp_tid_map
+	[ -n "$dscp_tid_map" ] && iwpriv "$phy" set_dscp_tid_map $dscp_tid_map
+
+        #Default enable IGMP overide & TID=6
+	iwpriv "$phy" sIgmpDscpOvrid 1
+	iwpriv "$phy" sIgmpDscpTidMap 6
+
+	config_get_bool igmp_dscp_ovride "$device" igmp_dscp_ovride
+	[ -n "$igmp_dscp_ovride" ] && iwpriv "$phy" sIgmpDscpOvrid "$igmp_dscp_ovride"
+
+	config_get igmp_dscp_tid_map "$device" igmp_dscp_tid_map
+	[ -n "$igmp_dscp_tid_map" ] && iwpriv "$phy" sIgmpDscpTidMap "$igmp_dscp_tid_map"
+
+	config_get_bool hmmc_dscp_ovride "$device" hmmc_dscp_ovride
+	[ -n "$hmmc_dscp_ovride" ] && iwpriv "$phy" sHmmcDscpOvrid "$hmmc_dscp_ovride"
+
+	config_get hmmc_dscp_tid_map "$device" hmmc_dscp_tid_map
+	[ -n "$hmmc_dscp_tid_map" ] && iwpriv "$phy" sHmmcDscpTidMap "$hmmc_dscp_tid_map"
+
+	config_get_bool blk_report_fld "$device" blk_report_fld
+	[ -n "$blk_report_fld" ] && iwpriv "$phy" setBlkReportFld "$blk_report_fld"
+
+	config_get_bool drop_sta_query "$device" drop_sta_query
+	[ -n "$drop_sta_query" ] && iwpriv "$phy" setDropSTAQuery "$drop_sta_query"
+
+	config_get_bool burst "$device" burst
+	[ -n "$burst" ] && iwpriv "$phy" burst "$burst"
+
+	config_get burst_dur "$device" burst_dur
+	[ -n "$burst_dur" ] && iwpriv "$phy" burst_dur "$burst_dur"
+
+	config_get TXPowLim2G "$device" TXPowLim2G
+	[ -n "$TXPowLim2G" ] && iwpriv "$phy" TXPowLim2G "$TXPowLim2G"
+
+	config_get TXPowLim5G "$device" TXPowLim5G
+	[ -n "$TXPowLim5G" ] && iwpriv "$phy" TXPowLim5G "$TXPowLim5G"
+
+	config_get_bool enable_ol_stats "$device" enable_ol_stats
+	[ -n "$enable_ol_stats" ] && iwpriv "$phy" enable_ol_stats "$enable_ol_stats"
+
+	config_get emiwar80p80 "$device" emiwar80p80
+	[ -n "$emiwar80p80" ] && iwpriv "$phy" emiwar80p80 "$emiwar80p80"
+
+	config_get_bool rst_tso_stats "$device" rst_tso_stats
+	[ -n "$rst_tso_stats" ] && iwpriv "$phy" rst_tso_stats "$rst_tso_stats"
+
+	config_get_bool rst_lro_stats "$device" rst_lro_stats
+	[ -n "$rst_lro_stats" ] && iwpriv "$phy" rst_lro_stats "$rst_lro_stats"
+
+	config_get_bool rst_sg_stats "$device" rst_sg_stats
+	[ -n "$rst_sg_stats" ] && iwpriv "$phy" rst_sg_stats "$rst_sg_stats"
+
+	config_get_bool set_fw_recovery "$device" set_fw_recovery
+	[ -n "$set_fw_recovery" ] && iwpriv "$phy" set_fw_recovery "$set_fw_recovery"
+
+	config_get_bool allowpromisc "$device" allowpromisc
+	[ -n "$allowpromisc" ] && iwpriv "$phy" allowpromisc "$allowpromisc"
+
+	config_get set_sa_param "$device" set_sa_param
+	[ -n "$set_sa_param" ] && iwpriv "$phy" set_sa_param $set_sa_param
+
+	config_get_bool aldstats "$device" aldstats
+	[ -n "$aldstats" ] && iwpriv "$phy" aldstats "$aldstats"
+
+	config_get macaddr "$device" macaddr
+	[ -n "$macaddr" ] && iwpriv "$phy" setHwaddr "$macaddr"
+
+	config_get max_radio_sta "$device" max_radio_sta
+	[ -n "$max_radio_sta" ] && iwpriv "$phy" max_radio_sta "$max_radio_sta"
+
+	config_get promisc "$device" promisc
+	[ -n "$promisc" ] && iwpriv "$phy" promisc $promisc
+
+	config_get mode0 "$device" mode0
+	[ -n "$mode0" ] && iwpriv "$phy" fc_buf_min 2501
+
+	config_get mode1 "$device" mode1
+	[ -n "$mode1" ] && iwpriv "$phy" fc_buf_min 0
+
+	handle_aggr_burst() {
+		local value="$1"
+		[ -n "$value" ] && iwpriv "$phy" aggr_burst $value
+	}
+
+	config_list_foreach "$device" aggr_burst handle_aggr_burst
+
+	config_get_bool block_interbss "$device" block_interbss
+	[ -n "$block_interbss" ] && iwpriv "$phy" block_interbss "$block_interbss"
+
+	config_get set_pmf "$device" set_pmf
+	[ -n "$set_pmf" ] && iwpriv "$phy" set_pmf "${set_pmf}"
+
+	config_get txbf_snd_int "$device" txbf_snd_int 100
+	[ -n "$txbf_snd_int" ] && iwpriv "$phy" txbf_snd_int "$txbf_snd_int"
+
+	config_get mcast_echo "$device" mcast_echo
+	[ -n "$mcast_echo" ] && iwpriv "$phy" mcast_echo "${mcast_echo}"
+
+	config_get obss_rssi_th "$device" obss_rssi_th 35
+	[ -n "$obss_rssi_th" ] && iwpriv "$phy" obss_rssi_th "${obss_rssi_th}"
+
+	config_get obss_rx_rssi_th "$device" obss_rx_rssi_th 35
+	[ -n "$obss_rx_rssi_th" ] && iwpriv "$phy" obss_rxrssi_th "${obss_rx_rssi_th}"
+
+        config_get acs_txpwr_opt "$device" acs_txpwr_opt
+        [ -n "$acs_txpwr_opt" ] && iwpriv "$phy" acs_tcpwr_opt "${acs_txpwr_opt}"
+
+	config_get obss_long_slot "$device" obss_long_slot
+	[ -n "$obss_long_slot" ] && iwpriv "$phy" obss_long_slot "${obss_long_slot}"
+
+	config_get staDFSEn "$device" staDFSEn
+	[ -n "$staDFSEn" ] && iwpriv "$phy" staDFSEn "${staDFSEn}"
+
+        config_get dbdc_enable "$device" dbdc_enable
+        [ -n "$dbdc_enable" ] && iwpriv "$phy" dbdc_enable "${dbdc_enable}"
+
+        config_get client_mcast "$device" client_mcast
+        [ -n "$client_mcast" ] && iwpriv "$phy" client_mcast "${client_mcast}"
+
+        config_get pas_scanen "$device" pas_scanen
+        [ -n "$pas_scanen" ] && iwpriv "$phy" pas_scanen "${pas_scanen}"
+
+        config_get delay_stavapup "$device" delay_stavapup
+        [ -n "$delay_stavapup" ] && iwpriv "$phy" delay_stavapup "${delay_stavapup}"
+
+        config_get tid_override_queue_map "$device" tid_override_queue_map
+        [ -n "$tid_override_queue_map" ] && iwpriv "$phy" queue_map "${tid_override_queue_map}"
+
+        config_get channel_block_mode "$device" channel_block_mode
+        [ -n "$channel_block_mode" ] && iwpriv "$phy" acs_bmode "${channel_block_mode}"
+
+        config_get no_vlan "$device" no_vlan
+        [ -n "$no_vlan" ] && iwpriv "$phy" no_vlan "${no_vlan}"
+
+        config_get btcoex_wl_pri "$device" btcoex_wl_pri
+        [ -n "$btcoex_wl_pri" ] && iwpriv "$phy" btcoex_wl_pri "${btcoex_wl_pri}"
+
+        config_get btcoex_enable "$device" btcoex_enable
+        [ -n "$btcoex_enable" ] && iwpriv "$phy" btcoex_enable "${btcoex_enable}"
+
+        config_get btcoex_dc "$device" btcoex_dc
+        [ -n "$btcoex_dc" ] && iwpriv "$phy" btcoex_dc "${btcoex_dc}"
+
+        config_get ul_hyst "$device" ul_hyst
+        [ -n "$ul_hyst" ] && iwpriv "$phy" ul_hyst "${ul_hyst}"
+
+        config_get discon_time qcawifi discon_time 10
+        [ -n "$discon_time" ] && iwpriv "$phy" discon_time "${discon_time}"
+
+        config_get reconfig_time qcawifi reconfig_time 60
+        [ -n "$reconfig_time" ] && iwpriv "$phy" reconfig_time "${reconfig_time}"
+
+        config_get alwaysprimary qcawifi alwaysprimary
+        [ -n "$alwaysprimary" ] && iwpriv "$phy" alwaysprimary "${alwaysprimary}"
+
+	if [ -f /lib/wifi/wifi_nss_olcfg ]; then
+		nss_wifi_olcfg="$(cat /lib/wifi/wifi_nss_olcfg)"
+		if [ $nss_wifi_olcfg != 0 ]; then
+			config_get hwmode "$device" hwmode auto
+			case "$hwmode" in
+				*ng)
+					iwpriv "$phy" fc_buf0_max 5120
+					iwpriv "$phy" fc_buf1_max 8192
+					iwpriv "$phy" fc_buf2_max 12288
+					iwpriv "$phy" fc_buf3_max 16384
+					;;
+				*ac)
+					iwpriv "$phy" fc_buf0_max 8192
+					iwpriv "$phy" fc_buf1_max 16384
+					iwpriv "$phy" fc_buf2_max 24576
+					iwpriv "$phy" fc_buf3_max 32768
+					;;
+				*)
+					iwpriv "$phy" fc_buf0_max 5120
+					iwpriv "$phy" fc_buf1_max 8192
+					iwpriv "$phy" fc_buf2_max 12288
+					iwpriv "$phy" fc_buf3_max 16384
+					;;
+			esac
+		fi
+	fi
+
+	config_tx_fc_buf "$phy"
+
+	# Enable RPS and disable qrfs, if rxchainmask is 15 for some platforms
+	disable_qrfs_wifi=0
+	enable_rps_wifi=0
+	if [ $(iwpriv "$phy" get_rxchainmask | awk -F ':' '{ print $2 }') -gt 3 ]; then
+		disable_qrfs_wifi=1
+		enable_rps_wifi=1
+	fi
+
+	for vif in $vifs; do
+		local start_hostapd=
+		config_get mode "$vif" mode
+		config_get enc "$vif" encryption "none"
+
+		case "$enc" in
+			mixed*|psk*|wpa*|8021x)
+				start_hostapd=1
+				config_get key "$vif" key
+			;;
+		esac
+
+		case "$mode" in
+			ap|wrap)
+				if [ -n "$start_hostapd" ] && [ $count -lt 2 ] && eval "type hostapd_config_multi_cred" 2>/dev/null >/dev/null; then
+					hostapd_config_multi_cred "$vif"
+					count=$(($count + 1))
+				fi
+	  			;;
+                esac
+	done
+
+	local first_vif_on_radio=1
+	for vif in $vifs; do
+		local start_hostapd= vif_txpower= nosbeacon= wlanaddr=""
+		local wlanmode
+
+		delos_transfer_radio_config "$device" "$phy" "$vif"
+		delos_translate_vif_config "$vif"
+
+		config_get ifname "$vif" ifname
+		config_get enc "$vif" encryption "none"
+		config_get eap_type "$vif" eap_type
+		config_get mode "$vif" mode
+		config_get_bool map "$vif" map 0
+		config_get enable_macreq "$device" enable_macreq 0
+		wlanmode=$mode
+		vapid=0
+
+		if [ -f /sys/class/net/$device/ciphercaps ]
+		then
+			case "$enc" in
+				*gcmp*)
+					echo "enc:GCMP" >&2
+					cat /sys/class/net/$device/ciphercaps | grep -i "gcmp"
+					if [ $? -ne 0 ]
+					then
+						echo "enc:GCMP is Not Supported on Radio" >&2
+						continue
+					fi
+					;;
+				*ccmp-256*)
+					echo "enc:CCMP-256" >&2
+					cat /sys/class/net/$device/ciphercaps | grep -i "ccmp-256"
+					if [ $? -ne 0 ]
+					then
+						echo "enc:CCMP-256 is Not Supported on Radio" >&2
+						continue
+					fi
+					;;
+			esac
+		fi
+
+		[ "$wlanmode" = "ap_monitor" ] && wlanmode="specialvap"
+		[ "$wlanmode" = "ap_smart_monitor" ] && wlanmode="smart_monitor"
+		[ "$wlanmode" = "ap_lp_iot" ] && wlanmode="lp_iot_mode"
+
+		case "$mode" in
+			sta)
+				config_get_bool nosbeacon "$device" nosbeacon
+				config_get qwrap_enable "$device" qwrap_enable 0
+				if [ "$map" -gt 0 ]; then
+					if [ "$enable_macreq" -gt 0 ]; then
+						vapid=15
+					fi
+				fi
+				[ $qwrap_enable -gt 0 ] && wlanaddr="00:00:00:00:00:00"
+				;;
+			adhoc)
+				config_get_bool nosbeacon "$vif" sw_merge 1
+				;;
+		esac
+
+		[ "$nosbeacon" = 1 ] || nosbeacon=""
+		if [ -z "$recover" ] || [ "$recover" -eq "0" ]; then
+			if [ "$map" -gt 0 ] && [ "$mode" = "sta" ] && [ "$enable_macreq" -gt 0 ]; then
+				[ -n "${DEBUG}" ] && echo wlanconfig "$ifname" create wlandev "$phy" wlanmode "$wlanmode" ${wlanaddr:+wlanaddr "$wlanaddr"} ${nosbeacon:+nosbeacon} ${vapid:+vapid "$vapid"} >>$DEBUG_FILE
+				ifname=$(/usr/sbin/wlanconfig "$ifname" create wlandev "$phy" wlanmode "$wlanmode" ${wlanaddr:+wlanaddr "$wlanaddr"} ${nosbeacon:+nosbeacon} ${vapid:+vapid "$vapid"})
+			else
+				[ -n "${DEBUG}" ] && echo wlanconfig "$ifname" create wlandev "$phy" wlanmode "$wlanmode" ${wlanaddr:+wlanaddr "$wlanaddr"} ${nosbeacon:+nosbeacon} >>$DEBUG_FILE
+				ifname=$(/usr/sbin/wlanconfig "$ifname" create wlandev "$phy" wlanmode "$wlanmode" ${wlanaddr:+wlanaddr "$wlanaddr"} ${nosbeacon:+nosbeacon})
+			fi
+			[ $? -ne 0 ] && {
+				echo "enable_qcawifi($device): Failed to set up $mode vif $ifname" >&2
+				continue
+			}
+			config_set "$vif" ifname "$ifname"
+		fi
+
+		config_get hwmode "$device" hwmode auto
+		config_get htmode "$device" htmode auto
+
+		pureg=0
+		case "$hwmode:$htmode" in
+		# The parsing stops at the first match so we need to make sure
+		# these are in the right orders (most generic at the end)
+			*ng:HT20) hwmode=11NGHT20;;
+			*ng:HT40-) hwmode=11NGHT40MINUS;;
+			*ng:HT40+) hwmode=11NGHT40PLUS;;
+			*ng:HT40) hwmode=11NGHT40;;
+			*ng:*) hwmode=11NGHT20;;
+			*na:HT20) hwmode=11NAHT20;;
+			*na:HT40-) hwmode=11NAHT40MINUS;;
+			*na:HT40+) hwmode=11NAHT40PLUS;;
+			*na:HT40) hwmode=11NAHT40;;
+			*na:*) hwmode=11NAHT40;;
+			*ac:HT20) hwmode=11ACVHT20;;
+			*ac:HT40+) hwmode=11ACVHT40PLUS;;
+			*ac:HT40-) hwmode=11ACVHT40MINUS;;
+			*ac:HT40) hwmode=11ACVHT40;;
+			*ac:HT80) hwmode=11ACVHT80;;
+			*ac:HT160) hwmode=11ACVHT160;;
+			*ac:HT80_80) hwmode=11ACVHT80_80;;
+                        *ac:*) hwmode=11ACVHT80
+			       if [ -f /sys/class/net/$device/5g_maxchwidth ]; then
+			           maxchwidth="$(cat /sys/class/net/$device/5g_maxchwidth)"
+				   [ -n "$maxchwidth" ] && hwmode=11ACVHT$maxchwidth
+			       fi
+                               if [ "$mode" == "sta" ]; then
+                                   cat /sys/class/net/$device/hwmodes | grep  "11AC_VHT80_80"
+				   if [ $? -eq 0 ]; then
+			               hwmode=11ACVHT80_80
+				   fi
+			       fi;;
+			*b:*) hwmode=11B;;
+			*bg:*) hwmode=11G;;
+			*g:*) hwmode=11G; pureg=1;;
+			*a:*) hwmode=11A;;
+			*) hwmode=AUTO;;
+		esac
+
+		config_get_bool map "$vif" map 0
+		[ $map -gt 0 ] && iwpriv "$ifname" map "$map"
+
+		config_get MapBSSType "$vif" MapBSSType 0
+		[ $MapBSSType -gt 0 ] && iwpriv "$ifname" MapBSSType "$MapBSSType"
+
+		iwpriv "$ifname" mode "$hwmode"
+		[ $pureg -gt 0 ] && iwpriv "$ifname" pureg "$pureg"
+
+		config_get cfreq2 "$vif" cfreq2
+		[ -n "$cfreq2" -a "$htmode" = "HT80_80" ] && iwpriv "$ifname" cfreq2 "$cfreq2"
+
+		config_get puren "$vif" puren
+		[ -n "$puren" ] && iwpriv "$ifname" puren "$puren"
+
+		iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null
+
+		config_get_bool hidden "$vif" hidden 0
+		iwpriv "$ifname" hide_ssid "$hidden"
+
+                config_get_bool dynamicbeacon "$vif" dynamicbeacon 0
+                [ $hidden = 1 ] && iwpriv "$ifname" dynamicbeacon "$dynamicbeacon"
+
+                config_get db_rssi_thr "$vif" db_rssi_thr
+                [ -n "$db_rssi_thr" ] && iwpriv "$ifname" db_rssi_thr "$db_rssi_thr"
+
+                config_get db_timeout "$vif" db_timeout
+                [ -n "$db_timeout" ] && iwpriv "$ifname" db_timeout "$db_timeout"
+
+                config_get nrshareflag "$vif" nrshareflag
+                [ -n "$nrshareflag" ] && iwpriv "$ifname" nrshareflag "$nrshareflag"
+
+		config_get_bool shortgi "$vif" shortgi 1
+		[ -n "$shortgi" ] && iwpriv "$ifname" shortgi "${shortgi}"
+
+		config_get_bool disablecoext "$vif" disablecoext
+		[ -n "$disablecoext" ] && iwpriv "$ifname" disablecoext "${disablecoext}"
+
+		config_get chwidth "$vif" chwidth
+		[ -n "$chwidth" ] && iwpriv "$ifname" chwidth "${chwidth}"
+
+		config_get wds "$vif" wds
+		case "$wds" in
+			1|on|enabled) wds=1;;
+			*) wds=0;;
+		esac
+		iwpriv "$ifname" wds "$wds" >/dev/null 2>&1
+
+		config_get ext_nss "$vif" ext_nss
+		case "$ext_nss" in
+			1|on|enabled) iwpriv "$ifname" ext_nss 1 >/dev/null 2>&1;;
+			0|off|disabled) iwpriv "$ifname" ext_nss 0 >/dev/null 2>&1;;
+			*) ;;
+		esac
+
+		config_get ext_nss_sup "$vif" ext_nss_sup
+		case "$ext_nss_sup" in
+			1|on|enabled) iwpriv "$ifname" ext_nss_sup 1 >/dev/null 2>&1;;
+			0|off|disabled) iwpriv "$ifname" ext_nss_sup 0 >/dev/null 2>&1;;
+			*) ;;
+		esac
+
+		config_get  backhaul "$vif" backhaul 0
+                iwpriv "$ifname" backhaul "$backhaul" >/dev/null 2>&1
+
+		config_get TxBFCTL "$vif" TxBFCTL
+		[ -n "$TxBFCTL" ] && iwpriv "$ifname" TxBFCTL "$TxBFCTL"
+
+		config_get bintval "$vif" bintval
+		[ -n "$bintval" ] && iwpriv "$ifname" bintval "$bintval"
+
+		config_get_bool countryie "$vif" countryie
+		[ -n "$countryie" ] && iwpriv "$ifname" countryie "$countryie"
+
+                config_get own_ie_override "$vif" own_ie_override
+                [ -n "$own_ie_override" ] && iwpriv "$ifname" rsn_override 1
+
+		config_get_bool sae "$vif" sae 0
+		config_get_bool owe "$vif" owe 0
+		config_get suite_b "$vif" suite_b
+		config_get_bool dpp "$vif" dpp 0
+
+		if [ -n "$suite_b" ] && [ "$suite_b" -ne 192 ]
+		then
+			echo "$suite_b bit security level is not supported for SUITE-B" > /dev/console
+			destroy_vap $ifname
+			continue
+		fi
+
+		if [ "${dpp}" -eq 1 ]
+		then
+			config_get dpp_key "$vif" dpp_key 0
+			if [ "${dpp_key}" -eq 0 ]
+			then
+				echo "DPP Key NULL" > /dev/console
+				destroy_vap $ifname
+				continue
+			fi
+		fi
+
+		case "$enc" in
+			none)
+				# We start hostapd in open mode also
+				start_hostapd=1
+			;;
+			wep*)
+				if [ $sae -eq 1 ] || [ $owe -eq 1 ]
+				then
+					echo "With SAE/OWE enabled, wep enc is not supported" > /dev/console
+					destroy_vap $ifname
+					continue
+				fi
+				case "$enc" in
+					*mixed*)  iwpriv "$ifname" authmode 4;;
+					*shared*) iwpriv "$ifname" authmode 2;;
+					*)        iwpriv "$ifname" authmode 1;;
+				esac
+				for idx in 1 2 3 4; do
+					config_get key "$vif" "key${idx}"
+					[ -n "$key" ] && iwconfig "$ifname"  enc "[$idx]" "$key"
+				done
+				config_get key "$vif" key
+				key="${key:-1}"
+				case "$key" in
+					[1234]) iwconfig "$ifname" enc "[$key]";;
+					*) iwconfig "$ifname" enc "$key";;
+				esac
+			;;
+			wpa*|8021x)
+				start_hostapd=1
+			;;
+			mixed*|psk*)
+				start_hostapd=1
+				config_get key "$vif" key
+				if [ -z $key ]
+				then
+					echo "Key is NULL" > /dev/console
+					destroy_vap $ifname
+					continue
+				fi
+				case "$enc" in
+					*tkip*)
+						if [ $sae -eq 1 ] || [ $owe -eq 1 ]
+						then
+							echo "With SAE/OWE enabled, tkip enc is not supported" > /dev/console
+							destroy_vap $ifname
+							continue
+						fi
+					;;
+				esac
+			;;
+			tkip*)
+				if [ $sae -eq 1 ] || [ $owe -eq 1 ]
+				then
+					echo "With SAE/OWE enabled, tkip enc is not supported" > /dev/console
+					destroy_vap $ifname
+					continue
+				fi
+			;;
+			wapi*)
+				start_wapid=1
+				config_get key "$vif" key
+			;;
+			#Needed ccmp*|gcmp* check for SAE OWE auth types
+			ccmp*|gcmp*)
+				flag=0
+				start_hostapd=1
+				config_get key "$vif" key
+				config_get sae_password "$vif" sae_password
+				if [ $sae -eq 1 ]
+				then
+					if [ -z "$sae_password" ] && [ -z "$key" ]
+					then
+						echo "key/sae_password are NULL" > /dev/console
+						destroy_vap $ifname
+						continue
+					fi
+				fi
+				if [ $owe -eq 1 ]
+				then
+					check_owe_groups() {
+						local owe_groups=$(echo $1 | tr "," " ")
+						for owe_group_value in $owe_groups
+						do
+							if [ $owe_group_value -ne 19 ] && [ $owe_group_value -ne 20 ] && [ $owe_group_value -ne 21 ]
+							then
+								echo "Invalid owe_group: $owe_group_value" > /dev/console
+								destroy_vap $ifname
+								flag=1
+								break
+							fi
+						done
+					}
+					config_list_foreach "$vif" owe_groups check_owe_groups
+					if [ $flag -eq 1 ]
+					then
+						continue
+					fi
+				fi
+			;;
+		esac
+
+		case "$mode" in
+			sta|adhoc)
+				config_get addr "$vif" bssid
+				[ -z "$addr" ] || {
+					iwconfig "$ifname" ap "$addr"
+				}
+			;;
+		esac
+
+		config_get_bool uapsd "$vif" uapsd 1
+		iwpriv "$ifname" uapsd "$uapsd"
+
+		config_get mcast_rate "$vif" mcast_rate
+		[ -n "$mcast_rate" ] && iwpriv "$ifname" mcast_rate "${mcast_rate%%.*}"
+
+		config_get powersave "$vif" powersave
+		[ -n "$powersave" ] && iwpriv "$ifname" powersave "${powersave}"
+
+		config_get_bool ant_ps_on "$vif" ant_ps_on
+		[ -n "$ant_ps_on" ] && iwpriv "$ifname" ant_ps_on "${ant_ps_on}"
+
+		config_get ps_timeout "$vif" ps_timeout
+		[ -n "$ps_timeout" ] && iwpriv "$ifname" ps_timeout "${ps_timeout}"
+
+		config_get mcastenhance "$vif" mcastenhance
+		[ -n "$mcastenhance" ] && iwpriv "$ifname" mcastenhance "${mcastenhance}"
+
+		config_get disable11nmcs "$vif" disable11nmcs
+		[ -n "$disable11nmcs" ] && iwpriv "$ifname" disable11nmcs "${disable11nmcs}"
+
+		config_get conf_11acmcs "$vif" conf_11acmcs
+		[ -n "$conf_11acmcs" ] && iwpriv "$ifname" conf_11acmcs "${conf_11acmcs}"
+
+		config_get metimer "$vif" metimer
+		[ -n "$metimer" ] && iwpriv "$ifname" metimer "${metimer}"
+
+		config_get metimeout "$vif" metimeout
+		[ -n "$metimeout" ] && iwpriv "$ifname" metimeout "${metimeout}"
+
+		config_get_bool medropmcast "$vif" medropmcast
+		[ -n "$medropmcast" ] && iwpriv "$ifname" medropmcast "${medropmcast}"
+
+		config_get me_adddeny "$vif" me_adddeny
+		[ -n "$me_adddeny" ] && iwpriv "$ifname" me_adddeny ${me_adddeny}
+
+		#support independent repeater mode
+		config_get vap_ind "$vif" vap_ind
+		[ -n "$vap_ind" ] && iwpriv "$ifname" vap_ind "${vap_ind}"
+
+		#support extender ap & STA
+		config_get extap "$vif" extap
+		[ -n "$extap" ] && iwpriv "$ifname" extap "${extap}"
+
+		config_get scanband "$vif" scanband
+		[ -n "$scanband" ] && iwpriv "$ifname" scanband "${scanband}"
+
+		config_get periodicScan "$vif" periodicScan
+		[ -n "$periodicScan" ] && iwpriv "$ifname" periodicScan "${periodicScan}"
+
+		config_get frag "$vif" frag
+		[ -n "$frag" ] && iwconfig "$ifname" frag "${frag%%.*}"
+
+		config_get rts "$vif" rts
+		[ -n "$rts" ] && iwconfig "$ifname" rts "${rts%%.*}"
+
+		config_get cwmin "$vif" cwmin
+		[ -n "$cwmin" ] && iwpriv "$ifname" cwmin ${cwmin}
+
+		config_get cwmax "$vif" cwmax
+		[ -n "$cwmax" ] && iwpriv "$ifname" cwmax ${cwmax}
+
+		config_get aifs "$vif" aifs
+		[ -n "$aifs" ] && iwpriv "$ifname" aifs ${aifs}
+
+		config_get txoplimit "$vif" txoplimit
+		[ -n "$txoplimit" ] && iwpriv "$ifname" txoplimit ${txoplimit}
+
+		config_get noackpolicy "$vif" noackpolicy
+		[ -n "$noackpolicy" ] && iwpriv "$ifname" noackpolicy ${noackpolicy}
+
+		config_get_bool wmm "$vif" wmm
+		[ -n "$wmm" ] && iwpriv "$ifname" wmm "$wmm"
+
+		config_get_bool doth "$vif" doth
+		[ -n "$doth" ] && iwpriv "$ifname" doth "$doth"
+
+		config_get doth_chanswitch "$vif" doth_chanswitch
+		[ -n "$doth_chanswitch" ] && iwpriv "$ifname" doth_chanswitch ${doth_chanswitch}
+
+		config_get quiet "$vif" quiet
+		[ -n "$quiet" ] && iwpriv "$ifname" quiet "$quiet"
+
+		config_get mfptest "$vif" mfptest
+		[ -n "$mfptest" ] && iwpriv "$ifname" mfptest "$mfptest"
+
+		config_get dtim_period "$vif" dtim_period
+		[ -n "$dtim_period" ] && iwpriv "$ifname" dtim_period "$dtim_period"
+
+		config_get noedgech "$vif" noedgech
+		[ -n "$noedgech" ] && iwpriv "$ifname" noedgech "$noedgech"
+
+		config_get ps_on_time "$vif" ps_on_time
+		[ -n "$ps_on_time" ] && iwpriv "$ifname" ps_on_time "$ps_on_time"
+
+		config_get inact "$vif" inact
+		[ -n "$inact" ] && iwpriv "$ifname" inact "$inact"
+
+		config_get wnm "$vif" wnm
+		[ -n "$wnm" ] && iwpriv "$ifname" wnm "$wnm"
+
+		config_get mbo "$vif" mbo
+		[ -n "$mbo" ] && iwpriv "$ifname" mbo "$mbo"
+
+		config_get enable_fils  "$vif" ieee80211ai
+		config_get fils_discovery_period  "$vif" fils_fd_period 0
+		[ -n "$enable_fils" ] && iwpriv "$ifname" enable_fils "$enable_fils" "$fils_discovery_period"
+
+		config_get bpr_enable  "$vif" bpr_enable
+		[ -n "$bpr_enable" ] && iwpriv "$ifname" set_bpr_enable "$bpr_enable"
+
+		config_get oce "$vif" oce
+		[ -n "$oce" ] && iwpriv "$ifname" oce "$oce"
+		[ "${oce:-0}" -gt 0 ] && {
+			case "$hwmode" in
+				11B*|11G*|11NG*)
+					iwpriv "$ifname" set_bcn_rate 5500
+					iwpriv "$ifname" prb_rate 5500
+					;;
+				*)
+					;;
+			esac
+
+			[ -z "$enable_fils" ] && iwpriv "$ifname" enable_fils 1 20
+		}
+
+		config_get ampdu "$vif" ampdu
+		[ -n "$ampdu" ] && iwpriv "$ifname" ampdu "$ampdu"
+
+		config_get amsdu "$vif" amsdu
+		[ -n "$amsdu" ] && iwpriv "$ifname" amsdu "$amsdu"
+
+		config_get maxampdu "$vif" maxampdu
+		[ -n "$maxampdu" ] && iwpriv "$ifname" maxampdu "$maxampdu"
+
+		config_get vhtmaxampdu "$vif" vhtmaxampdu
+		[ -n "$vhtmaxampdu" ] && iwpriv "$ifname" vhtmaxampdu "$vhtmaxampdu"
+
+		config_get setaddbaoper "$vif" setaddbaoper
+		[ -n "$setaddbaoper" ] && iwpriv "$ifname" setaddbaoper "$setaddbaoper"
+
+		config_get addbaresp "$vif" addbaresp
+		[ -n "$addbaresp" ] && iwpriv "$ifname" $addbaresp
+
+		config_get addba "$vif" addba
+		[ -n "$addba" ] && iwpriv "$ifname" addba $addba
+
+		config_get delba "$vif" delba
+		[ -n "$delba" ] && iwpriv "$ifname" delba $delba
+
+		config_get_bool stafwd "$vif" stafwd 0
+		[ -n "$stafwd" ] && iwpriv "$ifname" stafwd "$stafwd"
+
+		config_get maclist "$vif" maclist
+		[ -n "$maclist" ] && {
+			# flush MAC list
+			iwpriv "$ifname" maccmd 3
+			for mac in $maclist; do
+				iwpriv "$ifname" addmac "$mac"
+			done
+		}
+
+		config_get macfilter "$vif" macfilter
+		case "$macfilter" in
+			allow)
+				iwpriv "$ifname" maccmd 1
+			;;
+			deny)
+				iwpriv "$ifname" maccmd 2
+			;;
+			*)
+				# default deny policy if mac list exists
+				[ -n "$maclist" ] && iwpriv "$ifname" maccmd 2
+			;;
+		esac
+
+		config_get nss "$vif" nss
+		[ -n "$nss" ] && iwpriv "$ifname" nss "$nss"
+
+		config_get vht_mcsmap "$vif" vht_mcsmap
+		[ -n "$vht_mcsmap" ] && iwpriv "$ifname" vht_mcsmap "$vht_mcsmap"
+
+		config_get chwidth "$vif" chwidth
+		[ -n "$chwidth" ] && iwpriv "$ifname" chwidth "$chwidth"
+
+		config_get chbwmode "$vif" chbwmode
+		[ -n "$chbwmode" ] && iwpriv "$ifname" chbwmode "$chbwmode"
+
+		config_get ldpc "$vif" ldpc
+		[ -n "$ldpc" ] && iwpriv "$ifname" ldpc "$ldpc"
+
+		config_get rx_stbc "$vif" rx_stbc
+		[ -n "$rx_stbc" ] && iwpriv "$ifname" rx_stbc "$rx_stbc"
+
+		config_get tx_stbc "$vif" tx_stbc
+		[ -n "$tx_stbc" ] && iwpriv "$ifname" tx_stbc "$tx_stbc"
+
+		config_get cca_thresh "$vif" cca_thresh
+		[ -n "$cca_thresh" ] && iwpriv "$ifname" cca_thresh "$cca_thresh"
+
+		config_get set11NRetries "$vif" set11NRetries
+		[ -n "$set11NRetries" ] && iwpriv "$ifname" set11NRetries "$set11NRetries"
+
+		config_get chanbw "$vif" chanbw
+		[ -n "$chanbw" ] && iwpriv "$ifname" chanbw "$chanbw"
+
+		config_get maxsta "$vif" maxsta
+		[ -n "$maxsta" ] && iwpriv "$ifname" maxsta "$maxsta"
+
+		config_get sko_max_xretries "$vif" sko_max_xretries
+		[ -n "$sko_max_xretries" ] && iwpriv "$ifname" sko "$sko_max_xretries"
+
+		config_get extprotmode "$vif" extprotmode
+		[ -n "$extprotmode" ] && iwpriv "$ifname" extprotmode "$extprotmode"
+
+		config_get extprotspac "$vif" extprotspac
+		[ -n "$extprotspac" ] && iwpriv "$ifname" extprotspac "$extprotspac"
+
+		config_get_bool cwmenable "$vif" cwmenable
+		[ -n "$cwmenable" ] && iwpriv "$ifname" cwmenable "$cwmenable"
+
+		config_get_bool protmode "$vif" protmode
+		[ -n "$protmode" ] && iwpriv "$ifname" protmode "$protmode"
+
+		config_get enablertscts "$vif" enablertscts
+		[ -n "$enablertscts" ] && iwpriv "$ifname" enablertscts "$enablertscts"
+
+		config_get txcorrection "$vif" txcorrection
+		[ -n "$txcorrection" ] && iwpriv "$ifname" txcorrection "$txcorrection"
+
+		config_get rxcorrection "$vif" rxcorrection
+		[ -n "$rxcorrection" ] && iwpriv "$ifname" rxcorrection "$rxcorrection"
+
+                config_get vsp_enable "$vif" vsp_enable
+                [ -n "$vsp_enable" ] && iwpriv "$ifname" vsp_enable "$vsp_enable"
+
+		config_get ssid "$vif" ssid
+                [ -n "$ssid" ] && {
+                        iwconfig "$ifname" essid on
+                        iwconfig "$ifname" essid ${ssid:+-- }"$ssid"
+                }
+
+		config_get txqueuelen "$vif" txqueuelen
+		[ -n "$txqueuelen" ] && ifconfig "$ifname" txqueuelen "$txqueuelen"
+
+                net_cfg="$(find_net_config "$vif")"
+
+                config_get mtu $net_cfg mtu
+
+                [ -n "$mtu" ] && {
+                        config_set "$vif" mtu $mtu
+                        ifconfig "$ifname" mtu $mtu
+		}
+
+		config_get tdls "$vif" tdls
+		[ -n "$tdls" ] && iwpriv "$ifname" tdls "$tdls"
+
+		config_get set_tdls_rmac "$vif" set_tdls_rmac
+		[ -n "$set_tdls_rmac" ] && iwpriv "$ifname" set_tdls_rmac "$set_tdls_rmac"
+
+		config_get tdls_qosnull "$vif" tdls_qosnull
+		[ -n "$tdls_qosnull" ] && iwpriv "$ifname" tdls_qosnull "$tdls_qosnull"
+
+		config_get tdls_uapsd "$vif" tdls_uapsd
+		[ -n "$tdls_uapsd" ] && iwpriv "$ifname" tdls_uapsd "$tdls_uapsd"
+
+		config_get tdls_set_rcpi "$vif" tdls_set_rcpi
+		[ -n "$tdls_set_rcpi" ] && iwpriv "$ifname" set_rcpi "$tdls_set_rcpi"
+
+		config_get tdls_set_rcpi_hi "$vif" tdls_set_rcpi_hi
+		[ -n "$tdls_set_rcpi_hi" ] && iwpriv "$ifname" set_rcpihi "$tdls_set_rcpi_hi"
+
+		config_get tdls_set_rcpi_lo "$vif" tdls_set_rcpi_lo
+		[ -n "$tdls_set_rcpi_lo" ] && iwpriv "$ifname" set_rcpilo "$tdls_set_rcpi_lo"
+
+		config_get tdls_set_rcpi_margin "$vif" tdls_set_rcpi_margin
+		[ -n "$tdls_set_rcpi_margin" ] && iwpriv "$ifname" set_rcpimargin "$tdls_set_rcpi_margin"
+
+		config_get tdls_dtoken "$vif" tdls_dtoken
+		[ -n "$tdls_dtoken" ] && iwpriv "$ifname" tdls_dtoken "$tdls_dtoken"
+
+		config_get do_tdls_dc_req "$vif" do_tdls_dc_req
+		[ -n "$do_tdls_dc_req" ] && iwpriv "$ifname" do_tdls_dc_req "$do_tdls_dc_req"
+
+		config_get tdls_auto "$vif" tdls_auto
+		[ -n "$tdls_auto" ] && iwpriv "$ifname" tdls_auto "$tdls_auto"
+
+		config_get tdls_off_timeout "$vif" tdls_off_timeout
+		[ -n "$tdls_off_timeout" ] && iwpriv "$ifname" off_timeout "$tdls_off_timeout"
+
+		config_get tdls_tdb_timeout "$vif" tdls_tdb_timeout
+		[ -n "$tdls_tdb_timeout" ] && iwpriv "$ifname" tdb_timeout "$tdls_tdb_timeout"
+
+		config_get tdls_weak_timeout "$vif" tdls_weak_timeout
+		[ -n "$tdls_weak_timeout" ] && iwpriv "$ifname" weak_timeout "$tdls_weak_timeout"
+
+		config_get tdls_margin "$vif" tdls_margin
+		[ -n "$tdls_margin" ] && iwpriv "$ifname" tdls_margin "$tdls_margin"
+
+		config_get tdls_rssi_ub "$vif" tdls_rssi_ub
+		[ -n "$tdls_rssi_ub" ] && iwpriv "$ifname" tdls_rssi_ub "$tdls_rssi_ub"
+
+		config_get tdls_rssi_lb "$vif" tdls_rssi_lb
+		[ -n "$tdls_rssi_lb" ] && iwpriv "$ifname" tdls_rssi_lb "$tdls_rssi_lb"
+
+		config_get tdls_path_sel "$vif" tdls_path_sel
+		[ -n "$tdls_path_sel" ] && iwpriv "$ifname" tdls_pathSel "$tdls_path_sel"
+
+		config_get tdls_rssi_offset "$vif" tdls_rssi_offset
+		[ -n "$tdls_rssi_offset" ] && iwpriv "$ifname" tdls_rssi_o "$tdls_rssi_offset"
+
+		config_get tdls_path_sel_period "$vif" tdls_path_sel_period
+		[ -n "$tdls_path_sel_period" ] && iwpriv "$ifname" tdls_pathSel_p "$tdls_path_sel_period"
+
+		config_get tdlsmacaddr1 "$vif" tdlsmacaddr1
+		[ -n "$tdlsmacaddr1" ] && iwpriv "$ifname" tdlsmacaddr1 "$tdlsmacaddr1"
+
+		config_get tdlsmacaddr2 "$vif" tdlsmacaddr2
+		[ -n "$tdlsmacaddr2" ] && iwpriv "$ifname" tdlsmacaddr2 "$tdlsmacaddr2"
+
+		config_get tdlsaction "$vif" tdlsaction
+		[ -n "$tdlsaction" ] && iwpriv "$ifname" tdlsaction "$tdlsaction"
+
+		config_get tdlsoffchan "$vif" tdlsoffchan
+		[ -n "$tdlsoffchan" ] && iwpriv "$ifname" tdlsoffchan "$tdlsoffchan"
+
+		config_get tdlsswitchtime "$vif" tdlsswitchtime
+		[ -n "$tdlsswitchtime" ] && iwpriv "$ifname" tdlsswitchtime "$tdlsswitchtime"
+
+		config_get tdlstimeout "$vif" tdlstimeout
+		[ -n "$tdlstimeout" ] && iwpriv "$ifname" tdlstimeout "$tdlstimeout"
+
+		config_get tdlsecchnoffst "$vif" tdlsecchnoffst
+		[ -n "$tdlsecchnoffst" ] && iwpriv "$ifname" tdlsecchnoffst "$tdlsecchnoffst"
+
+		config_get tdlsoffchnmode "$vif" tdlsoffchnmode
+		[ -n "$tdlsoffchnmode" ] && iwpriv "$ifname" tdlsoffchnmode "$tdlsoffchnmode"
+
+		config_get_bool blockdfschan "$vif" blockdfschan
+		[ -n "$blockdfschan" ] && iwpriv "$ifname" blockdfschan "$blockdfschan"
+
+		config_get dbgLVL "$vif" dbgLVL
+		[ -n "$dbgLVL" ] && iwpriv "$ifname" dbgLVL "$dbgLVL"
+
+		config_get acsmindwell "$vif" acsmindwell
+		[ -n "$acsmindwell" ] && iwpriv "$ifname" acsmindwell "$acsmindwell"
+
+		config_get acsmaxdwell "$vif" acsmaxdwell
+		[ -n "$acsmaxdwell" ] && iwpriv "$ifname" acsmaxdwell "$acsmaxdwell"
+
+		config_get acsreport "$vif" acsreport
+		[ -n "$acsreport" ] && iwpriv "$ifname" acsreport "$acsreport"
+
+		config_get ch_hop_en "$vif" ch_hop_en
+		[ -n "$ch_hop_en" ] && iwpriv "$ifname" ch_hop_en "$ch_hop_en"
+
+		config_get ch_long_dur "$vif" ch_long_dur
+		[ -n "$ch_long_dur" ] && iwpriv "$ifname" ch_long_dur "$ch_long_dur"
+
+		config_get ch_nhop_dur "$vif" ch_nhop_dur
+		[ -n "$ch_nhop_dur" ] && iwpriv "$ifname" ch_nhop_dur "$ch_nhop_dur"
+
+		config_get ch_cntwn_dur "$vif" ch_cntwn_dur
+		[ -n "$ch_cntwn_dur" ] && iwpriv "$ifname" ch_cntwn_dur "$ch_cntwn_dur"
+
+		config_get ch_noise_th "$vif" ch_noise_th
+		[ -n "$ch_noise_th" ] && iwpriv "$ifname" ch_noise_th "$ch_noise_th"
+
+		config_get ch_cnt_th "$vif" ch_cnt_th
+		[ -n "$ch_cnt_th" ] && iwpriv "$ifname" ch_cnt_th "$ch_cnt_th"
+
+		config_get_bool scanchevent "$vif" scanchevent
+		[ -n "$scanchevent" ] && iwpriv "$ifname" scanchevent "$scanchevent"
+
+		config_get_bool send_add_ies "$vif" send_add_ies
+		[ -n "$send_add_ies" ] && iwpriv "$ifname" send_add_ies "$send_add_ies"
+
+		config_get_bool ext_ifu_acs "$vif" ext_ifu_acs
+		[ -n "$ext_ifu_acs" ] && iwpriv "$ifname" ext_ifu_acs "$ext_ifu_acs"
+
+		config_get_bool enable_rtt "$vif" enable_rtt
+		[ -n "$enable_rtt" ] && iwpriv "$ifname" enable_rtt "$enable_rtt"
+
+		config_get_bool enable_lci "$vif" enable_lci
+		[ -n "$enable_lci" ] && iwpriv "$ifname" enable_lci "$enable_lci"
+
+		config_get_bool enable_lcr "$vif" enable_lcr
+		[ -n "$enable_lcr" ] && iwpriv "$ifname" enable_lcr "$enable_lcr"
+
+		config_get_bool rrm "$vif" rrm
+		[ -n "$rrm" ] && iwpriv "$ifname" rrm "$rrm"
+
+		config_get_bool rrmslwin "$vif" rrmslwin
+		[ -n "$rrmslwin" ] && iwpriv "$ifname" rrmslwin "$rrmslwin"
+
+		config_get_bool rrmstats "$vif" rrmsstats
+		[ -n "$rrmstats" ] && iwpriv "$ifname" rrmstats "$rrmstats"
+
+		config_get rrmdbg "$vif" rrmdbg
+		[ -n "$rrmdbg" ] && iwpriv "$ifname" rrmdbg "$rrmdbg"
+
+		config_get acparams "$vif" acparams
+		[ -n "$acparams" ] && iwpriv "$ifname" acparams $acparams
+
+		config_get setwmmparams "$vif" setwmmparams
+		[ -n "$setwmmparams" ] && iwpriv "$ifname" setwmmparams $setwmmparams
+
+		config_get_bool qbssload "$vif" qbssload
+		[ -n "$qbssload" ] && iwpriv "$ifname" qbssload "$qbssload"
+
+		config_get_bool proxyarp "$vif" proxyarp
+		[ -n "$proxyarp" ] && iwpriv "$ifname" proxyarp "$proxyarp"
+
+		config_get_bool dgaf_disable "$vif" dgaf_disable
+		[ -n "$dgaf_disable" ] && iwpriv "$ifname" dgaf_disable "$dgaf_disable"
+
+		config_get setibssdfsparam "$vif" setibssdfsparam
+		[ -n "$setibssdfsparam" ] && iwpriv "$ifname" setibssdfsparam "$setibssdfsparam"
+
+		config_get startibssrssimon "$vif" startibssrssimon
+		[ -n "$startibssrssimon" ] && iwpriv "$ifname" startibssrssimon "$startibssrssimon"
+
+		config_get setibssrssihyst "$vif" setibssrssihyst
+		[ -n "$setibssrssihyst" ] && iwpriv "$ifname" setibssrssihyst "$setibssrssihyst"
+
+		config_get noIBSSCreate "$vif" noIBSSCreate
+		[ -n "$noIBSSCreate" ] && iwpriv "$ifname" noIBSSCreate "$noIBSSCreate"
+
+		config_get setibssrssiclass "$vif" setibssrssiclass
+		[ -n "$setibssrssiclass" ] && iwpriv "$ifname" setibssrssiclass $setibssrssiclass
+
+		config_get offchan_tx_test "$vif" offchan_tx_test
+		[ -n "$offchan_tx_test" ] && iwpriv "$ifname" offchan_tx_test $offchan_tx_test
+
+		handle_vow_dbg_cfg() {
+			local value="$1"
+			[ -n "$value" ] && iwpriv "$ifname" vow_dbg_cfg $value
+		}
+
+		config_list_foreach "$vif" vow_dbg_cfg handle_vow_dbg_cfg
+
+		config_get_bool vow_dbg "$vif" vow_dbg
+		[ -n "$vow_dbg" ] && iwpriv "$ifname" vow_dbg "$vow_dbg"
+
+		handle_set_max_rate() {
+			local value="$1"
+			[ -n "$value" ] && wlanconfig "$ifname" set_max_rate $value
+		}
+		config_list_foreach "$vif" set_max_rate handle_set_max_rate
+
+		config_get_bool implicitbf "$vif" implicitbf
+		[ -n "$implicitbf" ] && iwpriv "$ifname" implicitbf "${implicitbf}"
+
+		config_get_bool vhtsubfee "$vif" vhtsubfee
+		[ -n "$vhtsubfee" ] && iwpriv "$ifname" vhtsubfee "${vhtsubfee}"
+
+		config_get_bool vhtmubfee "$vif" vhtmubfee
+		[ -n "$vhtmubfee" ] && iwpriv "$ifname" vhtmubfee "${vhtmubfee}"
+
+		config_get_bool vhtsubfer "$vif" vhtsubfer
+		[ -n "$vhtsubfer" ] && iwpriv "$ifname" vhtsubfer "${vhtsubfer}"
+
+		config_get_bool vhtmubfer "$vif" vhtmubfer
+		[ -n "$vhtmubfer" ] && iwpriv "$ifname" vhtmubfer "${vhtmubfer}"
+
+		config_get vhtstscap "$vif" vhtstscap
+		[ -n "$vhtstscap" ] && iwpriv "$ifname" vhtstscap "${vhtstscap}"
+
+		config_get vhtsounddim "$vif" vhtsounddim
+		[ -n "$vhtsounddim" ] && iwpriv "$ifname" vhtsounddim "${vhtsounddim}"
+
+		config_get encap_type "$vif" encap_type
+		[ -n "$encap_type" ] && iwpriv "$ifname" encap_type "${encap_type}"
+
+		config_get decap_type "$vif" decap_type
+		[ -n "$decap_type" ] && iwpriv "$ifname" decap_type "${decap_type}"
+
+		config_get_bool rawsim_txagr "$vif" rawsim_txagr
+		[ -n "$rawsim_txagr" ] && iwpriv "$ifname" rawsim_txagr "${rawsim_txagr}"
+
+		config_get clr_rawsim_stats "$vif" clr_rawsim_stats
+		[ -n "$clr_rawsim_stats" ] && iwpriv "$ifname" clr_rawsim_stats "${clr_rawsim_stats}"
+
+		config_get_bool rawsim_debug "$vif" rawsim_debug
+		[ -n "$rawsim_debug" ] && iwpriv "$ifname" rawsim_debug "${rawsim_debug}"
+
+		config_get set_monrxfilter "$vif" set_monrxfilter
+		[ -n "$set_monrxfilter" ] && iwpriv "$ifname" set_monrxfilter "${set_monrxfilter}"
+
+		config_get neighbourfilter "$vif" neighbourfilter
+		[ -n "$neighbourfilter" ] && iwpriv "$ifname" neighbourfilter "${neighbourfilter}"
+
+		config_get athnewind "$vif" athnewind
+		[ -n "$athnewind" ] && iwpriv "$ifname" athnewind "$athnewind"
+
+		config_get osen "$vif" osen
+		[ -n "$osen" ] && iwpriv "$ifname" osen "$osen"
+
+		if [ "${osen:-0}" -ne 0 ]; then
+			iwpriv "$ifname" proxyarp 1
+		fi
+
+		config_get re_scalingfactor "$vif" re_scalingfactor
+		[ -n "$re_scalingfactor" ] && iwpriv "$ifname" set_whc_sfactor "$re_scalingfactor"
+
+		config_get root_distance "$vif" root_distance
+		[ -n "$root_distance" ] && iwpriv "$ifname" set_whc_dist "$root_distance"
+
+                config_get caprssi "$vif" caprssi
+                [ -n "$caprssi" ] && iwpriv "$ifname" caprssi "${caprssi}"
+
+		config_get_bool ap_isolation_enabled $device ap_isolation_enabled 0
+		config_get_bool isolate "$vif" isolate 0
+
+		if [ $ap_isolation_enabled -ne 0 ]; then
+			[ "$mode" = "wrap" ] && isolate=1
+		fi
+
+                config_get_bool ctsprt_dtmbcn "$vif" ctsprt_dtmbcn
+                [ -n "$ctsprt_dtmbcn" ] && iwpriv "$ifname" ctsprt_dtmbcn "${ctsprt_dtmbcn}"
+
+		config_get assocwar160  "$vif" assocwar160
+		[ -n "$assocwar160" ] && iwpriv "$ifname" assocwar160 "$assocwar160"
+
+		config_get rawdwepind "$vif" rawdwepind
+		[ -n "$rawdwepind" ] && iwpriv "$ifname" rawdwepind "$rawdwepind"
+
+		config_get revsig160  "$vif" revsig160
+		[ -n "$revsig160" ] && iwpriv "$ifname" revsig160 "$revsig160"
+
+		config_get channel_block_list "$vif" channel_block_list
+		[ -n "$channel_block_list" ] && wifitool "$ifname" block_acs_channel "$channel_block_list"
+
+		config_get rept_spl  "$vif" rept_spl
+		[ -n "$rept_spl" ] && iwpriv "$ifname" rept_spl "$rept_spl"
+
+		config_get cactimeout  "$vif" cactimeout
+		[ -n "$cactimeout" ] && iwpriv "$ifname" set_cactimeout "$cactimeout"
+
+                config_get global_wds qcawifi global_wds 0
+
+                if [ $global_wds -ne 0 ]; then
+                     iwpriv "$ifname" athnewind 1
+                fi
+
+                config_get pref_uplink "$device" pref_uplink
+                [ -n "$pref_uplink" ] && iwpriv "$phy" pref_uplink "${pref_uplink}"
+
+                config_get fast_lane "$device" fast_lane
+                [ -n "$fast_lane" ] && iwpriv "$phy" fast_lane "${fast_lane}"
+
+                config_get fast_lane "$device" fast_lane 0
+                if [ $fast_lane -ne 0 ]; then
+                        iwpriv "$ifname" athnewind 1
+                fi
+
+                case "$mode" in
+                        ap|wrap)
+                                config_get atf_mode qcawifi atf_mode
+                                [ -n "$atf_mode" ] && {
+                                    if [ "$atf_mode" = "1" ]; then
+                                        if [ "$first_vif_on_radio" = "1" ]; then
+                                            iwpriv "$ifname" atfssidgroup 0
+                                            iwpriv "$ifname" atfssidgroup 1
+                                            wlanconfig "$ifname" addatfgroup dvl_atf_"$ifname" "$ssid"
+                                            wlanconfig "$ifname" configatfgroup dvl_atf_"$ifname" 100
+                                        else
+                                            wlanconfig "$ifname" addatfgroup dvl_atf_"${ifname%?}" "$ssid"
+                                        fi
+                                        iwpriv "$ifname" commitatf 1
+                                    else
+                                        iwpriv "$ifname" commitatf 0
+                                        iwpriv "$ifname" atfssidgroup 0
+                                    fi
+                                }
+                esac
+
+		local net_cfg bridge
+		net_cfg="$(find_net_config "$vif")"
+		[ -z "$net_cfg" -o "$isolate" = 1 -a "$mode" = "wrap" ] || {
+                        [ -f /sys/class/net/${ifname}/parent ] && { \
+				bridge="$(bridge_interface "$net_cfg")"
+				config_set "$vif" bridge "$bridge"
+                        }
+		}
+
+		case "$mode" in
+			ap|wrap|ap_monitor|ap_smart_monitor|mesh|ap_lp_iot)
+
+
+				iwpriv "$ifname" ap_bridge "$((isolate^1))"
+
+				config_get_bool l2tif "$vif" l2tif
+				[ -n "$l2tif" ] && iwpriv "$ifname" l2tif "$l2tif"
+
+				if [ -n "$start_wapid" ]; then
+					wapid_setup_vif "$vif" || {
+						echo "enable_qcawifi($device): Failed to set up wapid for interface $ifname" >&2
+						ifconfig "$ifname" down
+						wlanconfig "$ifname" destroy
+						continue
+					}
+				fi
+
+				if [ -n "$start_hostapd" ] && eval "type hostapd_setup_vif" 2>/dev/null >/dev/null; then
+					hostapd_setup_vif "$vif" atheros no_nconfig || {
+						echo "enable_qcawifi($device): Failed to set up hostapd for interface $ifname" >&2
+						# make sure this wifi interface won't accidentally stay open without encryption
+						ifconfig "$ifname" down
+						wlanconfig "$ifname" destroy
+						continue
+					}
+				fi
+			;;
+			wds|sta)
+				if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
+					wpa_supplicant_setup_vif "$vif" athr || {
+						echo "enable_qcawifi($device): Failed to set up wpa_supplicant for interface $ifname" >&2
+						ifconfig "$ifname" down
+						wlanconfig "$ifname" destroy
+						continue
+					}
+				fi
+			;;
+			adhoc)
+				if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
+					wpa_supplicant_setup_vif "$vif" athr || {
+						echo "enable_qcawifi($device): Failed to set up wpa"
+						ifconfig "$ifname" down
+						wlanconfig "$ifname" destroy
+						continue
+					}
+				fi
+		esac
+
+		[ -z "$bridge" -o "$isolate" = 1 -a "$mode" = "wrap" ] || {
+                        [ -f /sys/class/net/${ifname}/parent ] && { \
+				start_net "$ifname" "$net_cfg"
+                        }
+		}
+
+		ifconfig "$ifname" up
+		set_wifi_up "$vif" "$ifname"
+
+		config_get set11NRates "$vif" set11NRates
+		[ -n "$set11NRates" ] && iwpriv "$ifname" set11NRates "$set11NRates"
+
+		# 256 QAM capability needs to be parsed first, since
+		# vhtmcs enables/disable rate indices 8, 9 for 2G
+		# only if vht_11ng is set or not
+		config_get_bool vht_11ng "$vif" vht_11ng
+		[ -n "$vht_11ng" ] && iwpriv "$ifname" vht_11ng "$vht_11ng"
+
+		config_get vhtmcs "$vif" vhtmcs
+		[ -n "$vhtmcs" ] && iwpriv "$ifname" vhtmcs "$vhtmcs"
+
+		config_get dis_legacy "$vif" dis_legacy
+		[ -n "$dis_legacy" ] && iwpriv "$ifname" dis_legacy "$dis_legacy"
+
+		config_get set_bcn_rate "$vif" set_bcn_rate
+		[ -n "$set_bcn_rate" ] && iwpriv "$ifname" set_bcn_rate "$set_bcn_rate"
+
+		#support nawds
+		config_get nawds_mode "$vif" nawds_mode
+		[ -n "$nawds_mode" ] && wlanconfig "$ifname" nawds mode "${nawds_mode}"
+
+		handle_nawds() {
+			local value="$1"
+			[ -n "$value" ] && wlanconfig "$ifname" nawds add-repeater $value
+		}
+		config_list_foreach "$vif" nawds_add_repeater handle_nawds
+
+		handle_hmwds() {
+			local value="$1"
+			[ -n "$value" ] && wlanconfig "$ifname" hmwds add_addr $value
+		}
+		config_list_foreach "$vif" hmwds_add_addr handle_hmwds
+
+		config_get nawds_override "$vif" nawds_override
+		[ -n "$nawds_override" ] && wlanconfig "$ifname" nawds override "${nawds_override}"
+
+		config_get nawds_defcaps "$vif" nawds_defcaps
+		[ -n "$nawds_defcaps" ] && wlanconfig "$ifname" nawds defcaps "${nawds_defcaps}"
+
+		handle_hmmc_add() {
+			local value="$1"
+			[ -n "$value" ] && wlanconfig "$ifname" hmmc add $value
+		}
+		config_list_foreach "$vif" hmmc_add handle_hmmc_add
+
+		# TXPower settings only work if device is up already
+		# while atheros hardware theoretically is capable of per-vif (even per-packet) txpower
+		# adjustment it does not work with the current atheros hal/madwifi driver
+
+		config_get vif_txpower "$vif" txpower
+		# use vif_txpower (from wifi-iface) instead of txpower (from wifi-device) if
+		# the latter doesn't exist
+		txpower="${txpower:-$vif_txpower}"
+		[ -z "$txpower" ] || iwconfig "$ifname" txpower "${txpower%%.*}"
+
+		if [ $enable_rps_wifi == 1 ] && [ -f "/lib/update_system_params.sh" ]; then
+			. /lib/update_system_params.sh
+			enable_rps $ifname
+		fi
+
+		first_vif_on_radio=0
+	done
+
+        config_get primaryradio "$device" primaryradio
+        [ -n "$primaryradio" ] && iwpriv "$phy" primaryradio "${primaryradio}"
+
+        config_get CSwOpts "$device" CSwOpts
+        [ -n "$CSwOpts" ] && iwpriv "$phy" CSwOpts "${CSwOpts}"
+
+	if [ $disable_qrfs_wifi == 1 ] && [ -f "/lib/update_system_params.sh" ]; then
+		. /lib/update_system_params.sh
+		disable_qrfs
+	fi
+
+	if [ -f "/lib/update_smp_affinity.sh" ]; then
+		. /lib/update_smp_affinity.sh
+		config_foreach enable_smp_affinity_wifi wifi-device
+	fi
+
+	lock -u /var/run/wifilock
+}
+
+setup_wps_enhc_device() {
+	local device=$1
+	local wps_enhc_cfg=
+
+	append wps_enhc_cfg "RADIO" "$N"
+	config_get_bool wps_pbc_try_sta_always "$device" wps_pbc_try_sta_always 0
+	config_get_bool wps_pbc_skip_ap_if_sta_disconnected "$device" wps_pbc_skip_ap_if_sta_disconnected 0
+	config_get_bool wps_pbc_overwrite_ap_settings "$device" wps_pbc_overwrite_ap_settings 0
+	config_get wps_pbc_overwrite_ssid_band_suffix "$device" wps_pbc_overwrite_ssid_band_suffix
+	[ $wps_pbc_try_sta_always -ne 0 ] && \
+			append wps_enhc_cfg "$device:try_sta_always" "$N"
+	[ $wps_pbc_skip_ap_if_sta_disconnected -ne 0 ] && \
+			append wps_enhc_cfg "$device:skip_ap_if_sta_disconnected" "$N"
+	[ $wps_pbc_overwrite_ap_settings -ne 0 ] && \
+			append wps_enhc_cfg "$device:overwrite_ap_settings" "$N"
+	[ -n "$wps_pbc_overwrite_ssid_band_suffix" ] && \
+			append wps_enhc_cfg "$device:overwrite_ssid_band_suffix:$wps_pbc_overwrite_ssid_band_suffix" "$N"
+
+	config_get vifs $device vifs
+
+	for vif in $vifs; do
+		config_get ifname "$vif" ifname
+
+		config_get_bool wps_pbc_enable "$vif" wps_pbc_enable 0
+		config_get wps_pbc_start_time "$vif" wps_pbc_start_time
+		config_get wps_pbc_duration "$vif" wps_pbc_duration
+		config_get_bool wps_pbc_noclone "$vif" wps_pbc_noclone 0
+		config_get_bool disabled "$vif" disabled 0
+		if [ $disabled -eq 0 -a $wps_pbc_enable -ne 0 ]; then
+			append wps_enhc_cfg "VAP" "$N"
+			[ -n "$wps_pbc_start_time" -a -n "$wps_pbc_duration" ] && {
+				if [ $wps_pbc_noclone -eq 0 ]; then
+					append wps_enhc_cfg "$ifname:$wps_pbc_start_time:$wps_pbc_duration:$device:clone" "$N"
+				else
+					append wps_enhc_cfg "$ifname:$wps_pbc_start_time:$wps_pbc_duration:$device:noclone" "$N"
+				fi
+			}
+			[ -n "$wps_pbc_start_time" -a -n "$wps_pbc_duration" ] || {
+				if [ $wps_pbc_noclone -eq 0 ]; then
+					append wps_enhc_cfg "$ifname:-:-:$device:clone" "$N"
+				else
+					append wps_enhc_cfg "$ifname:-:-:$device:noclone" "$N"
+				fi
+			}
+		fi
+	done
+
+	cat >> /var/run/wifi-wps-enhc-extn.conf <<EOF
+$wps_enhc_cfg
+EOF
+}
+
+setup_wps_enhc() {
+	local wps_enhc_cfg=
+
+	append wps_enhc_cfg "GLOBAL" "$N"
+	config_get_bool wps_pbc_overwrite_ap_settings_all qcawifi wps_pbc_overwrite_ap_settings_all 0
+	[ $wps_pbc_overwrite_ap_settings_all -ne 0 ] && \
+			append wps_enhc_cfg "-:overwrite_ap_settings_all" "$N"
+	config_get_bool wps_pbc_overwrite_sta_settings_all qcawifi wps_pbc_overwrite_sta_settings_all 0
+	[ $wps_pbc_overwrite_sta_settings_all -ne 0 ] && \
+			append wps_enhc_cfg "-:overwrite_sta_settings_all" "$N"
+	config_get wps_pbc_overwrite_ssid_suffix qcawifi wps_pbc_overwrite_ssid_suffix
+	[ -n "$wps_pbc_overwrite_ssid_suffix" ] && \
+			append wps_enhc_cfg "-:overwrite_ssid_suffix:$wps_pbc_overwrite_ssid_suffix" "$N"
+
+	cat >> /var/run/wifi-wps-enhc-extn.conf <<EOF
+$wps_enhc_cfg
+EOF
+
+	config_foreach setup_wps_enhc_device wifi-device
+}
+
+qcawifi_start_hostapd_cli() {
+	local device=$1
+	local ifidx=0
+	local radioidx=${device#wifi}
+
+	config_get vifs $device vifs
+
+	for vif in $vifs; do
+		local config_methods vifname
+
+		config_get vifname "$vif" ifname
+
+		if [ -n $vifname ]; then
+			[ $ifidx -gt 0 ] && vifname="ath${radioidx}$ifidx" || vifname="ath${radioidx}"
+		fi
+
+		config_get_bool wps_pbc "$vif" wps_pbc 0
+		config_get config_methods "$vif" wps_config
+		[ "$wps_pbc" -gt 0 ] && append config_methods push_button
+
+		if [ -n "$config_methods" ]; then
+			pid=/var/run/hostapd_cli-$vifname.pid
+			hostapd_cli -i $vifname -P $pid -a /lib/wifi/wps-hostapd-update-uci -p /var/run/hostapd-$device &>/dev/null </dev/null &
+		fi
+
+		ifidx=$(($ifidx + 1))
+	done
+}
+
+pre_qcawifi() {
+	local action=${1}
+
+	lock /var/run/wifilock
+	case "${action}" in
+		enable)
+			[ -n "${DEBUG}" ] && cat </dev/null >$DEBUG_FILE
+			;;
+		disable)
+			config_get_bool wps_vap_tie_dbdc qcawifi wps_vap_tie_dbdc 0
+
+			if [ $wps_vap_tie_dbdc -ne 0 ]; then
+				kill "$(cat "/var/run/hostapd.pid")"
+				[ -f "/tmp/hostapd_conf_filename" ] &&
+					rm /tmp/hostapd_conf_filename
+			fi
+
+			eval "type qwrap_teardown" >/dev/null 2>&1 && qwrap_teardown
+			eval "type icm_teardown" >/dev/null 2>&1 && icm_teardown
+			eval "type wpc_teardown" >/dev/null 2>&1 && wpc_teardown
+			eval "type lowi_teardown" >/dev/null 2>&1 && lowi_teardown
+			[ ! -f /etc/init.d/lbd ] || /etc/init.d/lbd stop
+			[ ! -f /etc/init.d/hyd ] || /etc/init.d/hyd stop
+			[ ! -f /etc/init.d/ssid_steering ] || /etc/init.d/ssid_steering stop
+			[ ! -f /etc/init.d/mcsd ] || /etc/init.d/mcsd stop
+			[ ! -f /etc/init.d/wsplcd ] || /etc/init.d/wsplcd stop
+
+                       rm -f /var/run/wifi-wps-enhc-extn.conf
+                       [ -r /var/run/wifi-wps-enhc-extn.pid ] && kill "$(cat "/var/run/wifi-wps-enhc-extn.pid")"
+
+			rm -f /var/run/iface_mgr.conf
+			[ -r /var/run/iface_mgr.pid ] && kill "$(cat "/var/run/iface_mgr.pid")"
+                        rm -f /var/run/iface_mgr.pid
+			killall iface-mgr
+
+                        if [ -f  "/var/run/son.conf" ]; then
+                                rm /var/run/son.conf
+                        fi
+		;;
+	esac
+	lock -u /var/run/wifilock
+}
+
+post_qcawifi() {
+	local action=${1}
+
+	lock /var/run/wifilock
+	case "${action}" in
+		enable)
+			local icm_enable qwrap_enable lowi_enable
+
+			# Run a single hostapd instance for all the radio's
+			# Enables WPS VAP TIE feature
+
+			config_get_bool wps_vap_tie_dbdc qcawifi wps_vap_tie_dbdc 0
+
+			if [ $wps_vap_tie_dbdc -ne 0 ]; then
+				hostapd_conf_file=$(cat "/tmp/hostapd_conf_filename")
+				hostapd -P /var/run/hostapd.pid $hostapd_conf_file -B
+				config_foreach qcawifi_start_hostapd_cli wifi-device
+			fi
+
+			config_get_bool icm_enable icm enable 0
+			[ ${icm_enable} -gt 0 ] && \
+					eval "type icm_setup" >/dev/null 2>&1 && {
+				icm_setup
+			}
+
+			config_get_bool wpc_enable wpc enable 0
+			[ ${wpc_enable} -gt 0 ] && \
+					eval "type wpc_setup" >/dev/null 2>&1 && {
+				wpc_setup
+			}
+
+			config_get_bool lowi_enable lowi enable 0
+			[ ${lowi_enable} -gt 0 ] && \
+				eval "type lowi_setup" >/dev/null 2>&1 && {
+				lowi_setup
+			}
+
+			eval "type qwrap_setup" >/dev/null 2>&1 && qwrap_setup && _disable_qcawifi
+
+			# These init scripts are assumed to check whether the feature is
+			# actually enabled and do nothing if it is not.
+			[ ! -f /etc/init.d/lbd ] || /etc/init.d/lbd start
+			[ ! -f /etc/init.d/ssid_steering ] || /etc/init.d/ssid_steering start
+			[ ! -f /etc/init.d/wsplcd ] || /etc/init.d/wsplcd restart
+
+			config_get_bool wps_pbc_extender_enhance qcawifi wps_pbc_extender_enhance 0
+			[ ${wps_pbc_extender_enhance} -ne 0 ] && {
+				rm -f /var/run/wifi-wps-enhc-extn.conf
+				setup_wps_enhc
+			}
+
+			config_foreach son_get_config wifi-device
+
+                        rm -f /etc/ath/iface_mgr.conf
+                        rm -f /var/run/iface_mgr.pid
+                        iface_mgr_setup
+
+		;;
+	esac
+	lock -u /var/run/wifilock
+}
+
+check_qcawifi_device() {
+	[ ${1%[0-9]} = "wifi" ] && config_set "$1" phy "$1"
+	config_get phy "$1" phy
+	[ -z "$phy" ] && {
+		find_qcawifi_phy "$1" >/dev/null || return 1
+		config_get phy "$1" phy
+	}
+	[ "$phy" = "$dev" ] && found=1
+}
+
+
+detect_qcawifi() {
+	devidx=0
+	olcfg_ng=0
+	olcfg_ac=0
+	nss_olcfg=0
+	nss_ol_num=0
+	reload=0
+	sleep 3
+	load_qcawifi
+	local board_name
+
+	[ -f /tmp/sysinfo/board_name ] && {
+		board_name=$(cat /tmp/sysinfo/board_name)
+	}
+
+	while :; do
+		config_get type "wifi$devidx" type
+		[ -n "$type" ] || break
+		devidx=$(($devidx + 1))
+	done
+	cd /sys/class/net
+	[ -d wifi0 ] || return
+	for dev in $(ls -d wifi* 2>&-); do
+		found=0
+		config_foreach check_qcawifi_device wifi-device
+		[ "$found" -gt 0 ] && continue
+
+		hwcaps=$(cat ${dev}/hwcaps)
+		case "${hwcaps}" in
+			*11bgn) mode_11=ng;;
+			*11abgn) mode_11=ng;;
+			*11an) mode_11=na;;
+			*11an/ac) mode_11=ac;;
+			*11abgn/ac) mode_11=ac;;
+		esac
+		if [ -f /sys/class/net/${dev}/nssoffload ] && [ $(cat /sys/class/net/${dev}/nssoffload) == "capable" ]; then
+			case "${mode_11}" in
+				ng)
+					if [ $olcfg_ng == 0 ]; then
+						olcfg_ng=1
+						nss_olcfg=$(($nss_olcfg|$((1<<$devidx))))
+						nss_ol_num=$(($nss_ol_num + 1))
+					fi
+				;;
+				na|ac)
+					if [ $olcfg_ac == 0 ]; then
+						olcfg_ac=1
+						nss_olcfg=$(($nss_olcfg|$((1<<$devidx))))
+						nss_ol_num=$(($nss_ol_num + 1))
+					fi
+				;;
+			esac
+		reload=1
+		fi
+		case "$board_name" in
+		ap-dk01.1-c1 | ap-dk01.1-c2 | ap-dk04.1-c1 | ap-dk04.1-c2 | ap-dk04.1-c3 | ap152 | ap147 | ap151 | ap135 | ap137)
+			;;
+		*)
+			echo $nss_olcfg >/lib/wifi/wifi_nss_olcfg
+			echo $nss_ol_num >/lib/wifi/wifi_nss_olnum
+			;;
+		esac
+		cat <<EOF
+config wifi-device  wifi$devidx
+	option type	qcawifi
+	option channel	auto
+	option macaddr	$(cat /sys/class/net/${dev}/address)
+	option hwmode	11${mode_11}
+	# REMOVE THIS LINE TO ENABLE WIFI:
+	option disabled 1
+
+config wifi-iface
+	option device	wifi$devidx
+	option network	lan
+	option mode	ap
+	option ssid	OpenWrt
+	option encryption none
+
+EOF
+	devidx=$(($devidx + 1))
+	done
+
+	if [ $reload == 1 ]; then
+		pre_qcawifi disable
+		unload_qcawifi > /dev/null
+		load_qcawifi > /dev/null
+	fi
+}
+
+# Handle traps here
+trap_qcawifi() {
+	# Release any locks taken
+	lock -u /var/run/wifilock
+}
+
+son_get_config()
+{
+	local device="$1"
+	config_get disabled $device disabled 0
+	if [ $disabled -eq 0 ]; then
+	config_get vifs $device vifs
+	for vif in $vifs; do
+		config_get_bool disabled "$vif" disabled 0
+		[ $disabled = 0 ] || continue
+		config_get backhaul "$vif" backhaul 0
+		config_get mode $vif mode
+		config_get ifname $vif ifname
+		local macaddr="$(config_get "$device" macaddr)"
+		if [ $backhaul -eq 1 ]; then
+			echo " $mode $ifname $device $macaddr"  >> /var/run/son.conf
+		else
+			echo " nbh_$mode $ifname $device $macaddr"  >> /var/run/son.conf
+		fi
+	done
+	fi
+}
+
+delos_convert_acs_chanlist() {
+	local device="$1"
+	local hwmode allowed blocked chan
+
+	[ -z "$(config_get "$device" acs_chanlist)" ] && return
+	handle_acs_chanlist() {
+		case "$1" in
+		*-*)
+			if [ "$hwmode" = 11ac ]; then
+				printf "%s " "$(seq -s" " ${1/-/ 4 })"
+			else
+				printf "%s " "$(seq -s" " ${1/-/ })"
+			fi
+			;;
+		*)
+			printf "%s" "$1 "
+			;;
+		esac
+	}
+
+	config_get hwmode "$device" hwmode
+	allowed="$(config_list_foreach "$device" acs_chanlist handle_acs_chanlist)"
+	if [ "$hwmode" = 11ac ]; then
+		for chan in $(seq 36 4 64) $(seq 100 4 144) $(seq 149 4 165); do
+			list_contains allowed "$chan" || append blocked "$chan"
+		done
+	else
+		for chan in $(seq 1 11) ; do
+			list_contains allowed "$chan" || append blocked "$chan"
+		done
+	fi
+	[ -z "$blocked" ] || config_set "$device" channel_block_list "${blocked// /,}"
+}
+
+delos_translate_radio_config() {
+	local device="$1"
+	local phy="$2"
+	local val
+
+	# OpenWrt hwmode/htmode/require_mode options to iwpriv
+	local hwmode htmode require_mode
+	config_get hwmode "$device" hwmode
+	config_get htmode "$device" htmode
+	config_get require_mode "$device" require_mode
+	case "$hwmode" in
+	11a)	hwmode=11ac
+		;;
+	11g)	hwmode=11ng
+		;;
+	esac
+	htmode=${htmode/VHT/HT}
+	config_set "$device" hwmode "$hwmode"
+	config_set "$device" htmode "$htmode"
+
+	# acs_chanlist -> channel_block_list
+	delos_convert_acs_chanlist "$device"
+
+	local channel autorescan arinterval
+	config_get channel "$device" channel
+	config_get_bool autorescan "$device" autorescan 0
+	[ "$channel" = auto ] && [ "$autorescan" = 1 ] && {
+		config_get arinterval "$device" autorescan_interval 10
+		config_set "$device" acs_bkscanen 1
+		config_set "$device" acs_scanintvl $((arinterval * 60))
+		config_set "$device" acs_ctrlflags 1
+	}
+
+	# DELOS5-571, RED compliance, applies only to 5GHz (Besra and later chips)
+	if [ "$hwmode" = "11ac" ]; then
+		# no dedicated function in functions.sh for this, so use list() to add this setting
+		CONFIG_SECTION="$device" list aggr_burst '0 5900'
+	fi
+
+	# use baptized MAC addresses (WifiMacAddress0=Cal@0x1000=2.4G=wifi0, WifiMacAddress1=Cal@0x5000=5G=wifi1)
+	case "$device" in
+		wifi0) val=$(uci_get_state delos baptization WiFiMacAddress0);;
+		wifi1) val=$(uci_get_state delos baptization WiFiMacAddress1);;
+		*)     val=;;
+	esac
+	[ -n "$val" ] && config_set "$device" macaddr "$val"
+}
+
+delos_copy_options() {
+	local device="$1"; shift
+	local vif="$1"; shift
+	local option val
+
+	for option in "$@"; do
+		config_get val "$device" "$option"
+		[ -n "$val" ] && config_set "$vif" "$option" "$val"
+	done
+}
+
+delos_transfer_radio_config() {
+	local device="$1"
+	local phy="$2"
+	local vif="$3"
+	local val
+
+	# qcawifi sets these options on VAP, mac80211 on radio
+	delos_copy_options "$device" "$vif" channel_block_list
+	delos_copy_options "$device" "$vif" beacon_int
+}
+
+delos_translate_vif_config() {
+	local vif="$1"
+	local mode val
+
+	config_get mode "$vif" mode
+	[ "$mode" = ap ] && {
+		config_get val "$vif" beacon_int
+		[ -n "$val" ] && config_set "$vif" bintval "$val"
+
+		# peer isolation on for guest wifi (as in package delos-wifi-guest for inter-radio isolation)
+		config_get val "$vif" dvl_guest
+		[ "$val" = "1" ] && config_set "$vif" isolate 1
+
+		## now change some of the hostapd default values if they are not explicitly set in the config
+		# gtk rekey interval 24 h instead of 10 min
+		config_get val "$vif" wpa_group_rekey 86400
+		config_set "$vif" wpa_group_rekey $val
+
+		## WPA3 config options (wireless config options OpenWrt like, translate to QCA flavour
+		# which uses extra options instead of extending option 'encryption')
+		# OpenWrt calls it psk3/sae (WPA3-Personal) and owe, and wpa3 (WPA3-Enterprise).
+		config_get val "$vif" encryption
+		case "$val" in
+		psk3-mixed|sae-mixed)
+			config_set "$vif" encryption psk2
+			config_set "$vif" sae 1
+			config_set "$vif" owe 0
+			;;
+		psk3|sae)
+			config_set "$vif" encryption ccmp
+			config_set "$vif" sae 1
+			config_set "$vif" owe 0
+			;;
+		owe)
+			config_set "$vif" encryption ccmp
+			config_set "$vif" owe 1
+			config_set "$vif" sae 0
+			config_unset "$vif" key
+			;;
+		*)
+			config_set "$vif" sae 0
+			config_set "$vif" owe 0
+			;;
+		esac
+
+		## 802.11r options
+		val="$(uci_get_state delos baptization WiFiMacAddress0)"
+		config_set "$vif" nasid "$val"
+		config_get val "$vif" ieee80211r
+		if [ "$val" = "1" ]; then
+			local pass_key kh_key_hex auth_secret
+			config_get pass_key "$vif" key
+			config_get auth_secret "$vif" auth_secret
+			[ -n "$auth_secret" ] && pass_key="$auth_secret"
+			config_set "$vif" nasid2 "*"
+			config_set "$vif" ft_over_ds 1
+			config_set "$vif" ft_psk_generate_local 1
+			config_set "$vif" ap_macaddr "ff:ff:ff:ff:ff:ff"
+			config_set "$vif" ap2_macaddr "00:00:00:00:00:00"
+			config_set "$vif" mobility_domain "0102"
+			config_set "$vif" ap2_r1_key_holder "00:00:00:00:00:00"
+			kh_key_hex="$(printf '%s' "$pass_key" |sha256sum | awk '{ print $1 }')"
+			config_set "$vif" kh_key_hex "$kh_key_hex"
+		fi
+
+		## important default options for proprietary driver
+		# multicast to unicast translation on:
+		config_set "$vif" mcastenhance 2
+	}
+}
diff --git a/lib/wifi/qcawifi_countrycode.txt b/lib/wifi/qcawifi_countrycode.txt
new file mode 100644
index 0000000..624048b
--- /dev/null
+++ b/lib/wifi/qcawifi_countrycode.txt
@@ -0,0 +1,239 @@
+AF 4
+AL 8
+DZ 12
+AS 16
+AD 20
+AO 24
+AI 660
+AQ 10
+AG 28
+AR 32
+AM 51
+AW 533
+AU 36
+AT 40
+AZ 31
+BS 44
+BH 48
+BD 50
+BB 52
+BY 112
+BE 56
+BZ 84
+BJ 204
+BM 60
+BT 64
+BO 68
+BA 70
+BW 72
+BV 74
+BR 76
+IO 86
+VG 92
+BN 96
+BG 100
+BF 854
+BI 108
+KH 116
+CM 120
+CA 124
+CV 132
+KY 136
+CF 140
+TD 148
+CL 152
+CN 156
+CX 162
+CC 166
+CO 170
+KM 174
+CD 180
+CG 178
+CK 184
+CR 188
+CI 384
+CU 192
+CY 196
+CZ 203
+DK 208
+DJ 262
+DM 212
+DO 214
+EC 218
+EG 818
+SV 222
+GQ 226
+ER 232
+EE 233
+ET 231
+FO 234
+FK 238
+FJ 242
+FI 246
+FR 250
+GF 254
+PF 258
+TF 260
+GA 266
+GM 270
+GE 268
+DE 276
+GH 288
+GI 292
+GR 300
+GL 304
+GD 308
+GP 312
+GU 316
+GT 320
+GN 324
+GW 624
+GY 328
+HT 332
+HM 334
+VA 336
+HN 340
+HK 344
+HR 191
+HU 348
+IS 352
+IN 356
+ID 360
+IR 364
+IQ 368
+IE 372
+IL 376
+IT 380
+JM 388
+JP 392
+JO 400
+KZ 398
+KE 404
+KI 296
+KP 408
+KR 410
+KW 414
+KG 417
+LA 418
+LV 428
+LB 422
+LS 426
+LR 430
+LY 434
+LI 438
+LT 440
+LU 442
+MO 446
+MK 807
+MG 450
+MW 454
+MY 458
+MV 462
+ML 466
+MT 470
+MH 584
+MQ 474
+MR 478
+MU 480
+YT 175
+MX 484
+FM 583
+MD 498
+MC 492
+MN 496
+MS 500
+MA 504
+MZ 508
+MM 104
+NA 516
+NR 520
+NP 524
+AN 530
+NL 528
+NC 540
+NZ 554
+NI 558
+NE 562
+NG 566
+NU 570
+NF 574
+MP 580
+NO 578
+OM 512
+PK 586
+PW 585
+PS 275
+PA 591
+PG 598
+PY 600
+PE 604
+PH 608
+PN 612
+PL 616
+PT 620
+PR 630
+QA 634
+RE 638
+RO 642
+RU 643
+RW 646
+SH 654
+KN 659
+LC 662
+PM 666
+VC 670
+WS 882
+SM 674
+ST 678
+SA 682
+SN 686
+CS 891
+SC 690
+SL 694
+SG 702
+SK 703
+SI 705
+SB 90
+SO 706
+ZA 710
+GS 239
+ES 724
+LK 144
+SD 736
+SR 740
+SJ 744
+SZ 748
+SE 752
+CH 756
+SY 760
+TW 158
+TJ 762
+TZ 834
+TH 764
+TL 626
+TG 768
+TK 772
+TO 776
+TT 780
+TN 788
+TR 792
+TM 795
+TC 796
+TV 798
+VI 850
+UG 800
+UA 804
+AE 784
+GB 826
+UM 581
+US 840
+UY 858
+UZ 860
+VU 548
+VE 862
+VN 704
+WF 876
+EH 732
+YE 887
+ZM 894
+ZW 716
diff --git a/lib/wifi/wpa_supplicant.sh b/lib/wifi/wpa_supplicant.sh
new file mode 100644
index 0000000..bc684a4
--- /dev/null
+++ b/lib/wifi/wpa_supplicant.sh
@@ -0,0 +1,564 @@
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+#
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+
+wpa_supplicant_setup_vif() {
+	local vif="$1"
+	local driver="$2"
+	local key="$key"
+	local options="$3"
+	local freq="" crypto=""
+	local sae owe
+	local sae_str owe_str
+
+	[ -n "$4" ] && freq="frequency=$4"
+	config_get_bool sae "$vif" sae
+	config_get_bool owe "$vif" owe
+	config_get ieee80211w "$vif" ieee80211w
+
+	# make sure we have the encryption type and the psk
+	[ -n "$enc" ] || {
+		config_get enc "$vif" encryption
+	}
+
+	enc_list=`echo "$enc" | sed "s/+/ /g"`
+
+	for enc_var in $enc_list; do
+		case "$enc_var" in
+			*tkip)
+				crypto="TKIP $crypto"
+				;;
+			*aes)
+				crypto="CCMP $crypto"
+				;;
+			*ccmp)
+				crypto="CCMP $crypto"
+				;;
+			*ccmp-256)
+				crypto="CCMP-256 $crypto"
+				;;
+			*gcmp)
+				crypto="GCMP $crypto"
+				;;
+			*gcmp-256)
+				crypto="GCMP-256 $crypto"
+		esac
+	done
+
+	[ -n "$key" ] || {
+		config_get key "$vif" key
+	}
+
+	local net_cfg bridge
+	config_get bridge "$vif" bridge
+	[ -z "$bridge" ] && {
+		net_cfg="$(find_net_config "$vif")"
+		[ -z "$net_cfg" ] || bridge="$(bridge_interface "$net_cfg")"
+		config_set "$vif" bridge "$bridge"
+	}
+
+	local mode ifname wds modestr=""
+	config_get mode "$vif" mode
+	config_get ifname "$vif" ifname
+	config_get_bool wds "$vif" wds 0
+	config_get_bool extap "$vif" extap 0
+	config_get map "$vif" map
+
+	config_get device "$vif" device
+	config_get_bool qwrap_enable "$device" qwrap_enable 0
+
+	[ -z "$bridge" ] || [ "$mode" = ap ] || [ "$mode" = sta -a $wds -eq 1 ] || \
+	[ "$mode" = sta -a $extap -eq 1 ] || [ $qwrap_enable -ne 0 ] || {
+		echo "wpa_supplicant_setup_vif($ifname): Refusing to bridge $mode mode interface"
+		return 1
+	}
+	[ "$mode" = "adhoc" ] && modestr="mode=1"
+
+	key_mgmt='NONE'
+	case "$enc" in
+		*none*) ;;
+		*wep*)
+			config_get key "$vif" key
+			key="${key:-1}"
+			case "$key" in
+				[1234])
+					for idx in 1 2 3 4; do
+						local zidx
+						zidx=$(($idx - 1))
+						config_get ckey "$vif" "key${idx}"
+						[ -n "$ckey" ] && \
+							append "wep_key${zidx}" "wep_key${zidx}=$(prepare_key_wep "$ckey")"
+					done
+					wep_tx_keyidx="wep_tx_keyidx=$((key - 1))"
+				;;
+				*)
+					wep_key0="wep_key0=$(prepare_key_wep "$key")"
+					wep_tx_keyidx="wep_tx_keyidx=0"
+				;;
+			esac
+			case "$enc" in
+				*mixed*)
+					wep_auth_alg='auth_alg=OPEN SHARED'
+				;;
+				*shared*)
+					wep_auth_alg='auth_alg=SHARED'
+				;;
+				*open*)
+					wep_auth_alg='auth_alg=OPEN'
+				;;
+			esac
+		;;
+		*psk*)
+			key_mgmt='WPA-PSK'
+			# if you want to use PSK with a non-nl80211 driver you
+			# have to use WPA-NONE and wext driver for wpa_s
+			[ "$mode" = "adhoc" -a "$driver" != "nl80211" ] && {
+				key_mgmt='WPA-NONE'
+				driver='wext'
+			}
+			if [ ${#key} -eq 64 ]; then
+				passphrase="psk=${key}"
+			else
+				passphrase="psk=\"${key}\""
+			fi
+
+			[ -n "$crypto" ] || crypto="CCMP"
+			pairwise="pairwise=$crypto"
+
+			case "$enc" in
+				*mixed*)
+					proto='proto=RSN WPA'
+				;;
+				*psk2*)
+					proto='proto=RSN'
+					config_get ieee80211w "$vif" ieee80211w 0
+				;;
+				*psk*)
+					proto='proto=WPA'
+				;;
+			esac
+		;;
+		*wpa*|*8021x*)
+			proto='proto=WPA2'
+			key_mgmt='WPA-EAP'
+			config_get ieee80211w "$vif" ieee80211w 0
+			config_get ca_cert "$vif" ca_cert
+			config_get eap_type "$vif" eap_type
+			ca_cert=${ca_cert:+"ca_cert=\"$ca_cert\""}
+
+			[ -n "$crypto" ] || crypto="CCMP"
+			pairwise="pairwise=$crypto"
+
+			case "$eap_type" in
+				tls)
+					config_get identity "$vif" identity
+					config_get client_cert "$vif" client_cert
+					config_get priv_key "$vif" priv_key
+					config_get priv_key_pwd "$vif" priv_key_pwd
+					identity="identity=\"$identity\""
+					client_cert="client_cert=\"$client_cert\""
+					priv_key="private_key=\"$priv_key\""
+					priv_key_pwd="private_key_passwd=\"$priv_key_pwd\""
+				;;
+				peap|ttls)
+					config_get auth "$vif" auth
+					config_get identity "$vif" identity
+					config_get password "$vif" password
+					phase2="phase2=\"auth=${auth:-MSCHAPV2}\""
+					identity="identity=\"$identity\""
+					password="password=\"$password\""
+				;;
+			esac
+			eap_type="eap=$(echo $eap_type | tr 'a-z' 'A-Z')"
+		;;
+	esac
+
+	keymgmt='NONE'
+
+	# Allow SHA256
+	case "$enc" in
+		*wpa*|*8021x*) keymgmt=WPA-EAP;;
+		*psk*) keymgmt=WPA-PSK;;
+	esac
+
+	if [ "${sae}" -eq 1 -a "${ieee80211r}" -gt 0 ]
+	then
+		sae_str=FT-SAE
+	elif [ "${sae}" -eq 1 ]
+	then
+		sae_str=SAE
+	fi
+
+	if [ "${owe}" -eq 1 ]
+	then
+		owe_str=OWE
+	fi
+
+	case "$ieee80211w" in
+		0)
+			key_mgmt="${keymgmt}"
+		;;
+		1)
+			key_mgmt="${keymgmt} ${keymgmt}-SHA256"
+		;;
+		2)
+			key_mgmt="${keymgmt}-SHA256"
+		;;
+	esac
+
+	if [ "${sae}" -eq 1 ]
+	then
+		key_mgmt="${key_mgmt} ${sae_str}"
+	fi
+	if [ "${owe}" -eq 1 ]
+	then
+		key_mgmt="${key_mgmt} ${owe_str}"
+	fi
+
+	[ -n "$ieee80211w" ] && ieee80211w="ieee80211w=$ieee80211w"
+	case "$pairwise" in
+		*CCMP-256*) group="group=CCMP-256 GCMP-256 GCMP CCMP TKIP";;
+		*GCMP-256*) group="group=GCMP-256 GCMP CCMP TKIP";;
+		*GCMP*) group="group=GCMP CCMP TKIP";;
+		*CCMP*) group="group=CCMP TKIP";;
+		*TKIP*) group="group=TKIP";;
+	esac
+
+	config_get ifname "$vif" ifname
+	config_get bridge "$vif" bridge
+	config_get ssid "$vif" ssid
+	config_get bssid "$vif" bssid
+	bssid=${bssid:+"bssid=$bssid"}
+
+	config_get_bool wps_pbc "$vif" wps_pbc 0
+
+	config_get config_methods "$vif" wps_config
+	[ "$wps_pbc" -gt 0 ] && append config_methods push_button
+
+	[ -n "$config_methods" ] && {
+		wps_cred="wps_cred_processing=2"
+		wps_config_methods="config_methods=$config_methods"
+		update_config="update_config=1"
+		# fix the overlap session of WPS PBC for two STA vifs
+		macaddr=$(cat /sys/class/net/${bridge}/address)
+		uuid=$(echo "$macaddr" | sed 's/://g')
+		[ -n "$uuid" ] && {
+			uuid_config="uuid=87654321-9abc-def0-1234-$uuid"
+		}
+	}
+
+	local ctrl_interface wait_for_wrap=""
+
+	if [ $qwrap_enable -ne 0 ]; then
+		ctrl_interface="/var/run/wpa_supplicant"
+		if [ -f "/tmp/qwrap_conf_filename-$ifname.conf" ]; then
+			rm -rf /tmp/qwrap_conf_filename-$ifname.conf
+		fi
+		echo -e "/var/run/wpa_supplicant-$ifname.conf \c\h" > /tmp/qwrap_conf_filename-$ifname.conf
+		wait_for_wrap="-W"
+	fi
+
+	ctrl_interface="/var/run/wpa_supplicant-$ifname"
+
+	rm -rf $ctrl_interface
+	rm -f /var/run/wpa_supplicant-$ifname.conf
+	cat > /var/run/wpa_supplicant-$ifname.conf <<EOF
+ctrl_interface=$ctrl_interface
+$wps_config_methods
+$wps_cred
+$update_config
+$uuid_config
+network={
+	$modestr
+	scan_ssid=1
+	ssid="$ssid"
+	$bssid
+	key_mgmt=$key_mgmt
+	$proto
+	$freq
+	$ieee80211w
+	$passphrase
+	$pairwise
+	$group
+	$eap_type
+	$ca_cert
+	$client_cert
+	$priv_key
+	$priv_key_pwd
+	$phase2
+	$identity
+	$password
+	$wep_key0
+	$wep_key1
+	$wep_key2
+	$wep_key3
+	$wep_tx_keyidx
+	$wep_auth_alg
+	map=$map
+}
+EOF
+	[ -z "$proto" -a "$key_mgmt" != "NONE" ] || {\
+                # If there is a change in path of wpa_supplicant-$ifname.lock file, please make the path
+                # change also in wrapd_api.c file.
+		[ -f "/var/run/wpa_supplicant-$ifname.lock" ] &&
+			rm /var/run/wpa_supplicant-$ifname.lock
+		wpa_cli -g /var/run/wpa_supplicantglobal interface_add  $ifname /var/run/wpa_supplicant-$ifname.conf athr /var/run/wpa_supplicant-$ifname "" $bridge
+		touch /var/run/wpa_supplicant-$ifname.lock
+    }
+}
+
+_wpa_supplicant_common() {
+	local ifname="$1"
+
+	_rpath="/var/run/wpa_supplicant"
+	_config="${_rpath}-$ifname.conf"
+}
+
+wpa_supplicant_prepare_interface() {
+	local ifname="$1"
+	_w_driver="$2"
+
+	_wpa_supplicant_common "$1"
+
+	json_get_vars mode wds
+
+	[ -n "$network_bridge" ] && {
+		fail=
+		case "$mode" in
+			adhoc)
+				fail=1
+			;;
+			sta)
+				[ "$wds" = 1 ] || fail=1
+			;;
+		esac
+
+		[ -n "$fail" ] && {
+			wireless_setup_vif_failed BRIDGE_NOT_ALLOWED
+			return 1
+		}
+	}
+
+	local ap_scan=
+
+	_w_mode="$mode"
+	_w_modestr=
+
+	[[ "$mode" = adhoc ]] && {
+		ap_scan="ap_scan=2"
+
+		_w_modestr="mode=1"
+	}
+
+	[[ "$mode" = mesh ]] && {
+		user_mpm="user_mpm=1"
+		mesh_ctrl_interface="ctrl_interface=$_rpath"
+	}
+
+	wpa_supplicant_teardown_interface "$ifname"
+	cat > "$_config" <<EOF
+$ap_scan
+EOF
+	return 0
+}
+
+wpa_supplicant_add_network() {
+	local ifname="$1"
+
+	_wpa_supplicant_common "$1"
+	wireless_vif_parse_encryption
+
+	json_get_vars \
+		ssid bssid key basic_rate mcast_rate ieee80211w \
+		wps_device_type wps_device_name wps_manufacturer \
+		wps_config wps_model_name wps_model_number \
+		wps_serial_number
+
+	local key_mgmt='NONE'
+	local enc_str=
+	local network_data=
+	local T="	"
+
+	local wpa_key_mgmt="WPA-PSK"
+	local scan_ssid="scan_ssid=1"
+	local freq
+
+	[[ "$_w_mode" = "adhoc" ]] && {
+		append network_data "mode=1" "$N$T"
+		[ -n "$channel" ] && {
+			freq="$(get_freq "$phy" "$channel")"
+			append network_data "fixed_freq=1" "$N$T"
+			append network_data "frequency=$freq" "$N$T"
+		}
+
+		scan_ssid="scan_ssid=0"
+
+		[ "$_w_driver" = "nl80211" ] ||	wpa_key_mgmt="WPA-NONE"
+	}
+
+	[[ "$_w_mode" = "mesh" ]] && {
+		append network_data "mode=5" "$N$T"
+		[ -n "$channel" ] && {
+			freq="$(get_freq "$phy" "$channel")"
+			append network_data "frequency=$freq" "$N$T"
+		}
+		wpa_key_mgmt="SAE"
+		scan_ssid=""
+	}
+
+	[[ "$_w_mode" = "adhoc" -o "$_w_mode" = "mesh" ]] && append network_data "$_w_modestr" "$N$T"
+
+	case "$auth_type" in
+		none) ;;
+		wep)
+			local wep_keyidx=0
+			hostapd_append_wep_key network_data
+			append network_data "wep_tx_keyidx=$wep_keyidx" "$N$T"
+		;;
+		psk)
+			local passphrase
+
+			key_mgmt="$wpa_key_mgmt"
+			if [ ${#key} -eq 64 ]; then
+				passphrase="psk=${key}"
+			else
+				passphrase="psk=\"${key}\""
+			fi
+			append network_data "$passphrase" "$N$T"
+		;;
+		eap)
+			key_mgmt='WPA-EAP'
+
+			json_get_vars eap_type identity ca_cert
+			[ -n "$ca_cert" ] && append network_data "ca_cert=\"$ca_cert\"" "$N$T"
+			[ -n "$identity" ] && append network_data "identity=\"$identity\"" "$N$T"
+			case "$eap_type" in
+				tls)
+					json_get_vars client_cert priv_key priv_key_pwd
+					append network_data "client_cert=\"$client_cert\"" "$N$T"
+					append network_data "private_key=\"$priv_key\"" "$N$T"
+					append network_data "private_key_passwd=\"$priv_key_pwd\"" "$N$T"
+				;;
+				peap|ttls)
+					json_get_vars auth password
+					set_default auth MSCHAPV2
+					append network_data "phase2=\"$auth\"" "$N$T"
+					append network_data "password=\"$password\"" "$N$T"
+				;;
+			esac
+			append network_data "eap=$(echo $eap_type | tr 'a-z' 'A-Z')" "$N$T"
+		;;
+		sae)
+			local passphrase
+
+			key_mgmt="$wpa_key_mgmt"
+			if [ ${#key} -eq 64 ]; then
+				passphrase="psk=${key}"
+			else
+				passphrase="psk=\"${key}\""
+			fi
+			append network_data "$passphrase" "$N$T"
+		;;
+	esac
+
+	[ "$mode" = mesh ] || {
+		case "$wpa" in
+			1)
+				append network_data "proto=WPA" "$N$T"
+			;;
+			2)
+				append network_data "proto=RSN" "$N$T"
+			;;
+		esac
+
+		case "$ieee80211w" in
+			[012])
+				[ "$wpa" -ge 2 ] && append network_data "ieee80211w=$ieee80211w" "$N$T"
+			;;
+		esac
+	}
+	local beacon_int brates mrate
+	[ -n "$bssid" ] && append network_data "bssid=$bssid" "$N$T"
+	[ -n "$beacon_int" ] && append network_data "beacon_int=$beacon_int" "$N$T"
+
+	local bssid_blacklist bssid_whitelist
+	json_get_values bssid_blacklist bssid_blacklist
+	json_get_values bssid_whitelist bssid_whitelist
+
+	[ -n "$bssid_blacklist" ] && append network_data "bssid_blacklist=$bssid_blacklist" "$N$T"
+	[ -n "$bssid_whitelist" ] && append network_data "bssid_whitelist=$bssid_whitelist" "$N$T"
+
+	[ -n "$basic_rate" ] && {
+		local br rate_list=
+		for br in $basic_rate; do
+			wpa_supplicant_add_rate rate_list "$br"
+		done
+		[ -n "$rate_list" ] && append network_data "rates=$rate_list" "$N$T"
+	}
+
+	[ -n "$mcast_rate" ] && {
+		local mc_rate=
+		wpa_supplicant_add_rate mc_rate "$mcast_rate"
+		append network_data "mcast_rate=$mc_rate" "$N$T"
+	}
+
+	local ht_str
+	[[ "$_w_mode" = adhoc ]] || ibss_htmode=
+	[ -n "$ibss_htmode" ] && append network_data "htmode=$ibss_htmode" "$N$T"
+
+	config_methods=$wps_config
+	[ -n "$config_methods" ] && {
+		set_default wps_device_type "6-0050F204-1"
+		set_default wps_device_name "Wireless Client"
+		set_default wps_manufacturer "openwrt.org"
+		set_default wps_model_name "cmodel"
+		set_default wps_model_number "123"
+		set_default wps_serial_number "12345"
+
+		device_type="device_type=$wps_device_type"
+		device_name="device_name=$wps_device_name"
+		manufacturer="manufacturer=$wps_manufacturer"
+		model_name="model_name=$wps_model_name"
+		model_number="model_number=$wps_model_number"
+		serial_number="serial_number=$wps_serial_number"
+		config_methods="config_methods=$config_methods"
+	}
+
+	cat >> "$_config" <<EOF
+$mesh_ctrl_interface
+$user_mpm
+$device_type
+$device_name
+$manufacturer
+$model_name
+$model_number
+$serial_number
+$config_methods
+
+network={
+	$scan_ssid
+	ssid="$ssid"
+	key_mgmt=$key_mgmt
+	$network_data
+}
+EOF
+	return 0
+}
+
+wpa_supplicant_run() {
+	local ifname="$1"; shift
+
+	_wpa_supplicant_common "$ifname"
+
+	[ -f "${_rpath}-$ifname.lock" ] &&
+		rm ${_rpath}-$ifname.lock
+	wpa_cli -g ${_rpath}global interface_add  $ifname ${_config} nl80211 ${_rpath}-$ifname ""
+	touch ${_rpath}-$ifname.lock
+}
diff --git a/lib/wifi/wps-hostapd-nbh-update b/lib/wifi/wps-hostapd-nbh-update
new file mode 100755
index 0000000..40b1e58
--- /dev/null
+++ b/lib/wifi/wps-hostapd-nbh-update
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+IFNAME=$1
+CMD=$2
+. /sbin/wifi detect
+
+local parent=$(cat /sys/class/net/${IFNAME}/parent)
+
+case "$CMD" in
+	WPS-TIMEOUT)
+		kill "$(cat "/var/run/hostapd-cli-$IFNAME.pid")"
+		env -i ACTION="wps-timeout" INTERFACE=$IFNAME /sbin/hotplug-call iface
+		;;
+	WPS-SUCCESS)
+		if [ -r /var/run/iface_mgr.pid ]; then
+			echo $IFNAME > /var/run/son_nbh.done
+			kill -SIGUSR1 "$(cat "/var/run/iface_mgr.pid")"
+		fi
+		kill "$(cat "/var/run/hostapd-cli-$IFNAME.pid")"
+		env -i ACTION="wps-success" INTERFACE=$IFNAME /sbin/hotplug-call iface
+		;;
+	DISCONNECTED)
+		kill "$(cat "/var/run/hostapd_cli-$IFNAME.pid")"
+		;;
+esac
diff --git a/lib/wifi/wps-hostapd-update-uci b/lib/wifi/wps-hostapd-update-uci
new file mode 100755
index 0000000..de3b193
--- /dev/null
+++ b/lib/wifi/wps-hostapd-update-uci
@@ -0,0 +1,91 @@
+#!/bin/sh
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+IFNAME=$1
+CMD=$2
+
+if [ $CMD = "WPS-NEW-AP-SETTINGS" ]; then
+	. /sbin/wifi detect
+fi
+
+parent=$(cat /sys/class/net/${IFNAME}/parent)
+
+is_section_ifname() {
+	local config=$1
+	local ifname
+	config_get ifname "$config" ifname
+	[ "${ifname}" = "$2" ] && eval "$3=$config"
+}
+
+case "$CMD" in
+	WPS-NEW-AP-SETTINGS)
+		ssid=$(hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent get_config | grep ^ssid= | cut -f2- -d =)
+		wpa=$(hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent get_config | grep ^wpa= | cut -f2- -d=)
+		psk=$(hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent get_config | grep ^passphrase= | cut -f2- -d=)
+		wps_state=$(hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent get_config | grep ^wps_state= | cut -f2- -d=)
+		sect=
+		config_foreach is_section_ifname wifi-iface $IFNAME sect
+
+		[ -n "$psk" ] || psk=$(hostapd_cli -i$IFNAME -p/var/run/hostapd-$parent get_config | grep ^psk= | cut -f2- -d=)
+
+		case "$wps_state" in
+			configured*)
+				uci set wireless.${sect}.wps_state=2
+				;;
+			"not configured"*)
+				uci set wireless.${sect}.wps_state=1
+				;;
+			*)
+				uci set wireless.${sect}.wps_state=0
+		esac
+
+		case "$wpa" in
+			3)
+				uci set wireless.${sect}.encryption='mixed-psk'
+				uci set wireless.${sect}.key=$psk
+				;;
+			2)
+				uci set wireless.${sect}.encryption='psk2'
+				uci set wireless.${sect}.key=$psk
+				;;
+			1)
+				uci set wireless.${sect}.encryption='psk'
+				uci set wireless.${sect}.key=$psk
+				;;
+			*)
+				uci set wireless.${sect}.encryption='none'
+				uci set wireless.${sect}.key=''
+				;;
+		esac
+
+		uci set wireless.${sect}.ssid="$ssid"
+		uci commit
+		if [ -r /var/run/wifi-wps-enhc-extn.pid ]; then
+			echo $IFNAME > /var/run/wifi-wps-enhc-extn.done
+			kill -SIGUSR1 "$(cat "/var/run/wifi-wps-enhc-extn.pid")"
+		fi
+		kill "$(cat "/var/run/hostapd-cli-$IFNAME.pid")"
+		#post hotplug event to whom take care of
+		env -i ACTION="wps-configured" INTERFACE=$IFNAME /sbin/hotplug-call iface
+		;;
+	WPS-TIMEOUT)
+		kill "$(cat "/var/run/hostapd-cli-$IFNAME.pid")"
+		env -i ACTION="wps-timeout" INTERFACE=$IFNAME /sbin/hotplug-call iface
+		;;
+	WPS-SUCCESS)
+		if [ -r /var/run/wifi-wps-enhc-extn.pid ]; then
+			echo $IFNAME > /var/run/wifi-wps-enhc-extn.done
+			kill -SIGUSR1 "$(cat "/var/run/wifi-wps-enhc-extn.pid")"
+		fi
+		kill "$(cat "/var/run/hostapd-cli-$IFNAME.pid")"
+		env -i ACTION="wps-success" INTERFACE=$IFNAME /sbin/hotplug-call iface
+		;;
+	DISCONNECTED)
+		kill "$(cat "/var/run/hostapd_cli-$IFNAME.pid")"
+		;;
+esac
diff --git a/lib/wifi/wps-supplicant-update-uci b/lib/wifi/wps-supplicant-update-uci
new file mode 100755
index 0000000..8763a5a
--- /dev/null
+++ b/lib/wifi/wps-supplicant-update-uci
@@ -0,0 +1,192 @@
+#!/bin/sh
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+
+#
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+
+IFNAME=$1
+CMD=$2
+
+if [ $CMD = "CONNECTED" ]; then
+	. /sbin/wifi detect
+fi
+
+parent=$(cat /sys/class/net/${IFNAME}/parent)
+
+is_section_ifname() {
+	local config=$1
+	local ifname
+	config_get ifname "$config" ifname
+	[ "${ifname}" = "$2" ] && eval "$3=$config"
+}
+
+get_psk() {
+	local count=
+	local conf=$1
+	local index=
+	# This finds the last PSK in the supplicant config and strips off leading
+	# and trailing quotes (if it has them). Generally the quotes are not there
+	# when doing WPS push button.
+	psk=$(awk 'BEGIN{FS="="} /psk=/ {print $0}' $conf |grep "psk=" |tail -n 1 | cut -f 2 -d= | sed -e 's/^"\(.*\)"/\1/')
+}
+
+wps_pbc_enhc_get_clone_config() {
+	if [ -r $wps_pbc_enhc_file ]; then
+		local overwrite_ap_all=$(awk "/\-:overwrite_ap_settings_all/ {print;exit}" $wps_pbc_enhc_file | sed "s/\-://")
+		local overwrite_sta_all=$(awk "/\-:overwrite_sta_settings_all/ {print;exit}" $wps_pbc_enhc_file | sed "s/\-://")
+		local overwrite_ap=$(awk "/$parent:overwrite_ap_settings/ {print;exit}" $wps_pbc_enhc_file | sed "s/$parent://")
+
+		[ -n "$overwrite_ap_all" ] && \
+			IFNAME_OVERWRITE_AP=$(awk "/:[0-9\-]*:[0-9\-]*:.*:clone/" $wps_pbc_enhc_file | cut -f1 -d:)
+
+		[ -n "$overwrite_sta_all" ] && \
+			IFNAME_OVERWRITE_STA=$(awk "/:[0-9\-]*:[0-9\-]*:.*:clone/" $wps_pbc_enhc_file | cut -f1 -d:)
+
+		[ -z "$overwrite_ap_all" -a -n "$overwrite_ap" ] && \
+			IFNAME_OVERWRITE_AP=$(awk "/:[0-9\-]*:[0-9\-]*:$parent:clone/" $wps_pbc_enhc_file | cut -f1 -d:)
+	fi
+}
+
+wps_pbc_enhc_overwrite_ap_settings() {
+	local ifname_overwrite=$1
+	local ssid_overwrite=$2
+	local auth_overwrite=$3
+	local encr_overwrite=$4
+	local key_overwrite=
+	local parent_overwrite=$(cat /sys/class/net/${ifname_overwrite}/parent)
+	local ssid_suffix=$(awk "/\-:overwrite_ssid_suffix:/ {print;exit}" $wps_pbc_enhc_file | \
+						sed "s/\-:overwrite_ssid_suffix://")
+	local ssid_band_suffix=$(awk "/$parent_overwrite:overwrite_ssid_band_suffix:/ {print;exit}" $wps_pbc_enhc_file | \
+						sed "s/$parent_overwrite:overwrite_ssid_band_suffix://")
+
+	[ "${auth_overwrite}" = "WPA2PSK" -o "${auth_overwrite}" = "WPAPSK" ] && key_overwrite=$5
+
+	if [ -r /var/run/hostapd-${parent_overwrite}/${ifname_overwrite} ]; then
+		hostapd_cli -i${ifname_overwrite} -p/var/run/hostapd-${parent_overwrite} wps_config \
+			${ssid_overwrite}${ssid_suffix}${ssid_band_suffix} ${auth_overwrite} ${encr_overwrite} ${key_overwrite}
+	fi
+}
+
+wps_pbc_enhc_overwrite_sta_settings() {
+	local ifname_overwrite=$1
+	local ssid_overwrite=$2
+	local auth_overwrite=$3
+	local key_overwrite=
+	local key_overwrite_len=
+	local nw=
+	local sect=
+	config_foreach is_section_ifname wifi-iface $ifname_overwrite sect
+
+	[ "${auth_overwrite}" = "WPA2-PSK" -o "${auth_overwrite}" = "WPA-PSK" ] && {
+		key_overwrite=$4
+		key_overwrite_len=${#key_overwrite}
+	}
+
+	if [ -r /var/run/wpa_supplicant-${ifname_overwrite} ]; then
+		nw=`wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} add_network | cut -d ' ' -f 4`
+		wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw ssid \"${ssid_overwrite}\"
+		uci set wireless.${sect}.ssid="$ssid_overwrite"
+		case $auth_overwrite in
+			WPA2-PSK)
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw key_mgmt WPA-PSK
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw auth_alg OPEN
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw pairwise CCMP
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw proto RSN
+				if [ $key_overwrite_len -eq 64 ]; then
+					wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw psk ${key_overwrite}
+				else
+					wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw psk \"${key_overwrite}\"
+				fi
+				uci set wireless.${sect}.encryption='psk2'
+				uci set wireless.${sect}.key=$key_overwrite
+			;;
+			WPA-PSK)
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw key_mgmt WPA-PSK
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw auth_alg OPEN
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw pairwise TKIP
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw proto WPA
+				if [ $key_overwrite_len -eq 64 ]; then
+					wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw psk ${key_overwrite}
+				else
+					wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw psk \"${key_overwrite}\"
+				fi
+				uci set wireless.${sect}.encryption='psk'
+				uci set wireless.${sect}.key=$key_overwrite
+			;;
+			NONE)
+				wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} set_network $nw key_mgmt NONE
+				uci set wireless.${sect}.encryption='none'
+				uci set wireless.${sect}.key=''
+			;;
+		esac
+		wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} enable_network $nw
+		wpa_cli -p /var/run/wpa_supplicant-${ifname_overwrite} save_config
+	fi
+}
+
+psk=
+ssid=
+wpa_version=
+IFNAME_OVERWRITE_AP=
+IFNAME_OVERWRITE_STA=
+wps_pbc_enhc_file=/var/run/wifi-wps-enhc-extn.conf
+
+case "$CMD" in
+	CONNECTED)
+		wpa_cli -i$IFNAME -p/var/run/wpa_supplicant-$IFNAME save_config
+		ssid=$(wpa_cli -i$IFNAME -p/var/run/wpa_supplicant-$IFNAME status | grep ^ssid= | cut -f2- -d =)
+		wpa_version=$(wpa_cli -i$IFNAME -p/var/run/wpa_supplicant-$IFNAME status | grep ^key_mgmt= | cut -f2- -d=)
+		get_psk /var/run/wpa_supplicant-$IFNAME.conf
+		wps_pbc_enhc_get_clone_config
+		local sect=
+		config_foreach is_section_ifname wifi-iface $IFNAME sect
+		case $wpa_version in
+			WPA2-PSK)
+				uci set wireless.${sect}.encryption='psk2'
+				uci set wireless.${sect}.key=$psk
+				for intf in $IFNAME_OVERWRITE_AP; do
+					wps_pbc_enhc_overwrite_ap_settings $intf $ssid WPA2PSK CCMP $psk
+				done
+				;;
+			WPA-PSK)
+				uci set wireless.${sect}.encryption='psk'
+				uci set wireless.${sect}.key=$psk
+				for intf in $IFNAME_OVERWRITE_AP; do
+					wps_pbc_enhc_overwrite_ap_settings $intf $ssid WPAPSK TKIP $psk
+				done
+				;;
+			NONE)
+				uci set wireless.${sect}.encryption='none'
+				uci set wireless.${sect}.key=''
+				for intf in $IFNAME_OVERWRITE_AP; do
+					wps_pbc_enhc_overwrite_ap_settings $intf $ssid OPEN NONE
+				done
+				;;
+		esac
+		uci set wireless.${sect}.ssid="$ssid"
+		for intf in $IFNAME_OVERWRITE_STA; do
+			[ "$IFNAME" != "$intf" ] && wps_pbc_enhc_overwrite_sta_settings $intf $ssid $wpa_version $psk
+		done
+		uci commit
+		if [ -r /var/run/wifi-wps-enhc-extn.pid ]; then
+			echo $IFNAME > /var/run/wifi-wps-enhc-extn.done
+			kill -SIGUSR1 "$(cat "/var/run/wifi-wps-enhc-extn.pid")"
+		fi
+		kill "$(cat "/var/run/wps-hotplug-$IFNAME.pid")"
+		#post hotplug event to whom take care of
+		env -i ACTION="wps-connected" INTERFACE=$IFNAME /sbin/hotplug-call iface
+		;;
+	WPS-TIMEOUT)
+		kill "$(cat "/var/run/wps-hotplug-$IFNAME.pid")"
+		env -i ACTION="wps-timeout" INTERFACE=$IFNAME /sbin/hotplug-call iface
+		;;
+	DISCONNECTED)
+		;;
+esac
+
diff --git a/lib/wifi/zzz.sh b/lib/wifi/zzz.sh
new file mode 120000
index 0000000..66407be
--- /dev/null
+++ b/lib/wifi/zzz.sh
@@ -0,0 +1 @@
+delos-wifi/delos-wifi.sh
\ No newline at end of file
diff --git a/rom/note b/rom/note
new file mode 100644
index 0000000..1746eb0
--- /dev/null
+++ b/rom/note
@@ -0,0 +1,3 @@
+SQUASHFS USERS:
+After firstboot has been run, / will be jffs2 and /rom will be squashfs
+(* except when in failsafe)
diff --git a/sbin/askfirst b/sbin/askfirst
new file mode 100755
index 0000000..a994482
Binary files /dev/null and b/sbin/askfirst differ
diff --git a/sbin/devmem b/sbin/devmem
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/devmem
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/devstatus b/sbin/devstatus
new file mode 100755
index 0000000..3c35b26
--- /dev/null
+++ b/sbin/devstatus
@@ -0,0 +1,12 @@
+#!/bin/sh
+. /usr/share/libubox/jshn.sh
+DEVICE="$1"
+
+[ -n "$DEVICE" ] || {
+	echo "Usage: $0 <device>"
+	exit 1
+}
+
+json_init
+json_add_string name "$DEVICE"
+ubus call network.device status "$(json_dump)"
diff --git a/sbin/firstboot b/sbin/firstboot
new file mode 100755
index 0000000..d9af57d
--- /dev/null
+++ b/sbin/firstboot
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/sbin/jffs2reset $@
diff --git a/sbin/fw3 b/sbin/fw3
new file mode 100755
index 0000000..7ed5953
Binary files /dev/null and b/sbin/fw3 differ
diff --git a/sbin/halt b/sbin/halt
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/halt
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/hotplug-call b/sbin/hotplug-call
new file mode 100755
index 0000000..743871a
--- /dev/null
+++ b/sbin/hotplug-call
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Copyright (C) 2006-2010 OpenWrt.org
+
+export HOTPLUG_TYPE="$1"
+
+. /lib/functions.sh
+
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+LOGNAME=root
+USER=root
+export PATH LOGNAME USER
+export DEVICENAME="${DEVPATH##*/}"
+
+[ \! -z "$1" -a -d /etc/hotplug.d/$1 ] && {
+	for script in $(ls /etc/hotplug.d/$1/* 2>&-); do (
+		[ -f $script ] && . $script
+	); done
+}
diff --git a/sbin/hwclock b/sbin/hwclock
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/hwclock
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/ifconfig b/sbin/ifconfig
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/ifconfig
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/ifdown b/sbin/ifdown
new file mode 120000
index 0000000..a0e5c17
--- /dev/null
+++ b/sbin/ifdown
@@ -0,0 +1 @@
+ifup
\ No newline at end of file
diff --git a/sbin/ifstatus b/sbin/ifstatus
new file mode 100755
index 0000000..8a951e6
--- /dev/null
+++ b/sbin/ifstatus
@@ -0,0 +1,13 @@
+#!/bin/sh
+INTERFACE="$1"
+
+[ -n "$INTERFACE" ] || {
+	echo "Usage: $0 <interface>"
+	exit 1
+}
+
+ubus -S list "network.interface.$INTERFACE" >/dev/null || {
+	echo "Interface $INTERFACE not found"
+	exit 1
+}
+ubus call network.interface status "{ \"interface\" : \"$INTERFACE\" }"
diff --git a/sbin/ifup b/sbin/ifup
new file mode 100755
index 0000000..04db46e
--- /dev/null
+++ b/sbin/ifup
@@ -0,0 +1,81 @@
+#!/bin/sh
+
+[ -f /lib/sm_fixup.sh ] && source /lib/sm_fixup.sh || fixup_network_config() {
+	return 0
+}
+
+ifup_all=
+setup_wifi=
+
+if_call() {
+	local interface="$1"
+	for mode in $modes; do
+		ubus call network.interface $mode "{ \"interface\" : \"$interface\" }"
+	done
+}
+
+case "$0" in
+	*ifdown) modes=down;;
+	*ifup)
+		modes="down up"
+		setup_wifi=1
+	;;
+	*) echo "Invalid command: $0";;
+esac
+
+while :; do
+	case "$1" in
+		-a)
+			ifup_all=1
+			shift
+		;;
+		-w)
+			setup_wifi=
+			shift
+		;;
+		*)
+			break
+		;;
+	esac
+done
+
+[ "$modes" = "down up" ] && (fixup_network_config; ubus call network reload)
+if [ -n "$ifup_all" ]; then
+	for interface in `ubus -S list 'network.interface.*'`; do
+		if_call "${interface##network.interface.}"
+	done
+	[ -n "$setup_wifi" ] && /sbin/wifi up
+	exit
+else
+	ubus -S list "network.interface.$1" > /dev/null || {
+		echo "Interface $1 not found"
+		exit
+	}
+	if_call "$1"
+fi
+
+if [ -n "$setup_wifi" ] && grep -sq config /etc/config/wireless; then
+	. /lib/functions.sh
+
+	find_related_radios() {
+		local wdev wnet
+		config_get wdev "$1" device
+		config_get wnet "$1" network
+
+		if [ -n "$wdev" ]; then
+			for wnet in $wnet; do
+				if [ "$wnet" = "$network" ]; then
+					append radio_devs "$wdev" "$N"
+				fi
+			done
+		fi
+	}
+
+	network="$1"
+	config_load wireless
+	config_foreach find_related_radios wifi-iface
+
+	for dev in $(echo "$radio_devs" | sort -u); do
+		/sbin/wifi up "$dev"
+	done
+fi
diff --git a/sbin/init b/sbin/init
new file mode 100755
index 0000000..88102cf
Binary files /dev/null and b/sbin/init differ
diff --git a/sbin/jffs2mark b/sbin/jffs2mark
new file mode 120000
index 0000000..a7ead16
--- /dev/null
+++ b/sbin/jffs2mark
@@ -0,0 +1 @@
+jffs2reset
\ No newline at end of file
diff --git a/sbin/jffs2reset b/sbin/jffs2reset
new file mode 100755
index 0000000..055b59a
Binary files /dev/null and b/sbin/jffs2reset differ
diff --git a/sbin/kexec_load.sh b/sbin/kexec_load.sh
new file mode 100755
index 0000000..076bbc1
--- /dev/null
+++ b/sbin/kexec_load.sh
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+board_string=""
+bldinfo=""
+nodeip=""
+serverip=""
+crash_kern_path="/crash"
+crash_kern_name="crash_kernel.elf"
+crash_kernel=""
+debug_flag=0
+
+get_build_info()
+{
+	echo -n "KEXEC: Getting the board serial number.. "
+	local serialnumber=`fw_printenv SerialNumber 2>/dev/null`
+	[ $? -ne 0 ] && { echo "failed.."; exit; };
+	echo done
+
+	echo -n "KEXEC: Getting build info... "
+	hstnm=`uname -n|tr -s ' ' '_'`
+	vers=`uname -v|tr -s '[ #:]' '_'`
+	bldinfo=`echo bldinfo=${hstnm}_${vers}`
+	bldinfo=$bldinfo-${serialnumber#SerialNumber=}-`date +%Y-%m-%d_%H-%M-%S`;
+	echo done
+	[ $debug_flag -eq 1 ] && {
+		echo "KEXEC (DEBUG): bldinfo = $bldinfo";
+	};
+}
+
+get_board_type()
+{
+	echo -n "KEXEC: Getting board type... "
+
+	val=$(cat /tmp/sysinfo/board_name)
+	[ $? -eq 0 ] && {
+		board_string="board=$(echo $val | tr 'a-z' 'A-Z')";
+		echo done
+
+		[ $debug_flag -eq 1 ] && {
+			echo "KEXEC (DEBUG): board_string = $board_string";
+		};
+
+		return;
+	};
+
+	echo "error board string not found in /proc/cmdline"
+	exit
+}
+
+get_node_and_server_ip_addr()
+{
+	echo -n "KEXEC: Getting the node ip.. "
+	nodeip=`fw_printenv ipaddr 2>/dev/null`
+	[ $? -ne 0 ] && { echo "failed.."; exit; };
+
+	echo done
+
+	echo -n "KEXEC: Getting the serverip.. "
+	serverip=`fw_printenv serverip 2>/dev/null`
+
+	[ $? -ne 0 ] && { echo "failed.."; exit; };
+	echo done
+	[ $debug_flag -eq 1 ] && {
+		echo "KEXEC (DEBUG): nodeip = $nodeip serverip = $serverip";
+	};
+}
+
+load_crash_kernel()
+{
+	[ $debug_flag -eq 1 ] && {
+		echo "KEXEC (DEBUG): crash_kernel = $crash_kernel";
+	};
+
+	echo -n "KEXEC: Loading crash kernel.. "
+
+	kexecout=`kexec -d -p $crash_kernel --append="$board_string $bldinfo $nodeip $serverip" 2>&1`
+	[ $? -ne 0 ] && { echo "failed.."; echo $kexecout; exit; };
+
+	echo "success"
+}
+
+usage()
+{
+	echo "Usage: $0 [-d] <crash kernel path> <crash kernel name>"
+	exit
+}
+
+check_args()
+{
+	if [ $# -gt 0 ]
+	then
+		[ $1 = "-d" ] && { debug_flag=1; shift; };
+		[ $# -ne 2 ] && { usage $0; };
+		crash_kern_path=$1
+		crash_kern_name=$2
+		crash_kernel=`echo $crash_kern_path/$crash_kern_name`
+		[ ! -f $crash_kernel ] && { echo "$0: invalid crash_kernel $crash_kernel"; exit; };
+	else
+		usage $0
+	fi
+}
+
+main()
+{
+	check_args $*
+	get_build_info
+	get_board_type
+	get_node_and_server_ip_addr
+	#echo $nodeip $serverip $bldinfo $board_string
+	load_crash_kernel
+}
+
+main $*
diff --git a/sbin/kmodloader b/sbin/kmodloader
new file mode 100755
index 0000000..7d709e4
Binary files /dev/null and b/sbin/kmodloader differ
diff --git a/sbin/led.sh b/sbin/led.sh
new file mode 100755
index 0000000..d750f06
--- /dev/null
+++ b/sbin/led.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+# (C) 2008 openwrt.org
+
+. /lib/functions.sh
+ACTION=$1
+NAME=$2
+do_led() {
+	local name
+	local sysfs
+	config_get name $1 name
+	config_get sysfs $1 sysfs
+	[ "$name" = "$NAME" -o "$sysfs" = "$NAME" -a -e "/sys/class/leds/${sysfs}" ] && {
+		[ "$ACTION" = "set" ] &&
+			echo 1 >/sys/class/leds/${sysfs}/brightness \
+			|| echo 0 >/sys/class/leds/${sysfs}/brightness
+		exit 0
+	}
+}
+
+[ "$1" = "clear" -o "$1" = "set" ] &&
+	[ -n "$2" ] &&{
+		config_load system
+		config_foreach do_led
+		exit 1
+	}
diff --git a/sbin/logd b/sbin/logd
new file mode 100755
index 0000000..40311b9
Binary files /dev/null and b/sbin/logd differ
diff --git a/sbin/logread b/sbin/logread
new file mode 100755
index 0000000..119676d
Binary files /dev/null and b/sbin/logread differ
diff --git a/sbin/mkswap b/sbin/mkswap
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/mkswap
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/mount_root b/sbin/mount_root
new file mode 100755
index 0000000..a6faf47
Binary files /dev/null and b/sbin/mount_root differ
diff --git a/sbin/mtd b/sbin/mtd
new file mode 100755
index 0000000..c20d795
Binary files /dev/null and b/sbin/mtd differ
diff --git a/sbin/netifd b/sbin/netifd
new file mode 100755
index 0000000..a2f48ce
Binary files /dev/null and b/sbin/netifd differ
diff --git a/sbin/ntpd b/sbin/ntpd
new file mode 100755
index 0000000..ff09f0b
Binary files /dev/null and b/sbin/ntpd differ
diff --git a/sbin/pivot_root b/sbin/pivot_root
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/pivot_root
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/poweroff b/sbin/poweroff
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/poweroff
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/procd b/sbin/procd
new file mode 100755
index 0000000..647e469
Binary files /dev/null and b/sbin/procd differ
diff --git a/sbin/reboot b/sbin/reboot
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/reboot
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/reload_config b/sbin/reload_config
new file mode 100755
index 0000000..c5341cc
--- /dev/null
+++ b/sbin/reload_config
@@ -0,0 +1,14 @@
+#!/bin/sh
+while ! mkdir /var/run/config.check; do sleep 1; done
+trap "trap - EXIT; rm -rf /var/run/config.check; exit" EXIT HUP INT QUIT TERM
+for config in /etc/config/*; do
+	file="${config##*/}"
+	uci show "$file" > /var/run/config.check/"$file"
+done
+MD5FILE=/var/run/config.md5
+[ -f $MD5FILE ] && {
+	for c in `md5sum -c $MD5FILE 2>/dev/null| grep FAILED | cut -d: -f1`; do
+		ubus call service event "{ \"type\": \"config.change\", \"data\": { \"package\": \"$(basename "$c")\" }}"
+	done
+}
+md5sum /var/run/config.check/* > $MD5FILE
diff --git a/sbin/route b/sbin/route
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/route
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/rpcd b/sbin/rpcd
new file mode 100755
index 0000000..ac126ee
Binary files /dev/null and b/sbin/rpcd differ
diff --git a/sbin/setmac b/sbin/setmac
new file mode 100755
index 0000000..ff1ca3d
--- /dev/null
+++ b/sbin/setmac
@@ -0,0 +1,103 @@
+#!/bin/sh
+# Copyright (c) 2013, 2015-2016 The Linux Foundation. All rights reserved
+# Permission to use, copy, modify, and/or 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
+
+. /lib/functions.sh
+
+BT_OFFSET=64
+# parse cmdline
+while [ -n "$1" ]; do
+	case "$1" in
+		-h|--help) HELP=1; break;;
+		-n) NUM="$2"; shift;;
+		-b) BT_TRIM="$2"; shift;;
+		-d) DELETE=1;;
+		-*)
+			echo "Invalid option: $1"
+			ERROR=1
+			break
+		;;
+		*) break;;
+	esac
+	shift
+done
+
+SEED="$@"
+
+[ -z "$SEED" -o -n "$HELP" -o -n "$ERROR" ] && {
+	cat <<EOF
+Usage: $0 [-h] [-d] [-n NUM] [-b BT_TRIM] <boardID>
+
+setmac options:
+	-n	number of MAC@ to set.
+		(default: number of ethX devices in the system)
+	-d	erase the ART sector before setting the MAC@
+	-b	Set BT MAC address as well as Trim value @ offset BT_OFFSET
+	-h	print this help
+
+boardID is used as a seed and expanded through md5sum to create a
+supposedly unique MAC@ suffix. Please use something that is unique
+for every board.
+Example:
+$ setmac DB149-010-N0001
+EOF
+	# If we requested the help flag, then exit normally.
+	# Else, it's probably an error so report it as such.
+	[ -n "$HELP" ] && exit 0
+	exit 1
+}
+
+# By default, fill-in one MAC@ per ethernet interface found in the system
+[ -z ${NUM} ] && NUM=$(ls -d /sys/class/net/eth*|wc -l)
+
+# Expend the seed to get pseudo-random MAC@ per device
+md5=$(echo "${SEED}" | md5sum -)
+NUM=$((${NUM}-1))
+# reduce NUM by 1 to start below loop from 0
+for dev in $(seq 0 ${NUM});do
+	str="${str}\x00\x03\x7f"
+	for byte in 0 2 4;do
+		off=$((${byte}+6*${dev}))
+		str="${str}\x${md5:${off}:2}"
+	done
+done
+if [ -n "${BT_TRIM}" ]; then
+# increaement dev to past last used MAC address from md5
+	dev=$((${dev}+1))
+# reset remaining bits to 0 until BT_OFFSET-1
+	start=$((${off}+2))
+	end=$((${BT_OFFSET}-1))
+	for byte in $(seq ${start} ${end}); do
+	        str="${str}\x00"
+	done
+# set BT MAC address
+	str="${str}\x00\x03\x7f"
+	for byte in 0 2 4;do
+		off=$((${byte}+6*${dev}))
+		str="${str}\x${md5:${off}:2}"
+	done
+# set BT TRIM
+	str="${str}\x${BT_TRIM}"
+fi
+
+echo -n -e ${str} > /tmp/macaddr
+hexdump -C /tmp/macaddr
+
+# If we set the delete flag, let's start by erasing the ART sector
+[ -n "${DELETE}" ] && mtd erase $(find_mtd_part art | sed 's,block,,')
+
+art_partition=$(find_mtd_part art)
+[ -z "$art_partition" ] && art_partition=$(find_mmc_part art)
+
+# Find the partition and set the MAC addresses in the flash
+dd if=/tmp/macaddr of=$art_partition bs=64 conv=sync 2>/dev/null
+rm -f /tmp/macaddr
diff --git a/sbin/snapshot b/sbin/snapshot
new file mode 100755
index 0000000..a0e0ec0
--- /dev/null
+++ b/sbin/snapshot
@@ -0,0 +1,111 @@
+#!/bin/sh
+# Copyright (C) 2014 OpenWrt.org
+
+
+do_snapshot_unpack() {
+	echo "- snapshot -"
+	mkdir /tmp/snapshot
+	cd /tmp/snapshot
+	snapshot_tool read
+	block=`ls block*.tar.gz 2> /dev/null`
+	[ -z "$block" ] || for a in $block; do
+		tar xzf $a -C /
+		rm -f $a
+	done
+}
+
+do_config_unpack() {
+	echo "- config -"
+	snapshot_tool config_read
+	[ -f /tmp/config.tar.gz ] && {
+		tar xzf /tmp/config.tar.gz -C /
+		rm -f /tmp/config.tar.gz
+	}
+}
+
+do_snapshot_push() {
+	cd /volatile
+	tar czf /tmp/snapshot.tar.gz *
+	snapshot_tool write
+	reboot
+}
+
+do_config_push() {
+	cd /volatile
+	tar czf /tmp/config.tar.gz *
+	snapshot_tool config_write
+}
+
+do_snapshot_upgrade() {
+	opkg update
+	[ $? -eq 0 ] || exit 1
+
+	opkg list-upgradable
+	[ $? -eq 0 ] || exit 2
+	
+	UPDATES=`opkg list-upgradable | cut -d" " -f1`
+	[ -z "${UPDATES}" ] && exit 0
+
+	opkg upgrade ${UPDATES}
+	[ $? -eq 0 ] || exit 3
+
+	do_snapshot_push
+	sleep 5
+	reboot
+	sleep 10
+}
+
+do_convert_jffs2() {
+	snapshot_tool write
+	sleep 2
+	reboot -f
+}
+
+do_convert() {
+	. /lib/functions.sh
+	. /lib/upgrade/common.sh
+	ubus call system upgrade
+	touch /tmp/sysupgrade
+	cd /overlay
+	tar czf /tmp/snapshot.tar.gz *
+	kill_remaining TERM
+	sleep 3
+	kill_remaining KILL
+	run_ramfs '. /sbin/snapshot; do_convert_jffs2'
+}
+
+[ -n "$(cat /proc/mounts|grep /overlay|grep jffs2)" ] && {
+case $1 in
+convert)
+	do_convert
+	;;
+esac
+}
+
+[ -d /volatile ] && {
+case $1 in
+push)
+	do_snapshot_push
+	;;
+config)
+	do_config_push
+	;;
+upgrade)
+	do_snapshot_upgrade
+	;;
+info)
+	snapshot_tool info
+	;;
+esac
+}
+
+[ "$SNAPSHOT" = "magic" ] && {
+case $1 in
+unpack)
+	do_snapshot_unpack
+	;;
+config_unpack)
+	do_config_unpack
+	;;
+esac
+}
diff --git a/sbin/snapshot_tool b/sbin/snapshot_tool
new file mode 100755
index 0000000..0126bcd
Binary files /dev/null and b/sbin/snapshot_tool differ
diff --git a/sbin/start-stop-daemon b/sbin/start-stop-daemon
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/start-stop-daemon
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/swconfig b/sbin/swconfig
new file mode 100755
index 0000000..eebbc8c
Binary files /dev/null and b/sbin/swconfig differ
diff --git a/sbin/switch_root b/sbin/switch_root
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/switch_root
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/sysctl b/sbin/sysctl
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/sysctl
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/sysdebug b/sbin/sysdebug
new file mode 100755
index 0000000..d4d15cc
--- /dev/null
+++ b/sbin/sysdebug
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+DEBUG_DIR=/lib/debug
+
+log() {
+	echo -n "    "; printf "%0.s*" $(seq 1 76); echo ""
+	echo "    * cmd:" "$@"
+	echo -n "    "; printf "%0.s*" $(seq 1 76); echo ""
+	eval "$@" | sed 's,^\(.*\),    | \1,'
+	echo -n "    \\"; printf "%0.s-" $(seq 1 75); echo ""
+	echo ""
+}
+
+run_pkg_debug() {
+	local pkg="$1"
+	echo -n "/"; printf "%0.s=" $(seq 1 79); echo ""
+	printf "| Start: ${pkg}\n"
+	echo -n "\\"; printf "%0.s=" $(seq 1 79); echo ""
+	. ${DEBUG_DIR}/${pkg}
+	echo -n "/"; printf "%0.s=" $(seq 1 79); echo ""
+	printf "| End: ${pkg}\n"
+	echo -n "\\"; printf "%0.s=" $(seq 1 79); echo ""
+	echo ""
+}
+
+help() {
+	cat <<EOF
+Syntax: $0 [package]
+
+List of available package (default: all):
+$(ls -1 /lib/debug | sed 's,^\(.*\),    \1,')
+EOF
+}
+
+[ -d "${DEBUG_DIR}" ] || {
+	echo "Can't find any debuggable package"
+	exit 1
+}
+
+for pkg in $(ls -1 ${DEBUG_DIR}); do
+	run_pkg_debug ${pkg}
+done
diff --git a/sbin/sysupgrade b/sbin/sysupgrade
new file mode 100755
index 0000000..f5a11fb
--- /dev/null
+++ b/sbin/sysupgrade
@@ -0,0 +1,373 @@
+#!/bin/sh
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+# initialize defaults
+RAMFS_COPY_BIN=""	# extra programs for temporary ramfs root
+RAMFS_COPY_DATA=""	# extra data files
+export MTD_CONFIG_ARGS=""
+export INTERACTIVE=0
+export VERBOSE=1
+export SAVE_CONFIG=1
+export SAVE_OVERLAY=0
+export DELAY=
+export CONF_IMAGE=
+export CONF_BACKUP_LIST=0
+export CONF_BACKUP=
+export CONF_RESTORE=
+export NEED_IMAGE=
+export HELP=0
+export FORCE=0
+export TEST=0
+export PACKAGE_LIST=0
+
+# parse options
+while [ -n "$1" ]; do
+	case "$1" in
+		-i) export INTERACTIVE=1;;
+		-d) export DELAY="$2"; shift;;
+		-v) export VERBOSE="$(($VERBOSE + 1))";;
+		-q) export VERBOSE="$(($VERBOSE - 1))";;
+		-n) export SAVE_CONFIG=0;;
+		-c) export SAVE_OVERLAY=1;;
+		-b|--create-backup) export CONF_BACKUP="$2" NEED_IMAGE=1; shift;;
+		-r|--restore-backup) export CONF_RESTORE="$2" NEED_IMAGE=1; shift;;
+		-l|--list-backup) export CONF_BACKUP_LIST=1; break;;
+		-p|--list-packages) export PACKAGE_LIST=1; break;;
+		-f) export CONF_IMAGE="$2"; shift;;
+		-F|--force) export FORCE=1;;
+		-T|--test) export TEST=1;;
+		-h|--help) export HELP=1; break;;
+		-*)
+			echo "Invalid option: $1"
+			exit 1
+		;;
+		*) break;;
+	esac
+	shift;
+done
+
+export CONFFILES=/tmp/sysupgrade.conffiles
+export CONF_TAR=/tmp/sysupgrade.tgz
+
+export ARGV="$*"
+export ARGC="$#"
+
+[ -z "$ARGV" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && {
+	cat <<EOF
+Usage: $0 [<upgrade-option>...] [nand] <image file or URL>
+       $0 [-q] [-i] <backup-command> <file>
+
+upgrade-option:
+	-d <delay>   add a delay before rebooting
+	-f <config>  restore configuration from .tar.gz (file or url)
+	-i           interactive mode
+	-c           attempt to preserve all changed files in /etc/
+	-n           do not save configuration over reflash
+	-T | --test
+	             Verify image and config .tar.gz but do not actually flash.
+	-F | --force
+	             Flash image even if image checks fail, this is dangerous!
+	-q           less verbose
+	-v           more verbose
+	-h | --help  display this help
+	
+	nand         NAND base update mechanis, expects .tar with CONTROL, kernel, rootfs 
+	             (devolo modified)
+	             needs to be passed as first non-option directly before file name
+
+backup-command:
+	-b | --create-backup <file>
+	             create .tar.gz of files specified in sysupgrade.conf
+	             then exit. Does not flash an image. If file is '-',
+	             i.e. stdout, verbosity is set to 0 (i.e. quiet).
+	-r | --restore-backup <file>
+	             restore a .tar.gz created with sysupgrade -b
+	             then exit. Does not flash an image. If file is '-',
+	             the archive is read from stdin.
+	-l | --list-backup
+	             list the files that would be backed up when calling
+	             sysupgrade -b. Does not create a backup file.
+	-p | --list-packages
+	             list the packages that were installed by the user.
+	             Does not create a backup file.
+
+EOF
+	exit 1
+}
+
+[ -n "$ARGV" -a -n "$NEED_IMAGE" ] && {
+	cat <<-EOF
+		-b|--create-backup and -r|--restore-backup do not perform a firmware upgrade.
+		Do not specify both -b|-r and a firmware image.
+	EOF
+	exit 1
+}
+
+# prevent messages from clobbering the tarball when using stdout
+[ "$CONF_BACKUP" = "-" ] && export VERBOSE=0
+
+# delos extension
+dump_installed_packages() {
+	# print a list of installed packages which are not in the original image
+	local PACKAGE SEP VERSION TAG FLAGS FLAG
+	opkg list_installed | while read PACKAGE SEP VERSION; do
+		# installed in rootfs image?
+		[ -e "/rom/usr/lib/opkg/info/$PACKAGE.control" ] && continue
+		# not installed as dependency? (has flag 'ok' instead of 'user')
+		opkg status $PACKAGE | grep '^Status:' | while read TAG FLAGS; do
+			for FLAG in $FLAGS; do
+				[ "$FLAG" = "user" ] && echo $PACKAGE && break;
+			done
+		done
+
+	done
+	# and packages that failed to install in the current image
+	[ -e /etc/sysupgrade.packages-install-fail.conf ] && {
+		for PACKAGE in $(cat /etc/sysupgrade.packages-install-fail.conf); do
+			[ -z "$(opkg list-installed $PACKAGE)" ] && echo $PACKAGE
+		done
+	}
+}
+
+add_installed_packages() {
+	dump_installed_packages >/tmp/sysupgrade.packages-installed.conf
+	rm -f /etc/sysupgrade.packages-installed.conf
+	[ -s /tmp/sysupgrade.packages-installed.conf ] && {
+		mv /tmp/sysupgrade.packages-installed.conf /etc
+		echo /etc/sysupgrade.packages-installed.conf
+	}
+}
+
+# devolo: only include config files which are dynamic in delos
+DVL_CONFIGFILE_WHITELIST=" \
+    -e ^/etc$                                    \
+    -e ^/etc/uhttpd.crt$                         \
+    -e ^/etc/uhttpd.key$                         \
+    -e ^/etc/dropbear$                           \
+    -e ^/etc/dropbear/dropbear_dss_host_key$     \
+    -e ^/etc/dropbear/dropbear_rsa_host_key$     \
+    -e ^/etc/shadow$                             \
+    -e ^/etc/config$                             \
+    -e ^/etc/config/                             \
+    -e ^/lib$                                    \
+    -e ^/lib/firmware$                           \
+    -e ^/lib/firmware/plc$                       \
+    -e ^/lib/firmware/plc/user.pib$              \
+    -e ^/lib/firmware/plc/user.pib.tmp$          \
+    -e ^/lib/firmware/plc/user.nvm$              \
+    -e ^/lib/firmware/plc/user.nvm.tmp$          \
+"
+
+sanitize_conffile_list() {
+	local filelist="$1"
+	mv -f "$filelist" "$filelist.tmp"
+	grep $DVL_CONFIGFILE_WHITELIST "$filelist.tmp" > "$filelist"
+	rm -f "$filelist.tmp"
+}
+
+sanitize_config_tarball() {
+	local tarfile="$1"
+	local tmpdir="/tmp/sysupgrade_sanitize_config_tarball"
+	rm -rf "$tmpdir"; mkdir -p "$tmpdir"
+	tar -C "$tmpdir" -xzf "$tarfile"
+	( cd "$tmpdir"; for F in $(find .); do
+		F="${F#.}"
+		[ -n "$F" ] && [ -z $(echo "$F" | grep $DVL_CONFIGFILE_WHITELIST) ] && rm -rf ".$F"
+	done; find . ! -type d > /tmp/sysupgrade_include.txt; tar -czf "$tarfile" -T /tmp/sysupgrade_include.txt; )
+	rm -rf "$tmpdir" /tmp/sysupgrade_include.txt
+}
+# /delos extension
+
+add_uci_conffiles() {
+	local file="$1"
+	( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
+		/etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \
+		-type f -o -type l 2>/dev/null;
+	  opkg list-changed-conffiles ) | sort -u > "$file"
+	add_installed_packages >> "$file"
+	return 0
+}
+
+add_overlayfiles() {
+	local file="$1"
+	if [ -d /overlay/upper ]; then
+		local overlaydir="/overlay/upper"
+	else
+		local overlaydir="/overlay"
+	fi
+	find $overlaydir/etc/ -type f -o -type l | sed \
+		-e 's,^/overlay/,/,' \
+		-e '\,/META_[a-zA-Z0-9]*$,d' \
+		-e '\,/functions.sh$,d' \
+		-e '\,/[^/]*-opkg$,d' \
+	> "$file"
+	return 0
+}
+
+# hooks
+sysupgrade_image_check="platform_check_image"
+[ $SAVE_OVERLAY = 0 -o ! -d /overlay/etc ] && \
+	sysupgrade_init_conffiles="add_uci_conffiles" || \
+	sysupgrade_init_conffiles="add_overlayfiles"
+
+include /lib/upgrade
+
+[ "$ARGC" -ge 2 ] && {
+	(cat /tmp/sysinfo/model | grep "IPQ" ||
+	 cat /tmp/sysinfo/model | grep "ew7479cap" ||
+	 cat /tmp/sysinfo/model | grep "dlan2-2400-ac" ||
+	 cat /tmp/sysinfo/model | grep "ap-dk07.1-c1") && shift && ARGV=$1
+}
+
+do_save_conffiles() {
+	local conf_tar="${1:-$CONF_TAR}"
+
+	[ -z "$(rootfs_type)" ] && {
+		echo "Cannot save config while running from ramdisk."
+		ask_bool 0 "Abort" && exit
+		return 0
+	}
+	run_hooks "$CONFFILES" $sysupgrade_init_conffiles
+	[ -n "$CONF_BACKUP" ] && sanitize_conffile_list "$CONFFILES"
+	ask_bool 0 "Edit config file list" && vi "$CONFFILES"
+
+	v "Saving config files..."
+	[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
+	tar c${TAR_V}zf "$conf_tar" -T "$CONFFILES" 2>/dev/null
+
+	rm -f "$CONFFILES"
+	rm -f /etc/sysupgrade.packages-installed.conf
+}
+
+if [ $CONF_BACKUP_LIST -eq 1 ]; then
+	run_hooks "$CONFFILES" $sysupgrade_init_conffiles
+	sanitize_conffile_list "$CONFFILES"
+	cat "$CONFFILES"
+	rm -f "$CONFFILES"
+	rm -f /etc/sysupgrade.packages-installed.conf
+	exit 0
+fi
+
+if [ $PACKAGE_LIST -eq 1 ]; then
+	dump_installed_packages
+	exit 0
+fi
+
+if [ -n "$CONF_BACKUP" ]; then
+	do_save_conffiles "$CONF_BACKUP"
+	exit $?
+fi
+
+if [ -n "$CONF_RESTORE" ]; then
+	if [ "$CONF_RESTORE" != "-" ] && [ ! -f "$CONF_RESTORE" ]; then
+		echo "Backup archive '$CONF_RESTORE' not found."
+		exit 1
+	fi
+
+	type platform_check_config >/dev/null 2>/dev/null && [ "$CONF_RESTORE" != "-" ] && {
+		platform_check_config "$CONF_RESTORE" || exit 1
+	}
+
+	sanitize_config_tarball "$CONF_RESTORE"
+
+	[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
+	tar -C / -x${TAR_V}zf "$CONF_RESTORE"
+	exit $?
+fi
+
+# original sysupgrade nand did not even try to save config files, even though nand.sh worked with sysupgrade.tgz
+if [ "$1" = "nand" ]; then
+    if ! nand_platform_check "$@"; then
+      if [ $FORCE -eq 1 ]; then 
+          echo 'Image check (nand) failed, but --force given - will update anyway!'
+      else
+          echo "Image check (nand) failed"
+          exit 1
+	  fi
+	fi
+	if [ $TEST -eq 1 ]; then
+	  echo "Image is valid, exiting."
+	  exit 0
+	fi
+	# original sysupgrade nand did not even try to save config files, even though nand.sh worked with sysupgrade.tgz
+    if ask_bool $SAVE_CONFIG "Keep config files over reflash"; then
+		if ! mount | egrep -q "/overlay.*type.*ubifs"; then 
+		  echo "Not running on main system (upgrade or rescue), can't save configuration"
+          export SAVE_CONFIG=0
+		else
+		   do_save_conffiles
+        export SAVE_CONFIG=1
+		fi
+    else
+        export SAVE_CONFIG=0
+    fi
+    nand_upgrade_stage2 $@
+    # should not be reached
+    exit 1
+fi
+
+type platform_check_image >/dev/null 2>/dev/null || {
+	echo "Firmware upgrade is not implemented for this platform."
+	exit 1
+}
+
+for check in $sysupgrade_image_check; do
+	( eval "$check \"\$ARGV\"" ) || {
+		if [ $FORCE -eq 1 ]; then
+			echo "Image check '$check' failed but --force given - will update anyway!"
+			break
+		else
+			echo "Image check '$check' failed."
+			exit 1
+		fi
+	}
+done
+
+if [ -n "$CONF_IMAGE" ]; then
+	case "$(get_magic_word $CONF_IMAGE cat)" in
+		# .gz files
+		1f8b) ;;
+		*)
+			echo "Invalid config file. Please use only .tar.gz files"
+			exit 1
+		;;
+	esac
+	get_image "$CONF_IMAGE" "cat" > "$CONF_TAR"
+	export SAVE_CONFIG=1
+elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then
+	[ $TEST -eq 1 ] || do_save_conffiles
+	export SAVE_CONFIG=1
+else
+	export SAVE_CONFIG=0
+fi
+
+if [ $TEST -eq 1 ]; then
+	exit 0
+fi
+
+run_hooks "" $sysupgrade_pre_upgrade
+
+# Some platforms/devices may want different sysupgrade process, e.g. without
+# killing processes yet or calling ubus system upgrade method.
+# This is needed e.g. on NAND devices where we just want to trigger stage1 at
+# this point.
+if [ "$SAVE_CONFIG" -eq 1 ] && type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then
+	platform_pre_upgrade "$ARGV"
+fi
+
+ubus call system upgrade
+touch /tmp/sysupgrade
+
+if [ ! -f /tmp/failsafe ] ; then
+	kill_remaining TERM
+	sleep 3
+	kill_remaining KILL
+fi
+
+if [ -n "$(rootfs_type)" ]; then
+	v "Switching to ramdisk..."
+	run_ramfs '. /lib/functions.sh; include /lib/upgrade; do_upgrade'
+else
+	do_upgrade
+fi
diff --git a/sbin/ubusd b/sbin/ubusd
new file mode 100755
index 0000000..a534015
Binary files /dev/null and b/sbin/ubusd differ
diff --git a/sbin/uci b/sbin/uci
new file mode 100755
index 0000000..d05a414
Binary files /dev/null and b/sbin/uci differ
diff --git a/sbin/uci2cfg.sh b/sbin/uci2cfg.sh
new file mode 100755
index 0000000..c63af62
--- /dev/null
+++ b/sbin/uci2cfg.sh
@@ -0,0 +1,449 @@
+#!/bin/sh
+# Copyright (c) 2013 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+. /lib/functions.sh
+
+IGNORE_NON_WIFISEC=0
+IS_CURRENT_WIFISEC=0
+# This counter is used to record the correct indices of VAPs in wireless config
+# file.
+TOTAL_NUM_VIFS=0
+
+cfg_append() {
+    if [ "$IGNORE_NON_WIFISEC" -gt 0 ] && [ "$IS_CURRENT_WIFISEC" -eq 0 ]; then
+        return
+    fi
+    echo "$1"
+}
+
+cfg_radio_set() {
+    local radioidx=$(($1 + 1))
+    local cfg="$2"
+    local val="$3"
+    cfg_append "RADIO.$radioidx.$cfg=$val"
+}
+
+
+cfg_radio_add() {
+    local device="$1"
+    local radioidx=$(($2 + 1))
+    local cfg="$3"
+    local key="$4"
+    local def="$5"
+    local val
+
+    config_get val $device $key $def
+    [ -n "$val" ] && cfg_append "RADIO.$radioidx.$cfg=$val"
+}
+
+cfg_vif_set() {
+    local vifidx=$(($1 + 1))
+    local cfg="$2"
+    local val="$3"
+    cfg_append "WLAN.$vifidx.$cfg=$val"
+}
+
+
+cfg_vif_add() {
+    local vif="$1"
+    local vifidx=$(($2 + 1))
+    local cfg="$3"
+    local key="$4"
+    local def="$5"
+    local val
+
+    config_get val $vif $key $def
+    [ -n "$val" ] && cfg_append "WLAN.$vifidx.$cfg=$val"
+}
+
+
+cfg_vifsec_set() {
+    IS_CURRENT_WIFISEC=1
+    cfg_vif_set "$@"
+    IS_CURRENT_WIFISEC=0
+}
+
+
+cfg_vifsec_add() {
+    IS_CURRENT_WIFISEC=1
+    cfg_vif_add "$@"
+    IS_CURRENT_WIFISEC=0
+}
+
+
+scan_wifi() {
+    local cfgfile="$1"
+    DEVICES=
+    config_load "${cfgfile:-wireless}"
+
+    # Create a virtual interface list field for each wifi-device
+    #
+    # input: $1 section: section name of each wifi-device
+    create_vifs_list() {
+        local section="$1"
+        append DEVICES "$section"
+        config_set "$section" vifs ""
+    }
+    config_foreach create_vifs_list wifi-device
+
+    # Append each wifi-iface to the virtual interface list of its associated wifi-device
+    #
+    # input: $1 section: section name of each wifi-iface
+    append_vif() {
+        local section="$1"
+        config_get device "$section" device
+        config_get vifs "$device" vifs
+        append vifs "$section"
+        config_set "$device" vifs "$vifs"
+        # For wifi-iface (VAP), record its index and section name in variable
+        # vifname_#. This will be used later when generating wsplcd config file
+        # to match the VAP with correct index.
+        eval "vifname_${TOTAL_NUM_VIFS}=$section"
+        TOTAL_NUM_VIFS=$(($TOTAL_NUM_VIFS + 1))
+    }
+    config_foreach append_vif wifi-iface
+}
+
+cfg_get_wifi() {
+    local vifidx=0
+    local managed_network=$1
+    local network=""
+
+    scan_wifi
+    for device in $DEVICES; do
+        local radioidx=${device#wifi}
+        local vidx_per_radio=0
+        local channel
+        local wsplcd_unmanaged
+
+        # All of the radio parameters are not used in IEEE1905.1 cloning
+        config_get channel "$device" channel '0'
+	config_get macaddr "$device" macaddr
+        [ "$channel" = "auto" ] && channel=0
+        cfg_radio_set $radioidx Channel $channel
+        config_get disabled "$device" disabled '0'
+        [ "$disabled" = "1" ] && radioena=0 || radioena=1
+        cfg_radio_set $radioidx  RadioEnabled $radioena
+	cfg_radio_set $radioidx  macaddr $macaddr
+        # UCI based targets have different definition of "txpower" from mib based targets
+        cfg_radio_add  $device  $radioidx X_ATH-COM_Powerlevel    txpower
+        cfg_radio_add  $device  $radioidx X_ATH-COM_Rxchainmask   rxchainmask
+        cfg_radio_add  $device  $radioidx X_ATH-COM_Txchainmask   txchainmask
+        # X_ATH-COM_TBRLimit is not implemented in QSDK
+        # cfg_radio_add  $device  $radioidx X_ATH-COM_TBRLimit      tbrlimit
+        cfg_radio_add  $device  $radioidx X_ATH-COM_AMPDUEnabled  AMPDU
+        cfg_radio_add  $device  $radioidx X_ATH-COM_AMPDULimit    AMPDULim
+        # X_ATH-COM_AMPDUFrames is not implemented in QSDK
+        # cfg_radio_add  $device  $radioidx X_ATH-COM_AMPDUFrames   AMPDUFrames
+
+        config_get hwmode "$device" hwmode auto
+        config_get htmode "$device" htmode auto
+
+        case "$hwmode:$htmode" in
+        # The parsing stops at the first match so we need to make sure
+        # these are in the right orders (most generic at the end)
+            *ng:HT20) hwmode=ng20;;
+            *ng:HT40-) hwmode=ng40minus;;
+            *ng:HT40+) hwmode=ng40plus;;
+            *ng:HT40) hwmode=ng40;;
+            *ng:*) hwmode=ng20;;
+            *na:HT20) hwmode=na20;;
+            *na:HT40-) hwmode=na40minus;;
+            *na:HT40+) hwmode=na40plus;;
+            *na:HT40) hwmode=na40;;
+            *na:*) hwmode=na40;;
+            *ac:HT20) hwmode=acvht20;;
+            *ac:HT40+) hwmode=acvht40plus;;
+            *ac:HT40-) hwmode=acvht40minus;;
+            *ac:HT40) hwmode=acvht40;;
+            *ac:HT80) hwmode=acvht80;;
+            *ac:HT160) hwmode=acvht160;;
+            *ac:HT80_80) hwmode=acvht80_80;;
+            *ac:*) hwmode=acvht80;;
+            *b:*) hwmode=b;;
+            *bg:*) hwmode=g;;
+            *g:*) hwmode=g;;
+            *a:*) hwmode=a;;
+            *) hwmode=auto;;
+        esac
+
+        config_get_bool device_unmanaged "$device" wsplcd_unmanaged '0'
+
+        config_get vifs "$device" vifs
+
+        # determine vif name
+        for vif in $vifs; do
+            local vifname
+
+            config_get network "$vif" network
+            [ "$network" = "$managed_network" ] || continue
+
+            config_get_bool disabled "$vif" disabled 0
+            [ "$disabled" = 0 ] ||
+            {
+                config_set "$vif" ifname ""
+                continue
+            }
+
+            [ $vidx_per_radio -gt 0 ] && vifname="ath${radioidx}${vidx_per_radio}" || vifname="ath${radioidx}"
+
+            config_get ifname "$vif" ifname
+            config_set "$vif" ifname "${ifname:-$vifname}"
+            vidx_per_radio=$(($vidx_per_radio + 1))
+        done
+
+        for vif in $vifs; do
+            local bssid enc
+            local beacontype wepencrmode wepauthmode wpaencrmode wpaauthmode wpa2encrmode wpa2authmode
+            local vapidx=0
+            local vifidx
+
+            config_get network "$vif" network
+            [ "$network" = "$managed_network" ] || continue
+
+            # First need to find the correct VAP index for the current vif. This
+            # can be done by looking for the matching interface name from
+            # vifname_${vapidx} variables,
+            while [ $vapidx -lt $TOTAL_NUM_VIFS ]
+            do
+                local name=$(eval "echo \$vifname_${vapidx}")
+                if [ "$name" == "$vif" ];
+                then
+                    vifidx=$vapidx
+                    break
+                fi
+                vapidx=$(($vapidx + 1))
+            done
+
+            [ -n "$vifidx" ] || continue
+
+            config_get_bool disabled "$vif" disabled 0
+            [ "$disabled" = "1" ] && vifena=0 || vifena=1
+            cfg_vif_set $vifidx Enable $vifena
+
+            cfg_vif_set $vifidx X_ATH-COM_RadioIndex $(($radioidx +1))
+            config_get ifname "$vif" ifname
+
+            bssid=`ifconfig $ifname 2>&1 | awk '/HWaddr/ {print \$5}'`
+            cfg_vif_set $vifidx BSSID $bssid
+
+            cfg_vifsec_add $vif $vifidx SSID ssid
+            [ "$hwmode" == "auto" ] && {
+                local is5G=`iwconfig $ifname 2>&1 | grep Frequency:5`
+		[ -n "$is5G" ] && hwmode="na40minus" || hwmode="ng20"
+            }
+            cfg_vifsec_set $vifidx Standard $hwmode
+            cfg_vif_set $vifidx Channel $channel
+
+            config_get enc "$vif" encryption "none"
+            case "$enc" in
+                none)
+                    beacontype="None"
+                ;;
+                *wep*)
+                    beacontype="Basic"
+                    wepencrmode="WEPEncryption"
+                    case "$enc" in
+                        *shared*)
+                            wepauthmode="SharedAuthentication"
+                        ;;
+                        *mixed*)
+                            wepauthmode="Both"
+                        ;;
+                        *)
+                            wepauthmode="None"
+                        ;;
+                    esac
+                ;;
+                *mixed*)
+                    beacontype="WPAand11i"
+                    wpa2authmode="PSKAuthentication"
+                    wpa2encrmode="TKIPandAESEncryption"
+                    case "$enc" in
+                        *psk*)
+                            wpa2authmode="PSKAuthentication"
+                        ;;
+                        *wpa*)
+                            wpa2authmode="EAPAuthentication"
+                        ;;
+                    esac
+                ;;
+                *psk2*)
+                    beacontype="11i"
+                    wpa2authmode="PSKAuthentication"
+                    wpa2encrmode="AESEncryption"
+                ;;
+                *wpa2*)
+                    beacontype="11i"
+                    wpa2authmode="EAPAuthentication"
+                    wpa2encrmode="AESEncryption"
+                ;;
+                *psk*)
+                    beacontype="WPA"
+                    wpaauthmode="PSKAuthentication"
+                    wpaencrmode="TKIPEncryption"
+                ;;
+                *wpa*)
+                    beacontype="WPA"
+                    wpaauthmode="EAPAuthentication"
+                    wpaencrmode="TKIPEncryption"
+                ;;
+                8021x)
+                    beacontype="Basic"
+                    wepencrmode="WEPEncryption"
+                    wepauthmode="EAPAuthentication"
+                ;;
+            esac
+
+
+            # explicit override for crypto setting
+            case "$enc" in
+                *tkip+aes|*tkip+ccmp|*aes+tkip|*ccmp+tkip) crypto="TKIPandAESEncryption";;
+                *aes|*ccmp) crypto="AESEncryption";;
+                *tkip) crypto="TKIPEncryption";;
+            esac
+
+            [ -n "$crypto" ] &&
+            case "$beacontype" in
+                WPA)
+                    wpaencrmode=$crypto
+                ;;
+                11i)
+                    wpa2encrmode=$crypto
+                ;;
+            esac
+
+            cfg_vifsec_set $vifidx BeaconType $beacontype
+            cfg_vifsec_set $vifidx BasicEncryptionModes $wepencrmode
+            cfg_vifsec_set $vifidx BasicAuthenticationMode $wepauthmode
+            cfg_vifsec_set $vifidx WPAEncryptionModes ${wpaencrmode}
+            cfg_vifsec_set $vifidx WPAAuthenticationMode $wpaauthmode
+            cfg_vifsec_set $vifidx IEEE11iEncryptionModes ${wpa2encrmode}
+            cfg_vifsec_set $vifidx IEEE11iAuthenticationMode $wpa2authmode
+
+            config_get key "$vif" key
+            case "$enc" in
+                *wep*)#WEP key
+                    key="${key:-1}"
+                    case "$key" in
+                        [1234])
+                            for idx in 1 2 3 4; do
+                                local zidx
+                                zidx=$(($idx - 1))
+                                config_get ckey "$vif" "key${idx}"
+                                [ -n "$ckey" ] && \
+                                    cfg_vifsec_set $vifidx WEPKey.${idx}.WEPKey $ckey
+                            done
+                            cfg_vifsec_set $vifidx WEPKeyIndex $key
+                        ;;
+                        *)
+                            cfg_vifsec_set $vifidx WEPKey.1.WEPKey $key
+                            cfg_vifsec_set $vifidx WEPKeyIndex 1
+                            [ -n "$wep_rekey" ] && append "$var" "wep_rekey_period=$wep_rekey" "$N"
+                        ;;
+                    esac
+                ;;
+                *)#WPA psk
+                    if [ ${#key} -eq 64 ]; then
+                        cfg_vifsec_set $vifidx PreSharedKey.1.PreSharedKey "$key"
+                    else
+                        cfg_vifsec_set $vifidx KeyPassphrase "$key"
+                    fi
+                ;;
+            esac
+
+            cfg_vif_add $vif $vifidx BasicDataTransmitRates mcast_rate
+
+            config_get wds "$vif" wds
+            case "$wds" in
+                1|on|enabled) wds=1;;
+                *) wds=0;;
+            esac
+
+            config_get mode "$vif" mode
+            case "$mode" in
+                ap)
+                    [ "$wds" = 1 ] && opmode=RootAP || opmode=InfrastructureAccessPoint
+                ;;
+                sta)
+                    [ "$wds" = 1 ] && opmode=WDSStation || opmode=WirelessStation
+                ;;
+                adhoc)
+                    # don't support adhoc
+                ;;
+                wds)
+                    opmode=WDSStation
+                ;;
+            esac
+            cfg_vif_set $vifidx DeviceOperationMode $opmode
+            # RTS and Rragmentation have different definitions from mib based targets
+            cfg_vif_add $vif $vifidx RTS rts
+            cfg_vif_add $vif $vifidx Fragmentation frag
+            cfg_vif_add $vif $vifidx X_ATH-COM_SSIDHide hidden
+            cfg_vif_set $vifidx X_ATH-COM_APModuleEnable $vifena
+            cfg_vif_add $vif $vifidx X_ATH-COM_WPSPin wps_pin "12345670"
+            cfg_vif_set $vifidx X_ATH-COM_VapIfname "$ifname"
+            if [ "$enc" = "none"  ] ; then
+                cfg_vif_set $vifidx X_ATH-COM_WPSConfigured NOTCONFIGURED
+            else
+                cfg_vif_set $vifidx X_ATH-COM_WPSConfigured CONFIGURED
+            fi;
+
+
+            cfg_vif_add $vif $vifidx X_ATH-COM_ShortGI shortgi
+            cfg_vif_add $vif $vifidx X_ATH-COM_CWMEnable 1
+            cfg_vif_add $vif $vifidx X_ATH-COM_WMM wmm
+
+            # Note that disablecoext and HT40Coexist are logical negations of
+            # one another, hence the inverted logic here. libstorage takes
+            # care of mapping back to the UCI setting.
+            config_get_bool disablecoext "$vif" disablecoext
+            if [ "$disablecoext" = 1 ] ; then
+                cfg_vif_set $vifidx X_ATH-COM_HT40Coexist 0
+            else
+                cfg_vif_set $vifidx X_ATH-COM_HT40Coexist 1
+            fi
+
+            if [ "$device_unmanaged" -gt 0 ] ; then
+                wsplcd_unmanaged=1
+            else
+                config_get_bool wsplcd_unmanaged "$vif" wsplcd_unmanaged 0
+            fi
+            cfg_vif_set $vifidx WsplcdUnmanaged $wsplcd_unmanaged
+
+            # HBR is not implemented in QSDK
+            # cfg_vif_set $vifidx X_ATH-COM_HBREnable 0
+            # cfg_vif_set $vifidx X_ATH-COM_HBRPERLow 20
+            # cfg_vif_set $vifidx X_ATH-COM_HBRPERHigh 35
+
+            # Multicast Enhancement is not implemented in QSDK
+            # cfg_vif_set $vifidx X_ATH-COM_MEMode Translate
+            # cfg_vif_set $vifidx X_ATH-COM_MELength 32
+            # cfg_vif_set $vifidx X_ATH-COM_METimer 30000
+            # cfg_vif_set $vifidx X_ATH-COM_METimeout 120000
+            # cfg_vif_set $vifidx X_ATH-COM_MEDropMcast 1
+
+        done
+
+    done
+
+}
+
+case "$1" in
+    "wifisec")
+        IGNORE_NON_WIFISEC=1
+        network_name=$2
+        cfg_get_wifi $network_name
+    ;;
+    "wifi")
+        network_name=$2
+        cfg_get_wifi $network_name
+    ;;
+    *)
+        network_name=$1
+        cfg_get_wifi $network_name
+    ;;
+esac
diff --git a/sbin/udevtrigger b/sbin/udevtrigger
new file mode 100755
index 0000000..9dba823
Binary files /dev/null and b/sbin/udevtrigger differ
diff --git a/sbin/udhcpc b/sbin/udhcpc
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/udhcpc
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/upgraded b/sbin/upgraded
new file mode 100755
index 0000000..5dc9e53
Binary files /dev/null and b/sbin/upgraded differ
diff --git a/sbin/validate_data b/sbin/validate_data
new file mode 100755
index 0000000..b95c6d6
Binary files /dev/null and b/sbin/validate_data differ
diff --git a/sbin/vconfig b/sbin/vconfig
new file mode 120000
index 0000000..7125971
--- /dev/null
+++ b/sbin/vconfig
@@ -0,0 +1 @@
+../bin/busybox
\ No newline at end of file
diff --git a/sbin/wget2nand b/sbin/wget2nand
new file mode 100755
index 0000000..8175a9e
--- /dev/null
+++ b/sbin/wget2nand
@@ -0,0 +1,85 @@
+#!/bin/sh
+# wget2nand
+# This script can be used to download a TGZ file from your build system which
+# contains the files to be installed on the NAND flash on your RB1xx card.
+# The one parameter is the URL of the TGZ file to be downloaded.
+# Licence GPL V2
+# Author david.goodenough@linkchoose.co.uk
+# Based on cf2nand from RB532 support
+. /lib/functions.sh
+
+wget2nand_dir=/tmp/wget2nand
+mnt_kernel=$wget2nand_dir/mnt_kernel
+mnt_rootfs=$wget2nand_dir/mnt_rootfs
+src_rootfs=$wget2nand_dir/rootfs.tgz
+src_kernel=$wget2nand_dir/kernel
+
+[ -d "$wget2nand_dir" ] && {
+	echo "$wget2nand_dir already exists"
+	exit 1
+}
+
+# need to find the wget server from the command line
+url=$1
+[ -z "$url" ] && {
+        echo "No URL specified for image TGZ"
+        echo "Usage : $0 URL"
+        exit 1
+}
+
+url_kernel=$url/openwrt-ar71xx-mikrotik-vmlinux-lzma.elf
+url_rootfs=$url/openwrt-ar71xx-mikrotik-rootfs.tar.gz
+
+mtd_kernel="$(find_mtd_part 'kernel')"
+mtd_rootfs="$(find_mtd_part 'rootfs')"
+[ -z "$mtd_kernel" -o -z "$mtd_rootfs" ] && {
+	echo "Cannot find NAND Flash partitions"
+	exit 1
+}
+
+mkdir "$wget2nand_dir"
+wget $url_kernel -O "$src_kernel" || {
+	echo "Unable to download $url_kernel"
+	exit 1
+}
+
+wget $url_rootfs -O "$src_rootfs" || {
+	echo "Unable to download $url_rootfs"
+	exit 1
+}
+
+echo "Erasing filesystem..."
+mtd erase kernel 2>/dev/null >/dev/null
+mtd erase rootfs 2>/dev/null >/dev/null
+
+echo "Mounting $mtd_rootfs as new root and $mtd_kernel as kernel partition"
+
+mkdir "$mnt_kernel"
+mkdir "$mnt_rootfs"
+mount -t yaffs2 "$mtd_kernel" "$mnt_kernel"
+mount -t yaffs2 "$mtd_rootfs" "$mnt_rootfs"
+
+echo "Copying kernel..."
+cp $src_kernel $mnt_kernel/kernel || {
+       echo "Error occured while copying the kernel"
+       exit 1
+}
+chmod +x $mnt_kernel/kernel
+
+echo "Preparing filesystem..."
+( cd "$mnt_rootfs"; tar xvz -f "$src_rootfs" )
+
+# make sure everything is written before we unmount the partitions
+echo "chmod ugo+x /" > $mnt_rootfs/etc/uci-defaults/set_root_permission
+sync
+ls $mnt_kernel >/dev/null
+ls $mnt_rootfs >/dev/null
+
+echo "Cleaning up..."
+# unmount the partitions and remove the directories into which they were mounted
+umount $mnt_kernel
+umount $mnt_rootfs
+rm -rf $wget2nand_dir
+
+# all done
+echo "Image written, you can now reboot.  Remember to change the boot source to Boot from Nand"
diff --git a/sbin/wifi b/sbin/wifi
new file mode 100755
index 0000000..3fef7ae
--- /dev/null
+++ b/sbin/wifi
@@ -0,0 +1,295 @@
+#!/bin/sh
+# Copyright (C) 2006 OpenWrt.org
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+[ -f /lib/sm_fixup.sh ] && source /lib/sm_fixup.sh || fixup_network_config() {
+	return 0
+}
+
+usage() {
+	cat <<EOF
+Usage: $0 [down|detect|reload|status]
+enables (default), disables or detects a wifi configuration.
+EOF
+	exit 1
+}
+
+ubus_wifi_cmd() {
+	local cmd="$1"
+	local dev="$2"
+
+	json_init
+	[ -n "$2" ] && json_add_string device "$2"
+	ubus call network.wireless "$1" "$(json_dump)"
+}
+
+find_net_config() {(
+	local vif="$1"
+	local cfg
+	local ifname
+
+	config_get cfg "$vif" network
+
+	[ -z "$cfg" ] && {
+		include /lib/network
+		scan_interfaces
+
+		config_get ifname "$vif" ifname
+
+		cfg="$(find_config "$ifname")"
+	}
+	[ -z "$cfg" ] && return 0
+	echo "$cfg"
+)}
+
+
+bridge_interface() {(
+	local cfg="$1"
+	[ -z "$cfg" ] && return 0
+
+	include /lib/network
+	scan_interfaces
+
+	for cfg in $cfg; do
+		config_get iftype "$cfg" type
+		[ "$iftype" = bridge ] && config_get "$cfg" ifname
+		prepare_interface_bridge "$cfg"
+		return $?
+	done
+)}
+
+prepare_key_wep() {
+	local key="$1"
+	local hex=1
+
+	echo -n "$key" | grep -qE "[^a-fA-F0-9]" && hex=0
+	[ "${#key}" -eq 10 -a $hex -eq 1 ] || \
+	[ "${#key}" -eq 26 -a $hex -eq 1 ] || \
+	[ "${#key}" -eq 32 -a $hex -eq 1 ] || {
+		[ "${key:0:2}" = "s:" ] && key="${key#s:}"
+		key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')"
+	}
+	echo "$key"
+}
+
+wifi_fixup_hwmode() {
+	local device="$1"
+	local default="$2"
+	local hwmode hwmode_11n
+
+	config_get channel "$device" channel
+	config_get hwmode "$device" hwmode
+	case "$hwmode" in
+		11ad) hwmode=ad;;
+		11bg) hwmode=bg;;
+		11a) hwmode=a;;
+		11b) hwmode=b;;
+		11g) hwmode=g;;
+		11n*)
+			hwmode_11n="${hwmode##11n}"
+			case "$hwmode_11n" in
+				a|g) ;;
+				default) hwmode_11n="$default"
+			esac
+			config_set "$device" hwmode_11n "$hwmode_11n"
+		;;
+		*)
+			hwmode=
+			if [ "${channel:-0}" -gt 0 ]; then
+				if [ "${channel:-0}" -gt 14 ]; then
+					hwmode=a
+				else
+					hwmode=g
+				fi
+			else
+				hwmode="$default"
+			fi
+		;;
+	esac
+	config_set "$device" hwmode "$hwmode"
+}
+
+_wifi_updown() {
+	for driver in ${DRIVERS}; do (
+		if eval "type pre_${driver}" 2>/dev/null >/dev/null; then
+			eval "pre_${driver}" ${1}
+		fi
+	); done
+
+	for device in ${2:-$DEVICES}; do (
+		config_get disabled "$device" disabled
+		[ "$disabled" = "1" ] && {
+			echo "'$device' is disabled"
+			set disable
+		}
+		config_get iftype "$device" type
+		if eval "type ${1}_$iftype" 2>/dev/null >/dev/null; then
+			eval "scan_$iftype '$device'"
+			eval "${1}_$iftype '$device'" || echo "$device($iftype): ${1} failed"
+		elif [ ! -f /lib/netifd/wireless/$iftype.sh ]; then
+			echo "$device($iftype): Interface type not supported"
+		fi
+	); done
+
+	for driver in ${DRIVERS}; do (
+		if eval "type post_${driver}" 2>/dev/null >/dev/null; then
+			eval "post_${driver}" ${1}
+		fi
+	); done
+}
+
+wifi_updown() {
+	cmd=down
+	[ enable = "$1" ] && {
+		_wifi_updown disable "$2"
+		ubus_wifi_cmd "$cmd" "$2"
+		scan_wifi
+		cmd=up
+	}
+	ubus_wifi_cmd "$cmd" "$2"
+	_wifi_updown "$@"
+}
+
+wifi_recover() {
+	_wifi_updown disable_recover
+	_wifi_updown enable_recover
+}
+
+wifi_reload_legacy() {
+	_wifi_updown "disable" "$1"
+	scan_wifi
+	_wifi_updown "enable" "$1"
+}
+
+wifi_reload() {
+	fixup_network_config
+	ubus call network reload
+	wifi_reload_legacy
+}
+
+wifi_detect() {
+	for driver in ${1:-$DRIVERS}; do (
+		if eval "type detect_$driver" 2>/dev/null >/dev/null; then
+			eval "detect_$driver" || echo "$driver: Detect failed" >&2
+		else
+			echo "$driver: Hardware detection not supported" >&2
+		fi
+	); done
+}
+
+wifi_unload() {
+	_wifi_updown "disable" "$1"
+	for driver in ${1:-$DRIVERS}; do (
+		if eval "type unload_$driver" 2>/dev/null >/dev/null; then
+			eval "unload_$driver" || echo "$driver: unload failed" >&2
+		else
+			echo "$driver: wifi unload not supported" >&2
+		fi
+	); done
+}
+
+wifi_load() {
+	wifi_unload
+	for driver in ${1:-$DRIVERS}; do (
+		if eval "type load_$driver" 2>/dev/null >/dev/null; then
+			eval "load_$driver" || echo "$driver: load failed" >&2
+		else
+			echo "$driver: wifi load not supported" >&2
+		fi
+	); done
+	_wifi_updown "enable" "$1"
+}
+
+start_net() {(
+	local iface="$1"
+	local config="$2"
+	local vifmac="$3"
+
+	[ -f "/var/run/$iface.pid" ] && kill "$(cat /var/run/${iface}.pid)" 2>/dev/null
+	[ -z "$config" ] || {
+		include /lib/network
+		scan_interfaces
+		for config in $config; do
+			setup_interface "$iface" "$config" "" "$vifmac"
+		done
+	}
+)}
+
+set_wifi_up() {
+	local cfg="$1"
+	local ifname="$2"
+	uci_set_state wireless "$cfg" up 1
+	uci_set_state wireless "$cfg" ifname "$ifname"
+}
+
+set_wifi_down() {
+	local cfg="$1"
+	local vifs vif vifstr
+
+	[ -f "/var/run/wifi-${cfg}.pid" ] &&
+		kill "$(cat "/var/run/wifi-${cfg}.pid")" 2>/dev/null
+	uci_revert_state wireless "$cfg"
+	config_get vifs "$cfg" vifs
+	for vif in $vifs; do
+		uci_revert_state wireless "$vif"
+	done
+}
+
+scan_wifi() {
+	local cfgfile="$1"
+	DEVICES=
+	config_cb() {
+		local type="$1"
+		local section="$2"
+
+		# section start
+		case "$type" in
+			wifi-device)
+				append DEVICES "$section"
+				config_set "$section" vifs ""
+				config_set "$section" ht_capab ""
+			;;
+		esac
+
+		# section end
+		config_get TYPE "$CONFIG_SECTION" TYPE
+		case "$TYPE" in
+			wifi-iface)
+				config_get device "$CONFIG_SECTION" device
+				config_get vifs "$device" vifs
+				append vifs "$CONFIG_SECTION"
+				config_set "$device" vifs "$vifs"
+			;;
+		esac
+	}
+	config_load "${cfgfile:-wireless}"
+}
+
+wifi_trap() {
+	for driver in ${1:-$DRIVERS}; do (
+		if eval "type trap_$driver" 2>/dev/null >/dev/null; then
+			eval "trap_$driver" >&2
+		fi
+	); done
+}
+
+DEVICES=
+DRIVERS=
+include /lib/wifi
+scan_wifi
+
+trap 'wifi_trap; exit' INT TERM ABRT QUIT ALRM
+
+case "$1" in
+	down) wifi_updown "disable" "$2";;
+	detect) wifi_detect "$2";;
+	status) ubus_wifi_cmd "status" "$2";;
+	reload) wifi_reload "$2";;
+	reload_legacy) wifi_reload_legacy "$2";;
+	load) wifi_load "$2";;
+	unload) wifi_unload "$2";;
+	recover) wifi_recover "$2";;
+	--help|help) usage;;
+	*) fixup_network_config; ubus call network reload; wifi_updown "enable" "$2";;
+esac
diff --git a/usr/bin/[ b/usr/bin/[
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/[
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/[[ b/usr/bin/[[
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/[[
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/avlninfo.sh b/usr/bin/avlninfo.sh
new file mode 100755
index 0000000..88f1d95
--- /dev/null
+++ b/usr/bin/avlninfo.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+export PLC=$(uci get plc.plc.interface)
+
+utf8() {
+	local s
+	# If valid UTF-8, ok. Else assume CP1252, convert to UTF-8, if not ok use fallback of 8bit unicode codepoints to UTF-8,
+	# if this also fails, take it as it is.
+	# actually HFID allow only ASCII code 32..127 according to HomePlug-AV spec. So this usage is not standard conform!
+	s=$(printf "%s" "$1" | iconv -s -f utf-8 -t utf-8) ||
+	s=$(printf "%s" "$1" | iconv -s -f cp1252 -t utf-8) ||
+	s=$(printf "$(printf "%s" "$1" | hexdump -e '/1 "x00x%02x"' | sed -e 's,x,\\x,g')" | iconv -s -f ucs-2be -t utf-8) ||
+	s=$(printf "%s" "$1")
+	echo "$s"
+}
+
+. /usr/share/libubox/jshn.sh
+
+json_load "$(plcstat -t "$@" | awk -f /usr/share/rpcd/plcstat-t.awk)" 2>/dev/null
+
+json_select devices >/dev/null
+el=1
+while json_select $((el++)) >/dev/null ; do
+	json_get_vars mac
+	mfg="n/a"
+	usr="n/a"
+	net="n/a"
+	nmk="n/a"
+	if plcwait -x -s -w 1 -q "$mac" ; then
+		MAC= MFG= USR= NET= NMK=
+		while IFS=" " read a b; do
+			case "$a" in
+			MAC|\
+			MFG|\
+			USR|\
+			NET|\
+			NMK)
+				eval $a="\$b"
+				;;
+			esac
+		done <<EOF
+$(plcID -t 250 -H "$mac")
+EOF
+		[ "$mac" = "$MAC" ] && {
+			mfg="$MFG"
+			usr="$(utf8 "$USR")"
+			net="$NET"
+			nmk="$NMK"
+		}
+	fi
+	json_add_string mfg "$mfg"
+	json_add_string usr "$usr"
+	json_add_string net "$net"
+	json_add_string nmk "$nmk"
+	json_select ..
+done
+json_select ..
+
+json_dump
diff --git a/usr/bin/awk b/usr/bin/awk
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/awk
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/basename b/usr/bin/basename
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/basename
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/bunzip2 b/usr/bin/bunzip2
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/bunzip2
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/bzcat b/usr/bin/bzcat
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/bzcat
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/c_rehash b/usr/bin/c_rehash
new file mode 100755
index 0000000..7d3f2b1
--- /dev/null
+++ b/usr/bin/c_rehash
@@ -0,0 +1,210 @@
+#!/mnt/src/qsdk/staging_dir/host/bin/perl
+
+# Perl c_rehash script, scan all files in a directory
+# and add symbolic links to their hash values.
+
+my $dir = "/etc/ssl";
+my $prefix = "/usr";
+
+my $openssl = $ENV{OPENSSL} || "openssl";
+my $pwd;
+my $x509hash = "-subject_hash";
+my $crlhash = "-hash";
+my $verbose = 0;
+my $symlink_exists=eval {symlink("",""); 1};
+my $removelinks = 1;
+
+##  Parse flags.
+while ( $ARGV[0] =~ /^-/ ) {
+    my $flag = shift @ARGV;
+    last if ( $flag eq '--');
+    if ( $flag eq '-old') {
+	    $x509hash = "-subject_hash_old";
+	    $crlhash = "-hash_old";
+    } elsif ( $flag eq '-h') {
+	    help();
+    } elsif ( $flag eq '-n' ) {
+	    $removelinks = 0;
+    } elsif ( $flag eq '-v' ) {
+	    $verbose++;
+    }
+    else {
+	    print STDERR "Usage error; try -help.\n";
+	    exit 1;
+    }
+}
+
+sub help {
+	print "Usage: c_rehash [-old] [-h] [-v] [dirs...]\n";
+	print "   -old use old-style digest\n";
+	print "   -h print this help text\n";
+	print "   -v print files removed and linked\n";
+	exit 0;
+}
+
+eval "require Cwd";
+if (defined(&Cwd::getcwd)) {
+	$pwd=Cwd::getcwd();
+} else {
+	$pwd=`pwd`;
+	chomp($pwd);
+}
+
+# DOS/Win32 or Unix delimiter?  Prefix our installdir, then search.
+my $path_delim = ($pwd =~ /^[a-z]\:/i) ? ';' : ':';
+$ENV{PATH} = "$prefix/bin" . ($ENV{PATH} ? $path_delim . $ENV{PATH} : "");
+
+if(! -x $openssl) {
+	my $found = 0;
+	foreach (split /$path_delim/, $ENV{PATH}) {
+		if(-x "$_/$openssl") {
+			$found = 1;
+			$openssl = "$_/$openssl";
+			last;
+		}	
+	}
+	if($found == 0) {
+		print STDERR "c_rehash: rehashing skipped ('openssl' program not available)\n";
+		exit 0;
+	}
+}
+
+if(@ARGV) {
+	@dirlist = @ARGV;
+} elsif($ENV{SSL_CERT_DIR}) {
+	@dirlist = split /$path_delim/, $ENV{SSL_CERT_DIR};
+} else {
+	$dirlist[0] = "$dir/certs";
+}
+
+if (-d $dirlist[0]) {
+	chdir $dirlist[0];
+	$openssl="$pwd/$openssl" if (!-x $openssl);
+	chdir $pwd;
+}
+
+foreach (@dirlist) {
+	if(-d $_ and -w $_) {
+		hash_dir($_);
+	}
+}
+
+sub hash_dir {
+	my %hashlist;
+	print "Doing $_[0]\n";
+	chdir $_[0];
+	opendir(DIR, ".");
+	my @flist = readdir(DIR);
+	closedir DIR;
+	if ( $removelinks ) {
+		# Delete any existing symbolic links
+		foreach (grep {/^[\da-f]+\.r{0,1}\d+$/} @flist) {
+			if(-l $_) {
+				unlink $_;
+				print "unlink $_" if $verbose;
+			}
+		}
+	}
+	FILE: foreach $fname (grep {/\.(pem)|(crt)|(cer)|(crl)$/} @flist) {
+		# Check to see if certificates and/or CRLs present.
+		my ($cert, $crl) = check_file($fname);
+		if(!$cert && !$crl) {
+			print STDERR "WARNING: $fname does not contain a certificate or CRL: skipping\n";
+			next;
+		}
+		link_hash_cert($fname) if($cert);
+		link_hash_crl($fname) if($crl);
+	}
+}
+
+sub check_file {
+	my ($is_cert, $is_crl) = (0,0);
+	my $fname = $_[0];
+	open IN, $fname;
+	while(<IN>) {
+		if(/^-----BEGIN (.*)-----/) {
+			my $hdr = $1;
+			if($hdr =~ /^(X509 |TRUSTED |)CERTIFICATE$/) {
+				$is_cert = 1;
+				last if($is_crl);
+			} elsif($hdr eq "X509 CRL") {
+				$is_crl = 1;
+				last if($is_cert);
+			}
+		}
+	}
+	close IN;
+	return ($is_cert, $is_crl);
+}
+
+
+# Link a certificate to its subject name hash value, each hash is of
+# the form <hash>.<n> where n is an integer. If the hash value already exists
+# then we need to up the value of n, unless its a duplicate in which
+# case we skip the link. We check for duplicates by comparing the
+# certificate fingerprints
+
+sub link_hash_cert {
+		my $fname = $_[0];
+		$fname =~ s/'/'\\''/g;
+		my ($hash, $fprint) = `"$openssl" x509 $x509hash -fingerprint -noout -in "$fname"`;
+		chomp $hash;
+		chomp $fprint;
+		$fprint =~ s/^.*=//;
+		$fprint =~ tr/://d;
+		my $suffix = 0;
+		# Search for an unused hash filename
+		while(exists $hashlist{"$hash.$suffix"}) {
+			# Hash matches: if fingerprint matches its a duplicate cert
+			if($hashlist{"$hash.$suffix"} eq $fprint) {
+				print STDERR "WARNING: Skipping duplicate certificate $fname\n";
+				return;
+			}
+			$suffix++;
+		}
+		$hash .= ".$suffix";
+		if ($symlink_exists) {
+			symlink $fname, $hash;
+			print "link $fname -> $hash\n" if $verbose;
+		} else {
+			open IN,"<$fname" or die "can't open $fname for read";
+			open OUT,">$hash" or die "can't open $hash for write";
+			print OUT <IN>;	# does the job for small text files
+			close OUT;
+			close IN;
+			print "copy $fname -> $hash\n" if $verbose;
+		}
+		$hashlist{$hash} = $fprint;
+}
+
+# Same as above except for a CRL. CRL links are of the form <hash>.r<n>
+
+sub link_hash_crl {
+		my $fname = $_[0];
+		$fname =~ s/'/'\\''/g;
+		my ($hash, $fprint) = `"$openssl" crl $crlhash -fingerprint -noout -in '$fname'`;
+		chomp $hash;
+		chomp $fprint;
+		$fprint =~ s/^.*=//;
+		$fprint =~ tr/://d;
+		my $suffix = 0;
+		# Search for an unused hash filename
+		while(exists $hashlist{"$hash.r$suffix"}) {
+			# Hash matches: if fingerprint matches its a duplicate cert
+			if($hashlist{"$hash.r$suffix"} eq $fprint) {
+				print STDERR "WARNING: Skipping duplicate CRL $fname\n";
+				return;
+			}
+			$suffix++;
+		}
+		$hash .= ".r$suffix";
+		if ($symlink_exists) {
+			symlink $fname, $hash;
+			print "link $fname -> $hash\n" if $verbose;
+		} else {
+			system ("cp", $fname, $hash);
+			print "cp $fname -> $hash\n" if $verbose;
+		}
+		$hashlist{$hash} = $fprint;
+}
+
diff --git a/usr/bin/chkpib b/usr/bin/chkpib
new file mode 100755
index 0000000..64c553f
Binary files /dev/null and b/usr/bin/chkpib differ
diff --git a/usr/bin/clear b/usr/bin/clear
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/clear
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/cmp b/usr/bin/cmp
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/cmp
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/configsync_event_delay.sh b/usr/bin/configsync_event_delay.sh
new file mode 100755
index 0000000..b68e215
--- /dev/null
+++ b/usr/bin/configsync_event_delay.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+my_logger() {
+   logger -t configsync_event_delay "${@}"
+}
+
+
+DELAY=$(uci_get ${MY_SERVICE_NAME} global eventdelay 30)
+my_logger "  copy system configuration to configsync  received parameters: $@  delay = $DELAY"
+
+# add service to servicelist if not in list
+for SERVICE in "$@"; do
+    add_to_list $CS_SERVICELIST ${SERVICE}
+done
+
+sleep $DELAY
+
+SERVICELIST=$(cat $CS_SERVICELIST)
+SERVICE_ENABLE=$(uci_get ${MY_SERVICE_NAME} global enabled 0)
+if [ ${SERVICE_ENABLE} -eq 1 ]; then
+    my_logger "start synchronization"
+    RETVAL=1
+    for CHANGED_FILE in ${SERVICELIST}; do
+        my_logger  "Handle ${CHANGED_FILE} SYSTEM-TO-CONFIGSYNC"
+        if /usr/bin/${MY_SERVICE_NAME}_handler.sh SYSTEM-TO-CONFIGSYNC "${CHANGED_FILE}"; then
+            RETVAL=0
+        fi
+        update_md5sum ${CHANGED_FILE}
+    done
+    if [ $RETVAL -eq 0 ]; then
+#        /usr/bin/${MY_SERVICE_NAME}_handler.sh APPLY
+        my_logger  "Apply configsync changes"
+        killall -USR1 p1905
+    fi
+    my_logger "end synchronization"
+else
+    my_logger "${MY_SERVICE_NAME} service not running -> trigger ignored"
+fi
+>$CS_SERVICELIST
+
diff --git a/usr/bin/configsync_handler.sh b/usr/bin/configsync_handler.sh
new file mode 100755
index 0000000..e452d88
--- /dev/null
+++ b/usr/bin/configsync_handler.sh
@@ -0,0 +1,194 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+my_logger() {
+   logger -t configsync_handler "${@}"
+}
+
+create_local_configuration_file() {
+#if it it not feasable that the uuid changes every  time the service is started make the uuid persistent
+        UUID=$(cat /proc/sys/kernel/random/uuid)
+        if [ "$(uci_get ${MY_SERVICE_NAME} global configured)" = 1 ]; then
+            CONFIGURED="yes"
+        else
+            CONFIGURED="no"
+        fi
+
+        cat > ${CONFIGSYNC_CONFIGURATION_FILE}<<EOF
+[interfaces]
+i0=br-lan,B
+[network]
+interface=br-lan
+almac=${ETH_MAC_ADDR}
+unicasttobridge=on
+[wsc]
+authenticationtypes=Open,WPAPersonal,WPA2Personal
+encryptiontypes=None,AES
+connectiontypes=ESS
+configurationmethods=VirtualPB
+primarydevicetype=NetworkInfrastructure,Bridge
+osversion=1
+devicepasswordid=UserSpecified
+manufacturer=$(eval "$(grep DEVICE_MANUFACTURER= /etc/device_info)"; echo $DEVICE_MANUFACTURER)
+modelname=$(uci_get delos delos device_type)
+devicename=$(eval "$(grep DEVICE_PRODUCT= /etc/device_info)"; echo $DEVICE_PRODUCT)
+modelnumber=9999
+serialnumber=$(uci_get_state delos baptization SerialNumber)
+uuide=${UUID}
+[wscregistrar]
+freqband=CS
+ssid=devolo-WiFi-Passwd
+networkkey=devolo-WiFi
+authenticationtype=WPA2Personal
+encryptiontype=AES
+[configuration]
+registrar=off
+renewonstart=on
+autoconfigsearchtimer=30
+[configsync]
+enabled=yes
+version=1
+configured=${CONFIGURED}
+useplcbutton=off
+priority=0
+domain=$(uci_get ${MY_SERVICE_NAME} global domain 0)
+logging=$(uci_get ${MY_SERVICE_NAME} global logging 0)
+[orange]
+orangetlv=off
+orangetlvm2=off
+orangeexpbackoff=off
+orangeconstbackoff=0
+[debug]
+encryption=on
+messageidcheck=on
+EOF
+}
+
+handle_event()
+{
+    MESSAGE_TYPE=${1}
+    MESSAGE=${2}
+    EVENT=${3}
+
+    my_logger "handle_event: ${MESSAGE_TYPE} '${MESSAGE}', event ${EVENT}"
+
+    # copy configuration to temp configuration
+    wait_stable_config 0 5
+    [ "$event" = configsync_to_system ] &&
+        rm -rf $CS_TEMP_CONFIG_PATH/* $CS_TEMP_CHANGE_PATH/*
+    for CONFIGFILE in ${CS_SERVICES_TO_SYNC}; do
+	# ATT! this export will also export uncommitted changes!
+        uci -q export $CONFIGFILE | uci_tmp import $CS_PREFIX$CONFIGFILE
+    done
+
+    RETVAL=1
+    for CHANGE in ${MESSAGE}; do
+        EXECUTOR=${CHANGE}
+        my_logger  "Got event ${EVENT} for change ${CHANGE}, calling ${EXECUTOR}"
+        if [ -f ${PATH_TO_CONFIGSYNC_EXECUTOR}/${EXECUTOR} ]; then
+            if ${PATH_TO_CONFIGSYNC_EXECUTOR}/${EXECUTOR} ${EVENT} ${CHANGE}; then
+                RETVAL=0
+            fi
+        else
+            if [ "${CHANGE}" != "${MESSAGE_TYPE}" ]; then
+                my_logger  "Can not handle change ${CHANGE}!"
+            fi
+        fi
+    done
+
+    # check for changed configfiles and import to system configuration
+    if [ -s $CS_IMPORTSERVICELIST ]; then
+        # wait until configfiles are not in use
+        wait_stable_config 0 5
+        IMPORTSERVICELIST=$(cat $CS_IMPORTSERVICELIST)
+        for CONFIGFILE in ${IMPORTSERVICELIST}; do
+            uci revert ${CONFIGFILE}
+            uci_tmp export ${CS_PREFIX}${CONFIGFILE} | uci import ${CONFIGFILE}
+            update_md5sum ${CONFIGFILE}
+        done
+        >$CS_IMPORTSERVICELIST
+    fi
+    return $RETVAL
+}
+
+start_p1905()
+{
+    my_logger ">>> start_p1905()"
+
+    # wait on first start after device boot
+    STARTDELAY=$(uci_get ${MY_SERVICE_NAME} global startdelay 0)
+    EXTENSIONDELAY=$(uci_get ${MY_SERVICE_NAME} global extensiondelay 20)
+    wait_stable_config ${STARTDELAY} ${EXTENSIONDELAY}
+
+    for SERVICE in ${CS_SERVICES_TO_SYNC}; do
+        update_md5sum ${SERVICE}
+    done
+
+    rm -f /tmp/cs_omit_wireless
+    killall p1905
+    # call init() for all files (not directories!) in PATH_TO_CONFIGSYNC_EXECUTOR
+    find ${PATH_TO_CONFIGSYNC_EXECUTOR} -type f -maxdepth 1 -exec sh -c "echo \"Call initialization of {} ...\"; {} init" \;
+
+    create_local_configuration_file
+    /usr/sbin/p1905 -f ${CONFIGSYNC_CONFIGURATION_FILE} | while read MESSAGE_TYPE MESSAGE
+    do
+        case ${MESSAGE_TYPE} in
+            AUTOCONFIG-FAILED)
+                my_logger  "Message ${MESSAGE_TYPE} ${MESSAGE} ignored"
+                ;;
+            NEW-AP-SETTINGS)
+                my_logger  "Message ${MESSAGE_TYPE} ${MESSAGE} ignored"
+                ;;
+            CONFIGSYNC-SET-CONFIGURED)
+                my_logger  "Message ${MESSAGE_TYPE} ${MESSAGE} setting configsync state to configured"
+                uci_set configsync global configured '1'
+                uci_commit configsync
+                create_local_configuration_file
+                ;;
+            NEW-CONFIGSYNC-SETTINGS)
+                # kill pending events from own website
+                killall configsync_event_delay.sh
+                >$CS_SERVICELIST
+                handle_event ${MESSAGE_TYPE} "${MESSAGE}" configsync_to_system
+                reload_config
+                ;;
+            CONFIGSYNC-DYNAMIC-UPDATE)
+                handle_event ${MESSAGE_TYPE} "${MESSAGE}" dynamic_update
+                ;;
+            CONFIGSYNC-RESET)
+                my_logger  "Message ${MESSAGE_TYPE} ${MESSAGE} received"
+                rm $CS_CONFIGURATION_PATH/*
+                find ${PATH_TO_CONFIGSYNC_EXECUTOR} -type f -maxdepth 1 -exec sh -c "echo \"Call initialization of {} ...\"; {} init" \;
+                ;;
+            VENDOR-MESSAGE)
+                my_logger "Vendor message received"
+                # cut off the VENDOR-MESSAGE prefix, decode base64 data and call service handler
+                /usr/bin/configsync_vs_handler.sh $(echo "$MESSAGE" | cut -d' ' -f2 | openssl enc -base64 -d)
+                ;;
+        *)
+                my_logger  "Unknown message ${MESSAGE_TYPE} ${MESSAGE}"
+                ;;
+        esac
+    done
+}
+
+case ${1} in
+    SYSTEM-TO-CONFIGSYNC)
+        handle_event NEW-SYSTEM-CONFIG-SETTINGS "${2}" system_to_configsync
+        ;;
+    APPLY)
+        my_logger  "APPLY) Apply configsync changes"
+        killall -USR1 p1905
+        ;;
+    STOP)
+        my_logger  "STOP) Stop p1905"
+        killall p1905 2>/dev/null
+        ;;
+    START)
+        ETH_MAC_ADDR=${2}
+        my_logger  "START) Start p1905 with ${ETH_MAC_ADDR}"
+        start_p1905
+        ;;
+esac
diff --git a/usr/bin/configsync_vs_handler.sh b/usr/bin/configsync_vs_handler.sh
new file mode 100755
index 0000000..946ec01
--- /dev/null
+++ b/usr/bin/configsync_vs_handler.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+
+_logger() {
+	/usr/bin/logger -t configsync_vs_handler.sh: "$@"
+}
+
+service_quota() {
+	local EVENT=$1
+	local MAC=$2
+	local REMAINING=$3
+	case $EVENT in
+		assoc|disassoc)
+			/usr/bin/station_quota.sh --event "${EVENT}_remote" --mac "${MAC}" --remaining "${REMAINING}"
+		;;
+		list)
+			/usr/bin/station_quota.sh --event "${EVENT}_remote"
+		;;
+		*)
+			_logger "unknown event '$EVENT'"
+		;;
+	esac
+}
+
+json_init
+json_load "$1"
+json_get_var service service
+json_get_var event event
+json_get_var mac mac
+json_get_var remaining remaining
+json_dump
+
+case $service in
+	quota)
+		service_quota $event $mac $remaining
+		;;
+	*)
+		_logger "unknown service '$service'"
+		;;
+esac
diff --git a/usr/bin/crontab b/usr/bin/crontab
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/crontab
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/curl b/usr/bin/curl
new file mode 100755
index 0000000..97c16f8
Binary files /dev/null and b/usr/bin/curl differ
diff --git a/usr/bin/cut b/usr/bin/cut
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/cut
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/dbclient b/usr/bin/dbclient
new file mode 120000
index 0000000..54813a1
--- /dev/null
+++ b/usr/bin/dbclient
@@ -0,0 +1 @@
+../sbin/dropbear
\ No newline at end of file
diff --git a/usr/bin/dirname b/usr/bin/dirname
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/dirname
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/dlanApp2Backend-device b/usr/bin/dlanApp2Backend-device
new file mode 100755
index 0000000..35a9ed7
Binary files /dev/null and b/usr/bin/dlanApp2Backend-device differ
diff --git a/usr/bin/dlanApp2Backend-plcnet b/usr/bin/dlanApp2Backend-plcnet
new file mode 100755
index 0000000..271e6be
Binary files /dev/null and b/usr/bin/dlanApp2Backend-plcnet differ
diff --git a/usr/bin/dropbearkey b/usr/bin/dropbearkey
new file mode 120000
index 0000000..54813a1
--- /dev/null
+++ b/usr/bin/dropbearkey
@@ -0,0 +1 @@
+../sbin/dropbear
\ No newline at end of file
diff --git a/usr/bin/du b/usr/bin/du
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/du
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/env b/usr/bin/env
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/env
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/expr b/usr/bin/expr
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/expr
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/fetch_radio_information.sh b/usr/bin/fetch_radio_information.sh
new file mode 100755
index 0000000..735ce98
--- /dev/null
+++ b/usr/bin/fetch_radio_information.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+. /usr/share/libubox/jshn.sh
+
+createRadioInformation() {
+	local radio=$1
+	local interface=$2
+	local channel
+	local frequency
+	local ssid
+	local config_data
+
+	config_data="$(ubus call uci get {\"config\":\"wireless\",\"section\":\"$radio\"})"
+	#Device does not have the radio
+	if [ -z "$config_data" ]; then
+		return
+	fi
+
+	#Gather information from iwinfo and uci
+	json_load "$(ubus call iwinfo info {\"device\":\"$interface\"})"
+	json_get_var channel "channel"
+	json_get_var frequency "frequency"
+	json_get_var ssid "ssid"
+
+	json_load "$config_data"
+	json_get_values config "values"
+	#We will add the config via sed to the json object. There it needs the name config.
+	#Furthermore, delete the first { and the last } to have the right number of brackets
+	config=$(json_dump | sed 's/values/config/g' | sed 's/^{//' | sed '$s/}//' )
+
+	#Add information to result
+	json_init
+	json_load "$result"
+	json_add_object $radio
+	json_add_int frequency $frequency
+	json_add_int channel $channel
+	json_add_string ssid $ssid
+
+	#Now the Object has an empty config. Create the json string and then replace the empty config string with the filled one
+	json_add_object config
+	result=$(echo $(json_dump)  | sed "s/\"config\":\ *{\ *}/${config}/g" )
+}
+
+result="{}"
+createRadioInformation "wifi0" "ath0"
+createRadioInformation "wifi1" "ath1"
+echo "$result"
diff --git a/usr/bin/find b/usr/bin/find
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/find
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/free b/usr/bin/free
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/free
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/ftpget b/usr/bin/ftpget
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/ftpget
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/ftpput b/usr/bin/ftpput
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/ftpput
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/fwuagent b/usr/bin/fwuagent
new file mode 100755
index 0000000..ea187c6
Binary files /dev/null and b/usr/bin/fwuagent differ
diff --git a/usr/bin/getpib b/usr/bin/getpib
new file mode 100755
index 0000000..4ce4d12
Binary files /dev/null and b/usr/bin/getpib differ
diff --git a/usr/bin/head b/usr/bin/head
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/head
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/hexdump b/usr/bin/hexdump
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/hexdump
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/hostid b/usr/bin/hostid
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/hostid
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/hpavkey b/usr/bin/hpavkey
new file mode 100755
index 0000000..5099f15
Binary files /dev/null and b/usr/bin/hpavkey differ
diff --git a/usr/bin/iconv b/usr/bin/iconv
new file mode 100755
index 0000000..c48ade3
Binary files /dev/null and b/usr/bin/iconv differ
diff --git a/usr/bin/id b/usr/bin/id
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/id
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/ipcs b/usr/bin/ipcs
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/ipcs
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/iwinfo b/usr/bin/iwinfo
new file mode 100755
index 0000000..bf24ab1
Binary files /dev/null and b/usr/bin/iwinfo differ
diff --git a/usr/bin/jshn b/usr/bin/jshn
new file mode 100755
index 0000000..19a2145
Binary files /dev/null and b/usr/bin/jshn differ
diff --git a/usr/bin/jsonfilter b/usr/bin/jsonfilter
new file mode 100755
index 0000000..73c74e3
Binary files /dev/null and b/usr/bin/jsonfilter differ
diff --git a/usr/bin/killall b/usr/bin/killall
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/killall
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/less b/usr/bin/less
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/less
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/logger b/usr/bin/logger
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/logger
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/md5sum b/usr/bin/md5sum
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/md5sum
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/mkfifo b/usr/bin/mkfifo
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/mkfifo
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/modpib b/usr/bin/modpib
new file mode 100755
index 0000000..63c304f
Binary files /dev/null and b/usr/bin/modpib differ
diff --git a/usr/bin/nc b/usr/bin/nc
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/nc
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/nslookup b/usr/bin/nslookup
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/nslookup
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/nwinfo.sh b/usr/bin/nwinfo.sh
new file mode 100755
index 0000000..8d11193
--- /dev/null
+++ b/usr/bin/nwinfo.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+PLC=$(uci get plc.plc.interface)
+/usr/bin/plctool -i "$PLC" -m "$@"  2>/dev/null | awk -f /usr/share/rpcd/nwinfo.awk
diff --git a/usr/bin/openssl b/usr/bin/openssl
new file mode 100755
index 0000000..60ec48b
Binary files /dev/null and b/usr/bin/openssl differ
diff --git a/usr/bin/parental_control.sh b/usr/bin/parental_control.sh
new file mode 100755
index 0000000..445c7a3
--- /dev/null
+++ b/usr/bin/parental_control.sh
@@ -0,0 +1,282 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+SCRIPT=$0
+# the lock is meant for ebtables, and other scripts are also
+# using ebtables. Needs clean up, maybe move to functions.sh, TBD?
+LOCKFILE=/tmp/ebtables.lock
+LOGFILE=/tmp/log/parental_control.log
+PACKAGE=parental_control
+# variable to remember if parental control is enabled
+parental_control_enabled=0
+
+# uncomment the next line if matching rules should be logged to syslog
+# (for debugging), needs watchers extension
+#local EBLOG=--log
+
+_log()
+{
+    if [ ${LOGGING} -eq 1 ]; then
+        local ts=$(date)
+        echo "$ts $@" >> ${LOGFILE}
+    fi
+}
+
+_exit()
+{
+    local rc=$1
+    lock -u ${LOCKFILE}
+    exit ${rc}
+}
+
+_cron_restart()
+{
+    /etc/init.d/cron restart > /dev/null
+}
+
+_add_cron_script()
+{
+    (crontab -l ; echo "$1") | sort -u | crontab -
+}
+
+_rm_cron_script()
+{
+    crontab -l | grep -v "$1" | sort -u | crontab -
+}
+
+_rm_and_add_cron_script()
+{
+    (crontab -l | grep -v "$1"; [ -n "$2" ] && echo "$2") | sort -u | crontab -
+}
+
+_format_dow_list()
+{
+    local dow=$1
+    local flist=""
+    local day
+    for day in ${dow}
+    do
+        if [ ! -z ${flist} ]; then
+            flist="${flist},"
+        fi
+        flist="${flist}${day:0:3}"
+    done
+    echo ${flist}
+}
+
+_shift_dow_list_by_one_day()
+{
+    local dow=$1
+    local flist=""
+    local day
+    for day in $1
+    do
+	if [ ! -z ${flist} ]; then
+            flist="${flist},"
+        fi
+        case $day in
+            Mon*)
+                flist="${flist}Tue"
+            ;;
+            Tue*)
+                flist="${flist}Wed"
+            ;;
+            Wed*)
+                flist="${flist}Thu"
+            ;;
+            Thu*)
+                flist="${flist}Fri"
+            ;;
+            Fri*)
+                flist="${flist}Sat"
+            ;;
+            Sat*)
+                flist="${flist}Sun"
+            ;;
+            Sun*)
+                flist="${flist}Mon"
+            ;;
+        esac
+    done
+
+    echo "$flist"
+}
+
+_enable_parental_control()
+{
+    local entry=$1
+    local enabled starttime stoptime dow
+
+    config_get enabled $entry enabled 0
+    [ "$enabled" -eq 0 ] && return 0
+    config_get starttime $entry starttime
+    [ -z "$starttime" ] && return 1
+    config_get stoptime $entry stoptime
+    [ -z "$stoptime" ] && return 1
+    config_get dow $entry daysofweek
+    [ -z "$dow" ] && return 1
+    
+    local fdow=$(_format_dow_list "$dow")
+
+    # If it shall stop on the same day at 00:00, 24:00 is the transition to the following day, if this is the case,
+    # the days of the weeks have to be incremented by one
+    if [ "${stoptime}" == "24:00" ]; then
+        fdow_stop=$(_shift_dow_list_by_one_day "$dow")
+        stoptime="0:00"
+    else
+        fdow_stop=${fdow}
+    fi
+
+    local stop_cron_entry="$(echo ${stoptime} | awk -F':' '{print $2, $1}') * * ${fdow_stop} ${SCRIPT} check" # ${entry}"
+    echo "${stop_cron_entry}"
+
+    if [[ $starttime != $stoptime ]]                             
+    then                                                         
+        local start_cron_entry="$(echo ${starttime} | awk -F':' '{print $2, $1}') * * ${fdow} ${SCRIPT} check" # ${entry}"
+        echo "${start_cron_entry}"
+    fi
+
+    return 0
+}
+
+_create_cron_entries()
+{
+    config_foreach _enable_parental_control entry
+}
+
+replace_rules() {
+    local mac macs="$1"
+    ebtables -F i-parental-control
+    ebtables -F o-parental-control
+    for mac in $macs; do
+        ebtables -A i-parental-control -s $mac -j DROP $EBLOG
+        ebtables -A o-parental-control -d $mac -j DROP $EBLOG
+    done
+}
+
+create_chains() {
+    ebtables -N i-parental-control -P RETURN 2>/dev/null || return 0
+    ebtables -N o-parental-control -P RETURN 2>/dev/null || return 0
+    ebtables -A INPUT   -i ath+ -j i-parental-control $EBLOG
+    ebtables -A FORWARD -i ath+ -j i-parental-control $EBLOG
+    ebtables -A FORWARD -o ath+ -j o-parental-control $EBLOG
+    ebtables -A OUTPUT  -o ath+ -j o-parental-control $EBLOG
+}
+
+delete_chains() {
+    ebtables -D INPUT   -i ath+ -j i-parental-control $EBLOG 2>/dev/null
+    ebtables -D FORWARD -i ath+ -j i-parental-control $EBLOG 2>/dev/null
+    ebtables -D FORWARD -o ath+ -j o-parental-control $EBLOG 2>/dev/null
+    ebtables -D OUTPUT  -o ath+ -j o-parental-control $EBLOG 2>/dev/null
+    ebtables -X i-parental-control 2>/dev/null
+    ebtables -X o-parental-control 2>/dev/null
+}
+
+check_cron_status()
+{
+    if [ ${parental_control_enabled} -eq 1 ]; then
+        _rm_and_add_cron_script "${SCRIPT}" "$(_create_cron_entries)"
+    else
+        _rm_cron_script "${SCRIPT}"
+    fi
+    _cron_restart
+}
+
+handle_global() {
+    local cfg="$1"
+    config_get_bool parental_control_enabled "$cfg" enabled 0
+    config_get_bool LOGGING "$cfg" logging 0
+}
+
+handle_entry() {
+    local cfg="$1"; shift
+    local curTime="$1"; shift
+    local weekday="$1"; shift
+    local blocked_var="$1"; shift
+    local allowed_var="$1"; shift
+    local list_var
+    local entry_enabled starttime stoptime stations dow
+
+    config_get_bool entry_enabled "$cfg" enabled 0
+    # Check if current entry is enabled
+    [ "$entry_enabled" -eq 0 ] && return 0
+
+    # lowercase:
+    stations="$(config_get "$cfg" stations | tr ABCDEF abcdef)"
+    config_get dow "$cfg" daysofweek
+    [ -z "$dow" ] && return 1
+    config_get starttime "$cfg" starttime
+    [ -z "$starttime" ] && return 1
+    config_get stoptime "$cfg" stoptime
+    [ -z "$stoptime" ] && return 1
+
+    # Check if current entry is relevant for today
+    echo "$dow" | grep "$weekday" > /dev/null || return 0
+
+    #remove :, so that we can make easy integer comparison
+    starttime=${starttime//:}
+    stoptime=${stoptime//:}
+
+    if [ $curTime -ge $starttime ] && [ $curTime -lt $stoptime ]; then
+        list_var=$allowed_var
+    else
+        list_var=$blocked_var
+    fi
+
+    # add or delete rules to the list of stations
+    local st
+    for st in $stations; do
+        ! list_contains $list_var $st && append $list_var $st
+    done
+}
+
+# evaluate if a MAC address is allowed at the current time of day
+check_and_apply_parental_control_state() {
+    local curTime=$(date "+%k%M")
+    local weekday=$(date "+%A")
+
+    if [ "$parental_control_enabled" -eq 0 ]; then
+        delete_chains
+    else
+        local blocked_macs allowed_macs st stations
+        create_chains
+        # collect which MACs are allowed or blocked by a config entry in separate lists
+        config_foreach handle_entry entry "$curTime" "$weekday" blocked_macs allowed_macs
+        # allowed wins
+        for st in $blocked_macs; do
+            ! list_contains allowed_macs $st && append stations $st
+        done
+        replace_rules "$stations"
+    fi
+}
+
+usage()
+{
+    echo ""
+    echo "$0 cron|check|help"
+    echo ""
+    echo "    UCI Config File: /etc/config/${PACKAGE}"
+    echo ""
+    echo "    cron: Create cronjob entries."
+    echo "    check: Check if stations should get access to the network or should be blocked"
+    echo "    help: This description."
+    echo ""
+}
+
+###############################################################################
+# MAIN
+###############################################################################
+config_load "${PACKAGE}"
+config_foreach handle_global global
+
+_log ${SCRIPT} $1 $2
+lock ${LOCKFILE}
+
+case "$1" in
+    cron) check_cron_status ;;
+    check) check_and_apply_parental_control_state;;
+    help|--help|-h|*) usage ;;
+esac
+
+_exit 0
diff --git a/usr/bin/passwd b/usr/bin/passwd
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/passwd
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/pgrep b/usr/bin/pgrep
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/pgrep
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/plcID b/usr/bin/plcID
new file mode 100755
index 0000000..4133e22
Binary files /dev/null and b/usr/bin/plcID differ
diff --git a/usr/bin/plcgpio b/usr/bin/plcgpio
new file mode 100755
index 0000000..c68d063
Binary files /dev/null and b/usr/bin/plcgpio differ
diff --git a/usr/bin/plchost b/usr/bin/plchost
new file mode 100755
index 0000000..f7aa43d
Binary files /dev/null and b/usr/bin/plchost differ
diff --git a/usr/bin/plcstat b/usr/bin/plcstat
new file mode 100755
index 0000000..991d15a
Binary files /dev/null and b/usr/bin/plcstat differ
diff --git a/usr/bin/plctool b/usr/bin/plctool
new file mode 100755
index 0000000..03fba19
Binary files /dev/null and b/usr/bin/plctool differ
diff --git a/usr/bin/plcwait b/usr/bin/plcwait
new file mode 100755
index 0000000..bb2e876
Binary files /dev/null and b/usr/bin/plcwait differ
diff --git a/usr/bin/printf b/usr/bin/printf
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/printf
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/readlink b/usr/bin/readlink
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/readlink
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/reset b/usr/bin/reset
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/reset
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/scp b/usr/bin/scp
new file mode 120000
index 0000000..54813a1
--- /dev/null
+++ b/usr/bin/scp
@@ -0,0 +1 @@
+../sbin/dropbear
\ No newline at end of file
diff --git a/usr/bin/seq b/usr/bin/seq
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/seq
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/setpib b/usr/bin/setpib
new file mode 100755
index 0000000..2b661b6
Binary files /dev/null and b/usr/bin/setpib differ
diff --git a/usr/bin/setsid b/usr/bin/setsid
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/setsid
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/sha256sum b/usr/bin/sha256sum
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/sha256sum
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/sort b/usr/bin/sort
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/sort
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/ssh b/usr/bin/ssh
new file mode 120000
index 0000000..54813a1
--- /dev/null
+++ b/usr/bin/ssh
@@ -0,0 +1 @@
+../sbin/dropbear
\ No newline at end of file
diff --git a/usr/bin/station_quota.sh b/usr/bin/station_quota.sh
new file mode 100755
index 0000000..88b55aa
--- /dev/null
+++ b/usr/bin/station_quota.sh
@@ -0,0 +1,640 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+. /lib/delos-functions.sh
+
+PACKAGE="station_quota"
+VERSION="v2.0.0"
+
+# the lock is meant for ebtables, and other scripts are also
+# using ebtables. Needs clean up, maybe move to functions.sh, TBD?
+LOCKFILE=/tmp/ebtables.lock
+
+EVENTFILE=/tmp/station_quota_events.txt
+CONFIG_SYNC_RETRIES=3
+CONFIG_SYNC_DUPLICATE_TIME=2
+CONFIG_SYNC_KEEP_ENTRIES=100
+
+# ubus timer namespace prefix
+TIMER_PREFIX=quota-
+
+##### logging
+
+function logger() {
+    if [ $CFG_LOGGING -eq 1 ]; then
+        command logger -t "$PACKAGE" "$@"
+    fi
+}
+
+##### ebtables handling
+
+ebt_create_chains() {
+    ebtables -N "i-${PACKAGE}" -P RETURN 2>/dev/null || return 0
+    ebtables -N "o-${PACKAGE}" -P RETURN 2>/dev/null || return 0
+    ebtables -A INPUT   -i ath+ -j "i-${PACKAGE}"
+    ebtables -A FORWARD -i ath+ -j "i-${PACKAGE}"
+    ebtables -A FORWARD -o ath+ -j "o-${PACKAGE}"
+    ebtables -A OUTPUT  -o ath+ -j "o-${PACKAGE}"
+}
+
+ebt_delete_chains() {
+    ebtables -D INPUT   -i ath+ -j "i-${PACKAGE}" 2>/dev/null
+    ebtables -D FORWARD -i ath+ -j "i-${PACKAGE}" 2>/dev/null
+    ebtables -D FORWARD -o ath+ -j "o-${PACKAGE}" 2>/dev/null
+    ebtables -D OUTPUT  -o ath+ -j "o-${PACKAGE}" 2>/dev/null
+    ebtables -X "i-${PACKAGE}" 2>/dev/null
+    ebtables -X "o-${PACKAGE}" 2>/dev/null
+}
+
+ebt_add_macs_to_blacklist() {
+    local macs="$1"
+    
+    local mac
+    for mac in $macs; do
+        logger "Adding $mac to blacklist"
+        ebtables -D "i-${PACKAGE}" -s "$mac" -j DROP 2>/dev/null
+        ebtables -A "i-${PACKAGE}" -s "$mac" -j DROP
+        ebtables -D "o-${PACKAGE}" -d "$mac" -j DROP 2>/dev/null
+        ebtables -A "o-${PACKAGE}" -d "$mac" -j DROP
+    done
+}
+
+ebt_remove_macs_from_blacklist() {
+    local macs="$1"
+    
+    local mac
+    for mac in $macs; do
+        logger "Removing $mac from blacklist"
+        ebtables -D "i-${PACKAGE}" -s "$mac" -j DROP 2>/dev/null
+        ebtables -D "o-${PACKAGE}" -d "$mac" -j DROP 2>/dev/null
+    done
+}
+
+##### timer handling
+
+timer_to_mac() {
+    local timer_id="$1"
+    
+    echo "${timer_id#${TIMER_PREFIX}}"
+}
+
+mac_to_timer() {
+    local mac="$1"
+    
+    echo "${TIMER_PREFIX}${mac}"
+}
+
+# High-level code should not call this directly. Call quota_operation instead in order to
+# ensure proper blacklist handling.
+timer_operation() {
+    local operation="$1"
+    local mac="$2"
+    local arg1="$3"
+    local arg2="$4"
+    local arg3="$5"
+
+    local timer_id=$(mac_to_timer "$mac")
+    
+    # logger "Timer operation '$operation' for '$mac' (arg1='$arg1', arg2='$arg2', arg3='$arg3')"
+    
+    case "$operation" in
+        list)
+            echo $(ubus call timer "$operation" "{\"id\":\"${timer_id}\"}" 2>/dev/null | jsonfilter -e "@.ids[@~\"^${TIMER_PREFIX}\"]")
+            ;;
+        query)
+            echo $(ubus call timer "$operation" "{\"id\":\"${timer_id}\"}" 2>/dev/null)
+            ;;
+        getvar)
+            local var="$arg1"
+            echo $(ubus call timer query "{\"id\":\"${timer_id}\"}" 2>/dev/null | jsonfilter -e '$.'"$var" 2>/dev/null)
+            ;;
+        pause|resume|remove)
+            ubus call timer "$operation" "{\"id\":\"${timer_id}\"}" 2>/dev/null
+            ;;
+        new)
+            ubus call timer remove "{\"id\":\"${timer_id}\"}" 2>/dev/null
+
+            local timeout="${arg1:-0}"
+            local remaining="${arg2:-${timeout}}"
+            local start=$(( $timeout - $remaining ))
+            [ $start -lt 0 ] && start=0
+            
+            ubus call timer add "{\"id\":\"${timer_id}\",\"command\":\"${MYSELF}\",\"timeout\":${timeout},\"start\":${start}}"
+            ;;
+        *)
+            logger "Unknown timer operation '$operation'"
+            ;;
+    esac
+}
+
+##### get configured quota
+
+config_get_quota_cb() {
+    local name="$1"
+    local mac="$2"
+    local day="$3"
+    local option="$4"
+    local result_var="$5"
+
+    local entry_mac=$(normalize_mac $(config_get "$name" "station"))
+    local entry_option_val=$(config_get "$name" "$option")
+    local entry_days=$(config_get "$name" "daysofweek")
+
+    case "$entry_days" in
+        *${day}*)
+            [ "$entry_mac" = "$mac" ] && append "$result_var" "$entry_option_val"
+            ;;
+    esac
+}
+
+config_get_quota() {
+    local mac="$1"
+
+    local result=""
+    local day="$(date +%A)"
+
+    config_foreach config_get_quota_cb "entry" "$mac" "$day" "quota" "result"
+    
+    echo "$result"
+}
+
+config_list_stations_cb() {
+    local name="$1"
+    local result_var="$2"
+
+    local entry_mac=$(normalize_mac $(config_get "$name" "station"))
+    local previous_macs=$(eval echo -n \$$result_var)
+
+    if [ -z $(echo "$previous_macs" | grep "$entry_mac") ]; then
+        append "$result_var" "$entry_mac"
+    fi
+}
+
+config_list_stations() {
+    local result=""
+
+    config_foreach config_list_stations_cb "entry" "result"
+    
+    echo "$result"
+}
+
+##### WiFi helpers
+
+wifi_get_connected_stations() {
+    local result=""
+
+    local devices
+    json_load "$(ubus call iwinfo devices)"
+    json_get_values devices devices
+    
+    local device
+    for device in $devices; do
+        local clients=""
+        eval $(ubus call "hostapd.$device" get_clients 2>/dev/null | jsonfilter -e 'clients=$.clients' 2>/dev/null)
+        logger "Connected stations @ $device: $clients"
+        
+        local client
+        for client in $clients; do
+            append result $(normalize_mac "$client")
+        done
+    done
+    
+    echo "$result"
+}
+
+wifi_is_station_connected() {
+    local mac="$1"
+    local stations=$(wifi_get_connected_stations)
+    echo "$stations" | grep "$mac"
+}
+
+wifi_kick_station() {
+    local mac="$1"
+    
+    local vap
+    for vap in $(ubus call iwinfo devices | jsonfilter -e '$.devices[@~"^ath"]'); do
+        iwpriv "$vap" kickmac "$mac"
+    done
+}
+
+##### misc. helpers
+
+normalize_mac() {
+    local mac="$1"
+    
+    echo "$mac" | awk '{print toupper($0)}'
+}
+
+##### config sync
+
+config_sync_send_event() {
+    local event="$1"
+    
+    logger "Sending sync event '$event'"
+    for I in $(seq 1 $CONFIG_SYNC_RETRIES); do
+        ubus call configsync send_message "{\"service\":\"quota\",\"event\":\"${event}\"}"
+    done
+}
+
+config_sync_send_station_event() {
+    local event="$1"
+    local mac="$2"
+    
+    local remaining=$(quota_operation getvar "$mac" remaining)
+    if [ -n "$remaining" ]; then
+        logger "Sending sync event '$event' for '$mac': remaining $remaining"
+        for I in $(seq 1 $CONFIG_SYNC_RETRIES); do
+            ubus call configsync send_message "{\"service\":\"quota\",\"event\":\"${event}\",\"mac\":\"${mac}\",\"remaining\":${remaining}}"
+        done
+    fi
+}
+
+config_sync_write_event() {
+    echo "$(date +%s) '$1' '$2' '$3'" >> "$EVENTFILE"
+    
+    tail -n $CONFIG_SYNC_KEEP_ENTRIES "$EVENTFILE" > "$EVENTFILE".tmp
+    mv -f "$EVENTFILE".tmp "$EVENTFILE"
+}
+
+config_sync_is_duplicate_event() {
+    local difftime=""
+    
+    [ -f "$EVENTFILE" ] || return 1
+    local line=$(cat "$EVENTFILE" | grep " '$1' '$2' '$3'\$" | tail -n 1)
+    if [ -n "$line" ]; then
+        local evtime=$(echo "$line" | sed -e 's/ .*//')
+        local nowtime=$(date +%s)
+        difftime=$(( $nowtime - $evtime ))
+    fi
+    
+    if [ -n "$difftime" ] && [ $difftime -le $CONFIG_SYNC_DUPLICATE_TIME ]; then
+        logger "Ignoring duplicate event"
+        return 0
+    else
+        return 1
+    fi
+}
+
+##### station quota program logic
+
+update_blacklist_entry() {
+    local mac="$1"
+    
+    local cfg_quota=$(config_get_quota "$mac")
+    local state=$(quota_operation getvar "$mac" state)
+
+    if [ -z "$cfg_quota" ]; then
+        ebt_remove_macs_from_blacklist "$mac"
+    elif [ -z "$state" ] || [ "$state" = "RUNNING" ]; then
+        ebt_remove_macs_from_blacklist "$mac"
+    else
+        ebt_add_macs_to_blacklist "$mac"  # paused or expired timer
+    fi
+}
+
+quota_operation() {
+    local operation="$1"
+    local mac="$2"
+    local arg1="$3"
+    local arg2="$4"
+    local arg3="$5"
+
+    # logger "Quota operation '$operation' for '$mac' (arg1='$arg1', arg2='$arg2', arg3='$arg3')"
+    
+    # operate timer
+    case "$operation" in
+        list|query|getvar)
+            echo $(timer_operation "$operation" "$mac" "$arg1" "$arg2" "$arg3")
+            ;;
+        pause|resume|new|remove)
+            timer_operation "$operation" "$mac" "$arg1" "$arg2" "$arg3"
+            ;;
+        updatebl|*)
+            ;;
+    esac
+
+    # operate blacklist
+    case "$operation" in
+        list|query|getvar)
+            ;;
+        pause|resume|new|updatebl)
+            update_blacklist_entry "$mac"
+            ;;
+        remove)
+            ebt_remove_macs_from_blacklist "$mac"
+            ;;
+        *)
+            logger "Unknown quota operation '$operation'"
+            ;;
+    esac
+}
+
+station_associated() {
+    local mac="$1"
+    local sync="${2:-1}"
+    
+    logger "Station $mac associated (sync=$sync)"
+    local state=$(quota_operation getvar "$mac" state)
+    if [ "$state" != "EXPIRED" ]; then
+        if [ -z "$state" ]; then
+            local cfg_quota=$(config_get_quota "$mac")
+            if [ -n "$cfg_quota" ]; then
+                logger "Starting new quota for $mac ($cfg_quota)"
+                quota_operation new "$mac" $(dvl_time_to_mseconds "$cfg_quota")
+            fi
+        else
+            logger "Resuming quota for $mac"
+            quota_operation resume "$mac"
+        fi
+        [ $sync -eq 1 ] && config_sync_send_station_event assoc "$mac"
+    fi
+}
+
+station_disassociated() {
+    local mac="$1"
+    local sync="${2:-1}"
+
+    logger "Station $mac disassociated (sync=$sync)"
+    local state=$(quota_operation getvar "$mac" state)
+    if [ "$state" != "EXPIRED" ]; then
+        if [ -n "$state" ]; then
+            quota_operation pause "$mac"
+            [ $sync -eq 1 ] && config_sync_send_station_event disassoc "$mac"
+        fi
+    fi
+}
+
+station_timer_expired() {
+    local mac="$1"
+    
+    logger "Timer for station $mac expired"
+    local state=$(quota_operation getvar "$mac" state)
+    if [ -n "$state" ]; then
+        quota_operation updatebl "$mac"
+        wifi_kick_station "$mac"
+    fi
+}
+
+station_updated_by_remote() {
+    local mac="$1"
+    local remaining="$2"
+
+    logger "Quota for station $mac updated by remote (remaining $remaining)"
+
+    local mseconds="$remaining"
+
+    local cfg_quota=$(config_get_quota "$mac")
+    if [ -n "$cfg_quota" ]; then
+        mseconds=$(dvl_time_to_mseconds "$cfg_quota")
+    fi
+
+    [ $remaining -le 0 ] && remaining=1  # timer wouldn't get created with zero time remaining
+    
+    quota_operation new "$mac" "$mseconds" "$remaining"
+}
+
+midnight() {
+    for timer in $(quota_operation list); do
+        local mac=$(timer_to_mac "$timer")
+        local cfg_quota=$(config_get_quota "$mac")
+        local state=$(quota_operation getvar "$mac" state)
+
+        if [ -n "$cfg_quota" ] && [ "$state" = "RUNNING" ]; then
+            logger "Refreshing running quota for station $mac ($cfg_quota)"
+            quota_operation new "$mac" $(dvl_time_to_mseconds "$cfg_quota")
+        else
+            logger "Removing stale quota for station $mac"
+            quota_operation remove "$mac"
+        fi
+    done
+}
+
+request_all_quotas_from_remote() {
+    logger "Requesting quota from remote devices"
+    config_sync_send_event list
+}
+
+announce_all_quotas_to_remote() {
+    for timer in $(quota_operation list); do
+        local mac=$(timer_to_mac "$timer")
+        local state=$(quota_operation getvar "$mac" state)
+        local remaining=$(quota_operation getvar "$mac" remaining)
+        
+        if [ -n "$state" ]; then
+            local event=""
+            case "$state" in
+                RUNNING)
+                    event="assoc"
+                    ;;
+                PAUSED|EXPIRED)
+                    event="disassoc"
+                    ;;
+            esac
+
+            if [ -n "$event" ]; then            
+                logger "Announcing station $mac ($event, remaining $remaining)"
+                config_sync_send_station_event "$event" "$mac" "$remaining"
+            fi
+        fi
+    done
+}
+
+update_quotas_for_connected_stations() {
+    for station in $(wifi_get_connected_stations); do
+        logger "Adding quota for connected station $mac"
+        station_associated "$station" 1
+    done
+}
+
+remove_all_station_quotas() {
+    for timer in $(quota_operation list); do
+        quota_operation remove $(timer_to_mac "$timer")
+    done
+}
+
+reload_quota_config() {
+    # remove quotas for stations which have no configured quota anymore
+    for timer in $(quota_operation list); do
+        local mac=$(timer_to_mac "$timer")
+        local cfg_quota=$(config_get_quota "$mac")
+
+        if [ -z "$cfg_quota" ]; then
+            logger "Removing stale quota for station $mac"
+            quota_operation remove "$mac"
+        fi
+    done
+
+    # update quotas for configured stations
+    for mac in $(config_list_stations); do
+        local cfg_quota=$(config_get_quota "$mac")
+        if [ -n "$cfg_quota" ]; then
+            local cfg_mseconds=$(dvl_time_to_mseconds "$cfg_quota")
+            local state=$(quota_operation getvar "$mac" state)
+            local timeout=$(quota_operation getvar "$mac" timeout)
+            
+            if [ -z "$timeout" ] || [ "$timeout" -ne "$cfg_mseconds" ]; then
+                # configured quota is new or different from timer timeout
+                if [ "$state" = "RUNNING" ] || wifi_is_station_connected "$mac"; then
+                    logger "Changing quota for connected station $mac ($cfg_quota)"
+                    quota_operation new "$mac" "$cfg_mseconds"
+                    config_sync_send_station_event assoc "$mac" "$cfg_mseconds"
+                else
+                    logger "Removing quota for disconnected station $mac ($cfg_quota)"
+                    quota_operation remove "$mac"
+                fi
+            fi
+        fi
+    done
+}
+
+##### service handling
+
+start_service() {
+    ebt_create_chains
+    crontab -l | grep -v "$MYSELF" | crontab -
+    (crontab -l; echo "00 00 * * * $MYSELF --event midnight") | sort -u | crontab -
+    
+    > "$EVENTFILE"
+    remove_all_station_quotas
+    (sleep 120; "$MYSELF" -e request_list; sleep 10; "$MYSELF" -e update_connected) &
+}
+
+stop_service() {
+    rm -f "$EVENTFILE"
+    remove_all_station_quotas
+
+    crontab -l | grep -v "$MYSELF" | crontab -
+    ebt_delete_chains
+}
+
+##### option handling
+
+get_program_options() {
+    OPT_EVENT=""
+    OPT_MAC=""
+    OPT_REMAINING=""
+    OPT_TIMER_ID=""
+    
+    if [ -n "$TIMER_ID" ]; then
+        # called by timer
+        OPT_EVENT="timer_expired"
+        OPT_TIMER_ID="$TIMER_ID"
+        OPT_MAC=$(normalize_mac $(timer_to_mac "$TIMER_ID"))
+    else
+        # called by script or cron
+        while [ $# -gt 0 ]; do
+            local key="$1"
+            shift
+            case "$key" in
+                start|stop)
+                    OPT_EVENT="$key"
+                    ;;
+                -e|--event)
+                    OPT_EVENT="$1"
+                    shift
+                    ;;
+                -m|--mac)
+                    OPT_MAC=$(normalize_mac "$1")
+                    shift
+                    ;;
+                -r|--remaining)
+                    OPT_REMAINING="$1"
+                    shift
+                    ;;
+                *)
+                    logger "Unknown command line option '$key'"
+                    ;;
+            esac
+        done
+    fi
+}
+
+##### main
+
+config_load "$PACKAGE"
+config_get_bool CFG_PACKAGE_ENABLED global enabled 0
+config_get_bool CFG_LOGGING global logging 0
+
+MYSELF="$0"
+RETURN_VALUE=0
+
+lock "$LOCKFILE"
+
+if [ $CFG_PACKAGE_ENABLED -eq 1 ]; then
+    get_program_options "$@"
+
+    logger "Event '$OPT_EVENT' for station '$OPT_MAC', remaining '$OPT_REMAINING'"
+    
+    case "$OPT_EVENT" in
+        start)
+            start_service
+            ;;
+        stop)
+            stop_service
+            ;;
+        reload)
+            initialized=$(ebtables -L | grep "$PACKAGE")
+            if [ -z "$initialized" ]; then
+                logger "Service $PACKAGE was not started, initializing"
+                start_service
+            fi
+            reload_quota_config
+            ;;
+        assoc)
+            station_associated "$OPT_MAC" 1
+            ;;
+        disassoc)
+            station_disassociated "$OPT_MAC" 1
+            ;;
+        request_list)
+            request_all_quotas_from_remote
+            ;;
+        midnight)
+            midnight
+            ;;
+        timer_expired)
+            station_timer_expired "$OPT_MAC"
+            ;;
+        update_connected)
+            update_quotas_for_connected_stations
+            ;;
+        assoc_remote)
+            if [ -n "$OPT_REMAINING" ] && ! config_sync_is_duplicate_event "$OPT_EVENT" "$OPT_MAC" "$OPT_REMAINING"; then
+                config_sync_write_event "$OPT_EVENT" "$OPT_MAC" "$OPT_REMAINING"
+                station_updated_by_remote "$OPT_MAC" "$OPT_REMAINING"
+                station_associated "$OPT_MAC" 0
+            fi
+            ;;
+        disassoc_remote)
+            if [ -n "$OPT_REMAINING" ] && ! config_sync_is_duplicate_event "$OPT_EVENT" "$OPT_MAC" "$OPT_REMAINING"; then
+                config_sync_write_event "$OPT_EVENT" "$OPT_MAC" "$OPT_REMAINING"
+                station_updated_by_remote "$OPT_MAC" "$OPT_REMAINING"
+                station_disassociated "$OPT_MAC" 0
+            fi
+            ;;
+        list_remote)
+            if ! config_sync_is_duplicate_event "$OPT_EVENT" "$OPT_MAC" "$OPT_REMAINING"; then
+                config_sync_write_event "$OPT_EVENT"
+                announce_all_quotas_to_remote
+            fi
+            ;;
+        test)
+            ;;
+        *)
+            logger "Unknown event '$OPT_EVENT'"
+            RETURN_VALUE=1
+            ;;
+    esac
+else
+    initialized=$(ebtables -L | grep "$PACKAGE")
+    if [ -n "$initialized" ]; then
+        logger "Service $PACKAGE was running, stopping"
+        stop_service
+    fi
+    logger "Feature $PACKAGE disabled"
+fi
+
+lock -u "$LOCKFILE"
+
+exit $RETURN_VALUE
diff --git a/usr/bin/strings b/usr/bin/strings
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/strings
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/tail b/usr/bin/tail
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/tail
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/taskset b/usr/bin/taskset
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/taskset
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/tee b/usr/bin/tee
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/tee
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/telnet b/usr/bin/telnet
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/telnet
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/test b/usr/bin/test
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/test
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/tftp b/usr/bin/tftp
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/tftp
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/time b/usr/bin/time
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/time
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/timerd b/usr/bin/timerd
new file mode 100755
index 0000000..0d79916
Binary files /dev/null and b/usr/bin/timerd differ
diff --git a/usr/bin/top b/usr/bin/top
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/top
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/tr b/usr/bin/tr
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/tr
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/traceroute b/usr/bin/traceroute
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/traceroute
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/uniq b/usr/bin/uniq
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/uniq
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/uptime b/usr/bin/uptime
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/uptime
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/wc b/usr/bin/wc
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/wc
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/wget b/usr/bin/wget
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/wget
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/which b/usr/bin/which
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/which
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/wifi_schedule.sh b/usr/bin/wifi_schedule.sh
new file mode 100755
index 0000000..bfa675d
--- /dev/null
+++ b/usr/bin/wifi_schedule.sh
@@ -0,0 +1,492 @@
+#!/bin/sh
+
+# Copyright (c) 2016, prpl Foundation
+#
+# Permission to use, copy, modify, and/or 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.
+#
+# Author: Nils Koenig <openwrt@newk.it>
+
+. /lib/functions.sh
+
+SCRIPT=$0
+LOCKFILE=/tmp/wifi_schedule.lock
+LOGFILE=/tmp/log/wifi_schedule.log
+PACKAGE=wifi_schedule
+GLOBAL=${PACKAGE}.@global[0]
+# remember, if radio state was changed
+radio_state_changed=0
+# variable to remember if wifi should be enabled disabled (needed by check and apply function)
+wifi_disabled=1
+# variable to remember if scheduler is enabled
+schedule_enabled=0
+# variable to remember if stop should be forced
+forcewifidown=0
+
+_log()
+{
+    if [ ${LOGGING} -eq 1 ]; then
+        local ts=$(date)
+        echo "$ts $@" >> ${LOGFILE}
+    fi
+}
+
+_exit()
+{
+    local rc=$1
+    lock -u ${LOCKFILE}
+    exit ${rc}
+}
+
+_cron_restart()
+{
+    /etc/init.d/cron restart > /dev/null
+}
+
+_add_cron_script()
+{
+    (crontab -l ; echo "$1") | sort -u | crontab -
+}
+
+_rm_cron_script()
+{
+    crontab -l | grep -v "$1" | sort -u | crontab -
+}
+
+_rm_and_add_cron_script()
+{
+    (crontab -l | grep -v "$1"; [ -n "$2" ] && echo "$2") | sort -u | crontab -
+}
+
+_get_uci_value_raw()
+{
+    local value
+    value=$(uci get $1 2> /dev/null)
+    local rc=$?
+    echo ${value}
+    return ${rc}
+}
+
+_get_uci_value()
+{
+    local value
+    value=$(_get_uci_value_raw $1)
+    local rc=$?
+    if [ ${rc} -ne 0 ]; then
+        _log "Could not determine UCI value $1"
+        return 1
+    fi
+    echo ${value}
+}
+
+_format_dow_list()
+{
+    local dow=$1
+    local flist=""
+    local day
+    for day in ${dow}
+    do
+        if [ ! -z ${flist} ]; then
+            flist="${flist},"
+        fi
+        flist="${flist}${day:0:3}"
+    done
+    echo ${flist}
+}
+
+_shift_dow_list_by_one_day()
+{
+    local dow=$1
+    local flist=""
+    local day
+    for day in $1
+    do
+	if [ ! -z ${flist} ]; then
+            flist="${flist},"
+        fi
+        case $day in
+            Mon*)
+                flist="${flist}Tue"
+            ;;
+            Tue*)
+                flist="${flist}Wed"
+            ;;
+            Wed*)
+                flist="${flist}Thu"
+            ;;
+            Thu*)
+                flist="${flist}Fri"
+            ;;
+            Fri*)
+                flist="${flist}Sat"
+            ;;
+            Sat*)
+                flist="${flist}Sun"
+            ;;
+            Sun*)
+                flist="${flist}Mon"
+            ;;
+        esac
+    done
+
+    echo "$flist"
+}
+
+_enable_wifi_schedule()
+{
+    local entry=$1
+    local enabled starttime stoptime dow
+
+    config_get enabled $entry enabled 0
+    [ "$enabled" -eq 0 ] && return 0
+    config_get starttime $entry starttime
+    [ -z "$starttime" ] && return 1
+    config_get stoptime $entry stoptime
+    [ -z "$stoptime" ] && return 1
+    config_get dow $entry daysofweek
+    [ -z "$dow" ] && return 1
+
+    local fdow=$(_format_dow_list "$dow")
+    local stopmode="stop"
+    if [ $forcewifidown -eq 1 ]; then
+        stopmode="forcestop"
+    fi
+
+    # If it shall stop on the same day at 00:00, 24:00 is the transition to the following day, if this is the case,
+    # the days of the weeks have to be incremented by one
+    if [ "${stoptime}" == "24:00" ]; then
+        fdow_stop=$(_shift_dow_list_by_one_day "$dow")
+        stoptime="0:00"
+    else
+        fdow_stop=${fdow}
+    fi
+
+    local stop_cron_entry="$(echo ${stoptime} | awk -F':' '{print $2, $1}') * * ${fdow_stop} ${SCRIPT} check" # ${entry}"
+    echo "${stop_cron_entry}"
+
+    if [[ $starttime != $stoptime ]]                             
+    then                                                         
+        local start_cron_entry="$(echo ${starttime} | awk -F':' '{print $2, $1}') * * ${fdow} ${SCRIPT} check" # ${entry}"
+        echo "${start_cron_entry}"
+    fi
+
+    return 0
+}
+
+_get_wireless_interfaces()
+{
+    local n=$(cat /proc/net/wireless | wc -l)
+    cat /proc/net/wireless | tail -n $(($n - 2))|awk -F':' '{print $1}'| sed  's/ //' 
+}
+
+
+get_module_list()
+{
+    local mod_list
+    local _if
+    for _if in $(_get_wireless_interfaces)
+    do
+        local mod=$(basename $(readlink -f /sys/class/net/${_if}/device/driver))
+        local mod_dep=$(modinfo ${mod} | awk '{if ($1 ~ /depends/) print $2}')
+        mod_list=$(echo -e "${mod_list}\n${mod},${mod_dep}" | sort | uniq)
+    done
+    echo $mod_list | tr ',' ' '
+}
+
+save_module_list_uci()
+{
+    local list=$(get_module_list)
+    uci set ${GLOBAL}.modules="${list}"
+    uci commit ${PACKAGE}
+}
+
+_unload_modules()
+{
+    local list=$(_get_uci_value ${GLOBAL}.modules) 
+    local retries
+    retries=$(_get_uci_value ${GLOBAL}.modules_retries) || _exit 1
+    _log "unload_modules ${list} (retries: ${retries})"
+    local i=0
+    while [[ ${i} -lt ${retries}  &&  "${list}" != "" ]]
+    do  
+        i=$(($i+1))
+        local mod
+        local first=0
+        for mod in ${list}
+        do
+            if [ $first -eq 0 ]; then
+                list=""
+                first=1
+            fi
+            rmmod ${mod} > /dev/null 2>&1
+            if [ $? -ne 0 ]; then
+                list="$list $mod"
+            fi
+        done
+    done
+}
+
+
+_load_modules()
+{
+    local list=$(_get_uci_value ${GLOBAL}.modules)
+    local retries
+    retries=$(_get_uci_value ${GLOBAL}.modules_retries) || _exit 1
+    _log "load_modules ${list} (retries: ${retries})"
+    local i=0
+    while [[ ${i} -lt ${retries}  &&  "${list}" != "" ]]
+    do  
+        i=$(($i+1))
+        local mod
+        local first=0
+        for mod in ${list}
+        do
+            if [ $first -eq 0 ]; then
+                list=""
+                first=1
+            fi
+            modprobe ${mod} > /dev/null 2>&1
+            rc=$? 
+            if [ $rc -ne 255 ]; then
+                list="$list $mod"
+            fi
+        done
+    done
+}
+
+_create_cron_entries()
+{
+    config_foreach _enable_wifi_schedule entry
+}
+
+check_cron_status()
+{
+    config_load wifi_schedule
+    config_foreach handle_global global
+    if [ ${schedule_enabled} -eq 1 ]; then
+        _rm_and_add_cron_script "${SCRIPT}" "$(_create_cron_entries)"
+    else
+        _rm_cron_script "${SCRIPT}"
+    fi
+    _cron_restart
+}
+
+set_radio_state() {
+    local cfg="$1"
+    local wifi_disabled="$2"
+    local sched_disabled="$3"
+
+    config_get cur_state "$cfg" disabled 0
+
+    if [ "$wifi_disabled" = "1" ]; then
+        if [ "$wifi_disabled" != "$cur_state" ]; then
+            uci_set wireless "$cfg" disabled $wifi_disabled
+            radio_state_changed=1
+        fi
+    else
+        local value
+        config_get value $1 cfg_disabled '0'     # default value if unset is 0 (on)
+
+        uci_set wireless $1 disabled $value
+
+	if [ "$sched_disabled" = "1" ]; then
+		[ "$value" != "$curstate" ] && radio_state_changed=1
+        else
+		[ "$value" = "0" ] && [ "$value" != "$curstate" ] && radio_state_changed=1
+	fi
+    fi
+}
+disable_wifi()
+{
+    config_load wireless
+    _rm_cron_script "${SCRIPT} recheck"
+    _cron_restart
+
+    config_foreach set_radio_state wifi-device 1
+
+    [ "$radio_state_changed" -eq 1 ] && touch /tmp/cs_omit_wireless
+    [ "$radio_state_changed" -eq 1 ] && { 
+        uci_commit wireless
+        reload_config # use procd to check for config changes
+    }
+
+    local unload_modules
+    unload_modules=$(_get_uci_value_raw ${GLOBAL}.unload_modules) || _exit 1
+    if [[ "${unload_modules}" == "1" ]]; then
+        _unload_modules
+    fi    
+}
+
+soft_disable_wifi()
+{
+    local _disable_wifi=1
+    local iwinfo=/usr/bin/iwinfo
+    if [ ! -e ${iwinfo} ]; then
+        _log "${iwinfo} not available, skipping"
+        return 1
+    fi
+
+    # check if no stations are associated
+    local _if
+    for _if in $(_get_wireless_interfaces)
+    do
+	[ "${_if:0:3}" == "ath" ] || continue
+        output=$(${iwinfo} ${_if} assoclist)
+        if [[ "$output" != "No station connected" ]]
+        then
+            _disable_wifi=0
+            local stations=$(echo ${output}| grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | tr '\n' ' ')
+            _log "Station(s) ${stations}associated on ${_if}"
+        fi
+    done
+
+    if [ ${_disable_wifi} -eq 1 ]; then
+        _log "No stations associated, disable wifi."
+        disable_wifi
+    else
+        _log "Could not disable wifi due to associated stations, retrying..."
+        local recheck_interval=$(_get_uci_value ${GLOBAL}.recheck_interval)
+        _add_cron_script "*/${recheck_interval} * * * * ${SCRIPT} recheck"
+        _cron_restart
+    fi
+}
+
+enable_wifi()
+{
+    config_load wireless
+    _rm_cron_script "${SCRIPT} recheck"
+    _cron_restart
+
+    . /lib/delos-functions.sh
+    dvl_check_and_set_wifi_cfg_disabled
+    #reload config . maybe someting has been changed in the function above
+    config_load wireless
+    config_foreach set_radio_state wifi-device 0
+
+    local unload_modules
+    unload_modules=$(_get_uci_value_raw ${GLOBAL}.unload_modules) || _exit 1
+    if [[ "${unload_modules}" == "1" ]]; then
+        _load_modules
+    fi
+    [ "$radio_state_changed" -eq 1 ] && touch /tmp/cs_omit_wireless
+    [ "$radio_state_changed" -eq 1 ] && { 
+        uci_commit wireless
+        reload_config # use procd to check for config changes
+    }
+}
+
+disable_sched()
+{
+    config_load wireless
+    config_foreach set_radio_state wifi-device 0 1
+
+    [ "$radio_state_changed" -eq 1 ] && {
+        uci_commit wireless
+        reload_config # use procd to check for config changes
+    }
+}
+
+handle_global() {
+    local cfg="$1"
+    config_get_bool schedule_enabled "$cfg" enabled 0
+    config_get_bool forcewifidown "$cfg" forcewifidown 0
+}
+
+handle_entry() {
+    local cfg="$1"
+    local entry_enabled=
+    local starttime=
+    local stoptime=
+    local dow=
+    local curTime=$(date "+%k%M")
+    local weekday=$(date "+%A")
+
+    config_get_bool entry_enabled "$cfg" enabled 0
+    config_get dow "$cfg" daysofweek
+    config_get starttime "$cfg" starttime
+    config_get stoptime "$cfg" stoptime
+
+    # Check if current entry is enabled
+    [ "$entry_enabled" -eq 0 ] && return 0
+
+    # Check if current entry is relevant for today
+    echo "$dow" | grep "$weekday" > /dev/null || return 0
+
+    #remove :, so that we can make easy integer comparison
+    starttime=${starttime//:}
+    stoptime=${stoptime//:}
+
+    [ $curTime -ge $starttime ] && [ $curTime -lt $stoptime ] && wifi_disabled=0
+}
+
+# Check if the radio should be turned on/off accordingly to the wifi scheduler settings, returns "off" or "on"
+check_and_apply_wifischeduler_state() {
+    config_load wifi_schedule
+    config_foreach handle_global global
+
+    if [ "$schedule_enabled" -eq 0 ]; then
+	disable_sched
+	return 0
+    fi
+
+    config_foreach handle_entry entry
+
+    if [ "$wifi_disabled" -eq 0 ]; then
+        enable_wifi
+    else
+        if [ "$forcewifidown" -eq 1 ]; then
+            disable_wifi
+        else
+            soft_disable_wifi
+        fi
+    fi
+}
+
+usage()
+{
+    echo ""
+    echo "$0 cron|start|stop|forcestop|recheck|getmodules|savemodules|help"
+    echo ""
+    echo "    UCI Config File: /etc/config/${PACKAGE}"
+    echo ""
+    echo "    cron: Create cronjob entries."
+    echo "    start: Start wifi."
+    echo "    stop: Stop wifi gracefully, i.e. check if there are stations associated and if so keep retrying."
+    echo "    forcestop: Stop wifi immediately."
+    echo "    recheck: Recheck if wifi can be disabled now."
+    echo "    getmodules: Returns a list of modules used by the wireless driver(s)"
+    echo "    savemodules: Saves a list of automatic determined modules to UCI"
+    echo "    check: Check if should be turned on or not"
+    echo "    help: This description."
+    echo ""
+}
+
+###############################################################################
+# MAIN
+###############################################################################
+LOGGING=$(_get_uci_value ${GLOBAL}.logging) || LOGGING=0
+_log ${SCRIPT} $1 $2
+lock ${LOCKFILE}
+
+config_load wireless
+
+case "$1" in
+    cron) check_cron_status ;;
+    start) enable_wifi ;;
+    forcestop) disable_wifi ;;
+    stop) soft_disable_wifi ;;
+    recheck) soft_disable_wifi ;;
+    getmodules) get_module_list ;;
+    savemodules) save_module_list_uci ;;
+    check) check_and_apply_wifischeduler_state;;
+    help|--help|-h|*) usage ;;
+esac
+
+_exit 0
diff --git a/usr/bin/xargs b/usr/bin/xargs
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/xargs
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/bin/xml2json b/usr/bin/xml2json
new file mode 100755
index 0000000..f9343b9
Binary files /dev/null and b/usr/bin/xml2json differ
diff --git a/usr/bin/yes b/usr/bin/yes
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/bin/yes
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/lib/configsync_lib.sh b/usr/lib/configsync_lib.sh
new file mode 100755
index 0000000..a1bb846
--- /dev/null
+++ b/usr/lib/configsync_lib.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+MY_SERVICE_NAME=configsync
+CONFIGSYNC_CONFIGURATION_FILE=/tmp/p1905.cfg
+
+PATH_TO_CONFIGSYNC_EXECUTOR=/usr/share/configsync.d
+CS_CONFIGURATION_PATH=/tmp/configsync
+CS_CHANGE_PATH=/tmp/.uci_configsync
+CS_MD5SUMS=/tmp/cs_md5sums
+CS_MD5SUMS2=/tmp/cs_md5sums2
+CS_SERVICES_TO_SYNC="wifi_schedule wireless system parental_control ghn station_quota"
+CS_SERVICELIST=/tmp/cs_servicelist
+
+CS_TEMP_CONFIG_PATH=/tmp/tmpconfig
+CS_TEMP_CHANGE_PATH=/tmp/.tmpuci_config
+CS_IMPORTSERVICELIST=/tmp/cs_importservicelist
+CS_PREFIX=cstmp
+
+CSEmptyString="<To be deleted!>"
+
+my_logger() {
+   logger -t configsync "${@}"
+}
+
+uci_cs() {
+    if [ "$1" = "set" ] && [ "${2#*=}" = "" ]; then
+        uci -q -p ${CS_CHANGE_PATH} -c ${CS_CONFIGURATION_PATH} set "${2}${CSEmptyString}"
+    else
+        uci -q -p ${CS_CHANGE_PATH} -c ${CS_CONFIGURATION_PATH} "${@}"
+    fi
+}
+
+delete_sections_cs() {
+    while uci -q -p ${CS_CHANGE_PATH} -c ${CS_CONFIGURATION_PATH} delete ${1}.@${2}[-1] > /dev/null 2>&1; do :; done
+}
+
+delete_sections() {
+    while uci_remove ${1} @${2}[-1] > /dev/null 2>&1; do :; done
+}
+
+uci_tmp() {
+    if [ "$1" = "set" ] && [ "${2#*=}" = "${CSEmptyString}" ]; then
+        uci -q -P ${CS_TEMP_CHANGE_PATH} -c ${CS_TEMP_CONFIG_PATH} set "${2%=*}="
+    else
+        uci -q -P ${CS_TEMP_CHANGE_PATH} -c ${CS_TEMP_CONFIG_PATH} "${@}"
+    fi
+}
+
+delete_sections_tmp() {
+    while uci -q -P ${CS_TEMP_CHANGE_PATH} -c ${CS_TEMP_CONFIG_PATH} delete ${1}.@${2}[-1] > /dev/null 2>&1; do :; done
+}
+
+update_md5sum() {
+    my_logger "update_md5sum: Service ${1}"
+    local tmpfile=$(mktemp)
+    grep -vE "/${1}\$" $CS_MD5SUMS > $tmpfile
+    md5sum /etc/config/${1} >> $tmpfile
+    mv -f $tmpfile $CS_MD5SUMS
+}
+
+check_md5sum() {
+    if [ "$(md5sum /etc/config/${1} 2>&1)" = "$(grep -E "/${1}\$" $CS_MD5SUMS)" ]; then
+        my_logger "check_md5sum: Service ${1} checksum identical"
+        return 0
+    else
+        my_logger "check_md5sum: Service ${1} checksum different"
+        return 1
+    fi
+}
+
+add_to_list() {
+    if ! grep -E "^${2}\$" $1 >/dev/null 2>&1; then echo ${2} >> $1;fi
+}
+
+wait_stable_config() {
+    return 0
+}
+
diff --git a/usr/lib/ebtables/libebt_802_3.so b/usr/lib/ebtables/libebt_802_3.so
new file mode 100755
index 0000000..6afaba1
Binary files /dev/null and b/usr/lib/ebtables/libebt_802_3.so differ
diff --git a/usr/lib/ebtables/libebt_among.so b/usr/lib/ebtables/libebt_among.so
new file mode 100755
index 0000000..0bd7ddd
Binary files /dev/null and b/usr/lib/ebtables/libebt_among.so differ
diff --git a/usr/lib/ebtables/libebt_arp.so b/usr/lib/ebtables/libebt_arp.so
new file mode 100755
index 0000000..b02cbbc
Binary files /dev/null and b/usr/lib/ebtables/libebt_arp.so differ
diff --git a/usr/lib/ebtables/libebt_arpreply.so b/usr/lib/ebtables/libebt_arpreply.so
new file mode 100755
index 0000000..294692c
Binary files /dev/null and b/usr/lib/ebtables/libebt_arpreply.so differ
diff --git a/usr/lib/ebtables/libebt_ip.so b/usr/lib/ebtables/libebt_ip.so
new file mode 100755
index 0000000..aa16d42
Binary files /dev/null and b/usr/lib/ebtables/libebt_ip.so differ
diff --git a/usr/lib/ebtables/libebt_ip6.so b/usr/lib/ebtables/libebt_ip6.so
new file mode 100755
index 0000000..dc6d273
Binary files /dev/null and b/usr/lib/ebtables/libebt_ip6.so differ
diff --git a/usr/lib/ebtables/libebt_limit.so b/usr/lib/ebtables/libebt_limit.so
new file mode 100755
index 0000000..90d5ab4
Binary files /dev/null and b/usr/lib/ebtables/libebt_limit.so differ
diff --git a/usr/lib/ebtables/libebt_log.so b/usr/lib/ebtables/libebt_log.so
new file mode 100755
index 0000000..c47ca2a
Binary files /dev/null and b/usr/lib/ebtables/libebt_log.so differ
diff --git a/usr/lib/ebtables/libebt_mark.so b/usr/lib/ebtables/libebt_mark.so
new file mode 100755
index 0000000..200c2ef
Binary files /dev/null and b/usr/lib/ebtables/libebt_mark.so differ
diff --git a/usr/lib/ebtables/libebt_mark_m.so b/usr/lib/ebtables/libebt_mark_m.so
new file mode 100755
index 0000000..1aec149
Binary files /dev/null and b/usr/lib/ebtables/libebt_mark_m.so differ
diff --git a/usr/lib/ebtables/libebt_nat.so b/usr/lib/ebtables/libebt_nat.so
new file mode 100755
index 0000000..69b3da1
Binary files /dev/null and b/usr/lib/ebtables/libebt_nat.so differ
diff --git a/usr/lib/ebtables/libebt_nflog.so b/usr/lib/ebtables/libebt_nflog.so
new file mode 100755
index 0000000..c12edc8
Binary files /dev/null and b/usr/lib/ebtables/libebt_nflog.so differ
diff --git a/usr/lib/ebtables/libebt_pkttype.so b/usr/lib/ebtables/libebt_pkttype.so
new file mode 100755
index 0000000..3510e60
Binary files /dev/null and b/usr/lib/ebtables/libebt_pkttype.so differ
diff --git a/usr/lib/ebtables/libebt_redirect.so b/usr/lib/ebtables/libebt_redirect.so
new file mode 100755
index 0000000..1a7cc2e
Binary files /dev/null and b/usr/lib/ebtables/libebt_redirect.so differ
diff --git a/usr/lib/ebtables/libebt_standard.so b/usr/lib/ebtables/libebt_standard.so
new file mode 100755
index 0000000..68db3a5
Binary files /dev/null and b/usr/lib/ebtables/libebt_standard.so differ
diff --git a/usr/lib/ebtables/libebt_stp.so b/usr/lib/ebtables/libebt_stp.so
new file mode 100755
index 0000000..4dd2ec4
Binary files /dev/null and b/usr/lib/ebtables/libebt_stp.so differ
diff --git a/usr/lib/ebtables/libebt_ulog.so b/usr/lib/ebtables/libebt_ulog.so
new file mode 100755
index 0000000..67019ef
Binary files /dev/null and b/usr/lib/ebtables/libebt_ulog.so differ
diff --git a/usr/lib/ebtables/libebt_vlan.so b/usr/lib/ebtables/libebt_vlan.so
new file mode 100755
index 0000000..95edc54
Binary files /dev/null and b/usr/lib/ebtables/libebt_vlan.so differ
diff --git a/usr/lib/ebtables/libebtable_broute.so b/usr/lib/ebtables/libebtable_broute.so
new file mode 100755
index 0000000..18507e7
Binary files /dev/null and b/usr/lib/ebtables/libebtable_broute.so differ
diff --git a/usr/lib/ebtables/libebtable_filter.so b/usr/lib/ebtables/libebtable_filter.so
new file mode 100755
index 0000000..d13b845
Binary files /dev/null and b/usr/lib/ebtables/libebtable_filter.so differ
diff --git a/usr/lib/ebtables/libebtable_nat.so b/usr/lib/ebtables/libebtable_nat.so
new file mode 100755
index 0000000..592db63
Binary files /dev/null and b/usr/lib/ebtables/libebtable_nat.so differ
diff --git a/usr/lib/lh-migration.sh b/usr/lib/lh-migration.sh
new file mode 100755
index 0000000..b02bd7b
--- /dev/null
+++ b/usr/lib/lh-migration.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+function logger() {
+    command logger -t lh-migration "$@"
+    echo "$@" >> /tmp/lh-migration.log
+}
+
+function lh_filter() {
+    if [ -z "$LINUX_HOST_CONFIG" ]; then
+        LINUX_HOST_CONFIG="$(chunk -F - extract_config | gunzip | xml2json)"
+        [ -z "$LINUX_HOST_CONFIG" ] && {
+            logger "Failed reading LH configuration";
+            exit 1;
+        }
+    fi
+    echo "`jsonfilter -s "$LINUX_HOST_CONFIG" -e "$1"`"
+}
+
+function lh_config_version() {
+    echo "$(lh_filter $.SystemConfig.Config.Version)"
+}
+
+function lh_config_deviceType() {
+    echo "$(lh_filter $.SystemConfig.Services.System.Baptization.DeviceType)"
+}
+
+function lh_config_hostname() {
+    echo "$(lh_filter $.SystemConfig.Services.System.Baptization.Hostname)"
+}
+
+function lh_iterate_array() {
+    local NameSingular="$1"
+    local NamePlural="$2"
+    local Callback="$3"
+    local Context="$4"
+
+    local Type
+    if json_get_type Type "$NameSingular" && [ "$Type" = object ]; then
+        json_select "$NameSingular"
+        $($Callback $Idx "$Context")
+        json_select ..
+    else
+        if json_get_type Type "$NamePlural" && [ "$Type" = array ]; then
+            json_select "$NamePlural"
+            local Idx=1
+            while json_get_type Type $Idx && [ "$Type" = object ]; do
+                json_select $Idx
+                $($Callback $Idx "$Context")
+                json_select ..
+                Idx=$((Idx+1))
+            done
+            json_select ..
+        fi
+    fi
+}
+
diff --git a/usr/lib/lh-migration/network.sh b/usr/lib/lh-migration/network.sh
new file mode 100755
index 0000000..e37a7ba
--- /dev/null
+++ b/usr/lib/lh-migration/network.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+. /usr/lib/lh-migration.sh
+
+calc_netmask() {
+    local ui32=$((0xffffffff << (32 - $1)))
+    local ip n
+    for n in 1 2 3 4; do
+        ip=$((ui32 & 0xff))${ip:+.}$ip
+        ui32=$((ui32 >> 8))
+    done
+    echo $ip
+}
+
+function migrate_lan_v4() {
+    logger "Migrating LAN"
+    local lh_path="$.SystemConfig.Services.Network.Management"
+    local uci_path="network.lan"
+    local NW_TYPE="$(lh_filter $lh_path.Type)"
+    if [ "$NW_TYPE" = "DHCP" ]; then
+        uci set $uci_path.proto='dhcp'
+        uci delete $uci_path.ipaddr
+        uci delete $uci_path.netmask
+        uci delete $uci_path.gateway
+        uci delete $uci_path.dns
+    elif [ "$NW_TYPE" = "static" ]; then
+        uci set $uci_path.proto='static'
+        uci set $uci_path.ipaddr="$(lh_filter $lh_path.V4.IpAddress)"
+        local PREFIX_LEN=$(lh_filter $lh_path.V4.PrefixLength)
+        uci set $uci_path.netmask="$(calc_netmask $PREFIX_LEN)"
+        uci set $uci_path.gateway="$(lh_filter $lh_path.V4.DefaultGateway.IpStatic)"
+        uci set $uci_path.dns="$(lh_filter $lh_path.V4.Nameserver)"
+    fi
+}
+
+function migrate_network() {
+    logger "Migrating network"
+    config_load network
+    migrate_lan_v4
+    uci_commit network
+}
+
+migrate_network
diff --git a/usr/lib/lh-migration/plc.sh b/usr/lib/lh-migration/plc.sh
new file mode 100755
index 0000000..8cc19d4
--- /dev/null
+++ b/usr/lib/lh-migration/plc.sh
@@ -0,0 +1,90 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+. /usr/lib/lh-migration.sh
+
+function migrate_plc() {
+    logger "Migrating PLC"
+    local lh_path="$.SystemConfig.Services"
+    local uci_path="plc"
+
+    # migrate compatibility settings / notches
+    
+    local lh_config="$(lh_filter $lh_path.HomePlug.ActiveNotchSet)"
+
+    local compat_mode
+    local user_notches
+    
+    case "$lh_config" in
+        1)
+            compat_mode=""
+            user_notches="2850-3155,3400-3500,3800-3950,4650-4850,5450-5730,6150-6160,6525-6765,8815-9040,9545-9555,10005-10100,11175-11400,11665-11675,13200-13360,13865-13875,15010-15100,15445-15455,17900-18030,21924-22000,23200-23350"
+            ;;
+        2)
+            compat_mode=""
+            user_notches="3850-4000,5800-6300,7100-7600,9300-10000,11500-12100,13500-13900,15000-15800,17400-17900,18900-19100,21400-21900,25600-26100,26500-29700"
+            ;;
+        3)
+            compat_mode=""
+            user_notches="26960-27410"
+            ;;
+        4)
+            compat_mode=""
+            user_notches="26560-27410"
+            ;;
+        5)
+            compat_mode=""
+            user_notches="14453-14453,17956-17956,20898-20898,24780-24780,26123-27905,50000-52000"
+            ;;
+        6)
+            compat_mode=""
+            user_notches="6127-6176,9521-9570,11645-11694,13842-13818,15429-15478"
+            ;;
+        7)
+            compat_mode=""
+            user_notches="5900-6200,7200-7450"
+            ;;
+        8)
+            compat_mode=siso_full
+            user_notches=""
+            ;;
+        9)
+            compat_mode=mimo_vdsl35b
+            user_notches=""
+            ;;
+        *)
+            compat_mode=""
+            user_notches=""
+            ;;
+    esac        
+
+    logger "Using compat mode: '$compat_mode'"
+    logger "Using user notches: '$user_notches'"
+    uci set $uci_path.plc.compat_mode="$compat_mode"
+    uci set $uci_path.plc.user_notches="$user_notches"
+
+    # migrate NMK
+    
+    local nmk_cfg="$(lh_filter $lh_path.HomePlug.Config.NMK)"
+    local nmk_bap="$(lh_filter $lh_path.System.Baptization.DlanFactoryNmk)"
+    
+    local nmk
+    if [ -n "$nmk_cfg" ]; then
+        nmk="$nmk_cfg"
+    elif [ -n "$nmk_bap" ]; then
+        nmk="$nmk_bap"
+    else
+        nmk="HomePlugAV"
+    fi
+
+    # We cannot modify the PIB file here since it does not yet exist. Write it to /tmp
+    # so the PLC init script can use it.
+    logger "Using NMK: $nmk"
+    echo "LH_NMK=$nmk" > /tmp/lh_nmk
+    
+    uci commit $uci_path
+}
+
+migrate_plc
diff --git a/usr/lib/lh-migration/system.sh b/usr/lib/lh-migration/system.sh
new file mode 100755
index 0000000..db6b932
--- /dev/null
+++ b/usr/lib/lh-migration/system.sh
@@ -0,0 +1,208 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+. /usr/lib/lh-migration.sh
+
+LH_PATH="$.SystemConfig.Services"
+
+function migrate_password() {
+    logger "Migrating password"
+    local PWD="$(lh_filter $LH_PATH.System.SystemPassword)"
+    [ -n "$PWD" ] && echo -e "${PWD}\n${PWD}" | passwd
+}
+
+function migrate_led() {
+    local uci_path="system"
+    local AlwaysOff="$(lh_filter $LH_PATH.LedsAndButtons.Leds.AlwaysOff)"
+    logger "Migrating leds (AlwaysOff=$AlwaysOff)"
+    if [ "$AlwaysOff" = "true" ]; then
+        local PLC_LED_SCHEME="off"
+        local DISABLE_LEDS="1"
+    elif [ "$AlwaysOff" = "false" ]; then
+        local PLC_LED_SCHEME="on"
+        local DISABLE_LEDS="0"
+    else
+        return
+    fi
+    config_load plc
+    uci set plc.plc.led_scheme=$PLC_LED_SCHEME
+    uci_commit plc
+
+    uci set $uci_path.led_wlan.disabled='0'
+    uci set $uci_path.led_wlan.disableLeds=$DISABLE_LEDS
+    uci set $uci_path.led_plcw.disabled='0'
+    uci set $uci_path.led_plcr.disabled='0'
+}
+
+function migrate_timezone() {
+    local uci_path="system.@system[0]"
+    local TIMEZONE ZONENAME
+    local GMTOffset=$(lh_filter $LH_PATH.NTPClient.GMTOffset)
+    logger "Migrating timezone $GMTOffset"
+    case "$GMTOffset" in
+        "-12:00")
+            TIMEZONE='UTC+12'
+            ZONENAME='UTC-12'
+        ;;
+        "-11:00")
+            TIMEZONE='UTC+11'
+            ZONENAME='UTC-11'
+        ;;
+        "-10:00")
+            TIMEZONE='UTC+10'
+            ZONENAME='UTC-10'
+        ;;
+        "-09:00")
+            TIMEZONE='UTC+9'
+            ZONENAME='UTC-9'
+        ;;
+        "-08:00")
+            TIMEZONE='UTC+8'
+            ZONENAME='UTC-8'
+        ;;
+        "-07:00")
+            TIMEZONE='UTC+7'
+            ZONENAME='UTC-7'
+        ;;
+        "-06:00")
+            TIMEZONE='UTC+6'
+            ZONENAME='UTC-6'
+        ;;
+        "-05:00")
+            TIMEZONE='UTC+5'
+            ZONENAME='UTC-5'
+        ;;
+        "-04:00")
+            TIMEZONE='UTC+4'
+            ZONENAME='UTC-4'
+        ;;
+        "-03:30")
+            TIMEZONE='UTC+3:30'
+            ZONENAME='UTC-3:30'
+        ;;
+        "-03:00")
+            TIMEZONE='UTC+3'
+            ZONENAME='UTC-3'
+        ;;
+        "-02:00")
+            TIMEZONE='UTC+2'
+            ZONENAME='UTC-2'
+        ;;
+        "-01:00")
+            TIMEZONE='UTC+1'
+            ZONENAME='UTC-1'
+        ;;
+        "+00:00")
+            TIMEZONE='GMT0BST,M3.5.0/1,M10.5.0'
+            ZONENAME='Europe/London'
+        ;;
+        "+01:00")
+            TIMEZONE='CET-1CEST,M3.5.0,M10.5.0/3'
+            ZONENAME='Europe/Berlin'
+        ;;
+        "+02:00")
+            TIMEZONE='EET-2EEST,M3.5.0/3,M10.5.0/4'
+            ZONENAME='Europe/Sofia'
+        ;;
+        "+03:00")
+            TIMEZONE='MSK-3'
+            ZONENAME='Europe/Moscow'
+        ;;
+        "+03:30")
+            TIMEZONE='UTC-3:30'
+            ZONENAME='UTC+3:30'
+        ;;
+        "+04:00")
+            TIMEZONE='SAMT-4'
+            ZONENAME='Europe/Samara'
+        ;;
+        "+05:00")
+            TIMEZONE='UTC-5'
+            ZONENAME='UTC+5'
+        ;;
+        "+05:30")
+            TIMEZONE='UTC-5:30'
+            ZONENAME='UTC+5:30'
+        ;;
+        "+05:45")
+            TIMEZONE='UTC-5:45'
+            ZONENAME='UTC+5:45'
+        ;;
+        "+06:00")
+            TIMEZONE='UTC-6'
+            ZONENAME='UTC+6'
+        ;;
+        "+06:30")
+            TIMEZONE='UTC-6:30'
+            ZONENAME='UTC+6:30'
+        ;;
+        "+07:00")
+            TIMEZONE='UTC-7'
+            ZONENAME='UTC+7'
+        ;;
+        "+08:00")
+            TIMEZONE='UTC-8'
+            ZONENAME='UTC+8'
+        ;;
+        "+09:00")
+            TIMEZONE='UTC-9'
+            ZONENAME='UTC+9'
+        ;;
+        "+09:30")
+            TIMEZONE='UTC-9:30'
+            ZONENAME='UTC+9:30'
+        ;;
+        "+10:00")
+            TIMEZONE='UTC-10'
+            ZONENAME='UTC+10'
+        ;;
+        "+10:30")
+            TIMEZONE='UTC-10:30'
+            ZONENAME='UTC+10:30'
+        ;;
+        "+11:00")
+            TIMEZONE='UTC-11'
+            ZONENAME='UTC+11'
+        ;;
+        "+12:00")
+            TIMEZONE='UTC-12'
+            ZONENAME='UTC+12'
+        ;;
+        "+13:00")
+            TIMEZONE='UTC-13'
+            ZONENAME='UTC+13'
+        ;;
+        "+14:00")
+            TIMEZONE='UTC-14'
+            ZONENAME='UTC+14'
+        ;;
+    esac
+    [ -n "$ZONENAME" ] && uci set $uci_path.zonename="$ZONENAME"
+    [ -n "$TIMEZONE" ] && uci set $uci_path.timezone="$TIMEZONE"
+}
+
+function migrate_timeserver() {
+    local uci_path="system.ntp"
+    logger "Migrating timeserver"
+    local SERVER1=$(lh_filter $LH_PATH.NTPClient.NTPServer)
+    local SERVER2=$(lh_filter $LH_PATH.NTPClient.AlternateNTPServer)
+    if [ -n "$SERVER1" ]; then
+        uci del_list $uci_path.server="europe.pool.ntp.org"
+        uci add_list $uci_path.server="$SERVER1"
+    fi
+    [ -n "$SERVER2" ] && uci add_list $uci_path.server="$SERVER2"
+}
+
+function migrate_system() {
+    logger "Migrating system"
+    config_load system
+    migrate_password
+    migrate_led
+    migrate_timezone
+    migrate_timeserver
+    uci_commit system
+}
+
+migrate_system
diff --git a/usr/lib/lh-migration/wifi_parental.sh b/usr/lib/lh-migration/wifi_parental.sh
new file mode 100755
index 0000000..3480399
--- /dev/null
+++ b/usr/lib/lh-migration/wifi_parental.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+. /usr/lib/lh-migration.sh
+. /usr/share/libubox/jshn.sh
+
+LH_PATH="$.SystemConfig.Services.Wireless.ParentalControl"
+UCI_PATH="station_quota"
+UCI_PATH_PARENTAL="parental_control"
+
+function add_entry() {
+    local entry=$(uci add $UCI_PATH entry)
+    if [ -n "$entry" ]; then
+        uci_set $UCI_PATH "$entry" daysofweek "$1"
+        uci_set $UCI_PATH "$entry" station "$2"
+        uci_set $UCI_PATH "$entry" quota "$3"
+    fi
+}
+
+function station_cb() {
+    local Idx="$1"
+    local Context="$2"
+
+    local Active Mac TimeLimit
+    json_get_var Active Active
+    json_get_var Mac Mac
+    json_get_var TimeLimit TimeLimit
+
+    if [ "$Active" = "1" ] && [ -n "$TimeLimit" ]; then
+        add_entry "$Context" "$Mac" "$TimeLimit"
+    fi
+}
+
+function calendar_cb() {
+    local Idx="$1"
+    local Context="$2"
+
+    local Day
+    json_get_var Day Day
+
+    lh_iterate_array Station Stations station_cb "$Day"
+}
+
+function migrate_wifi_parental() {
+    logger "Migrating wifi parental control"
+    
+    config_load $UCI_PATH
+    json_init
+    json_load "$(lh_filter $LH_PATH)"
+    
+    local Active
+    json_get_var Active Active
+    # corporate feature on the WebUI
+    uci set $UCI_PATH.@global[0].enabled="$Active"
+    uci set $UCI_PATH_PARENTAL.@global[0].enabled="$Active"
+
+    lh_iterate_array Calendar Calendars calendar_cb
+    
+    uci_commit $UCI_PATH
+    uci_commit $UCI_PATH_PARENTAL
+}
+
+migrate_wifi_parental
diff --git a/usr/lib/lh-migration/wifi_schedule.sh b/usr/lib/lh-migration/wifi_schedule.sh
new file mode 100755
index 0000000..9e8e1ff
--- /dev/null
+++ b/usr/lib/lh-migration/wifi_schedule.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+. /usr/lib/lh-migration.sh
+. /usr/share/libubox/jshn.sh
+
+LH_PATH="$.SystemConfig.Services.Wireless.Schedule"
+UCI_PATH="wifi_schedule"
+
+function add_entry() {
+    local entry=$(uci add $UCI_PATH entry)
+    if [ -n "$entry" ]; then
+        uci_set $UCI_PATH "$entry" daysofweek "$1"
+        uci_set $UCI_PATH "$entry" starttime "$2"
+        uci_set $UCI_PATH "$entry" stoptime "$3"
+        uci_set $UCI_PATH "$entry" enabled '1'
+    fi
+}
+
+function entry_cb() {
+    local Idx="$1"
+    local Context="$2"
+    
+    local On Off
+    json_get_var On On
+    json_get_var Off Off
+    
+    add_entry "$Context" "$On" "$Off"
+}
+
+function day_cb() {
+    local Idx="$1"
+    local Context="$2"
+
+    local Day
+    json_get_var Day Day
+
+    lh_iterate_array Entry Entries entry_cb "$Day"
+}
+
+function migrate_wifi_schedule() {
+    logger "Migrating wifi schedule"
+    
+    config_load $UCI_PATH
+    json_init
+    json_load "$(lh_filter $LH_PATH)"
+    
+    local Active WaitForLastStation ForceWifiDown=0
+    json_get_var Active Active
+    json_get_var WaitForLastStation WaitForLastStation
+    uci set $UCI_PATH.@global[0].enabled="$Active"
+    [ "$WaitForLastStation" = "0" ] && ForceWifiDown=1
+    uci set $UCI_PATH.@global[0].forcewifidown="$ForceWifiDown"
+    
+    lh_iterate_array Day Days day_cb
+    
+    uci_commit $UCI_PATH
+}
+
+migrate_wifi_schedule
diff --git a/usr/lib/lh-migration/wireless.sh b/usr/lib/lh-migration/wireless.sh
new file mode 100755
index 0000000..2a7f12d
--- /dev/null
+++ b/usr/lib/lh-migration/wireless.sh
@@ -0,0 +1,111 @@
+#!/bin/sh
+#
+# Copyright (C) 2018 devolo AG
+#
+
+. /usr/lib/lh-migration.sh
+
+function migrate_ap() {
+    local lh_path=$1
+    local uci_index=$2
+    local uci_path="wireless.@wifi-iface[$uci_index]"
+
+    if [ -z "$(lh_filter $lh_path.Role)" ]; then
+        uci set $uci_path.disabled=1
+        logger "Missing AP $lh_path, disabling ours"
+        return 0
+    fi
+
+    logger "Migrating AP $lh_path"
+    logger "LH data: $(lh_filter $lh_path)"
+
+    uci set $uci_path.ssid="$(lh_filter $lh_path.SSID)"
+    local security="$(lh_filter $lh_path.Security)"
+    case "$security" in
+        none)
+            logger "Setting no encryption"
+            uci set $uci_path.encryption="none"
+            ;;
+        WPA)
+            local mode="$(lh_filter $lh_path.WPAMode)"
+            if [ "$mode" = "both" ]; then
+                logger "Setting WPA/WPA2 encryption"
+                uci set $uci_path.encryption="psk-mixed+tkip+ccmp"
+            elif [ "$mode" = "WPA2" ]; then
+                logger "Setting WPA2 encryption"
+                uci set $uci_path.encryption="psk2"
+            fi
+            uci set $uci_path.key="$(lh_filter $lh_path.WPAKey)"
+            ;;
+    esac
+    local VAL=0
+    [ "$(lh_filter $lh_path.Active)" != "true" ] && VAL=1
+    uci set $uci_path.disabled=$VAL
+    [ "$(lh_filter $lh_path.HideSSID)" = "true" ] && uci set $uci_path.hidden=1
+    [ "$(lh_filter $lh_path.Role)" = "guest" ] && uci set $uci_path.dvl_guest=1
+}
+
+function migrate_radio() {
+    local index=$1
+    local lh_path=$2
+    local uci_path="wireless.wifi$index"
+
+    # Our defaults are radios on
+    [ "$(lh_filter $lh_path.WLANRadio)" = "false" ] && {
+        uci set $uci_path.disabled=1
+        uci set $uci_path.cfg_disabled=1
+    }
+
+    # Our defaults are auto channel
+    local channel=$(lh_filter $lh_path.Channel)
+    # In a special case of genius, LH uses 35 to mean "auto" for 5 GHz radios
+    [ ! "$channel" = "0" ] && [ ! "$channel" = "35" ] && uci set $uci_path.channel=$channel
+}
+
+function migrate_radio_mode() {
+    local lh_path="$.SystemConfig.Services.Wireless"
+    local uci_path="wireless"
+    local RADIO_MODE="$(lh_filter $lh_path.RadioMode)"
+    logger "Migrating RadioMode $RADIO_MODE"
+    case $RADIO_MODE in
+        all)
+            [ "$(lh_filter $lh_path.Radios[0].WLANRadio)" = "false" ] && uci set $uci_path.wifi0.disabled=1
+            [ "$(lh_filter $lh_path.Radios[1].WLANRadio)" = "false" ] && uci set $uci_path.wifi1.disabled=1
+        ;;
+        radio0)
+            [ "$(lh_filter $lh_path.Radios[0].WLANRadio)" = "false" ] && uci set $uci_path.wifi0.disabled=1
+            uci set $uci_path.wifi1.disabled=1
+        ;;
+        radio1)
+            uci set $uci_path.wifi0.disabled=1
+            [ "$(lh_filter $lh_path.Radios[1].WLANRadio)" = "false" ] && uci set $uci_path.wifi1.disabled=1
+        ;;
+    esac
+}
+
+# No pro features, so strictly 2 APs per radio
+function migrate_single_radio() {
+    logger "Migrating single radio"
+    config_load wireless
+    migrate_radio 0 "$.SystemConfig.Services.Wireless.Radio"
+    migrate_ap "$.SystemConfig.Services.Wireless.Radio.APs[0]" 0
+    migrate_ap "$.SystemConfig.Services.Wireless.Radio.APs[1]" 1
+    uci_commit wireless
+}
+
+function migrate_dual_radio() {
+    logger "Migrating dual radio"
+    config_load wireless
+    migrate_radio_mode
+    migrate_radio 0 "$.SystemConfig.Services.Wireless.Radios[0]"
+    migrate_radio 1 "$.SystemConfig.Services.Wireless.Radios[1]"
+    migrate_ap "$.SystemConfig.Services.Wireless.Radios[0].APs[0]" 0
+    migrate_ap "$.SystemConfig.Services.Wireless.Radios[1].APs[0]" 1
+    migrate_ap "$.SystemConfig.Services.Wireless.Radios[0].APs[1]" 2
+    migrate_ap "$.SystemConfig.Services.Wireless.Radios[1].APs[1]" 3
+    uci_commit wireless
+}
+
+[ "$1" = "single" ] && migrate_single_radio
+[ "$1" = "dual" ] && migrate_dual_radio
+
diff --git a/usr/lib/libavahi-common.so.3 b/usr/lib/libavahi-common.so.3
new file mode 120000
index 0000000..3b96572
--- /dev/null
+++ b/usr/lib/libavahi-common.so.3
@@ -0,0 +1 @@
+libavahi-common.so.3.5.3
\ No newline at end of file
diff --git a/usr/lib/libavahi-common.so.3.5.3 b/usr/lib/libavahi-common.so.3.5.3
new file mode 100755
index 0000000..6f21baa
Binary files /dev/null and b/usr/lib/libavahi-common.so.3.5.3 differ
diff --git a/usr/lib/libavahi-core.so.7 b/usr/lib/libavahi-core.so.7
new file mode 120000
index 0000000..1ea6f5c
--- /dev/null
+++ b/usr/lib/libavahi-core.so.7
@@ -0,0 +1 @@
+libavahi-core.so.7.0.2
\ No newline at end of file
diff --git a/usr/lib/libavahi-core.so.7.0.2 b/usr/lib/libavahi-core.so.7.0.2
new file mode 100755
index 0000000..30a286c
Binary files /dev/null and b/usr/lib/libavahi-core.so.7.0.2 differ
diff --git a/usr/lib/libboost_program_options.so b/usr/lib/libboost_program_options.so
new file mode 120000
index 0000000..f5adaf8
--- /dev/null
+++ b/usr/lib/libboost_program_options.so
@@ -0,0 +1 @@
+libboost_program_options.so.1.58.0
\ No newline at end of file
diff --git a/usr/lib/libboost_program_options.so.1.58.0 b/usr/lib/libboost_program_options.so.1.58.0
new file mode 100755
index 0000000..f9a8b28
Binary files /dev/null and b/usr/lib/libboost_program_options.so.1.58.0 differ
diff --git a/usr/lib/libboost_system.so b/usr/lib/libboost_system.so
new file mode 120000
index 0000000..bbaab15
--- /dev/null
+++ b/usr/lib/libboost_system.so
@@ -0,0 +1 @@
+libboost_system.so.1.58.0
\ No newline at end of file
diff --git a/usr/lib/libboost_system.so.1.58.0 b/usr/lib/libboost_system.so.1.58.0
new file mode 100755
index 0000000..5c600df
Binary files /dev/null and b/usr/lib/libboost_system.so.1.58.0 differ
diff --git a/usr/lib/libcap.so b/usr/lib/libcap.so
new file mode 120000
index 0000000..3df1f69
--- /dev/null
+++ b/usr/lib/libcap.so
@@ -0,0 +1 @@
+libcap.so.2
\ No newline at end of file
diff --git a/usr/lib/libcap.so.2 b/usr/lib/libcap.so.2
new file mode 120000
index 0000000..41150c5
--- /dev/null
+++ b/usr/lib/libcap.so.2
@@ -0,0 +1 @@
+libcap.so.2.24
\ No newline at end of file
diff --git a/usr/lib/libcap.so.2.24 b/usr/lib/libcap.so.2.24
new file mode 100644
index 0000000..cf430dc
Binary files /dev/null and b/usr/lib/libcap.so.2.24 differ
diff --git a/usr/lib/libcharset.so b/usr/lib/libcharset.so
new file mode 120000
index 0000000..6570913
--- /dev/null
+++ b/usr/lib/libcharset.so
@@ -0,0 +1 @@
+libcharset.so.1.0.0
\ No newline at end of file
diff --git a/usr/lib/libcharset.so.1 b/usr/lib/libcharset.so.1
new file mode 120000
index 0000000..6570913
--- /dev/null
+++ b/usr/lib/libcharset.so.1
@@ -0,0 +1 @@
+libcharset.so.1.0.0
\ No newline at end of file
diff --git a/usr/lib/libcharset.so.1.0.0 b/usr/lib/libcharset.so.1.0.0
new file mode 100644
index 0000000..8d93bcd
Binary files /dev/null and b/usr/lib/libcharset.so.1.0.0 differ
diff --git a/usr/lib/libcrypto.so.1.0.0 b/usr/lib/libcrypto.so.1.0.0
new file mode 100644
index 0000000..1999df2
Binary files /dev/null and b/usr/lib/libcrypto.so.1.0.0 differ
diff --git a/usr/lib/libcurl.so.4 b/usr/lib/libcurl.so.4
new file mode 120000
index 0000000..a5e8ad8
--- /dev/null
+++ b/usr/lib/libcurl.so.4
@@ -0,0 +1 @@
+libcurl.so.4.5.0
\ No newline at end of file
diff --git a/usr/lib/libcurl.so.4.5.0 b/usr/lib/libcurl.so.4.5.0
new file mode 100755
index 0000000..5070f50
Binary files /dev/null and b/usr/lib/libcurl.so.4.5.0 differ
diff --git a/usr/lib/libdaemon.so.0 b/usr/lib/libdaemon.so.0
new file mode 120000
index 0000000..3268735
--- /dev/null
+++ b/usr/lib/libdaemon.so.0
@@ -0,0 +1 @@
+libdaemon.so.0.5.0
\ No newline at end of file
diff --git a/usr/lib/libdaemon.so.0.5.0 b/usr/lib/libdaemon.so.0.5.0
new file mode 100755
index 0000000..a12f97e
Binary files /dev/null and b/usr/lib/libdaemon.so.0.5.0 differ
diff --git a/usr/lib/libdlanapi.so b/usr/lib/libdlanapi.so
new file mode 100755
index 0000000..089ec88
Binary files /dev/null and b/usr/lib/libdlanapi.so differ
diff --git a/usr/lib/libdvlthread.so b/usr/lib/libdvlthread.so
new file mode 100755
index 0000000..3bb1371
Binary files /dev/null and b/usr/lib/libdvlthread.so differ
diff --git a/usr/lib/libdvlutils.so b/usr/lib/libdvlutils.so
new file mode 100755
index 0000000..aef13b3
Binary files /dev/null and b/usr/lib/libdvlutils.so differ
diff --git a/usr/lib/libebtc.so b/usr/lib/libebtc.so
new file mode 100755
index 0000000..eb405ce
Binary files /dev/null and b/usr/lib/libebtc.so differ
diff --git a/usr/lib/libexpat.so.1 b/usr/lib/libexpat.so.1
new file mode 120000
index 0000000..3fbaa53
--- /dev/null
+++ b/usr/lib/libexpat.so.1
@@ -0,0 +1 @@
+libexpat.so.1.6.6
\ No newline at end of file
diff --git a/usr/lib/libexpat.so.1.6.6 b/usr/lib/libexpat.so.1.6.6
new file mode 100755
index 0000000..3dbb9bf
Binary files /dev/null and b/usr/lib/libexpat.so.1.6.6 differ
diff --git a/usr/lib/libfko.so.3 b/usr/lib/libfko.so.3
new file mode 120000
index 0000000..7479724
--- /dev/null
+++ b/usr/lib/libfko.so.3
@@ -0,0 +1 @@
+libfko.so.3.0.0
\ No newline at end of file
diff --git a/usr/lib/libfko.so.3.0.0 b/usr/lib/libfko.so.3.0.0
new file mode 100755
index 0000000..566ee7b
Binary files /dev/null and b/usr/lib/libfko.so.3.0.0 differ
diff --git a/usr/lib/libhyfi-bridge.so b/usr/lib/libhyfi-bridge.so
new file mode 100755
index 0000000..0e99ae4
Binary files /dev/null and b/usr/lib/libhyfi-bridge.so differ
diff --git a/usr/lib/libhyficommon.so b/usr/lib/libhyficommon.so
new file mode 100755
index 0000000..333c865
Binary files /dev/null and b/usr/lib/libhyficommon.so differ
diff --git a/usr/lib/libiconv.so b/usr/lib/libiconv.so
new file mode 120000
index 0000000..7834f45
--- /dev/null
+++ b/usr/lib/libiconv.so
@@ -0,0 +1 @@
+libiconv.so.2.4.0
\ No newline at end of file
diff --git a/usr/lib/libiconv.so.2 b/usr/lib/libiconv.so.2
new file mode 120000
index 0000000..7834f45
--- /dev/null
+++ b/usr/lib/libiconv.so.2
@@ -0,0 +1 @@
+libiconv.so.2.4.0
\ No newline at end of file
diff --git a/usr/lib/libiconv.so.2.4.0 b/usr/lib/libiconv.so.2.4.0
new file mode 100644
index 0000000..2dfa0a3
Binary files /dev/null and b/usr/lib/libiconv.so.2.4.0 differ
diff --git a/usr/lib/libieee1905.so b/usr/lib/libieee1905.so
new file mode 100755
index 0000000..f1d6226
Binary files /dev/null and b/usr/lib/libieee1905.so differ
diff --git a/usr/lib/libip4tc.so b/usr/lib/libip4tc.so
new file mode 120000
index 0000000..29570ee
--- /dev/null
+++ b/usr/lib/libip4tc.so
@@ -0,0 +1 @@
+libip4tc.so.0.1.0
\ No newline at end of file
diff --git a/usr/lib/libip4tc.so.0 b/usr/lib/libip4tc.so.0
new file mode 120000
index 0000000..29570ee
--- /dev/null
+++ b/usr/lib/libip4tc.so.0
@@ -0,0 +1 @@
+libip4tc.so.0.1.0
\ No newline at end of file
diff --git a/usr/lib/libip4tc.so.0.1.0 b/usr/lib/libip4tc.so.0.1.0
new file mode 100755
index 0000000..b24b895
Binary files /dev/null and b/usr/lib/libip4tc.so.0.1.0 differ
diff --git a/usr/lib/libip6tc.so b/usr/lib/libip6tc.so
new file mode 120000
index 0000000..936c4b6
--- /dev/null
+++ b/usr/lib/libip6tc.so
@@ -0,0 +1 @@
+libip6tc.so.0.1.0
\ No newline at end of file
diff --git a/usr/lib/libip6tc.so.0 b/usr/lib/libip6tc.so.0
new file mode 120000
index 0000000..936c4b6
--- /dev/null
+++ b/usr/lib/libip6tc.so.0
@@ -0,0 +1 @@
+libip6tc.so.0.1.0
\ No newline at end of file
diff --git a/usr/lib/libip6tc.so.0.1.0 b/usr/lib/libip6tc.so.0.1.0
new file mode 100755
index 0000000..f1a70d6
Binary files /dev/null and b/usr/lib/libip6tc.so.0.1.0 differ
diff --git a/usr/lib/libiptext.so b/usr/lib/libiptext.so
new file mode 100755
index 0000000..ca2efca
Binary files /dev/null and b/usr/lib/libiptext.so differ
diff --git a/usr/lib/libiptext4.so b/usr/lib/libiptext4.so
new file mode 100755
index 0000000..9d1ccdd
Binary files /dev/null and b/usr/lib/libiptext4.so differ
diff --git a/usr/lib/libiptext6.so b/usr/lib/libiptext6.so
new file mode 100755
index 0000000..1a6de4d
Binary files /dev/null and b/usr/lib/libiptext6.so differ
diff --git a/usr/lib/libiwinfo.so b/usr/lib/libiwinfo.so
new file mode 100755
index 0000000..eb6da8b
Binary files /dev/null and b/usr/lib/libiwinfo.so differ
diff --git a/usr/lib/libjansson.so b/usr/lib/libjansson.so
new file mode 120000
index 0000000..98be571
--- /dev/null
+++ b/usr/lib/libjansson.so
@@ -0,0 +1 @@
+libjansson.so.4.7.0
\ No newline at end of file
diff --git a/usr/lib/libjansson.so.4 b/usr/lib/libjansson.so.4
new file mode 120000
index 0000000..98be571
--- /dev/null
+++ b/usr/lib/libjansson.so.4
@@ -0,0 +1 @@
+libjansson.so.4.7.0
\ No newline at end of file
diff --git a/usr/lib/libjansson.so.4.7.0 b/usr/lib/libjansson.so.4.7.0
new file mode 100755
index 0000000..2a011c4
Binary files /dev/null and b/usr/lib/libjansson.so.4.7.0 differ
diff --git a/usr/lib/libjson-c.so.2 b/usr/lib/libjson-c.so.2
new file mode 120000
index 0000000..4dd5a4e
--- /dev/null
+++ b/usr/lib/libjson-c.so.2
@@ -0,0 +1 @@
+libjson-c.so.2.0.1
\ No newline at end of file
diff --git a/usr/lib/libjson-c.so.2.0.1 b/usr/lib/libjson-c.so.2.0.1
new file mode 100755
index 0000000..81954d8
Binary files /dev/null and b/usr/lib/libjson-c.so.2.0.1 differ
diff --git a/usr/lib/liblbcmnlibs.so b/usr/lib/liblbcmnlibs.so
new file mode 100755
index 0000000..845a827
Binary files /dev/null and b/usr/lib/liblbcmnlibs.so differ
diff --git a/usr/lib/libmcfwdtbleswitch.so b/usr/lib/libmcfwdtbleswitch.so
new file mode 100755
index 0000000..758b764
Binary files /dev/null and b/usr/lib/libmcfwdtbleswitch.so differ
diff --git a/usr/lib/libmcfwdtblwlan2g.so b/usr/lib/libmcfwdtblwlan2g.so
new file mode 100755
index 0000000..04af155
Binary files /dev/null and b/usr/lib/libmcfwdtblwlan2g.so differ
diff --git a/usr/lib/libmcfwdtblwlan5g.so b/usr/lib/libmcfwdtblwlan5g.so
new file mode 100755
index 0000000..bb1f545
Binary files /dev/null and b/usr/lib/libmcfwdtblwlan5g.so differ
diff --git a/usr/lib/libmesode.so.0 b/usr/lib/libmesode.so.0
new file mode 120000
index 0000000..3af1a72
--- /dev/null
+++ b/usr/lib/libmesode.so.0
@@ -0,0 +1 @@
+libmesode.so.0.0.0
\ No newline at end of file
diff --git a/usr/lib/libmesode.so.0.0.0 b/usr/lib/libmesode.so.0.0.0
new file mode 100755
index 0000000..38757e7
Binary files /dev/null and b/usr/lib/libmesode.so.0.0.0 differ
diff --git a/usr/lib/libmicrohttpd.so b/usr/lib/libmicrohttpd.so
new file mode 120000
index 0000000..71ab536
--- /dev/null
+++ b/usr/lib/libmicrohttpd.so
@@ -0,0 +1 @@
+libmicrohttpd.so.12.46.0
\ No newline at end of file
diff --git a/usr/lib/libmicrohttpd.so.12 b/usr/lib/libmicrohttpd.so.12
new file mode 120000
index 0000000..71ab536
--- /dev/null
+++ b/usr/lib/libmicrohttpd.so.12
@@ -0,0 +1 @@
+libmicrohttpd.so.12.46.0
\ No newline at end of file
diff --git a/usr/lib/libmicrohttpd.so.12.46.0 b/usr/lib/libmicrohttpd.so.12.46.0
new file mode 100755
index 0000000..0b3690d
Binary files /dev/null and b/usr/lib/libmicrohttpd.so.12.46.0 differ
diff --git a/usr/lib/libmicroxml.so b/usr/lib/libmicroxml.so
new file mode 120000
index 0000000..c71c374
--- /dev/null
+++ b/usr/lib/libmicroxml.so
@@ -0,0 +1 @@
+libmicroxml.so.1.0
\ No newline at end of file
diff --git a/usr/lib/libmicroxml.so.1 b/usr/lib/libmicroxml.so.1
new file mode 120000
index 0000000..c71c374
--- /dev/null
+++ b/usr/lib/libmicroxml.so.1
@@ -0,0 +1 @@
+libmicroxml.so.1.0
\ No newline at end of file
diff --git a/usr/lib/libmicroxml.so.1.0 b/usr/lib/libmicroxml.so.1.0
new file mode 100755
index 0000000..b27f61d
Binary files /dev/null and b/usr/lib/libmicroxml.so.1.0 differ
diff --git a/usr/lib/libnetsnmp.so.30 b/usr/lib/libnetsnmp.so.30
new file mode 120000
index 0000000..3b21ba4
--- /dev/null
+++ b/usr/lib/libnetsnmp.so.30
@@ -0,0 +1 @@
+libnetsnmp.so.30.0.3
\ No newline at end of file
diff --git a/usr/lib/libnetsnmp.so.30.0.3 b/usr/lib/libnetsnmp.so.30.0.3
new file mode 100755
index 0000000..2ab5f94
Binary files /dev/null and b/usr/lib/libnetsnmp.so.30.0.3 differ
diff --git a/usr/lib/libnetsnmpagent.so.30 b/usr/lib/libnetsnmpagent.so.30
new file mode 120000
index 0000000..838e41d
--- /dev/null
+++ b/usr/lib/libnetsnmpagent.so.30
@@ -0,0 +1 @@
+libnetsnmpagent.so.30.0.3
\ No newline at end of file
diff --git a/usr/lib/libnetsnmpagent.so.30.0.3 b/usr/lib/libnetsnmpagent.so.30.0.3
new file mode 100755
index 0000000..ec8f5ae
Binary files /dev/null and b/usr/lib/libnetsnmpagent.so.30.0.3 differ
diff --git a/usr/lib/libnetsnmphelpers.so.30 b/usr/lib/libnetsnmphelpers.so.30
new file mode 120000
index 0000000..c75e175
--- /dev/null
+++ b/usr/lib/libnetsnmphelpers.so.30
@@ -0,0 +1 @@
+libnetsnmphelpers.so.30.0.3
\ No newline at end of file
diff --git a/usr/lib/libnetsnmphelpers.so.30.0.3 b/usr/lib/libnetsnmphelpers.so.30.0.3
new file mode 100755
index 0000000..2caabf0
Binary files /dev/null and b/usr/lib/libnetsnmphelpers.so.30.0.3 differ
diff --git a/usr/lib/libnetsnmpmibs.so.30 b/usr/lib/libnetsnmpmibs.so.30
new file mode 120000
index 0000000..a0dc36f
--- /dev/null
+++ b/usr/lib/libnetsnmpmibs.so.30
@@ -0,0 +1 @@
+libnetsnmpmibs.so.30.0.3
\ No newline at end of file
diff --git a/usr/lib/libnetsnmpmibs.so.30.0.3 b/usr/lib/libnetsnmpmibs.so.30.0.3
new file mode 100755
index 0000000..4057da8
Binary files /dev/null and b/usr/lib/libnetsnmpmibs.so.30.0.3 differ
diff --git a/usr/lib/libnghttp2.so b/usr/lib/libnghttp2.so
new file mode 100644
index 0000000..2e154ab
Binary files /dev/null and b/usr/lib/libnghttp2.so differ
diff --git a/usr/lib/libnghttp2.so.14 b/usr/lib/libnghttp2.so.14
new file mode 100644
index 0000000..2e154ab
Binary files /dev/null and b/usr/lib/libnghttp2.so.14 differ
diff --git a/usr/lib/libnghttp2.so.14.15.1 b/usr/lib/libnghttp2.so.14.15.1
new file mode 100644
index 0000000..2e154ab
Binary files /dev/null and b/usr/lib/libnghttp2.so.14.15.1 differ
diff --git a/usr/lib/libnl-3.so.200 b/usr/lib/libnl-3.so.200
new file mode 120000
index 0000000..c221c88
--- /dev/null
+++ b/usr/lib/libnl-3.so.200
@@ -0,0 +1 @@
+libnl-3.so.200.16.1
\ No newline at end of file
diff --git a/usr/lib/libnl-3.so.200.16.1 b/usr/lib/libnl-3.so.200.16.1
new file mode 100755
index 0000000..00ae38e
Binary files /dev/null and b/usr/lib/libnl-3.so.200.16.1 differ
diff --git a/usr/lib/libnl-genl-3.so.200 b/usr/lib/libnl-genl-3.so.200
new file mode 120000
index 0000000..da5fd0b
--- /dev/null
+++ b/usr/lib/libnl-genl-3.so.200
@@ -0,0 +1 @@
+libnl-genl-3.so.200.16.1
\ No newline at end of file
diff --git a/usr/lib/libnl-genl-3.so.200.16.1 b/usr/lib/libnl-genl-3.so.200.16.1
new file mode 100755
index 0000000..ebc4777
Binary files /dev/null and b/usr/lib/libnl-genl-3.so.200.16.1 differ
diff --git a/usr/lib/libnl-nf-3.so.200 b/usr/lib/libnl-nf-3.so.200
new file mode 120000
index 0000000..5789642
--- /dev/null
+++ b/usr/lib/libnl-nf-3.so.200
@@ -0,0 +1 @@
+libnl-nf-3.so.200.16.1
\ No newline at end of file
diff --git a/usr/lib/libnl-nf-3.so.200.16.1 b/usr/lib/libnl-nf-3.so.200.16.1
new file mode 100755
index 0000000..f3b9774
Binary files /dev/null and b/usr/lib/libnl-nf-3.so.200.16.1 differ
diff --git a/usr/lib/libnl-route-3.so.200 b/usr/lib/libnl-route-3.so.200
new file mode 120000
index 0000000..02732b6
--- /dev/null
+++ b/usr/lib/libnl-route-3.so.200
@@ -0,0 +1 @@
+libnl-route-3.so.200.16.1
\ No newline at end of file
diff --git a/usr/lib/libnl-route-3.so.200.16.1 b/usr/lib/libnl-route-3.so.200.16.1
new file mode 100755
index 0000000..b8aec49
Binary files /dev/null and b/usr/lib/libnl-route-3.so.200.16.1 differ
diff --git a/usr/lib/libnl-tiny.so b/usr/lib/libnl-tiny.so
new file mode 100755
index 0000000..764857d
Binary files /dev/null and b/usr/lib/libnl-tiny.so differ
diff --git a/usr/lib/libpcap.so b/usr/lib/libpcap.so
new file mode 120000
index 0000000..d0f3177
--- /dev/null
+++ b/usr/lib/libpcap.so
@@ -0,0 +1 @@
+libpcap.so.1.3
\ No newline at end of file
diff --git a/usr/lib/libpcap.so.1.3 b/usr/lib/libpcap.so.1.3
new file mode 120000
index 0000000..b216b0f
--- /dev/null
+++ b/usr/lib/libpcap.so.1.3
@@ -0,0 +1 @@
+libpcap.so.1.3.0
\ No newline at end of file
diff --git a/usr/lib/libpcap.so.1.3.0 b/usr/lib/libpcap.so.1.3.0
new file mode 100644
index 0000000..bf14c68
Binary files /dev/null and b/usr/lib/libpcap.so.1.3.0 differ
diff --git a/usr/lib/libpluginManager.so b/usr/lib/libpluginManager.so
new file mode 100755
index 0000000..a729050
Binary files /dev/null and b/usr/lib/libpluginManager.so differ
diff --git a/usr/lib/libprotobuf.so b/usr/lib/libprotobuf.so
new file mode 120000
index 0000000..cde87ee
--- /dev/null
+++ b/usr/lib/libprotobuf.so
@@ -0,0 +1 @@
+libprotobuf.so.14.0.0
\ No newline at end of file
diff --git a/usr/lib/libprotobuf.so.14 b/usr/lib/libprotobuf.so.14
new file mode 120000
index 0000000..cde87ee
--- /dev/null
+++ b/usr/lib/libprotobuf.so.14
@@ -0,0 +1 @@
+libprotobuf.so.14.0.0
\ No newline at end of file
diff --git a/usr/lib/libprotobuf.so.14.0.0 b/usr/lib/libprotobuf.so.14.0.0
new file mode 100755
index 0000000..e2f20c6
Binary files /dev/null and b/usr/lib/libprotobuf.so.14.0.0 differ
diff --git a/usr/lib/libpsService.so b/usr/lib/libpsService.so
new file mode 100755
index 0000000..2b2b123
Binary files /dev/null and b/usr/lib/libpsService.so differ
diff --git a/usr/lib/libqca_wifison_ext.so b/usr/lib/libqca_wifison_ext.so
new file mode 100755
index 0000000..4072b7a
Binary files /dev/null and b/usr/lib/libqca_wifison_ext.so differ
diff --git a/usr/lib/libssl.so.1.0.0 b/usr/lib/libssl.so.1.0.0
new file mode 100644
index 0000000..3a19aa8
Binary files /dev/null and b/usr/lib/libssl.so.1.0.0 differ
diff --git a/usr/lib/libstdc++.so.6 b/usr/lib/libstdc++.so.6
new file mode 120000
index 0000000..4f2ca2f
--- /dev/null
+++ b/usr/lib/libstdc++.so.6
@@ -0,0 +1 @@
+libstdc++.so.6.0.19
\ No newline at end of file
diff --git a/usr/lib/libstdc++.so.6.0.19 b/usr/lib/libstdc++.so.6.0.19
new file mode 100755
index 0000000..ac77888
Binary files /dev/null and b/usr/lib/libstdc++.so.6.0.19 differ
diff --git a/usr/lib/libstdc++.so.6.0.19-gdb.py b/usr/lib/libstdc++.so.6.0.19-gdb.py
new file mode 100644
index 0000000..d55feac
--- /dev/null
+++ b/usr/lib/libstdc++.so.6.0.19-gdb.py
@@ -0,0 +1,60 @@
+# -*- python -*-
+# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import sys
+import gdb
+import os
+import os.path
+
+pythondir = '/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/share/gcc-4.8.3/python'
+libdir = '/mnt/src/qsdk/staging_dir/toolchain-mips_74kc_gcc-4.8-linaro_uClibc-1.0.14/mips-openwrt-linux-uclibc/lib'
+
+# This file might be loaded when there is no current objfile.  This
+# can happen if the user loads it manually.  In this case we don't
+# update sys.path; instead we just hope the user managed to do that
+# beforehand.
+if gdb.current_objfile () is not None:
+    # Update module path.  We want to find the relative path from libdir
+    # to pythondir, and then we want to apply that relative path to the
+    # directory holding the objfile with which this file is associated.
+    # This preserves relocatability of the gcc tree.
+
+    # Do a simple normalization that removes duplicate separators.
+    pythondir = os.path.normpath (pythondir)
+    libdir = os.path.normpath (libdir)
+
+    prefix = os.path.commonprefix ([libdir, pythondir])
+    # In some bizarre configuration we might have found a match in the
+    # middle of a directory name.
+    if prefix[-1] != '/':
+        prefix = os.path.dirname (prefix) + '/'
+
+    # Strip off the prefix.
+    pythondir = pythondir[len (prefix):]
+    libdir = libdir[len (prefix):]
+
+    # Compute the ".."s needed to get from libdir to the prefix.
+    dotdots = ('..' + os.sep) * len (libdir.split (os.sep))
+
+    objfile = gdb.current_objfile ().filename
+    dir_ = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
+
+    if not dir_ in sys.path:
+        sys.path.insert(0, dir_)
+
+# Load the pretty-printers.
+from libstdcxx.v6.printers import register_libstdcxx_printers
+register_libstdcxx_printers (gdb.current_objfile ())
diff --git a/usr/lib/libstorage.so b/usr/lib/libstorage.so
new file mode 100755
index 0000000..0c6e60d
Binary files /dev/null and b/usr/lib/libstorage.so differ
diff --git a/usr/lib/libtlvcmdrsp.so b/usr/lib/libtlvcmdrsp.so
new file mode 100644
index 0000000..d0796a2
Binary files /dev/null and b/usr/lib/libtlvcmdrsp.so differ
diff --git a/usr/lib/libtlvencoder.so b/usr/lib/libtlvencoder.so
new file mode 100644
index 0000000..5fbf543
Binary files /dev/null and b/usr/lib/libtlvencoder.so differ
diff --git a/usr/lib/libtlvparser.so b/usr/lib/libtlvparser.so
new file mode 100644
index 0000000..0acade6
Binary files /dev/null and b/usr/lib/libtlvparser.so differ
diff --git a/usr/lib/libtlvtemplate.so b/usr/lib/libtlvtemplate.so
new file mode 100644
index 0000000..845c1d9
Binary files /dev/null and b/usr/lib/libtlvtemplate.so differ
diff --git a/usr/lib/libtlvutil.so b/usr/lib/libtlvutil.so
new file mode 100644
index 0000000..5d23e62
Binary files /dev/null and b/usr/lib/libtlvutil.so differ
diff --git a/usr/lib/libucihelper.so b/usr/lib/libucihelper.so
new file mode 100755
index 0000000..85bd8de
Binary files /dev/null and b/usr/lib/libucihelper.so differ
diff --git a/usr/lib/libuuid.so b/usr/lib/libuuid.so
new file mode 120000
index 0000000..774fbfe
--- /dev/null
+++ b/usr/lib/libuuid.so
@@ -0,0 +1 @@
+libuuid.so.1.3.0
\ No newline at end of file
diff --git a/usr/lib/libuuid.so.1 b/usr/lib/libuuid.so.1
new file mode 120000
index 0000000..774fbfe
--- /dev/null
+++ b/usr/lib/libuuid.so.1
@@ -0,0 +1 @@
+libuuid.so.1.3.0
\ No newline at end of file
diff --git a/usr/lib/libuuid.so.1.3.0 b/usr/lib/libuuid.so.1.3.0
new file mode 100755
index 0000000..d70a194
Binary files /dev/null and b/usr/lib/libuuid.so.1.3.0 differ
diff --git a/usr/lib/libwifisoncfg.so b/usr/lib/libwifisoncfg.so
new file mode 100755
index 0000000..200f6f5
Binary files /dev/null and b/usr/lib/libwifisoncfg.so differ
diff --git a/usr/lib/libwlanstats.so b/usr/lib/libwlanstats.so
new file mode 100644
index 0000000..15cf78d
Binary files /dev/null and b/usr/lib/libwlanstats.so differ
diff --git a/usr/lib/libwpa2.so b/usr/lib/libwpa2.so
new file mode 100755
index 0000000..a637f05
Binary files /dev/null and b/usr/lib/libwpa2.so differ
diff --git a/usr/lib/libxtables.so b/usr/lib/libxtables.so
new file mode 120000
index 0000000..914482b
--- /dev/null
+++ b/usr/lib/libxtables.so
@@ -0,0 +1 @@
+libxtables.so.10.0.0
\ No newline at end of file
diff --git a/usr/lib/libxtables.so.10 b/usr/lib/libxtables.so.10
new file mode 120000
index 0000000..914482b
--- /dev/null
+++ b/usr/lib/libxtables.so.10
@@ -0,0 +1 @@
+libxtables.so.10.0.0
\ No newline at end of file
diff --git a/usr/lib/libxtables.so.10.0.0 b/usr/lib/libxtables.so.10.0.0
new file mode 100755
index 0000000..3d5767c
Binary files /dev/null and b/usr/lib/libxtables.so.10.0.0 differ
diff --git a/usr/lib/libz.so b/usr/lib/libz.so
new file mode 120000
index 0000000..95e0ebd
--- /dev/null
+++ b/usr/lib/libz.so
@@ -0,0 +1 @@
+libz.so.1.2.11
\ No newline at end of file
diff --git a/usr/lib/libz.so.1 b/usr/lib/libz.so.1
new file mode 120000
index 0000000..95e0ebd
--- /dev/null
+++ b/usr/lib/libz.so.1
@@ -0,0 +1 @@
+libz.so.1.2.11
\ No newline at end of file
diff --git a/usr/lib/libz.so.1.2.11 b/usr/lib/libz.so.1.2.11
new file mode 100755
index 0000000..667d389
Binary files /dev/null and b/usr/lib/libz.so.1.2.11 differ
diff --git a/usr/lib/opkg/info/avahi-autoipd.control b/usr/lib/opkg/info/avahi-autoipd.control
new file mode 100644
index 0000000..b79f87d
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-autoipd.control
@@ -0,0 +1,23 @@
+Package: avahi-autoipd
+Version: 0.6.31-12
+Depends: libc, libdaemon
+Source: qca/feeds/packages/libs/avahi
+Section: net
+Maintainer: Ted Hess <thess@kitschensync.net>
+Architecture: ar71xx
+Installed-Size: 13802
+Description:  Avahi is an mDNS/DNS-SD (aka RendezVous/Bonjour/ZeroConf)
+ implementation (library). It facilitates
+ service discovery on a local network -- this means that
+ you can plug your laptop or computer into a network and
+ instantly be able to view other people who you can chat with,
+ find printers to print to or find files being shared.
+ This kind of technology is already found in MacOS X
+ (branded 'Rendezvous', 'Bonjour' and sometimes 'ZeroConf')
+ and is very convenient.
+ .
+ This package implements IPv4LL, "Dynamic Configuration of IPv4 Link-Local
+ Addresses" (IETF RFC3927), a protocol for automatic IP address configuration
+ from the link-local 169.254.0.0/16 range without the need for a central
+ server. It is primarily intended to be used in ad-hoc networks which lack a
+ DHCP server.
diff --git a/usr/lib/opkg/info/avahi-autoipd.list b/usr/lib/opkg/info/avahi-autoipd.list
new file mode 100644
index 0000000..e135e5c
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-autoipd.list
@@ -0,0 +1 @@
+/usr/sbin/avahi-autoipd
diff --git a/usr/lib/opkg/info/avahi-daemon-service-http.control b/usr/lib/opkg/info/avahi-daemon-service-http.control
new file mode 100644
index 0000000..98c00bc
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-daemon-service-http.control
@@ -0,0 +1,19 @@
+Package: avahi-daemon-service-http
+Version: 0.6.31-12
+Depends: libc, avahi-daemon
+Source: qca/feeds/packages/libs/avahi
+Section: net
+Maintainer: Ted Hess <thess@kitschensync.net>
+Architecture: ar71xx
+Installed-Size: 377
+Description:  Avahi is an mDNS/DNS-SD (aka RendezVous/Bonjour/ZeroConf)
+ implementation (library). It facilitates
+ service discovery on a local network -- this means that
+ you can plug your laptop or computer into a network and
+ instantly be able to view other people who you can chat with,
+ find printers to print to or find files being shared.
+ This kind of technology is already found in MacOS X
+ (branded 'Rendezvous', 'Bonjour' and sometimes 'ZeroConf')
+ and is very convenient.
+ .
+ This package contains the service definition for announcing HTTP service.
diff --git a/usr/lib/opkg/info/avahi-daemon-service-http.list b/usr/lib/opkg/info/avahi-daemon-service-http.list
new file mode 100644
index 0000000..48c1185
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-daemon-service-http.list
@@ -0,0 +1 @@
+/etc/avahi/services/http.service
diff --git a/usr/lib/opkg/info/avahi-daemon-service-https.control b/usr/lib/opkg/info/avahi-daemon-service-https.control
new file mode 100644
index 0000000..ae03356
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-daemon-service-https.control
@@ -0,0 +1,19 @@
+Package: avahi-daemon-service-https
+Version: 0.6.31-12
+Depends: libc, avahi-daemon
+Source: qca/feeds/packages/libs/avahi
+Section: net
+Maintainer: Ted Hess <thess@kitschensync.net>
+Architecture: ar71xx
+Installed-Size: 380
+Description:  Avahi is an mDNS/DNS-SD (aka RendezVous/Bonjour/ZeroConf)
+ implementation (library). It facilitates
+ service discovery on a local network -- this means that
+ you can plug your laptop or computer into a network and
+ instantly be able to view other people who you can chat with,
+ find printers to print to or find files being shared.
+ This kind of technology is already found in MacOS X
+ (branded 'Rendezvous', 'Bonjour' and sometimes 'ZeroConf')
+ and is very convenient.
+ .
+ This package contains the service definition for announcing HTTPS service.
diff --git a/usr/lib/opkg/info/avahi-daemon-service-https.list b/usr/lib/opkg/info/avahi-daemon-service-https.list
new file mode 100644
index 0000000..e86b337
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-daemon-service-https.list
@@ -0,0 +1 @@
+/etc/avahi/services/https.service
diff --git a/usr/lib/opkg/info/avahi-nodbus-daemon.control b/usr/lib/opkg/info/avahi-nodbus-daemon.control
new file mode 100644
index 0000000..f42f107
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-nodbus-daemon.control
@@ -0,0 +1,21 @@
+Package: avahi-nodbus-daemon
+Version: 0.6.31-12
+Depends: libc, libavahi-nodbus-support, libexpat, librt, libdaemon
+Provides: avahi-daemon
+Source: qca/feeds/packages/libs/avahi
+Section: net
+Require-User: avahi=105:avahi=105
+Maintainer: Ted Hess <thess@kitschensync.net>
+Architecture: ar71xx
+Installed-Size: 20844
+Description:  Avahi is an mDNS/DNS-SD (aka RendezVous/Bonjour/ZeroConf)
+ implementation (library). It facilitates
+ service discovery on a local network -- this means that
+ you can plug your laptop or computer into a network and
+ instantly be able to view other people who you can chat with,
+ find printers to print to or find files being shared.
+ This kind of technology is already found in MacOS X
+ (branded 'Rendezvous', 'Bonjour' and sometimes 'ZeroConf')
+ and is very convenient.
+ .
+ This package contains an mDNS/DNS-SD daemon.
diff --git a/usr/lib/opkg/info/avahi-nodbus-daemon.list b/usr/lib/opkg/info/avahi-nodbus-daemon.list
new file mode 100644
index 0000000..3dd7a23
--- /dev/null
+++ b/usr/lib/opkg/info/avahi-nodbus-daemon.list
@@ -0,0 +1,4 @@
+/usr/sbin/avahi-daemon
+/etc/config/avahi
+/etc/init.d/avahi-daemon
+/etc/avahi/avahi-daemon.conf
diff --git a/usr/lib/opkg/info/base-files.conffiles b/usr/lib/opkg/info/base-files.conffiles
new file mode 100644
index 0000000..5762fd6
--- /dev/null
+++ b/usr/lib/opkg/info/base-files.conffiles
@@ -0,0 +1,13 @@
+/etc/config/system
+/etc/hosts
+/etc/group
+/etc/passwd
+/etc/shadow
+/etc/profile
+/etc/protocols
+/etc/services
+/etc/shells
+/etc/sysctl.conf
+/etc/rc.local
+/etc/sysupgrade.conf
+/etc/config/system
diff --git a/usr/lib/opkg/info/base-files.control b/usr/lib/opkg/info/base-files.control
new file mode 100644
index 0000000..8137c68
--- /dev/null
+++ b/usr/lib/opkg/info/base-files.control
@@ -0,0 +1,9 @@
+Package: base-files
+Version: 157.2-15a464b+r49254
+Depends: libc, netifd, procd, jsonfilter
+Source: package/base-files
+License: GPL-2.0
+Section: base
+Architecture: ar71xx
+Installed-Size: 66138
+Description:  This package contains a base filesystem and system scripts for OpenWrt.
diff --git a/usr/lib/opkg/info/base-files.list b/usr/lib/opkg/info/base-files.list
new file mode 100644
index 0000000..18ad60e
--- /dev/null
+++ b/usr/lib/opkg/info/base-files.list
@@ -0,0 +1,108 @@
+/etc/openwrt_version
+/lib/upgrade/openmesh.sh
+/etc/banner.failsafe
+/etc/resolv.conf
+/lib/ar71xx.sh
+/lib/upgrade/dir825.sh
+/etc/init.d/done
+/bin/config_generate
+/var
+/etc/uci-defaults/09_fix-trx-header
+/etc/opkg/keys/de98a2dd1d0f8a07
+/etc/init.d/system
+/etc/preinit
+/sbin/wget2nand
+/lib/upgrade/platform.sh
+/etc/shells
+/lib/preinit/10_sysinfo
+/lib/preinit/05_set_preinit_iface_ar71xx
+/lib/preinit/70_initramfs_test
+/etc/device_info
+/etc/protocols
+/lib/preinit/03_preinit_do_ar71xx.sh
+/etc/uci-defaults/12_network-generate-ula
+/lib/preinit/10_indicate_preinit
+/lib/functions/uci-defaults-new.sh
+/etc/uci-defaults/04_led_migration
+/etc/hotplug.d/net/10-ar922x-led-fix
+/etc/config/system
+/etc/fstab
+/etc/sysctl.conf
+/sbin/sysupgrade
+/lib/preinit/99_10_run_init
+/etc/opkg/keys/53bad1233d4c98c5
+/sbin/led.sh
+/lib/preinit/50_indicate_regular_preinit
+/etc/banner
+/etc/shadow
+/etc/rc.common
+/sbin/setmac
+/etc/uci-defaults/10_migrate-shadow
+/etc/uci-defaults/01_leds
+/lib/preinit/10_indicate_failsafe
+/etc/uci-defaults/01_wifitoggle
+/init
+/lib/debug/system
+/etc/uci-defaults/03_network-vlan-migration
+/lib/preinit/80_mount_root
+/etc/uci-defaults/01_buttons
+/etc/rc.local
+/lib/functions/uci-defaults.sh
+/etc/init.d/led
+/lib/functions/network.sh
+/etc/init.d/sysctl
+/sbin/hotplug-call
+/etc/uci-defaults/03_network-switchX-migration
+/lib/preinit/05_set_iface_mac_ar71xx
+/etc/rc.button/failsafe
+/etc/services
+/etc/keys/fw_pub_key.pem
+/lib/functions/system.sh
+/bin/board_detect
+/lib/delos-functions.sh
+/lib/upgrade/common.sh
+/lib/upgrade/delos.sh
+/etc/rc.button/power
+/etc/sysupgrade.conf
+/etc/rc.button/rfkill
+/lib/upgrade/keep.d/base-files
+/lib/preinit/40_run_failsafe_hook
+/etc/group
+/etc/rc.button/reset
+/lib/preinit/30_failsafe_wait
+/sbin/firstboot
+/etc/uci-defaults/09_fix-seama-header
+/etc/hotplug.d/firmware/10-ath9k-eeprom
+/lib/upgrade/allnet.sh
+/bin/login.sh
+/etc/hotplug.d/net/00-sysctl
+/etc/hosts
+/lib/upgrade/ioe.sh
+/lib/functions.sh
+/etc/uci-defaults/11_migrate-sysctl
+/lib/functions/leds.sh
+/sbin/sysdebug
+/rom/note
+/etc/delos-version
+/etc/inittab
+/etc/openwrt_release
+/sbin/wifi
+/sbin/kexec_load.sh
+/etc/profile
+/lib/preinit/81_load_wifi_board_bin
+/etc/uci-defaults/02_network
+/lib/preinit/99_10_failsafe_login
+/etc/init.d/sysfixtime
+/etc/TZ
+/etc/init.d/umount
+/lib/functions/service.sh
+/lib/upgrade/keep.d/base-files-essential
+/etc/passwd
+/lib/preinit/02_default_set_state
+/etc/mtab
+/etc/init.d/boot
+/lib/functions/preinit.sh
+/bin/ipcalc.sh
+/etc/diag.sh
+/lib/preinit/82_patch_ath10k
+/etc/hotplug.d/firmware/11-ath10k-caldata
diff --git a/usr/lib/opkg/info/boost-program_options.control b/usr/lib/opkg/info/boost-program_options.control
new file mode 100644
index 0000000..3f8feef
--- /dev/null
+++ b/usr/lib/opkg/info/boost-program_options.control
@@ -0,0 +1,12 @@
+Package: boost-program_options
+Version: 1_58_0-4
+Depends: libc, libstdcpp, libpthread, librt
+Source: qca/feeds/packages/libs/boost
+License: Boost Software License http://www.boost.org/users/license.html
+Section: libs
+Maintainer: Carlos M. Ferreira <carlosmf.pt@gmail.com>
+Architecture: ar71xx
+Installed-Size: 98117
+Description:  Boost provides free peer-reviewed portable C++ source libraries
+ .
+ This package contains the Boost program_options library.
diff --git a/usr/lib/opkg/info/boost-program_options.list b/usr/lib/opkg/info/boost-program_options.list
new file mode 100644
index 0000000..8d716d2
--- /dev/null
+++ b/usr/lib/opkg/info/boost-program_options.list
@@ -0,0 +1,2 @@
+/usr/lib/libboost_program_options.so
+/usr/lib/libboost_program_options.so.1.58.0
diff --git a/usr/lib/opkg/info/boost-system.control b/usr/lib/opkg/info/boost-system.control
new file mode 100644
index 0000000..d7a3aa2
--- /dev/null
+++ b/usr/lib/opkg/info/boost-system.control
@@ -0,0 +1,12 @@
+Package: boost-system
+Version: 1_58_0-4
+Depends: libc, libstdcpp, libpthread, librt
+Source: qca/feeds/packages/libs/boost
+License: Boost Software License http://www.boost.org/users/license.html
+Section: libs
+Maintainer: Carlos M. Ferreira <carlosmf.pt@gmail.com>
+Architecture: ar71xx
+Installed-Size: 3812
+Description:  Boost provides free peer-reviewed portable C++ source libraries
+ .
+ This package contains the Boost system library.
diff --git a/usr/lib/opkg/info/boost-system.list b/usr/lib/opkg/info/boost-system.list
new file mode 100644
index 0000000..9a1f4fb
--- /dev/null
+++ b/usr/lib/opkg/info/boost-system.list
@@ -0,0 +1,2 @@
+/usr/lib/libboost_system.so.1.58.0
+/usr/lib/libboost_system.so
diff --git a/usr/lib/opkg/info/bridge.control b/usr/lib/opkg/info/bridge.control
new file mode 100644
index 0000000..ff02faf
--- /dev/null
+++ b/usr/lib/opkg/info/bridge.control
@@ -0,0 +1,11 @@
+Package: bridge
+Version: 1.5-3
+Depends: libc
+Source: qca/feeds/packages/net/bridge-utils
+License: GPL-2.0+
+LicenseFiles: COPYING
+Section: net
+Architecture: ar71xx
+Installed-Size: 10051
+Description:  Manage ethernet bridging: a way to connect networks together to
+ form a larger network.
diff --git a/usr/lib/opkg/info/bridge.list b/usr/lib/opkg/info/bridge.list
new file mode 100644
index 0000000..de285c9
--- /dev/null
+++ b/usr/lib/opkg/info/bridge.list
@@ -0,0 +1 @@
+/usr/sbin/brctl
diff --git a/usr/lib/opkg/info/busybox.control b/usr/lib/opkg/info/busybox.control
new file mode 100644
index 0000000..b792f3c
--- /dev/null
+++ b/usr/lib/opkg/info/busybox.control
@@ -0,0 +1,13 @@
+Package: busybox
+Version: 1.25.1-2
+Depends: libc, librpc
+Source: package/utils/busybox
+License: GPL-2.0
+LicenseFiles: LICENSE archival/libarchive/bz/LICENSE
+Section: base
+Essential: yes
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 262615
+Description:  The Swiss Army Knife of embedded Linux.
+ It slices, it dices, it makes Julian Fries.
diff --git a/usr/lib/opkg/info/busybox.list b/usr/lib/opkg/info/busybox.list
new file mode 100644
index 0000000..dff584d
--- /dev/null
+++ b/usr/lib/opkg/info/busybox.list
@@ -0,0 +1,131 @@
+/bin/dmesg
+/usr/bin/id
+/bin/rm
+/usr/bin/wget
+/bin/sh
+/sbin/vconfig
+/usr/bin/test
+/bin/zcat
+/bin/fgrep
+/sbin/halt
+/bin/ash
+/sbin/reboot
+/bin/true
+/sbin/route
+/usr/bin/md5sum
+/usr/bin/free
+/usr/bin/time
+/usr/bin/passwd
+/usr/bin/traceroute
+/bin/vi
+/usr/bin/tftp
+/bin/pwd
+/usr/bin/nc
+/bin/chown
+/etc/init.d/cron
+/bin/mount
+/usr/bin/ipcs
+/bin/sync
+/usr/bin/dirname
+/usr/bin/hostid
+/sbin/hwclock
+/sbin/udhcpc
+/usr/sbin/inetd
+/bin/ping6
+/usr/bin/basename
+/bin/echo
+/usr/bin/less
+/usr/sbin/chroot
+/sbin/devmem
+/usr/sbin/crond
+/usr/bin/ftpget
+/usr/bin/head
+/bin/gunzip
+/bin/netstat
+/usr/sbin/ftpd
+/bin/busybox
+/bin/grep
+/usr/bin/clear
+/usr/bin/seq
+/bin/sleep
+/bin/nice
+/bin/kill
+/bin/mktemp
+/usr/bin/tr
+/bin/mknod
+/bin/rmdir
+/usr/bin/uniq
+/usr/bin/tee
+/etc/init.d/inetd
+/usr/bin/ftpput
+/usr/bin/bzcat
+/usr/bin/hexdump
+/usr/bin/sha256sum
+/bin/date
+/usr/bin/wc
+/usr/bin/[
+/usr/bin/nslookup
+/usr/bin/pgrep
+/bin/umount
+/bin/netmsg
+/usr/bin/tail
+/bin/stat
+/usr/bin/mkfifo
+/bin/chgrp
+/bin/cp
+/sbin/poweroff
+/usr/bin/[[
+/bin/dd
+/bin/lock
+/bin/df
+/bin/false
+/usr/bin/killall
+/usr/bin/sort
+/bin/mkdir
+/sbin/ifconfig
+/usr/bin/cmp
+/usr/bin/reset
+/sbin/start-stop-daemon
+/bin/usleep
+/bin/cat
+/usr/sbin/arping
+/usr/bin/telnet
+/usr/sbin/tftpd
+/bin/touch
+/sbin/mkswap
+/bin/tar
+/usr/bin/taskset
+/usr/bin/setsid
+/usr/bin/yes
+/usr/bin/top
+/sbin/switch_root
+/usr/bin/expr
+/usr/bin/env
+/sbin/sysctl
+/bin/sed
+/usr/bin/logger
+/bin/chmod
+/usr/bin/awk
+/bin/uname
+/usr/bin/which
+/usr/bin/find
+/bin/ln
+/bin/ls
+/sbin/pivot_root
+/usr/bin/cut
+/usr/bin/du
+/bin/mv
+/bin/run-parts
+/usr/bin/crontab
+/usr/bin/printf
+/bin/ping
+/usr/bin/bunzip2
+/usr/bin/uptime
+/bin/fsync
+/bin/pidof
+/usr/bin/readlink
+/usr/bin/strings
+/bin/egrep
+/bin/ps
+/usr/bin/xargs
+/bin/gzip
diff --git a/usr/lib/opkg/info/ca-certificates.control b/usr/lib/opkg/info/ca-certificates.control
new file mode 100644
index 0000000..c9e6a6e
--- /dev/null
+++ b/usr/lib/opkg/info/ca-certificates.control
@@ -0,0 +1,9 @@
+Package: ca-certificates
+Version: 20161130+nmu1
+Depends: libc
+Source: package/system/ca-certificates
+Section: base
+Maintainer: Christian Schoenebeck <christian.schoenebeck@gmail.com>
+Architecture: all
+Installed-Size: 172281
+Description:  System CA certificates
diff --git a/usr/lib/opkg/info/ca-certificates.list b/usr/lib/opkg/info/ca-certificates.list
new file mode 100644
index 0000000..6cfaa44
--- /dev/null
+++ b/usr/lib/opkg/info/ca-certificates.list
@@ -0,0 +1,333 @@
+/etc/ssl/certs/Deutsche_Telekom_Root_CA_2.crt
+/etc/ssl/certs/TeliaSonera_Root_CA_v1.crt
+/etc/ssl/certs/578d5c04.0
+/etc/ssl/certs/cbeee9e2.0
+/etc/ssl/certs/China_Internet_Network_Information_Center_EV_Certificates_Root.crt
+/etc/ssl/certs/18856ac4.0
+/etc/ssl/certs/SecureTrust_CA.crt
+/etc/ssl/certs/24ad0b63.0
+/etc/ssl/certs/dc45b0bd.0
+/etc/ssl/certs/AddTrust_External_Root.crt
+/etc/ssl/certs/ba89ed3b.0
+/etc/ssl/certs/Camerfirma_Chambers_of_Commerce_Root.crt
+/etc/ssl/certs/607986c7.0
+/etc/ssl/certs/667c66d4.0
+/etc/ssl/certs/749e9e03.0
+/etc/ssl/certs/930ac5d2.0
+/etc/ssl/certs/DST_Root_CA_X3.crt
+/etc/ssl/certs/a94d09e5.0
+/etc/ssl/certs/d853d49e.0
+/etc/ssl/certs/1e09d511.0
+/etc/ssl/certs/Certum_Trusted_Network_CA.crt
+/etc/ssl/certs/b0e59380.0
+/etc/ssl/certs/3e45d192.0
+/etc/ssl/certs/ef2f636c.0
+/etc/ssl/certs/812e17de.0
+/etc/ssl/certs/244b5494.0
+/etc/ssl/certs/Security_Communication_EV_RootCA1.crt
+/etc/ssl/certs/d4dae3dd.0
+/etc/ssl/certs/75d1b2ed.0
+/etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
+/etc/ssl/certs/653b494a.0
+/etc/ssl/certs/5ad8a5d6.0
+/etc/ssl/certs/4a6481c9.0
+/etc/ssl/certs/442adcac.0
+/etc/ssl/certs/2ae6433e.0
+/etc/ssl/certs/Staat_der_Nederlanden_EV_Root_CA.crt
+/etc/ssl/certs/ca6e4ad9.0
+/etc/ssl/certs/bb2d49a0.0
+/etc/ssl/certs/9168f543.0
+/etc/ssl/certs/QuoVadis_Root_CA_2.crt
+/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H5.crt
+/etc/ssl/certs/cd58d51e.0
+/etc/ssl/certs/9007ae68.0
+/etc/ssl/certs/UTN_USERFirst_Hardware_Root_CA.crt
+/etc/ssl/certs/AffirmTrust_Commercial.crt
+/etc/ssl/certs/DST_ACES_CA_X6.crt
+/etc/ssl/certs/d6325660.0
+/etc/ssl/certs/Izenpe.com.crt
+/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_2009.crt
+/etc/ssl/certs/65b876bd.0
+/etc/ssl/certs/ISRG_Root_X1.crt
+/etc/ssl/certs/cb357862.0
+/etc/ssl/certs/e8de2f56.0
+/etc/ssl/certs/54657681.0
+/etc/ssl/certs/QuoVadis_Root_CA_1_G3.crt
+/etc/ssl/certs/7d5a75e4.0
+/etc/ssl/certs/7992b8bb.0
+/etc/ssl/certs/GeoTrust_Primary_Certification_Authority.crt
+/etc/ssl/certs/c5d3212a.0
+/etc/ssl/certs/Comodo_Trusted_Services_root.crt
+/etc/ssl/certs/5f15c80c.0
+/etc/ssl/certs/DigiCert_Global_Root_G2.crt
+/etc/ssl/certs/451b5485.0
+/etc/ssl/certs/SwissSign_Platinum_CA_-_G2.crt
+/etc/ssl/certs/3ee7e181.0
+/etc/ssl/certs/034868d6.0
+/etc/ssl/certs/a760e1bd.0
+/etc/ssl/certs/7719f463.0
+/etc/ssl/certs/3b2716e5.0
+/etc/ssl/certs/1d3472b9.0
+/etc/ssl/certs/bd1910d4.0
+/etc/ssl/certs/COMODO_RSA_Certification_Authority.crt
+/etc/ssl/certs/ComSign_CA.crt
+/etc/ssl/certs/d7e8dc79.0
+/etc/ssl/certs/GlobalSign_Root_CA_-_R2.crt
+/etc/ssl/certs/AffirmTrust_Premium_ECC.crt
+/etc/ssl/certs/QuoVadis_Root_CA_3.crt
+/etc/ssl/certs/4f316efb.0
+/etc/ssl/certs/TÜRKTRUST_Elektronik_Sertifika_Hizmet_Sağlayıcısı_H6.crt
+/etc/ssl/certs/Cybertrust_Global_Root.crt
+/etc/ssl/certs/f90208f7.0
+/etc/ssl/certs/3bde41ac.0
+/etc/ssl/certs/415660c1.0
+/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt
+/etc/ssl/certs/ee1365c0.0
+/etc/ssl/certs/Buypass_Class_3_Root_CA.crt
+/etc/ssl/certs/Entrust.net_Premium_2048_Secure_Server_CA.crt
+/etc/ssl/certs/e2799e36.0
+/etc/ssl/certs/COMODO_ECC_Certification_Authority.crt
+/etc/ssl/certs/cbf06781.0
+/etc/ssl/certs/Baltimore_CyberTrust_Root.crt
+/etc/ssl/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
+/etc/ssl/certs/f081611a.0
+/etc/ssl/certs/b727005e.0
+/etc/ssl/certs/40193066.0
+/etc/ssl/certs/IdenTrust_Public_Sector_Root_CA_1.crt
+/etc/ssl/certs/5273a94c.0
+/etc/ssl/certs/GeoTrust_Universal_CA_2.crt
+/etc/ssl/certs/40547a79.0
+/etc/ssl/certs/XRamp_Global_CA_Root.crt
+/etc/ssl/certs/6f2c1157.0
+/etc/ssl/certs/128805a3.0
+/etc/ssl/certs/SwissSign_Gold_CA_-_G2.crt
+/etc/ssl/certs/DigiCert_Global_Root_G3.crt
+/etc/ssl/certs/157753a5.0
+/etc/ssl/certs/Buypass_Class_2_CA_1.crt
+/etc/ssl/certs/Go_Daddy_Class_2_CA.crt
+/etc/ssl/certs/8b59b1ad.0
+/etc/ssl/certs/116bf586.0
+/etc/ssl/certs/AddTrust_Low-Value_Services_Root.crt
+/etc/ssl/certs/VeriSign_Universal_Root_Certification_Authority.crt
+/etc/ssl/certs/5443e9e3.0
+/etc/ssl/certs/GlobalSign_Root_CA_-_R3.crt
+/etc/ssl/certs/6410666e.0
+/etc/ssl/certs/790a7190.0
+/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt
+/etc/ssl/certs/Equifax_Secure_eBusiness_CA_1.crt
+/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.crt
+/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.crt
+/etc/ssl/certs/cfa1c2ee.0
+/etc/ssl/certs/0b1b94ef.0
+/etc/ssl/certs/32888f65.0
+/etc/ssl/certs/Microsec_e-Szigno_Root_CA.crt
+/etc/ssl/certs/f387163d.0
+/etc/ssl/certs/Certigna.crt
+/etc/ssl/certs/CNNIC_ROOT.crt
+/etc/ssl/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.crt
+/etc/ssl/certs/DigiCert_Trusted_Root_G4.crt
+/etc/ssl/certs/5a4d6896.0
+/etc/ssl/certs/Certum_Root_CA.crt
+/etc/ssl/certs/8867006a.0
+/etc/ssl/certs/QuoVadis_Root_CA_2_G3.crt
+/etc/ssl/certs/AffirmTrust_Networking.crt
+/etc/ssl/certs/Security_Communication_RootCA2.crt
+/etc/ssl/certs/Root_CA_Generalitat_Valenciana.crt
+/etc/ssl/certs/Swisscom_Root_EV_CA_2.crt
+/etc/ssl/certs/Microsec_e-Szigno_Root_CA_2009.crt
+/etc/ssl/certs/c28a8a30.0
+/etc/ssl/certs/106f3e4d.0
+/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G2.crt
+/etc/ssl/certs/0810ba98.0
+/etc/ssl/certs/4304c5e5.0
+/etc/ssl/certs/2e5ac55d.0
+/etc/ssl/certs/8160b96c.0
+/etc/ssl/certs/5620c4aa.0
+/etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.crt
+/etc/ssl/certs/Juur-SK.crt
+/etc/ssl/certs/aee5f10d.0
+/etc/ssl/certs/3513523f.0
+/etc/ssl/certs/f3377b1b.0
+/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.crt
+/etc/ssl/certs/DigiCert_Global_Root_CA.crt
+/etc/ssl/certs/76faf6c0.0
+/etc/ssl/certs/6b99d060.0
+/etc/ssl/certs/Certplus_Root_CA_G1.crt
+/etc/ssl/certs/f30dd6ad.0
+/etc/ssl/certs/024dc131.0
+/etc/ssl/certs/OISTE_WISeKey_Global_Root_GA_CA.crt
+/etc/ssl/certs/SZAFIR_ROOT_CA2.crt
+/etc/ssl/certs/e36a6752.0
+/etc/ssl/certs/Global_Chambersign_Root_-_2008.crt
+/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G2.crt
+/etc/ssl/certs/GeoTrust_Global_CA.crt
+/etc/ssl/certs/IGC_A.crt
+/etc/ssl/certs/03179a64.0
+/etc/ssl/certs/b66938e9.0
+/etc/ssl/certs/9c2e7d30.0
+/etc/ssl/certs/Secure_Global_CA.crt
+/etc/ssl/certs/fe8a2cd8.0
+/etc/ssl/certs/Equifax_Secure_CA.crt
+/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_2.crt
+/etc/ssl/certs/SwissSign_Silver_CA_-_G2.crt
+/etc/ssl/certs/ad088e1d.0
+/etc/ssl/certs/7f3d5d1d.0
+/etc/ssl/certs/EE_Certification_Centre_Root_CA.crt
+/etc/ssl/certs/Hongkong_Post_Root_CA_1.crt
+/etc/ssl/certs/GeoTrust_Universal_CA.crt
+/etc/ssl/certs/349f2832.0
+/etc/ssl/certs/f060240e.0
+/etc/ssl/certs/ee64a828.0
+/etc/ssl/certs/Staat_der_Nederlanden_Root_CA_-_G3.crt
+/etc/ssl/certs/1e08bfd1.0
+/etc/ssl/certs/Entrust_Root_Certification_Authority.crt
+/etc/ssl/certs/Visa_eCommerce_Root.crt
+/etc/ssl/certs/b1b8a7f3.0
+/etc/ssl/certs/381ce4dd.0
+/etc/ssl/certs/Atos_TrustedRoot_2011.crt
+/etc/ssl/certs/DigiCert_Assured_ID_Root_G2.crt
+/etc/ssl/certs/8d86cdd1.0
+/etc/ssl/certs/064e0aa9.0
+/etc/ssl/certs/b13cc6df.0
+/etc/ssl/certs/a8dee976.0
+/etc/ssl/certs/09789157.0
+/etc/ssl/certs/Verisign_Class_3_Public_Primary_Certification_Authority.crt
+/etc/ssl/certs/2c11d503.0
+/etc/ssl/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.crt
+/etc/ssl/certs/9d520b32.0
+/etc/ssl/certs/ACCVRAIZ1.crt
+/etc/ssl/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.crt
+/etc/ssl/certs/UTN_USERFirst_Email_Root_CA.crt
+/etc/ssl/certs/fcac10e3.0
+/etc/ssl/certs/Swisscom_Root_CA_1.crt
+/etc/ssl/certs/d957f522.0
+/etc/ssl/certs/Certplus_Root_CA_G2.crt
+/etc/ssl/certs/AddTrust_Qualified_Certificates_Root.crt
+/etc/ssl/certs/Equifax_Secure_Global_eBusiness_CA.crt
+/etc/ssl/certs/QuoVadis_Root_CA_3_G3.crt
+/etc/ssl/certs/TWCA_Root_Certification_Authority.crt
+/etc/ssl/certs/Network_Solutions_Certificate_Authority.crt
+/etc/ssl/certs/0c4c9b6c.0
+/etc/ssl/certs/062cdee6.0
+/etc/ssl/certs/Entrust_Root_Certification_Authority_-_G2.crt
+/etc/ssl/certs/CFCA_EV_ROOT.crt
+/etc/ssl/certs/0d1b923b.0
+/etc/ssl/certs/ApplicationCA_-_Japanese_Government.crt
+/etc/ssl/certs/GeoTrust_Primary_Certification_Authority_-_G3.crt
+/etc/ssl/certs/3efd4dc0.0
+/etc/ssl/certs/TC_TrustCenter_Class_3_CA_II.crt
+/etc/ssl/certs/thawte_Primary_Root_CA.crt
+/etc/ssl/certs/T-TeleSec_GlobalRoot_Class_3.crt
+/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R4.crt
+/etc/ssl/certs/PSCProcert.crt
+/etc/ssl/certs/Starfield_Class_2_CA.crt
+/etc/ssl/certs/5cd81ad7.0
+/etc/ssl/certs/cc450945.0
+/etc/ssl/certs/GlobalSign_Root_CA.crt
+/etc/ssl/certs/Go_Daddy_Root_Certificate_Authority_-_G2.crt
+/etc/ssl/certs/AC_Raíz_Certicámara_S.A..crt
+/etc/ssl/certs/OpenTrust_Root_CA_G1.crt
+/etc/ssl/certs/592c0a9a.0
+/etc/ssl/certs/fc5a8f99.0
+/etc/ssl/certs/Certum_Trusted_Network_CA_2.crt
+/etc/ssl/certs/thawte_Primary_Root_CA_-_G2.crt
+/etc/ssl/certs/080911ac.0
+/etc/ssl/certs/56657bde.0
+/etc/ssl/certs/2b349938.0
+/etc/ssl/certs/9c8dfbd4.0
+/etc/ssl/certs/4bfab552.0
+/etc/ssl/certs/DigiCert_Assured_ID_Root_G3.crt
+/etc/ssl/certs/Comodo_Secure_Services_root.crt
+/etc/ssl/certs/dd8e9d41.0
+/etc/ssl/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt
+/etc/ssl/certs/1636090b.0
+/etc/ssl/certs/ACEDICOM_Root.crt
+/etc/ssl/certs/OISTE_WISeKey_Global_Root_GB_CA.crt
+/etc/ssl/certs/TURKTRUST_Certificate_Services_Provider_Root_2007.crt
+/etc/ssl/certs/c5e082db.0
+/etc/ssl/certs/e536d871.0
+/etc/ssl/certs/Swisscom_Root_CA_2.crt
+/etc/ssl/certs/b204d74a.0
+/etc/ssl/certs/57bcb2da.0
+/etc/ssl/certs/48bec511.0
+/etc/ssl/certs/c99398f3.0
+/etc/ssl/certs/Chambers_of_Commerce_Root_-_2008.crt
+/etc/ssl/certs/EC-ACC.crt
+/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.crt
+/etc/ssl/certs/79ad8b43.0
+/etc/ssl/certs/Taiwan_GRCA.crt
+/etc/ssl/certs/GeoTrust_Global_CA_2.crt
+/etc/ssl/certs/Actalis_Authentication_Root_CA.crt
+/etc/ssl/certs/9d04f354.0
+/etc/ssl/certs/eed8c118.0
+/etc/ssl/certs/Certinomis_-_Autorité_Racine.crt
+/etc/ssl/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.crt
+/etc/ssl/certs/USERTrust_RSA_Certification_Authority.crt
+/etc/ssl/certs/Starfield_Services_Root_Certificate_Authority_-_G2.crt
+/etc/ssl/certs/QuoVadis_Root_CA.crt
+/etc/ssl/certs/IdenTrust_Commercial_Root_CA_1.crt
+/etc/ssl/certs/AffirmTrust_Premium.crt
+/etc/ssl/certs/CA_Disig_Root_R1.crt
+/etc/ssl/certs/E-Tugra_Certification_Authority.crt
+/etc/ssl/certs/GlobalSign_ECC_Root_CA_-_R5.crt
+/etc/ssl/certs/7d0b38bd.0
+/etc/ssl/certs/c01cdfa2.0
+/etc/ssl/certs/COMODO_Certification_Authority.crt
+/etc/ssl/certs/ef954a4e.0
+/etc/ssl/certs/861a399d.0
+/etc/ssl/certs/RSA_Security_2048_v3.crt
+/etc/ssl/certs/OpenTrust_Root_CA_G2.crt
+/etc/ssl/certs/b1159c4c.0
+/etc/ssl/certs/USERTrust_ECC_Certification_Authority.crt
+/etc/ssl/certs/thawte_Primary_Root_CA_-_G3.crt
+/etc/ssl/certs/cb59f961.0
+/etc/ssl/certs/5c44d531.0
+/etc/ssl/certs/f39fc864.0
+/etc/ssl/certs/c0ff1f52.0
+/etc/ssl/certs/certSIGN_ROOT_CA.crt
+/etc/ssl/certs/Entrust_Root_Certification_Authority_-_EC1.crt
+/usr/sbin/update-ca-certificates
+/etc/ssl/certs/c9f83a1c.0
+/etc/ssl/certs/AddTrust_Public_Services_Root.crt
+/etc/ssl/certs/DigiCert_Assured_ID_Root_CA.crt
+/etc/ssl/certs/1874d4aa.0
+/etc/ssl/certs/b7a5b843.0
+/etc/ssl/certs/SecureSign_RootCA11.crt
+/etc/ssl/certs/988a38cb.0
+/etc/ssl/certs/480720ec.0
+/etc/ssl/certs/TWCA_Global_Root_CA.crt
+/etc/ssl/certs/706f604c.0
+/etc/ssl/certs/Certinomis_-_Root_CA.crt
+/etc/ssl/certs/c47d9980.0
+/etc/ssl/certs/c089bbbd.0
+/etc/ssl/certs/608a55ad.0
+/etc/ssl/certs/ePKI_Root_Certification_Authority.crt
+/etc/ssl/certs/87229d21.0
+/etc/ssl/certs/e73d606e.0
+/etc/ssl/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.crt
+/etc/ssl/certs/4042bcee.0
+/etc/ssl/certs/02265526.0
+/etc/ssl/certs/Comodo_AAA_Services_root.crt
+/etc/ssl/certs/19c1fa33.0
+/etc/ssl/certs/Security_Communication_Root_CA.crt
+/etc/ssl/certs/Buypass_Class_2_Root_CA.crt
+/etc/ssl/certs/D-TRUST_Root_Class_3_CA_2_EV_2009.crt
+/etc/ssl/certs/Verisign_Class_1_Public_Primary_Certification_Authority.crt
+/etc/ssl/certs/CA_Disig_Root_R2.crt
+/etc/ssl/certs/Certplus_Class_2_Primary_CA.crt
+/etc/ssl/certs/S-TRUST_Universal_Root_CA.crt
+/etc/ssl/certs/Camerfirma_Global_Chambersign_Root.crt
+/etc/ssl/certs/2c543cd1.0
+/etc/ssl/certs/OpenTrust_Root_CA_G3.crt
+/etc/ssl/certs/57bbd831.0
+/etc/ssl/certs/WellsSecure_Public_Root_Certificate_Authority.crt
+/etc/ssl/certs/e113c810.0
+/etc/ssl/certs/e18bfb83.0
+/etc/ssl/certs/Trustis_FPS_Root_CA.crt
+/etc/ssl/certs/c679bc3f.0
+/etc/ssl/certs/93bc0acc.0
+/etc/ssl/certs/Starfield_Root_Certificate_Authority_-_G2.crt
+/etc/ssl/certs/2e4eed3c.0
+/etc/ssl/certs/76cb8f92.0
+/etc/ssl/certs/9f0f5fd6.0
+/etc/ssl/certs/Sonera_Class_2_Root_CA.crt
diff --git a/usr/lib/opkg/info/configsync.control b/usr/lib/opkg/info/configsync.control
new file mode 100644
index 0000000..f327641
--- /dev/null
+++ b/usr/lib/opkg/info/configsync.control
@@ -0,0 +1,10 @@
+Package: configsync
+Version: 2018-11-07-000000-2
+Depends: libc, libstdcpp, zlib, libubus, libubox, libblobmsg-json, dvlutils, dlanapi, ucihelper, libopenssl
+Source: feeds/devolo/devolo/configsync
+License: devolo
+Section: base
+Maintainer: "Helmut Lucht" <helmut.lucht@devolo.de>
+Architecture: ar71xx
+Installed-Size: 65825
+Description:  config sync
diff --git a/usr/lib/opkg/info/configsync.list b/usr/lib/opkg/info/configsync.list
new file mode 100644
index 0000000..11bee5c
--- /dev/null
+++ b/usr/lib/opkg/info/configsync.list
@@ -0,0 +1,25 @@
+/usr/share/configsync.d/csghn
+/etc/uci-defaults/01_cs_domain
+/usr/sbin/p1905
+/usr/bin/configsync_event_delay.sh
+/usr/share/configsync.d/system
+/etc/hotplug.d/button/60-plc-uptime
+/usr/share/configsync.d/parental_control
+/usr/share/configsync.d/cswireless5
+/usr/share/configsync.d/wifi_schedule
+/etc/init.d/configsync
+/usr/lib/configsync_lib.sh
+/usr/share/configsync.d/station_quota
+/usr/bin/configsync_vs_handler.sh
+/usr/share/configsync.d/ghn
+/usr/share/configsync.d/cswireless
+/usr/bin/configsync_handler.sh
+/usr/share/configsync.d/wireless
+/etc/config/configsync
+/usr/share/configsync.d/cswireless24
+/usr/share/configsync.d/cswifi_son
+/usr/share/configsync.d/cswifi_schedule
+/usr/share/configsync.d/csparental_control
+/usr/share/configsync.d/common/radio
+/usr/share/configsync.d/cssystem
+/usr/share/configsync.d/csstation_quota
diff --git a/usr/lib/opkg/info/curl.control b/usr/lib/opkg/info/curl.control
new file mode 100644
index 0000000..597c80b
--- /dev/null
+++ b/usr/lib/opkg/info/curl.control
@@ -0,0 +1,11 @@
+Package: curl
+Version: 7.57.0-1
+Depends: libc, libcurl
+Source: package/network/utils/curl
+License: MIT
+LicenseFiles: COPYING
+Section: net
+Maintainer: Imre Kaloz <kaloz@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 45074
+Description:  A client-side URL transfer utility
diff --git a/usr/lib/opkg/info/curl.list b/usr/lib/opkg/info/curl.list
new file mode 100644
index 0000000..d3176d8
--- /dev/null
+++ b/usr/lib/opkg/info/curl.list
@@ -0,0 +1 @@
+/usr/bin/curl
diff --git a/usr/lib/opkg/info/delos-base-files.control b/usr/lib/opkg/info/delos-base-files.control
new file mode 100644
index 0000000..91648f7
--- /dev/null
+++ b/usr/lib/opkg/info/delos-base-files.control
@@ -0,0 +1,10 @@
+Package: delos-base-files
+Version: 1.0-3
+Depends: libc, base-files, uci
+Source: feeds/devolo/devolo/delos-base-files
+License: devolo
+Section: base
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 4698
+Description:  Basic files for delos
diff --git a/usr/lib/opkg/info/delos-base-files.list b/usr/lib/opkg/info/delos-base-files.list
new file mode 100644
index 0000000..560e7af
--- /dev/null
+++ b/usr/lib/opkg/info/delos-base-files.list
@@ -0,0 +1,15 @@
+/etc/delos-image
+/etc/uci-defaults/03_delos-wireless
+/etc/uci-defaults/01_delos-ntp
+/etc/config/vlan
+/etc/uci-defaults/00_50_delos-system
+/etc/config/radius
+/etc/uci-defaults/04_delos_webui
+/etc/uci-defaults/00_60_delos-version
+/etc/uci-defaults/00_10_delos-baptization
+/etc/uci-defaults/10_delos-populate-bootenv
+/etc/uci-defaults/01_delos-snmp
+/etc/init.d/fixup-macaddr
+/etc/uci-defaults/00_00_delos
+/etc/config/delos
+/etc/config/delos-private
diff --git a/usr/lib/opkg/info/delos-cgi.control b/usr/lib/opkg/info/delos-cgi.control
new file mode 100644
index 0000000..a91d9dc
--- /dev/null
+++ b/usr/lib/opkg/info/delos-cgi.control
@@ -0,0 +1,10 @@
+Package: delos-cgi
+Version: 2018-09-28-000000-2
+Depends: libc, libubox, libubus
+Source: feeds/devolo/devolo/delos-cgi
+License: Apache-2.0
+Section: delos-cgi
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 5963
+Description:  cgi for firmware upgrade, configuration backup/restore
diff --git a/usr/lib/opkg/info/delos-cgi.list b/usr/lib/opkg/info/delos-cgi.list
new file mode 100644
index 0000000..47c528c
--- /dev/null
+++ b/usr/lib/opkg/info/delos-cgi.list
@@ -0,0 +1,3 @@
+/usr/libexec/base-cgi
+/www/cgi-bin/data-upload
+/www/cgi-bin/config-backup
diff --git a/usr/lib/opkg/info/delos-compat.control b/usr/lib/opkg/info/delos-compat.control
new file mode 100644
index 0000000..6ba80a3
--- /dev/null
+++ b/usr/lib/opkg/info/delos-compat.control
@@ -0,0 +1,11 @@
+Package: delos-compat
+Version: 1.0-3
+Depends: libc, xml2json, jsonfilter
+Source: feeds/devolo/devolo/delos-base-files
+License: devolo
+Section: base
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 48436
+Description:  Tools to read baptized parameters and decompose .dvl
+ firmware update files.
diff --git a/usr/lib/opkg/info/delos-compat.list b/usr/lib/opkg/info/delos-compat.list
new file mode 100644
index 0000000..7ed8169
--- /dev/null
+++ b/usr/lib/opkg/info/delos-compat.list
@@ -0,0 +1,2 @@
+/usr/sbin/baptization.config
+/usr/sbin/chunk
diff --git a/usr/lib/opkg/info/delos-customization-common.control b/usr/lib/opkg/info/delos-customization-common.control
new file mode 100644
index 0000000..dc3b660
--- /dev/null
+++ b/usr/lib/opkg/info/delos-customization-common.control
@@ -0,0 +1,10 @@
+Package: delos-customization-common
+Version: 1.0.0-2
+Depends: libc
+Source: feeds/devolo/devolo/delos-customization
+License: devolo
+Section: base
+Maintainer: "Christian Petry" <christian.petry@devolo.de>
+Architecture: ar71xx
+Installed-Size: 1261
+Description:  Contains files which are required for customization
diff --git a/usr/lib/opkg/info/delos-customization-common.list b/usr/lib/opkg/info/delos-customization-common.list
new file mode 100644
index 0000000..6031879
--- /dev/null
+++ b/usr/lib/opkg/info/delos-customization-common.list
@@ -0,0 +1,4 @@
+/etc/uci-defaults/00_20_delos-customization
+/usr/sbin/apply_customization.sh
+/etc/init.d/customization
+/etc/config/customization
diff --git a/usr/lib/opkg/info/delos-customization-variant-devolo.control b/usr/lib/opkg/info/delos-customization-variant-devolo.control
new file mode 100644
index 0000000..ae6d629
--- /dev/null
+++ b/usr/lib/opkg/info/delos-customization-variant-devolo.control
@@ -0,0 +1,10 @@
+Package: delos-customization-variant-devolo
+Version: 1.0.0-2
+Depends: libc, delos-customization-common
+Source: feeds/devolo/devolo/delos-customization
+License: devolo
+Section: base
+Maintainer: "Christian Petry" <christian.petry@devolo.de>
+Architecture: ar71xx
+Installed-Size: 3394
+Description:  Customization for devolo retail devices
diff --git a/usr/lib/opkg/info/delos-customization-variant-devolo.list b/usr/lib/opkg/info/delos-customization-variant-devolo.list
new file mode 100644
index 0000000..6255b03
--- /dev/null
+++ b/usr/lib/opkg/info/delos-customization-variant-devolo.list
@@ -0,0 +1,3 @@
+/usr/share/delos-customization/variant-devolo/customization.sh
+/usr/share/delos-customization/variant-devolo/webui/customization.css
+/usr/share/delos-customization/variant-devolo/webui/customization.json
diff --git a/usr/lib/opkg/info/delos-fwknopd.control b/usr/lib/opkg/info/delos-fwknopd.control
new file mode 100644
index 0000000..de991fd
--- /dev/null
+++ b/usr/lib/opkg/info/delos-fwknopd.control
@@ -0,0 +1,10 @@
+Package: delos-fwknopd
+Version: 2-1
+Depends: libc, fwknopd
+Source: feeds/devolo/devolo/delos-fwknopd
+License: devolo
+Section: utils
+Maintainer: Christian Petry <christian.petry@devolo.de>
+Architecture: ar71xx
+Installed-Size: 635
+Description:  Configuration package for fwknopd
diff --git a/usr/lib/opkg/info/delos-fwknopd.list b/usr/lib/opkg/info/delos-fwknopd.list
new file mode 100644
index 0000000..7c5b142
--- /dev/null
+++ b/usr/lib/opkg/info/delos-fwknopd.list
@@ -0,0 +1,2 @@
+/etc/config/fwknopd
+/usr/share/delos-fwknopd/cmd.sh
diff --git a/usr/lib/opkg/info/delos-htmlmgr-redirect.control b/usr/lib/opkg/info/delos-htmlmgr-redirect.control
new file mode 100644
index 0000000..95b2b93
--- /dev/null
+++ b/usr/lib/opkg/info/delos-htmlmgr-redirect.control
@@ -0,0 +1,10 @@
+Package: delos-htmlmgr-redirect
+Version: 1-0
+Depends: libc
+Source: feeds/devolo/devolo/delos-htmlmgr-redirect
+License: devolo
+Section: utils
+Maintainer: Thomas Jalowy <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 326
+Description:  redirect all calls addressed to http(s)://<IP>/htmlmgr* to delos webaddress
diff --git a/usr/lib/opkg/info/delos-htmlmgr-redirect.list b/usr/lib/opkg/info/delos-htmlmgr-redirect.list
new file mode 100644
index 0000000..6426ab6
--- /dev/null
+++ b/usr/lib/opkg/info/delos-htmlmgr-redirect.list
@@ -0,0 +1 @@
+/www/cgi-bin/htmlmgr
diff --git a/usr/lib/opkg/info/delos-ipv4ll.control b/usr/lib/opkg/info/delos-ipv4ll.control
new file mode 100644
index 0000000..d6d2af5
--- /dev/null
+++ b/usr/lib/opkg/info/delos-ipv4ll.control
@@ -0,0 +1,10 @@
+Package: delos-ipv4ll
+Version: 2016-02-02-000000
+Depends: libc, avahi-autoipd
+Source: feeds/devolo/devolo/delos-ipv4ll
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 1450
+Description:  Support files for the avahi-autoipd IPv4LL (RFC3927) daemon
diff --git a/usr/lib/opkg/info/delos-ipv4ll.list b/usr/lib/opkg/info/delos-ipv4ll.list
new file mode 100644
index 0000000..dd154a8
--- /dev/null
+++ b/usr/lib/opkg/info/delos-ipv4ll.list
@@ -0,0 +1,2 @@
+/etc/hotplug.d/net/50-autoipd
+/etc/avahi/avahi-autoipd.action
diff --git a/usr/lib/opkg/info/delos-leds.control b/usr/lib/opkg/info/delos-leds.control
new file mode 100644
index 0000000..220f47c
--- /dev/null
+++ b/usr/lib/opkg/info/delos-leds.control
@@ -0,0 +1,10 @@
+Package: delos-leds
+Version: 001-1
+Depends: libc, jshn
+Source: feeds/devolo/devolo/delos-leds
+License: devolo
+Section: utils
+Maintainer: "Thomas Jalowy" <Thomas.Jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2606
+Description:  delos LED state machine
diff --git a/usr/lib/opkg/info/delos-leds.list b/usr/lib/opkg/info/delos-leds.list
new file mode 100644
index 0000000..f87eb8d
--- /dev/null
+++ b/usr/lib/opkg/info/delos-leds.list
@@ -0,0 +1,2 @@
+/usr/sbin/updateled.sh
+/etc/init.d/updateLeds
diff --git a/usr/lib/opkg/info/delos-lh-migration.conffiles b/usr/lib/opkg/info/delos-lh-migration.conffiles
new file mode 100644
index 0000000..8fe341b
--- /dev/null
+++ b/usr/lib/opkg/info/delos-lh-migration.conffiles
@@ -0,0 +1 @@
+/etc/uci-defaults/90_delos-lh-migration
diff --git a/usr/lib/opkg/info/delos-lh-migration.control b/usr/lib/opkg/info/delos-lh-migration.control
new file mode 100644
index 0000000..d747923
--- /dev/null
+++ b/usr/lib/opkg/info/delos-lh-migration.control
@@ -0,0 +1,10 @@
+Package: delos-lh-migration
+Version: 1-7
+Depends: libc, xml2json, jsonfilter
+Source: feeds/devolo/devolo/delos-lh-migration
+License: devolo
+Section: utils
+Maintainer: Stefan Schake <stefan.schake@devolo.de>
+Architecture: ar71xx
+Installed-Size: 4766
+Description:  delos LinuxHost config migration
diff --git a/usr/lib/opkg/info/delos-lh-migration.list b/usr/lib/opkg/info/delos-lh-migration.list
new file mode 100644
index 0000000..9eab7d5
--- /dev/null
+++ b/usr/lib/opkg/info/delos-lh-migration.list
@@ -0,0 +1,8 @@
+/usr/lib/lh-migration/plc.sh
+/etc/uci-defaults/90_delos-lh-migration
+/usr/lib/lh-migration/network.sh
+/usr/lib/lh-migration/wireless.sh
+/usr/lib/lh-migration/system.sh
+/usr/lib/lh-migration.sh
+/usr/lib/lh-migration/wifi_schedule.sh
+/usr/lib/lh-migration/wifi_parental.sh
diff --git a/usr/lib/opkg/info/delos-migration.conffiles b/usr/lib/opkg/info/delos-migration.conffiles
new file mode 100644
index 0000000..21d2674
--- /dev/null
+++ b/usr/lib/opkg/info/delos-migration.conffiles
@@ -0,0 +1,24 @@
+/etc/migration/3.1.0To2.3.0/00-downgrade
+/etc/migration/5.0.1To5.0.2/00-upgrade
+/etc/migration/5.1.1To5.1.2/00-upgrade
+/etc/migration/4.0.0To5.0.0/00-upgrade
+/etc/migration/5.1.0To5.1.1/00-upgrade
+/etc/migration/3.1.0To3.2.0/00-upgrade
+/etc/migration/5.1.2To5.2.0/00-upgrade
+/etc/migration/2.1.0To2.0.0/00-downgrade
+/etc/migration/3.2.0To3.1.0/00-downgrade
+/etc/migration/5.0.3To5.0.4/00-upgrade
+/etc/migration/5.0.0To5.0.1/00-upgrade
+/etc/migration/5.0.2To5.0.3/00-upgrade
+/etc/migration/2.2.2To2.1.0/00-downgrade
+/etc/migration/4.0.0To3.2.0/00-downgrade
+/etc/migration/3.2.0To4.0.0/00-upgrade
+/etc/migration/5.0.4To5.1.0/00-upgrade
+/etc/migration/2.1.0To2.2.2/00-upgrade
+/etc/migration/2.3.0To2.2.2/00-downgrade
+/etc/migration/2.2.2To2.3.0/00-upgrade
+/etc/migration/2.3.0To3.1.0/00-upgrade
+/etc/migration/2.0.0To2.1.0/00-upgrade
+/etc/uci-defaults/99_delos_migration
+/lib/migration/migration.sh
+/lib/migration/plc-pib.sh
diff --git a/usr/lib/opkg/info/delos-migration.control b/usr/lib/opkg/info/delos-migration.control
new file mode 100644
index 0000000..5990c02
--- /dev/null
+++ b/usr/lib/opkg/info/delos-migration.control
@@ -0,0 +1,10 @@
+Package: delos-migration
+Version: 1-1
+Depends: libc
+Source: feeds/devolo/devolo/delos-migration
+License: devolo
+Section: utils
+Maintainer: Thomas Jalowy <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 6433
+Description:  delos config migration mechanism
diff --git a/usr/lib/opkg/info/delos-migration.list b/usr/lib/opkg/info/delos-migration.list
new file mode 100644
index 0000000..2d26537
--- /dev/null
+++ b/usr/lib/opkg/info/delos-migration.list
@@ -0,0 +1,25 @@
+/etc/migration/4.0.0To3.2.0/00-downgrade
+/etc/migration/5.0.1To5.0.2/00-upgrade
+/etc/migration/2.3.0To3.1.0/00-upgrade
+/etc/uci-defaults/99_delos_migration
+/etc/migration/5.1.1To5.1.2/00-upgrade
+/etc/migration/4.0.0To5.0.0/00-upgrade
+/etc/migration/5.0.0To5.0.1/00-upgrade
+/etc/migration/2.2.2To2.1.0/00-downgrade
+/etc/migration/5.1.0To5.1.1/00-upgrade
+/etc/migration/3.2.0To3.1.0/00-downgrade
+/etc/migration/3.2.0To4.0.0/00-upgrade
+/etc/migration/5.1.2To5.2.0/00-upgrade
+/etc/migration/2.1.0To2.2.2/00-upgrade
+/etc/migration/5.0.4To5.1.0/00-upgrade
+/lib/migration/plc-pib.sh
+/etc/migration/2.0.0To2.1.0/00-upgrade
+/lib/upgrade/keep.d/delos-migration
+/etc/migration/2.1.0To2.0.0/00-downgrade
+/etc/migration/5.0.3To5.0.4/00-upgrade
+/etc/migration/2.3.0To2.2.2/00-downgrade
+/etc/migration/3.1.0To2.3.0/00-downgrade
+/etc/migration/3.1.0To3.2.0/00-upgrade
+/etc/migration/2.2.2To2.3.0/00-upgrade
+/etc/migration/5.0.2To5.0.3/00-upgrade
+/lib/migration/migration.sh
diff --git a/usr/lib/opkg/info/delos-ntpd.control b/usr/lib/opkg/info/delos-ntpd.control
new file mode 100644
index 0000000..5b15fb7
--- /dev/null
+++ b/usr/lib/opkg/info/delos-ntpd.control
@@ -0,0 +1,10 @@
+Package: delos-ntpd
+Version: 1-1
+Depends: libc, ntpd
+Source: feeds/devolo/devolo/delos-ntpd
+Section: utils
+Maintainer: Günther Kelleter <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 792
+Description:  Supplementary package to ntpd.
+ Replaces init script of ntpd with a more useful one.
diff --git a/usr/lib/opkg/info/delos-ntpd.list b/usr/lib/opkg/info/delos-ntpd.list
new file mode 100644
index 0000000..4ea1a85
--- /dev/null
+++ b/usr/lib/opkg/info/delos-ntpd.list
@@ -0,0 +1 @@
+/etc/init.d/ntpd
diff --git a/usr/lib/opkg/info/delos-parental-control.control b/usr/lib/opkg/info/delos-parental-control.control
new file mode 100644
index 0000000..6a04387
--- /dev/null
+++ b/usr/lib/opkg/info/delos-parental-control.control
@@ -0,0 +1,10 @@
+Package: delos-parental-control
+Version: 1.3-2
+Depends: libc, delos-timerd, rpcd, delos-wifi-eventd
+Source: feeds/devolo/devolo/delos-parental-control
+License: devolo
+Section: net
+Maintainer: "Matthias Fasselt" <matthias.fasselt@devolo.de>
+Architecture: ar71xx
+Installed-Size: 7089
+Description:  Control network access of stations according to rules defined in UCI.
diff --git a/usr/lib/opkg/info/delos-parental-control.list b/usr/lib/opkg/info/delos-parental-control.list
new file mode 100644
index 0000000..0a71a6e
--- /dev/null
+++ b/usr/lib/opkg/info/delos-parental-control.list
@@ -0,0 +1,8 @@
+/usr/bin/parental_control.sh
+/etc/config/station_quota
+/etc/hotplug.d/ntp/10-parental-control
+/etc/init.d/parental_control
+/usr/bin/station_quota.sh
+/etc/init.d/station_quota
+/etc/config/parental_control
+/usr/libexec/rpcd/station_quota
diff --git a/usr/lib/opkg/info/delos-rpcd-accounts.control b/usr/lib/opkg/info/delos-rpcd-accounts.control
new file mode 100644
index 0000000..4b3a063
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-accounts.control
@@ -0,0 +1,9 @@
+Package: delos-rpcd-accounts
+Version: 2019-01-30-000000
+Depends: libc, rpcd
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-accounts
+Section: delos-webui
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 3063
+Description:  Provides additional rpcd modules for the delos web interface
diff --git a/usr/lib/opkg/info/delos-rpcd-accounts.list b/usr/lib/opkg/info/delos-rpcd-accounts.list
new file mode 100644
index 0000000..b152938
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-accounts.list
@@ -0,0 +1,2 @@
+/usr/lib/rpcd/rpcd-accounts.so
+/usr/sbin/destroy_all_sessions.sh
diff --git a/usr/lib/opkg/info/delos-rpcd-acl-debug.control b/usr/lib/opkg/info/delos-rpcd-acl-debug.control
new file mode 100644
index 0000000..f959022
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-acl-debug.control
@@ -0,0 +1,9 @@
+Package: delos-rpcd-acl-debug
+Version: 2018-11-21-000000
+Depends: libc, rpcd
+Source: feeds/devolo/devolo/delos-rpcd/acls
+Section: delos-webui
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2335
+Description:  Foobar1
diff --git a/usr/lib/opkg/info/delos-rpcd-acl-debug.list b/usr/lib/opkg/info/delos-rpcd-acl-debug.list
new file mode 100644
index 0000000..557e432
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-acl-debug.list
@@ -0,0 +1 @@
+/usr/share/rpcd/acl.d/debug.json
diff --git a/usr/lib/opkg/info/delos-rpcd-ath10k.control b/usr/lib/opkg/info/delos-rpcd-ath10k.control
new file mode 100644
index 0000000..e459d53
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-ath10k.control
@@ -0,0 +1,9 @@
+Package: delos-rpcd-ath10k
+Version: 1
+Depends: libc, rpcd, jshn
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-ath10k
+Section: delos-webui
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 646
+Description:  Provides additional rpcd module for the delos web interface
diff --git a/usr/lib/opkg/info/delos-rpcd-ath10k.list b/usr/lib/opkg/info/delos-rpcd-ath10k.list
new file mode 100644
index 0000000..d60646a
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-ath10k.list
@@ -0,0 +1 @@
+/usr/libexec/rpcd/ath10k.peerstat
diff --git a/usr/lib/opkg/info/delos-rpcd-network.control b/usr/lib/opkg/info/delos-rpcd-network.control
new file mode 100644
index 0000000..422bc0c
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-network.control
@@ -0,0 +1,10 @@
+Package: delos-rpcd-network
+Version: 2018-10-10-000000
+Depends: libc, rpcd, jshn
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-network
+License: MIT
+Section: delos-webui
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 739749
+Description:  Provides additional rpcd modules for the delos web interface
diff --git a/usr/lib/opkg/info/delos-rpcd-network.list b/usr/lib/opkg/info/delos-rpcd-network.list
new file mode 100644
index 0000000..b5f6440
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-network.list
@@ -0,0 +1,3 @@
+/usr/libexec/rpcd/network.wifi
+/usr/lib/rpcd/rpcd-network.so
+/usr/bin/fetch_radio_information.sh
diff --git a/usr/lib/opkg/info/delos-rpcd-plctool.control b/usr/lib/opkg/info/delos-rpcd-plctool.control
new file mode 100644
index 0000000..c3a603e
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-plctool.control
@@ -0,0 +1,9 @@
+Package: delos-rpcd-plctool
+Version: 2016-06-30-000000
+Depends: libc, dlan-addons, rpcd, open-plc-utils, open-plc-utils-hpavkey, open-plc-utils-plctool, open-plc-utils-plcID, open-plc-utils-plcstat, open-plc-utils-plcwait, iconv, jshn
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-plctool
+Section: delos-webui
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 5572
+Description:  Provides additional rpcd modules for the delos web interface
diff --git a/usr/lib/opkg/info/delos-rpcd-plctool.list b/usr/lib/opkg/info/delos-rpcd-plctool.list
new file mode 100644
index 0000000..d264411
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-plctool.list
@@ -0,0 +1,7 @@
+/usr/bin/avlninfo.sh
+/usr/share/rpcd/nwinfo.awk
+/usr/share/rpcd/plcstat-t.awk
+/usr/share/rpcd/plc_add_secid.sh
+/usr/share/rpcd/plc_set_npw.sh
+/usr/bin/nwinfo.sh
+/usr/lib/rpcd/plctool.so
diff --git a/usr/lib/opkg/info/delos-rpcd-powerline.control b/usr/lib/opkg/info/delos-rpcd-powerline.control
new file mode 100644
index 0000000..b64dac2
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-powerline.control
@@ -0,0 +1,9 @@
+Package: delos-rpcd-powerline
+Version: 2019-01-23
+Depends: libc, rpcd, jshn
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-powerline
+Section: delos-webui
+Maintainer: "Christian Petry" <christian.petry@devolo.de>
+Architecture: ar71xx
+Installed-Size: 1446
+Description:  Provides additional rpcd modules for the delos web interface
diff --git a/usr/lib/opkg/info/delos-rpcd-powerline.list b/usr/lib/opkg/info/delos-rpcd-powerline.list
new file mode 100644
index 0000000..c7e48c3
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-powerline.list
@@ -0,0 +1 @@
+/usr/libexec/rpcd/network.powerline
diff --git a/usr/lib/opkg/info/delos-rpcd-swconfig.control b/usr/lib/opkg/info/delos-rpcd-swconfig.control
new file mode 100644
index 0000000..9af508e
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-swconfig.control
@@ -0,0 +1,10 @@
+Package: delos-rpcd-swconfig
+Version: 2015-09-10-000000
+Depends: libc, rpcd
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-swconfig
+License: MIT
+Section: delos-webui
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 3262
+Description:  Provides additional rpcd modules for the delos web interface
diff --git a/usr/lib/opkg/info/delos-rpcd-swconfig.list b/usr/lib/opkg/info/delos-rpcd-swconfig.list
new file mode 100644
index 0000000..687f0d0
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-swconfig.list
@@ -0,0 +1 @@
+/usr/lib/rpcd/rpcd-swconfig.so
diff --git a/usr/lib/opkg/info/delos-rpcd-system.control b/usr/lib/opkg/info/delos-rpcd-system.control
new file mode 100644
index 0000000..9409dcb
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-system.control
@@ -0,0 +1,10 @@
+Package: delos-rpcd-system
+Version: 2015-10-09-000000
+Depends: libc, rpcd, jshn
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-system
+Section: delos-webui
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 7363
+Description:  Provides additional rpcd modules for the delos web interface
+ Offers firmware upgrade, configuration backup/restore and reboot options
diff --git a/usr/lib/opkg/info/delos-rpcd-system.list b/usr/lib/opkg/info/delos-rpcd-system.list
new file mode 100644
index 0000000..5261030
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-system.list
@@ -0,0 +1,2 @@
+/usr/lib/rpcd/rpcd-system.so
+/usr/libexec/rpcd/system.date
diff --git a/usr/lib/opkg/info/delos-rpcd-wps.control b/usr/lib/opkg/info/delos-rpcd-wps.control
new file mode 100644
index 0000000..f8d37eb
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-wps.control
@@ -0,0 +1,9 @@
+Package: delos-rpcd-wps
+Version: 2017-09-05-000000
+Depends: libc, rpcd, jshn
+Source: feeds/devolo/devolo/delos-rpcd/rpcd-wps
+Section: delos-webui
+Maintainer: "Thomas Bong" <thomas.bong@devolo.de>
+Architecture: ar71xx
+Installed-Size: 645
+Description:  Provides additional rpcd module for the delos web interface
diff --git a/usr/lib/opkg/info/delos-rpcd-wps.list b/usr/lib/opkg/info/delos-rpcd-wps.list
new file mode 100644
index 0000000..798de58
--- /dev/null
+++ b/usr/lib/opkg/info/delos-rpcd-wps.list
@@ -0,0 +1 @@
+/usr/libexec/rpcd/network.wps
diff --git a/usr/lib/opkg/info/delos-snmpd.control b/usr/lib/opkg/info/delos-snmpd.control
new file mode 100644
index 0000000..0ca897d
--- /dev/null
+++ b/usr/lib/opkg/info/delos-snmpd.control
@@ -0,0 +1,10 @@
+Package: delos-snmpd
+Version: 1-0
+Depends: libc, snmpd
+Source: feeds/devolo/devolo/delos-snmpd
+License: devolo
+Section: utils
+Maintainer: Thomas Jalowy <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2260
+Description:  Configuration package for snmpd
diff --git a/usr/lib/opkg/info/delos-snmpd.list b/usr/lib/opkg/info/delos-snmpd.list
new file mode 100644
index 0000000..2581946
--- /dev/null
+++ b/usr/lib/opkg/info/delos-snmpd.list
@@ -0,0 +1,2 @@
+/etc/init.d/snmpd
+/etc/config/snmpd
diff --git a/usr/lib/opkg/info/delos-timerd.control b/usr/lib/opkg/info/delos-timerd.control
new file mode 100644
index 0000000..20c4808
--- /dev/null
+++ b/usr/lib/opkg/info/delos-timerd.control
@@ -0,0 +1,10 @@
+Package: delos-timerd
+Version: 3b8d6f9-3
+Depends: libc, libpthread, libubus, libubox, libblobmsg-json
+Source: feeds/devolo/devolo/delos-timerd
+License: devolo
+Section: utils
+Maintainer: "Stefan Schake" <stefan.schake@devolo.de>
+Architecture: ar71xx
+Installed-Size: 4293
+Description:  delos Timer Daemon
diff --git a/usr/lib/opkg/info/delos-timerd.list b/usr/lib/opkg/info/delos-timerd.list
new file mode 100644
index 0000000..cc906c4
--- /dev/null
+++ b/usr/lib/opkg/info/delos-timerd.list
@@ -0,0 +1,3 @@
+/lib/functions/timer.sh
+/etc/init.d/timerd
+/usr/bin/timerd
diff --git a/usr/lib/opkg/info/delos-webui5.control b/usr/lib/opkg/info/delos-webui5.control
new file mode 100644
index 0000000..54ecabb
--- /dev/null
+++ b/usr/lib/opkg/info/delos-webui5.control
@@ -0,0 +1,10 @@
+Package: delos-webui5
+Version: 2018-01-09-000000
+Depends: libc, rpcd, rpcd-mod-iwinfo, uhttpd, uhttpd-mod-ubus, uhttpd-mod-tls
+Source: feeds/devolo/devolo/delos-webui5
+License: MIT
+Section: delos-webui5
+Maintainer: "Thomas Bong" <thomas.bong@devolo.de>
+Architecture: ar71xx
+Installed-Size: 1470016
+Description:  Provides the delos web interface based on angular5.
diff --git a/usr/lib/opkg/info/delos-webui5.list b/usr/lib/opkg/info/delos-webui5.list
new file mode 100644
index 0000000..ed1ce49
--- /dev/null
+++ b/usr/lib/opkg/info/delos-webui5.list
@@ -0,0 +1,68 @@
+/www/assets/fonts/delos-iconmoon-license
+/www/assets/fonts/glyphicons-halflings-regular.ttf
+/www/assets/fonts/glyphicons-halflings-regular.svg
+/www/assets/fonts/OpenSans-BoldItalic-webfont.eot
+/www/assets/fonts/OpenSans-Semibold-webfont.woff2
+/www/assets/fonts/delos.woff
+/www/assets/i18n/nl.po
+/www/assets/i18n/pt.po
+/www/11.aa4fc852b7bc31805b3c.js
+/www/assets/fonts/OpenSans-BoldItalic-webfont.woff2
+/www/3rdpartylicenses.txt
+/www/assets/fonts/OpenSans-BoldItalic-webfont.ttf
+/www/assets/i18n/en.po
+/www/assets/i18n/de.po
+/www/common.ac31b91bb6bdf907c95d.js
+/www/12.0a730e5dbf73fbf320f2.js
+/www/assets/fonts/glyphicons-halflings-regular.woff
+/www/assets/fonts/OpenSans-Regular-webfont.woff
+/www/assets/fonts/delos.eot
+/www/assets/i18n/it.po
+/www/assets/fonts/OpenSans-Italic-webfont.woff
+/www/assets/images/icons.png
+/www/glyphicons-halflings-regular.89889688147bd7575d63.svg
+/www/9.2b074387f6e011719c48.js
+/www/assets/fonts/delos.ttf
+/www/assets/fonts/delos.svg
+/www/8.7b17af014a628b3d9ae1.js
+/www/assets/fonts/OpenSans-Bold-webfont.woff2
+/www/glyphicons-halflings-regular.448c34a56d699c29117a.woff2
+/www/3.c4115c289c5994a23c55.js
+/www/2.00c0b2f404d4152eaa72.js
+/www/assets/images/cm_small_black.png
+/www/glyphicons-halflings-regular.e18bbf611f2a2e43afc0.ttf
+/www/assets/fonts/glyphicons-halflings-regular.woff2
+/www/assets/images/cm_small_green.png
+/www/assets/fonts/OpenSans-Semibold-webfont.eot
+/www/7.d9d99f6dcbb411098c9c.js
+/www/assets/images/header_Bg_44x21.png
+/www/glyphicons-halflings-regular.f4769f9bdb7466be6508.eot
+/www/assets/fonts/OpenSans-Bold-webfont.woff
+/www/assets/fonts/OpenSans-Semibold-webfont.ttf
+/www/assets/fonts/OpenSans-BoldItalic-webfont.woff
+/www/styles.298ce34baa5f3685d166.css
+/www/assets/fonts/OpenSans-Regular-webfont.woff2
+/www/assets/images/devolo_header_sm.svg
+/www/assets/images/favicon.ico
+/www/assets/i18n/es.po
+/www/assets/images/header_Bg_58x29.png
+/www/glyphicons-halflings-regular.fa2772327f55d8198301.woff
+/www/assets/i18n/fr.po
+/www/assets/fonts/OpenSans-Bold-webfont.eot
+/www/polyfills.d8aa260bd700adfab723.js
+/www/assets/fonts/OpenSans-Italic-webfont.eot
+/www/runtime.9337249a387c7e595bff.js
+/www/assets/fonts/OpenSans-Italic-webfont.woff2
+/www/assets/fonts/OpenSans-Semibold-webfont.woff
+/www/assets/fonts/OpenSans-Bold-webfont.ttf
+/www/main.c31911b358b5d113249b.js
+/www/assets/fonts/OpenSans-Regular-webfont.eot
+/www/assets/fonts/OpenSans-Italic-webfont.ttf
+/www/index.html
+/www/10.afa7a7c4d6ac4b046a79.js
+/www/assets/images/timeline_4b.svg
+/www/assets/images/devolo-buttons.png
+/www/assets/images/devolo_header.svg
+/www/assets/fonts/OpenSans-Regular-webfont.ttf
+/www/assets/fonts/delos.woff2
+/www/assets/fonts/glyphicons-halflings-regular.eot
diff --git a/usr/lib/opkg/info/delos-wifi-button.control b/usr/lib/opkg/info/delos-wifi-button.control
new file mode 100644
index 0000000..2747724
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-button.control
@@ -0,0 +1,10 @@
+Package: delos-wifi-button
+Version: 1.3-2
+Depends: libc, ubus, jshn, jsonfilter
+Source: feeds/devolo/devolo/delos-wifi
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 870
+Description:  WiFi button support for delos devices
diff --git a/usr/lib/opkg/info/delos-wifi-button.list b/usr/lib/opkg/info/delos-wifi-button.list
new file mode 100644
index 0000000..4d54e92
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-button.list
@@ -0,0 +1 @@
+/etc/rc.button/BTN_2
diff --git a/usr/lib/opkg/info/delos-wifi-config.control b/usr/lib/opkg/info/delos-wifi-config.control
new file mode 100644
index 0000000..33aac51
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-config.control
@@ -0,0 +1,10 @@
+Package: delos-wifi-config
+Version: 1.3-2
+Depends: libc
+Source: feeds/devolo/devolo/delos-wifi
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2091
+Description:  Initial WiFi config for QSDK based delos devices
diff --git a/usr/lib/opkg/info/delos-wifi-config.list b/usr/lib/opkg/info/delos-wifi-config.list
new file mode 100644
index 0000000..9678416
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-config.list
@@ -0,0 +1,5 @@
+/etc/uci-defaults/01_delos-wireless
+/etc/config/wireless
+/etc/uci-defaults/04_delos-guest-wifi
+/etc/uci-defaults/04_delos-guest-wifi-switchoff
+/etc/uci-defaults/04_delos-guest-wifi-timeout
diff --git a/usr/lib/opkg/info/delos-wifi-driver.control b/usr/lib/opkg/info/delos-wifi-driver.control
new file mode 100644
index 0000000..245aa6e
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-driver.control
@@ -0,0 +1,10 @@
+Package: delos-wifi-driver
+Version: 1.3-2
+Depends: libc
+Source: feeds/devolo/devolo/delos-wifi
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 700
+Description:  Pseudo wifi driver for delos wifi extensions
diff --git a/usr/lib/opkg/info/delos-wifi-driver.list b/usr/lib/opkg/info/delos-wifi-driver.list
new file mode 100644
index 0000000..0ef99c3
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-driver.list
@@ -0,0 +1,2 @@
+/lib/wifi/zzz.sh
+/lib/wifi/delos-wifi/delos-wifi.sh
diff --git a/usr/lib/opkg/info/delos-wifi-eventd.control b/usr/lib/opkg/info/delos-wifi-eventd.control
new file mode 100644
index 0000000..688132c
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-eventd.control
@@ -0,0 +1,10 @@
+Package: delos-wifi-eventd
+Version: 1.3-2
+Depends: libc, qca-acfg, ubus, jshn, jsonfilter
+Source: feeds/devolo/devolo/delos-wifi
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2092
+Description:  Support for receiving WiFi station events
diff --git a/usr/lib/opkg/info/delos-wifi-eventd.list b/usr/lib/opkg/info/delos-wifi-eventd.list
new file mode 100644
index 0000000..c2a51a8
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-eventd.list
@@ -0,0 +1,3 @@
+/usr/sbin/wifi-eventd
+/usr/sbin/update_wifi_client_list.sh
+/etc/init.d/wifi-eventd
diff --git a/usr/lib/opkg/info/delos-wifi-guest.control b/usr/lib/opkg/info/delos-wifi-guest.control
new file mode 100644
index 0000000..e93c454
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-guest.control
@@ -0,0 +1,10 @@
+Package: delos-wifi-guest
+Version: 1.3-2
+Depends: libc, delos-wifi-driver, kmod-ebtables-ipv4, kmod-ebtables-ipv6
+Source: feeds/devolo/devolo/delos-wifi
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 3784
+Description:  Restricted access for guest wifi
diff --git a/usr/lib/opkg/info/delos-wifi-guest.list b/usr/lib/opkg/info/delos-wifi-guest.list
new file mode 100644
index 0000000..3ac0b8c
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-guest.list
@@ -0,0 +1,4 @@
+/lib/wifi/delos-wifi/20_delos-guest-wifi
+/etc/odhcp6c.user
+/usr/sbin/wifi_guest.sh
+/etc/udhcpc.user
diff --git a/usr/lib/opkg/info/delos-wifi-peer-isolation.control b/usr/lib/opkg/info/delos-wifi-peer-isolation.control
new file mode 100644
index 0000000..410f34b
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-peer-isolation.control
@@ -0,0 +1,10 @@
+Package: delos-wifi-peer-isolation
+Version: 1.3-2
+Depends: libc, delos-wifi-driver, ubus, jshn, jsonfilter, ebtables
+Source: feeds/devolo/devolo/delos-wifi
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2330
+Description:  Peer isolation for dual radio APs
diff --git a/usr/lib/opkg/info/delos-wifi-peer-isolation.list b/usr/lib/opkg/info/delos-wifi-peer-isolation.list
new file mode 100644
index 0000000..9f04c98
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-peer-isolation.list
@@ -0,0 +1 @@
+/lib/wifi/delos-wifi/10_delos-peer-isolation
diff --git a/usr/lib/opkg/info/delos-wifi-schedule.control b/usr/lib/opkg/info/delos-wifi-schedule.control
new file mode 100644
index 0000000..dd6e725
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-schedule.control
@@ -0,0 +1,11 @@
+Package: delos-wifi-schedule
+Version: 1.0-3
+Depends: libc, iwinfo
+Source: feeds/devolo/devolo/delos-wifi-schedule
+License: devolo
+Section: net
+Maintainer: "Matthias Fasselt" <matthias.fasselt@devolo.de>
+Architecture: ar71xx
+Installed-Size: 4439
+Description:  Turns WiFi on and off according to a schedule defined in UCI.
+ Based on a community package "wifischedule"
diff --git a/usr/lib/opkg/info/delos-wifi-schedule.list b/usr/lib/opkg/info/delos-wifi-schedule.list
new file mode 100644
index 0000000..e8e78d9
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifi-schedule.list
@@ -0,0 +1,4 @@
+/etc/config/wifi_schedule
+/etc/init.d/wifi_schedule
+/etc/hotplug.d/ntp/10-wifi-schedule
+/usr/bin/wifi_schedule.sh
diff --git a/usr/lib/opkg/info/delos-wifison.control b/usr/lib/opkg/info/delos-wifison.control
new file mode 100644
index 0000000..e84c649
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifison.control
@@ -0,0 +1,10 @@
+Package: delos-wifison
+Version: 1-1
+Depends: libc, libstorage, libhyficommon
+Source: feeds/devolo/devolo/delos-wifison
+License: devolo
+Section: net
+Maintainer: Peter Fleer <peter.fleer@devolo.de> 
+Architecture: ar71xx
+Installed-Size: 876
+Description:  Turns WiFi SON on and off.
diff --git a/usr/lib/opkg/info/delos-wifison.list b/usr/lib/opkg/info/delos-wifison.list
new file mode 100644
index 0000000..22f8307
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wifison.list
@@ -0,0 +1,2 @@
+/etc/uci-defaults/04_delos-son
+/etc/uci-defaults/04_delos-wifi-son
diff --git a/usr/lib/opkg/info/delos-wps.control b/usr/lib/opkg/info/delos-wps.control
new file mode 100644
index 0000000..f29adf0
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wps.control
@@ -0,0 +1,10 @@
+Package: delos-wps
+Version: 2017-08-28-000000
+Depends: libc, qca-hostap, rpcd, qca-hostapd-cli, jshn
+Source: feeds/devolo/devolo/delos-wps
+License: MIT
+Section: net
+Maintainer: "Lukas Wolff" <lukas.wolff@devolo.de>
+Architecture: ar71xx
+Installed-Size: 5627
+Description:  Provides wps feature library for delos-webui
diff --git a/usr/lib/opkg/info/delos-wps.list b/usr/lib/opkg/info/delos-wps.list
new file mode 100644
index 0000000..b327d76
--- /dev/null
+++ b/usr/lib/opkg/info/delos-wps.list
@@ -0,0 +1,7 @@
+/usr/libexec/delos/delos-wps-handle
+/etc/hotplug.d/button/51-wps-clone
+/usr/libexec/delos/delos-wps-clone-handle
+/usr/libexec/delos/delos-wps-led-handle
+/etc/hotplug.d/button/50-wps
+/usr/libexec/delos/delos-clone-mode-uci
+/lib/wifi/delos-wifi/30_delos-wps-clone
diff --git a/usr/lib/opkg/info/dlan-addons.control b/usr/lib/opkg/info/dlan-addons.control
new file mode 100644
index 0000000..ed8cd8c
--- /dev/null
+++ b/usr/lib/opkg/info/dlan-addons.control
@@ -0,0 +1,10 @@
+Package: dlan-addons
+Version: 1-2
+Depends: libc, dlan-plc, open-plc-utils, open-plc-utils-plcgpio, ubus
+Source: feeds/devolo/devolo/dlan-addons
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 1754
+Description:  Additional features for devolo dLAN
diff --git a/usr/lib/opkg/info/dlan-addons.list b/usr/lib/opkg/info/dlan-addons.list
new file mode 100644
index 0000000..a41e455
--- /dev/null
+++ b/usr/lib/opkg/info/dlan-addons.list
@@ -0,0 +1,6 @@
+/etc/init.d/simpleconnect
+/usr/share/plc/simpleconnect.awk
+/usr/sbin/plctools-wrapper
+/usr/sbin/plc-get-pibsettings
+/lib/dlan/baptization.sh
+/usr/sbin/plc-set-pibsettings
diff --git a/usr/lib/opkg/info/dlan-fw-pro-1200-ac.control b/usr/lib/opkg/info/dlan-fw-pro-1200-ac.control
new file mode 100644
index 0000000..07ea19c
--- /dev/null
+++ b/usr/lib/opkg/info/dlan-fw-pro-1200-ac.control
@@ -0,0 +1,10 @@
+Package: dlan-fw-pro-1200-ac
+Version: 001-8
+Depends: libc, dlan-plc, open-plc-utils, open-plc-utils-plchost
+Source: feeds/devolo/devolo/dlan-fw
+License: devolo QCA
+Section: firmware
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 913392
+Description:  PLC firmware for devolo dLAN pro 1200+ WiFi ac
diff --git a/usr/lib/opkg/info/dlan-fw-pro-1200-ac.list b/usr/lib/opkg/info/dlan-fw-pro-1200-ac.list
new file mode 100644
index 0000000..c5ccf06
--- /dev/null
+++ b/usr/lib/opkg/info/dlan-fw-pro-1200-ac.list
@@ -0,0 +1,57 @@
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2966.pib
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2973.txt
+/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_on
+/lib/firmware/plc/dlan-pro-1200-ac/led_scheme_off
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2913.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/default_mode_name.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2673.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2966.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2674.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2730.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2673.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2674_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2910.pib
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2675.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2676_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2731.pib
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2674.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2911.pib
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2676.pib
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2730.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2732.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2913_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2730_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/MAC-7500-v2.6.0-01-NW6__-X-CS.nvm
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2910.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2675.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2973_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2912.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2731_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2910_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2732_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2966_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2731.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2973.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2911_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2912_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2911.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2676.txt
+/lib/firmware/plc/dlan-pro-1200-ac/qca7500-pib15-devolo-mt2913.pib
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2732.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_mimo_vdsl35b.txt
+/lib/firmware/plc/dlan-pro-1200-ac/reset_patch_mt2912.txt
+/lib/firmware/plc/dlan-pro-1200-ac/fwconfig
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2673_siso_full.txt
+/lib/firmware/plc/dlan-pro-1200-ac/patches_mt2675_mimo_vdsl35b.txt
diff --git a/usr/lib/opkg/info/dlan-plc.control b/usr/lib/opkg/info/dlan-plc.control
new file mode 100644
index 0000000..f20777c
--- /dev/null
+++ b/usr/lib/opkg/info/dlan-plc.control
@@ -0,0 +1,10 @@
+Package: dlan-plc
+Version: 001-8
+Depends: libc, open-plc-utils, open-plc-utils-chkpib, open-plc-utils-getpib, open-plc-utils-modpib, open-plc-utils-setpib, open-plc-utils-hpavkey, open-plc-utils-plctool, ebtables
+Source: feeds/devolo/devolo/dlan-fw
+License: devolo QCA
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 6652
+Description:  PLC runtime support for devolo dLAN devices
diff --git a/usr/lib/opkg/info/dlan-plc.list b/usr/lib/opkg/info/dlan-plc.list
new file mode 100644
index 0000000..875dbab
--- /dev/null
+++ b/usr/lib/opkg/info/dlan-plc.list
@@ -0,0 +1,6 @@
+/usr/sbin/plc-pushbtn
+/lib/upgrade/keep.d/dlan-plc
+/etc/rc.button/BTN_0
+/etc/uci-defaults/01_plc
+/usr/sbin/plc-reset
+/etc/init.d/plc
diff --git a/usr/lib/opkg/info/dlanApp2Backend-common.control b/usr/lib/opkg/info/dlanApp2Backend-common.control
new file mode 100644
index 0000000..667d637
--- /dev/null
+++ b/usr/lib/opkg/info/dlanApp2Backend-common.control
@@ -0,0 +1,10 @@
+Package: dlanApp2Backend-common
+Version: 12c9d02f2bb0b109d5d6c9cb7d9849356ae78687
+Depends: libc
+Source: feeds/devolo/devolo/dlanApp2Backend
+License: devolo
+Section: base
+Maintainer: "Thomas Bong" <thomas.bong@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2064
+Description:  Contains files, which are required by both API endpoints
diff --git a/usr/lib/opkg/info/dlanApp2Backend-common.list b/usr/lib/opkg/info/dlanApp2Backend-common.list
new file mode 100644
index 0000000..0f78437
--- /dev/null
+++ b/usr/lib/opkg/info/dlanApp2Backend-common.list
@@ -0,0 +1,3 @@
+/etc/config/dlanApp2Backend
+/etc/init.d/dlanApp2Backend
+/usr/sbin/dlanApp2Backend_set_ha1.sh
diff --git a/usr/lib/opkg/info/dlanApp2Backend-deviceapi.control b/usr/lib/opkg/info/dlanApp2Backend-deviceapi.control
new file mode 100644
index 0000000..c71c376
--- /dev/null
+++ b/usr/lib/opkg/info/dlanApp2Backend-deviceapi.control
@@ -0,0 +1,10 @@
+Package: dlanApp2Backend-deviceapi
+Version: 12c9d02f2bb0b109d5d6c9cb7d9849356ae78687
+Depends: libc, libstdcpp, libmicrohttpd-no-ssl, avahi-nodbus-daemon, libprotobuf, libblobmsg-json, boost-program_options, libubox, libubus, dlanApp2Backend-common
+Source: feeds/devolo/devolo/dlanApp2Backend
+License: devolo
+Section: base
+Maintainer: "Thomas Bong" <thomas.bong@devolo.de>
+Architecture: ar71xx
+Installed-Size: 120276
+Description:  dLAN App 2 deviceapi endpoint standalone application
diff --git a/usr/lib/opkg/info/dlanApp2Backend-deviceapi.list b/usr/lib/opkg/info/dlanApp2Backend-deviceapi.list
new file mode 100644
index 0000000..e5ee0a0
--- /dev/null
+++ b/usr/lib/opkg/info/dlanApp2Backend-deviceapi.list
@@ -0,0 +1 @@
+/usr/bin/dlanApp2Backend-device
diff --git a/usr/lib/opkg/info/dlanApp2Backend-plcnetapi.control b/usr/lib/opkg/info/dlanApp2Backend-plcnetapi.control
new file mode 100644
index 0000000..14b5387
--- /dev/null
+++ b/usr/lib/opkg/info/dlanApp2Backend-plcnetapi.control
@@ -0,0 +1,10 @@
+Package: dlanApp2Backend-plcnetapi
+Version: 12c9d02f2bb0b109d5d6c9cb7d9849356ae78687
+Depends: libc, libstdcpp, libmicrohttpd-no-ssl, avahi-nodbus-daemon, libprotobuf, boost-program_options, dlanApp2Backend-common
+Source: feeds/devolo/devolo/dlanApp2Backend
+License: devolo
+Section: base
+Maintainer: "Thomas Bong" <thomas.bong@devolo.de>
+Architecture: ar71xx
+Installed-Size: 266543
+Description:  dLAN App 2 plcnetapi endpoint standalone application
diff --git a/usr/lib/opkg/info/dlanApp2Backend-plcnetapi.list b/usr/lib/opkg/info/dlanApp2Backend-plcnetapi.list
new file mode 100644
index 0000000..d8c4644
--- /dev/null
+++ b/usr/lib/opkg/info/dlanApp2Backend-plcnetapi.list
@@ -0,0 +1,2 @@
+/usr/sbin/dlanApp2Backend_get_router_mac.sh
+/usr/bin/dlanApp2Backend-plcnet
diff --git a/usr/lib/opkg/info/dlanapi.control b/usr/lib/opkg/info/dlanapi.control
new file mode 100644
index 0000000..bc8f387
--- /dev/null
+++ b/usr/lib/opkg/info/dlanapi.control
@@ -0,0 +1,10 @@
+Package: dlanapi
+Version: 2017-11-07-000000
+Depends: libc, libstdcpp
+Source: feeds/devolo/devolo/dlanapi
+License: devolo
+Section: base
+Maintainer: "Helmut Lucht" <helmut.lucht@devolo.de>
+Architecture: ar71xx
+Installed-Size: 17848
+Description:  dlanapi
diff --git a/usr/lib/opkg/info/dlanapi.list b/usr/lib/opkg/info/dlanapi.list
new file mode 100644
index 0000000..92ab104
--- /dev/null
+++ b/usr/lib/opkg/info/dlanapi.list
@@ -0,0 +1 @@
+/usr/lib/libdlanapi.so
diff --git a/usr/lib/opkg/info/dlanx-standby.control b/usr/lib/opkg/info/dlanx-standby.control
new file mode 100644
index 0000000..d614f43
--- /dev/null
+++ b/usr/lib/opkg/info/dlanx-standby.control
@@ -0,0 +1,10 @@
+Package: dlanx-standby
+Version: 2-1
+Depends: libc, ubus, jsonfilter
+Source: feeds/devolo/devolo/dlanx-standby
+License: devolo
+Section: net
+Maintainer: "Günther Kelleter" <guenther.kelleter@devolo.de>
+Architecture: ar71xx
+Installed-Size: 2332
+Description:  Standby feature for devolo dLAN 1/2
diff --git a/usr/lib/opkg/info/dlanx-standby.list b/usr/lib/opkg/info/dlanx-standby.list
new file mode 100644
index 0000000..31aa9a0
--- /dev/null
+++ b/usr/lib/opkg/info/dlanx-standby.list
@@ -0,0 +1,3 @@
+/usr/sbin/plc-standby
+/etc/hotplug.d/net/90-plc-standby
+/usr/share/dlanx-standby/init-standby.sh
diff --git a/usr/lib/opkg/info/dmc.control b/usr/lib/opkg/info/dmc.control
new file mode 100644
index 0000000..c2ff240
--- /dev/null
+++ b/usr/lib/opkg/info/dmc.control
@@ -0,0 +1,8 @@
+Package: dmc
+Version: 1.5.1
+Depends: libc, libubus, libuci, libubox, libjson-c, libcurl, libblobmsg-json
+Source: feeds/devolo/third-party/easycwmp-commercial/dmc
+Section: utils
+Architecture: ar71xx
+Installed-Size: 53981
+Description:  CWMP Data Model
diff --git a/usr/lib/opkg/info/dmc.list b/usr/lib/opkg/info/dmc.list
new file mode 100644
index 0000000..e13749c
--- /dev/null
+++ b/usr/lib/opkg/info/dmc.list
@@ -0,0 +1,4 @@
+/etc/config/dmmap
+/usr/share/easycwmp/functions/download
+/usr/share/easycwmp/functions/traceroute_launch
+/usr/sbin/easycwmp
diff --git a/usr/lib/opkg/info/dropbear.conffiles b/usr/lib/opkg/info/dropbear.conffiles
new file mode 100644
index 0000000..ff17711
--- /dev/null
+++ b/usr/lib/opkg/info/dropbear.conffiles
@@ -0,0 +1,2 @@
+/etc/dropbear/dropbear_rsa_host_key
+/etc/config/dropbear
diff --git a/usr/lib/opkg/info/dropbear.control b/usr/lib/opkg/info/dropbear.control
new file mode 100644
index 0000000..e8ed786
--- /dev/null
+++ b/usr/lib/opkg/info/dropbear.control
@@ -0,0 +1,10 @@
+Package: dropbear
+Version: 2017.75-1
+Depends: libc
+Source: package/network/services/dropbear
+License: MIT
+LicenseFiles: LICENSE libtomcrypt/LICENSE libtommath/LICENSE
+Section: net
+Architecture: ar71xx
+Installed-Size: 101568
+Description:  A small SSH2 server/client designed for small memory environments.
diff --git a/usr/lib/opkg/info/dropbear.list b/usr/lib/opkg/info/dropbear.list
new file mode 100644
index 0000000..732e4ed
--- /dev/null
+++ b/usr/lib/opkg/info/dropbear.list
@@ -0,0 +1,8 @@
+/usr/bin/dbclient
+/usr/bin/scp
+/etc/dropbear/dropbear_rsa_host_key
+/etc/init.d/dropbear
+/usr/bin/dropbearkey
+/etc/config/dropbear
+/usr/sbin/dropbear
+/usr/bin/ssh
diff --git a/usr/lib/opkg/info/dvlutils.control b/usr/lib/opkg/info/dvlutils.control
new file mode 100644
index 0000000..96dbb41
--- /dev/null
+++ b/usr/lib/opkg/info/dvlutils.control
@@ -0,0 +1,10 @@
+Package: dvlutils
+Version: 2016-01-19-000000
+Depends: libc, libstdcpp
+Source: feeds/devolo/devolo/dvlutils
+License: devolo
+Section: dvlutils
+Maintainer: "Thomas Jalowy" <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 98063
+Description:  devolo utilities
diff --git a/usr/lib/opkg/info/dvlutils.list b/usr/lib/opkg/info/dvlutils.list
new file mode 100644
index 0000000..db13ade
--- /dev/null
+++ b/usr/lib/opkg/info/dvlutils.list
@@ -0,0 +1,2 @@
+/usr/lib/libdvlutils.so
+/usr/lib/libdvlthread.so
diff --git a/usr/lib/opkg/info/easycwmp.conffiles b/usr/lib/opkg/info/easycwmp.conffiles
new file mode 100644
index 0000000..36e4934
--- /dev/null
+++ b/usr/lib/opkg/info/easycwmp.conffiles
@@ -0,0 +1 @@
+/etc/config/easycwmp
diff --git a/usr/lib/opkg/info/easycwmp.control b/usr/lib/opkg/info/easycwmp.control
new file mode 100644
index 0000000..d4bcf12
--- /dev/null
+++ b/usr/lib/opkg/info/easycwmp.control
@@ -0,0 +1,8 @@
+Package: easycwmp
+Version: 1.7.0
+Depends: libc, libubus, libuci, libubox, libmicroxml, libjson-c, libcurl
+Source: feeds/devolo/third-party/easycwmp
+Section: utils
+Architecture: ar71xx
+Installed-Size: 31061
+Description:  An open source implementation of the client CWMP (TR-069) protocol
diff --git a/usr/lib/opkg/info/easycwmp.list b/usr/lib/opkg/info/easycwmp.list
new file mode 100644
index 0000000..d2b2cc4
--- /dev/null
+++ b/usr/lib/opkg/info/easycwmp.list
@@ -0,0 +1,5 @@
+/usr/sbin/easycwmpd
+/lib/upgrade/keep.d/easycwmp
+/etc/init.d/easycwmpd
+/usr/share/easycwmp/functions/ipping_launch
+/etc/config/easycwmp
diff --git a/usr/lib/opkg/info/ebtables.control b/usr/lib/opkg/info/ebtables.control
new file mode 100644
index 0000000..0cf0bb4
--- /dev/null
+++ b/usr/lib/opkg/info/ebtables.control
@@ -0,0 +1,12 @@
+Package: ebtables
+Version: 2.0.10-4-5
+Depends: libc, kmod-ebtables
+Source: package/network/utils/ebtables
+License: GPL-2.0
+Section: net
+Architecture: ar71xx
+Installed-Size: 62001
+Description:  The ebtables program is a filtering tool for a bridging firewall. The
+ filtering is focussed on the Link Layer Ethernet frame fields. Apart
+ from filtering, it also gives the ability to alter the Ethernet MAC
+ addresses and implement a brouter.
diff --git a/usr/lib/opkg/info/ebtables.list b/usr/lib/opkg/info/ebtables.list
new file mode 100644
index 0000000..2adbea2
--- /dev/null
+++ b/usr/lib/opkg/info/ebtables.list
@@ -0,0 +1,24 @@
+/usr/lib/ebtables/libebt_ulog.so
+/usr/sbin/ebtables
+/usr/lib/ebtables/libebt_standard.so
+/usr/lib/ebtables/libebt_vlan.so
+/usr/lib/ebtables/libebt_redirect.so
+/usr/lib/libebtc.so
+/usr/lib/ebtables/libebt_pkttype.so
+/usr/lib/ebtables/libebt_limit.so
+/usr/lib/ebtables/libebt_arp.so
+/usr/lib/ebtables/libebt_arpreply.so
+/usr/lib/ebtables/libebt_among.so
+/usr/lib/ebtables/libebtable_filter.so
+/usr/lib/ebtables/libebt_stp.so
+/usr/lib/ebtables/libebt_802_3.so
+/usr/lib/ebtables/libebt_nflog.so
+/usr/lib/ebtables/libebt_mark.so
+/usr/lib/ebtables/libebt_nat.so
+/etc/ethertypes
+/usr/lib/ebtables/libebtable_broute.so
+/usr/lib/ebtables/libebtable_nat.so
+/usr/lib/ebtables/libebt_ip.so
+/usr/lib/ebtables/libebt_log.so
+/usr/lib/ebtables/libebt_ip6.so
+/usr/lib/ebtables/libebt_mark_m.so
diff --git a/usr/lib/opkg/info/firewall.conffiles b/usr/lib/opkg/info/firewall.conffiles
new file mode 100644
index 0000000..06194ca
--- /dev/null
+++ b/usr/lib/opkg/info/firewall.conffiles
@@ -0,0 +1,2 @@
+/etc/config/firewall
+/etc/firewall.user
diff --git a/usr/lib/opkg/info/firewall.control b/usr/lib/opkg/info/firewall.control
new file mode 100644
index 0000000..b00ab10
--- /dev/null
+++ b/usr/lib/opkg/info/firewall.control
@@ -0,0 +1,10 @@
+Package: firewall
+Version: 2015-07-27
+Depends: libc, libubox, libubus, libuci, libip4tc, libip6tc, libxtables, kmod-ipt-core, kmod-ipt-conntrack, kmod-ipt-nat
+Source: package/network/config/firewall
+License: ISC
+Section: net
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 43901
+Description:  This package provides a config-compatible C implementation of the UCI firewall.
diff --git a/usr/lib/opkg/info/firewall.list b/usr/lib/opkg/info/firewall.list
new file mode 100644
index 0000000..3178090
--- /dev/null
+++ b/usr/lib/opkg/info/firewall.list
@@ -0,0 +1,5 @@
+/etc/init.d/firewall
+/sbin/fw3
+/etc/config/firewall
+/etc/firewall.user
+/etc/hotplug.d/iface/20-firewall
diff --git a/usr/lib/opkg/info/fstools.control b/usr/lib/opkg/info/fstools.control
new file mode 100644
index 0000000..1180019
--- /dev/null
+++ b/usr/lib/opkg/info/fstools.control
@@ -0,0 +1,10 @@
+Package: fstools
+Version: 2016-01-10-96415afecef35766332067f4205ef3b2c7561d21
+Depends: libc, ubox, ubi-utils
+Source: package/system/fstools
+License: GPL-2.0
+Section: base
+Maintainer: John Crispin <blogic@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 18331
+Description:  OpenWrt filesystem tools
diff --git a/usr/lib/opkg/info/fstools.list b/usr/lib/opkg/info/fstools.list
new file mode 100644
index 0000000..8de1f9b
--- /dev/null
+++ b/usr/lib/opkg/info/fstools.list
@@ -0,0 +1,6 @@
+/sbin/mount_root
+/sbin/jffs2reset
+/sbin/snapshot_tool
+/sbin/jffs2mark
+/lib/libfstools.so
+/sbin/snapshot
diff --git a/usr/lib/opkg/info/fwknopd.conffiles b/usr/lib/opkg/info/fwknopd.conffiles
new file mode 100644
index 0000000..7816896
--- /dev/null
+++ b/usr/lib/opkg/info/fwknopd.conffiles
@@ -0,0 +1,3 @@
+/etc/fwknop/access.conf
+/etc/fwknop/fwknopd.conf
+/etc/config/fwknopd
diff --git a/usr/lib/opkg/info/fwknopd.control b/usr/lib/opkg/info/fwknopd.control
new file mode 100644
index 0000000..90bf2b4
--- /dev/null
+++ b/usr/lib/opkg/info/fwknopd.control
@@ -0,0 +1,18 @@
+Package: fwknopd
+Version: 2.6.9-5
+Depends: libc, iptables, libfko, libpcap
+Source: qca/feeds/packages/net/fwknop
+License: GPLv2
+Section: net
+Maintainer: Jonathan Bennett <JBennett@incomsystems.biz>
+Architecture: ar71xx
+Installed-Size: 58625
+Description:  Fwknop implements an authorization scheme known as Single Packet Authorization
+ (SPA) for Linux systems running iptables.  This mechanism requires only a
+ single encrypted and non-replayed packet to communicate various pieces of
+ information including desired access through an iptables policy. The main
+ application of this program is to use iptables in a default-drop stance to
+ protect services such as SSH with an additional layer of security in order to
+ make the exploitation of vulnerabilities (both 0-day and unpatched code) much
+ more difficult.
+ This package contains the fwknop daemon.
diff --git a/usr/lib/opkg/info/fwknopd.list b/usr/lib/opkg/info/fwknopd.list
new file mode 100644
index 0000000..c7e605b
--- /dev/null
+++ b/usr/lib/opkg/info/fwknopd.list
@@ -0,0 +1,4 @@
+/etc/init.d/fwknopd
+/usr/sbin/fwknopd
+/etc/fwknop/access.conf
+/etc/fwknop/fwknopd.conf
diff --git a/usr/lib/opkg/info/fwuagent.control b/usr/lib/opkg/info/fwuagent.control
new file mode 100644
index 0000000..c1801cf
--- /dev/null
+++ b/usr/lib/opkg/info/fwuagent.control
@@ -0,0 +1,10 @@
+Package: fwuagent
+Version: V0.9.9.1-1
+Depends: libc, libstdcpp, libcurl, libopenssl, boost-program_options, boost-system, ubi-utils, libubus, libubox, libblobmsg-json
+Source: feeds/devolo/devolo/helios-fwuagent-delos5
+License: devolo
+Section: hawkbit
+Maintainer: "Stefan Schake" <stefan.schake@devolo.de>
+Architecture: ar71xx
+Installed-Size: 240311
+Description:  Firmware Update Agent
diff --git a/usr/lib/opkg/info/fwuagent.list b/usr/lib/opkg/info/fwuagent.list
new file mode 100644
index 0000000..db6c20b
--- /dev/null
+++ b/usr/lib/opkg/info/fwuagent.list
@@ -0,0 +1,5 @@
+/etc/uci-defaults/02_fwuagent
+/etc/init.d/fwuagent
+/etc/keys/delos-client-cert.pem
+/usr/bin/fwuagent
+/etc/keys/delos-client-key.pem
diff --git a/usr/lib/opkg/info/iconv.control b/usr/lib/opkg/info/iconv.control
new file mode 100644
index 0000000..2919a0e
--- /dev/null
+++ b/usr/lib/opkg/info/iconv.control
@@ -0,0 +1,9 @@
+Package: iconv
+Version: 1.11.1-1
+Depends: libc, libiconv-full, libcharset
+Source: package/libs/libiconv-full
+Section: utils
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 9745
+Description:  Character set conversion utility
diff --git a/usr/lib/opkg/info/iconv.list b/usr/lib/opkg/info/iconv.list
new file mode 100644
index 0000000..d90fc3b
--- /dev/null
+++ b/usr/lib/opkg/info/iconv.list
@@ -0,0 +1 @@
+/usr/bin/iconv
diff --git a/usr/lib/opkg/info/ip-full.conffiles b/usr/lib/opkg/info/ip-full.conffiles
new file mode 100644
index 0000000..f2bad45
--- /dev/null
+++ b/usr/lib/opkg/info/ip-full.conffiles
@@ -0,0 +1 @@
+/etc/iproute2/rt_tables
diff --git a/usr/lib/opkg/info/ip-full.control b/usr/lib/opkg/info/ip-full.control
new file mode 100644
index 0000000..5b9bb4d
--- /dev/null
+++ b/usr/lib/opkg/info/ip-full.control
@@ -0,0 +1,10 @@
+Package: ip-full
+Version: 4.0.0-1
+Depends: libc, libnl-tiny
+Source: package/network/utils/iproute2
+License: GPL-2.0
+Section: net
+Maintainer: Russell Senior <russell@personaltelco.net>
+Architecture: ar71xx
+Installed-Size: 120705
+Description:  Routing control utility (Full)
diff --git a/usr/lib/opkg/info/ip-full.list b/usr/lib/opkg/info/ip-full.list
new file mode 100644
index 0000000..b8d9599
--- /dev/null
+++ b/usr/lib/opkg/info/ip-full.list
@@ -0,0 +1,2 @@
+/usr/sbin/ip
+/etc/iproute2/rt_tables
diff --git a/usr/lib/opkg/info/ip6tables.control b/usr/lib/opkg/info/ip6tables.control
new file mode 100644
index 0000000..790371b
--- /dev/null
+++ b/usr/lib/opkg/info/ip6tables.control
@@ -0,0 +1,9 @@
+Package: ip6tables
+Version: 1.4.21-1
+Depends: libc, kmod-ip6tables, iptables
+Source: package/network/utils/iptables
+License: GPL-2.0
+Section: net
+Architecture: ar71xx
+Installed-Size: 214
+Description:  IPv6 firewall administration tool
diff --git a/usr/lib/opkg/info/ip6tables.list b/usr/lib/opkg/info/ip6tables.list
new file mode 100644
index 0000000..518635e
--- /dev/null
+++ b/usr/lib/opkg/info/ip6tables.list
@@ -0,0 +1,3 @@
+/usr/sbin/ip6tables-save
+/usr/sbin/ip6tables
+/usr/sbin/ip6tables-restore
diff --git a/usr/lib/opkg/info/iptables.control b/usr/lib/opkg/info/iptables.control
new file mode 100644
index 0000000..c86c131
--- /dev/null
+++ b/usr/lib/opkg/info/iptables.control
@@ -0,0 +1,44 @@
+Package: iptables
+Version: 1.4.21-1
+Depends: libc, kmod-ipt-core, libip4tc, libip6tc, libxtables
+Source: package/network/utils/iptables
+License: GPL-2.0
+Section: net
+Architecture: ar71xx
+Installed-Size: 23281
+Description:  IP firewall administration tool.
+ 
+ Matches:
+ - icmp
+ - tcp
+ - udp
+ - comment
+ - conntrack
+ - limit
+ - mac
+ - mark
+ - multiport
+ - set
+ - state
+ - time
+ 
+ Targets:
+ - ACCEPT
+ - CT
+ - DNAT
+ - DROP
+ - REJECT
+ - LOG
+ - MARK
+ - MASQUERADE
+ - REDIRECT
+ - SET
+ - SNAT
+ - TCPMSS
+ 
+ Tables:
+ - filter
+ - mangle
+ - nat
+ - raw
+ 
diff --git a/usr/lib/opkg/info/iptables.list b/usr/lib/opkg/info/iptables.list
new file mode 100644
index 0000000..655cdcd
--- /dev/null
+++ b/usr/lib/opkg/info/iptables.list
@@ -0,0 +1,4 @@
+/usr/sbin/xtables-multi
+/usr/sbin/iptables-save
+/usr/sbin/iptables-restore
+/usr/sbin/iptables
diff --git a/usr/lib/opkg/info/iwinfo.control b/usr/lib/opkg/info/iwinfo.control
new file mode 100644
index 0000000..a18787b
--- /dev/null
+++ b/usr/lib/opkg/info/iwinfo.control
@@ -0,0 +1,10 @@
+Package: iwinfo
+Version: 2015-06-01-ade8b1b299cbd5748db1acf80dd3e9f567938371
+Depends: libc, libiwinfo
+Source: package/network/utils/iwinfo
+License: GPL-2.0
+Section: utils
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 5824
+Description:  Command line frontend for the wireless information library.
diff --git a/usr/lib/opkg/info/iwinfo.list b/usr/lib/opkg/info/iwinfo.list
new file mode 100644
index 0000000..1d3a6d0
--- /dev/null
+++ b/usr/lib/opkg/info/iwinfo.list
@@ -0,0 +1 @@
+/usr/bin/iwinfo
diff --git a/usr/lib/opkg/info/jansson.control b/usr/lib/opkg/info/jansson.control
new file mode 100644
index 0000000..ef92680
--- /dev/null
+++ b/usr/lib/opkg/info/jansson.control
@@ -0,0 +1,10 @@
+Package: jansson
+Version: 2.7-1
+Depends: libc
+Source: qca/feeds/packages/libs/jansson
+License: MIT
+Section: libs
+Maintainer: Gergely Kiss <mail.gery@gmail.com>
+Architecture: ar71xx
+Installed-Size: 16750
+Description:  Jansson is a C library for encoding, decoding and manipulating JSON data
diff --git a/usr/lib/opkg/info/jansson.list b/usr/lib/opkg/info/jansson.list
new file mode 100644
index 0000000..ee1eae3
--- /dev/null
+++ b/usr/lib/opkg/info/jansson.list
@@ -0,0 +1,3 @@
+/usr/lib/libjansson.so.4.7.0
+/usr/lib/libjansson.so.4
+/usr/lib/libjansson.so
diff --git a/usr/lib/opkg/info/jshn.control b/usr/lib/opkg/info/jshn.control
new file mode 100644
index 0000000..c215f48
--- /dev/null
+++ b/usr/lib/opkg/info/jshn.control
@@ -0,0 +1,10 @@
+Package: jshn
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc, libjson-c, libubox, libblobmsg-json
+Source: package/libs/libubox
+License: ISC
+Section: utils
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 5491
+Description:  Library for parsing and generating JSON from shell scripts
diff --git a/usr/lib/opkg/info/jshn.list b/usr/lib/opkg/info/jshn.list
new file mode 100644
index 0000000..ba3aceb
--- /dev/null
+++ b/usr/lib/opkg/info/jshn.list
@@ -0,0 +1,2 @@
+/usr/share/libubox/jshn.sh
+/usr/bin/jshn
diff --git a/usr/lib/opkg/info/jsonfilter.control b/usr/lib/opkg/info/jsonfilter.control
new file mode 100644
index 0000000..7dad6f1
--- /dev/null
+++ b/usr/lib/opkg/info/jsonfilter.control
@@ -0,0 +1,10 @@
+Package: jsonfilter
+Version: 2018-02-04-c7e938d6582a436dddc938539e72dd1320625c54
+Depends: libc, libubox, libjson-c
+Source: package/utils/jsonfilter
+License: ISC
+Section: base
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 9523
+Description:  OpenWrt JSON filter utility
diff --git a/usr/lib/opkg/info/jsonfilter.list b/usr/lib/opkg/info/jsonfilter.list
new file mode 100644
index 0000000..20be7dd
--- /dev/null
+++ b/usr/lib/opkg/info/jsonfilter.list
@@ -0,0 +1 @@
+/usr/bin/jsonfilter
diff --git a/usr/lib/opkg/info/kernel.control b/usr/lib/opkg/info/kernel.control
new file mode 100644
index 0000000..7da8820
--- /dev/null
+++ b/usr/lib/opkg/info/kernel.control
@@ -0,0 +1,10 @@
+Package: kernel
+Version: 4.4.60-1-08d19d61653d44ba12b170a053afede8
+Depends: libc
+Source: package/kernel/linux
+License: GPLv2
+Section: sys
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 105
+Description:  Virtual kernel package
diff --git a/usr/lib/opkg/info/kernel.list b/usr/lib/opkg/info/kernel.list
new file mode 100644
index 0000000..e69de29
diff --git a/usr/lib/opkg/info/kmod-bridge.control b/usr/lib/opkg/info/kmod-bridge.control
new file mode 100644
index 0000000..05384b6
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-bridge.control
@@ -0,0 +1,10 @@
+Package: kmod-bridge
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-stp
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 188
+Description:  Kernel module for Ethernet bridging.
diff --git a/usr/lib/opkg/info/kmod-bridge.list b/usr/lib/opkg/info/kmod-bridge.list
new file mode 100644
index 0000000..48ec72d
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-bridge.list
@@ -0,0 +1 @@
+/etc/modules.d/11-bridge
diff --git a/usr/lib/opkg/info/kmod-ebtables-ipv4.control b/usr/lib/opkg/info/kmod-ebtables-ipv4.control
new file mode 100644
index 0000000..98c841b
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ebtables-ipv4.control
@@ -0,0 +1,11 @@
+Package: kmod-ebtables-ipv4
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ebtables
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 3819
+Description:  This option adds the IPv4 support to ebtables, which allows basic
+ IPv4 header field filtering, ARP filtering as well as SNAT, DNAT targets.
diff --git a/usr/lib/opkg/info/kmod-ebtables-ipv4.list b/usr/lib/opkg/info/kmod-ebtables-ipv4.list
new file mode 100644
index 0000000..2be5c42
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ebtables-ipv4.list
@@ -0,0 +1,6 @@
+/lib/modules/4.4.60/ebt_dnat.ko
+/lib/modules/4.4.60/ebt_ip.ko
+/lib/modules/4.4.60/ebt_arp.ko
+/lib/modules/4.4.60/ebt_arpreply.ko
+/etc/modules.d/ebtables-ipv4
+/lib/modules/4.4.60/ebt_snat.ko
diff --git a/usr/lib/opkg/info/kmod-ebtables-ipv6.control b/usr/lib/opkg/info/kmod-ebtables-ipv6.control
new file mode 100644
index 0000000..275e019
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ebtables-ipv6.control
@@ -0,0 +1,11 @@
+Package: kmod-ebtables-ipv6
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ebtables
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 1668
+Description:  This option adds the IPv6 support to ebtables, which allows basic
+ IPv6 header field filtering and target support.
diff --git a/usr/lib/opkg/info/kmod-ebtables-ipv6.list b/usr/lib/opkg/info/kmod-ebtables-ipv6.list
new file mode 100644
index 0000000..b1d9217
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ebtables-ipv6.list
@@ -0,0 +1,2 @@
+/lib/modules/4.4.60/ebt_ip6.ko
+/etc/modules.d/ebtables-ipv6
diff --git a/usr/lib/opkg/info/kmod-ebtables.control b/usr/lib/opkg/info/kmod-ebtables.control
new file mode 100644
index 0000000..58c0cdb
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ebtables.control
@@ -0,0 +1,12 @@
+Package: kmod-ebtables
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-bridge
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 17399
+Description:  ebtables is a general, extensible frame/packet identification
+ framework. It provides you to do Ethernet
+ filtering/NAT/brouting on the Ethernet bridge.
diff --git a/usr/lib/opkg/info/kmod-ebtables.list b/usr/lib/opkg/info/kmod-ebtables.list
new file mode 100644
index 0000000..9d98590
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ebtables.list
@@ -0,0 +1,14 @@
+/lib/modules/4.4.60/ebt_mark.ko
+/etc/modules.d/ebtables
+/lib/modules/4.4.60/ebtable_broute.ko
+/lib/modules/4.4.60/ebt_pkttype.ko
+/lib/modules/4.4.60/ebtables.ko
+/lib/modules/4.4.60/ebt_limit.ko
+/lib/modules/4.4.60/ebt_among.ko
+/lib/modules/4.4.60/ebt_mark_m.ko
+/lib/modules/4.4.60/ebt_stp.ko
+/lib/modules/4.4.60/ebt_802_3.ko
+/lib/modules/4.4.60/ebt_vlan.ko
+/lib/modules/4.4.60/ebt_redirect.ko
+/lib/modules/4.4.60/ebtable_nat.ko
+/lib/modules/4.4.60/ebtable_filter.ko
diff --git a/usr/lib/opkg/info/kmod-gpio-button-hotplug.control b/usr/lib/opkg/info/kmod-gpio-button-hotplug.control
new file mode 100644
index 0000000..92b5ea6
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-gpio-button-hotplug.control
@@ -0,0 +1,14 @@
+Package: kmod-gpio-button-hotplug
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/gpio-button-hotplug
+Section: kernel
+Architecture: ar71xx
+Installed-Size: 5513
+Description:  This is a replacement for the following in-kernel drivers:
+ 1) gpio_keys (KEYBOARD_GPIO)
+ 2) gpio_keys_polled (KEYBOARD_GPIO_POLLED)
+ 
+ Instead of generating input events (like in-kernel drivers do) it generates
+ uevent-s and broadcasts them. This allows disabling input subsystem which is
+ an overkill for OpenWrt simple needs.
diff --git a/usr/lib/opkg/info/kmod-gpio-button-hotplug.list b/usr/lib/opkg/info/kmod-gpio-button-hotplug.list
new file mode 100644
index 0000000..aeb1957
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-gpio-button-hotplug.list
@@ -0,0 +1,3 @@
+/etc/modules-boot.d/30-gpio-button-hotplug
+/lib/modules/4.4.60/gpio-button-hotplug.ko
+/etc/modules.d/30-gpio-button-hotplug
diff --git a/usr/lib/opkg/info/kmod-ip6tables.control b/usr/lib/opkg/info/kmod-ip6tables.control
new file mode 100644
index 0000000..4f5f61d
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ip6tables.control
@@ -0,0 +1,10 @@
+Package: kmod-ip6tables
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-ipt6, kmod-ipt-core, kmod-ipt-conntrack
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 8184
+Description:  Netfilter IPv6 firewalling support
diff --git a/usr/lib/opkg/info/kmod-ip6tables.list b/usr/lib/opkg/info/kmod-ip6tables.list
new file mode 100644
index 0000000..016e48e
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ip6tables.list
@@ -0,0 +1,7 @@
+/etc/modules.d/42-ip6tables
+/lib/modules/4.4.60/nf_reject_ipv6.ko
+/lib/modules/4.4.60/nf_log_ipv6.ko
+/lib/modules/4.4.60/ip6table_mangle.ko
+/lib/modules/4.4.60/ip6table_filter.ko
+/lib/modules/4.4.60/ip6table_raw.ko
+/lib/modules/4.4.60/ip6t_REJECT.ko
diff --git a/usr/lib/opkg/info/kmod-ipt-conntrack.control b/usr/lib/opkg/info/kmod-ipt-conntrack.control
new file mode 100644
index 0000000..13c7eb7
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-conntrack.control
@@ -0,0 +1,16 @@
+Package: kmod-ipt-conntrack
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-nf-conntrack
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 4765
+Description:  Netfilter (IPv4) kernel modules for connection tracking
+ Includes:
+ - conntrack
+ - defrag
+ - iptables_raw
+ - NOTRACK
+ - state
diff --git a/usr/lib/opkg/info/kmod-ipt-conntrack.list b/usr/lib/opkg/info/kmod-ipt-conntrack.list
new file mode 100644
index 0000000..3524f94
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-conntrack.list
@@ -0,0 +1,5 @@
+/lib/modules/4.4.60/xt_state.ko
+/lib/modules/4.4.60/xt_CT.ko
+/lib/modules/4.4.60/iptable_raw.ko
+/etc/modules.d/ipt-conntrack
+/lib/modules/4.4.60/xt_conntrack.ko
diff --git a/usr/lib/opkg/info/kmod-ipt-core.control b/usr/lib/opkg/info/kmod-ipt-core.control
new file mode 100644
index 0000000..9555317
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-core.control
@@ -0,0 +1,18 @@
+Package: kmod-ipt-core
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-ipt
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 16446
+Description:  Netfilter core kernel modules
+ Includes:
+ - comment
+ - limit
+ - LOG
+ - mac
+ - multiport
+ - REJECT
+ - TCPMSS
diff --git a/usr/lib/opkg/info/kmod-ipt-core.list b/usr/lib/opkg/info/kmod-ipt-core.list
new file mode 100644
index 0000000..cf37afc
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-core.list
@@ -0,0 +1,17 @@
+/lib/modules/4.4.60/nf_log_common.ko
+/lib/modules/4.4.60/xt_comment.ko
+/lib/modules/4.4.60/xt_time.ko
+/lib/modules/4.4.60/xt_TCPMSS.ko
+/lib/modules/4.4.60/xt_multiport.ko
+/lib/modules/4.4.60/ipt_REJECT.ko
+/lib/modules/4.4.60/iptable_mangle.ko
+/lib/modules/4.4.60/xt_tcpudp.ko
+/lib/modules/4.4.60/iptable_filter.ko
+/lib/modules/4.4.60/xt_limit.ko
+/lib/modules/4.4.60/xt_mark.ko
+/lib/modules/4.4.60/xt_id.ko
+/etc/modules.d/ipt-core
+/lib/modules/4.4.60/xt_LOG.ko
+/lib/modules/4.4.60/nf_reject_ipv4.ko
+/lib/modules/4.4.60/nf_log_ipv4.ko
+/lib/modules/4.4.60/xt_mac.ko
diff --git a/usr/lib/opkg/info/kmod-ipt-extra.control b/usr/lib/opkg/info/kmod-ipt-extra.control
new file mode 100644
index 0000000..9d31be7
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-extra.control
@@ -0,0 +1,16 @@
+Package: kmod-ipt-extra
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 4229
+Description:  Other Netfilter (IPv4) kernel modules
+ Includes:
+ - addrtype
+ - owner
+ - physdev (if bridge support was enabled in kernel)
+ - pkttype
+ - quota
diff --git a/usr/lib/opkg/info/kmod-ipt-extra.list b/usr/lib/opkg/info/kmod-ipt-extra.list
new file mode 100644
index 0000000..9deb702
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-extra.list
@@ -0,0 +1,6 @@
+/lib/modules/4.4.60/xt_owner.ko
+/etc/modules.d/ipt-extra
+/lib/modules/4.4.60/xt_pkttype.ko
+/lib/modules/4.4.60/xt_addrtype.ko
+/lib/modules/4.4.60/xt_physdev.ko
+/lib/modules/4.4.60/xt_quota.ko
diff --git a/usr/lib/opkg/info/kmod-ipt-filter.control b/usr/lib/opkg/info/kmod-ipt-filter.control
new file mode 100644
index 0000000..8117931
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-filter.control
@@ -0,0 +1,12 @@
+Package: kmod-ipt-filter
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-lib-textsearch, kmod-ipt-conntrack
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 1084
+Description:  Netfilter (IPv4) kernel modules for packet content inspection
+ Includes:
+ - string
diff --git a/usr/lib/opkg/info/kmod-ipt-filter.list b/usr/lib/opkg/info/kmod-ipt-filter.list
new file mode 100644
index 0000000..5a1906e
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-filter.list
@@ -0,0 +1,2 @@
+/lib/modules/4.4.60/xt_string.ko
+/etc/modules.d/ipt-filter
diff --git a/usr/lib/opkg/info/kmod-ipt-nat.control b/usr/lib/opkg/info/kmod-ipt-nat.control
new file mode 100644
index 0000000..0456159
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-nat.control
@@ -0,0 +1,12 @@
+Package: kmod-ipt-nat
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-nf-nat
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 4271
+Description:  Netfilter (IPv4) kernel modules for basic NAT targets
+ Includes:
+ - MASQUERADE
diff --git a/usr/lib/opkg/info/kmod-ipt-nat.list b/usr/lib/opkg/info/kmod-ipt-nat.list
new file mode 100644
index 0000000..f734d54
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ipt-nat.list
@@ -0,0 +1,7 @@
+/lib/modules/4.4.60/xt_REDIRECT.ko
+/etc/modules.d/ipt-nat
+/lib/modules/4.4.60/nf_nat_masquerade_ipv4.ko
+/lib/modules/4.4.60/iptable_nat.ko
+/lib/modules/4.4.60/xt_nat.ko
+/lib/modules/4.4.60/ipt_MASQUERADE.ko
+/lib/modules/4.4.60/nf_nat_redirect.ko
diff --git a/usr/lib/opkg/info/kmod-leds-gpio.control b/usr/lib/opkg/info/kmod-leds-gpio.control
new file mode 100644
index 0000000..ec28bd9
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-leds-gpio.control
@@ -0,0 +1,10 @@
+Package: kmod-leds-gpio
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 235
+Description:  Kernel module for LEDs on GPIO lines
diff --git a/usr/lib/opkg/info/kmod-leds-gpio.list b/usr/lib/opkg/info/kmod-leds-gpio.list
new file mode 100644
index 0000000..ba477e7
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-leds-gpio.list
@@ -0,0 +1,2 @@
+/etc/modules-boot.d/60-leds-gpio
+/etc/modules.d/60-leds-gpio
diff --git a/usr/lib/opkg/info/kmod-ledtrig-delos-wifi-leds.control b/usr/lib/opkg/info/kmod-ledtrig-delos-wifi-leds.control
new file mode 100644
index 0000000..2b4a73b
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ledtrig-delos-wifi-leds.control
@@ -0,0 +1,10 @@
+Package: kmod-ledtrig-delos-wifi-leds
+Version: 4.4.60+1-0
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: feeds/devolo/devolo/kernel/ledtrig-delos-wifi-leds
+License: devolo
+Section: kernel
+Maintainer: Thomas Jalowy <thomas.jalowy@devolo.de>
+Architecture: ar71xx
+Installed-Size: 3689
+Description:  Led trigger for delos wifi leds (WiFi AC, old devolo scheme)
diff --git a/usr/lib/opkg/info/kmod-ledtrig-delos-wifi-leds.list b/usr/lib/opkg/info/kmod-ledtrig-delos-wifi-leds.list
new file mode 100644
index 0000000..5faa8ff
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ledtrig-delos-wifi-leds.list
@@ -0,0 +1,2 @@
+/lib/modules/4.4.60/ledtrig-wifiled.ko
+/etc/modules.d/50-ledtrig-delos-wifi-leds
diff --git a/usr/lib/opkg/info/kmod-ledtrig-gpio.control b/usr/lib/opkg/info/kmod-ledtrig-gpio.control
new file mode 100644
index 0000000..bbd817d
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ledtrig-gpio.control
@@ -0,0 +1,10 @@
+Package: kmod-ledtrig-gpio
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 2273
+Description:  Kernel module that allows LEDs to be controlled by gpio events
diff --git a/usr/lib/opkg/info/kmod-ledtrig-gpio.list b/usr/lib/opkg/info/kmod-ledtrig-gpio.list
new file mode 100644
index 0000000..ab1ccee
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ledtrig-gpio.list
@@ -0,0 +1,2 @@
+/lib/modules/4.4.60/ledtrig-gpio.ko
+/etc/modules.d/50-ledtrig-gpio
diff --git a/usr/lib/opkg/info/kmod-lib-crc-ccitt.control b/usr/lib/opkg/info/kmod-lib-crc-ccitt.control
new file mode 100644
index 0000000..ef3cb8c
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-lib-crc-ccitt.control
@@ -0,0 +1,10 @@
+Package: kmod-lib-crc-ccitt
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 1341
+Description:  Kernel module for CRC-CCITT support
diff --git a/usr/lib/opkg/info/kmod-lib-crc-ccitt.list b/usr/lib/opkg/info/kmod-lib-crc-ccitt.list
new file mode 100644
index 0000000..9bf9679
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-lib-crc-ccitt.list
@@ -0,0 +1,2 @@
+/etc/modules.d/lib-crc-ccitt
+/lib/modules/4.4.60/crc-ccitt.ko
diff --git a/usr/lib/opkg/info/kmod-lib-textsearch.control b/usr/lib/opkg/info/kmod-lib-textsearch.control
new file mode 100644
index 0000000..4ef126e
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-lib-textsearch.control
@@ -0,0 +1,10 @@
+Package: kmod-lib-textsearch
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 3565
+Description:  Textsearch support
diff --git a/usr/lib/opkg/info/kmod-lib-textsearch.list b/usr/lib/opkg/info/kmod-lib-textsearch.list
new file mode 100644
index 0000000..48a940e
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-lib-textsearch.list
@@ -0,0 +1,4 @@
+/lib/modules/4.4.60/ts_kmp.ko
+/etc/modules.d/lib-textsearch
+/lib/modules/4.4.60/ts_bm.ko
+/lib/modules/4.4.60/ts_fsm.ko
diff --git a/usr/lib/opkg/info/kmod-llc.control b/usr/lib/opkg/info/kmod-llc.control
new file mode 100644
index 0000000..325defa
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-llc.control
@@ -0,0 +1,10 @@
+Package: kmod-llc
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 194
+Description:  Kernel module for ANSI/IEEE 802.2 LLC support.
diff --git a/usr/lib/opkg/info/kmod-llc.list b/usr/lib/opkg/info/kmod-llc.list
new file mode 100644
index 0000000..885f07f
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-llc.list
@@ -0,0 +1 @@
+/etc/modules.d/09-llc
diff --git a/usr/lib/opkg/info/kmod-nf-conntrack.control b/usr/lib/opkg/info/kmod-nf-conntrack.control
new file mode 100644
index 0000000..5f64d8b
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-conntrack.control
@@ -0,0 +1,10 @@
+Package: kmod-nf-conntrack
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 37969
+Description:  Netfilter connection tracking
diff --git a/usr/lib/opkg/info/kmod-nf-conntrack.list b/usr/lib/opkg/info/kmod-nf-conntrack.list
new file mode 100644
index 0000000..0bfc6be
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-conntrack.list
@@ -0,0 +1,5 @@
+/lib/modules/4.4.60/nf_defrag_ipv4.ko
+/lib/modules/4.4.60/nf_conntrack_rtcache.ko
+/etc/modules.d/nf-conntrack
+/lib/modules/4.4.60/nf_conntrack_ipv4.ko
+/lib/modules/4.4.60/nf_conntrack.ko
diff --git a/usr/lib/opkg/info/kmod-nf-conntrack6.control b/usr/lib/opkg/info/kmod-nf-conntrack6.control
new file mode 100644
index 0000000..608e8c6
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-conntrack6.control
@@ -0,0 +1,10 @@
+Package: kmod-nf-conntrack6
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipv6, kmod-nf-conntrack
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 9096
+Description:  Netfilter IPv6 connection tracking
diff --git a/usr/lib/opkg/info/kmod-nf-conntrack6.list b/usr/lib/opkg/info/kmod-nf-conntrack6.list
new file mode 100644
index 0000000..4bb8e7b
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-conntrack6.list
@@ -0,0 +1,3 @@
+/lib/modules/4.4.60/nf_defrag_ipv6.ko
+/etc/modules.d/nf-conntrack6
+/lib/modules/4.4.60/nf_conntrack_ipv6.ko
diff --git a/usr/lib/opkg/info/kmod-nf-ipt.control b/usr/lib/opkg/info/kmod-nf-ipt.control
new file mode 100644
index 0000000..acd0f37
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-ipt.control
@@ -0,0 +1,10 @@
+Package: kmod-nf-ipt
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 14742
+Description:  Iptables core
diff --git a/usr/lib/opkg/info/kmod-nf-ipt.list b/usr/lib/opkg/info/kmod-nf-ipt.list
new file mode 100644
index 0000000..2724c92
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-ipt.list
@@ -0,0 +1,3 @@
+/lib/modules/4.4.60/x_tables.ko
+/etc/modules.d/nf-ipt
+/lib/modules/4.4.60/ip_tables.ko
diff --git a/usr/lib/opkg/info/kmod-nf-ipt6.control b/usr/lib/opkg/info/kmod-nf-ipt6.control
new file mode 100644
index 0000000..6297bac
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-ipt6.control
@@ -0,0 +1,10 @@
+Package: kmod-nf-ipt6
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-ipt, kmod-nf-conntrack6
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 7549
+Description:  Ip6tables core
diff --git a/usr/lib/opkg/info/kmod-nf-ipt6.list b/usr/lib/opkg/info/kmod-nf-ipt6.list
new file mode 100644
index 0000000..6bd8b0d
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-ipt6.list
@@ -0,0 +1,2 @@
+/lib/modules/4.4.60/ip6_tables.ko
+/etc/modules.d/nf-ipt6
diff --git a/usr/lib/opkg/info/kmod-nf-nat.control b/usr/lib/opkg/info/kmod-nf-nat.control
new file mode 100644
index 0000000..698730e
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-nat.control
@@ -0,0 +1,10 @@
+Package: kmod-nf-nat
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-conntrack, kmod-nf-ipt
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 10068
+Description:  Netfilter NAT
diff --git a/usr/lib/opkg/info/kmod-nf-nat.list b/usr/lib/opkg/info/kmod-nf-nat.list
new file mode 100644
index 0000000..9e81358
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-nf-nat.list
@@ -0,0 +1,3 @@
+/lib/modules/4.4.60/nf_nat.ko
+/etc/modules.d/nf-nat
+/lib/modules/4.4.60/nf_nat_ipv4.ko
diff --git a/usr/lib/opkg/info/kmod-ppp.control b/usr/lib/opkg/info/kmod-ppp.control
new file mode 100644
index 0000000..bab1d24
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ppp.control
@@ -0,0 +1,10 @@
+Package: kmod-ppp
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-lib-crc-ccitt, kmod-slhc
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 22026
+Description:  Kernel modules for PPP support
diff --git a/usr/lib/opkg/info/kmod-ppp.list b/usr/lib/opkg/info/kmod-ppp.list
new file mode 100644
index 0000000..dda76b7
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-ppp.list
@@ -0,0 +1,3 @@
+/lib/modules/4.4.60/ppp_generic.ko
+/etc/modules.d/ppp
+/lib/modules/4.4.60/ppp_async.ko
diff --git a/usr/lib/opkg/info/kmod-qca-hyfi-bridge.control b/usr/lib/opkg/info/kmod-qca-hyfi-bridge.control
new file mode 100644
index 0000000..b7f1e33
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-hyfi-bridge.control
@@ -0,0 +1,9 @@
+Package: kmod-qca-hyfi-bridge
+Version: 4.4.60+g8c70f75-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-bridge
+Source: qca/feeds/hyfi/qca-hyfi-bridging/qca-hyfi-bridge
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 51080
+Description:  This package installs the Hy-Fi bridging Netfilter Module
diff --git a/usr/lib/opkg/info/kmod-qca-hyfi-bridge.list b/usr/lib/opkg/info/kmod-qca-hyfi-bridge.list
new file mode 100644
index 0000000..2aa3b0a
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-hyfi-bridge.list
@@ -0,0 +1,3 @@
+/etc/init.d/hyfi-bridging
+/etc/modules.d/51-qca-hyfi-bridge
+/lib/modules/4.4.60/hyfi-bridging.ko
diff --git a/usr/lib/opkg/info/kmod-qca-hyfi-iptv-helper.control b/usr/lib/opkg/info/kmod-qca-hyfi-iptv-helper.control
new file mode 100644
index 0000000..b43b122
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-hyfi-iptv-helper.control
@@ -0,0 +1,9 @@
+Package: kmod-qca-hyfi-iptv-helper
+Version: 4.4.60+g15a464b-dirty-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-bridge
+Source: qca/feeds/hyfi/qca-hyfi-bridging/qca-hyfi-iptv-helper
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 3905
+Description:  This package installs the QCA Hy-Fi Netfilter for IPTV implementations on Wireless interface
diff --git a/usr/lib/opkg/info/kmod-qca-hyfi-iptv-helper.list b/usr/lib/opkg/info/kmod-qca-hyfi-iptv-helper.list
new file mode 100644
index 0000000..c7b1939
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-hyfi-iptv-helper.list
@@ -0,0 +1 @@
+/lib/modules/4.4.60/hyfi-iptv-helper.ko
diff --git a/usr/lib/opkg/info/kmod-qca-hyfi-qdisc.control b/usr/lib/opkg/info/kmod-qca-hyfi-qdisc.control
new file mode 100644
index 0000000..a000b96
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-hyfi-qdisc.control
@@ -0,0 +1,9 @@
+Package: kmod-qca-hyfi-qdisc
+Version: 4.4.60+g846e528-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Source: qca/feeds/hyfi/qca-hyfi-bridging/qca-hyfi-qdisc
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 2911
+Description:  This package installs the QCA Hy-Fi QDISC for raising priority of IEEE 1905.1 and HomePlugAV MME packets
diff --git a/usr/lib/opkg/info/kmod-qca-hyfi-qdisc.list b/usr/lib/opkg/info/kmod-qca-hyfi-qdisc.list
new file mode 100644
index 0000000..67968c1
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-hyfi-qdisc.list
@@ -0,0 +1,2 @@
+/lib/modules/4.4.60/hyfi_qdisc.ko
+/etc/modules.d/40-qca-hyfi-qdisc
diff --git a/usr/lib/opkg/info/kmod-qca-ssdk-hnat.control b/usr/lib/opkg/info/kmod-qca-ssdk-hnat.control
new file mode 100644
index 0000000..f519071
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-ssdk-hnat.control
@@ -0,0 +1,9 @@
+Package: kmod-qca-ssdk-hnat
+Version: 4.4.60+g3a1f4ba-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-extra, kmod-ipt-filter, kmod-ipv6, kmod-ppp
+Provides: qca-ssdk
+Source: qca/feeds/ssdk/qca-ssdk
+Section: kernel
+Architecture: ar71xx
+Installed-Size: 872766
+Description:  Kernel driver for QCA SSDK (hnat)
diff --git a/usr/lib/opkg/info/kmod-qca-ssdk-hnat.list b/usr/lib/opkg/info/kmod-qca-ssdk-hnat.list
new file mode 100644
index 0000000..275e595
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-ssdk-hnat.list
@@ -0,0 +1,3 @@
+/etc/init.d/qca-ssdk
+/etc/modules.d/30-qca-ssdk-hnat
+/lib/modules/4.4.60/qca-ssdk.ko
diff --git a/usr/lib/opkg/info/kmod-qca-wifi-unified-perf.control b/usr/lib/opkg/info/kmod-qca-wifi-unified-perf.control
new file mode 100644
index 0000000..b7e4c0e
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-wifi-unified-perf.control
@@ -0,0 +1,10 @@
+Package: kmod-qca-wifi-unified-perf
+Version: 4.4.60+g15a464b-dirty-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), libgcc, libc, wireless-tools, librt, iproute2
+Provides: kmod-qca-wifi
+Source: qca/feeds/qca/net/qca-wifi
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 2446884
+Description:  QCA Wireless LAN Driver
diff --git a/usr/lib/opkg/info/kmod-qca-wifi-unified-perf.list b/usr/lib/opkg/info/kmod-qca-wifi-unified-perf.list
new file mode 100644
index 0000000..d9c8489
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-qca-wifi-unified-perf.list
@@ -0,0 +1,49 @@
+/usr/sbin/thermaltool
+/usr/sbin/exttool
+/usr/sbin/athadhoc
+/lib/modules/4.4.60/ath_rate_atheros.ko
+/lib/modules/4.4.60/ath_pktlog.ko
+/usr/sbin/pstats
+/etc/init.d/ssid_steering
+/usr/sbin/apstats
+/lib/modules/4.4.60/qdf.ko
+/usr/sbin/spectraltool
+/lib/modules/4.4.60/qca_ol.ko
+/lib/modules/4.4.60/ath_dfs.ko
+/etc/config/ssid-steering
+/lib/wifi/debug/counters_wlan_prompt_dakota.sh
+/usr/sbin/assocdenialnotify
+/usr/sbin/pktlogdump
+/usr/sbin/80211stats
+/lib/modules/4.4.60/ath_spectral.ko
+/lib/modules/4.4.60/smart_antenna.ko
+/lib/modules/4.4.60/ath_dev.ko
+/usr/sbin/radartool
+/lib/wifi/qcawifi_countrycode.txt
+/usr/sbin/wifitool
+/usr/lib/libtlvparser.so
+/usr/lib/libtlvencoder.so
+/usr/sbin/athtestcmd
+/usr/sbin/tx99tool
+/lib/modules/4.4.60/asf.ko
+/usr/sbin/athstats
+/usr/lib/libwlanstats.so
+/lib/modules/4.4.60/ath_hal.ko
+/usr/lib/libtlvtemplate.so
+/lib/wifi/debug/counters_wlan_prompt_akronite.sh
+/usr/lib/libtlvcmdrsp.so
+/lib/wifi/qca-wifi-modules
+/lib/sbin/wifi_try
+/usr/lib/libtlvutil.so
+/usr/sbin/wlanconfig
+/lib/modules/4.4.60/hst_tx99.ko
+/lib/modules/4.4.60/umac.ko
+/lib/modules/4.4.60/qca_da.ko
+/usr/sbin/athstatsclr
+/usr/sbin/ssidsteering
+/usr/sbin/wps_enhc
+/usr/sbin/pktlogconf
+/lib/modules/4.4.60/mem_manager.ko
+/lib/wifi/qcawifi.sh
+/usr/sbin/wifi_try
+/usr/sbin/athkey
diff --git a/usr/lib/opkg/info/kmod-slhc.control b/usr/lib/opkg/info/kmod-slhc.control
new file mode 100644
index 0000000..900dbdf
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-slhc.control
@@ -0,0 +1,10 @@
+Package: kmod-slhc
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-lib-crc-ccitt
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 3453
+Description:  Serial Line Header Compression
diff --git a/usr/lib/opkg/info/kmod-slhc.list b/usr/lib/opkg/info/kmod-slhc.list
new file mode 100644
index 0000000..5d231c9
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-slhc.list
@@ -0,0 +1 @@
+/lib/modules/4.4.60/slhc.ko
diff --git a/usr/lib/opkg/info/kmod-stp.control b/usr/lib/opkg/info/kmod-stp.control
new file mode 100644
index 0000000..1ccf89d
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-stp.control
@@ -0,0 +1,10 @@
+Package: kmod-stp
+Version: 4.4.60-1
+Depends: kernel (=4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-llc
+Source: package/kernel/linux
+License: GPLv2
+Section: kernel
+Status: unknown hold not-installed
+Architecture: ar71xx
+Installed-Size: 183
+Description:  Kernel module for Ethernet Spanning Tree Protocol support.
diff --git a/usr/lib/opkg/info/kmod-stp.list b/usr/lib/opkg/info/kmod-stp.list
new file mode 100644
index 0000000..679c716
--- /dev/null
+++ b/usr/lib/opkg/info/kmod-stp.list
@@ -0,0 +1 @@
+/etc/modules.d/10-stp
diff --git a/usr/lib/opkg/info/libavahi-nodbus-support.control b/usr/lib/opkg/info/libavahi-nodbus-support.control
new file mode 100644
index 0000000..bfee203
--- /dev/null
+++ b/usr/lib/opkg/info/libavahi-nodbus-support.control
@@ -0,0 +1,26 @@
+Package: libavahi-nodbus-support
+Version: 0.6.31-12
+Depends: libc, libpthread
+Provides: libavahi
+Source: qca/feeds/packages/libs/avahi
+Section: libs
+Maintainer: Ted Hess <thess@kitschensync.net>
+Architecture: ar71xx
+Installed-Size: 61599
+Description:  Avahi is an mDNS/DNS-SD (aka RendezVous/Bonjour/ZeroConf)
+ implementation (library). It facilitates
+ service discovery on a local network -- this means that
+ you can plug your laptop or computer into a network and
+ instantly be able to view other people who you can chat with,
+ find printers to print to or find files being shared.
+ This kind of technology is already found in MacOS X
+ (branded 'Rendezvous', 'Bonjour' and sometimes 'ZeroConf')
+ and is very convenient.
+ .
+ The libavahi package contains the mDNS/DNS-SD shared libraries,
+ used by other programs. Specifically, it provides
+ libavahi-core and libavahi-common libraries.
+ .
+ Selecting this package modifies the build configuration
+ so that avahi packages are built without support for D-BUS enabled;
+ it does not generate a separate binary of its own.
diff --git a/usr/lib/opkg/info/libavahi-nodbus-support.list b/usr/lib/opkg/info/libavahi-nodbus-support.list
new file mode 100644
index 0000000..37fe1af
--- /dev/null
+++ b/usr/lib/opkg/info/libavahi-nodbus-support.list
@@ -0,0 +1,4 @@
+/usr/lib/libavahi-common.so.3
+/usr/lib/libavahi-core.so.7.0.2
+/usr/lib/libavahi-common.so.3.5.3
+/usr/lib/libavahi-core.so.7
diff --git a/usr/lib/opkg/info/libblobmsg-json.control b/usr/lib/opkg/info/libblobmsg-json.control
new file mode 100644
index 0000000..19292e3
--- /dev/null
+++ b/usr/lib/opkg/info/libblobmsg-json.control
@@ -0,0 +1,10 @@
+Package: libblobmsg-json
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc, libjson-c, libubox
+Source: package/libs/libubox
+License: ISC
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 3454
+Description:  blobmsg <-> json conversion library
diff --git a/usr/lib/opkg/info/libblobmsg-json.list b/usr/lib/opkg/info/libblobmsg-json.list
new file mode 100644
index 0000000..7395c22
--- /dev/null
+++ b/usr/lib/opkg/info/libblobmsg-json.list
@@ -0,0 +1 @@
+/lib/libblobmsg_json.so
diff --git a/usr/lib/opkg/info/libc.control b/usr/lib/opkg/info/libc.control
new file mode 100644
index 0000000..9bcecdd
--- /dev/null
+++ b/usr/lib/opkg/info/libc.control
@@ -0,0 +1,13 @@
+Package: libc
+Version: 1.0.14-1
+Depends: libgcc
+Source: package/libs/toolchain
+License: GPL-3.0-with-GCC-exception
+LicenseFiles: COPYING3 COPYING3.LIB COPYING.RUNTIME
+Section: libs
+Status: unknown hold not-installed
+Essential: yes
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 240231
+Description:  C library
diff --git a/usr/lib/opkg/info/libc.list b/usr/lib/opkg/info/libc.list
new file mode 100644
index 0000000..10244c4
--- /dev/null
+++ b/usr/lib/opkg/info/libc.list
@@ -0,0 +1,13 @@
+/lib/libm-1.0.14.so
+/lib/libuClibc-1.0.14.so
+/lib/libcrypt-1.0.14.so
+/lib/libm.so.1
+/lib/libutil.so.1
+/lib/ld-uClibc.so.0
+/lib/ld-uClibc.so.1
+/lib/libdl.so.1
+/lib/libdl-1.0.14.so
+/lib/libutil-1.0.14.so
+/lib/libc.so.1
+/lib/libcrypt.so.1
+/lib/ld-uClibc-1.0.14.so
diff --git a/usr/lib/opkg/info/libcap.control b/usr/lib/opkg/info/libcap.control
new file mode 100644
index 0000000..62ae0fd
--- /dev/null
+++ b/usr/lib/opkg/info/libcap.control
@@ -0,0 +1,9 @@
+Package: libcap
+Version: 2.24-1
+Depends: libc
+Source: qca/feeds/packages/libs/libcap
+Section: libs
+Maintainer: Steven Barth <cyrus@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 5189
+Description:  Linux capabilities library
diff --git a/usr/lib/opkg/info/libcap.list b/usr/lib/opkg/info/libcap.list
new file mode 100644
index 0000000..6651c20
--- /dev/null
+++ b/usr/lib/opkg/info/libcap.list
@@ -0,0 +1,3 @@
+/usr/lib/libcap.so.2.24
+/usr/lib/libcap.so
+/usr/lib/libcap.so.2
diff --git a/usr/lib/opkg/info/libcharset.control b/usr/lib/opkg/info/libcharset.control
new file mode 100644
index 0000000..9e11353
--- /dev/null
+++ b/usr/lib/opkg/info/libcharset.control
@@ -0,0 +1,9 @@
+Package: libcharset
+Version: 1.11.1-1
+Depends: libc
+Source: package/libs/libiconv-full
+Section: libs
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 2927
+Description:  Character set conversion library
diff --git a/usr/lib/opkg/info/libcharset.list b/usr/lib/opkg/info/libcharset.list
new file mode 100644
index 0000000..55f69c8
--- /dev/null
+++ b/usr/lib/opkg/info/libcharset.list
@@ -0,0 +1,3 @@
+/usr/lib/libcharset.so.1
+/usr/lib/libcharset.so
+/usr/lib/libcharset.so.1.0.0
diff --git a/usr/lib/opkg/info/libcurl.control b/usr/lib/opkg/info/libcurl.control
new file mode 100644
index 0000000..a662456
--- /dev/null
+++ b/usr/lib/opkg/info/libcurl.control
@@ -0,0 +1,11 @@
+Package: libcurl
+Version: 7.57.0-1
+Depends: libc, libopenssl, libnghttp2
+Source: package/network/utils/curl
+License: MIT
+LicenseFiles: COPYING
+Section: libs
+Maintainer: Imre Kaloz <kaloz@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 129549
+Description:  A client-side URL transfer library
diff --git a/usr/lib/opkg/info/libcurl.list b/usr/lib/opkg/info/libcurl.list
new file mode 100644
index 0000000..1bd0be5
--- /dev/null
+++ b/usr/lib/opkg/info/libcurl.list
@@ -0,0 +1,2 @@
+/usr/lib/libcurl.so.4
+/usr/lib/libcurl.so.4.5.0
diff --git a/usr/lib/opkg/info/libdaemon.control b/usr/lib/opkg/info/libdaemon.control
new file mode 100644
index 0000000..5636466
--- /dev/null
+++ b/usr/lib/opkg/info/libdaemon.control
@@ -0,0 +1,18 @@
+Package: libdaemon
+Version: 0.14-5
+Depends: libc
+Source: qca/feeds/packages/libs/libdaemon
+Section: libs
+Maintainer: Ted Hess <thess@kitschensync.net>
+Architecture: ar71xx
+Installed-Size: 7803
+Description:  libdaemon is a lightweight C library that eases the writing of UNIX daemons.
+ It consists of the following parts:
+ - A wrapper around fork() which does the correct daemonization procedure of a process
+ - A wrapper around syslog() for simpler and compatible log output to Syslog or STDERR
+ - An API for writing PID files
+ - An API for serializing UNIX signals into a pipe for usage with select() or poll()
+ - An API for running subprocesses with STDOUT and STDERR redirected to syslog
+ 
+ APIs like these are used in most daemon software available. It is not that
+ simple to get it done right and code duplication is not a goal.
diff --git a/usr/lib/opkg/info/libdaemon.list b/usr/lib/opkg/info/libdaemon.list
new file mode 100644
index 0000000..051eff6
--- /dev/null
+++ b/usr/lib/opkg/info/libdaemon.list
@@ -0,0 +1,2 @@
+/usr/lib/libdaemon.so.0.5.0
+/usr/lib/libdaemon.so.0
diff --git a/usr/lib/opkg/info/libexpat.control b/usr/lib/opkg/info/libexpat.control
new file mode 100644
index 0000000..a820f8c
--- /dev/null
+++ b/usr/lib/opkg/info/libexpat.control
@@ -0,0 +1,11 @@
+Package: libexpat
+Version: 2.2.4-1
+Depends: libc
+Source: qca/feeds/packages/libs/expat
+License: MIT
+LicenseFiles: COPYING
+Section: libs
+Maintainer: Steven Barth <cyrus@openwrt.org>, Ted Hess <thess@kitschensync.net>
+Architecture: ar71xx
+Installed-Size: 49891
+Description:  A fast, non-validating, stream-oriented XML parsing library.
diff --git a/usr/lib/opkg/info/libexpat.list b/usr/lib/opkg/info/libexpat.list
new file mode 100644
index 0000000..45afad3
--- /dev/null
+++ b/usr/lib/opkg/info/libexpat.list
@@ -0,0 +1,2 @@
+/usr/lib/libexpat.so.1.6.6
+/usr/lib/libexpat.so.1
diff --git a/usr/lib/opkg/info/libfko.control b/usr/lib/opkg/info/libfko.control
new file mode 100644
index 0000000..888f74b
--- /dev/null
+++ b/usr/lib/opkg/info/libfko.control
@@ -0,0 +1,18 @@
+Package: libfko
+Version: 2.6.9-5
+Depends: libc
+Source: qca/feeds/packages/net/fwknop
+License: GPLv2
+Section: libs
+Maintainer: Jonathan Bennett <JBennett@incomsystems.biz>
+Architecture: ar71xx
+Installed-Size: 31102
+Description:  Fwknop implements an authorization scheme known as Single Packet Authorization
+ (SPA) for Linux systems running iptables.  This mechanism requires only a
+ single encrypted and non-replayed packet to communicate various pieces of
+ information including desired access through an iptables policy. The main
+ application of this program is to use iptables in a default-drop stance to
+ protect services such as SSH with an additional layer of security in order to
+ make the exploitation of vulnerabilities (both 0-day and unpatched code) much
+ more difficult.
+ This package contains the libfko shared library.
diff --git a/usr/lib/opkg/info/libfko.list b/usr/lib/opkg/info/libfko.list
new file mode 100644
index 0000000..648bf7e
--- /dev/null
+++ b/usr/lib/opkg/info/libfko.list
@@ -0,0 +1,2 @@
+/usr/lib/libfko.so.3
+/usr/lib/libfko.so.3.0.0
diff --git a/usr/lib/opkg/info/libgcc.control b/usr/lib/opkg/info/libgcc.control
new file mode 100644
index 0000000..13dbd7c
--- /dev/null
+++ b/usr/lib/opkg/info/libgcc.control
@@ -0,0 +1,12 @@
+Package: libgcc
+Version: 4.8-linaro-1
+Source: package/libs/toolchain
+License: GPL-3.0-with-GCC-exception
+LicenseFiles: COPYING3 COPYING3.LIB COPYING.RUNTIME
+Section: libs
+Status: unknown hold not-installed
+Essential: yes
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 31778
+Description:  GCC support library
diff --git a/usr/lib/opkg/info/libgcc.list b/usr/lib/opkg/info/libgcc.list
new file mode 100644
index 0000000..0a3534a
--- /dev/null
+++ b/usr/lib/opkg/info/libgcc.list
@@ -0,0 +1 @@
+/lib/libgcc_s.so.1
diff --git a/usr/lib/opkg/info/libhyficommon.control b/usr/lib/opkg/info/libhyficommon.control
new file mode 100644
index 0000000..9931c1c
--- /dev/null
+++ b/usr/lib/opkg/info/libhyficommon.control
@@ -0,0 +1,9 @@
+Package: libhyficommon
+Version: g15a464b-dirty-1
+Depends: libc
+Source: qca/feeds/qca-lib/libqcacommon
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 25549
+Description:  This Package contains the Hy-Fi Common Functionality Library
diff --git a/usr/lib/opkg/info/libhyficommon.list b/usr/lib/opkg/info/libhyficommon.list
new file mode 100644
index 0000000..d75ccaa
--- /dev/null
+++ b/usr/lib/opkg/info/libhyficommon.list
@@ -0,0 +1 @@
+/usr/lib/libhyficommon.so
diff --git a/usr/lib/opkg/info/libiconv-full.control b/usr/lib/opkg/info/libiconv-full.control
new file mode 100644
index 0000000..227fe92
--- /dev/null
+++ b/usr/lib/opkg/info/libiconv-full.control
@@ -0,0 +1,9 @@
+Package: libiconv-full
+Version: 1.11.1-1
+Depends: libc
+Source: package/libs/libiconv-full
+Section: libs
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 11889
+Description:  Character set conversion library
diff --git a/usr/lib/opkg/info/libiconv-full.list b/usr/lib/opkg/info/libiconv-full.list
new file mode 100644
index 0000000..d7a048a
--- /dev/null
+++ b/usr/lib/opkg/info/libiconv-full.list
@@ -0,0 +1,3 @@
+/usr/lib/libiconv.so.2.4.0
+/usr/lib/libiconv.so
+/usr/lib/libiconv.so.2
diff --git a/usr/lib/opkg/info/libieee1905.control b/usr/lib/opkg/info/libieee1905.control
new file mode 100644
index 0000000..1989cbe
--- /dev/null
+++ b/usr/lib/opkg/info/libieee1905.control
@@ -0,0 +1,9 @@
+Package: libieee1905
+Version: g15a464b-dirty-1
+Depends: libc, libhyficommon
+Source: qca/feeds/ieee1905-security/qca-ieee1905-security-config/libieee1905
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 6659
+Description:  This Package contains the IEEE1905.1 library
diff --git a/usr/lib/opkg/info/libieee1905.list b/usr/lib/opkg/info/libieee1905.list
new file mode 100644
index 0000000..d5f6150
--- /dev/null
+++ b/usr/lib/opkg/info/libieee1905.list
@@ -0,0 +1 @@
+/usr/lib/libieee1905.so
diff --git a/usr/lib/opkg/info/libip4tc.control b/usr/lib/opkg/info/libip4tc.control
new file mode 100644
index 0000000..9a03181
--- /dev/null
+++ b/usr/lib/opkg/info/libip4tc.control
@@ -0,0 +1,9 @@
+Package: libip4tc
+Version: 1.4.21-1
+Depends: libc, libxtables
+Source: package/network/utils/iptables
+License: GPL-2.0
+Section: libs
+Architecture: ar71xx
+Installed-Size: 16512
+Description:  IPv4 firewall - shared libiptc library
diff --git a/usr/lib/opkg/info/libip4tc.list b/usr/lib/opkg/info/libip4tc.list
new file mode 100644
index 0000000..4485a2f
--- /dev/null
+++ b/usr/lib/opkg/info/libip4tc.list
@@ -0,0 +1,4 @@
+/usr/lib/libip4tc.so.0
+/usr/lib/libip4tc.so.0.1.0
+/usr/lib/libiptext4.so
+/usr/lib/libip4tc.so
diff --git a/usr/lib/opkg/info/libip6tc.control b/usr/lib/opkg/info/libip6tc.control
new file mode 100644
index 0000000..ad53a90
--- /dev/null
+++ b/usr/lib/opkg/info/libip6tc.control
@@ -0,0 +1,9 @@
+Package: libip6tc
+Version: 1.4.21-1
+Depends: libc, libxtables
+Source: package/network/utils/iptables
+License: GPL-2.0
+Section: libs
+Architecture: ar71xx
+Installed-Size: 16270
+Description:  IPv6 firewall - shared libiptc library
diff --git a/usr/lib/opkg/info/libip6tc.list b/usr/lib/opkg/info/libip6tc.list
new file mode 100644
index 0000000..5c742fe
--- /dev/null
+++ b/usr/lib/opkg/info/libip6tc.list
@@ -0,0 +1,4 @@
+/usr/lib/libiptext6.so
+/usr/lib/libip6tc.so
+/usr/lib/libip6tc.so.0.1.0
+/usr/lib/libip6tc.so.0
diff --git a/usr/lib/opkg/info/libiwinfo.control b/usr/lib/opkg/info/libiwinfo.control
new file mode 100644
index 0000000..a4afbe1
--- /dev/null
+++ b/usr/lib/opkg/info/libiwinfo.control
@@ -0,0 +1,11 @@
+Package: libiwinfo
+Version: 2015-06-01-ade8b1b299cbd5748db1acf80dd3e9f567938371
+Depends: libc, libuci
+Source: package/network/utils/iwinfo
+License: GPL-2.0
+Section: libs
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 15895
+Description:  Wireless information library with consistent interface for proprietary Broadcom,
+ madwifi, nl80211 and wext driver interfaces.
diff --git a/usr/lib/opkg/info/libiwinfo.list b/usr/lib/opkg/info/libiwinfo.list
new file mode 100644
index 0000000..40f997e
--- /dev/null
+++ b/usr/lib/opkg/info/libiwinfo.list
@@ -0,0 +1,2 @@
+/usr/share/libiwinfo/hardware.txt
+/usr/lib/libiwinfo.so
diff --git a/usr/lib/opkg/info/libjson-c.control b/usr/lib/opkg/info/libjson-c.control
new file mode 100644
index 0000000..c3068c3
--- /dev/null
+++ b/usr/lib/opkg/info/libjson-c.control
@@ -0,0 +1,11 @@
+Package: libjson-c
+Version: 0.12-1
+Depends: libc
+Source: package/libs/libjson-c
+License: MIT
+LicenseFiles: COPYING
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 14210
+Description:  This package contains a library for javascript object notation backends.
diff --git a/usr/lib/opkg/info/libjson-c.list b/usr/lib/opkg/info/libjson-c.list
new file mode 100644
index 0000000..d036b42
--- /dev/null
+++ b/usr/lib/opkg/info/libjson-c.list
@@ -0,0 +1,2 @@
+/usr/lib/libjson-c.so.2
+/usr/lib/libjson-c.so.2.0.1
diff --git a/usr/lib/opkg/info/libjson-script.control b/usr/lib/opkg/info/libjson-script.control
new file mode 100644
index 0000000..77dd10d
--- /dev/null
+++ b/usr/lib/opkg/info/libjson-script.control
@@ -0,0 +1,10 @@
+Package: libjson-script
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc, libubox
+Source: package/libs/libubox
+License: ISC
+Section: utils
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 4649
+Description:  Minimalistic JSON based scripting engine
diff --git a/usr/lib/opkg/info/libjson-script.list b/usr/lib/opkg/info/libjson-script.list
new file mode 100644
index 0000000..8fcd609
--- /dev/null
+++ b/usr/lib/opkg/info/libjson-script.list
@@ -0,0 +1 @@
+/lib/libjson_script.so
diff --git a/usr/lib/opkg/info/libmesode.control b/usr/lib/opkg/info/libmesode.control
new file mode 100644
index 0000000..64bd165
--- /dev/null
+++ b/usr/lib/opkg/info/libmesode.control
@@ -0,0 +1,11 @@
+Package: libmesode
+Version: 0.9.1-1
+Depends: libc, libopenssl, libexpat
+Source: feeds/devolo/third-party/easycwmp-commercial/libmesode
+License: GPL-3.0
+LicenseFiles: COPYING
+Section: libs
+Maintainer: Chih-Wei Chen <changeway@gmail.com>
+Architecture: ar71xx
+Installed-Size: 36996
+Description:  A simple, lightweight C library for writing XMPP clients
diff --git a/usr/lib/opkg/info/libmesode.list b/usr/lib/opkg/info/libmesode.list
new file mode 100644
index 0000000..3468bc1
--- /dev/null
+++ b/usr/lib/opkg/info/libmesode.list
@@ -0,0 +1,2 @@
+/usr/lib/libmesode.so.0
+/usr/lib/libmesode.so.0.0.0
diff --git a/usr/lib/opkg/info/libmicrohttpd-no-ssl.control b/usr/lib/opkg/info/libmicrohttpd-no-ssl.control
new file mode 100644
index 0000000..3dfd806
--- /dev/null
+++ b/usr/lib/opkg/info/libmicrohttpd-no-ssl.control
@@ -0,0 +1,12 @@
+Package: libmicrohttpd-no-ssl
+Version: 0.9.59-1
+Depends: libc, libpthread
+Conflicts: libmicrohttpd
+Source: qca/feeds/packages/libs/libmicrohttpd
+License: LGPL-2.1
+LicenseFiles: COPYING
+Section: libs
+Maintainer: Alexander Couzens <lynxis@fe80.eu>
+Architecture: ar71xx
+Installed-Size: 37593
+Description:  
diff --git a/usr/lib/opkg/info/libmicrohttpd-no-ssl.list b/usr/lib/opkg/info/libmicrohttpd-no-ssl.list
new file mode 100644
index 0000000..ff85eb0
--- /dev/null
+++ b/usr/lib/opkg/info/libmicrohttpd-no-ssl.list
@@ -0,0 +1,3 @@
+/usr/lib/libmicrohttpd.so.12.46.0
+/usr/lib/libmicrohttpd.so
+/usr/lib/libmicrohttpd.so.12
diff --git a/usr/lib/opkg/info/libmicroxml.control b/usr/lib/opkg/info/libmicroxml.control
new file mode 100644
index 0000000..5c2cb92
--- /dev/null
+++ b/usr/lib/opkg/info/libmicroxml.control
@@ -0,0 +1,11 @@
+Package: libmicroxml
+Version: 2015-03-18-caa8d3e6887f5c70e54df555dd78e4e45cfa74cc
+Depends: libc
+Source: feeds/management/libmicroxml
+License: LGPL-2.0
+LicenseFiles: COPYING
+Section: libs
+Maintainer: Luka Perkov <luka@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 16477
+Description:  A micro sized XML library
diff --git a/usr/lib/opkg/info/libmicroxml.list b/usr/lib/opkg/info/libmicroxml.list
new file mode 100644
index 0000000..4ed61cf
--- /dev/null
+++ b/usr/lib/opkg/info/libmicroxml.list
@@ -0,0 +1,3 @@
+/usr/lib/libmicroxml.so.1.0
+/usr/lib/libmicroxml.so.1
+/usr/lib/libmicroxml.so
diff --git a/usr/lib/opkg/info/libnetsnmp.control b/usr/lib/opkg/info/libnetsnmp.control
new file mode 100644
index 0000000..73fd3a3
--- /dev/null
+++ b/usr/lib/opkg/info/libnetsnmp.control
@@ -0,0 +1,16 @@
+Package: libnetsnmp
+Version: 5.7.3-2
+Depends: libc, libopenssl
+Source: qca/feeds/packages/net/net-snmp
+License: MIT BSD-3-Clause-Clear
+Section: libs
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 355550
+Description:  Simple Network Management Protocol (SNMP) is a widely used protocol for
+ monitoring the health and welfare of network equipment (eg. routers),
+ computer equipment and even devices like UPSs. Net-SNMP is a suite of
+ applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both
+ IPv4 and IPv6.
+ .
+ This package contains shared libraries, needed by other programs.
diff --git a/usr/lib/opkg/info/libnetsnmp.list b/usr/lib/opkg/info/libnetsnmp.list
new file mode 100644
index 0000000..45b5bd6
--- /dev/null
+++ b/usr/lib/opkg/info/libnetsnmp.list
@@ -0,0 +1,8 @@
+/usr/lib/libnetsnmphelpers.so.30.0.3
+/usr/lib/libnetsnmpagent.so.30
+/usr/lib/libnetsnmp.so.30.0.3
+/usr/lib/libnetsnmp.so.30
+/usr/lib/libnetsnmpmibs.so.30
+/usr/lib/libnetsnmphelpers.so.30
+/usr/lib/libnetsnmpmibs.so.30.0.3
+/usr/lib/libnetsnmpagent.so.30.0.3
diff --git a/usr/lib/opkg/info/libnghttp2.control b/usr/lib/opkg/info/libnghttp2.control
new file mode 100644
index 0000000..561a494
--- /dev/null
+++ b/usr/lib/opkg/info/libnghttp2.control
@@ -0,0 +1,11 @@
+Package: libnghttp2
+Version: 1.29.0-1
+Depends: libc
+Source: package/libs/nghttp2
+License: MIT
+LicenseFiles: COPYING
+Section: libs
+Maintainer: Hans Dedecker <dedeckeh@gmail.com>
+Architecture: ar71xx
+Installed-Size: 168270
+Description:  C library implementing the framing layer of the HTTP/2 protocol. It can be used to build a HTTP/2-capable HTTP client or server
diff --git a/usr/lib/opkg/info/libnghttp2.list b/usr/lib/opkg/info/libnghttp2.list
new file mode 100644
index 0000000..ddd101a
--- /dev/null
+++ b/usr/lib/opkg/info/libnghttp2.list
@@ -0,0 +1,3 @@
+/usr/lib/libnghttp2.so.14.15.1
+/usr/lib/libnghttp2.so.14
+/usr/lib/libnghttp2.so
diff --git a/usr/lib/opkg/info/libnl-tiny.control b/usr/lib/opkg/info/libnl-tiny.control
new file mode 100644
index 0000000..4e0aa2c
--- /dev/null
+++ b/usr/lib/opkg/info/libnl-tiny.control
@@ -0,0 +1,10 @@
+Package: libnl-tiny
+Version: 0.1-4
+Depends: libc
+Source: package/libs/libnl-tiny
+License: LGPL-2.1
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 11962
+Description:  This package contains a stripped down version of libnl
diff --git a/usr/lib/opkg/info/libnl-tiny.list b/usr/lib/opkg/info/libnl-tiny.list
new file mode 100644
index 0000000..a3c7970
--- /dev/null
+++ b/usr/lib/opkg/info/libnl-tiny.list
@@ -0,0 +1 @@
+/usr/lib/libnl-tiny.so
diff --git a/usr/lib/opkg/info/libnl.control b/usr/lib/opkg/info/libnl.control
new file mode 100644
index 0000000..4a6a6f9
--- /dev/null
+++ b/usr/lib/opkg/info/libnl.control
@@ -0,0 +1,9 @@
+Package: libnl
+Version: 3.2.21-1
+Depends: libc, libpthread
+Source: package/libs/libnl
+License: LGPL-2.1
+Section: libs
+Architecture: ar71xx
+Installed-Size: 154756
+Description:  This package contains a library for applications dealing with netlink sockets
diff --git a/usr/lib/opkg/info/libnl.list b/usr/lib/opkg/info/libnl.list
new file mode 100644
index 0000000..2c02e06
--- /dev/null
+++ b/usr/lib/opkg/info/libnl.list
@@ -0,0 +1,8 @@
+/usr/lib/libnl-nf-3.so.200
+/usr/lib/libnl-nf-3.so.200.16.1
+/usr/lib/libnl-route-3.so.200
+/usr/lib/libnl-genl-3.so.200.16.1
+/usr/lib/libnl-genl-3.so.200
+/usr/lib/libnl-3.so.200
+/usr/lib/libnl-3.so.200.16.1
+/usr/lib/libnl-route-3.so.200.16.1
diff --git a/usr/lib/opkg/info/libopenssl.control b/usr/lib/opkg/info/libopenssl.control
new file mode 100644
index 0000000..deb1c93
--- /dev/null
+++ b/usr/lib/opkg/info/libopenssl.control
@@ -0,0 +1,14 @@
+Package: libopenssl
+Version: 1.0.2o-1
+Depends: libc, zlib
+Source: package/libs/openssl
+License: OpenSSL
+LicenseFiles: LICENSE
+Section: libs
+Architecture: ar71xx
+Installed-Size: 697930
+Description:  The OpenSSL Project is a collaborative effort to develop a robust,
+ commercial-grade, full-featured, and Open Source toolkit implementing the Secure
+ Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well
+ as a full-strength general purpose cryptography library.
+ This package contains the OpenSSL shared libraries, needed by other programs.
diff --git a/usr/lib/opkg/info/libopenssl.list b/usr/lib/opkg/info/libopenssl.list
new file mode 100644
index 0000000..3e65c2c
--- /dev/null
+++ b/usr/lib/opkg/info/libopenssl.list
@@ -0,0 +1,2 @@
+/usr/lib/libcrypto.so.1.0.0
+/usr/lib/libssl.so.1.0.0
diff --git a/usr/lib/opkg/info/libpcap.control b/usr/lib/opkg/info/libpcap.control
new file mode 100644
index 0000000..2110971
--- /dev/null
+++ b/usr/lib/opkg/info/libpcap.control
@@ -0,0 +1,11 @@
+Package: libpcap
+Version: 1.5.3-1
+Depends: libc
+Source: package/libs/libpcap
+License: BSD-3-Clause
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 82544
+Description:  This package contains a system-independent library for user-level network packet
+ capture.
diff --git a/usr/lib/opkg/info/libpcap.list b/usr/lib/opkg/info/libpcap.list
new file mode 100644
index 0000000..4d6ec7a
--- /dev/null
+++ b/usr/lib/opkg/info/libpcap.list
@@ -0,0 +1,3 @@
+/usr/lib/libpcap.so.1.3
+/usr/lib/libpcap.so
+/usr/lib/libpcap.so.1.3.0
diff --git a/usr/lib/opkg/info/libprotobuf.control b/usr/lib/opkg/info/libprotobuf.control
new file mode 100644
index 0000000..41b7ec1
--- /dev/null
+++ b/usr/lib/opkg/info/libprotobuf.control
@@ -0,0 +1,10 @@
+Package: libprotobuf
+Version: 3.4.1-1
+Depends: libc, zlib, libpthread, libstdcpp
+Source: qca/feeds/packages/libs/protobuf
+License: BSD-3-Clause
+LicenseFiles: LICENSE
+Section: libs
+Architecture: ar71xx
+Installed-Size: 684568
+Description:  libprotobuf
diff --git a/usr/lib/opkg/info/libprotobuf.list b/usr/lib/opkg/info/libprotobuf.list
new file mode 100644
index 0000000..51cef70
--- /dev/null
+++ b/usr/lib/opkg/info/libprotobuf.list
@@ -0,0 +1,3 @@
+/usr/lib/libprotobuf.so.14.0.0
+/usr/lib/libprotobuf.so
+/usr/lib/libprotobuf.so.14
diff --git a/usr/lib/opkg/info/libpthread.control b/usr/lib/opkg/info/libpthread.control
new file mode 100644
index 0000000..1661879
--- /dev/null
+++ b/usr/lib/opkg/info/libpthread.control
@@ -0,0 +1,13 @@
+Package: libpthread
+Version: 1.0.14-1
+Depends: libgcc
+Source: package/libs/toolchain
+License: GPL-3.0-with-GCC-exception
+LicenseFiles: COPYING3 COPYING3.LIB COPYING.RUNTIME
+Section: libs
+Status: unknown hold not-installed
+Essential: yes
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 29917
+Description:  POSIX thread library
diff --git a/usr/lib/opkg/info/libpthread.list b/usr/lib/opkg/info/libpthread.list
new file mode 100644
index 0000000..ee750a9
--- /dev/null
+++ b/usr/lib/opkg/info/libpthread.list
@@ -0,0 +1,2 @@
+/lib/libpthread-1.0.14.so
+/lib/libpthread.so.1
diff --git a/usr/lib/opkg/info/librpc.control b/usr/lib/opkg/info/librpc.control
new file mode 100644
index 0000000..796dc97
--- /dev/null
+++ b/usr/lib/opkg/info/librpc.control
@@ -0,0 +1,10 @@
+Package: librpc
+Version: 2015-11-04-a921e3ded051746f9f7cd5e5a312fb6771716aac
+Depends: libc
+Source: package/libs/librpc
+License: Custom LGPL-2.1
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 31805
+Description:  uClibc RPC library
diff --git a/usr/lib/opkg/info/librpc.list b/usr/lib/opkg/info/librpc.list
new file mode 100644
index 0000000..d32f02c
--- /dev/null
+++ b/usr/lib/opkg/info/librpc.list
@@ -0,0 +1 @@
+/lib/librpc.so
diff --git a/usr/lib/opkg/info/librt.control b/usr/lib/opkg/info/librt.control
new file mode 100644
index 0000000..99a0346
--- /dev/null
+++ b/usr/lib/opkg/info/librt.control
@@ -0,0 +1,13 @@
+Package: librt
+Version: 1.0.14-1
+Depends: libpthread
+Source: package/libs/toolchain
+License: GPL-3.0-with-GCC-exception
+LicenseFiles: COPYING3 COPYING3.LIB COPYING.RUNTIME
+Section: libs
+Status: unknown hold not-installed
+Essential: yes
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 6755
+Description:  POSIX.1b RealTime extension library
diff --git a/usr/lib/opkg/info/librt.list b/usr/lib/opkg/info/librt.list
new file mode 100644
index 0000000..ccc0f94
--- /dev/null
+++ b/usr/lib/opkg/info/librt.list
@@ -0,0 +1,2 @@
+/lib/librt-1.0.14.so
+/lib/librt.so.1
diff --git a/usr/lib/opkg/info/libstdcpp.control b/usr/lib/opkg/info/libstdcpp.control
new file mode 100644
index 0000000..643d85c
--- /dev/null
+++ b/usr/lib/opkg/info/libstdcpp.control
@@ -0,0 +1,12 @@
+Package: libstdcpp
+Version: 4.8-linaro-1
+Source: package/libs/toolchain
+License: GPL-3.0-with-GCC-exception
+LicenseFiles: COPYING3 COPYING3.LIB COPYING.RUNTIME
+Section: libs
+Status: unknown hold not-installed
+Essential: yes
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 256076
+Description:  GNU Standard C++ Library v3
diff --git a/usr/lib/opkg/info/libstdcpp.list b/usr/lib/opkg/info/libstdcpp.list
new file mode 100644
index 0000000..f95f33b
--- /dev/null
+++ b/usr/lib/opkg/info/libstdcpp.list
@@ -0,0 +1,3 @@
+/usr/lib/libstdc++.so.6
+/usr/lib/libstdc++.so.6.0.19-gdb.py
+/usr/lib/libstdc++.so.6.0.19
diff --git a/usr/lib/opkg/info/libstorage.control b/usr/lib/opkg/info/libstorage.control
new file mode 100644
index 0000000..3e3383c
--- /dev/null
+++ b/usr/lib/opkg/info/libstorage.control
@@ -0,0 +1,9 @@
+Package: libstorage
+Version: g15a464b-dirty-1
+Depends: libc, libhyficommon, libuci
+Source: qca/feeds/ieee1905-security/qca-ieee1905-security-config/libstorage
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 11569
+Description:  This Package installs the Storage Abstration Library
diff --git a/usr/lib/opkg/info/libstorage.list b/usr/lib/opkg/info/libstorage.list
new file mode 100644
index 0000000..c777bce
--- /dev/null
+++ b/usr/lib/opkg/info/libstorage.list
@@ -0,0 +1 @@
+/usr/lib/libstorage.so
diff --git a/usr/lib/opkg/info/libubox.control b/usr/lib/opkg/info/libubox.control
new file mode 100644
index 0000000..63d0e8d
--- /dev/null
+++ b/usr/lib/opkg/info/libubox.control
@@ -0,0 +1,10 @@
+Package: libubox
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc
+Source: package/libs/libubox
+License: ISC
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 17518
+Description:  Basic utility library
diff --git a/usr/lib/opkg/info/libubox.list b/usr/lib/opkg/info/libubox.list
new file mode 100644
index 0000000..faa5a91
--- /dev/null
+++ b/usr/lib/opkg/info/libubox.list
@@ -0,0 +1 @@
+/lib/libubox.so
diff --git a/usr/lib/opkg/info/libubus.control b/usr/lib/opkg/info/libubus.control
new file mode 100644
index 0000000..2caf400
--- /dev/null
+++ b/usr/lib/opkg/info/libubus.control
@@ -0,0 +1,10 @@
+Package: libubus
+Version: 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e
+Depends: libc, libubox
+Source: package/system/ubus
+License: LGPL-2.1
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 8207
+Description:  OpenWrt RPC client library
diff --git a/usr/lib/opkg/info/libubus.list b/usr/lib/opkg/info/libubus.list
new file mode 100644
index 0000000..0a23c94
--- /dev/null
+++ b/usr/lib/opkg/info/libubus.list
@@ -0,0 +1 @@
+/lib/libubus.so
diff --git a/usr/lib/opkg/info/libuci.control b/usr/lib/opkg/info/libuci.control
new file mode 100644
index 0000000..7c38c29
--- /dev/null
+++ b/usr/lib/opkg/info/libuci.control
@@ -0,0 +1,10 @@
+Package: libuci
+Version: 2015-08-27.1-1
+Depends: libc, libubox
+Source: package/system/uci
+License: LGPL-2.1
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 14602
+Description:  C library for the Unified Configuration Interface (UCI)
diff --git a/usr/lib/opkg/info/libuci.list b/usr/lib/opkg/info/libuci.list
new file mode 100644
index 0000000..5c6f8ef
--- /dev/null
+++ b/usr/lib/opkg/info/libuci.list
@@ -0,0 +1 @@
+/lib/libuci.so
diff --git a/usr/lib/opkg/info/libustream-openssl.control b/usr/lib/opkg/info/libustream-openssl.control
new file mode 100644
index 0000000..bacd2b2
--- /dev/null
+++ b/usr/lib/opkg/info/libustream-openssl.control
@@ -0,0 +1,10 @@
+Package: libustream-openssl
+Version: 2015-07-09-c2d73c22618e8ee444e8d346695eca908ecb72d3
+Depends: libc, libubox, libopenssl
+Source: package/libs/ustream-ssl
+License: ISC
+Section: libs
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 4399
+Description:  ustream SSL Library (openssl)
diff --git a/usr/lib/opkg/info/libustream-openssl.list b/usr/lib/opkg/info/libustream-openssl.list
new file mode 100644
index 0000000..b063ff1
--- /dev/null
+++ b/usr/lib/opkg/info/libustream-openssl.list
@@ -0,0 +1 @@
+/lib/libustream-ssl.so
diff --git a/usr/lib/opkg/info/libuuid.control b/usr/lib/opkg/info/libuuid.control
new file mode 100644
index 0000000..9596bbd
--- /dev/null
+++ b/usr/lib/opkg/info/libuuid.control
@@ -0,0 +1,13 @@
+Package: libuuid
+Version: 2.25.2-4
+Depends: libc
+Source: package/utils/util-linux
+License: GPL-2.0 LGPL-2.1 BSD-3-Clause
+LicenseFiles: COPYING getopt/COPYING libblkid/COPYING libmount/COPYING Documentation/licenses/COPYING.GPLv2 Documentation/licenses/COPYING.LGPLv2.1 libuuid/COPYING Documentation/licenses/COPYING.BSD-3
+Section: libs
+Architecture: ar71xx
+Installed-Size: 5441
+Description:  The UUID library is used to generate unique identifiers for objects
+ that may be accessible beyond the local system. This library
+ generates UUIDs compatible with those created by the Open Software
+ Foundation (OSF) Distributed Computing Environment (DCE) utility.
diff --git a/usr/lib/opkg/info/libuuid.list b/usr/lib/opkg/info/libuuid.list
new file mode 100644
index 0000000..5fbbc9e
--- /dev/null
+++ b/usr/lib/opkg/info/libuuid.list
@@ -0,0 +1,3 @@
+/usr/lib/libuuid.so.1
+/usr/lib/libuuid.so.1.3.0
+/usr/lib/libuuid.so
diff --git a/usr/lib/opkg/info/libwifisoncfg.control b/usr/lib/opkg/info/libwifisoncfg.control
new file mode 100644
index 0000000..11296fb
--- /dev/null
+++ b/usr/lib/opkg/info/libwifisoncfg.control
@@ -0,0 +1,9 @@
+Package: libwifisoncfg
+Version: g15a464b-dirty-1
+Depends: libc, qca-cfg80211, libhyficommon, libnl
+Source: qca/feeds/qca-lib/libwifisoncfg
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 11454
+Description:  This Package contains the WiFi-SON Configuration layer support
diff --git a/usr/lib/opkg/info/libwifisoncfg.list b/usr/lib/opkg/info/libwifisoncfg.list
new file mode 100644
index 0000000..6167fd1
--- /dev/null
+++ b/usr/lib/opkg/info/libwifisoncfg.list
@@ -0,0 +1 @@
+/usr/lib/libwifisoncfg.so
diff --git a/usr/lib/opkg/info/libwpa2.control b/usr/lib/opkg/info/libwpa2.control
new file mode 100644
index 0000000..389da97
--- /dev/null
+++ b/usr/lib/opkg/info/libwpa2.control
@@ -0,0 +1,9 @@
+Package: libwpa2
+Version: g15a464b-dirty-1
+Depends: libc
+Source: qca/feeds/ieee1905-security/qca-ieee1905-security-config/libwpa2
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 37432
+Description:  This Package contains the wpa2 library
diff --git a/usr/lib/opkg/info/libwpa2.list b/usr/lib/opkg/info/libwpa2.list
new file mode 100644
index 0000000..20b36a6
--- /dev/null
+++ b/usr/lib/opkg/info/libwpa2.list
@@ -0,0 +1 @@
+/usr/lib/libwpa2.so
diff --git a/usr/lib/opkg/info/libxtables.control b/usr/lib/opkg/info/libxtables.control
new file mode 100644
index 0000000..288083a
--- /dev/null
+++ b/usr/lib/opkg/info/libxtables.control
@@ -0,0 +1,9 @@
+Package: libxtables
+Version: 1.4.21-1
+Depends: libc
+Source: package/network/utils/iptables
+License: GPL-2.0
+Section: libs
+Architecture: ar71xx
+Installed-Size: 34558
+Description:  IPv4/IPv6 firewall - shared xtables library
diff --git a/usr/lib/opkg/info/libxtables.list b/usr/lib/opkg/info/libxtables.list
new file mode 100644
index 0000000..cd8153e
--- /dev/null
+++ b/usr/lib/opkg/info/libxtables.list
@@ -0,0 +1,4 @@
+/usr/lib/libiptext.so
+/usr/lib/libxtables.so.10.0.0
+/usr/lib/libxtables.so
+/usr/lib/libxtables.so.10
diff --git a/usr/lib/opkg/info/logd.control b/usr/lib/opkg/info/logd.control
new file mode 100644
index 0000000..d002ead
--- /dev/null
+++ b/usr/lib/opkg/info/logd.control
@@ -0,0 +1,10 @@
+Package: logd
+Version: 2015-11-22-c086167a0154745c677f8730a336ea9cf7d71031
+Depends: libc, libubox, libubus, libblobmsg-json
+Source: package/system/ubox
+License: GPL-2.0
+Section: base
+Maintainer: John Crispin <blogic@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 10077
+Description:  OpenWrt system log implementation
diff --git a/usr/lib/opkg/info/logd.list b/usr/lib/opkg/info/logd.list
new file mode 100644
index 0000000..9690316
--- /dev/null
+++ b/usr/lib/opkg/info/logd.list
@@ -0,0 +1,3 @@
+/sbin/logread
+/sbin/logd
+/etc/init.d/log
diff --git a/usr/lib/opkg/info/miniupnpd.conffiles b/usr/lib/opkg/info/miniupnpd.conffiles
new file mode 100644
index 0000000..989835f
--- /dev/null
+++ b/usr/lib/opkg/info/miniupnpd.conffiles
@@ -0,0 +1 @@
+/etc/config/upnpd
diff --git a/usr/lib/opkg/info/miniupnpd.control b/usr/lib/opkg/info/miniupnpd.control
new file mode 100644
index 0000000..1555e48
--- /dev/null
+++ b/usr/lib/opkg/info/miniupnpd.control
@@ -0,0 +1,10 @@
+Package: miniupnpd
+Version: 2.0.20170421-2
+Depends: libc, iptables, libip4tc, libip6tc, ip6tables, libuuid
+Source: qca/feeds/routing/miniupnpd
+License: BSD-3-Clause
+Section: net
+Maintainer: Markus Stenberg <fingon@iki.fi>
+Architecture: ar71xx
+Installed-Size: 62402
+Description:  Lightweight UPnP IGD, NAT-PMP & PCP daemon
diff --git a/usr/lib/opkg/info/miniupnpd.list b/usr/lib/opkg/info/miniupnpd.list
new file mode 100644
index 0000000..d500a9d
--- /dev/null
+++ b/usr/lib/opkg/info/miniupnpd.list
@@ -0,0 +1,7 @@
+/usr/sbin/miniupnpd
+/etc/config/upnpd
+/etc/hotplug.d/iface/01-minissdp
+/etc/hotplug.d/iface/50-miniupnpd
+/usr/share/miniupnpd/firewall.include
+/etc/uci-defaults/99-miniupnpd
+/etc/init.d/miniupnpd
diff --git a/usr/lib/opkg/info/mtd.control b/usr/lib/opkg/info/mtd.control
new file mode 100644
index 0000000..178c456
--- /dev/null
+++ b/usr/lib/opkg/info/mtd.control
@@ -0,0 +1,10 @@
+Package: mtd
+Version: 21
+Depends: libc, libubox
+Source: package/system/mtd
+License: GPL-2.0+
+Section: utils
+Architecture: ar71xx
+Installed-Size: 15315
+Description:  This package contains an utility useful to upgrade from other firmware or 
+ older OpenWrt releases.
diff --git a/usr/lib/opkg/info/mtd.list b/usr/lib/opkg/info/mtd.list
new file mode 100644
index 0000000..57acd57
--- /dev/null
+++ b/usr/lib/opkg/info/mtd.list
@@ -0,0 +1 @@
+/sbin/mtd
diff --git a/usr/lib/opkg/info/netifd.control b/usr/lib/opkg/info/netifd.control
new file mode 100644
index 0000000..b1adca0
--- /dev/null
+++ b/usr/lib/opkg/info/netifd.control
@@ -0,0 +1,10 @@
+Package: netifd
+Version: 2015-12-16-245527193e90906451be35c2b8e972b8712ea6ab
+Depends: libc, libuci, libnl-tiny, libubus, ubus, ubusd, jshn, libubox
+Source: package/network/config/netifd
+License: GPL-2.0
+Section: base
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 74012
+Description:  OpenWrt Network Interface Configuration Daemon
diff --git a/usr/lib/opkg/info/netifd.list b/usr/lib/opkg/info/netifd.list
new file mode 100644
index 0000000..43736f8
--- /dev/null
+++ b/usr/lib/opkg/info/netifd.list
@@ -0,0 +1,14 @@
+/lib/netifd/proto/dhcp.sh
+/etc/init.d/network
+/lib/netifd/netifd-proto.sh
+/etc/hotplug.d/iface/00-netstate
+/sbin/ifdown
+/lib/netifd/dhcp.script
+/usr/share/udhcpc/default.script
+/lib/network/config.sh
+/sbin/netifd
+/sbin/devstatus
+/lib/netifd/utils.sh
+/lib/netifd/netifd-wireless.sh
+/sbin/ifstatus
+/sbin/ifup
diff --git a/usr/lib/opkg/info/ntpd.control b/usr/lib/opkg/info/ntpd.control
new file mode 100644
index 0000000..b982adb
--- /dev/null
+++ b/usr/lib/opkg/info/ntpd.control
@@ -0,0 +1,16 @@
+Package: ntpd
+Version: 4.2.8p9-3
+Depends: libc, libopenssl, libpthread, libcap
+Source: qca/feeds/packages/net/ntpd
+License: Unique
+LicenseFiles: COPYRIGHT
+Section: net
+Require-User: ntp=123:ntp=123
+Maintainer: Peter Wagner <tripolar@gmx.at>
+Architecture: ar71xx
+Installed-Size: 290894
+Description:  The ISC ntp suite is a collection of tools used to synchronize the
+ system clock with remote NTP time servers and run/monitor local NTP
+ servers.
+ .
+ This package contains the ntpd server.
diff --git a/usr/lib/opkg/info/ntpd.list b/usr/lib/opkg/info/ntpd.list
new file mode 100644
index 0000000..436dfbe
--- /dev/null
+++ b/usr/lib/opkg/info/ntpd.list
@@ -0,0 +1,4 @@
+/usr/sbin/ntpq
+/etc/hotplug.d/iface/20-ntpd
+/usr/sbin/ntpd.hotplug-helper
+/sbin/ntpd
diff --git a/usr/lib/opkg/info/ntpd.postrm b/usr/lib/opkg/info/ntpd.postrm
new file mode 100755
index 0000000..d3f4a8a
--- /dev/null
+++ b/usr/lib/opkg/info/ntpd.postrm
@@ -0,0 +1,3 @@
+#!/bin/sh
+/bin/busybox ntpd -h 2>&1 | grep -q BusyBox && ln -sf ../../bin/busybox /usr/sbin/ntpd
+exit 0
diff --git a/usr/lib/opkg/info/odhcp6c.control b/usr/lib/opkg/info/odhcp6c.control
new file mode 100644
index 0000000..0d36850
--- /dev/null
+++ b/usr/lib/opkg/info/odhcp6c.control
@@ -0,0 +1,10 @@
+Package: odhcp6c
+Version: 2016-02-08-dc186d6d2b0dd4ad23ca5fc69c00e81f796ff6d9
+Depends: libc, kmod-ipv6
+Source: package/network/ipv6/odhcp6c
+License: GPL-2.0
+Section: net
+Maintainer: Steven Barth <steven@midlink.org>
+Architecture: ar71xx
+Installed-Size: 24559
+Description:  Embedded DHCPv6-client for OpenWrt
diff --git a/usr/lib/opkg/info/odhcp6c.list b/usr/lib/opkg/info/odhcp6c.list
new file mode 100644
index 0000000..966eaf9
--- /dev/null
+++ b/usr/lib/opkg/info/odhcp6c.list
@@ -0,0 +1,3 @@
+/lib/netifd/proto/dhcpv6.sh
+/lib/netifd/dhcpv6.script
+/usr/sbin/odhcp6c
diff --git a/usr/lib/opkg/info/open-plc-utils-chkpib.control b/usr/lib/opkg/info/open-plc-utils-chkpib.control
new file mode 100644
index 0000000..7bb71a0
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-chkpib.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-chkpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 7514
+Description:  Utility chkpib from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-chkpib.list b/usr/lib/opkg/info/open-plc-utils-chkpib.list
new file mode 100644
index 0000000..82e8fa3
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-chkpib.list
@@ -0,0 +1 @@
+/usr/bin/chkpib
diff --git a/usr/lib/opkg/info/open-plc-utils-getpib.control b/usr/lib/opkg/info/open-plc-utils-getpib.control
new file mode 100644
index 0000000..4da8f74
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-getpib.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-getpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 5907
+Description:  Utility getpib from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-getpib.list b/usr/lib/opkg/info/open-plc-utils-getpib.list
new file mode 100644
index 0000000..cc88f68
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-getpib.list
@@ -0,0 +1 @@
+/usr/bin/getpib
diff --git a/usr/lib/opkg/info/open-plc-utils-hpavkey.control b/usr/lib/opkg/info/open-plc-utils-hpavkey.control
new file mode 100644
index 0000000..ace46cc
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-hpavkey.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-hpavkey
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 4990
+Description:  Utility hpavkey from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-hpavkey.list b/usr/lib/opkg/info/open-plc-utils-hpavkey.list
new file mode 100644
index 0000000..abd0147
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-hpavkey.list
@@ -0,0 +1 @@
+/usr/bin/hpavkey
diff --git a/usr/lib/opkg/info/open-plc-utils-modpib.control b/usr/lib/opkg/info/open-plc-utils-modpib.control
new file mode 100644
index 0000000..8b23926
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-modpib.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-modpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 8155
+Description:  Utility modpib from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-modpib.list b/usr/lib/opkg/info/open-plc-utils-modpib.list
new file mode 100644
index 0000000..6d22864
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-modpib.list
@@ -0,0 +1 @@
+/usr/bin/modpib
diff --git a/usr/lib/opkg/info/open-plc-utils-plcID.control b/usr/lib/opkg/info/open-plc-utils-plcID.control
new file mode 100644
index 0000000..27fb95c
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcID.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-plcID
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 11637
+Description:  Utility plcID from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-plcID.list b/usr/lib/opkg/info/open-plc-utils-plcID.list
new file mode 100644
index 0000000..422cb2a
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcID.list
@@ -0,0 +1 @@
+/usr/bin/plcID
diff --git a/usr/lib/opkg/info/open-plc-utils-plcgpio.control b/usr/lib/opkg/info/open-plc-utils-plcgpio.control
new file mode 100644
index 0000000..fb865dd
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcgpio.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-plcgpio
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 10096
+Description:  Utility plcgpio from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-plcgpio.list b/usr/lib/opkg/info/open-plc-utils-plcgpio.list
new file mode 100644
index 0000000..dc9d73e
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcgpio.list
@@ -0,0 +1 @@
+/usr/bin/plcgpio
diff --git a/usr/lib/opkg/info/open-plc-utils-plchost.control b/usr/lib/opkg/info/open-plc-utils-plchost.control
new file mode 100644
index 0000000..dd1e642
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plchost.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-plchost
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 16527
+Description:  Utility plchost from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-plchost.list b/usr/lib/opkg/info/open-plc-utils-plchost.list
new file mode 100644
index 0000000..721228c
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plchost.list
@@ -0,0 +1 @@
+/usr/bin/plchost
diff --git a/usr/lib/opkg/info/open-plc-utils-plcstat.control b/usr/lib/opkg/info/open-plc-utils-plcstat.control
new file mode 100644
index 0000000..32a1454
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcstat.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-plcstat
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 13153
+Description:  Utility plcstat from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-plcstat.list b/usr/lib/opkg/info/open-plc-utils-plcstat.list
new file mode 100644
index 0000000..ab30297
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcstat.list
@@ -0,0 +1 @@
+/usr/bin/plcstat
diff --git a/usr/lib/opkg/info/open-plc-utils-plctool.control b/usr/lib/opkg/info/open-plc-utils-plctool.control
new file mode 100644
index 0000000..0343f1d
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plctool.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-plctool
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 20713
+Description:  Utility plctool from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-plctool.list b/usr/lib/opkg/info/open-plc-utils-plctool.list
new file mode 100644
index 0000000..5557c59
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plctool.list
@@ -0,0 +1 @@
+/usr/bin/plctool
diff --git a/usr/lib/opkg/info/open-plc-utils-plcwait.control b/usr/lib/opkg/info/open-plc-utils-plcwait.control
new file mode 100644
index 0000000..e040e3f
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcwait.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-plcwait
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 10463
+Description:  Utility plcwait from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-plcwait.list b/usr/lib/opkg/info/open-plc-utils-plcwait.list
new file mode 100644
index 0000000..106cb7d
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-plcwait.list
@@ -0,0 +1 @@
+/usr/bin/plcwait
diff --git a/usr/lib/opkg/info/open-plc-utils-setpib.control b/usr/lib/opkg/info/open-plc-utils-setpib.control
new file mode 100644
index 0000000..a37fbd7
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-setpib.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils-setpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 6470
+Description:  Utility setpib from the Open PLC utilities package.
diff --git a/usr/lib/opkg/info/open-plc-utils-setpib.list b/usr/lib/opkg/info/open-plc-utils-setpib.list
new file mode 100644
index 0000000..6f1ec69
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils-setpib.list
@@ -0,0 +1 @@
+/usr/bin/setpib
diff --git a/usr/lib/opkg/info/open-plc-utils.control b/usr/lib/opkg/info/open-plc-utils.control
new file mode 100644
index 0000000..eab09c4
--- /dev/null
+++ b/usr/lib/opkg/info/open-plc-utils.control
@@ -0,0 +1,11 @@
+Package: open-plc-utils
+Version: 2017-01-16
+Depends: libc
+Source: qca/feeds/packages/utils/open-plc-utils
+License: ISC
+LicenseFiles: LICENSE
+Section: utils
+Maintainer: Florian Fainelli <florian@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 105
+Description:  Qualcomm Atheros Power Line Communication utilities
diff --git a/usr/lib/opkg/info/open-plc-utils.list b/usr/lib/opkg/info/open-plc-utils.list
new file mode 100644
index 0000000..e69de29
diff --git a/usr/lib/opkg/info/openssl-util.conffiles b/usr/lib/opkg/info/openssl-util.conffiles
new file mode 100644
index 0000000..6d068e6
--- /dev/null
+++ b/usr/lib/opkg/info/openssl-util.conffiles
@@ -0,0 +1 @@
+/etc/ssl/openssl.cnf
diff --git a/usr/lib/opkg/info/openssl-util.control b/usr/lib/opkg/info/openssl-util.control
new file mode 100644
index 0000000..829a678
--- /dev/null
+++ b/usr/lib/opkg/info/openssl-util.control
@@ -0,0 +1,14 @@
+Package: openssl-util
+Version: 1.0.2o-1
+Depends: libc, libopenssl
+Source: package/libs/openssl
+License: OpenSSL
+LicenseFiles: LICENSE
+Section: utils
+Architecture: ar71xx
+Installed-Size: 202552
+Description:  The OpenSSL Project is a collaborative effort to develop a robust,
+ commercial-grade, full-featured, and Open Source toolkit implementing the Secure
+ Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well
+ as a full-strength general purpose cryptography library.
+ This package contains the OpenSSL command-line utility.
diff --git a/usr/lib/opkg/info/openssl-util.list b/usr/lib/opkg/info/openssl-util.list
new file mode 100644
index 0000000..9c8d19e
--- /dev/null
+++ b/usr/lib/opkg/info/openssl-util.list
@@ -0,0 +1,3 @@
+/usr/bin/openssl
+/etc/ssl/openssl.cnf
+/usr/bin/c_rehash
diff --git a/usr/lib/opkg/info/opkg.conffiles b/usr/lib/opkg/info/opkg.conffiles
new file mode 100644
index 0000000..912b461
--- /dev/null
+++ b/usr/lib/opkg/info/opkg.conffiles
@@ -0,0 +1,2 @@
+/etc/opkg.conf
+/etc/opkg/customfeeds.conf
diff --git a/usr/lib/opkg/info/opkg.control b/usr/lib/opkg/info/opkg.control
new file mode 100644
index 0000000..ba2ad95
--- /dev/null
+++ b/usr/lib/opkg/info/opkg.control
@@ -0,0 +1,17 @@
+Package: opkg
+Version: 9c97d5ecd795709c8584e972bfdf3aee3a5b846d-9
+Depends: libc
+Source: package/system/opkg
+License: GPL-2.0
+LicenseFiles: COPYING
+Section: base
+Maintainer: Jo-Philipp Wich <xm@subsignal.org>
+Architecture: ar71xx
+Installed-Size: 71995
+Description:  Lightweight package management system
+ opkg is the opkg Package Management System, for handling
+ installation and removal of packages on a system. It can
+ recursively follow dependencies and download all packages
+ necessary to install a particular package.
+ 
+ opkg knows how to install both .ipk and .deb packages.
diff --git a/usr/lib/opkg/info/opkg.list b/usr/lib/opkg/info/opkg.list
new file mode 100644
index 0000000..87a3c6d
--- /dev/null
+++ b/usr/lib/opkg/info/opkg.list
@@ -0,0 +1,7 @@
+/etc/opkg/customfeeds.conf
+/lib/upgrade/keep.d/opkg
+/bin/opkg
+/etc/uci-defaults/20_migrate-feeds
+/usr/sbin/opkg-key
+/etc/opkg.conf
+/etc/opkg/distfeeds.conf
diff --git a/usr/lib/opkg/info/procd-nand.control b/usr/lib/opkg/info/procd-nand.control
new file mode 100644
index 0000000..674e241
--- /dev/null
+++ b/usr/lib/opkg/info/procd-nand.control
@@ -0,0 +1,10 @@
+Package: procd-nand
+Version: 2015-10-29.1-d5fddd91b966424bb63e943e789704d52382cc18
+Depends: libc, ubi-utils
+Source: package/system/procd
+License: GPL-2.0
+Section: utils
+Maintainer: John Crispin <blogic@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 40215
+Description:  OpenWrt sysupgrade nand helper
diff --git a/usr/lib/opkg/info/procd-nand.list b/usr/lib/opkg/info/procd-nand.list
new file mode 100644
index 0000000..ce1d43e
--- /dev/null
+++ b/usr/lib/opkg/info/procd-nand.list
@@ -0,0 +1,2 @@
+/lib/upgrade/nand.sh
+/sbin/upgraded
diff --git a/usr/lib/opkg/info/procd.control b/usr/lib/opkg/info/procd.control
new file mode 100644
index 0000000..e286cca
--- /dev/null
+++ b/usr/lib/opkg/info/procd.control
@@ -0,0 +1,10 @@
+Package: procd
+Version: 2015-10-29.1-d5fddd91b966424bb63e943e789704d52382cc18
+Depends: libc, ubusd, ubus, libjson-script, ubox, libubox, libubus, procd-nand
+Source: package/system/procd
+License: GPL-2.0
+Section: base
+Maintainer: John Crispin <blogic@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 40283
+Description:  OpenWrt system process manager
diff --git a/usr/lib/opkg/info/procd.list b/usr/lib/opkg/info/procd.list
new file mode 100644
index 0000000..520ef75
--- /dev/null
+++ b/usr/lib/opkg/info/procd.list
@@ -0,0 +1,9 @@
+/sbin/askfirst
+/etc/hotplug.json
+/sbin/procd
+/lib/libsetlbf.so
+/lib/functions/procd.sh
+/sbin/udevtrigger
+/sbin/reload_config
+/etc/hotplug-preinit.json
+/sbin/init
diff --git a/usr/lib/opkg/info/qca-acd.control b/usr/lib/opkg/info/qca-acd.control
new file mode 100644
index 0000000..f426a19
--- /dev/null
+++ b/usr/lib/opkg/info/qca-acd.control
@@ -0,0 +1,9 @@
+Package: qca-acd
+Version: master.131
+Depends: libc, qca-ieee1905-init, kmod-qca-hyfi-bridge, qca-hyctl
+Source: qca/feeds/hyfi/qca-hyfi-networking/qca-acd
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 4854
+Description:  This package installs the Hy-Fi Auto-configuration scripts
diff --git a/usr/lib/opkg/info/qca-acd.list b/usr/lib/opkg/info/qca-acd.list
new file mode 100644
index 0000000..fb769c8
--- /dev/null
+++ b/usr/lib/opkg/info/qca-acd.list
@@ -0,0 +1,3 @@
+/etc/config/acd
+/usr/sbin/acd-run.sh
+/etc/init.d/acd
diff --git a/usr/lib/opkg/info/qca-acfg.control b/usr/lib/opkg/info/qca-acfg.control
new file mode 100644
index 0000000..383c5e2
--- /dev/null
+++ b/usr/lib/opkg/info/qca-acfg.control
@@ -0,0 +1,11 @@
+Package: qca-acfg
+Version: g15a464b-dirty-1
+Depends: libc, kmod-qca-wifi
+Source: qca/feeds/qca/net/qca-acfg
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 52023
+Description:  QCA configuration utility provides a set of library
+ API's through which user applications can configure
+ and register events for wifi driver and hostap
diff --git a/usr/lib/opkg/info/qca-acfg.list b/usr/lib/opkg/info/qca-acfg.list
new file mode 100644
index 0000000..f508ab8
--- /dev/null
+++ b/usr/lib/opkg/info/qca-acfg.list
@@ -0,0 +1,2 @@
+/etc/acfg_common.conf
+/usr/sbin/acfg_tool
diff --git a/usr/lib/opkg/info/qca-hostap.control b/usr/lib/opkg/info/qca-hostap.control
new file mode 100644
index 0000000..2f2988c
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hostap.control
@@ -0,0 +1,9 @@
+Package: qca-hostap
+Version: g15a464b-dirty-1
+Depends: libc, libnl, libopenssl, libubox, libubus
+Source: qca/feeds/qca/net/qca-hostap
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 448810
+Description:  This package contains the IEEE 802.1x/WPA/EAP/RADIUS Authenticator.
diff --git a/usr/lib/opkg/info/qca-hostap.list b/usr/lib/opkg/info/qca-hostap.list
new file mode 100644
index 0000000..3b61905
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hostap.list
@@ -0,0 +1,3 @@
+/etc/init.d/qca-hostapd
+/usr/sbin/hostapd
+/lib/wifi/hostapd.sh
diff --git a/usr/lib/opkg/info/qca-hostapd-cli.control b/usr/lib/opkg/info/qca-hostapd-cli.control
new file mode 100644
index 0000000..930c8d9
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hostapd-cli.control
@@ -0,0 +1,10 @@
+Package: qca-hostapd-cli
+Version: g15a464b-dirty-1
+Depends: libc, librt, libnl, libopenssl, libubox, libubus
+Source: qca/feeds/qca/net/qca-hostap
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 23186
+Description:  This package contains a command line utility to control the
+ IEEE 802.1x/WPA/EAP/RADIUS Authenticator.
diff --git a/usr/lib/opkg/info/qca-hostapd-cli.list b/usr/lib/opkg/info/qca-hostapd-cli.list
new file mode 100644
index 0000000..1a0a34b
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hostapd-cli.list
@@ -0,0 +1,6 @@
+/etc/hotplug.d/button/51-wps-reset
+/usr/sbin/hostapd_cli
+/lib/wifi/wps-hostapd-nbh-update
+/lib/wifi/dpp-hostapd-update-uci
+/etc/hotplug.d/button/54-wps-extender
+/lib/wifi/wps-hostapd-update-uci
diff --git a/usr/lib/opkg/info/qca-hyctl.control b/usr/lib/opkg/info/qca-hyctl.control
new file mode 100644
index 0000000..fffe764
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hyctl.control
@@ -0,0 +1,9 @@
+Package: qca-hyctl
+Version: g15a464b-dirty-1
+Depends: libc, kmod-qca-hyfi-bridge, qca-libhyfi-bridge
+Source: qca/feeds/hyfi/qca-hyfi-bridging/qca-hyctl
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 9760
+Description:  This package installs the Hy-Fi control command line utility
diff --git a/usr/lib/opkg/info/qca-hyctl.list b/usr/lib/opkg/info/qca-hyctl.list
new file mode 100644
index 0000000..60f7b2d
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hyctl.list
@@ -0,0 +1 @@
+/usr/sbin/hyctl
diff --git a/usr/lib/opkg/info/qca-hyd.control b/usr/lib/opkg/info/qca-hyd.control
new file mode 100644
index 0000000..7b1f22a
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hyd.control
@@ -0,0 +1,9 @@
+Package: qca-hyd
+Version: g66bfb41-1
+Depends: libc, qca-ieee1905-init, kmod-qca-hyfi-bridge, qca-libhyfi-bridge, libieee1905, qca-hyctl, libhyficommon, qca-wifison-ext-lib, libwifisoncfg, libpthread, qca-whc-lbd, jansson
+Source: qca/feeds/hyfi/qca-hyfi-networking/qca-hyd
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 303114
+Description:  This package installs the Hy-Fi Path-Selection daemon
diff --git a/usr/lib/opkg/info/qca-hyd.list b/usr/lib/opkg/info/qca-hyd.list
new file mode 100644
index 0000000..3e1e0b5
--- /dev/null
+++ b/usr/lib/opkg/info/qca-hyd.list
@@ -0,0 +1,10 @@
+/usr/lib/libpsService.so
+/usr/lib/libmcfwdtblwlan2g.so
+/usr/lib/libmcfwdtbleswitch.so
+/usr/lib/libpluginManager.so
+/usr/sbin/hyd
+/usr/sbin/hyt
+/etc/config/hyd
+/usr/lib/libmcfwdtblwlan5g.so
+/etc/init.d/hyd
+/etc/hotplug.d/net/30-hyd
diff --git a/usr/lib/opkg/info/qca-ieee1905-init.control b/usr/lib/opkg/info/qca-ieee1905-init.control
new file mode 100644
index 0000000..df787c6
--- /dev/null
+++ b/usr/lib/opkg/info/qca-ieee1905-init.control
@@ -0,0 +1,9 @@
+Package: qca-ieee1905-init
+Version: 1
+Depends: libc
+Source: qca/feeds/ieee1905-security/qca-ieee1905-security-config/qca-ieee1905-init
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 4271
+Description:  This Package contains the script helper files for the IEEE1905.1 init scripts
diff --git a/usr/lib/opkg/info/qca-ieee1905-init.list b/usr/lib/opkg/info/qca-ieee1905-init.list
new file mode 100644
index 0000000..30f8d1a
--- /dev/null
+++ b/usr/lib/opkg/info/qca-ieee1905-init.list
@@ -0,0 +1,3 @@
+/lib/functions/hyfi-debug.sh
+/lib/functions/hyfi-network.sh
+/lib/functions/hyfi-iface.sh
diff --git a/usr/lib/opkg/info/qca-iface-mgr-10.4.control b/usr/lib/opkg/info/qca-iface-mgr-10.4.control
new file mode 100644
index 0000000..89d581c
--- /dev/null
+++ b/usr/lib/opkg/info/qca-iface-mgr-10.4.control
@@ -0,0 +1,9 @@
+Package: qca-iface-mgr-10.4
+Version: g15a464b-dirty-1
+Depends: libc, libpthread
+Source: qca/feeds/qca/net/qca-iface-mgr-10.4
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 24767
+Description:  User Space application to manage interfaces
diff --git a/usr/lib/opkg/info/qca-iface-mgr-10.4.list b/usr/lib/opkg/info/qca-iface-mgr-10.4.list
new file mode 100644
index 0000000..eecf7df
--- /dev/null
+++ b/usr/lib/opkg/info/qca-iface-mgr-10.4.list
@@ -0,0 +1,2 @@
+/lib/wifi/iface_mgr.sh
+/usr/sbin/iface-mgr
diff --git a/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac-slow.control b/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac-slow.control
new file mode 100644
index 0000000..b8de1c8
--- /dev/null
+++ b/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac-slow.control
@@ -0,0 +1,8 @@
+Package: qca-legacy-uboot-dlan-pro-1200-ac-slow
+Version: gdac3737-1
+Depends: libc
+Source: package/boot/qca-legacy-uboot
+Section: boot
+Architecture: ar71xx
+Installed-Size: 106
+Description:  U-boot for dlan-pro-1200-ac-slow
diff --git a/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac-slow.list b/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac-slow.list
new file mode 100644
index 0000000..e69de29
diff --git a/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac.control b/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac.control
new file mode 100644
index 0000000..1134bca
--- /dev/null
+++ b/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac.control
@@ -0,0 +1,8 @@
+Package: qca-legacy-uboot-dlan-pro-1200-ac
+Version: gdac3737-1
+Depends: libc
+Source: package/boot/qca-legacy-uboot
+Section: boot
+Architecture: ar71xx
+Installed-Size: 105
+Description:  U-boot for dlan-pro-1200-ac
diff --git a/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac.list b/usr/lib/opkg/info/qca-legacy-uboot-dlan-pro-1200-ac.list
new file mode 100644
index 0000000..e69de29
diff --git a/usr/lib/opkg/info/qca-libhyfi-bridge.control b/usr/lib/opkg/info/qca-libhyfi-bridge.control
new file mode 100644
index 0000000..ad2e748
--- /dev/null
+++ b/usr/lib/opkg/info/qca-libhyfi-bridge.control
@@ -0,0 +1,9 @@
+Package: qca-libhyfi-bridge
+Version: g15a464b-dirty-1
+Depends: libc, kmod-qca-hyfi-bridge
+Source: qca/feeds/hyfi/qca-hyfi-bridging/qca-libhyfi-bridge
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 4610
+Description:  This package installs the Hy-Fi Bridging API Library
diff --git a/usr/lib/opkg/info/qca-libhyfi-bridge.list b/usr/lib/opkg/info/qca-libhyfi-bridge.list
new file mode 100644
index 0000000..5ade24f
--- /dev/null
+++ b/usr/lib/opkg/info/qca-libhyfi-bridge.list
@@ -0,0 +1 @@
+/usr/lib/libhyfi-bridge.so
diff --git a/usr/lib/opkg/info/qca-whc-init.control b/usr/lib/opkg/info/qca-whc-init.control
new file mode 100644
index 0000000..05c32cd
--- /dev/null
+++ b/usr/lib/opkg/info/qca-whc-init.control
@@ -0,0 +1,9 @@
+Package: qca-whc-init
+Version: 1
+Depends: libc
+Source: qca/feeds/whc/qca-whc-init
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 1887
+Description:  This Package contains the script helper files for the Whole Home Coverage init scripts
diff --git a/usr/lib/opkg/info/qca-whc-init.list b/usr/lib/opkg/info/qca-whc-init.list
new file mode 100644
index 0000000..8db88ca
--- /dev/null
+++ b/usr/lib/opkg/info/qca-whc-init.list
@@ -0,0 +1,2 @@
+/lib/functions/whc-debug.sh
+/lib/functions/whc-iface.sh
diff --git a/usr/lib/opkg/info/qca-whc-lbd.control b/usr/lib/opkg/info/qca-whc-lbd.control
new file mode 100644
index 0000000..d4f475f
--- /dev/null
+++ b/usr/lib/opkg/info/qca-whc-lbd.control
@@ -0,0 +1,9 @@
+Package: qca-whc-lbd
+Version: g15a464b-dirty-1
+Depends: libc, qca-whc-init, libhyficommon, libpthread, jansson, libwifisoncfg, qca-wifison-ext-lib
+Source: qca/feeds/whc/qca-whc-lbd
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 138539
+Description:  This package installs the Whole Home Coverage Load Balancing daemon
diff --git a/usr/lib/opkg/info/qca-whc-lbd.list b/usr/lib/opkg/info/qca-whc-lbd.list
new file mode 100644
index 0000000..6a4fbc8
--- /dev/null
+++ b/usr/lib/opkg/info/qca-whc-lbd.list
@@ -0,0 +1,6 @@
+/etc/config/lbd
+/etc/init.d/lbd
+/usr/lib/liblbcmnlibs.so
+/lib/functions/lbd-config.sh
+/usr/sbin/lbd
+/usr/sbin/lbt
diff --git a/usr/lib/opkg/info/qca-whc-repacd.control b/usr/lib/opkg/info/qca-whc-repacd.control
new file mode 100644
index 0000000..8311903
--- /dev/null
+++ b/usr/lib/opkg/info/qca-whc-repacd.control
@@ -0,0 +1,10 @@
+Package: qca-whc-repacd
+Version: g15a464b-dirty-1
+Depends: libc, qca-whc-init, qca-ieee1905-init, qca-wsplcd, openssl-util, bridge
+Source: qca/feeds/whc/qca-whc-repacd
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 74305
+Description:  This package installs the Whole Home Coverage Range Extender Placement and
+ Auto-configuration scripts
diff --git a/usr/lib/opkg/info/qca-whc-repacd.list b/usr/lib/opkg/info/qca-whc-repacd.list
new file mode 100644
index 0000000..b64fd6f
--- /dev/null
+++ b/usr/lib/opkg/info/qca-whc-repacd.list
@@ -0,0 +1,20 @@
+/etc/hotplug.d/switch/10-lp
+/etc/config/repacd
+/lib/functions/repacd-led.sh
+/usr/sbin/repacd-detect_device_mode.sh
+/lib/functions/repacd-backhaulmgr.sh
+/lib/functions/repacd-fronthaulmgr.sh
+/lib/functions/repacd-lp.sh
+/lib/functions/repacd-wifimon.sh
+/etc/hotplug.d/iface/30-repacd
+/lib/functions/repacd-gwmon.sh
+/etc/hotplug.d/button/53-wps-repacd
+/etc/hotplug.d/edge/10-apconf
+/lib/functions/whc-network.sh
+/lib/functions/repacd-wifimon-map.sh
+/usr/sbin/repacd-run.sh
+/etc/hotplug.d/switch/20-netdet
+/lib/functions/repacd-ethmon.sh
+/lib/functions/repacd-plcmon.sh
+/lib/functions/repacd-netdet.sh
+/etc/init.d/repacd
diff --git a/usr/lib/opkg/info/qca-wifi-fw-hw6-10.4-asic.control b/usr/lib/opkg/info/qca-wifi-fw-hw6-10.4-asic.control
new file mode 100644
index 0000000..c870413
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wifi-fw-hw6-10.4-asic.control
@@ -0,0 +1,9 @@
+Package: qca-wifi-fw-hw6-10.4-asic
+Version: CNSS.PS.2.6.1-00044-S-1-1
+Depends: libc
+Source: qca/feeds/qca/net/qca-wifi-fw-10.2.4
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: all
+Installed-Size: 817220
+Description:  This package contains the qca-wifi firmware(-hw6-10.4-asic) used in 10.x drivers
diff --git a/usr/lib/opkg/info/qca-wifi-fw-hw6-10.4-asic.list b/usr/lib/opkg/info/qca-wifi-fw-hw6-10.4-asic.list
new file mode 100644
index 0000000..66e05e2
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wifi-fw-hw6-10.4-asic.list
@@ -0,0 +1,10 @@
+/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_xb143_gld.bin
+/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_cus261_gld.bin
+/lib/firmware/AR9888/hw.2/lteu.bin
+/lib/firmware/AR9888/hw.2/boardData_3_QC98XX_xb141_gld.bin
+/lib/firmware/AR9888/hw.2/utf.bin
+/lib/firmware/AR9888/hw.2/otp.bin
+/lib/firmware/AR9888/hw.2/atf.bin
+/lib/firmware/AR9888/hw.2/fakeBoardData_AR6004.bin
+/lib/firmware/AR9888/hw.2/athwlan.bin
+/lib/firmware/AR9888/hw.2/boardData_2_QC98XX_cus223_523_gld.bin
diff --git a/usr/lib/opkg/info/qca-wifison-ext-lib.control b/usr/lib/opkg/info/qca-wifison-ext-lib.control
new file mode 100644
index 0000000..f89c83d
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wifison-ext-lib.control
@@ -0,0 +1,9 @@
+Package: qca-wifison-ext-lib
+Version: g15a464b-dirty-1
+Depends: libc, libnl
+Source: qca/feeds/qca-lib/qca-wifison-ext-lib
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 9861
+Description:  This Package contains the Wifison Event Functionality Library
diff --git a/usr/lib/opkg/info/qca-wifison-ext-lib.list b/usr/lib/opkg/info/qca-wifison-ext-lib.list
new file mode 100644
index 0000000..53dd42b
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wifison-ext-lib.list
@@ -0,0 +1,4 @@
+/usr/lib/libqca_wifison_ext.so
+/usr/sbin/qca_genlevent_sample
+/usr/sbin/qca_listen_port
+/usr/sbin/qca_event_sample
diff --git a/usr/lib/opkg/info/qca-wpa-cli.control b/usr/lib/opkg/info/qca-wpa-cli.control
new file mode 100644
index 0000000..822951e
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wpa-cli.control
@@ -0,0 +1,9 @@
+Package: qca-wpa-cli
+Version: g15a464b-dirty-1
+Depends: libc, librt, libopenssl, libnl
+Source: qca/feeds/qca/net/qca-hostap
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 32529
+Description:  WPA Supplicant command line interface
diff --git a/usr/lib/opkg/info/qca-wpa-cli.list b/usr/lib/opkg/info/qca-wpa-cli.list
new file mode 100644
index 0000000..d06cb63
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wpa-cli.list
@@ -0,0 +1,3 @@
+/etc/hotplug.d/button/52-wps-supplicant
+/lib/wifi/wps-supplicant-update-uci
+/usr/sbin/wpa_cli
diff --git a/usr/lib/opkg/info/qca-wpa-supplicant.control b/usr/lib/opkg/info/qca-wpa-supplicant.control
new file mode 100644
index 0000000..b1417e5
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wpa-supplicant.control
@@ -0,0 +1,9 @@
+Package: qca-wpa-supplicant
+Version: g15a464b-dirty-1
+Depends: libc, libopenssl, libnl
+Source: qca/feeds/qca/net/qca-hostap
+Section: QCA
+Maintainer: Qualcomm Atheros
+Architecture: ar71xx
+Installed-Size: 609796
+Description:  WPA Supplicant
diff --git a/usr/lib/opkg/info/qca-wpa-supplicant.list b/usr/lib/opkg/info/qca-wpa-supplicant.list
new file mode 100644
index 0000000..488f32a
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wpa-supplicant.list
@@ -0,0 +1,3 @@
+/lib/wifi/wpa_supplicant.sh
+/etc/init.d/qca-wpa-supplicant
+/usr/sbin/wpa_supplicant
diff --git a/usr/lib/opkg/info/qca-wsplcd.control b/usr/lib/opkg/info/qca-wsplcd.control
new file mode 100644
index 0000000..a945c96
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wsplcd.control
@@ -0,0 +1,9 @@
+Package: qca-wsplcd
+Version: g15a464b-dirty-1
+Depends: libc, qca-ieee1905-init, libhyficommon, libstorage, libwpa2, libieee1905, libuci, libpthread, libwifisoncfg
+Source: qca/feeds/ieee1905-security/qca-ieee1905-security-config/qca-wsplcd
+Section: QCA
+Maintainer: Qualcomm Atheros, Inc.
+Architecture: ar71xx
+Installed-Size: 102703
+Description:  This package installs the IEEE 1905.1 AP Auto-Configuration daemon: Wi-Fi credential cloning over backbone network (e.g. HomePlugAV, Ethernet, Wi-Fi)
diff --git a/usr/lib/opkg/info/qca-wsplcd.list b/usr/lib/opkg/info/qca-wsplcd.list
new file mode 100644
index 0000000..b3bc881
--- /dev/null
+++ b/usr/lib/opkg/info/qca-wsplcd.list
@@ -0,0 +1,10 @@
+/etc/hotplug.d/button/40-wsplcd
+/etc/wsplcd/map/templates/scheme-b.conf
+/usr/sbin/wsplcd
+/etc/init.d/wsplcd
+/etc/wsplcd/map/templates/scheme-c.conf
+/etc/athx100.conf
+/etc/config/wsplcd
+/sbin/uci2cfg.sh
+/usr/sbin/ucpkgen
+/etc/wsplcd/map/templates/scheme-a.conf
diff --git a/usr/lib/opkg/info/relayd.control b/usr/lib/opkg/info/relayd.control
new file mode 100644
index 0000000..bdf3dfa
--- /dev/null
+++ b/usr/lib/opkg/info/relayd.control
@@ -0,0 +1,10 @@
+Package: relayd
+Version: 2015-03-13-2970ff60bac6b70ecb682779d5c776dc559dc0b9
+Depends: libc, libubox
+Source: package/network/services/relayd
+License: GPL-2.0
+Section: net
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 9000
+Description:  Transparent routing / relay daemon
diff --git a/usr/lib/opkg/info/relayd.list b/usr/lib/opkg/info/relayd.list
new file mode 100644
index 0000000..755e5df
--- /dev/null
+++ b/usr/lib/opkg/info/relayd.list
@@ -0,0 +1,3 @@
+/usr/sbin/relayd
+/etc/init.d/relayd
+/etc/hotplug.d/iface/30-relay
diff --git a/usr/lib/opkg/info/rpcd-mod-iwinfo.control b/usr/lib/opkg/info/rpcd-mod-iwinfo.control
new file mode 100644
index 0000000..2540ac6
--- /dev/null
+++ b/usr/lib/opkg/info/rpcd-mod-iwinfo.control
@@ -0,0 +1,10 @@
+Package: rpcd-mod-iwinfo
+Version: 2016-06-30-23417e94d25570e6d62542bac46edd51e8e0243a
+Depends: libc, libubus, libubox, rpcd, libiwinfo
+Source: package/system/rpcd
+License: ISC
+Section: utils
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 5589
+Description:  Provides ubus calls for accessing iwinfo data.
diff --git a/usr/lib/opkg/info/rpcd-mod-iwinfo.list b/usr/lib/opkg/info/rpcd-mod-iwinfo.list
new file mode 100644
index 0000000..8263831
--- /dev/null
+++ b/usr/lib/opkg/info/rpcd-mod-iwinfo.list
@@ -0,0 +1 @@
+/usr/lib/rpcd/iwinfo.so
diff --git a/usr/lib/opkg/info/rpcd.conffiles b/usr/lib/opkg/info/rpcd.conffiles
new file mode 100644
index 0000000..3470156
--- /dev/null
+++ b/usr/lib/opkg/info/rpcd.conffiles
@@ -0,0 +1 @@
+/etc/config/rpcd
diff --git a/usr/lib/opkg/info/rpcd.control b/usr/lib/opkg/info/rpcd.control
new file mode 100644
index 0000000..2bb71b5
--- /dev/null
+++ b/usr/lib/opkg/info/rpcd.control
@@ -0,0 +1,11 @@
+Package: rpcd
+Version: 2016-06-30-23417e94d25570e6d62542bac46edd51e8e0243a
+Depends: libc, libubus, libubox, libuci, libblobmsg-json
+Source: package/system/rpcd
+License: ISC
+Section: utils
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 21069
+Description:  This package provides the UBUS RPC backend server to expose various
+ functionality to frontend programs via JSON-RPC.
diff --git a/usr/lib/opkg/info/rpcd.list b/usr/lib/opkg/info/rpcd.list
new file mode 100644
index 0000000..e182013
--- /dev/null
+++ b/usr/lib/opkg/info/rpcd.list
@@ -0,0 +1,4 @@
+/etc/init.d/rpcd
+/etc/config/rpcd
+/sbin/rpcd
+/usr/share/rpcd/acl.d/unauthenticated.json
diff --git a/usr/lib/opkg/info/snmpd.conffiles b/usr/lib/opkg/info/snmpd.conffiles
new file mode 100644
index 0000000..b8e9b3c
--- /dev/null
+++ b/usr/lib/opkg/info/snmpd.conffiles
@@ -0,0 +1 @@
+/etc/config/snmpd
diff --git a/usr/lib/opkg/info/snmpd.control b/usr/lib/opkg/info/snmpd.control
new file mode 100644
index 0000000..fbe8e51
--- /dev/null
+++ b/usr/lib/opkg/info/snmpd.control
@@ -0,0 +1,16 @@
+Package: snmpd
+Version: 5.7.3-2
+Depends: libc, libnetsnmp
+Source: qca/feeds/packages/net/net-snmp
+License: MIT BSD-3-Clause-Clear
+Section: net
+Maintainer: Jo-Philipp Wich <jow@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 15497
+Description:  Simple Network Management Protocol (SNMP) is a widely used protocol for
+ monitoring the health and welfare of network equipment (eg. routers),
+ computer equipment and even devices like UPSs. Net-SNMP is a suite of
+ applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both
+ IPv4 and IPv6.
+ .
+ This package contains the SNMP agent, dynamically linked.
diff --git a/usr/lib/opkg/info/snmpd.list b/usr/lib/opkg/info/snmpd.list
new file mode 100644
index 0000000..e33cb80
--- /dev/null
+++ b/usr/lib/opkg/info/snmpd.list
@@ -0,0 +1,3 @@
+/bin/net-snmp-config
+/usr/sbin/snmpd
+/etc/snmp/snmpd.conf
diff --git a/usr/lib/opkg/info/swconfig.control b/usr/lib/opkg/info/swconfig.control
new file mode 100644
index 0000000..d0c4170
--- /dev/null
+++ b/usr/lib/opkg/info/swconfig.control
@@ -0,0 +1,10 @@
+Package: swconfig
+Version: 10
+Depends: libc, libuci, libnl-tiny
+Source: package/network/config/swconfig
+License: GPL-2.0
+Section: base
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 8394
+Description:  Switch configuration utility
diff --git a/usr/lib/opkg/info/swconfig.list b/usr/lib/opkg/info/swconfig.list
new file mode 100644
index 0000000..6406309
--- /dev/null
+++ b/usr/lib/opkg/info/swconfig.list
@@ -0,0 +1,2 @@
+/lib/network/switch.sh
+/sbin/swconfig
diff --git a/usr/lib/opkg/info/tr069_stun.control b/usr/lib/opkg/info/tr069_stun.control
new file mode 100644
index 0000000..bddae71
--- /dev/null
+++ b/usr/lib/opkg/info/tr069_stun.control
@@ -0,0 +1,8 @@
+Package: tr069_stun
+Version: 1.0.2-1
+Depends: libc, libubus, libuci, libubox, libjson-c, libopenssl, libblobmsg-json
+Source: feeds/devolo/third-party/easycwmp-commercial/tr069_stun
+Section: opt
+Architecture: ar71xx
+Installed-Size: 8481
+Description:  TR-069 stun Client 
diff --git a/usr/lib/opkg/info/tr069_stun.list b/usr/lib/opkg/info/tr069_stun.list
new file mode 100644
index 0000000..5f88dd3
--- /dev/null
+++ b/usr/lib/opkg/info/tr069_stun.list
@@ -0,0 +1,3 @@
+/usr/sbin/tr069_stund
+/etc/init.d/tr069_stund
+/etc/config/tr069_stun
diff --git a/usr/lib/opkg/info/tr069_upnp.control b/usr/lib/opkg/info/tr069_upnp.control
new file mode 100644
index 0000000..eec3c84
--- /dev/null
+++ b/usr/lib/opkg/info/tr069_upnp.control
@@ -0,0 +1,8 @@
+Package: tr069_upnp
+Version: 1.0.0-1
+Depends: libc, libubus, libuci, libubox, libjson-c, libblobmsg-json, easycwmp
+Source: feeds/devolo/third-party/easycwmp-commercial/tr069_upnp
+Section: opt
+Architecture: ar71xx
+Installed-Size: 6274
+Description:  TR-069 upnp Client 
diff --git a/usr/lib/opkg/info/tr069_upnp.list b/usr/lib/opkg/info/tr069_upnp.list
new file mode 100644
index 0000000..b8a14e5
--- /dev/null
+++ b/usr/lib/opkg/info/tr069_upnp.list
@@ -0,0 +1,3 @@
+/usr/sbin/tr069_upnpd
+/etc/init.d/tr069_upnpd
+/etc/config/tr069_upnp
diff --git a/usr/lib/opkg/info/ubi-utils.control b/usr/lib/opkg/info/ubi-utils.control
new file mode 100644
index 0000000..2c856d4
--- /dev/null
+++ b/usr/lib/opkg/info/ubi-utils.control
@@ -0,0 +1,10 @@
+Package: ubi-utils
+Version: 1.5.1-2
+Depends: libc
+Source: package/utils/ubi-utils
+License: GPLv2
+Section: utils
+Maintainer: John Crispin <blogic@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 107045
+Description:  Utilities for manipulating memory technology devices.
diff --git a/usr/lib/opkg/info/ubi-utils.list b/usr/lib/opkg/info/ubi-utils.list
new file mode 100644
index 0000000..846b13c
--- /dev/null
+++ b/usr/lib/opkg/info/ubi-utils.list
@@ -0,0 +1,21 @@
+/usr/sbin/ubiformat
+/usr/sbin/flashcp
+/usr/sbin/flash_otp_info
+/usr/sbin/ubirmvol
+/usr/sbin/ubinfo
+/usr/sbin/ubiblock
+/usr/sbin/flash_otp_dump
+/usr/sbin/flash_otp_lock
+/usr/sbin/ubimkvol
+/usr/sbin/ubiattach
+/usr/sbin/flash_unlock
+/usr/sbin/ubicrc32
+/usr/sbin/flash_eraseall
+/usr/sbin/ubinize
+/usr/sbin/ubiupdatevol
+/usr/sbin/ubirsvol
+/usr/sbin/flash_otp_write
+/usr/sbin/flash_lock
+/usr/sbin/ubirename
+/usr/sbin/ubidetach
+/usr/sbin/flash_erase
diff --git a/usr/lib/opkg/info/uboot-envtools.control b/usr/lib/opkg/info/uboot-envtools.control
new file mode 100644
index 0000000..e84740e
--- /dev/null
+++ b/usr/lib/opkg/info/uboot-envtools.control
@@ -0,0 +1,10 @@
+Package: uboot-envtools
+Version: 2014.10-2
+Depends: libc
+Source: package/boot/uboot-envtools
+License: GPL-2.0 GPL-2.0+
+LicenseFiles: Licenses/README
+Section: utils
+Architecture: ar71xx
+Installed-Size: 12139
+Description:  This package includes tools to read and modify U-Boot bootloader environment.
diff --git a/usr/lib/opkg/info/uboot-envtools.list b/usr/lib/opkg/info/uboot-envtools.list
new file mode 100644
index 0000000..151bca0
--- /dev/null
+++ b/usr/lib/opkg/info/uboot-envtools.list
@@ -0,0 +1,5 @@
+/etc/uci-defaults/30_uboot-envtools
+/usr/sbin/fw_printenv
+/usr/sbin/fw_setenv
+/lib/uboot-envtools.sh
+/lib/upgrade/keep.d/uboot-envtools
diff --git a/usr/lib/opkg/info/ubox.control b/usr/lib/opkg/info/ubox.control
new file mode 100644
index 0000000..3e07c4f
--- /dev/null
+++ b/usr/lib/opkg/info/ubox.control
@@ -0,0 +1,10 @@
+Package: ubox
+Version: 2015-11-22-c086167a0154745c677f8730a336ea9cf7d71031
+Depends: libc, libubox, ubusd, ubus, libubus, libuci
+Source: package/system/ubox
+License: GPL-2.0
+Section: base
+Maintainer: John Crispin <blogic@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 13968
+Description:  OpenWrt system helper toolbox
diff --git a/usr/lib/opkg/info/ubox.list b/usr/lib/opkg/info/ubox.list
new file mode 100644
index 0000000..ac00172
--- /dev/null
+++ b/usr/lib/opkg/info/ubox.list
@@ -0,0 +1,8 @@
+/lib/libvalidate.so
+/usr/sbin/modprobe
+/usr/sbin/lsmod
+/sbin/validate_data
+/usr/sbin/rmmod
+/usr/sbin/modinfo
+/sbin/kmodloader
+/usr/sbin/insmod
diff --git a/usr/lib/opkg/info/ubus.control b/usr/lib/opkg/info/ubus.control
new file mode 100644
index 0000000..08b662c
--- /dev/null
+++ b/usr/lib/opkg/info/ubus.control
@@ -0,0 +1,10 @@
+Package: ubus
+Version: 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e
+Depends: libc, libubus, libblobmsg-json, ubusd
+Source: package/system/ubus
+License: LGPL-2.1
+Section: base
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 4240
+Description:  OpenWrt RPC client utility
diff --git a/usr/lib/opkg/info/ubus.list b/usr/lib/opkg/info/ubus.list
new file mode 100644
index 0000000..e6f0d1e
--- /dev/null
+++ b/usr/lib/opkg/info/ubus.list
@@ -0,0 +1 @@
+/bin/ubus
diff --git a/usr/lib/opkg/info/ubusd.control b/usr/lib/opkg/info/ubusd.control
new file mode 100644
index 0000000..b7ba2c4
--- /dev/null
+++ b/usr/lib/opkg/info/ubusd.control
@@ -0,0 +1,10 @@
+Package: ubusd
+Version: 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e
+Depends: libc, libubox
+Source: package/system/ubus
+License: LGPL-2.1
+Section: base
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 8398
+Description:  OpenWrt RPC daemon
diff --git a/usr/lib/opkg/info/ubusd.list b/usr/lib/opkg/info/ubusd.list
new file mode 100644
index 0000000..c06aa69
--- /dev/null
+++ b/usr/lib/opkg/info/ubusd.list
@@ -0,0 +1 @@
+/sbin/ubusd
diff --git a/usr/lib/opkg/info/uci.control b/usr/lib/opkg/info/uci.control
new file mode 100644
index 0000000..676c45d
--- /dev/null
+++ b/usr/lib/opkg/info/uci.control
@@ -0,0 +1,10 @@
+Package: uci
+Version: 2015-08-27.1-1
+Depends: libc, libuci
+Source: package/system/uci
+License: LGPL-2.1
+Section: base
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 7321
+Description:  Utility for the Unified Configuration Interface (UCI)
diff --git a/usr/lib/opkg/info/uci.list b/usr/lib/opkg/info/uci.list
new file mode 100644
index 0000000..e5004a6
--- /dev/null
+++ b/usr/lib/opkg/info/uci.list
@@ -0,0 +1,2 @@
+/sbin/uci
+/lib/config/uci.sh
diff --git a/usr/lib/opkg/info/ucihelper.control b/usr/lib/opkg/info/ucihelper.control
new file mode 100644
index 0000000..17e328a
--- /dev/null
+++ b/usr/lib/opkg/info/ucihelper.control
@@ -0,0 +1,10 @@
+Package: ucihelper
+Version: 2017-11-07-000000
+Depends: libc, libstdcpp, uci
+Source: feeds/devolo/devolo/ucihelper
+License: devolo
+Section: base
+Maintainer: "Helmut Lucht" <helmut.lucht@devolo.de>
+Architecture: ar71xx
+Installed-Size: 24144
+Description:  ucihelper
diff --git a/usr/lib/opkg/info/ucihelper.list b/usr/lib/opkg/info/ucihelper.list
new file mode 100644
index 0000000..e0de668
--- /dev/null
+++ b/usr/lib/opkg/info/ucihelper.list
@@ -0,0 +1 @@
+/usr/lib/libucihelper.so
diff --git a/usr/lib/opkg/info/uhttpd-mod-ubus.control b/usr/lib/opkg/info/uhttpd-mod-ubus.control
new file mode 100644
index 0000000..766ee22
--- /dev/null
+++ b/usr/lib/opkg/info/uhttpd-mod-ubus.control
@@ -0,0 +1,11 @@
+Package: uhttpd-mod-ubus
+Version: 2018-11-28-cdfc902a4cb77bc538a729f9e1c8a8578454a0e5
+Depends: libc, uhttpd, libubus, libblobmsg-json
+Source: package/network/services/uhttpd
+License: ISC
+Section: net
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 6375
+Description:  The ubus plugin adds a HTTP/JSON RPC proxy for ubus and publishes the
+ session.* namespace and procedures.
diff --git a/usr/lib/opkg/info/uhttpd-mod-ubus.list b/usr/lib/opkg/info/uhttpd-mod-ubus.list
new file mode 100644
index 0000000..e5cbe57
--- /dev/null
+++ b/usr/lib/opkg/info/uhttpd-mod-ubus.list
@@ -0,0 +1,2 @@
+/etc/uci-defaults/00_uhttpd_ubus
+/usr/lib/uhttpd_ubus.so
diff --git a/usr/lib/opkg/info/uhttpd.conffiles b/usr/lib/opkg/info/uhttpd.conffiles
new file mode 100644
index 0000000..57b0b33
--- /dev/null
+++ b/usr/lib/opkg/info/uhttpd.conffiles
@@ -0,0 +1 @@
+/etc/config/uhttpd
diff --git a/usr/lib/opkg/info/uhttpd.control b/usr/lib/opkg/info/uhttpd.control
new file mode 100644
index 0000000..36b2b09
--- /dev/null
+++ b/usr/lib/opkg/info/uhttpd.control
@@ -0,0 +1,12 @@
+Package: uhttpd
+Version: 2018-11-28-cdfc902a4cb77bc538a729f9e1c8a8578454a0e5
+Depends: libc, libubox, libblobmsg-json, libjson-script, libustream-openssl
+Source: package/network/services/uhttpd
+License: ISC
+Section: net
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 26973
+Description:  uHTTPd is a tiny single threaded HTTP server with TLS, CGI and Lua
+ support. It is intended as a drop-in replacement for the Busybox
+ HTTP daemon.
diff --git a/usr/lib/opkg/info/uhttpd.list b/usr/lib/opkg/info/uhttpd.list
new file mode 100644
index 0000000..f7e476e
--- /dev/null
+++ b/usr/lib/opkg/info/uhttpd.list
@@ -0,0 +1,4 @@
+/usr/sbin/uhttpd
+/etc/init.d/uhttpd
+/etc/config/uhttpd
+/lib/upgrade/keep.d/uhttpd
diff --git a/usr/lib/opkg/info/wireless-tools.control b/usr/lib/opkg/info/wireless-tools.control
new file mode 100644
index 0000000..8d51adb
--- /dev/null
+++ b/usr/lib/opkg/info/wireless-tools.control
@@ -0,0 +1,11 @@
+Package: wireless-tools
+Version: 29-5
+Depends: libc
+Source: package/network/utils/wireless-tools
+License: GPL-2.0
+Section: net
+Maintainer: Felix Fietkau <nbd@openwrt.org>
+Architecture: ar71xx
+Installed-Size: 24518
+Description:  This package contains a collection of tools for configuring wireless
+ adapters implementing the "Linux Wireless Extensions".
diff --git a/usr/lib/opkg/info/wireless-tools.list b/usr/lib/opkg/info/wireless-tools.list
new file mode 100644
index 0000000..ca71144
--- /dev/null
+++ b/usr/lib/opkg/info/wireless-tools.list
@@ -0,0 +1,3 @@
+/usr/sbin/iwconfig
+/usr/sbin/iwlist
+/usr/sbin/iwpriv
diff --git a/usr/lib/opkg/info/xml2json.control b/usr/lib/opkg/info/xml2json.control
new file mode 100644
index 0000000..d435d21
--- /dev/null
+++ b/usr/lib/opkg/info/xml2json.control
@@ -0,0 +1,10 @@
+Package: xml2json
+Version: V0.4-1
+Depends: libc, libstdcpp
+Source: feeds/devolo/devolo/xml2json
+License: devolo
+Section: utils
+Maintainer: "Stefan Schake" <stefan.schake@devolo.de>
+Architecture: ar71xx
+Installed-Size: 15174
+Description:  XML to JSON tool
diff --git a/usr/lib/opkg/info/xml2json.list b/usr/lib/opkg/info/xml2json.list
new file mode 100644
index 0000000..b5b99d4
--- /dev/null
+++ b/usr/lib/opkg/info/xml2json.list
@@ -0,0 +1 @@
+/usr/bin/xml2json
diff --git a/usr/lib/opkg/info/xmpp.control b/usr/lib/opkg/info/xmpp.control
new file mode 100644
index 0000000..926138b
--- /dev/null
+++ b/usr/lib/opkg/info/xmpp.control
@@ -0,0 +1,8 @@
+Package: xmpp
+Version: 1.1.1-1
+Depends: libc, libmesode, libuci, libubox
+Source: feeds/devolo/third-party/easycwmp-commercial/xmpp
+Section: utils
+Architecture: ar71xx
+Installed-Size: 5557
+Description:  XMPP Client 
diff --git a/usr/lib/opkg/info/xmpp.list b/usr/lib/opkg/info/xmpp.list
new file mode 100644
index 0000000..928142b
--- /dev/null
+++ b/usr/lib/opkg/info/xmpp.list
@@ -0,0 +1,3 @@
+/etc/config/xmpp
+/usr/sbin/xmppd
+/etc/init.d/xmppd
diff --git a/usr/lib/opkg/info/zlib.control b/usr/lib/opkg/info/zlib.control
new file mode 100644
index 0000000..8559219
--- /dev/null
+++ b/usr/lib/opkg/info/zlib.control
@@ -0,0 +1,11 @@
+Package: zlib
+Version: 1.2.11-1
+Depends: libc
+Source: package/libs/zlib
+License: Zlib
+LicenseFiles: README
+Section: libs
+Architecture: ar71xx
+Installed-Size: 38923
+Description:  zlib is a lossless data-compression library.
+ This package includes the shared library.
diff --git a/usr/lib/opkg/info/zlib.list b/usr/lib/opkg/info/zlib.list
new file mode 100644
index 0000000..277f385
--- /dev/null
+++ b/usr/lib/opkg/info/zlib.list
@@ -0,0 +1,3 @@
+/usr/lib/libz.so.1.2.11
+/usr/lib/libz.so.1
+/usr/lib/libz.so
diff --git a/usr/lib/opkg/status b/usr/lib/opkg/status
new file mode 100644
index 0000000..4e72f2e
--- /dev/null
+++ b/usr/lib/opkg/status
@@ -0,0 +1,1605 @@
+Package: dlanApp2Backend-plcnetapi
+Version: 12c9d02f2bb0b109d5d6c9cb7d9849356ae78687
+Depends: libc, libstdcpp, libmicrohttpd-no-ssl, avahi-nodbus-daemon, libprotobuf, boost-program_options, dlanApp2Backend-common
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: delos-wifi-peer-isolation
+Version: 1.3-2
+Depends: libc, delos-wifi-driver, ubus, jshn, jsonfilter, ebtables
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: iwinfo
+Version: 2015-06-01-ade8b1b299cbd5748db1acf80dd3e9f567938371
+Depends: libc, libiwinfo
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: kmod-stp
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-llc
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-rpcd-powerline
+Version: 2019-01-23
+Depends: libc, rpcd, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: kmod-lib-textsearch
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: libc
+Version: 1.0.14-1
+Depends: libgcc
+Status: install hold installed
+Essential: yes
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: kmod-ebtables
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-bridge
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-wifi-button
+Version: 1.3-2
+Depends: libc, ubus, jshn, jsonfilter
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: delos-ipv4ll
+Version: 2016-02-02-000000
+Depends: libc, avahi-autoipd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: opkg
+Version: 9c97d5ecd795709c8584e972bfdf3aee3a5b846d-9
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/opkg.conf 26a52078154f218f09fd06901c7da77d64
+ /etc/opkg/customfeeds.conf 61d1f3aa62fe977614ed0c2f0ad3b2ee2f
+Installed-Time: 1550598862
+
+Package: ubus
+Version: 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e
+Depends: libc, libubus, libblobmsg-json, ubusd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: libpthread
+Version: 1.0.14-1
+Depends: libgcc
+Status: install hold installed
+Essential: yes
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: kmod-bridge
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-stp
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: avahi-daemon-service-https
+Version: 0.6.31-12
+Depends: libc, avahi-daemon
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: rpcd
+Version: 2016-06-30-23417e94d25570e6d62542bac46edd51e8e0243a
+Depends: libc, libubus, libubox, libuci, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/config/rpcd 9f58e09bb250fe6cee61c873ff2c1a19cb
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: busybox
+Version: 1.25.1-2
+Depends: libc, librpc
+Status: install user installed
+Essential: yes
+Architecture: ar71xx
+Installed-Time: 1550598861
+
+Package: kmod-qca-wifi-unified-perf
+Version: 4.4.60+g15a464b-dirty-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), libgcc, libc, wireless-tools, librt, iproute2
+Provides: kmod-qca-wifi
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: kmod-ledtrig-delos-wifi-leds
+Version: 4.4.60+1-0
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: ip-full
+Version: 4.0.0-1
+Depends: libc, libnl-tiny
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/iproute2/rt_tables 08c418b8469951cd5c59da91e4b116cd62
+Installed-Time: 1550598862
+
+Package: delos-rpcd-acl-debug
+Version: 2018-11-21-000000
+Depends: libc, rpcd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: libwifisoncfg
+Version: g15a464b-dirty-1
+Depends: libc, qca-cfg80211, libhyficommon, libnl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: libwpa2
+Version: g15a464b-dirty-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: swconfig
+Version: 10
+Depends: libc, libuci, libnl-tiny
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: ebtables
+Version: 2.0.10-4-5
+Depends: libc, kmod-ebtables
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libiwinfo
+Version: 2015-06-01-ade8b1b299cbd5748db1acf80dd3e9f567938371
+Depends: libc, libuci
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: qca-acd
+Version: master.131
+Depends: libc, qca-ieee1905-init, kmod-qca-hyfi-bridge, qca-hyctl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: libcurl
+Version: 7.57.0-1
+Depends: libc, libopenssl, libnghttp2
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: openssl-util
+Version: 1.0.2o-1
+Depends: libc, libopenssl
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/ssl/openssl.cnf 06baa8f15992bacd3e5b113cd571d828c0
+Installed-Time: 1550598862
+
+Package: avahi-daemon-service-http
+Version: 0.6.31-12
+Depends: libc, avahi-daemon
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: kmod-ipt-filter
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-lib-textsearch, kmod-ipt-conntrack
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: kmod-lib-crc-ccitt
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: qca-wpa-supplicant
+Version: g15a464b-dirty-1
+Depends: libc, libopenssl, libnl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: qca-hostap
+Version: g15a464b-dirty-1
+Depends: libc, libnl, libopenssl, libubox, libubus
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: qca-whc-lbd
+Version: g15a464b-dirty-1
+Depends: libc, qca-whc-init, libhyficommon, libpthread, jansson, libwifisoncfg, qca-wifison-ext-lib
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: open-plc-utils-modpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: qca-whc-init
+Version: 1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: kmod-qca-ssdk-hnat
+Version: 4.4.60+g3a1f4ba-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-extra, kmod-ipt-filter, kmod-ipv6, kmod-ppp
+Provides: qca-ssdk
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598865
+
+Package: libcap
+Version: 2.24-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: libhyficommon
+Version: g15a464b-dirty-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: kmod-ipt-conntrack
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-nf-conntrack
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-cgi
+Version: 2018-09-28-000000-2
+Depends: libc, libubox, libubus
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: base-files
+Version: 157.2-15a464b+r49254
+Depends: libc, netifd, procd, jsonfilter
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/config/system 900c57b42ddb42e13240db959adb9131bd
+ /etc/hosts 081ef9d5367595d16e30b4b4549d9f4353
+ /etc/group 35b63adf31591ac37358e918a5e8d4f9c1
+ /etc/passwd 6a451aa33393f47ade89b8bce4d9711818
+ /etc/shadow ccbbfeee2dd560403fea13f7f431ebd21d
+ /etc/profile 4cdc28653240d0b0fd8705c0f96094b602
+ /etc/protocols edede1354b2d18b1403125b305049d4b5c
+ /etc/services 47f3393d265c8cefc2d1ec72f8b0b02cde
+ /etc/shells 8b35ce73c18161a7d7ed16fa244410993b
+ /etc/sysctl.conf fb5466dac5d2d861a01636bd7b1788a9c8
+ /etc/rc.local 515018aa94eb4937dade12dc0d69890b35
+ /etc/sysupgrade.conf 9e87b05fe2f12c84d1c465b39632274847
+ /etc/config/system 900c57b42ddb42e13240db959adb9131bd
+Installed-Time: 1550598861
+
+Package: kmod-nf-nat
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-conntrack, kmod-nf-ipt
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-fwknopd
+Version: 2-1
+Depends: libc, fwknopd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: libnghttp2
+Version: 1.29.0-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: relayd
+Version: 2015-03-13-2970ff60bac6b70ecb682779d5c776dc559dc0b9
+Depends: libc, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: open-plc-utils-hpavkey
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: delos-parental-control
+Version: 1.3-2
+Depends: libc, delos-timerd, rpcd, delos-wifi-eventd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: netifd
+Version: 2015-12-16-245527193e90906451be35c2b8e972b8712ea6ab
+Depends: libc, libuci, libnl-tiny, libubus, ubus, ubusd, jshn, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: uboot-envtools
+Version: 2014.10-2
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: procd
+Version: 2015-10-29.1-d5fddd91b966424bb63e943e789704d52382cc18
+Depends: libc, ubusd, ubus, libjson-script, ubox, libubox, libubus, procd-nand
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: delos-ntpd
+Version: 1-1
+Depends: libc, ntpd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: ubusd
+Version: 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e
+Depends: libc, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: qca-hyd
+Version: g66bfb41-1
+Depends: libc, qca-ieee1905-init, kmod-qca-hyfi-bridge, qca-libhyfi-bridge, libieee1905, qca-hyctl, libhyficommon, qca-wifison-ext-lib, libwifisoncfg, libpthread, qca-whc-lbd, jansson
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: libustream-openssl
+Version: 2015-07-09-c2d73c22618e8ee444e8d346695eca908ecb72d3
+Depends: libc, libubox, libopenssl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: qca-wsplcd
+Version: g15a464b-dirty-1
+Depends: libc, qca-ieee1905-init, libhyficommon, libstorage, libwpa2, libieee1905, libuci, libpthread, libwifisoncfg
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: kmod-llc
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: libiconv-full
+Version: 1.11.1-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: jansson
+Version: 2.7-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: open-plc-utils
+Version: 2017-01-16
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: kmod-ledtrig-gpio
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: delos-timerd
+Version: 3b8d6f9-3
+Depends: libc, libpthread, libubus, libubox, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: qca-hostapd-cli
+Version: g15a464b-dirty-1
+Depends: libc, librt, libnl, libopenssl, libubox, libubus
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: iconv
+Version: 1.11.1-1
+Depends: libc, libiconv-full, libcharset
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: delos-rpcd-system
+Version: 2015-10-09-000000
+Depends: libc, rpcd, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: ucihelper
+Version: 2017-11-07-000000
+Depends: libc, libstdcpp, uci
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: avahi-nodbus-daemon
+Version: 0.6.31-12
+Depends: libc, libavahi-nodbus-support, libexpat, librt, libdaemon
+Provides: avahi-daemon
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: delos-wifison
+Version: 1-1
+Depends: libc, libstorage, libhyficommon
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: miniupnpd
+Version: 2.0.20170421-2
+Depends: libc, iptables, libip4tc, libip6tc, ip6tables, libuuid
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/config/upnpd 060f9b12f76e33b9b10440a91f666e2a08
+Installed-Time: 1550598864
+
+Package: ntpd
+Version: 4.2.8p9-3
+Depends: libc, libopenssl, libpthread, libcap
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: firewall
+Version: 2015-07-27
+Depends: libc, libubox, libubus, libuci, libip4tc, libip6tc, libxtables, kmod-ipt-core, kmod-ipt-conntrack, kmod-ipt-nat
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/config/firewall 7a847b000c49ec99fe7b03e2594041d703
+ /etc/firewall.user bd68324966481011f5e36570258ad97dd4
+Installed-Time: 1550598862
+
+Package: open-plc-utils-plcgpio
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: kmod-nf-ipt
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: open-plc-utils-setpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: delos-customization-common
+Version: 1.0.0-2
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: libuci
+Version: 2015-08-27.1-1
+Depends: libc, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: open-plc-utils-chkpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: libip4tc
+Version: 1.4.21-1
+Depends: libc, libxtables
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: ubi-utils
+Version: 1.5.1-2
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: kmod-ip6tables
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-ipt6, kmod-ipt-core, kmod-ipt-conntrack
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: odhcp6c
+Version: 2016-02-08-dc186d6d2b0dd4ad23ca5fc69c00e81f796ff6d9
+Depends: libc, kmod-ipv6
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: fstools
+Version: 2016-01-10-96415afecef35766332067f4205ef3b2c7561d21
+Depends: libc, ubox, ubi-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libdaemon
+Version: 0.14-5
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: libmesode
+Version: 0.9.1-1
+Depends: libc, libopenssl, libexpat
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: kmod-ipt-extra
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: uci
+Version: 2015-08-27.1-1
+Depends: libc, libuci
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: kmod-ebtables-ipv4
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ebtables
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libstorage
+Version: g15a464b-dirty-1
+Depends: libc, libhyficommon, libuci
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: kmod-ebtables-ipv6
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ebtables
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: dropbear
+Version: 2017.75-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/dropbear/dropbear_rsa_host_key e3b0c44298fc1c149afbf4c8996fb92427
+ /etc/config/dropbear 0198dbc97b5a9aac76a5c6233684571ccd
+Installed-Time: 1550598862
+
+Package: libnl
+Version: 3.2.21-1
+Depends: libc, libpthread
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: curl
+Version: 7.57.0-1
+Depends: libc, libcurl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libmicroxml
+Version: 2015-03-18-caa8d3e6887f5c70e54df555dd78e4e45cfa74cc
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: libstdcpp
+Version: 4.8-linaro-1
+Status: install hold installed
+Essential: yes
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: mtd
+Version: 21
+Depends: libc, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libjson-c
+Version: 0.12-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: libgcc
+Version: 4.8-linaro-1
+Status: install hold installed
+Essential: yes
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: open-plc-utils-plcstat
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: open-plc-utils-getpib
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: delos-migration
+Version: 1-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/migration/3.1.0To2.3.0/00-downgrade 3ea52d845059ac8b3327ed63fa68a998eb
+ /etc/migration/5.0.1To5.0.2/00-upgrade 2297036867dc4182ac43919b957d0f4379
+ /etc/migration/5.1.1To5.1.2/00-upgrade 7148041cb6af6644976a8393c96fa7d564
+ /etc/migration/4.0.0To5.0.0/00-upgrade b2a02a83d10cbb343dbf5c01d1009eb8de
+ /etc/migration/5.1.0To5.1.1/00-upgrade c53b91eadfd9c5d3174b0a865bcc0a78cf
+ /etc/migration/3.1.0To3.2.0/00-upgrade 282e609d42b13e468bd0524da1be1be9dc
+ /etc/migration/5.1.2To5.2.0/00-upgrade dc4a538a2b7af7035efca32ae606657869
+ /etc/migration/2.1.0To2.0.0/00-downgrade 56a121dde92ec63ce437bf0b2d39f7ec75
+ /etc/migration/3.2.0To3.1.0/00-downgrade 59ae7794cee0b63679267ba066e1c281e9
+ /etc/migration/5.0.3To5.0.4/00-upgrade 2e7d7598fd5bc73c2c07c7793e9dc056a5
+ /etc/migration/5.0.0To5.0.1/00-upgrade d9ee4b487ba5628e7d7b845862069d6e0f
+ /etc/migration/5.0.2To5.0.3/00-upgrade f506ac1d29ce16b489cf3645646a2792df
+ /etc/migration/2.2.2To2.1.0/00-downgrade 55941c78e7062642ac599a7aff20f73f89
+ /etc/migration/4.0.0To3.2.0/00-downgrade 795f1804ce1ba1f514dc1cb07f3fead0e4
+ /etc/migration/3.2.0To4.0.0/00-upgrade d70586f2c2688b4a3016d4439e7ddbda9e
+ /etc/migration/5.0.4To5.1.0/00-upgrade 26fbbb5b46858a98a92f7722a199ae5608
+ /etc/migration/2.1.0To2.2.2/00-upgrade 6f809e3dcbca93478e89027656a65da12c
+ /etc/migration/2.3.0To2.2.2/00-downgrade 5a0abb887c8bc14e86b8bd16be4eed26eb
+ /etc/migration/2.2.2To2.3.0/00-upgrade 2d17692a4d9ed84c5ae6f3b5cb253f2dd8
+ /etc/migration/2.3.0To3.1.0/00-upgrade a51f1d47f7b319723114c85542315cb1f2
+ /etc/migration/2.0.0To2.1.0/00-upgrade 645364eca3add86a30820fb6e76c2bcab4
+ /etc/uci-defaults/99_delos_migration 36b2518934ecffb3960b6e3502ec52e4ec
+ /lib/migration/migration.sh d3ce33e9e402f989f300d98c074e8aaec3
+ /lib/migration/plc-pib.sh abe7ec9c0a2f0e1956cc1a009515d689b3
+Installed-Time: 1550598863
+
+Package: libip6tc
+Version: 1.4.21-1
+Depends: libc, libxtables
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: libuuid
+Version: 2.25.2-4
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libubox
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: kmod-leds-gpio
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: kmod-gpio-button-hotplug
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: snmpd
+Version: 5.7.3-2
+Depends: libc, libnetsnmp
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/config/snmpd eece5809cb5000e2e1c5984fd202db5271
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: logd
+Version: 2015-11-22-c086167a0154745c677f8730a336ea9cf7d71031
+Depends: libc, libubox, libubus, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: delos-compat
+Version: 1.0-3
+Depends: libc, xml2json, jsonfilter
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: dlanApp2Backend-deviceapi
+Version: 12c9d02f2bb0b109d5d6c9cb7d9849356ae78687
+Depends: libc, libstdcpp, libmicrohttpd-no-ssl, avahi-nodbus-daemon, libprotobuf, libblobmsg-json, boost-program_options, libubox, libubus, dlanApp2Backend-common
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: librt
+Version: 1.0.14-1
+Depends: libpthread
+Status: install hold installed
+Essential: yes
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libmicrohttpd-no-ssl
+Version: 0.9.59-1
+Depends: libc, libpthread
+Conflicts: libmicrohttpd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: delos-snmpd
+Version: 1-0
+Depends: libc, snmpd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: qca-legacy-uboot-dlan-pro-1200-ac-slow
+Version: gdac3737-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: avahi-autoipd
+Version: 0.6.31-12
+Depends: libc, libdaemon
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: libjson-script
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: delos-customization-variant-devolo
+Version: 1.0.0-2
+Depends: libc, delos-customization-common
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: open-plc-utils-plcID
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: librpc
+Version: 2015-11-04-a921e3ded051746f9f7cd5e5a312fb6771716aac
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: libieee1905
+Version: g15a464b-dirty-1
+Depends: libc, libhyficommon
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: libavahi-nodbus-support
+Version: 0.6.31-12
+Depends: libc, libpthread
+Provides: libavahi
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: libblobmsg-json
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc, libjson-c, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: dlan-fw-pro-1200-ac
+Version: 001-8
+Depends: libc, dlan-plc, open-plc-utils, open-plc-utils-plchost
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: qca-ieee1905-init
+Version: 1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: delos-wifi-schedule
+Version: 1.0-3
+Depends: libc, iwinfo
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: iptables
+Version: 1.4.21-1
+Depends: libc, kmod-ipt-core, libip4tc, libip6tc, libxtables
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-rpcd-plctool
+Version: 2016-06-30-000000
+Depends: libc, dlan-addons, rpcd, open-plc-utils, open-plc-utils-hpavkey, open-plc-utils-plctool, open-plc-utils-plcID, open-plc-utils-plcstat, open-plc-utils-plcwait, iconv, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: qca-iface-mgr-10.4
+Version: g15a464b-dirty-1
+Depends: libc, libpthread
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: tr069_upnp
+Version: 1.0.0-1
+Depends: libc, libubus, libuci, libubox, libjson-c, libblobmsg-json, easycwmp
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: bridge
+Version: 1.5-3
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: jshn
+Version: 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb
+Depends: libc, libjson-c, libubox, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: dmc
+Version: 1.5.1
+Depends: libc, libubus, libuci, libubox, libjson-c, libcurl, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: dvlutils
+Version: 2016-01-19-000000
+Depends: libc, libstdcpp
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: dlanapi
+Version: 2017-11-07-000000
+Depends: libc, libstdcpp
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: kmod-ipt-core
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-ipt
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: libpcap
+Version: 1.5.3-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: delos-rpcd-network
+Version: 2018-10-10-000000
+Depends: libc, rpcd, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: procd-nand
+Version: 2015-10-29.1-d5fddd91b966424bb63e943e789704d52382cc18
+Depends: libc, ubi-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: ca-certificates
+Version: 20161130+nmu1
+Depends: libc
+Status: install user installed
+Architecture: all
+Installed-Time: 1550598862
+
+Package: kmod-qca-hyfi-iptv-helper
+Version: 4.4.60+g15a464b-dirty-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-bridge
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: kmod-ppp
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-lib-crc-ccitt, kmod-slhc
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: configsync
+Version: 2018-11-07-000000-2
+Depends: libc, libstdcpp, zlib, libubus, libubox, libblobmsg-json, dvlutils, dlanapi, ucihelper, libopenssl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: libfko
+Version: 2.6.9-5
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: xml2json
+Version: V0.4-1
+Depends: libc, libstdcpp
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: qca-libhyfi-bridge
+Version: g15a464b-dirty-1
+Depends: libc, kmod-qca-hyfi-bridge
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: open-plc-utils-plchost
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: open-plc-utils-plctool
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: delos-wifi-driver
+Version: 1.3-2
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: libubus
+Version: 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e
+Depends: libc, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: uhttpd
+Version: 2018-11-28-cdfc902a4cb77bc538a729f9e1c8a8578454a0e5
+Depends: libc, libubox, libblobmsg-json, libjson-script, libustream-openssl
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/config/uhttpd 2bd53b222530208a1b79d63bce854f6792
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: dlanx-standby
+Version: 2-1
+Depends: libc, ubus, jsonfilter
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: kmod-nf-conntrack
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-htmlmgr-redirect
+Version: 1-0
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: ip6tables
+Version: 1.4.21-1
+Depends: libc, kmod-ip6tables, iptables
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: libxtables
+Version: 1.4.21-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-leds
+Version: 001-1
+Depends: libc, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: zlib
+Version: 1.2.11-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: qca-acfg
+Version: g15a464b-dirty-1
+Depends: libc, kmod-qca-wifi
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: delos-rpcd-wps
+Version: 2017-09-05-000000
+Depends: libc, rpcd, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: delos-wifi-config
+Version: 1.3-2
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: delos-rpcd-accounts
+Version: 2019-01-30-000000
+Depends: libc, rpcd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: kmod-nf-ipt6
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-nf-ipt, kmod-nf-conntrack6
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: delos-wps
+Version: 2017-08-28-000000
+Depends: libc, qca-hostap, rpcd, qca-hostapd-cli, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: fwuagent
+Version: V0.9.9.1-1
+Depends: libc, libstdcpp, libcurl, libopenssl, boost-program_options, boost-system, ubi-utils, libubus, libubox, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: qca-wifison-ext-lib
+Version: g15a464b-dirty-1
+Depends: libc, libnl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: kmod-qca-hyfi-qdisc
+Version: 4.4.60+g846e528-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8)
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: boost-program_options
+Version: 1_58_0-4
+Depends: libc, libstdcpp, libpthread, librt
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: boost-system
+Version: 1_58_0-4
+Depends: libc, libstdcpp, libpthread, librt
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: dlan-addons
+Version: 1-2
+Depends: libc, dlan-plc, open-plc-utils, open-plc-utils-plcgpio, ubus
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: qca-hyctl
+Version: g15a464b-dirty-1
+Depends: libc, kmod-qca-hyfi-bridge, qca-libhyfi-bridge
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: libprotobuf
+Version: 3.4.1-1
+Depends: libc, zlib, libpthread, libstdcpp
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: kmod-nf-conntrack6
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipv6, kmod-nf-conntrack
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: qca-whc-repacd
+Version: g15a464b-dirty-1
+Depends: libc, qca-whc-init, qca-ieee1905-init, qca-wsplcd, openssl-util, bridge
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598865
+
+Package: easycwmp
+Version: 1.7.0
+Depends: libc, libubus, libuci, libubox, libmicroxml, libjson-c, libcurl
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/config/easycwmp 921d47208f44fc2346fdc2cf8f831b9da4
+Installed-Time: 1550598864
+
+Package: libexpat
+Version: 2.2.4-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: ubox
+Version: 2015-11-22-c086167a0154745c677f8730a336ea9cf7d71031
+Depends: libc, libubox, ubusd, ubus, libubus, libuci
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: delos-base-files
+Version: 1.0-3
+Depends: libc, base-files, uci
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: kernel
+Version: 4.4.60-1-08d19d61653d44ba12b170a053afede8
+Depends: libc
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: libcharset
+Version: 1.11.1-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: libnl-tiny
+Version: 0.1-4
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: delos-rpcd-ath10k
+Version: 1
+Depends: libc, rpcd, jshn
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: xmpp
+Version: 1.1.1-1
+Depends: libc, libmesode, libuci, libubox
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: dlan-plc
+Version: 001-8
+Depends: libc, open-plc-utils, open-plc-utils-chkpib, open-plc-utils-getpib, open-plc-utils-modpib, open-plc-utils-setpib, open-plc-utils-hpavkey, open-plc-utils-plctool, ebtables
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: rpcd-mod-iwinfo
+Version: 2016-06-30-23417e94d25570e6d62542bac46edd51e8e0243a
+Depends: libc, libubus, libubox, rpcd, libiwinfo
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: delos-lh-migration
+Version: 1-7
+Depends: libc, xml2json, jsonfilter
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/uci-defaults/90_delos-lh-migration 10a2afcfeef21e42a24ef1db55990826d2
+Installed-Time: 1550598863
+
+Package: libnetsnmp
+Version: 5.7.3-2
+Depends: libc, libopenssl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+Auto-Installed: yes
+
+Package: uhttpd-mod-ubus
+Version: 2018-11-28-cdfc902a4cb77bc538a729f9e1c8a8578454a0e5
+Depends: libc, uhttpd, libubus, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: delos-webui5
+Version: 2018-01-09-000000
+Depends: libc, rpcd, rpcd-mod-iwinfo, uhttpd, uhttpd-mod-ubus, uhttpd-mod-tls
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: fwknopd
+Version: 2.6.9-5
+Depends: libc, iptables, libfko, libpcap
+Status: install user installed
+Architecture: ar71xx
+Conffiles:
+ /etc/fwknop/access.conf a4974454fc648f0392583e3edf645a2198
+ /etc/fwknop/fwknopd.conf 9318c9f42811b0371fd520b2b6f7cada46
+ /etc/config/fwknopd 0ad312320836a4cc3b17f9a93e8d3e2aa6
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: open-plc-utils-plcwait
+Version: 2017-01-16
+Depends: libc, open-plc-utils
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: jsonfilter
+Version: 2018-02-04-c7e938d6582a436dddc938539e72dd1320625c54
+Depends: libc, libubox, libjson-c
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598861
+Auto-Installed: yes
+
+Package: wireless-tools
+Version: 29-5
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: tr069_stun
+Version: 1.0.2-1
+Depends: libc, libubus, libuci, libubox, libjson-c, libopenssl, libblobmsg-json
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: qca-wpa-cli
+Version: g15a464b-dirty-1
+Depends: libc, librt, libopenssl, libnl
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: qca-legacy-uboot-dlan-pro-1200-ac
+Version: gdac3737-1
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+
+Package: delos-rpcd-swconfig
+Version: 2015-09-10-000000
+Depends: libc, rpcd
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+
+Package: qca-wifi-fw-hw6-10.4-asic
+Version: CNSS.PS.2.6.1-00044-S-1-1
+Depends: libc
+Status: install user installed
+Architecture: all
+Installed-Time: 1550598864
+
+Package: libopenssl
+Version: 1.0.2o-1
+Depends: libc, zlib
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: kmod-slhc
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-lib-crc-ccitt
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
+Package: kmod-qca-hyfi-bridge
+Version: 4.4.60+g8c70f75-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-bridge
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: delos-wifi-eventd
+Version: 1.3-2
+Depends: libc, qca-acfg, ubus, jshn, jsonfilter
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598863
+Auto-Installed: yes
+
+Package: delos-wifi-guest
+Version: 1.3-2
+Depends: libc, delos-wifi-driver, kmod-ebtables-ipv4, kmod-ebtables-ipv6
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: dlanApp2Backend-common
+Version: 12c9d02f2bb0b109d5d6c9cb7d9849356ae78687
+Depends: libc
+Status: install user installed
+Architecture: ar71xx
+Installed-Time: 1550598864
+
+Package: kmod-ipt-nat
+Version: 4.4.60-1
+Depends: kernel (= 4.4.60-1-08d19d61653d44ba12b170a053afede8), kmod-ipt-core, kmod-nf-nat
+Status: install hold installed
+Architecture: ar71xx
+Installed-Time: 1550598862
+Auto-Installed: yes
+
diff --git a/usr/lib/rpcd/iwinfo.so b/usr/lib/rpcd/iwinfo.so
new file mode 100755
index 0000000..586aab4
Binary files /dev/null and b/usr/lib/rpcd/iwinfo.so differ
diff --git a/usr/lib/rpcd/plctool.so b/usr/lib/rpcd/plctool.so
new file mode 100755
index 0000000..d38bcf6
Binary files /dev/null and b/usr/lib/rpcd/plctool.so differ
diff --git a/usr/lib/rpcd/rpcd-accounts.so b/usr/lib/rpcd/rpcd-accounts.so
new file mode 100755
index 0000000..dc67d88
Binary files /dev/null and b/usr/lib/rpcd/rpcd-accounts.so differ
diff --git a/usr/lib/rpcd/rpcd-network.so b/usr/lib/rpcd/rpcd-network.so
new file mode 100755
index 0000000..683b8df
Binary files /dev/null and b/usr/lib/rpcd/rpcd-network.so differ
diff --git a/usr/lib/rpcd/rpcd-swconfig.so b/usr/lib/rpcd/rpcd-swconfig.so
new file mode 100755
index 0000000..581a9be
Binary files /dev/null and b/usr/lib/rpcd/rpcd-swconfig.so differ
diff --git a/usr/lib/rpcd/rpcd-system.so b/usr/lib/rpcd/rpcd-system.so
new file mode 100755
index 0000000..6881757
Binary files /dev/null and b/usr/lib/rpcd/rpcd-system.so differ
diff --git a/usr/lib/uhttpd_ubus.so b/usr/lib/uhttpd_ubus.so
new file mode 100755
index 0000000..5a9429f
Binary files /dev/null and b/usr/lib/uhttpd_ubus.so differ
diff --git a/usr/libexec/base-cgi b/usr/libexec/base-cgi
new file mode 100755
index 0000000..227645a
Binary files /dev/null and b/usr/libexec/base-cgi differ
diff --git a/usr/libexec/delos/delos-clone-mode-uci b/usr/libexec/delos/delos-clone-mode-uci
new file mode 100755
index 0000000..3db2fed
--- /dev/null
+++ b/usr/libexec/delos/delos-clone-mode-uci
@@ -0,0 +1,207 @@
+#!/bin/sh
+
+. /lib/config/uci.sh
+
+IFNAME=$1
+CMD=$2
+
+get_conf_var() {
+	local conf="$1"
+	local var="$2"
+	# This finds the last "$2=" in the supplicant config and strips off leading
+	# and trailing quotes. Generally the quotes are there if it's a passphrase and not if its a psk hex string
+	# (passphrase is pure ascii not escaped, not even for " inside "") and for ssid
+	grep "^[$(printf " \t")]*$var=" "$conf" |
+		awk 'BEGIN{FS="="} {a=substr($0, index($0,$2))} END{print a}' |
+		sed -e 's/^"\(.*\)"$/\1/'
+}
+
+add_interface() {
+	local radio="$1"
+	local ssid="$2"
+	local psk="$3"
+	local encryption="$4"
+	local country="$(uci_get_state delos baptization WiFiCountryCode)"
+	uci_add wireless wifi-iface
+	uci_set wireless @wifi-iface[-1] type qcawifi
+	uci_set wireless @wifi-iface[-1] device "$radio"
+	uci_set wireless @wifi-iface[-1] mode ap
+	uci_set wireless @wifi-iface[-1] ssid "$ssid"
+	uci_set wireless @wifi-iface[-1] key "$psk"
+	uci_set wireless @wifi-iface[-1] network lan
+	uci_set wireless @wifi-iface[-1] channel auto
+	uci_set wireless @wifi-iface[-1] country "${country:-DE}"
+	uci_set wireless @wifi-iface[-1] txpower 27
+	case $encryption in
+		WPA2-PSK)
+			uci_set wireless @wifi-iface[-1] encryption psk2
+		;;
+		WPA-PSK)
+			uci_set wireless @wifi-iface[-1] encryption psk
+		;;
+		NONE)
+			uci_set wireless @wifi-iface[-1] encryption none
+		;;
+	esac
+}
+
+add_interface_uci() {
+	add_interface "$1" "$2" "$3" "$4"
+
+	uci_commit wireless
+}
+
+# this implementation depends on having only max 4 SSIDs (2.4GHz/5GHz and normal/guest SSID)
+overwrite_interface_uci() {
+	local radio="$1"
+	local ssid="$2"
+	local psk="$3"
+	local encryption="$4"
+	local index=-1
+	local index24=-1
+	local index5=-1
+	local radio24=wifi0		# 2.4GHz radio is normally wifi0
+	local radio5=wifi1		# 5GHz radio is normally wifi1
+	local use_common_setting=0
+
+	# check if wifi1 is 2.4GHz radio
+	if [ "$(uci_get_state wireless wifi1 hwmode)" == "11g" ]; then
+		radio24=wifi1
+		radio5=wifi0
+	fi
+
+	for id in 0 1 2 3; do
+		# skip guest wifi
+		if [ "$(uci_get_state wireless @wifi-iface[$id] dvl_guest 0)" == "0" ]; then
+			# search for 2.4GHz index
+			if [ "$(uci_get_state wireless @wifi-iface[$id] device)" == "$radio24" ]; then
+				index24=$id
+			fi
+			# search for 5GHz inedx
+			if [ "$(uci_get_state wireless @wifi-iface[$id] device)" == "$radio5" ]; then
+				index5=$id
+			fi
+			# search for matching entry
+			if [ "$(uci_get_state wireless @wifi-iface[$id] device)" == "$radio" ]; then
+				index=$id
+			fi
+		fi
+	done
+
+	# if a SSID exist of both radios check if settings are equal and if they are equal overwrite both SSID settings
+	if [ "$index24" != "-1" ] && [ "$index5" != "-1" ]; then
+		if [ "$(uci_get_state wireless @wifi-iface[$index24] ssid)" == "$(uci_get_state wireless @wifi-iface[$index5] ssid)" ] &&
+			[ "$(uci_get_state wireless @wifi-iface[$index24] key)" == "$(uci_get_state wireless @wifi-iface[$index5] key)" ] &&
+			[ "$(uci_get_state wireless @wifi-iface[$index24] encryption)" == "$(uci_get_state wireless @wifi-iface[$index5] encryption)" ] &&
+			[ "$(uci_get_state wireless @wifi-iface[$index24] hidden)" == "$(uci_get_state wireless @wifi-iface[$index5] hidden)" ];then
+			use_common_setting=1
+		fi
+	fi
+
+	# if "use common setting" modify both radio entries
+	if [ "$use_common_setting" == "1" ]; then
+		uci_set wireless @wifi-iface[$index24] ssid "$ssid"
+		uci_set wireless @wifi-iface[$index5] ssid "$ssid"
+		uci_set wireless @wifi-iface[$index24] key "$psk"
+		uci_set wireless @wifi-iface[$index5] key "$psk"
+		case $encryption in
+			WPA2-PSK)
+				uci_set wireless @wifi-iface[$index24] encryption psk2
+				uci_set wireless @wifi-iface[$index5] encryption psk2
+			;;
+			WPA-PSK)
+				uci_set wireless @wifi-iface[$index24] encryption psk
+				uci_set wireless @wifi-iface[$index5] encryption psk
+			;;
+			NONE)
+				uci_set wireless @wifi-iface[$index24] encryption none
+				uci_set wireless @wifi-iface[$index5] encryption none
+			;;
+		esac
+	elif [ "$index" != "-1" ]; then
+		uci_set wireless @wifi-iface[$index] ssid "$ssid"
+		uci_set wireless @wifi-iface[$index] key "$psk"
+		case $encryption in
+			WPA2-PSK)
+				uci_set wireless @wifi-iface[$index] encryption psk2
+			;;
+			WPA-PSK)
+				uci_set wireless @wifi-iface[$index] encryption psk
+			;;
+			NONE)
+				uci_set wireless @wifi-iface[$index] encryption none
+			;;
+		esac
+	else
+		add_interface "$radio" "$ssid" "$psk" "$encryption"
+	fi
+
+	uci_commit wireless
+}
+
+remove_interface() {
+	local ifname="$1"
+	wpa_cli -g /var/run/wpa_supplicantglobal interface_remove $ifname
+	[ -f /var/run/wpa_supplicant-$ifname.pid ] && kill $(cat /var/run/wpa_supplicant-$ifname.pid)
+	rm -rf /var/run/wpa_supplicant-${ifname}*
+	wlanconfig $ifname destroy
+}
+
+# stop all wps cloning instances
+remove_all_interfaces() {
+	for ifpath in $(ls -d /sys/class/net/athClone? 2>/dev/null); do
+		remove_interface $(basename $ifpath)
+	done
+}
+
+case "$CMD" in
+	CONNECTED)
+		# only accept first connect, if wps clone not successful yet
+		if [ "$(uci_get_state wireless wps_clone state)" != success ]; then
+			uci_set_state wireless wps_clone state success
+			uci_revert_state wireless wps_clone reason
+
+			wpa_cli -i$IFNAME -p /var/run/wpa_supplicant-$IFNAME save_config
+			radio=$(cat /sys/class/net/$IFNAME/parent)
+			# ssid/psk are strangely escaped (escaping \ " but not ' or $), don't use
+			status="$(wpa_cli -i$IFNAME -p/var/run/wpa_supplicant-$IFNAME status)"
+			encryption=$(echo "$status" | grep ^key_mgmt=)
+			encryption="${encryption#*=}"
+			# get ssid/psk from config instead
+			ssid="$(get_conf_var /var/run/wpa_supplicant-$IFNAME.conf ssid)"
+			psk="$(get_conf_var /var/run/wpa_supplicant-$IFNAME.conf psk)"
+
+
+			# Check if only one ssid is allowed
+			if [ "for now" != "only one ssid" ]; then
+				overwrite_interface_uci "$radio" "$ssid" "$psk" "$encryption"
+			else
+				add_interface_uci "$radio" "$ssid" "$psk" "$encryption"
+			fi
+
+			remove_interface $IFNAME
+			# we're done, stop all remaining wps cloning instances
+			remove_all_interfaces
+			reload_config # use procd to check for config changes
+		else
+			remove_interface $IFNAME
+		fi
+	;;
+	WPS-OVERLAP-DETECTED |\
+	WPS-FAIL |\
+	WPS-TIMEOUT)
+		if [ "$(uci_get_state wireless wps_clone state)" = running ]; then
+			uci_set_state wireless wps_clone state failed
+			uci_set_state wireless wps_clone reason $CMD
+			remove_interface $IFNAME
+			remove_all_interfaces
+			# force re-up all wifi interfaces (not done by driver/hostapd)
+			for ifname in $(ubus call uci state '{"config":"wireless","type":"wifi-iface"}'|\
+			                jsonfilter -e "$.values[@.up='1'].ifname"); do
+				ip link set $ifname down
+				ip link set $ifname up
+			done
+		fi
+	;;
+esac
+
diff --git a/usr/libexec/delos/delos-wps-clone-handle b/usr/libexec/delos/delos-wps-clone-handle
new file mode 100755
index 0000000..878f2ee
--- /dev/null
+++ b/usr/libexec/delos/delos-wps-clone-handle
@@ -0,0 +1,101 @@
+#!/bin/sh
+. /usr/share/libubox/jshn.sh
+. /lib/config/uci.sh
+
+
+# get all enabled radio names to start clone on
+get_radios_for_wps_clone()
+{
+	local radio
+	for radio in wifi0 wifi1; do
+		[ -n "$(uci_get wireless $radio)" ] && [ $(uci_get wireless $radio disabled 0) -eq 0 ] && echo $radio
+	done
+}
+
+
+start_wps_clone()
+{
+	local global_pid="/var/run/wpa_supplicant-global.pid"
+	local global_ctrl="/var/run/wpa_supplicantglobal"
+	local radio=''
+
+	json_init
+
+	uci_get_state wireless wps_clone > /dev/null || uci_set_state wireless wps_clone "" wps_clone
+
+	if [ "$(uci_get_state wireless wps_clone state)" != "running" ]; then
+		local radios=$(get_radios_for_wps_clone)
+
+		if [ -z "$radios" ]; then
+			json_add_string "status" "failed: no radio activated"
+			json_dump
+			return 1
+		fi
+
+		local uuid="87654321-9abc-def0-1234-$(tr -d : < /sys/class/net/eth0/address)"
+		for radio in $radios; do
+			local interface=
+			# note: adding the same json_property again overrides the former
+			case "$radio" in
+				wifi0)
+					interface=athClone0
+					json_add_string "status" "Ok"
+					json_add_string "frequency" "2.4G"
+				;;
+				wifi1)
+					interface=athClone1
+					json_add_string "status" "Ok"
+					json_add_string "frequency" "5G"
+				;;
+				*)
+					json_add_string "status" "Failed: no radio activated"
+					json_add_string "reason" "No radio activated"
+					json_dump
+					return 1
+				;;
+			esac
+ 
+			interface=$(wlanconfig $interface create wlandev $radio wlanmode sta)
+			local ctrl_socket="/var/run/wpa_supplicant-$interface"
+
+			cat > /var/run/wpa_supplicant-$interface.conf <<EOF
+ctrl_interface=/var/run/wpa_supplicant-$interface
+config_methods=display virtual_display push_button virtual_push_button physical_push_button
+wps_cred_processing=2
+update_config=1
+uuid=$uuid
+network={
+	scan_ssid=1
+	key_mgmt=WPA-PSK
+	proto=RSN
+	pairwise=CCMP
+	group=CCMP TKIP
+} 
+EOF
+			wpa_cli -g $global_ctrl interface_add $interface /var/run/wpa_supplicant-$interface.conf athr /var/run/wpa_supplicant-$interface \"\" br-lan > /dev/null
+			touch /var/run/wpa_supplicant-$interface.lock
+			wpa_cli -i $interface -p $ctrl_socket wps_pbc > /dev/null
+			wpa_cli -p $ctrl_socket -a /usr/libexec/delos/delos-clone-mode-uci -P /var/run/wpa_supplicant-$interface.pid -B > /dev/null
+		done
+		/usr/sbin/updateled.sh > /dev/null 2>/dev/null </dev/null &
+		# use toggle here to cleanup former state history completely when new run starts
+		uci_toggle_state wireless wps_clone state running
+	else
+		for ifpath in $(ls -d /sys/class/net/athClone? 2>/dev/null); do
+			local radio=$(cat $ifpath/parent)
+			local interface=$(basename $ifpath)
+			local ctrl_socket="/var/run/wpa_supplicant-$interface"
+			wpa_cli -i $interface -p $ctrl_socket > /dev/null
+			json_add_string status "restarted"
+			case $radio in
+				wifi0)
+					json_add_string frequency "2.4G"
+				;;
+				wifi1)
+					json_add_string frequency "5G"
+				;;
+			esac
+		done
+	fi
+	json_dump
+}
diff --git a/usr/libexec/delos/delos-wps-handle b/usr/libexec/delos/delos-wps-handle
new file mode 100755
index 0000000..5b28db9
--- /dev/null
+++ b/usr/libexec/delos/delos-wps-handle
@@ -0,0 +1,211 @@
+#!/bin/sh
+. /usr/share/libubox/jshn.sh
+. /lib/functions.sh
+send_to_son()
+{
+    local staname1
+    local staname2
+    local ret
+    local pattern
+    local count
+    [ -r /var/run/son.conf ] || return 0
+    staname1=$(grep sta /var/run/son.conf | head -n 1 | cut -f3 -d" " )
+    staname2=$(grep sta /var/run/son.conf | tail -n 1 | cut -f3 -d" " )
+    echo "$staname1 $staname2"
+    count=0
+    pattern="Not-Associated"
+    for sta in $staname1 $staname2;do
+    result=$(iwconfig $sta | head -2 | tail -1 | grep -o "Not-Associated")
+    if [ $result == $pattern ];then
+       count=$((count+1))
+    fi
+    done
+    if [ $count -lt 2 ];then
+    echo "Sending to son"
+    echo "wps_pbc $SEEN" > /var/run/sonwps.pipe &
+    touch /var/run/son_active
+    ret=1
+    else
+    ret=0
+    echo "Son not processing push - sta not connected"
+    fi
+    return $ret
+}
+
+check_options()
+{ (
+    count=0
+    breakup=0
+    json_init
+
+    get_section() {
+        [ "$(config_get $1 ifname)" = "$2" ] && echo $1
+    }
+
+    config_load wireless
+    for dir in /var/run/hostapd-*; do
+        [ -d "$dir" ] || continue
+        for vap_dir in $dir/ath* $dir/wlan*; do
+                [ -r "$vap_dir" ] || continue
+                localbreakup=0
+                name=$(config_foreach get_section wifi-iface "$(basename "$vap_dir")")
+                json_add_object "$name"
+                hidden="$(config_get "$name" hidden)"
+                enabled="$(config_get "$name" wps_config)"
+                encrypted="$(config_get "$name" encryption)"
+                if [ -z "$enabled" ]; then
+                        json_add_string "enabled" "failed"
+                        localbreakup=1
+                else
+                        json_add_string "enabled" "ok"
+                fi
+                if [ "$hidden" -eq 1 ]; then
+                        json_add_string "hidden" "failed"
+                        localbreakup=1
+                else
+                        json_add_string "hidden" "ok"
+                fi
+                if [ "$encrypted" = "none" ]; then
+                        json_add_string "encrypted" "failed"
+                        localbreakup=1
+                else
+                        json_add_string "encrypted" "ok"
+                fi
+
+                count=$(expr $count + 1)
+                if [ $localbreakup -eq 1 ]; then
+                        json_add_string "status" "failed"
+                        breakup=$(expr $breakup + 1)
+                else
+                        json_add_string "status" "ok"
+                fi
+
+                json_close_object
+        done
+    done
+    if [ $breakup -eq $count ]; then
+        json_add_string "status" "failed"
+        breakup=1
+    else
+        json_add_string "status" "ok"
+        breakup=0
+    fi
+    json_dump
+    return $breakup
+) }
+
+start_wps_pbc()
+{
+    local retval breakup dir vap_dir
+    retval="$(check_options)"
+    breakup=$?
+    json_load "$retval"
+    if [ $breakup -eq 0 ]; then
+        # cleanup old file
+        rm -f /var/run/son_active
+        #check for son.conf - if not there exit
+        # ret is 1 if push is consumed by son , if ret == 0 continue to next scripts
+        send_to_son
+        ret=$?
+        [ $ret -eq 1 ] && exit 0
+        # Son did not process the push  call wps-extender if confgured
+        [ -r /var/run/wifi-wps-enhc-extn.conf ] && exit 0
+        # son and wps_extender are not processing the push
+        json_add_object "WPS_state"
+        for dir in /var/run/hostapd-*; do
+            [ -d "$dir" ] || continue
+                for vap_dir in $dir/ath* $dir/wlan*; do
+                    [ -r "$vap_dir" ] || continue
+                    nopbn=`iwpriv "${vap_dir#"$dir/"}"   get_nopbn  |   cut -d':' -f2`
+                    if [ $nopbn != 1 ]; then
+                        retval=$(hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_pbc)
+                        json_add_string "${vap_dir#"$dir/"}" "$retval"
+                    fi
+                done
+        done
+        json_close_object
+    fi
+    /usr/sbin/updateled.sh > /dev/null 2>/dev/null </dev/null &
+    json_dump
+}
+
+start_wps_pin()
+{
+    local retval breakup dir vap_dir
+    retval="$(check_options)"
+    breakup=$?
+    json_load "$retval"
+    if [ $breakup -eq 0 ]; then
+        local pin=$1
+        json_add_object "WPS_state"
+        for dir in /var/run/hostapd-*; do
+            [ -d "$dir" ] || continue
+            for vap_dir in $dir/ath* $dir/wlan*; do
+                    [ -r "$vap_dir" ] || continue
+                retval=$(hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_pin any $pin)
+                json_add_string "${vap_dir#"$dir/"}" "$retval"
+            done
+        done
+        json_close_object
+    fi
+    /usr/sbin/updateled.sh > /dev/null 2>/dev/null </dev/null &
+    json_dump
+}
+
+
+get_wps_status()
+{
+    local status
+
+    status=""
+
+    json_init
+
+    for dir in /var/run/hostapd-*; do
+        [ -d "$dir" ] || continue
+        for vap_dir in $dir/ath* $dir/wlan*; do
+            [ -r "$vap_dir" ] || continue
+            retval=$(hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_status | grep "PBC Status:")
+            temp1="${retval#PBC Status: }"
+            status="${temp1%% *}"
+            json_add_string "${vap_dir#"$dir/"}" "$status"
+        done
+    done
+    json_dump
+}
+
+
+get_wps_pin_status()
+{
+    local status
+
+    status=""
+
+    json_init
+
+    for dir in /var/run/hostapd-*; do
+        [ -d "$dir" ] || continue
+        for vap_dir in $dir/ath* $dir/wlan*; do
+            [ -r "$vap_dir" ] || continue
+            if [ ${vap_dir#"$dir/"} = $device ]; then
+                retval=$(hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_pin_status)
+                json_add_string "${vap_dir#"$dir/"}" "$retval"
+            fi
+        done
+    done
+    json_dump
+}
+
+get_interface_state()
+{
+    json_init
+    for dir in /var/run/hostapd-*; do
+        [ -d "$dir" ] || continue
+        for vap_dir in $dir/ath* $dir/wlan*; do
+            [ -r "$vap_dir" ] || continue
+                retval=$(hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" interface_state)
+                json_add_string "${vap_dir#"$dir/"}" "$retval"
+        done
+    done
+    json_dump
+}
diff --git a/usr/libexec/delos/delos-wps-led-handle b/usr/libexec/delos/delos-wps-led-handle
new file mode 100755
index 0000000..227c996
--- /dev/null
+++ b/usr/libexec/delos/delos-wps-led-handle
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+board=$(cat /tmp/sysinfo/board_name)
+
+WPS_LED=/sys/class/leds/blue/trigger
+
+case "$board" in
+ap151)
+	WPS_LED=/sys/class/leds/ap151:green:wlan/trigger
+	;;
+esac
+
+mode=$1
+
+
+check_status()
+{
+    local active
+    active=true
+    call=$1
+    while [ $active == true ]
+    do
+        running=false
+        temp1=$(cat $WPS_LED)
+        temp2=$(echo ${temp1##*\[})
+        state=$(echo ${temp2%%]*})
+        for dir in /var/run/hostapd-*; do
+            [ -d "$dir" ] || continue
+            for vap_dir in $dir/ath* $dir/wlan*; do
+                [ -r "$vap_dir" ] || continue
+                retval=$(eval $call)
+                if [ \( $(echo "$retval" | grep -c '^RUNNING\|Active') -gt 0 \) -a \( $state != "timer" \) ]; then
+                    running=true
+                elif [ \( $(echo "$retval" | grep -c '^RUNNING\|Active') -gt 0 \) -a \( $state == "timer" \) ]; then
+                    running=true
+                fi
+            done
+        done
+        if [ $running == false ]; then                                              
+            echo none > $WPS_LED                                                                
+            active=false                                      
+        else                                                                                                      
+            echo timer > $WPS_LED                                                               
+        fi
+        sleep 1
+    done
+}
+
+check_clone()
+{
+    local active
+    active=true
+    
+    while [ $active == true ]
+    do
+        temp1=$(cat $WPS_LED)
+        temp2=$(echo ${temp1##*\[})
+        state=$(echo ${temp2%%]*})
+        retval=$(uci show wireless.wps_clone | grep -c 'running')
+        
+        if [ \( $retval -gt 0 \) -a \( $state != "timer" \) ]; then
+            echo timer > $WPS_LED
+        elif [ $retval -eq 0 ]; then
+            active=false
+            echo none > $WPS_LED
+        fi
+        sleep 1
+    done
+    
+}
+
+#save config
+old_trigger=$(cat $WPS_LED | cut -d "[" -f2 | cut -d "]" -f1)
+
+case $mode in
+    pbc) check_status 'hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_status' ;;
+    pin) check_status 'hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_pin_status' ;;
+    clone) check_clone ;;
+esac
+
+#restore config
+echo $old_trigger > $WPS_LED
diff --git a/usr/libexec/rpcd/ath10k.peerstat b/usr/libexec/rpcd/ath10k.peerstat
new file mode 100755
index 0000000..3900049
--- /dev/null
+++ b/usr/libexec/rpcd/ath10k.peerstat
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+. /usr/share/libubox/jshn.sh
+
+case "$1" in
+list)
+	echo '{ "get": { } }'
+	;;
+
+call)
+	case "$2" in
+	get)
+		# create output with peer stats
+		# construct json object from ath10k fw_stats
+		echo "{"
+		for phy in /sys/kernel/debug/ieee80211/phy*/ath10k/..; do [ -e "$phy" ] && {
+			phy=$(basename $(readlink -f "$phy"))
+			echo '"'"${phy/phy/radio}"'"'":"
+			{ grep Peer /sys/kernel/debug/ieee80211/$phy/ath10k/fw_stats || echo; } |
+				tr A-Z a-z |
+				sed -e '{s, *peer ,,;y/ /_/}' \
+				    -e 's,\([^ ]*\).*_\([^ ]*\),"\1":"\2"\,,' \
+				    -e '/mac_/s,\(.*\),\n\1,' \
+				    -e '$s,$,\n}\n},' \
+				    -e '1s,^,{,' |
+				sed -e '/mac_/{s-"mac_.*":\(.*\),-\1:{-;y/abcdef/ABCDEF/}' \
+				    -e 's-^$-},-'
+			echo ","
+		} done
+		echo "}"
+		;;
+	esac
+	;;
+esac
diff --git a/usr/libexec/rpcd/network.powerline b/usr/libexec/rpcd/network.powerline
new file mode 100755
index 0000000..f29190b
--- /dev/null
+++ b/usr/libexec/rpcd/network.powerline
@@ -0,0 +1,164 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+
+POWERLINE=""
+[ -d /lib/firmware/plc ] && POWERLINE=plc
+[ -d /lib/firmware/ghn ] && POWERLINE=ghn
+if [ -z "$POWERLINE" ]; then
+    logger "rpcd (network.powerline): No powerline technology found, please deselect this script in the .config for this device"
+    echo '{}'
+    exit 1
+fi
+
+MT=$(uci_get_state delos baptization MT)
+
+# HPAV specific functions
+
+PATCHDIR=/lib/firmware/$POWERLINE/$(cat /tmp/sysinfo/board_name)
+
+find_default_mode_plc() {
+    local mode=""
+    [ -f "$PATCHDIR"/default_mode_name.txt ] && mode=$(cat "$PATCHDIR"/default_mode_name.txt)
+    echo "${mode:-default}"
+}
+
+get_mode_plc() {
+    uci_get plc.plc.compat_mode
+}
+
+get_notches_plc() {
+    uci_get plc.plc.user_notches
+}
+
+set_and_apply_mode_plc() {
+    local mode="$1"
+
+    if [ -z "$mode" ] || [ -f "$PATCHDIR"/patches_mt"$MT"_"$mode".txt ]; then
+        uci_set plc plc compat_mode "$mode"
+        uci_commit plc
+        reload_config
+        echo "ok"
+    else
+        echo "error"
+    fi
+}
+
+set_and_apply_notches_plc() {
+    local notches="$1"
+
+    uci_set plc plc user_notches "$notches"
+
+    uci_commit plc
+    reload_config
+
+    echo "ok"
+}
+
+make_mode_list_plc() {
+    json_add_string "" "$(find_default_mode_$POWERLINE)"
+
+    local pat
+    for pat in "$PATCHDIR"/patches_mt"$MT"_*.txt; do
+        local mode=$(basename "$pat" .txt | sed -e 's/^patches_mt[0-9]*_//')
+        if [ -n "$mode" ] && [ "$mode" != "*" ] && [ "$mode" != "default" ]; then
+            json_add_string "" "$mode"
+        fi
+    done
+}
+
+# G.hn specific functions
+
+get_mode_ghn() {
+    uci_get ghn.ghn.compat_mode
+}
+
+get_notches_ghn() {
+    uci_get ghn.ghn.user_notches
+}
+
+set_and_apply_mode_ghn() {
+    if [ -n "$mode" ]; then
+        uci_set ghn ghn compat_mode "$mode"
+        uci_commit ghn
+        reload_config
+        echo "ok"
+    else
+        echo "error"
+    fi
+}
+
+set_and_apply_notches_ghn() {
+    local notches="$1"
+
+    uci_set ghn ghn user_notches "$notches"
+
+    uci_commit ghn
+    reload_config
+
+    echo "ok"
+}
+
+find_default_mode_ghn() {
+    # our default mode handling is done in the G.hn init script
+    echo "-"
+}
+
+make_mode_list_ghn() {
+    IF=$(uci_get ghn ghn interface)
+    DlanMacAddress=$(uci_get_state delos baptization DlanMacAddress | tr a-f A-F)
+    PW=$(uci_get_state delos-private baptization PwdGhnConfig)
+    COMPAT_MODES_AVAILABLE=$(configlayer -i $IF -m $DlanMacAddress -w $PW -o GET -p DEVOLO.POWERMASK.PROFILES_AVAILABLE | grep DEVOLO.POWERMASK.PROFILES_AVAILABLE | cut -d= -f2- | sed 's/,/ /g')
+    for COMPAT_MODE in ${COMPAT_MODES_AVAILABLE}; do
+	    json_add_string "" "${COMPAT_MODE}"
+    done
+}
+
+# common code
+
+case "$1" in
+    list)
+        echo '{"get_compat_mode":{}, "set_compat_mode":{"mode":"String"}, "get_user_notches":{}, "set_user_notches":{"notches":"String"}}'
+    ;;
+
+    call)
+        case "$2" in
+            get_compat_mode)
+                mode=$(get_mode_$POWERLINE)
+                [ -z "$mode" ] && mode=$(find_default_mode_$POWERLINE)
+
+                json_init
+                json_add_string "current_mode" "$mode"
+                json_add_array "available_modes"
+                make_mode_list_$POWERLINE
+                json_close_array
+                json_dump
+            ;;
+
+            set_compat_mode)
+                read input
+                json_load "$input"
+                json_get_var mode mode
+                [ "$mode" = "$(find_default_mode_$POWERLINE)" ] && mode=""
+
+                result=$(set_and_apply_mode_$POWERLINE "$mode")
+                echo '{"result":"'"$result"'"}'
+            ;;
+
+            get_user_notches)
+                notches=$(get_notches_$POWERLINE)
+                echo '{"notches":"'"$notches"'"}'
+            ;;
+
+            set_user_notches)
+                read input
+                json_load "$input"
+                json_get_var notches notches
+
+                result=$(set_and_apply_notches_$POWERLINE "$notches")
+                echo '{"result":"'"$result"'"}'
+            ;;
+        esac
+    ;;
+esac
diff --git a/usr/libexec/rpcd/network.wifi b/usr/libexec/rpcd/network.wifi
new file mode 100755
index 0000000..75803a8
--- /dev/null
+++ b/usr/libexec/rpcd/network.wifi
@@ -0,0 +1,68 @@
+#!/bin/sh
+. /usr/share/libubox/jshn.sh
+
+add_object () {
+    json_set_namespace NEW
+    json_add_object "${1}"
+    json_add_string radio "${2}"
+    json_add_string ssid "${3}"
+    json_add_int disconnected_time "${4}"
+    json_close_object
+    json_set_namespace ORG
+}
+
+read_unconnected_clients() {
+    local uptime=$(cut -f1 -d. < /proc/uptime)
+    local type Idx=1
+    json_set_namespace NEW
+    json_init
+    json_add_object "clients"
+    json_set_namespace ORG
+    json_init
+    json_load "$(/usr/sbin/update_wifi_client_list.sh read)"
+    if json_select "clients" > /dev/null; then
+        while json_get_type type $Idx && [ "$type" = object ]; do
+            local connected mac radio ssid time_stamp
+            json_select $Idx
+            json_get_var connected connected
+            if [ "$connected" = "0" ]; then
+                json_get_var mac mac
+                json_get_var radio radio
+                json_get_var ssid ssid
+                json_get_var time_stamp time_stamp
+                add_object "$mac" "$radio" "$ssid" "$(($uptime - $time_stamp))"
+            fi
+            json_select ..
+            Idx=$((Idx+1))
+        done
+    fi
+    json_set_namespace NEW
+    json_close_object
+    json_dump
+}
+
+
+case "$1" in
+    list)
+        echo '{ "wifi_script_running": { }, "unconnected_clients": { } }'
+    ;;
+
+    call)
+        case "$2" in
+            wifi_script_running)
+                json_init
+                pidof wifi > /dev/null
+                if [ "$?" = "0" ]; then
+                    json_add_string "running" "yes"
+                else
+                    json_add_string "running" "no"
+                fi
+                json_dump
+            ;;
+
+            unconnected_clients)
+                read_unconnected_clients
+            ;;
+        esac
+    ;;
+esac
diff --git a/usr/libexec/rpcd/network.wps b/usr/libexec/rpcd/network.wps
new file mode 100755
index 0000000..d0c8cb6
--- /dev/null
+++ b/usr/libexec/rpcd/network.wps
@@ -0,0 +1,55 @@
+#!/bin/sh
+. /usr/share/libubox/jshn.sh
+. /usr/libexec/delos/delos-wps-handle
+. /usr/libexec/delos/delos-wps-clone-handle
+case "$1" in
+        list)
+		echo '{ "enable": { "mode":"value", "pin":0 }, "get_status": { }, "clone": { }, "get_pin_status": { "device":"value" }, "get_interface_status": { } }'
+        ;;
+
+        call)
+            case "$2" in
+                    enable)
+                        read input
+                        json_load "$input"
+                        json_get_var mode mode
+                        [ -n "$mode" ] || { echo '{"error":"no mode argument given"}'; exit 0; }
+
+                        case "$mode" in
+                            wps_pbc)
+                                json=$(start_wps_pbc)
+                                # return json object
+                                echo "$json"
+                            ;;
+                            wps_pin)
+                                json_get_var pin pin
+                                [ -n "$mode" ] || { echo '{"error":no pin argument given"}' ; exit 0;};
+                                json=$(start_wps_pin $pin)
+                                echo "$json"
+                            ;;
+                        esac
+                    ;;
+                    get_status)
+                        json=$(get_wps_status)
+                        # return json object
+                        echo "$json"
+                    ;;
+                    get_pin_status)
+                        read input
+                        json_load "$input"
+                        json_get_var device device
+                        json=$(get_wps_pin_status $device)
+                        # return json object
+                        echo "$json"
+                    ;;
+                    clone)
+                        json=$(start_wps_clone)
+                        echo "$json"
+                    ;;
+                    get_interface_status)
+                        json=$(get_interface_state)
+                        echo "$json"
+                    ;;
+            esac
+        ;;
+esac
diff --git a/usr/libexec/rpcd/station_quota b/usr/libexec/rpcd/station_quota
new file mode 100755
index 0000000..765a9b0
--- /dev/null
+++ b/usr/libexec/rpcd/station_quota
@@ -0,0 +1,71 @@
+#!/bin/sh
+. /lib/functions.sh
+. /lib/functions/timer.sh
+. /usr/share/libubox/jshn.sh
+. /lib/delos-functions.sh
+
+handle_quota_entry() {
+    local name="$1"
+    local mac="$2"
+    local day="$3"
+
+    [ ! "$(config_get "$name" station)" = "$mac" ] && return
+    config_get ENTRY_DAY "$name" "daysofweek" "Monday Tuesday Wednesday Thursday Friday Saturday Sunday"
+    case "$ENTRY_DAY" in
+        *$day*)
+            config_get "$name" quota
+            ;;
+    esac
+}
+
+find_station_quota() {
+    local mac="$1"
+    local day="$(date +%A)"
+
+    echo "$(config_foreach handle_quota_entry entry "$mac" "$day")"
+}
+
+add_station_quota_info() {
+    local timer_id="$1"
+    # technically the timer_id without prefix; we always put the mac there
+    local mac="$2"
+    local status
+
+    # if we don't have a configured quota for this station, ignore it
+    local quota="$(find_station_quota "$mac")"
+    [ -z "$quota" ] && return
+    quota="$(dvl_time_to_mseconds "$quota")"
+
+    json_add_object "$mac"
+    state="$(timer_get_state $timer_id)"
+    json_add_string state "$state"
+    if [ ! "$state" = "EXPIRED" ]; then
+        json_add_string remaining "$(timer_get_remaining $timer_id)"
+    fi
+    json_add_string quota "$quota"
+    json_close_object
+}
+
+case "$1" in
+        list)
+            echo '{"status":{}}'
+        ;;
+
+        call)
+            case "$2" in
+                status)
+                    config_load "station_quota"
+                    config_get_bool QUOTA_ENABLED global enabled 0
+                    # if the station quota isn't enabled, ignore timers
+                    if [ "$QUOTA_ENABLED" -eq 0 ]; then
+                        echo "{}"
+                        exit 0
+                    fi
+
+                    json_init
+                    timer_prefix_foreach "quota-" add_station_quota_info
+                    json_dump
+                ;;
+            esac
+        ;;
+esac
diff --git a/usr/libexec/rpcd/system.date b/usr/libexec/rpcd/system.date
new file mode 100755
index 0000000..9d5125b
--- /dev/null
+++ b/usr/libexec/rpcd/system.date
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+. /usr/share/libubox/jshn.sh
+
+case "$1" in
+	list)
+		echo '{ "get": { } }'
+	;;
+
+	call)
+		case "$2" in
+			get)
+				# create output
+				json_init
+				json_add_string value "$(date '+%Y-%m-%d-%H-%M-%S-%Z')"
+
+				# return json object
+				json_dump
+			;;
+		esac
+	;;
+esac
diff --git a/usr/sbin/80211stats b/usr/sbin/80211stats
new file mode 100755
index 0000000..3eeed56
Binary files /dev/null and b/usr/sbin/80211stats differ
diff --git a/usr/sbin/acd-run.sh b/usr/sbin/acd-run.sh
new file mode 100755
index 0000000..786f912
--- /dev/null
+++ b/usr/sbin/acd-run.sh
@@ -0,0 +1,335 @@
+#!/bin/sh
+# Copyright (c) 2013 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary. 
+
+ACD_DEBUG_OUTOUT=0
+ACD_SWITCH_CONFIG_COMMAND=swconfig
+
+. /lib/functions.sh
+. /lib/functions/hyfi-iface.sh
+. /lib/functions/hyfi-network.sh
+
+local link prev_link=2 router_detected=0 gw_iface="" gw_switch_port=""
+local ieee1905managed switch_iface="" vlan_group="" switch_ports
+local cpu_portmap=0
+local start_mode="init"
+
+__acd_echo() {
+	if [ "$ACD_DEBUG_OUTOUT" -gt 0 ]; then
+		echo "$1" > /dev/console
+	else
+		echo "$1"
+	fi
+}
+
+__acd_find_switch() {
+	local vlan_grp
+
+	__hyfi_get_switch_iface switch_iface
+
+	if [ -n "$switch_iface" ]; then
+		$ACD_SWITCH_CONFIG_COMMAND dev switch0 set flush_arl 2>/dev/null
+		vlan_grp="`echo $ether_iface | awk -F. '{print $2}' 2>/dev/null`"
+	fi
+
+	if [ -z "$vlan_grp" ]; then
+		vlan_group="1"
+	else
+		vlan_group="$vlan_grp"
+	fi
+}
+
+__acd_get_switch_ports() {
+        local local config="$1"
+	local vlan_group="$2"
+        local ports vlan cpu_port __cpu_portmap
+
+        config_get vlan "$config" vlan
+        config_get ports "$config" ports
+
+        [ ! "$vlan" = "$vlan_group" ] && return
+
+        cpu_port=`echo $ports | awk '{print $1}'`
+        ports=`echo $ports | sed 's/'$cpu_port' //g'`
+        eval "$3='$ports'"
+
+		cpu_port=`echo $cpu_port | awk -Ft '{print $1}'`
+
+		case $cpu_port in
+			0) __cpu_portmap=0x01;;
+			1) __cpu_portmap=0x02;;
+			2) __cpu_portmap=0x04;;
+			3) __cpu_portmap=0x08;;
+			4) __cpu_portmap=0x10;;
+			5) __cpu_portmap=0x20;;
+			6) __cpu_portmap=0x40;;
+			7) __cpu_portmap=0x80;;
+		esac
+        eval "$4='$__cpu_portmap'"
+}
+
+# __acd_check_links
+# input: $1 1905.1 managed bridge
+# output: $2 1 if link is up in at least 1 Ethernet port
+__acd_check_links() {
+	local ether_ifaces_full ether_ifaces
+	local ether_iface ret
+
+	# Get all Ethernet interfaces
+	hyfi_get_ether_ifaces $1 ether_ifaces_full
+	hyfi_strip_list $ether_ifaces_full ether_ifaces
+
+	for ether_iface in $ether_ifaces; do
+		if [ "$switch_iface" = "$ether_iface" ]; then
+			local port link_status
+
+			for port in $switch_ports; do
+
+				if [ -n "$gw_switch_port" -a "$gw_switch_port" = "$port" ]; then
+					continue
+				fi
+
+				link_status=`$ACD_SWITCH_CONFIG_COMMAND dev switch0 port $port show | grep link | awk -F: '{print $NF}' 2>/dev/null`
+
+				if [ ! "$link_status" = "down" ]; then
+					# link is up
+					eval "$2='1'"
+					__acd_echo "acd: Link on port $port is UP"
+					return
+				fi
+			done
+			continue
+		fi
+
+		if [ -n "$gw_iface" -a "$gw_iface" = "$ether_iface" ]; then
+			continue
+		fi
+
+		ret=`ifconfig $ether_iface | grep UP[A-Z' ']*RUNNING`
+		if [ -n "$ret" ]; then
+			#link is up
+			eval "$2='1'"
+			__acd_echo "acd: Link on interface $ether_iface is UP"
+			return
+		fi
+	done
+	eval "$2='0'"
+	__acd_echo "acd: Link is DOWN"
+}
+
+__acd_check_gw_iface_link() {
+	local ret
+
+	if [ "$gw_iface" = "$switch_iface" ]; then
+		local link_status
+
+		link_status=`$ACD_SWITCH_CONFIG_COMMAND dev switch0 port $gw_switch_port show | grep link | awk -F: '{print $NF}'`
+		if [ ! "$link_status" = "down" ]; then
+			# link is up
+			__acd_echo "acd: Link to GW UP"
+			return 1
+		fi
+	else
+		ret=`ifconfig $gw_iface | grep UP[A-Z' ']*RUNNING`
+		[ -n "$ret" ] && return 1
+	fi
+	__acd_echo "acd: Link to GW DOWN"
+	return 0
+}
+
+# __acd_check_gateway
+# input: $1 1905.1 managed bridge
+# output: $2 Gateway interface
+# returns: 1 if gateway is detected
+__acd_check_gateway() {
+	local gw_ip gw_mac __gw_iface
+	local ether_ifaces_full ether_ifaces
+	local ether_iface ret
+
+	gw_ip=`route | grep default | grep br-$1 | awk '{print $2}'`
+	[ -z "$gw_ip" ] && return 0
+
+	ping $gw_ip -c1 >/dev/null
+
+	gw_mac=`cat /proc/net/arp | grep -w $gw_ip | awk '{print $4}'`
+	[ -z "$gw_mac" ] && return 0
+
+	__gw_iface=`hyctl getfdb br-$1 1024 | grep -i $gw_mac | awk '{print $4}'`
+	[ -z "$__gw_iface" ] && return 0
+
+	# Get all Ethernet interfaces
+	hyfi_get_ether_ifaces $1 ether_ifaces_full
+	hyfi_strip_list $ether_ifaces_full ether_ifaces
+
+	# Check if this interface belongs to our network
+	for ether_iface in $ether_ifaces; do
+		if [ "$ether_iface" = "$__gw_iface" ]; then
+			gw_iface=$__gw_iface
+			__acd_echo "acd: Detected Gateway on interface $gw_iface"
+			if [ "$ether_iface" = "$switch_iface" ]; then
+				local portmap __gw_switch_port=99
+				local __switch_iface="`echo $ether_iface | awk -F. '{print $1}' 2>/dev/null`"
+				portmap=`$ACD_SWITCH_CONFIG_COMMAND dev $__switch_iface get dump_arl | grep -i $gw_mac | grep -v $cpu_portmap | awk '{print $NF}'`
+
+				case $portmap in
+					0x01) __gw_switch_port=0;;
+					0x02) __gw_switch_port=1;;
+					0x04) __gw_switch_port=2;;
+					0x08) __gw_switch_port=3;;
+					0x10) __gw_switch_port=4;;
+					0x20) __gw_switch_port=5;;
+					0x40) __gw_switch_port=6;;
+					0x80) __gw_switch_port=7;;
+				esac
+
+				if [ "$__gw_switch_port" -eq 99 ]; then
+					__acd_echo "acd: invalid port map $portmap"
+					return 0
+				fi
+				gw_switch_port=$__gw_switch_port
+			fi
+			return 1
+		fi
+	done
+
+	return 0
+}
+
+__acd_restart() {
+	local __mode="$1"
+	__acd_echo "acd: restart in $__mode mode"
+
+	/etc/init.d/acd restart_in_${__mode}_mode
+	exit 0
+}
+
+# __acd_disable_vaps
+# input: $1 config
+# input: $2 network
+# input: $3 mode: sta or ap
+# input: $4 1 - disable, 0 - enable
+# input-output: $5 change counter
+__acd_disable_vaps() {
+	local config="$1"
+	local mode network disabled
+	local changed="$5"
+
+	config_get mode "$config" mode
+	config_get network "$config" network
+	config_get disabled "$config" disabled
+
+	if [ "$2" = "$network" -a "$3" = "$mode" -a ! "$4" = "$disabled" ]; then
+		uci_set wireless $config disabled $4
+		changed=$((changed + 1))
+		eval "$5='$changed'"
+	fi
+}
+
+# Get the IEEE1905.1 managed bridge name
+hyfi_get_ieee1905_managed_iface ieee1905managed
+__acd_find_switch $ieee1905managed
+[ -n "$switch_iface" ] && __acd_echo "acd: found switch on $switch_iface VLAN=$vlan_group"
+
+config_load network
+config_foreach __acd_get_switch_ports switch_vlan $vlan_group switch_ports cpu_portmap
+__acd_echo "acd: switch ports in the $ieee1905managed network: $switch_ports"
+
+local hyd_mode
+
+config_load hyd
+config_get hyd_mode config 'Mode'
+[ -n "$1" ] && start_mode="$1"
+__acd_echo "acd: Hy-Fi mode: $hyd_mode, start mode: $start_mode"
+
+__acd_check_gateway $ieee1905managed
+router_detected=$?
+
+if [ "$hyd_mode" = "HYROUTER" ]; then
+	if [ "$router_detected" -eq 0 ]; then
+		if [ ! "$start_mode" = "hr" ]; then
+			__acd_restart hc
+		else
+			local retries=3
+
+			while [ "$retries" -gt 0 ]; do
+				__acd_check_gateway $ieee1905managed
+				router_detected=$?
+				[ "$router_detected" -gt 0 ] && break
+				retries=$((retries -1))
+				__acd_echo "acd: redetecting gateway ($retries retries left)"
+			done
+			if [ "$router_detected" -gt 0 ]; then
+				__acd_restart hc
+			fi
+		fi
+	fi
+else
+	if [ "$router_detected" -eq 1 ]; then
+		__acd_restart hr
+	fi
+fi
+
+local config_changed
+
+while true; do
+	config_changed=0
+	if [ "$router_detected" -eq 0 ]; then
+		__acd_check_gateway $ieee1905managed
+		router_detected=$?
+
+		if [ "$router_detected" -gt 0 ]; then
+			__acd_restart hr
+		fi
+	else
+		__acd_check_gw_iface_link
+
+		if [ "$?" -eq 0 ]; then
+			# Gateway is gone
+			router_detected=0
+			gw_iface=""
+			gw_switch_port=""
+			__acd_restart hc
+		fi
+
+		sleep 2;
+		continue
+	fi
+
+	__acd_check_links $ieee1905managed link
+
+	if [ ! "$prev_link" = "$link" ]; then
+		if [ "$link" -gt 0 ]; then
+			local disable_hc_mode
+
+			config_load acd
+			config_get disable_hc_mode config DisableHCMode
+
+			config_load wireless
+
+			if [ "$disable_hc_mode" -eq 0 ]; then
+				# Link is up, turn off range extender
+				config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'ap' '1' config_changed
+			else
+				config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'ap' '0' config_changed
+			fi
+
+			config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'sta' '0' config_changed
+		else
+			config_load wireless
+			config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'sta' '0' config_changed
+			config_foreach __acd_disable_vaps wifi-iface $ieee1905managed 'ap' '0' config_changed
+		fi
+
+		prev_link=link;
+		if [ "$config_changed" -gt 0 ]; then
+			uci commit wireless
+			[ -f "/etc/init.d/hyd" ] && /etc/init.d/hyd stop
+			[ -f "/etc/init.d/wsplcd" ] && /etc/init.d/wsplcd stop
+			hyfi_network_restart
+		fi
+	fi
+
+	sleep 2;
+done
diff --git a/usr/sbin/acfg_tool b/usr/sbin/acfg_tool
new file mode 100755
index 0000000..6cedf39
Binary files /dev/null and b/usr/sbin/acfg_tool differ
diff --git a/usr/sbin/apply_customization.sh b/usr/sbin/apply_customization.sh
new file mode 100755
index 0000000..38d4ec7
--- /dev/null
+++ b/usr/sbin/apply_customization.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+[ -f /etc/customization.sh ] && . /etc/customization.sh
+
+. /lib/functions.sh
+. /lib/delos-functions.sh
+
+ARG_FORCE="$1"
+
+apply_configured_variant() {
+    local execute="$1"
+
+    local configured="$(uci_get customization config active_variant)"
+    local current="$_DVL_ACTIVE_VARIANT"
+
+    [ -n "$configured" ] && [ "$configured" != "$current" ] && execute=1
+
+    if [ -n "$execute" ]; then
+        local srcdir=/usr/share/delos-customization/variant-"$configured"
+        [ -f "$srcdir"/customization.sh ] && . "$srcdir"/customization.sh
+
+        ln -sf "$srcdir"/customization.sh /etc
+        ln -sf "$srcdir"/webui/customization.css /www
+
+        dvl_insert_customization_info "$srcdir"/webui customization.json /www
+        dvl_insert_customization_info /etc device_info
+        dvl_insert_customization_info /etc banner
+
+        [ -d /www/licenses ] || mkdir -p /www/licenses
+        ln -sf /usr/share/licenses/oss-license-info-"$_DVL_OSS_LICENSE_INFO".html /www/licenses/oss-license-info.html
+    fi
+}
+
+apply_configured_variant "$ARG_FORCE"
+
+exit 0
diff --git a/usr/sbin/apstats b/usr/sbin/apstats
new file mode 100755
index 0000000..5cf0e26
Binary files /dev/null and b/usr/sbin/apstats differ
diff --git a/usr/sbin/arping b/usr/sbin/arping
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/sbin/arping
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/sbin/assocdenialnotify b/usr/sbin/assocdenialnotify
new file mode 100755
index 0000000..1fc24ce
Binary files /dev/null and b/usr/sbin/assocdenialnotify differ
diff --git a/usr/sbin/athadhoc b/usr/sbin/athadhoc
new file mode 100755
index 0000000..95e358e
Binary files /dev/null and b/usr/sbin/athadhoc differ
diff --git a/usr/sbin/athkey b/usr/sbin/athkey
new file mode 100755
index 0000000..41bfb00
Binary files /dev/null and b/usr/sbin/athkey differ
diff --git a/usr/sbin/athstats b/usr/sbin/athstats
new file mode 100755
index 0000000..e8b56f8
Binary files /dev/null and b/usr/sbin/athstats differ
diff --git a/usr/sbin/athstatsclr b/usr/sbin/athstatsclr
new file mode 100755
index 0000000..10163b8
Binary files /dev/null and b/usr/sbin/athstatsclr differ
diff --git a/usr/sbin/athtestcmd b/usr/sbin/athtestcmd
new file mode 100755
index 0000000..478f41b
Binary files /dev/null and b/usr/sbin/athtestcmd differ
diff --git a/usr/sbin/avahi-autoipd b/usr/sbin/avahi-autoipd
new file mode 100755
index 0000000..100b731
Binary files /dev/null and b/usr/sbin/avahi-autoipd differ
diff --git a/usr/sbin/avahi-daemon b/usr/sbin/avahi-daemon
new file mode 100755
index 0000000..60afd5c
Binary files /dev/null and b/usr/sbin/avahi-daemon differ
diff --git a/usr/sbin/baptization.config b/usr/sbin/baptization.config
new file mode 100755
index 0000000..274f2a8
--- /dev/null
+++ b/usr/sbin/baptization.config
@@ -0,0 +1,21 @@
+#!/bin/sh
+BASE_PATH="$.SystemConfig.Services.System.Baptization"
+JSON_CONFIG="$(chunk -F - extract_config | gunzip | xml2json -n | jsonfilter -e $BASE_PATH)"
+
+print_baptization_key() {
+    local key=$1
+    echo "$key"=$(jsonfilter -s "$JSON_CONFIG" -e "\$.$key")
+}
+
+# If a specific key is given, print just that one
+if [ "$1" = "-k" ]; then
+    print_baptization_key $2
+    exit 0
+fi
+
+# Otherwise, print all
+eval $(jsonfilter -s "$JSON_CONFIG" -e BAPTIZATION_KEYS="\$")
+for key in $BAPTIZATION_KEYS; do
+    print_baptization_key $key
+done
+exit 0
diff --git a/usr/sbin/brctl b/usr/sbin/brctl
new file mode 100755
index 0000000..756466f
Binary files /dev/null and b/usr/sbin/brctl differ
diff --git a/usr/sbin/chroot b/usr/sbin/chroot
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/sbin/chroot
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/sbin/chunk b/usr/sbin/chunk
new file mode 100755
index 0000000..ed7e2d7
Binary files /dev/null and b/usr/sbin/chunk differ
diff --git a/usr/sbin/crond b/usr/sbin/crond
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/sbin/crond
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/sbin/destroy_all_sessions.sh b/usr/sbin/destroy_all_sessions.sh
new file mode 100755
index 0000000..c1a7870
--- /dev/null
+++ b/usr/sbin/destroy_all_sessions.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+ACTIVE_SESSIONS=$(ubus call session list | jsonfilter -a -e '@[*].ubus_rpc_session' | grep -v 00000000000000000000000000000000)
+
+for SESSION in ${ACTIVE_SESSIONS}; do
+    ubus call session destroy "{'ubus_rpc_session':\"${SESSION}\"}"
+done
diff --git a/usr/sbin/dlanApp2Backend_get_router_mac.sh b/usr/sbin/dlanApp2Backend_get_router_mac.sh
new file mode 100755
index 0000000..2087787
--- /dev/null
+++ b/usr/sbin/dlanApp2Backend_get_router_mac.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+function arp {
+        printf "$(cat /proc/net/arp)"
+}
+
+gateway_ip="$(ip route | grep default | awk '{print $3}')"
+ping -c 1 "$gateway_ip" -W 1 &> /dev/null
+gateway_mac="$(arp | grep -w "$gateway_ip" | awk '{print $4}')"
+
+echo "$gateway_mac"
diff --git a/usr/sbin/dlanApp2Backend_set_ha1.sh b/usr/sbin/dlanApp2Backend_set_ha1.sh
new file mode 100755
index 0000000..9c33f90
--- /dev/null
+++ b/usr/sbin/dlanApp2Backend_set_ha1.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+NEW_PASSWORD="$1"
+
+MY_SERVICE_NAME=dlanApp2Backend
+
+HTTP_REALM=$(uci_get ${MY_SERVICE_NAME} global http_realm "")
+HTTP_USERNAME=$(uci_get ${MY_SERVICE_NAME} global http_username "")
+
+[ -n "${HTTP_REALM}" -a -n "${HTTP_USERNAME}" ] || exit 1
+
+if [ -n "${NEW_PASSWORD}" ]; then
+    NEW_HA1=$(echo -n "${HTTP_USERNAME}:${HTTP_REALM}:${NEW_PASSWORD}" | md5sum | cut -d ' ' -f 1)
+else
+    NEW_HA1=""
+fi
+
+uci_set ${MY_SERVICE_NAME} global http_password ""
+uci_set ${MY_SERVICE_NAME} global http_ha1 ${NEW_HA1}
+
+uci_commit ${MY_SERVICE_NAME}
+/etc/init.d/${MY_SERVICE_NAME} reload
+
+exit 0
diff --git a/usr/sbin/dropbear b/usr/sbin/dropbear
new file mode 100755
index 0000000..d5ed65f
Binary files /dev/null and b/usr/sbin/dropbear differ
diff --git a/usr/sbin/easycwmp b/usr/sbin/easycwmp
new file mode 100755
index 0000000..8c41272
Binary files /dev/null and b/usr/sbin/easycwmp differ
diff --git a/usr/sbin/easycwmpd b/usr/sbin/easycwmpd
new file mode 100755
index 0000000..f823e5d
Binary files /dev/null and b/usr/sbin/easycwmpd differ
diff --git a/usr/sbin/ebtables b/usr/sbin/ebtables
new file mode 100755
index 0000000..0fae3d4
Binary files /dev/null and b/usr/sbin/ebtables differ
diff --git a/usr/sbin/exttool b/usr/sbin/exttool
new file mode 100755
index 0000000..8681b66
Binary files /dev/null and b/usr/sbin/exttool differ
diff --git a/usr/sbin/flash_erase b/usr/sbin/flash_erase
new file mode 100755
index 0000000..4159271
Binary files /dev/null and b/usr/sbin/flash_erase differ
diff --git a/usr/sbin/flash_eraseall b/usr/sbin/flash_eraseall
new file mode 100755
index 0000000..c5539b3
--- /dev/null
+++ b/usr/sbin/flash_eraseall
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo "${0##*/} has been replaced by \`flash_erase <mtddev> 0 0\`; please use it" 1>&2
+[ $# -ne 0 ] && set -- "$@" 0 0
+exec flash_erase "$@"
diff --git a/usr/sbin/flash_lock b/usr/sbin/flash_lock
new file mode 100755
index 0000000..c54b1a1
Binary files /dev/null and b/usr/sbin/flash_lock differ
diff --git a/usr/sbin/flash_otp_dump b/usr/sbin/flash_otp_dump
new file mode 100755
index 0000000..de581c5
Binary files /dev/null and b/usr/sbin/flash_otp_dump differ
diff --git a/usr/sbin/flash_otp_info b/usr/sbin/flash_otp_info
new file mode 100755
index 0000000..c7d81cd
Binary files /dev/null and b/usr/sbin/flash_otp_info differ
diff --git a/usr/sbin/flash_otp_lock b/usr/sbin/flash_otp_lock
new file mode 100755
index 0000000..7048766
Binary files /dev/null and b/usr/sbin/flash_otp_lock differ
diff --git a/usr/sbin/flash_otp_write b/usr/sbin/flash_otp_write
new file mode 100755
index 0000000..a32c65c
Binary files /dev/null and b/usr/sbin/flash_otp_write differ
diff --git a/usr/sbin/flash_unlock b/usr/sbin/flash_unlock
new file mode 100755
index 0000000..34cd08f
Binary files /dev/null and b/usr/sbin/flash_unlock differ
diff --git a/usr/sbin/flashcp b/usr/sbin/flashcp
new file mode 100755
index 0000000..10db49b
Binary files /dev/null and b/usr/sbin/flashcp differ
diff --git a/usr/sbin/ftpd b/usr/sbin/ftpd
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/sbin/ftpd
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/sbin/fw_printenv b/usr/sbin/fw_printenv
new file mode 100755
index 0000000..d7c4a55
Binary files /dev/null and b/usr/sbin/fw_printenv differ
diff --git a/usr/sbin/fw_setenv b/usr/sbin/fw_setenv
new file mode 120000
index 0000000..e29343f
--- /dev/null
+++ b/usr/sbin/fw_setenv
@@ -0,0 +1 @@
+fw_printenv
\ No newline at end of file
diff --git a/usr/sbin/fwknopd b/usr/sbin/fwknopd
new file mode 100755
index 0000000..a360602
Binary files /dev/null and b/usr/sbin/fwknopd differ
diff --git a/usr/sbin/hostapd b/usr/sbin/hostapd
new file mode 100755
index 0000000..30975e9
Binary files /dev/null and b/usr/sbin/hostapd differ
diff --git a/usr/sbin/hostapd_cli b/usr/sbin/hostapd_cli
new file mode 100755
index 0000000..6d64970
Binary files /dev/null and b/usr/sbin/hostapd_cli differ
diff --git a/usr/sbin/hyctl b/usr/sbin/hyctl
new file mode 100755
index 0000000..a23ec04
Binary files /dev/null and b/usr/sbin/hyctl differ
diff --git a/usr/sbin/hyd b/usr/sbin/hyd
new file mode 100755
index 0000000..c9c63fb
Binary files /dev/null and b/usr/sbin/hyd differ
diff --git a/usr/sbin/hyt b/usr/sbin/hyt
new file mode 100755
index 0000000..891f73f
--- /dev/null
+++ b/usr/sbin/hyt
@@ -0,0 +1 @@
+telnet 127.0.0.1 7777
diff --git a/usr/sbin/iface-mgr b/usr/sbin/iface-mgr
new file mode 100755
index 0000000..a2e04ab
Binary files /dev/null and b/usr/sbin/iface-mgr differ
diff --git a/usr/sbin/inetd b/usr/sbin/inetd
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/sbin/inetd
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/sbin/insmod b/usr/sbin/insmod
new file mode 120000
index 0000000..6ea73e6
--- /dev/null
+++ b/usr/sbin/insmod
@@ -0,0 +1 @@
+../../sbin/kmodloader
\ No newline at end of file
diff --git a/usr/sbin/ip b/usr/sbin/ip
new file mode 100755
index 0000000..347b332
Binary files /dev/null and b/usr/sbin/ip differ
diff --git a/usr/sbin/ip6tables b/usr/sbin/ip6tables
new file mode 120000
index 0000000..3f4acd5
--- /dev/null
+++ b/usr/sbin/ip6tables
@@ -0,0 +1 @@
+xtables-multi
\ No newline at end of file
diff --git a/usr/sbin/ip6tables-restore b/usr/sbin/ip6tables-restore
new file mode 120000
index 0000000..3f4acd5
--- /dev/null
+++ b/usr/sbin/ip6tables-restore
@@ -0,0 +1 @@
+xtables-multi
\ No newline at end of file
diff --git a/usr/sbin/ip6tables-save b/usr/sbin/ip6tables-save
new file mode 120000
index 0000000..3f4acd5
--- /dev/null
+++ b/usr/sbin/ip6tables-save
@@ -0,0 +1 @@
+xtables-multi
\ No newline at end of file
diff --git a/usr/sbin/iptables b/usr/sbin/iptables
new file mode 120000
index 0000000..3f4acd5
--- /dev/null
+++ b/usr/sbin/iptables
@@ -0,0 +1 @@
+xtables-multi
\ No newline at end of file
diff --git a/usr/sbin/iptables-restore b/usr/sbin/iptables-restore
new file mode 120000
index 0000000..3f4acd5
--- /dev/null
+++ b/usr/sbin/iptables-restore
@@ -0,0 +1 @@
+xtables-multi
\ No newline at end of file
diff --git a/usr/sbin/iptables-save b/usr/sbin/iptables-save
new file mode 120000
index 0000000..3f4acd5
--- /dev/null
+++ b/usr/sbin/iptables-save
@@ -0,0 +1 @@
+xtables-multi
\ No newline at end of file
diff --git a/usr/sbin/iwconfig b/usr/sbin/iwconfig
new file mode 100755
index 0000000..0998ffa
Binary files /dev/null and b/usr/sbin/iwconfig differ
diff --git a/usr/sbin/iwlist b/usr/sbin/iwlist
new file mode 120000
index 0000000..6ca56c9
--- /dev/null
+++ b/usr/sbin/iwlist
@@ -0,0 +1 @@
+iwconfig
\ No newline at end of file
diff --git a/usr/sbin/iwpriv b/usr/sbin/iwpriv
new file mode 120000
index 0000000..6ca56c9
--- /dev/null
+++ b/usr/sbin/iwpriv
@@ -0,0 +1 @@
+iwconfig
\ No newline at end of file
diff --git a/usr/sbin/lbd b/usr/sbin/lbd
new file mode 100755
index 0000000..2e6c217
Binary files /dev/null and b/usr/sbin/lbd differ
diff --git a/usr/sbin/lbt b/usr/sbin/lbt
new file mode 100755
index 0000000..78bcd59
--- /dev/null
+++ b/usr/sbin/lbt
@@ -0,0 +1 @@
+telnet 127.0.0.1 7787
diff --git a/usr/sbin/lsmod b/usr/sbin/lsmod
new file mode 120000
index 0000000..6ea73e6
--- /dev/null
+++ b/usr/sbin/lsmod
@@ -0,0 +1 @@
+../../sbin/kmodloader
\ No newline at end of file
diff --git a/usr/sbin/miniupnpd b/usr/sbin/miniupnpd
new file mode 100755
index 0000000..6ec2865
Binary files /dev/null and b/usr/sbin/miniupnpd differ
diff --git a/usr/sbin/modinfo b/usr/sbin/modinfo
new file mode 120000
index 0000000..6ea73e6
--- /dev/null
+++ b/usr/sbin/modinfo
@@ -0,0 +1 @@
+../../sbin/kmodloader
\ No newline at end of file
diff --git a/usr/sbin/modprobe b/usr/sbin/modprobe
new file mode 120000
index 0000000..6ea73e6
--- /dev/null
+++ b/usr/sbin/modprobe
@@ -0,0 +1 @@
+../../sbin/kmodloader
\ No newline at end of file
diff --git a/usr/sbin/ntpd.hotplug-helper b/usr/sbin/ntpd.hotplug-helper
new file mode 100755
index 0000000..af4fe85
--- /dev/null
+++ b/usr/sbin/ntpd.hotplug-helper
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+while true
+do
+	STATUS="$(/usr/sbin/ntpq -c 'rv 0 stratum')"
+	STATUS="${STATUS#*=}"
+
+	if [ -n "$STATUS" ] && [ "$STATUS" -lt "16" ]
+	then
+		ACTION="stratum" /sbin/hotplug-call ntp
+		exit 0
+	fi
+	sleep 10
+done
diff --git a/usr/sbin/ntpq b/usr/sbin/ntpq
new file mode 100755
index 0000000..5d2e085
Binary files /dev/null and b/usr/sbin/ntpq differ
diff --git a/usr/sbin/odhcp6c b/usr/sbin/odhcp6c
new file mode 100755
index 0000000..4b32eee
Binary files /dev/null and b/usr/sbin/odhcp6c differ
diff --git a/usr/sbin/opkg-key b/usr/sbin/opkg-key
new file mode 100755
index 0000000..ae5e8a4
--- /dev/null
+++ b/usr/sbin/opkg-key
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+usage() {
+	cat <<EOF
+Usage: $0 <command> <arguments...>
+Commands:
+  add <file>:			Add keyfile <file> to opkg trusted keys
+  remove <file>:		Remove keyfile matching <file> from opkg trusted keys
+  verify <sigfile> <list>:	Check list file <list> against signature file <sigfile>
+
+EOF
+	exit 1
+}
+
+opkg_key_verify() {
+	local sigfile="$1"
+	local msgfile="$2"
+
+	(
+		zcat "$msgfile" 2>/dev/null ||
+		cat "$msgfile" 2>/dev/null
+	) | usign -V -P /etc/opkg/keys -q -x "$sigfile" -m -
+}
+
+opkg_key_add() {
+	local key="$1"
+	[ -n "$key" ] || usage
+	[ -f "$key" ] || echo "Cannot open file $1"
+	local fingerprint="$(usign -F -p "$key")"
+	mkdir -p "/etc/opkg/keys"
+	cp "$key" "/etc/opkg/keys/$fingerprint"
+}
+
+opkg_key_remove() {
+	local key="$1"
+	[ -n "$key" ] || usage
+	[ -f "$key" ] || echo "Cannot open file $1"
+	local fingerprint="$(usign -F -p "$key")"
+	rm -f "/etc/opkg/keys/$fingerprint"
+}
+
+case "$1" in
+	add)
+		shift
+		opkg_key_add "$@"
+		;;
+	remove)
+		shift
+		opkg_key_remove "$@"
+		;;
+	verify)
+		shift
+		opkg_key_verify "$@"
+		;;
+	*) usage ;;
+esac
diff --git a/usr/sbin/p1905 b/usr/sbin/p1905
new file mode 100755
index 0000000..4d6af30
Binary files /dev/null and b/usr/sbin/p1905 differ
diff --git a/usr/sbin/pktlogconf b/usr/sbin/pktlogconf
new file mode 100755
index 0000000..8206aa3
Binary files /dev/null and b/usr/sbin/pktlogconf differ
diff --git a/usr/sbin/pktlogdump b/usr/sbin/pktlogdump
new file mode 100755
index 0000000..807c61e
Binary files /dev/null and b/usr/sbin/pktlogdump differ
diff --git a/usr/sbin/plc-get-pibsettings b/usr/sbin/plc-get-pibsettings
new file mode 100755
index 0000000..c940546
--- /dev/null
+++ b/usr/sbin/plc-get-pibsettings
@@ -0,0 +1,49 @@
+#! /bin/sh
+
+. /lib/functions.sh
+
+iface="$(uci_get plc plc interface br-lan)"
+
+fw=/lib/firmware/plc
+
+                 src=plc && res="$(plctools-wrapper plctool "" -i "$iface" -I)"
+[ -z "$res" ] && src=user.pib.tmp && res="$(chkpib -qv "$fw/user.pib.tmp")"
+[ -z "$res" ] && src=user.pib && res="$(chkpib -qv "$fw/user.pib")"
+[ -z "$res" ] && src=default
+
+case "$(echo "$res" | sed -ne "/^\tCCo/s,.*CCo ,,p")" in
+Auto)
+	cco=auto
+	;;
+Never)
+	cco=never
+	;;
+Always)
+	cco=always
+	;;
+*)
+	cco=auto
+	;;
+esac
+case "$(echo "$res" | sed -ne "/^\tMDU/s,.*MDU ,,p")" in
+N/A)
+	mdu=disabled
+	;;
+Slave)
+	mdu=slave
+	;;
+Master)
+	mdu=master
+	;;
+*)
+	mdu=disabled
+	;;
+esac
+
+. /usr/share/libubox/jshn.sh
+json_init
+#debug only: json_add_string source "$src"
+json_add_string cco "$cco"
+json_add_string mdu "$mdu"
+json_close_object
+json_dump
diff --git a/usr/sbin/plc-pushbtn b/usr/sbin/plc-pushbtn
new file mode 100755
index 0000000..8a6ad0e
--- /dev/null
+++ b/usr/sbin/plc-pushbtn
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+[ -z "$1" ] && exit 1
+
+. /lib/functions.sh
+config_load plc
+config_get PLC plc interface 'br-lan'
+
+[ -e /lib/dlan/baptization.sh ] && . /lib/dlan/baptization.sh
+MAC="$DlanMacAddress"
+
+[ -z "$MAC" ] && MAC=$(chkpib /lib/firmware/plc/user.pib -v|sed -n -e '/MAC/s/.*MAC //p'|head -n 1)
+
+[ -z "$MAC" ] && exit 1
+
+/usr/bin/plctool -i "$PLC" -B"$1" "$MAC"
diff --git a/usr/sbin/plc-reset b/usr/sbin/plc-reset
new file mode 100755
index 0000000..b146941
--- /dev/null
+++ b/usr/sbin/plc-reset
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+
+board=$(${PLATFORM}_board_name)
+
+case "$board" in
+dlan-hotspot)
+	echo 0 > /sys/class/gpio/gpio20/value
+	sleep 1
+	echo 1 > /sys/class/gpio/gpio20/value
+	;;
+
+dlan-pro-500-wp)
+	echo 0 > /sys/class/gpio/gpio13/value
+	sleep 1
+	echo 1 > /sys/class/gpio/gpio13/value
+	;;
+
+dlan-550-wifi)
+	echo 0 > /sys/class/gpio/gpio16/value
+	sleep 1
+	echo 1 > /sys/class/gpio/gpio16/value
+	;;
+
+dlan-1000-ac)
+	echo 0 > /sys/class/gpio/gpio2/value
+	sleep 1
+	echo 1 > /sys/class/gpio/gpio2/value
+	;;
+
+dlan-pro-1200-ac|\
+dlan-pro-1200-n)
+	echo 0 > /sys/class/gpio/gpio13/value
+	sleep 1
+	echo 1 > /sys/class/gpio/gpio13/value
+	;;
+
+devolo-home-control-cu)
+	echo 0 > /sys/class/gpio/gpio19/value
+	sleep 1
+	echo 1 > /sys/class/gpio/gpio19/value
+	;;
+
+*)
+	echo "$0: unknown board $board" >&2
+	exit 1;
+	;;
+esac
diff --git a/usr/sbin/plc-set-pibsettings b/usr/sbin/plc-set-pibsettings
new file mode 100755
index 0000000..c7e6fea
--- /dev/null
+++ b/usr/sbin/plc-set-pibsettings
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+cco=
+mdu=
+# check arguments
+while :; do
+	[ $# = 0 ] && break
+	[ "$1" = "-c" ] && cco="$2" && shift 2 && continue
+	[ "$1" = "-m" ] && mdu="$2" && shift 2 && continue
+	# invalid argument
+	exit 1
+done
+
+# nothing to do
+[ -z "$cco$mdu" ] && exit
+
+. /lib/functions.sh
+
+iface="$(uci_get plc plc interface br-lan)"
+
+[ -n "$cco" ] && case "$cco" in
+auto)
+	cco=0
+	;;
+never)
+	cco=1
+	;;
+always)
+	cco=2
+	;;
+*)
+	exit 1
+	;;
+esac
+
+[ -n "$mdu" ] && case "$mdu" in
+disabled)
+	mdu=0x0000
+	;;
+slave)
+	mdu=0x0001
+	;;
+master)
+	mdu=0x0101
+	;;
+*)
+	exit 1
+	;;
+esac
+
+pib=/tmp/.PIB.$$
+plctools-wrapper plctool "" -i "$iface" -p "$pib" || exit
+trap 'rm -f "$pib"' EXIT
+[ -n "$cco" ] && { modpib -C "$cco" "$pib" || exit; }
+[ -n "$mdu" ] && { setpib "$pib" 0x100 word "$mdu" || exit; }
+plctools-wrapper plctool "" -i "$iface" -P "$pib"
diff --git a/usr/sbin/plc-standby b/usr/sbin/plc-standby
new file mode 100755
index 0000000..ae2f200
--- /dev/null
+++ b/usr/sbin/plc-standby
@@ -0,0 +1,109 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+# uci_ lib works on temporary config files here which are not persistent
+UCI_CONFIG_DIR=/var/run
+CONFIG=plc-standby
+STANDBY_TIMER=${1:-600}
+
+SWITCHED_OFF=0
+
+if [ -f /lib/ar71xx.sh ]; then
+        PLATFORM=ar71xx
+        . /lib/ar71xx.sh
+elif [ -f /lib/ipq806x.sh ]; then
+        PLATFORM=ipq806x
+        . /lib/ipq806x.sh
+fi
+board=$(${PLATFORM}_board_name)
+
+uptime_seconds() {
+	(IFS="." read a b </proc/uptime; echo "$a")
+}
+
+restart_timer() {
+	uci_set $CONFIG status timeout "$(( $(uptime_seconds) + $STANDBY_TIMER ))"
+	uci_commit $CONFIG
+}
+
+get_wlan_devices() {
+	uci_get $CONFIG status wlandevs
+}
+
+get_timer() {
+	uci_get $CONFIG status timeout
+}
+
+# we are started with the plc, so restart standby timeout
+restart_timer
+
+while :; do
+	SLEEP=30
+	timeout=$(get_timer)
+	devices=$(get_wlan_devices)
+	if [ -z "$devices" ]; then
+		debug "standby timeout expires at $timeout"
+
+		swports=
+		case "$board" in
+		dlan-pro-1200-ac|\
+		dlan-pro-1200-n)
+			# for 1200+ WiFi ac: does port 3 or 4 have a link?
+			swports="(3||4)"
+			;;
+		dlan-1000-ac)
+			# for 1000 ac: does port 2 or 3 have a link?
+			swports="(2||3)"
+			;;
+		dlan-550-wifi)
+			# for 550: does port 2 have a link?
+			swports="2"
+			;;
+		# TODO specify link detection for switchless devices supported
+		*)
+			# current default: never enter standby
+			links=true
+			;;
+		esac
+		if [ -n "$swports" ]; then
+			# (jsonfilter not documented, but works similar to
+			# http://goessner.net/articles/JsonPath/, or look at the jsonfilter grammar)
+			# get all the link values of specified ports  with link=true, if not empty one eth port has a link
+			links=$(ubus call network.swconfig status '{"switch":"switch0"}'|jsonfilter -l 1 -e '$.ports['"$swports"'&&@.link=true].link')
+		fi
+		if [ -n "$links" ]; then
+			# restart timeout if ethernet ports are up
+			debug "restart standby timer (eth)"
+			restart_timer
+
+			[ $SWITCHED_OFF = 1 ] && {
+				[ -x /etc/init.d/plc ] && /etc/init.d/plc normal
+				[ -x /etc/init.d/ghn ] && /etc/init.d/ghn normal
+				SWITCHED_OFF=0
+			}
+		else
+			# if down let the timer expire
+			[ "$(uptime_seconds)" -ge "$timeout" ] && [ $SWITCHED_OFF = 0 ] && {
+				# enter plc standby if timed out
+				debug "standby timer expired"
+
+				[ -x /etc/init.d/plc ] && /etc/init.d/plc standby
+				[ -x /etc/init.d/ghn ] && /etc/init.d/ghn standby
+				SWITCHED_OFF=1
+			}
+
+			# if timeout active check every few seconds if ports went up again
+			SLEEP=5
+		fi
+	else
+		debug "restart standby timer (wifi)"
+		restart_timer
+		[ $SWITCHED_OFF = 1 ] && {
+			[ -x /etc/init.d/plc ] && /etc/init.d/plc normal
+			[ -x /etc/init.d/ghn ] && /etc/init.d/ghn normal
+			SWITCHED_OFF=0
+		}
+	fi
+	sleep $SLEEP
+done
diff --git a/usr/sbin/plctools-wrapper b/usr/sbin/plctools-wrapper
new file mode 100755
index 0000000..7fcdf44
--- /dev/null
+++ b/usr/sbin/plctools-wrapper
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# arg 1 is the tool to call e.g. plctool
+# arg 2 is plc device mac address, if empty use the baptized plc real mac address
+tool="$1"
+shift
+device="$1"
+shift
+
+[ -z "$device" ] && {
+	. /lib/functions.sh
+	device="$(uci_get_state delos baptization DlanMacAddress)"
+	[ -z "$device" ] && exit 1
+}
+
+$tool "$@" "$device"
diff --git a/usr/sbin/pstats b/usr/sbin/pstats
new file mode 100755
index 0000000..fb02cf8
Binary files /dev/null and b/usr/sbin/pstats differ
diff --git a/usr/sbin/qca_event_sample b/usr/sbin/qca_event_sample
new file mode 100755
index 0000000..534f12a
Binary files /dev/null and b/usr/sbin/qca_event_sample differ
diff --git a/usr/sbin/qca_genlevent_sample b/usr/sbin/qca_genlevent_sample
new file mode 100755
index 0000000..cf399ff
Binary files /dev/null and b/usr/sbin/qca_genlevent_sample differ
diff --git a/usr/sbin/qca_listen_port b/usr/sbin/qca_listen_port
new file mode 100755
index 0000000..718a20d
Binary files /dev/null and b/usr/sbin/qca_listen_port differ
diff --git a/usr/sbin/radartool b/usr/sbin/radartool
new file mode 100755
index 0000000..4220c06
Binary files /dev/null and b/usr/sbin/radartool differ
diff --git a/usr/sbin/relayd b/usr/sbin/relayd
new file mode 100755
index 0000000..7e0b0ca
Binary files /dev/null and b/usr/sbin/relayd differ
diff --git a/usr/sbin/repacd-detect_device_mode.sh b/usr/sbin/repacd-detect_device_mode.sh
new file mode 100755
index 0000000..164cab8
--- /dev/null
+++ b/usr/sbin/repacd-detect_device_mode.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+# Copyright (c) 2016 Qualcomm Atheros, Inc.
+#
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+. /lib/functions/repacd-netdet.sh
+
+netdet_wan_lan_detect
+case $? in
+    $NETDET_RESULT_ROOTAP)
+        __netdet_debug "we have a WAN link so configure as CAP"
+        (export EVENT="location"; export STATE=cap; hotplug-call edge)
+        ;;
+    $NETDET_RESULT_RE)
+        __netdet_debug "we see a WiFi SON device upstream so configure as range extender"
+        (export EVENT="location"; export STATE=re; hotplug-call edge)
+        ;;
+    $NETDET_RESULT_INDETERMINATE)
+        __netdet_debug "We can't tell so don't do anything"
+        (export EVENT="location"; export STATE=unknown; hotplug-call edge)
+        ;;
+    *)
+        echo "error: unknown return code: $?" >&2
+        exit 4
+        ;;
+esac
diff --git a/usr/sbin/repacd-run.sh b/usr/sbin/repacd-run.sh
new file mode 100755
index 0000000..4607899
--- /dev/null
+++ b/usr/sbin/repacd-run.sh
@@ -0,0 +1,280 @@
+#!/bin/sh
+# Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+# 2015-2016 Qualcomm Atheros, Inc.
+# All Rights Reserved.
+# Qualcomm Atheros Confidential and Proprietary.
+
+REPACD_DEBUG_OUTOUT=0
+
+. /lib/functions/repacd-lp.sh
+. /lib/functions/repacd-gwmon.sh
+. /lib/functions/repacd-led.sh
+
+GWMON_DEBUG_OUTOUT=$REPACD_DEBUG_OUTOUT
+
+cur_role='' managed_network=''
+link_check_delay=''
+restart_wifi=0
+traffic_separation_enabled=0
+traffic_separation_active=0
+backhaul_network=''
+eth_mon_enabled=''
+
+__repacd_info() {
+    local stderr=''
+    if [ "$REPACD_DEBUG_OUTOUT" -gt 0 ]; then
+        stderr='-s'
+    fi
+
+    logger $stderr -t repacd -p user.info "$1"
+}
+
+__repacd_restart() {
+    local __mode="$1"
+    __repacd_info "repacd: restart in $__mode mode"
+
+    /etc/init.d/repacd "restart_in_${__mode}_mode"
+    exit 0
+}
+
+__repacd_update_mode() {
+    local new_mode=$1
+    if [ "$new_mode" -eq "$GWMON_MODE_CAP" ]; then
+        __repacd_info "Restarting in CAP mode"
+        __repacd_restart 'cap'
+    elif [ "$new_mode" -eq "$GWMON_MODE_NON_CAP" ]; then
+        if [ "$alg_set" = "map" ]; then
+            repacd_wifimon_config_bsta "${managed_network}"
+        fi
+
+        __repacd_info "Restarting in NonCAP mode"
+        __repacd_restart 'noncap'
+    fi
+}
+
+__repacd_wifimon_init() {
+
+    if [ "$traffic_separation_enabled" -gt 0 ] && \
+       [ "$traffic_separation_active" -gt 0 ]; then
+        repacd_wifimon_init "$backhaul_network" "$current_re_mode" "$current_re_submode" "$autoconf_restart" \
+                            new_state new_re_mode new_re_submode
+    else
+        repacd_wifimon_init $managed_network "$current_re_mode" "$current_re_submode" "$autoconf_restart" \
+                            new_state new_re_mode new_re_submode
+    fi
+
+}
+
+config_load repacd
+config_get managed_network repacd 'ManagedNetwork' 'lan'
+config_get cur_role repacd 'Role' 'NonCAP'
+config_get link_check_delay repacd 'LinkCheckDelay' '2'
+config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
+config_get traffic_separation_active repacd TrafficSeparationActive '0'
+config_get backhaul_network repacd NetworkBackhaul 'backhaul'
+config_get eth_mon_enabled repacd 'EnableEthernetMonitoring' '0'
+
+if [ "$#" -lt 5 ]; then
+    echo -n "Usage: $0 <alg_set> <start_role> <config RE mode> "
+    echo "<current RE mode> <current RE submode> [autoconf]"
+    exit 1
+fi
+
+alg_set=$1
+start_role=$2
+config_re_mode=$3
+current_re_mode=$4
+current_re_submode=$5
+re_mode_change=0
+
+if [ "$alg_set" = "son" ]; then
+    . /lib/functions/repacd-wifimon.sh
+    . /lib/functions/repacd-ethmon.sh
+    . /lib/functions/repacd-netdet.sh
+    . /lib/functions/repacd-backhaulmgr.sh
+    . /lib/functions/repacd-plcmon.sh
+    . /lib/functions/repacd-fronthaulmgr.sh
+elif [ "$alg_set" = "map" ]; then
+    . /lib/functions/repacd-wifimon-map.sh
+    . /lib/functions/repacd-fronthaulmgr.sh
+fi
+
+# Clean up the background ping and related logic when being terminated
+# by the init system.
+trap 'repacd_wifimon_fini; repacd_led_set_states Reset; exit 0' SIGTERM
+
+__repacd_info "Starting: Algorithm set=$alg_set"
+__repacd_info "Starting: ConfiguredRole=$cur_role StartRole=$start_role"
+__repacd_info "Starting: ConfigREMode=$config_re_mode CurrentREMode=$current_re_mode CurrentRESubMode=$current_re_submode"
+
+new_mode=
+__gwmon_init $cur_role "$start_role" $managed_network
+new_mode=$?
+if [ "$eth_mon_enabled" -eq 0 ] || [ ${new_mode} -ne "$GWMON_MODE_NO_CHANGE" ]; then
+    __repacd_update_mode $new_mode
+fi
+
+cur_state='' new_state=''
+new_re_mode=$current_re_mode new_re_submode=$current_re_submode
+autoconf_restart=''
+
+# If the start was actually a restart triggered by automatic configuration
+# logic (eg. mode or role switching), note that here so it can influence the
+# LED states.
+if [ -n "$6" ]; then
+    __repacd_info "Startup triggered by auto-config change"
+    autoconf_restart=1
+else
+    autoconf_restart=0
+fi
+
+if [ ! "$eth_mon_enabled" -eq 0 ]; then
+    repacd_lp_init
+    repacd_netdet_init
+fi
+
+# Initialise Wi-Fi monitoring logic
+__repacd_wifimon_init
+
+# Since the Wi-Fi monitoring process does nothing when in CAP mode, force
+# the state to one that indicates we are operating in CAP mode.
+if [ "$cur_role" = 'CAP' ]; then
+    new_state='InCAPMode'
+else
+    if [ "$alg_set" = "son" ]; then
+        # Initialise Backhaul Manager logic for REs
+        repacd_backhaulmgrmon_init
+        repacd_plcmon_init
+    fi
+
+    # This is valid in both SON and MAP modes
+    repacd_fronthaulmgrmon_init
+fi
+
+
+if [ -n "$new_state" ]; then
+    __repacd_info "Setting initial LED states to $new_state"
+    repacd_led_set_states $new_state
+    cur_state=$new_state
+else
+    __repacd_info "Failed to resolve STA interface; will attempt periodically"
+fi
+
+# Loop forever (unless we are killed with SIGTERM which is handled above).
+while true; do
+    __gwmon_check
+    new_mode=$?
+    __repacd_update_mode $new_mode
+
+    if [ -n "$cur_state" ]; then
+        new_state=''
+        repacd_wifimon_check $managed_network "$current_re_mode" "$current_re_submode" \
+                             new_state new_re_mode new_re_submode
+
+        # First test for range extender mode change, which could also include
+        # a role change if the LED state is updated to indicate that.
+        re_mode_change=0
+        if [ "$config_re_mode" = 'auto' ] && \
+             [ ! "$current_re_mode" = "$new_re_mode" ]; then
+            __repacd_info "New auto-derived RE mode=$new_re_mode"
+
+            uci_set repacd repacd AssocDerivedREMode "$new_re_mode"
+            uci_set repacd WiFiLink BSSIDResolveState 'resolving'
+            uci_commit repacd
+
+            re_mode_change=1
+        fi
+        # RE sub-mode change check.
+        if [ ! "$current_re_submode" = "$new_re_submode" ]; then
+            __repacd_info "New auto-derived RE sub-mode=$new_re_submode"
+
+            uci_set repacd repacd AssocDerivedRESubMode "$new_re_submode"
+            uci_commit repacd
+
+            # As of now, no special handling required for "star" and "daisy" submodes.
+            # So just keep the Current and New RE-submode in sync.
+            current_re_submode=$new_re_submode
+        fi
+
+        if [ -n "$new_state" ] && [ ! "$new_state" = "$cur_state" ]; then
+            __repacd_info "Updating LED states to $new_state"
+            repacd_led_set_states $new_state
+            cur_state=$new_state
+
+            # Depending on the startup role, look for the special states
+            # that indicate the new role should be different.
+            if [ ! "$start_role" = 'RE' ]; then  # init and NonCAP roles
+                if [ "$new_state" = "$WIFIMON_STATE_CL_ACTING_AS_RE" ]; then
+                    __repacd_info "Restarting in RE role"
+                    __repacd_restart 're'
+                    re_mode_change=0  # role change includes mode change
+                fi
+            elif [ "$start_role" = 'RE' ]; then
+                if [ "$new_state" = "$WIFIMON_STATE_CL_LINK_INADEQUATE" ] || \
+                     [ "$new_state" = "$WIFIMON_STATE_CL_LINK_SUFFICIENT" ]; then
+                    __repacd_info "Restarting in Client role"
+                    __repacd_restart 'noncap'
+                    re_mode_change=0  # role change includes mode change
+                fi
+            fi
+
+            if [ "$new_state" = "$WIFIMON_STATE_RE_SWITCH_BSTA" ]; then
+                __repacd_info "Restarting due to bSTA switch"
+                __repacd_restart 're'
+            elif [ "$new_state" = "$WIFIMON_STATE_RE_BACKHAUL_GOOD" ] ||
+                [ "$new_state" = "$WIFIMON_STATE_RE_BACKHAUL_FAIR" ] ||
+                [ "$new_state" = "$WIFIMON_STATE_RE_BACKHAUL_POOR" ]; then
+                __repacd_info "bSTA is stable; restarting wsplcd"
+                uci_set wsplcd config 'HyFiSecurity' 1
+                uci commit wsplcd
+                /etc/init.d/wsplcd restart
+
+                uci_set repacd FrontHaulMgr ForceDownOnStart 0
+                uci_commit repacd
+            fi
+        fi
+
+        # Handle any RE mode change not implicitly handled above.
+        if [ "$re_mode_change" -gt 0 ]; then
+            if [ ! "$start_role" = 'RE' ]; then  # init and NonCAP roles
+                __repacd_restart 'noncap'
+            elif [ "$start_role" = 'RE' ]; then
+                __repacd_restart 're'
+            fi
+        fi
+        # if restart_wifi and re_mode_change is not start
+        # go to determing if 2.4G backhaul interface need to down or not
+        if [ "$restart_wifi" -eq 0 ]; then
+            if [ "$re_mode_change" -eq 0 ]; then
+                repacd_wifimon_independent_channel_check
+            fi
+        fi
+    else
+        # Initialise Wi-Fi monitoring logic
+        __repacd_wifimon_init
+
+        if [ -n "$new_state" ]; then
+            __repacd_info "Setting initial LED states to $new_state"
+            repacd_led_set_states $new_state
+            cur_state=$new_state
+        fi
+    fi
+
+    if [ "$eth_mon_enabled" -eq 1 ]; then
+        repacd_ethmon_check
+    fi
+
+    if [ "$cur_role" != 'CAP' ] && [ "$alg_set" = "son" ]; then
+        repacd_backhaulmgrmon_check
+    fi
+
+    if [ "$cur_role" != 'CAP' ]; then
+        repacd_fronthaulmgrmon_check
+    fi
+
+    # Re-check the link conditions in a few seconds.
+    sleep $link_check_delay
+done
diff --git a/usr/sbin/rmmod b/usr/sbin/rmmod
new file mode 120000
index 0000000..6ea73e6
--- /dev/null
+++ b/usr/sbin/rmmod
@@ -0,0 +1 @@
+../../sbin/kmodloader
\ No newline at end of file
diff --git a/usr/sbin/snmpd b/usr/sbin/snmpd
new file mode 100755
index 0000000..16cd5e4
Binary files /dev/null and b/usr/sbin/snmpd differ
diff --git a/usr/sbin/spectraltool b/usr/sbin/spectraltool
new file mode 100755
index 0000000..bc1a9b2
Binary files /dev/null and b/usr/sbin/spectraltool differ
diff --git a/usr/sbin/ssidsteering b/usr/sbin/ssidsteering
new file mode 100755
index 0000000..ab4c576
Binary files /dev/null and b/usr/sbin/ssidsteering differ
diff --git a/usr/sbin/tftpd b/usr/sbin/tftpd
new file mode 120000
index 0000000..f948f1a
--- /dev/null
+++ b/usr/sbin/tftpd
@@ -0,0 +1 @@
+../../bin/busybox
\ No newline at end of file
diff --git a/usr/sbin/thermaltool b/usr/sbin/thermaltool
new file mode 100755
index 0000000..3d97344
Binary files /dev/null and b/usr/sbin/thermaltool differ
diff --git a/usr/sbin/tr069_stund b/usr/sbin/tr069_stund
new file mode 100755
index 0000000..d8532c3
Binary files /dev/null and b/usr/sbin/tr069_stund differ
diff --git a/usr/sbin/tr069_upnpd b/usr/sbin/tr069_upnpd
new file mode 100755
index 0000000..55dc9c0
Binary files /dev/null and b/usr/sbin/tr069_upnpd differ
diff --git a/usr/sbin/tx99tool b/usr/sbin/tx99tool
new file mode 100755
index 0000000..d98c0a5
Binary files /dev/null and b/usr/sbin/tx99tool differ
diff --git a/usr/sbin/ubiattach b/usr/sbin/ubiattach
new file mode 100755
index 0000000..7a4e9cc
Binary files /dev/null and b/usr/sbin/ubiattach differ
diff --git a/usr/sbin/ubiblock b/usr/sbin/ubiblock
new file mode 100755
index 0000000..05f13b0
Binary files /dev/null and b/usr/sbin/ubiblock differ
diff --git a/usr/sbin/ubicrc32 b/usr/sbin/ubicrc32
new file mode 100755
index 0000000..c84be33
Binary files /dev/null and b/usr/sbin/ubicrc32 differ
diff --git a/usr/sbin/ubidetach b/usr/sbin/ubidetach
new file mode 100755
index 0000000..8b26211
Binary files /dev/null and b/usr/sbin/ubidetach differ
diff --git a/usr/sbin/ubiformat b/usr/sbin/ubiformat
new file mode 100755
index 0000000..1c097be
Binary files /dev/null and b/usr/sbin/ubiformat differ
diff --git a/usr/sbin/ubimkvol b/usr/sbin/ubimkvol
new file mode 100755
index 0000000..a24117e
Binary files /dev/null and b/usr/sbin/ubimkvol differ
diff --git a/usr/sbin/ubinfo b/usr/sbin/ubinfo
new file mode 100755
index 0000000..2231f84
Binary files /dev/null and b/usr/sbin/ubinfo differ
diff --git a/usr/sbin/ubinize b/usr/sbin/ubinize
new file mode 100755
index 0000000..1a0fe85
Binary files /dev/null and b/usr/sbin/ubinize differ
diff --git a/usr/sbin/ubirename b/usr/sbin/ubirename
new file mode 100755
index 0000000..39b067a
Binary files /dev/null and b/usr/sbin/ubirename differ
diff --git a/usr/sbin/ubirmvol b/usr/sbin/ubirmvol
new file mode 100755
index 0000000..27bec8c
Binary files /dev/null and b/usr/sbin/ubirmvol differ
diff --git a/usr/sbin/ubirsvol b/usr/sbin/ubirsvol
new file mode 100755
index 0000000..855ad60
Binary files /dev/null and b/usr/sbin/ubirsvol differ
diff --git a/usr/sbin/ubiupdatevol b/usr/sbin/ubiupdatevol
new file mode 100755
index 0000000..86862ff
Binary files /dev/null and b/usr/sbin/ubiupdatevol differ
diff --git a/usr/sbin/ucpkgen b/usr/sbin/ucpkgen
new file mode 100755
index 0000000..39540b3
Binary files /dev/null and b/usr/sbin/ucpkgen differ
diff --git a/usr/sbin/uhttpd b/usr/sbin/uhttpd
new file mode 100755
index 0000000..b58c4da
Binary files /dev/null and b/usr/sbin/uhttpd differ
diff --git a/usr/sbin/update-ca-certificates b/usr/sbin/update-ca-certificates
new file mode 100755
index 0000000..ac59ae9
--- /dev/null
+++ b/usr/sbin/update-ca-certificates
@@ -0,0 +1,205 @@
+#!/bin/sh -e
+#
+# update-ca-certificates
+#
+# Copyright (c) 2003 Fumitoshi UKAI <ukai@debian.or.jp>
+# Copyright (c) 2009 Philipp Kern <pkern@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1301,
+# USA.
+#
+
+verbose=0
+fresh=0
+default=0
+CERTSCONF=/etc/ca-certificates.conf
+CERTSDIR=/usr/share/ca-certificates
+LOCALCERTSDIR=/usr/local/share/ca-certificates
+CERTBUNDLE=ca-certificates.crt
+ETCCERTSDIR=/etc/ssl/certs
+HOOKSDIR=/etc/ca-certificates/update.d
+
+while [ $# -gt 0 ];
+do
+  case $1 in
+    --verbose|-v)
+      verbose=1;;
+    --fresh|-f)
+      fresh=1;;
+    --default|-d)
+      default=1
+      fresh=1;;
+    --certsconf)
+      shift
+      CERTSCONF="$1";;
+    --certsdir)
+      shift
+      CERTSDIR="$1";;
+    --localcertsdir)
+      shift
+      LOCALCERTSDIR="$1";;
+    --certbundle)
+      shift
+      CERTBUNDLE="$1";;
+    --etccertsdir)
+      shift
+      ETCCERTSDIR="$1";;
+    --hooksdir)
+      shift
+      HOOKSDIR="$1";;
+    --help|-h|*)
+      echo "$0: [--verbose] [--fresh]"
+      exit;;
+  esac
+  shift
+done
+
+if [ ! -s "$CERTSCONF" ]
+then
+  fresh=1
+fi
+
+cleanup() {
+  rm -f "$TEMPBUNDLE"
+  rm -f "$ADDED"
+  rm -f "$REMOVED"
+}
+trap cleanup 0
+
+# Helper files.  (Some of them are not simple arrays because we spawn
+# subshells later on.)
+TEMPBUNDLE="$(mktemp -t "${CERTBUNDLE}.tmp.XXXXXX")"
+ADDED="$(mktemp -t "ca-certificates.tmp.XXXXXX")"
+REMOVED="$(mktemp -t "ca-certificates.tmp.XXXXXX")"
+
+# Adds a certificate to the list of trusted ones.  This includes a symlink
+# in /etc/ssl/certs to the certificate file and its inclusion into the
+# bundle.
+add() {
+  CERT="$1"
+  PEM="$ETCCERTSDIR/$(basename "$CERT" .crt | sed -e 's/ /_/g' \
+                                                  -e 's/[()]/=/g' \
+                                                  -e 's/,/_/g').pem"
+  if ! test -e "$PEM" || [ "$(readlink "$PEM")" != "$CERT" ]
+  then
+    ln -sf "$CERT" "$PEM"
+    echo "+$PEM" >> "$ADDED"
+  fi
+  # Add trailing newline to certificate, if it is missing (#635570)
+  sed -e '$a\' "$CERT" >> "$TEMPBUNDLE"
+}
+
+remove() {
+  CERT="$1"
+  PEM="$ETCCERTSDIR/$(basename "$CERT" .crt).pem"
+  if test -L "$PEM"
+  then
+    rm -f "$PEM"
+    echo "-$PEM" >> "$REMOVED"
+  fi
+}
+
+cd "$ETCCERTSDIR"
+if [ "$fresh" = 1 ]; then
+  echo "Clearing symlinks in $ETCCERTSDIR..."
+  find . -type l -print | while read symlink
+  do
+    case $(readlink "$symlink") in
+      $CERTSDIR*|$LOCALCERTSDIR*) rm -f $symlink;;
+    esac
+  done
+  find . -type l -print | while read symlink
+  do
+    test -f "$symlink" || rm -f "$symlink"
+  done
+  echo "done."
+fi
+
+echo "Updating certificates in $ETCCERTSDIR..."
+
+# Add default certificate authorities if requested
+if [ "$default" = 1 ]; then
+  find -L "$CERTSDIR" -type f -name '*.crt' | sort | while read crt
+  do
+    add "$crt"
+  done
+fi
+
+# Handle certificates that should be removed.  This is an explicit act
+# by prefixing lines in the configuration files with exclamation marks (!).
+sed -n -e '/^$/d' -e 's/^!//p' "$CERTSCONF" | while read crt
+do
+  remove "$CERTSDIR/$crt"
+done
+
+sed -e '/^$/d' -e '/^#/d' -e '/^!/d' "$CERTSCONF" | while read crt
+do
+  if ! test -f "$CERTSDIR/$crt"
+  then
+    echo "W: $CERTSDIR/$crt not found, but listed in $CERTSCONF." >&2
+    continue
+  fi
+  add "$CERTSDIR/$crt"
+done
+
+# Now process certificate authorities installed by the local system
+# administrator.
+if [ -d "$LOCALCERTSDIR" ]
+then
+  find -L "$LOCALCERTSDIR" -type f -name '*.crt' | sort | while read crt
+  do
+    add "$crt"
+  done
+fi
+
+rm -f "$CERTBUNDLE"
+
+ADDED_CNT=$(wc -l < "$ADDED")
+REMOVED_CNT=$(wc -l < "$REMOVED")
+
+if [ "$ADDED_CNT" -gt 0 ] || [ "$REMOVED_CNT" -gt 0 ]
+then
+  # only run if set of files has changed
+  if [ "$verbose" = 0 ]
+  then
+    c_rehash . > /dev/null
+  else
+    c_rehash .
+  fi
+fi
+
+chmod 0644 "$TEMPBUNDLE"
+mv -f "$TEMPBUNDLE" "$CERTBUNDLE"
+# Restore proper SELinux label after moving the file
+[ -x /sbin/restorecon ] && /sbin/restorecon "$CERTBUNDLE" >/dev/null 2>&1
+
+echo "$ADDED_CNT added, $REMOVED_CNT removed; done."
+
+if [ -d "$HOOKSDIR" ]
+then
+
+  echo "Running hooks in $HOOKSDIR..."
+  VERBOSE_ARG=
+  [ "$verbose" = 0 ] || VERBOSE_ARG="--verbose"
+  eval run-parts "$VERBOSE_ARG" --test -- "$HOOKSDIR" | while read hook
+  do
+    ( cat "$ADDED"
+      cat "$REMOVED" ) | "$hook" || echo "E: $hook exited with code $?."
+  done
+  echo "done."
+
+fi
+
+# vim:set et sw=2:
diff --git a/usr/sbin/update_wifi_client_list.sh b/usr/sbin/update_wifi_client_list.sh
new file mode 100755
index 0000000..775917c
--- /dev/null
+++ b/usr/sbin/update_wifi_client_list.sh
@@ -0,0 +1,162 @@
+#!/bin/sh
+. /usr/share/libubox/jshn.sh
+
+FILE=/tmp/clientlist.json
+CLEANUP_TIME=$((7*24*60*60))    # one week
+UPTIME=$(cut -d. -f1 < /proc/uptime)
+CMD="$1"
+MAC="$2"
+RADIO="$3"
+SSID="$4"
+
+PROPAGATE_CHANGES=""
+
+add_object () {
+    json_add_object
+    json_add_string mac "$MAC"
+    json_add_string radio "$RADIO"
+    json_add_string ssid "$SSID"
+    json_add_int connected 1
+    json_add_int time_stamp "$UPTIME"
+    json_close_object
+}
+
+remove_object () {
+    unset ${JSON_CUR}_${1}
+}
+
+connect_client () {
+    local CONNECTED="$(cat ${FILE} | jsonfilter -e "@.clients[@.mac=\"${MAC}\"].connected")"
+    if [ -z "${CONNECTED}" ] || [ "${CONNECTED}" = "0" ]; then
+        PROPAGATE_CHANGES="1"
+        json_init
+        if [ ! -f "$FILE" ]; then
+            json_add_array "clients"
+            add_object
+            json_close_array
+        else
+            local Idx="$(cat ${FILE} | jsonfilter -e '@.clients[@].mac' | grep ${MAC} -n | cut -d':' -f1)"
+            json_load "$(cat $FILE)"
+            json_select "clients"
+            if [ -z "${Idx}" ]; then
+                add_object
+            else
+                json_select $Idx
+                json_add_string radio "$RADIO"
+                json_add_string ssid "$SSID"
+                json_add_int connected 1
+                json_add_int time_stamp "$UPTIME"
+            fi
+        fi
+        json_dump > $FILE
+    fi
+}
+
+disconnect_client () {
+    local CONNECTED="$(cat ${FILE} | jsonfilter -e "@.clients[@.mac=\"${MAC}\"].connected")"
+    if [ "${CONNECTED}" = "1" ]; then
+        PROPAGATE_CHANGES="1"
+	local Idx="$(cat ${FILE} | jsonfilter -e '@.clients[@].mac' | grep ${MAC} -n | cut -d':' -f1)"
+	if [ ! -z "${Idx}" ]; then
+	    json_init
+            json_load "$(cat $FILE)"
+            json_select "clients"
+            json_select $Idx
+            local time_stamp persist
+            json_get_var time_stamp time_stamp
+            json_get_var persist persist
+            if [ $(($UPTIME-$time_stamp)) -le 5 ] && [ "$persist" != "1" ]; then
+		json_add_int connected -1
+            else
+		json_add_int persist 1
+		json_add_int connected 0
+            fi
+	    json_dump > $FILE
+	fi
+    fi
+}
+
+read_list () {
+    local SSID="$1"
+    json_init
+    if [ -e "$FILE" ]; then
+        json_load "$(cat $FILE)"
+    fi
+    json_dump
+}
+
+cleanup_list () {
+    if [ ! -e "$FILE" ]; then
+        echo "No client list found"
+        return
+    fi
+    json_init
+    json_load "$(cat $FILE)"
+    json_select clients
+    local Idx=1
+    while json_get_type type $Idx && [ "$type" = object ]; do
+        json_select $Idx
+        local ts
+        json_get_var ts time_stamp
+        json_select ..
+        if [ $(($UPTIME-$ts)) -gt $CLEANUP_TIME ]; then
+            remove_object $Idx
+        fi
+        Idx=$((Idx+1))
+    done
+    json_dump > $FILE
+}
+
+show_list () {
+    if [ ! -e "$FILE" ]; then
+        echo "No client list found"
+        return
+    fi
+    json_init
+    json_load "$(cat $FILE)"
+    json_select clients
+    echo "   MAC Address         Date/time             Online  Radio  SSID"
+    local Idx=1
+    while json_get_type type $Idx && [ "$type" = object ]; do
+        local mac radio ssid connected ts
+        json_select $Idx
+        json_get_var mac mac
+        json_get_var radio radio
+        json_get_var ssid ssid
+        json_get_var connected connected
+        json_get_var ts time_stamp
+        echo "$Idx: $mac   $(date +%F_%X -d @$(($(date +%s)-$ts)))   $connected        $radio      $ssid"
+        json_select ..
+        Idx=$((Idx+1))
+    done
+}
+
+case "$CMD" in
+    assoc)
+        connect_client
+        [ -z "${PROPAGATE_CHANGES}" ] || /usr/bin/station_quota.sh --event "${CMD}" --mac "${MAC}"
+        ;;
+    cleanup)
+        cleanup_list
+        ;;
+    disassoc)
+        disconnect_client
+        [ -z "${PROPAGATE_CHANGES}" ] || /usr/bin/station_quota.sh --event "${CMD}" --mac "${MAC}"
+        ;;
+    read)
+        read_list $2
+        ;;
+    show)
+        show_list
+        ;;
+    *)
+        echo "$0 <command> <MAC> <radio> <ssid>"
+        echo
+        echo "commands:"
+        echo "    assoc    <MAC> <radio> <ssid>"
+        echo "    cleanup"
+        echo "    disassoc <MAC>"
+        echo "    read"
+        echo "    show"
+        ;;
+esac
diff --git a/usr/sbin/updateled.sh b/usr/sbin/updateled.sh
new file mode 100755
index 0000000..7193107
--- /dev/null
+++ b/usr/sbin/updateled.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/etc/init.d/updateLeds reload
diff --git a/usr/sbin/wifi-eventd b/usr/sbin/wifi-eventd
new file mode 100755
index 0000000..590e29f
--- /dev/null
+++ b/usr/sbin/wifi-eventd
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+
+logger() {
+	command logger -t wifi-eventd "$@"
+}
+
+ssid_of_device() {
+	local DEVICE=${1}
+	ubus call uci state "{\"config\":\"wireless\",\"type\":\"wifi-iface\",\"match\":{\"ifname\":\"${DEVICE}\"}}" | jsonfilter  -e '$.values.*.ssid'
+}
+
+iw_event() {
+	local a
+	acfg_tool -e | while : ;do
+		read a
+		MAC=$(echo ${a} | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | tr [a-z] [A-Z])
+		case "$a" in
+		*"Event disassoc"*|\
+		*"Event deauth"*)
+			if [ "${MAC}" != "FF:FF:FF:FF:FF:FF" ]; then
+				echo " del station"
+				/usr/sbin/update_wifi_client_list.sh disassoc "${MAC}"
+			fi
+			;;
+		*"Event assoc"*)
+			if [ "${MAC}" != "FF:FF:FF:FF:FF:FF" ]; then
+				echo " new station"
+				DEVICE=$(echo ${a} | awk -F: '{print $1}')
+				RADIO=${DEVICE:3:1}
+				SSID=$(ssid_of_device ${DEVICE})
+				/usr/sbin/update_wifi_client_list.sh assoc "${MAC}" "${RADIO}" "${SSID}"
+			fi
+			;;
+		esac
+	done
+}
+
+trap 'trap - TERM INT; kill 0; exit' TERM INT
+iw_event &
+wait
+exit 0
diff --git a/usr/sbin/wifi_guest.sh b/usr/sbin/wifi_guest.sh
new file mode 100755
index 0000000..0669307
--- /dev/null
+++ b/usr/sbin/wifi_guest.sh
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+SCRIPT=$0
+# remember, if radio state was changed
+radio_state_changed=0
+
+_rm_cron_script()
+{
+    crontab -l | grep -v "$1" | sort -u | crontab -
+}
+
+set_radio_state() {
+    local cfg="$1"
+    local wifi_disabled="$2"
+
+    # check if wifi-iface is a guest wifi-iface if not return
+    [ "$(config_get $1 disabled)" != "1" ] &&
+    [ "$(config_get $1 dvl_guest)" = "1" ] || return
+
+    uci_set wireless "$cfg" disabled $wifi_disabled
+    radio_state_changed=1
+    uci_remove wireless guest_wifi starttime
+
+}
+
+disable_guest_wifi()
+{
+    _rm_cron_script "${SCRIPT} stop"
+
+    config_foreach set_radio_state wifi-iface 1
+
+    [ "$radio_state_changed" -eq 1 ] && { 
+        uci_commit wireless
+        local reload=$1
+        [ -n "$reload" ] && reload=1
+        [ "$reload" -eq 1 ] && reload_config # use procd to check for config changes
+    }
+}
+
+usage()
+{
+    echo ""
+    echo "$0 stop|help"
+    echo ""
+    echo "    UCI Config File: /etc/config/wireless"
+    echo ""
+    echo "    stop: Stop guest wifi."
+    echo "    help: This description."
+    echo ""
+}
+
+###############################################################################
+# MAIN
+###############################################################################
+
+config_load wireless
+
+case "$1" in
+    stop) disable_guest_wifi "$@";;
+    help|--help|-h|*) usage ;;
+esac
diff --git a/usr/sbin/wifi_try b/usr/sbin/wifi_try
new file mode 100755
index 0000000..0b4db30
--- /dev/null
+++ b/usr/sbin/wifi_try
@@ -0,0 +1,218 @@
+#!/bin/sh
+#
+# Copyright (c) 2017 Qualcomm Technologies, Inc.
+#
+# All Rights Reserved.
+# Confidential and Proprietary - Qualcomm Technologies, Inc.
+#
+#
+# Copyright (c) 2014, The Linux Foundation. All rights reserved.
+#
+
+. /lib/config/uci.sh
+
+DEBUG=
+
+WPA_CLI() {
+	local iface=$1;shift
+	local opt
+	case ${iface} in
+		global) opt="-g /var/run/wpa_supplicant-${iface}" ;;
+		*) opt="-p /var/run/wpa_supplicant-${iface} -i ${iface}";;
+	esac
+	if [ -n "${DEBUG}" ]; then
+		echo wpa_cli ${opt} "$@" >&2
+		wpa_cli ${opt} "$@" || exit 2
+		return 0
+	fi
+	wpa_cli ${opt} "$@" >/dev/null 2>&1 || exit 2
+}
+
+showhelp() {
+	cat << EOF
+  $0 -c <chan> -s <ssid> -a <auth>
+     [-p <passphrase>] [-k key] [-i index] [ -t timeout ] [ -d ]
+
+  Mandatory parameters:
+    -c <chan>: Search on channel <chan>
+    -s <ssid>: Connect to SSID <ssid>
+    -a <auth>: Use authentication <auth>, where <auth> can be one of:
+        "open": No authentication
+        "wep": WEP authentication
+        "wpa": WPA/WPA2 authentication
+
+  Optional parameters:
+    -p <passphrase>: (WEP or WPA only) Set the WEP (string) or WPA passphrase
+    -k <key>: (WEP only) Set the key (hex key only, either 5 or 13 bytes len)
+    -i <index>: (WEP only) Set the key index (0-3)
+    -t <timeout>: Set the connection timeout (in seconds) - default=4
+    -d : enable debug
+    -h : print this help
+
+  Return value:
+    0: Connection Success
+    1: Connection Failed
+    2: Error
+EOF
+}
+
+check_params() {
+	local chan=$1
+	local auth=$2
+	local psk=$3
+	local key=$4
+	local index=$5
+
+	if [ -z "${chan}" ] || [ -z "${auth}" ] || [ -z "${ssid}" ]; then
+		echo "Error: channel, ssid or authentication not found" >&2
+		return 1
+	fi
+
+	if [ ! ${chan} -ge 1 ] && [ ! ${chan} -le 13 ] || \
+	[ ! ${chan} -ge 36 ] && [ ! ${chan} -le 64 ] && [ ! $((${chan}%4)) -eq 0 ] || \
+	[ ! ${chan} -ge 100 ] && [ ! ${chan} -le 150 ] && [ ! $((${chan}%4)) -eq 0 ]; then
+		echo "Invalid channel \"${chan}\"" >&2
+		echo "Please specify a valid channel in the following range:" >&2
+		echo " *1-13" >&2
+		echo " *36-64 (HT20 aligned) " >&2
+		echo " *100-150 (HT20 aligned) " >&2
+		return 1;
+	fi
+
+	# Using passphrase and/or key and/or index in Open mode is inconsistent
+	if [ "${auth}" = "open" ]; then
+		if [ -n "${key}" -o -n "${index}" -o -n "${psk}" ]; then
+			echo "Open mode can't be used with passphrase/key/index" >&2
+			return 1
+		fi
+	fi
+
+	# If wep is used, make sure we also got a key & its index
+	if [ "${auth}" = "wep" ]; then
+		if [ -z "${key}" ] || [ -z "${index}" ]; then
+			echo "In WEP, please specify the key and index" >&2
+			return 1
+		fi
+	fi
+
+	# Having a key and/or index with non-WEP encryption is inconsistent
+	if [ "${auth}" != "wep" ]; then
+		if [ -n "${key}" -o -n "${index}" ]; then
+			echo "Index/Key can't be used with non-WEP authentication " >&2
+			return 1
+		fi
+	fi
+
+	# If wpa is used, make sure we also got a passphrase
+	if [ "${auth}" = "wpa" ]; then
+		if [ -z "${psk}" ]; then
+			echo "In WPA, please specify a passphrase" >&2
+			return 1
+		fi
+	fi
+
+	return 0
+}
+
+# Process arguments
+chan ssid auth psk key index
+timeout=4
+while [ -n "$1" ];do
+	case "$1" in
+	-c) chan="$2"; shift;;
+	-s) ssid=$2; shift;;
+	-a) auth=$2; shift
+		[ ${auth} = "open" ] || [ ${auth} = "wep" ] || [ ${auth} = "wpa" ] || {
+			echo "Invalid authentication \"${auth}\"" >&2
+			echo "Valid authentication values are \"open\", \"wep\", \"wpa\"" >&2
+			showhelp
+			exit 2;
+		};;
+	-p) psk=$2; shift;;
+	-k) key=$2; shift;;
+	-i) index=$2; shift
+		if [ ! ${index} -ge 0 ] && [ ! ${index} -le 3 ]; then
+			echo "Invalid index \"${index}\"" >&2
+			echo "Valid index values are \"0\", \"1\", \"2\", \"3\"" >&2
+			showhelp
+			exit 2
+		fi;;
+	-t) timeout=$2; shift;;
+	-d) DEBUG=1;;
+	-h) showhelp; exit 2;;
+	*)
+		echo "Invalid opton: -${OPTARG}" >&2
+		showhelp
+		exit 2
+		;;
+	esac
+	shift
+done
+# Perform sanity checks on the script arguments
+check_params "${chan}" "${auth}" "${psk}" "${key}" "${index}" || {
+	showhelp
+	exit 2
+}
+
+
+# Ok, we're ready. Let's perform the WiFi operations now
+
+# Step 1: we create the interface and launch the right wpa daemons
+nid
+oldchan=$(uci_get wireless @wifi-device[0] channel)
+iface=$(wlanconfig ath create wlandev wifi0 wlanmode sta)
+
+wpa_supplicant -g /var/run/wpa_supplicant-global -B -P /var/run/wpa_supplicant-configme.pid > /dev/null 2>&1
+WPA_CLI global interface_add ${iface} "" athr /var/run/wpa_supplicant-${iface}
+nid=$(wpa_cli -p /var/run/wpa_supplicant-${iface} -i ${iface} add_network)
+
+# Step 2: we set the network parameters
+WPA_CLI ${iface} set_network ${nid} ssid \"${ssid}\"
+WPA_CLI ${iface} set_network ${nid} scan_freq ${chan}
+WPA_CLI ${iface} set_network ${nid} scan_ssid 1
+case ${auth} in
+	"open")
+		WPA_CLI ${iface} set_network ${nid} key_mgmt NONE
+		;;
+	"wep")
+		WPA_CLI ${iface} set_network ${nid} key_mgmt NONE
+		WPA_CLI ${iface} set_network ${nid} wep_key${index} \"${key}\"
+		WPA_CLI ${iface} set_network ${nid} wep_tx_keyidx ${index}
+		;;
+	"wpa")
+		WPA_CLI ${iface} set_network ${nid} key_mgmt WPA-PSK
+		WPA_CLI ${iface} set_network ${nid} psk \"${psk}\"
+		;;
+esac
+
+# Step 3: we enable the network with the previously set parameters
+WPA_CLI ${iface} enable_network ${nid}
+
+conn_state=
+while [ ${timeout} -gt 0 ]; do
+	sleep 1
+	conn_state=$(wpa_cli -p /var/run/wpa_supplicant-${iface} -i ${iface} status 2>/dev/null | grep wpa_state | cut -d= -f2)
+	if [ ${conn_state} = "COMPLETED" ]; then
+		break;
+	fi
+	timeout=$((--timeout))
+done
+
+# Step 4: Clean-up
+if [ ${conn_state} != "COMPLETED" ]; then
+	echo "Timeout --> connection failed"
+	WPA_CLI ${iface} remove_network ${nid}
+	WPA_CLI global interface_remove ${iface}
+	iwconfig ath0 channel ${oldchan}
+	wlanconfig ${iface} destroy
+	kill $(cat /var/run/wpa_supplicant-configme.pid)
+	exit 1
+fi
+
+echo "Connection success"
+WPA_CLI ${iface} remove_network ${nid}
+WPA_CLI global interface_remove ${iface}
+iwconfig ath0 channel ${oldchan}
+wlanconfig ${iface} destroy
+kill $(cat /var/run/wpa_supplicant-configme.pid)
+exit 0
diff --git a/usr/sbin/wifitool b/usr/sbin/wifitool
new file mode 100755
index 0000000..7971b84
Binary files /dev/null and b/usr/sbin/wifitool differ
diff --git a/usr/sbin/wlanconfig b/usr/sbin/wlanconfig
new file mode 100755
index 0000000..98dd104
Binary files /dev/null and b/usr/sbin/wlanconfig differ
diff --git a/usr/sbin/wpa_cli b/usr/sbin/wpa_cli
new file mode 100755
index 0000000..75c36d0
Binary files /dev/null and b/usr/sbin/wpa_cli differ
diff --git a/usr/sbin/wpa_supplicant b/usr/sbin/wpa_supplicant
new file mode 100755
index 0000000..eb1fb64
Binary files /dev/null and b/usr/sbin/wpa_supplicant differ
diff --git a/usr/sbin/wps_enhc b/usr/sbin/wps_enhc
new file mode 100755
index 0000000..4ba599b
Binary files /dev/null and b/usr/sbin/wps_enhc differ
diff --git a/usr/sbin/wsplcd b/usr/sbin/wsplcd
new file mode 100755
index 0000000..f9a9de6
Binary files /dev/null and b/usr/sbin/wsplcd differ
diff --git a/usr/sbin/xmppd b/usr/sbin/xmppd
new file mode 100755
index 0000000..511ae61
Binary files /dev/null and b/usr/sbin/xmppd differ
diff --git a/usr/sbin/xtables-multi b/usr/sbin/xtables-multi
new file mode 100755
index 0000000..491f2f0
Binary files /dev/null and b/usr/sbin/xtables-multi differ
diff --git a/usr/share/configsync.d/common/radio b/usr/share/configsync.d/common/radio
new file mode 100755
index 0000000..5db14c6
--- /dev/null
+++ b/usr/share/configsync.d/common/radio
@@ -0,0 +1,193 @@
+#!/bin/sh
+
+#TODO: debugging
+#logfile="/tmp/`basename $0`.log"
+#exec 3<> "$logfile"
+#exec >&3
+#exec 2>&3
+
+#set -x
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+SERVICE=wireless
+PSERVICE=${CS_PREFIX}${SERVICE}
+RADIO=wifi
+CS_SERVICE=$1; shift
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+        my_logger "This is ${0}/configsync_to_system()!"
+
+        CS_RADIO=$1
+        CS_HWMODE=$2
+
+        # === radio options ===
+
+        hwmode=
+        I=0
+        while uci_tmp get ${PSERVICE}."$RADIO"$I >/dev/null 2>&1
+        do
+            device="$RADIO"$I
+            if [ "$( uci_tmp get ${PSERVICE}.$device.hwmode )" = $CS_HWMODE ] ; then
+                hwmode=$CS_HWMODE
+                break
+            fi
+
+            I=$((I+1))
+        done
+
+        if [ -z "$hwmode" ] ; then
+            my_logger "INFO: no $CS_RADIO GHz radio found. Exiting."
+            return 1
+        fi
+
+        # make working copy and get values from there step by step
+        uci_tmp revert $CS_SERVICE
+        uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+        # Note: UCI lists are not supported by this construct. They are
+        # awkward in handling anyways and thus should not be used if
+        # possible.
+        # TODO: complete the set of options
+        synced_options="htmode
+disabled
+cfg_disabled
+country"
+        for synced_option in $synced_options; do
+            VALUE="$( uci_tmp get ${CS_SERVICE}.radio.$synced_option )"
+            uci_tmp set ${PSERVICE}.$device.$synced_option="$VALUE"
+        done
+
+
+        # === iface options ===
+
+        synced_options="device
+disabled
+ssid
+encryption
+key
+dvl_main
+dvl_guest
+network
+mode
+wds
+ieee80211w
+wps_config
+uapsd
+rrm
+wnm
+rsn_preauth
+ieee80211r
+hidden
+isolate
+maxassoc
+wps_config"
+
+        # Note: UCI lists are not supported by this construct
+        # TODO: check the set of options
+
+        # loop system configuration: delete deleted interfaces (SSID|MODE)
+        J=0
+        while uci_tmp get ${PSERVICE}.@wifi-iface[$J]
+        do
+            DELETE=1
+            P_SSID="$( uci_tmp get ${PSERVICE}.@wifi-iface[$J].ssid )"
+            P_MODE="$( uci_tmp get ${PSERVICE}.@wifi-iface[$J].mode )"
+            iface_device="$( uci_tmp get ${PSERVICE}.@wifi-iface[$J].device )"
+
+            if [ "$device" = "$iface_device" ]; then
+                I=0
+                while uci_tmp get ${CS_SERVICE}.@wifi-iface[$I]
+                do
+                    CS_SSID="$( uci_tmp get ${CS_SERVICE}.@wifi-iface[$I].ssid )"
+                    CS_MODE="$( uci_tmp get ${CS_SERVICE}.@wifi-iface[$I].mode )"
+                    if [ "${P_SSID}" = "${CS_SSID}" ] && [ "${P_MODE}" = "${CS_MODE}" ]; then
+                        DELETE=0
+                        break
+                    fi
+                    I=$((I+1))
+                done
+            else
+                DELETE=0
+            fi
+
+            if [ $DELETE -eq 1 ]; then
+                uci_tmp delete $PSERVICE.@wifi-iface[$J]
+            else
+                J=$((J+1))
+            fi
+        done
+
+
+        # loop cs configuration: and merge known interfaces and add new interfaces (SSID|MODE)
+        I=0
+        while uci_tmp get ${CS_SERVICE}.@wifi-iface[$I]
+        do
+            CS_SSID="$( uci_tmp get ${CS_SERVICE}.@wifi-iface[$I].ssid )"
+            CS_MODE="$( uci_tmp get ${CS_SERVICE}.@wifi-iface[$I].mode )"
+
+            # loop temp configuration
+            FOUND=0
+            J=0
+            while uci_tmp get ${PSERVICE}.@wifi-iface[$J]
+            do
+                iface_device="$( uci_tmp get ${PSERVICE}.@wifi-iface[$J].device )"
+
+                # delete interface if device not available (corrupt configuration)
+                if [ "$iface_device" = "" ]; then
+                    uci_tmp delete $PSERVICE.@wifi-iface[$J]
+                    continue
+                fi
+
+                # search interface in temp configuration
+                if [ "$device" = "$iface_device" ]; then
+                    P_SSID="$( uci_tmp get ${PSERVICE}.@wifi-iface[$J].ssid )"
+                    P_MODE="$( uci_tmp get ${PSERVICE}.@wifi-iface[$J].mode )"
+                    if [ "${P_SSID}" = "${CS_SSID}" ] && [ "${P_MODE}" = "${CS_MODE}" ]; then
+                        # if ssid found -> merge
+                        for synced_option in $synced_options; do
+                            VALUE="$( uci_tmp get ${CS_SERVICE}.@wifi-iface[$I].$synced_option )"
+                            uci_tmp set ${PSERVICE}.@wifi-iface[$J].$synced_option="$VALUE"
+                        done
+                        FOUND=1
+                        break
+                    fi
+                fi
+                J=$((J+1))
+            done
+
+            if [ $FOUND -eq 0 ]; then
+                # if ssid not found -> add
+                local entry=$(uci_tmp add ${PSERVICE} wifi-iface)
+                for synced_option in $synced_options; do
+                    VALUE="$( uci_tmp get ${CS_SERVICE}.@wifi-iface[$I].$synced_option )"
+                    uci_tmp set ${PSERVICE}.$entry.$synced_option="$VALUE"
+                done
+            fi
+            I=$((I+1))
+        done
+
+        add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+        my_logger "This is ${0}/dynamic_update()!"
+}
+
+init()
+{
+        my_logger "This is ${0}/init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/csghn b/usr/share/configsync.d/csghn
new file mode 100755
index 0000000..a0da2b3
--- /dev/null
+++ b/usr/share/configsync.d/csghn
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=csghn
+SERVICE=ghn
+PSERVICE=${CS_PREFIX}${SERVICE}
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+    # make working copy and get values from there step by step
+    uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+    my_logger "This is ${0} configsync_to_system()!"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.ghn.powersave)
+    uci_tmp set ${PSERVICE}.ghn.powersave="${VALUE}"
+
+    add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+    my_logger "This is ${0} dynamic_update()!"
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/csparental_control b/usr/share/configsync.d/csparental_control
new file mode 100755
index 0000000..e503c89
--- /dev/null
+++ b/usr/share/configsync.d/csparental_control
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=csparental_control
+SERVICE=parental_control
+PSERVICE=${CS_PREFIX}${SERVICE}
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+    # make working copy and get values from there step by step
+    uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+    my_logger "This is ${0} configsync_to_system()!"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.global.logging)
+    uci_tmp set ${PSERVICE}.@global[0].logging="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.global.enabled)
+    uci_tmp set ${PSERVICE}.@global[0].enabled="${VALUE}"
+
+    delete_sections_tmp ${PSERVICE} entry
+
+    local option synced_options='stations daysofweek starttime stoptime enabled'
+    local I=0
+    while uci_tmp get ${CS_SERVICE}.@entry[${I}] > /dev/null 2>&1; do
+        local entry=$(uci_tmp add ${PSERVICE} entry)
+
+        for option in $synced_options; do
+            VALUE=$(uci_tmp get ${CS_SERVICE}.@entry[${I}].$option)
+            uci_tmp set ${PSERVICE}.$entry.$option="${VALUE}"
+        done
+
+        let I=I+1
+    done
+
+    add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+    my_logger "This is ${0} dynamic_update()!"
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/configsync.d/csstation_quota b/usr/share/configsync.d/csstation_quota
new file mode 100755
index 0000000..4149d2a
--- /dev/null
+++ b/usr/share/configsync.d/csstation_quota
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=csstation_quota
+SERVICE=station_quota
+PSERVICE=${CS_PREFIX}${SERVICE}
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+    # make working copy and get values from there step by step
+    uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+    my_logger "This is ${0} configsync_to_system()!"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.global.logging)
+    uci_tmp set ${PSERVICE}.@global[0].logging="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.global.enabled)
+    uci_tmp set ${PSERVICE}.@global[0].enabled="${VALUE}"
+
+    delete_sections_tmp ${PSERVICE} entry
+
+    local option synced_options='station daysofweek quota'
+    local I=0
+    while uci_tmp get ${CS_SERVICE}.@entry[${I}] > /dev/null 2>&1; do
+        local entry=$(uci_tmp add ${PSERVICE} entry)
+
+        for option in $synced_options; do
+            VALUE=$(uci_tmp get ${CS_SERVICE}.@entry[${I}].$option)
+            uci_tmp set ${PSERVICE}.$entry.$option="${VALUE}"
+        done
+
+        let I=I+1
+    done
+
+    add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+    my_logger "This is ${0} dynamic_update()!"
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/cssystem b/usr/share/configsync.d/cssystem
new file mode 100755
index 0000000..ac67344
--- /dev/null
+++ b/usr/share/configsync.d/cssystem
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cssystem
+SERVICE=system
+PSERVICE=${CS_PREFIX}${SERVICE}
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+    # make working copy and get values from there step by step
+    uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+    my_logger "This is ${0} configsync_to_system()!"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.ntp.enabled)
+    uci_tmp set ${PSERVICE}.ntp.enabled="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.ntp.enable_server)
+    uci_tmp set ${PSERVICE}.ntp.enable_server="${VALUE}"
+
+    # an uci list, the trick is to use eval set
+    eval set -- "$(uci_tmp get ${CS_SERVICE}.ntp.server)"
+    uci_tmp delete ${PSERVICE}.ntp.server
+    for VALUE in "${@}"; do
+        uci_tmp add_list ${PSERVICE}.ntp.server="${VALUE}"
+    done
+
+    add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+    my_logger "This is ${0} dynamic_update()!"
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/configsync.d/cswifi_schedule b/usr/share/configsync.d/cswifi_schedule
new file mode 100755
index 0000000..b0be37f
--- /dev/null
+++ b/usr/share/configsync.d/cswifi_schedule
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cswifi_schedule
+SERVICE=wifi_schedule
+PSERVICE=${CS_PREFIX}${SERVICE}
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+    # make working copy and get values from there step by step
+    uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+    my_logger "This is ${0} configsync_to_system()!"
+
+    local option synced_options='logging forcewifidown recheck_interval modules_retries unload_modules enabled'
+    for option in $synced_options; do
+        VALUE=$(uci_tmp get ${CS_SERVICE}.global.$option)
+        uci_tmp set ${PSERVICE}.@global[0].$option="${VALUE}"
+    done
+
+    delete_sections_tmp ${PSERVICE} entry
+
+    local option synced_options='daysofweek starttime stoptime enabled'
+    local I=0
+    while uci_tmp get ${CS_SERVICE}.@entry[${I}] > /dev/null 2>&1; do
+        local entry=$(uci_tmp add ${PSERVICE} entry)
+
+        for option in $synced_options; do
+            VALUE=$(uci_tmp get ${CS_SERVICE}.@entry[${I}].$option)
+            uci_tmp set ${PSERVICE}.$entry.$option="${VALUE}"
+        done
+
+        let I=I+1
+    done
+
+    add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+    my_logger "This is ${0} dynamic_update()!"
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/configsync.d/cswifi_son b/usr/share/configsync.d/cswifi_son
new file mode 100755
index 0000000..f161828
--- /dev/null
+++ b/usr/share/configsync.d/cswifi_son
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cswifi_son
+SERVICE=wireless
+PSERVICE=${CS_PREFIX}${SERVICE}
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+    # make working copy and get values from there step by step
+    uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+    my_logger "This is ${0} configsync_to_system()!"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.son.enabled)
+    uci_tmp set ${PSERVICE}.son.enabled="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.son.airtimefairness)
+    uci_tmp set ${PSERVICE}.son.airtimefairness="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.son.bandsteering)
+    uci_tmp set ${PSERVICE}.son.bandsteering="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.son.ieee80211k)
+    uci_tmp set ${PSERVICE}.son.ieee80211k="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.son.ieee80211v)
+    uci_tmp set ${PSERVICE}.son.ieee80211v="${VALUE}"
+
+    VALUE=$(uci_tmp get ${CS_SERVICE}.son.ieee80211r)
+    uci_tmp set ${PSERVICE}.son.ieee80211r="${VALUE}"
+
+    add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+    my_logger "This is ${0} dynamic_update()!"
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/configsync.d/cswireless b/usr/share/configsync.d/cswireless
new file mode 100755
index 0000000..b6d7c37
--- /dev/null
+++ b/usr/share/configsync.d/cswireless
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cswireless
+SERVICE=wireless
+PSERVICE=${CS_PREFIX}${SERVICE}
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+        # make working copy and get values from there step by step
+        uci_cs export $CS_SERVICE | uci_tmp import $CS_SERVICE
+
+        my_logger "This is ${0}/configsync_to_system()!"
+
+        # get common wifi parameter
+
+        VALUE="$( uci_tmp get ${CS_SERVICE}.wps.min_hold_time )"
+        uci_tmp set ${PSERVICE}.wps.min_hold_time="${VALUE}"
+
+        VALUE="$( uci_tmp get ${CS_SERVICE}.wps.max_hold_time )"
+        uci_tmp set ${PSERVICE}.wps.max_hold_time="${VALUE}"
+
+        VALUE="$( uci_tmp get ${CS_SERVICE}.qcawifi.atf_mode )"
+        uci_tmp set ${PSERVICE}.qcawifi.atf_mode="${VALUE}"
+
+        VALUE="$( uci_tmp get ${CS_SERVICE}.guest_wifi.auto_switch_off )"
+        uci_tmp set ${PSERVICE}.guest_wifi.auto_switch_off="${VALUE}"
+
+        VALUE="$( uci_tmp get ${CS_SERVICE}.guest_wifi.interval )"
+        uci_tmp set ${PSERVICE}.guest_wifi.interval="${VALUE}"
+
+        VALUE="$( uci_tmp get ${CS_SERVICE}.guest_wifi.starttime )"
+        uci_tmp set ${PSERVICE}.guest_wifi.starttime="${VALUE}"
+
+        add_to_list $CS_IMPORTSERVICELIST ${SERVICE}
+}
+
+dynamic_update()
+{
+        my_logger "This is ${0}/dynamic_update()!"
+}
+
+init()
+{
+        my_logger "This is ${0}/init()!"
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/cswireless24 b/usr/share/configsync.d/cswireless24
new file mode 100755
index 0000000..43a5978
--- /dev/null
+++ b/usr/share/configsync.d/cswireless24
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cswireless24
+RADIO=wifi
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+        my_logger "This is ${0}/configsync_to_system()!"
+        $PATH_TO_CONFIGSYNC_EXECUTOR/common/radio $CS_SERVICE configsync_to_system 2.4 11g
+}
+
+dynamic_update()
+{
+        my_logger "This is ${0}/dynamic_update()!"
+        $PATH_TO_CONFIGSYNC_EXECUTOR/common/radio $CS_SERVICE dynamic_update 2.4 11g
+}
+
+init()
+{
+        my_logger "This is ${0}/init()!"
+        $PATH_TO_CONFIGSYNC_EXECUTOR/common/radio $CS_SERVICE init 2.4 11g
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/cswireless5 b/usr/share/configsync.d/cswireless5
new file mode 100755
index 0000000..df7da0a
--- /dev/null
+++ b/usr/share/configsync.d/cswireless5
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cswireless5
+RADIO=wifi
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+configsync_to_system()
+{
+        my_logger "This is ${0}/configsync_to_system()!"
+        $PATH_TO_CONFIGSYNC_EXECUTOR/common/radio $CS_SERVICE configsync_to_system 5 11a
+}
+
+dynamic_update()
+{
+        my_logger "This is ${0}/dynamic_update()!"
+        $PATH_TO_CONFIGSYNC_EXECUTOR/common/radio $CS_SERVICE dynamic_update 5 11a
+}
+
+init()
+{
+        my_logger "This is ${0}/init()!"
+        $PATH_TO_CONFIGSYNC_EXECUTOR/common/radio $CS_SERVICE init 5 11a
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "configsync_to_system" ] || [ "${1}" = "dynamic_update" ]; then
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/ghn b/usr/share/configsync.d/ghn
new file mode 100755
index 0000000..3132aaa
--- /dev/null
+++ b/usr/share/configsync.d/ghn
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=csghn
+SERVICE=ghn
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+system_to_configsync()
+{
+    my_logger "This is ${0} system_to_configsync()!"
+
+    config_load ${SERVICE}
+
+    config_get VALUE ghn powersave
+    uci_cs set ${CS_SERVICE}.ghn.powersave="${VALUE}"
+
+    uci_cs commit ${CS_SERVICE}
+    return 0
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+    if [ ! -d ${CS_CONFIGURATION_PATH} ]; then
+        mkdir -p ${CS_CONFIGURATION_PATH}
+    fi
+
+    # clear the current CS config to avoid accidental merging
+    >${CS_CONFIGURATION_PATH}/${CS_SERVICE}
+
+    uci_cs set ${CS_SERVICE}.configsync=info
+    uci_cs set ${CS_SERVICE}.configsync.version=1
+    uci_cs set ${CS_SERVICE}.ghn=ghn
+
+    system_to_configsync init
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "system_to_configsync" ]; then
+    "${@}"
+else
+    my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/parental_control b/usr/share/configsync.d/parental_control
new file mode 100755
index 0000000..c369c4d
--- /dev/null
+++ b/usr/share/configsync.d/parental_control
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=csparental_control
+SERVICE=parental_control
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+system_to_configsync()
+{
+    my_logger "This is ${0} system_to_configsync()!"
+
+    config_load ${SERVICE}
+
+    copy_cs_global() {
+        config_get VALUE $1 logging
+        uci_cs set ${CS_SERVICE}.global.logging="${VALUE}"
+
+        config_get VALUE $1 enabled
+        uci_cs set ${CS_SERVICE}.global.enabled="${VALUE}"
+    }
+    config_foreach copy_cs_global global
+
+    delete_sections_cs ${CS_SERVICE} entry
+    copy_cs_entry() {
+        local entry=$(uci_cs add ${CS_SERVICE} entry)
+        local option synced_options='stations daysofweek starttime stoptime enabled'
+
+        for option in $synced_options; do
+            config_get VALUE $1 $option
+            uci_cs set ${CS_SERVICE}.$entry.$option="${VALUE}"
+        done
+    }
+    config_foreach copy_cs_entry entry
+
+    uci_cs commit ${CS_SERVICE}
+    return 0
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+    if [ ! -d ${CS_CONFIGURATION_PATH} ]; then
+        mkdir -p ${CS_CONFIGURATION_PATH}
+    fi
+
+    # clear the current CS config to avoid accidental merging
+    >${CS_CONFIGURATION_PATH}/${CS_SERVICE}
+
+    uci_cs set ${CS_SERVICE}.configsync=info
+    uci_cs set ${CS_SERVICE}.configsync.version=1
+    uci_cs set ${CS_SERVICE}.global=global
+
+    system_to_configsync init
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "system_to_configsync" ]; then
+    "${@}"
+else
+    my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/configsync.d/station_quota b/usr/share/configsync.d/station_quota
new file mode 100755
index 0000000..80be5d0
--- /dev/null
+++ b/usr/share/configsync.d/station_quota
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=csstation_quota
+SERVICE=station_quota
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+system_to_configsync()
+{
+    my_logger "This is ${0} system_to_configsync()!"
+
+    config_load ${SERVICE}
+
+    copy_cs_global() {
+        config_get VALUE $1 logging
+        uci_cs set ${CS_SERVICE}.global.logging="${VALUE}"
+
+        config_get VALUE $1 enabled
+        uci_cs set ${CS_SERVICE}.global.enabled="${VALUE}"
+    }
+    config_foreach copy_cs_global global
+
+    delete_sections_cs ${CS_SERVICE} entry
+    copy_cs_entry() {
+        local entry=$(uci_cs add ${CS_SERVICE} entry)
+        local option synced_options='station daysofweek quota'
+
+        for option in $synced_options; do
+            config_get VALUE $1 $option
+            uci_cs set ${CS_SERVICE}.$entry.$option="${VALUE}"
+        done
+    }
+    config_foreach copy_cs_entry entry
+
+    uci_cs commit ${CS_SERVICE}
+    return 0
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+    if [ ! -d ${CS_CONFIGURATION_PATH} ]; then
+        mkdir -p ${CS_CONFIGURATION_PATH}
+    fi
+
+    # clear the current CS config to avoid accidental merging
+    >${CS_CONFIGURATION_PATH}/${CS_SERVICE}
+
+    uci_cs set ${CS_SERVICE}.configsync=info
+    uci_cs set ${CS_SERVICE}.configsync.version=1
+    uci_cs set ${CS_SERVICE}.global=global
+
+    system_to_configsync init
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "system_to_configsync" ]; then
+    "${@}"
+else
+    my_logger "Unknown command ${1} in ${0}!"
+fi
diff --git a/usr/share/configsync.d/system b/usr/share/configsync.d/system
new file mode 100755
index 0000000..121cc76
--- /dev/null
+++ b/usr/share/configsync.d/system
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cssystem
+SERVICE=system
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+system_to_configsync()
+{
+    my_logger "This is ${0} system_to_configsync()!"
+
+    config_load ${SERVICE}
+
+    config_get VALUE ntp enabled
+    uci_cs set ${CS_SERVICE}.ntp.enabled="${VALUE}"
+
+    config_get VALUE ntp enable_server
+    uci_cs set ${CS_SERVICE}.ntp.enable_server="${VALUE}"
+
+    addlist()
+    {
+        uci_cs add_list ${CS_SERVICE}.ntp.server="${1}"
+    }
+    uci_cs delete ${CS_SERVICE}.ntp.server
+    config_list_foreach ntp server addlist
+
+    uci_cs commit ${CS_SERVICE}
+    return 0
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+    if [ ! -d ${CS_CONFIGURATION_PATH} ]; then
+        mkdir -p ${CS_CONFIGURATION_PATH}
+    fi
+
+    # clear the current CS config to avoid accidental merging
+    >${CS_CONFIGURATION_PATH}/${CS_SERVICE}
+
+    uci_cs set ${CS_SERVICE}.configsync=info
+    uci_cs set ${CS_SERVICE}.configsync.version=1
+    uci_cs set ${CS_SERVICE}.ntp=timeserver
+
+    system_to_configsync init
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "system_to_configsync" ]; then
+    "${@}"
+else
+    my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/configsync.d/wifi_schedule b/usr/share/configsync.d/wifi_schedule
new file mode 100755
index 0000000..ee6025f
--- /dev/null
+++ b/usr/share/configsync.d/wifi_schedule
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE=cswifi_schedule
+SERVICE=wifi_schedule
+
+my_logger() {
+    logger -t configsync_executor "${CS_SERVICE}" "${@}"
+}
+
+system_to_configsync()
+{
+    my_logger "This is ${0} system_to_configsync()!"
+
+    config_load ${SERVICE}
+
+    copy_cs_global() {
+        local option synced_options='logging forcewifidown recheck_interval modules_retries unload_modules enabled'
+
+        for option in $synced_options; do
+            config_get VALUE $1 $option
+            uci_cs set ${CS_SERVICE}.global.$option="${VALUE}"
+        done
+    }
+    config_foreach copy_cs_global global
+
+    delete_sections_cs ${CS_SERVICE} entry
+    copy_cs_entry() {
+        local entry=$(uci_cs add ${CS_SERVICE} entry)
+        local option synced_options='daysofweek starttime stoptime enabled'
+
+        for option in $synced_options; do
+            config_get VALUE $1 $option
+            uci_cs set ${CS_SERVICE}.$entry.$option="${VALUE}"
+        done
+    }
+    config_foreach copy_cs_entry entry
+
+    uci_cs commit ${CS_SERVICE}
+    return 0
+}
+
+init()
+{
+    my_logger "This is ${0} init()!"
+    if [ ! -d ${CS_CONFIGURATION_PATH} ]; then
+        mkdir -p ${CS_CONFIGURATION_PATH}
+    fi
+
+    # clear the current CS config to avoid accidental merging
+    >${CS_CONFIGURATION_PATH}/${CS_SERVICE}
+
+    uci_cs set ${CS_SERVICE}.configsync=info
+    uci_cs set ${CS_SERVICE}.configsync.version=1
+    uci_cs set ${CS_SERVICE}.global=global
+
+    system_to_configsync init
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "system_to_configsync" ]; then
+    "${@}"
+else
+    my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/configsync.d/wireless b/usr/share/configsync.d/wireless
new file mode 100755
index 0000000..b3ca155
--- /dev/null
+++ b/usr/share/configsync.d/wireless
@@ -0,0 +1,324 @@
+#!/bin/sh
+
+#TODO: debugging
+#logfile="/tmp/`basename $0`.log"
+#exec 3<> "$logfile"
+#exec >&3
+#exec 2>&3
+
+#set -x
+
+. /lib/functions.sh
+. /usr/lib/configsync_lib.sh
+
+CS_SERVICE_COMMON=cswireless
+CS_SERVICE_24=cswireless24
+CS_SERVICE_5=cswireless5
+CS_SERVICE_SON=cswifi_son
+SERVICE=wireless
+
+CS_SERVICE=
+
+my_logger() {
+    logger -t configsync_executor "${SERVICE}" "${@}"
+}
+
+copy_iface_to_cs() {
+
+    config_get iface_device $1 device
+
+    if [ "$2" = "$iface_device" ] ; then
+
+        local entry=$(uci_cs add ${CS_SERVICE} wifi-iface)
+
+        # Note: UCI lists are not supported by this construct
+        # TODO: complete the set of options
+        synced_options="device
+disabled
+ssid
+encryption
+key
+dvl_main
+dvl_guest
+network
+mode
+wds
+ieee80211w
+wps_config
+uapsd
+rrm
+wnm
+rsn_preauth
+ieee80211r
+hidden
+isolate
+maxassoc
+wps_config"
+
+        for synced_option in $synced_options; do
+            config_get VALUE $1 $synced_option
+            uci_cs set ${CS_SERVICE}.$entry.$synced_option="$VALUE"
+        done
+    fi
+}
+
+
+write_radio_to_cs() {
+    config_get HWMODE $1 hwmode
+
+    # TODO: consider require_mode '11n' too?
+    case "$HWMODE" in
+        11a)
+            # 5GHz
+            CS_SERVICE=$CS_SERVICE_5
+            RADIO_5=1
+            ;;
+        11g)
+            # 2,4GHz
+            CS_SERVICE=$CS_SERVICE_24
+            RADIO_24=1
+            ;;
+        *)
+            my_logger "ERROR: Illegal value of \$HWMODE: '$HWMODE'\n\n"
+            return 1
+    esac
+
+    # === radio options ===
+
+    uci_cs set ${CS_SERVICE}.radio=wifi-device
+
+    # Note: UCI lists are not supported by this construct. They are
+    # awkward in handling anyways and thus should not be used if
+    # possible.
+    # TODO: complete the set of options
+    synced_options="htmode
+disabled
+cfg_disabled
+country"
+
+    for synced_option in $synced_options; do
+        config_get VALUE $1 $synced_option
+        uci_cs set ${CS_SERVICE}.radio.$synced_option="$VALUE"
+    done
+
+    # === iface options ===
+
+    # Remove unnamed sections in CS config files completely and
+    # recreate them from scratch
+    delete_sections_cs ${CS_SERVICE} wifi-iface
+
+    config_foreach copy_iface_to_cs wifi-iface $1
+}
+
+##### check_common_wifi_settings process #####
+
+check_iface_config()
+{
+    local device dvl_main
+    config_get device "$1" device
+    config_get dvl_main "$1" dvl_main
+    [ "$dvl_main" = "1" ] || return
+    config_get ssid "$1" ssid
+
+    case "$device" in
+        wifi0)
+            SSID_WIFI0=$ssid;;
+        wifi1)
+            SSID_WIFI1=$ssid;;
+    esac
+}
+
+check_common_wifi_settings()
+{
+    # check common_wifi_settings
+    local UCI_CONFIG_DIR="$CS_CONFIGURATION_PATH"
+    config_load cswireless24
+    config_foreach check_iface_config wifi-iface
+    config_load cswireless5
+    config_foreach check_iface_config wifi-iface
+    [ "$SSID_WIFI0" = "$SSID_WIFI1" ]
+}
+
+##### sync_common_wifi_settings process #####
+
+get_iface_config()
+{
+    local device dvl_type
+    config_get device "$1" device
+    [ "$device" = "wifi0" ] || return
+    config_get dvl_type "$1" "$2"
+    [ "$dvl_type" = "1" ] || return
+    config_get ssid "$1" ssid
+    config_get key "$1" key
+    config_get encryption "$1" encryption
+}
+
+set_iface_config()
+{
+    local device dvl_type
+    config_get device "$1" device
+    [ "$device" = "wifi1" ] || return
+    config_get dvl_type "$1" "$2"
+    [ "$dvl_type" = "1" ] || return
+    uci_cs set ${CS_SERVICE_5}.${1}.ssid="$ssid"
+    uci_cs set ${CS_SERVICE_5}.${1}.key="$key"
+    uci_cs set ${CS_SERVICE_5}.${1}.encryption="$encryption"
+}
+
+sync_common_wifi_settings()
+{
+    local COMMON_MODE=$1
+    local UCI_CONFIG_DIR="$CS_CONFIGURATION_PATH"
+    # check wifi common config
+    if [ "$COMMON_MODE" = "1" ]; then
+        config_load cswireless24
+        config_foreach get_iface_config wifi-iface dvl_main
+        config_load cswireless5
+        config_foreach set_iface_config wifi-iface dvl_main
+    fi
+    # guest wifi common config
+    config_load cswireless24
+    config_foreach get_iface_config wifi-iface dvl_guest
+    config_load cswireless5
+    config_foreach set_iface_config wifi-iface dvl_guest
+}
+
+######################################
+
+system_to_configsync()
+{
+    my_logger "This is ${0} system_to_configsync()!"
+
+    # if there are current changes pending to $SERVICE or $CS_SERVICE, quit
+    # uci_changes_service="$( uci changes ${SERVICE} )"
+    # uci_changes_csservice="$( uci_cs changes )"
+    # if [ ! -z "$uci_changes_service" || ! -z "$uci_changes_service" ] ; then
+        # my_logger   "ERROR: pending changes to UCI configuration! Exiting." \
+                    # "Output is:" \
+                    # "$uci_changes_service\n" \
+                    # "$uci_changes_csservice"
+        # return 1
+    # fi
+
+
+    # Configsync sets md5sum for config files it writes itself.
+    # This is done to distinguish own writes from others, e.g. by webpage.
+    # Also, when configsync writes config files, it triggers sync events.
+    # The following check makes sure, the just-written config is not synced again.
+
+
+    # set common wifi parameter
+
+    config_get VALUE wps min_hold_time
+    uci_cs set ${CS_SERVICE_COMMON}.wps.min_hold_time="$VALUE"
+
+    config_get VALUE wps max_hold_time
+    uci_cs set ${CS_SERVICE_COMMON}.wps.max_hold_time="$VALUE"
+
+    config_get VALUE qcawifi atf_mode
+    uci_cs set ${CS_SERVICE_COMMON}.qcawifi.atf_mode="$VALUE"
+
+    config_get VALUE guest_wifi auto_switch_off
+    uci_cs set ${CS_SERVICE_COMMON}.guest_wifi.auto_switch_off="$VALUE"
+
+    config_get VALUE guest_wifi interval
+    uci_cs set ${CS_SERVICE_COMMON}.guest_wifi.interval="$VALUE"
+
+    config_get VALUE guest_wifi starttime
+    uci_cs set ${CS_SERVICE_COMMON}.guest_wifi.starttime="$VALUE"
+
+    config_get VALUE son enabled
+    uci_cs set ${CS_SERVICE_SON}.son.enabled="${VALUE}"
+
+    config_get VALUE son airtimefairness
+    uci_cs set ${CS_SERVICE_SON}.son.airtimefairness="${VALUE}"
+
+    config_get VALUE son bandsteering
+    uci_cs set ${CS_SERVICE_SON}.son.bandsteering="${VALUE}"
+
+    config_get VALUE son ieee80211k
+    uci_cs set ${CS_SERVICE_SON}.son.ieee80211k="${VALUE}"
+
+    config_get VALUE son ieee80211v
+    uci_cs set ${CS_SERVICE_SON}.son.ieee80211v="${VALUE}"
+
+    config_get VALUE son ieee80211r
+    uci_cs set ${CS_SERVICE_SON}.son.ieee80211r="${VALUE}"
+
+    (check_common_wifi_settings) && local COMMON_MODE=1 # call as subshell (no config_load merging)
+
+    # loop though radios, get their device names (e.g. wifi0),
+    # detect type (2,4 GHz vs 5 Ghz) and work through the corresponding interfaces
+    config_foreach write_radio_to_cs wifi-device
+
+    if [ "$RADIO_24" = "1" -a "$RADIO_5" != "1" ]; then
+        # only 2.4 GHz radio available"
+        (sync_common_wifi_settings $COMMON_MODE) # call as subshell (no config_load merging)
+    fi
+
+    uci_cs commit ${CS_SERVICE_COMMON}
+    uci_cs commit ${CS_SERVICE_24}    # returns error if no 2.4GHz radio available
+    uci_cs commit ${CS_SERVICE_5}     # returns error if no 5GHz radio available
+    uci_cs commit ${CS_SERVICE_SON}
+}
+
+
+initialize_radio() {
+    config_get HWMODE $1 hwmode
+
+    # TODO: consider require_mode '11n' too?
+    case "$HWMODE" in
+        11a)
+            # 5GHz
+            >${CS_CONFIGURATION_PATH}/${CS_SERVICE_5}
+            uci_cs set ${CS_SERVICE_5}.configsync=info
+            uci_cs set ${CS_SERVICE_5}.configsync.version=1
+            ;;
+        11g)
+            # 2,4GHz
+            >${CS_CONFIGURATION_PATH}/${CS_SERVICE_24}
+            uci_cs set ${CS_SERVICE_24}.configsync=info
+            uci_cs set ${CS_SERVICE_24}.configsync.version=1
+            ;;
+        *)
+            my_logger "ERROR: Illegal value of \$HWMODE: '$HWMODE'\n\n"
+            return 1
+    esac
+    return 0
+}
+        
+init()
+{
+    my_logger "This is ${0}/init()!"
+    if [ ! -d ${CS_CONFIGURATION_PATH} ]; then
+        mkdir -p ${CS_CONFIGURATION_PATH}
+    fi
+
+    # initialize common wireless config file
+    
+    # clear the current CS config to avoid accidental merging
+    >${CS_CONFIGURATION_PATH}/${CS_SERVICE_COMMON}
+    >${CS_CONFIGURATION_PATH}/${CS_SERVICE_SON}
+    
+    # setup needed sections
+    uci_cs set ${CS_SERVICE_COMMON}.configsync=info
+    uci_cs set ${CS_SERVICE_COMMON}.configsync.version=1
+    uci_cs set ${CS_SERVICE_COMMON}.wps=wps
+    uci_cs set ${CS_SERVICE_COMMON}.qcawifi=qcawifi
+    uci_cs set ${CS_SERVICE_COMMON}.guest_wifi=guest_wifi
+
+    uci_cs set ${CS_SERVICE_SON}.son=son
+
+    # initialize radio config files
+    config_foreach initialize_radio wifi-device
+
+    system_to_configsync init
+}
+
+if [ "${1}" = "init" ] || [ "${1}" = "system_to_configsync" ]; then
+    config_load wireless
+    "${@}"
+else
+        my_logger "Unknown command ${1} in ${0}!"
+fi
+
diff --git a/usr/share/delos-customization/variant-devolo/customization.sh b/usr/share/delos-customization/variant-devolo/customization.sh
new file mode 100644
index 0000000..6d4c853
--- /dev/null
+++ b/usr/share/delos-customization/variant-devolo/customization.sh
@@ -0,0 +1,41 @@
+_DVL_ACTIVE_VARIANT=devolo
+
+_DVL_SSID_FORMAT=sn-3
+_DVL_SSID_MAIN_PREFIX=devolo-
+_DVL_SSID_GUEST_PREFIX=devolo-guest-
+
+# _DVL_HOSTNAME_PREFIX
+
+_DVL_DEFAULT_WIFI_2G_HTMODE=HT40
+_DVL_DEFAULT_WIFI_5G_HTMODE=VHT80
+
+_DVL_OSS_LICENSE_INFO=retail
+
+_DVL_VENDOR_NAME="devolo"
+_DVL_VENDOR_URL="http://www.devolo.de"
+
+_DVL_PRODUCT_NAME_TOLEDO="Magic 1 WiFi 2-1"
+_DVL_PRODUCT_NAME_VALENCIA="Magic 2 WiFi 2-1 (v1)"
+_DVL_PRODUCT_NAME_PALMA="Magic 2 WiFi 2-1 (v2)"
+_DVL_PRODUCT_NAME_SHEFFIELD="dLAN 1000+ WiFi ac"
+_DVL_PRODUCT_NAME_AUCKLAND="dLAN 550 WiFi"
+_DVL_PRODUCT_NAME_MT2771="dLAN 550+ WiFi"
+_DVL_PRODUCT_NAME_MT2772="dLAN 550+ WiFi"
+_DVL_PRODUCT_NAME_MT2773="dLAN 550+ WiFi"
+_DVL_PRODUCT_NAME_MT2774="dLAN 550+ WiFi"
+_DVL_PRODUCT_NAME_MT2972="dLAN 550+ WiFi"
+_DVL_PRODUCT_NAME_MT3029="dLAN WiFi outdoor"
+_DVL_PRODUCT_NAME_MT3034="dLAN WiFi outdoor"
+_DVL_PRODUCT_NAME_MT3035="dLAN WiFi outdoor"
+_DVL_PRODUCT_NAME_MT2781="BEGA WiFi 550"
+_DVL_PRODUCT_NAME_1200WIFIAC="dLAN 1200+ WiFi ac"
+_DVL_PRODUCT_NAME_ZUSE="dLAN 1200+ WiFi ac"
+_DVL_PRODUCT_NAME_TURING="dLAN pro 1200+ WiFi ac"
+_DVL_PRODUCT_NAME_MT2730="dLAN pro 1200+ WiFi ac"
+_DVL_PRODUCT_NAME_MT2731="dLAN pro 1200+ WiFi ac"
+_DVL_PRODUCT_NAME_MT2732="dLAN pro 1200+ WiFi ac"
+_DVL_PRODUCT_NAME_HAMILTON="dLAN 1200+ WiFi n"
+_DVL_PRODUCT_NAME_HAMMING="dLAN pro 1200+ WiFi n"
+_DVL_PRODUCT_NAME_EW7479CAP="EW7479CAP"
+_DVL_PRODUCT_NAME_EW7679CAP="WiFi pro 1750c"
+
diff --git a/usr/share/delos-customization/variant-devolo/webui/customization.css b/usr/share/delos-customization/variant-devolo/webui/customization.css
new file mode 100644
index 0000000..d991da5
--- /dev/null
+++ b/usr/share/delos-customization/variant-devolo/webui/customization.css
@@ -0,0 +1,12 @@
+
+
+#product-name {
+    color: white !important;
+}
+
+.brand .devolo_logo {
+    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE1LjAuMiwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSI1NjYuMzdweCIgaGVpZ2h0PSIyMTEuODIxcHgiIHZpZXdCb3g9IjAgMCA1NjYuMzcgMjExLjgyMSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDU2Ni4zNyAyMTEuODIxIgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwb2x5Z29uIGZpbGw9IiM0MzQ5NEIiIHBvaW50cz0iMjcxLjgzOSw5Mi43NDkgMjg1LjMwNCw5Mi43NDkgMjUyLjAzMSwxNDEuNDUzIDIzNy45OTEsMTQxLjQ1MyAyMjYuMzI0LDkyLjc0OSAyNDEuMjM1LDkyLjc0OSAKCQkyNDguODM2LDEyOCAJIi8+Cgk8Zz4KCQk8cGF0aCBmaWxsPSIjNDM0OTRCIiBkPSJNNDY1Ljc4NSwxMzMuMDIyYzIuMDI0LDAsMi43NjItMC41NTUsMy4yMzYtMi4zODJsNi45OTEtMjYuNTIzYzAuNTg4LTIuMTk1LDAuMDg3LTIuNjE3LTEuNzY3LTIuNjE3CgkJCWgtMzEuNjAxYy0yLjA0NywwLTIuNzU3LDAuNDIzLTMuMzcyLDIuODAzbC02Ljk5MSwyNi41MDRjLTAuNDc4LDEuNzkzLTAuMTQ2LDIuMjE1LDEuOSwyLjIxNUg0NjUuNzg1eiBNNDgzLjg4NSwxMzIuMDM5CgkJCWMtMi40MDgsOS4xNjQtNS4xNTcsOS40MTQtMTYuOTMzLDkuNDE0aC00MC42ODVjLTcuMjA5LDAtMTAuNjUxLTMuMDU5LTguNjUyLTEwLjcwMWw3Ljc5LTI5LjUwMgoJCQljMS40NzMtNS41NTcsNC4yMzctOC41MDEsMTIuNjYzLTguNTAxaDQ1LjY2OGM2Ljg3LDAsOS41ODUsMy4zMTYsNy41MzYsMTEuMTM0TDQ4My44ODUsMTMyLjAzOXoiLz4KCQk8cGF0aCBmaWxsPSIjNDM0OTRCIiBkPSJNMzI5Ljg1NCwxMzMuMDIyYzIuMDI2LDAsMi43NjUtMC41NTQsMy4yMzctMi4zODJsNi45OTEtMjYuNTIzYzAuNTg4LTIuMTk1LDAuMDg3LTIuNjE2LTEuNzY2LTIuNjE2CgkJCWgtMzEuNjE4Yy0yLjA0OCwwLTIuNzU3LDAuNDIxLTMuMzczLDIuODAybC02Ljk5LDI2LjUwNGMtMC40NzgsMS43OTItMC4xNDcsMi4yMTQsMS44OTcsMi4yMTRIMzI5Ljg1NHogTTM1NC4yNDcsMTA4LjExMQoJCQlsLTYuMjkyLDIzLjkyOGMtMi40MSw5LjE2NC01LjE1OCw5LjQxNC0xNi45MzMsOS40MTRoLTQwLjcwM2MtNy4yMDksMC0xMC42NS0zLjA1OS04LjY1Mi0xMC43bDcuODIxLTI5LjY3CgkJCWMxLjM0MS01LjA1Myw0LjgzNy04LjMzNCwxMi40NTUtOC4zMzRoNDUuODI3YzcuMzM0LDAsOS4zNiw0LjM0OCw3Ljc3NiwxMC4zOTNMMzU0LjI0NywxMDguMTExeiIvPgoJCTxwYXRoIGZpbGw9IiM0MzQ5NEIiIGQ9Ik0zNzcuMDczLDEzMS42OTFsMTAuMzUyLTM4Ljk0M2gtMTUuNjE5bC0xMS4wMzksNDEuNzU4Yy0wLjk5NCwzLjU1OS0wLjI5NCw3LjA0Nyw2LjA2Niw2Ljk0Nmg0My4zNjIKCQkJbDIuMjctOC41NTdsLTM0LjQ1MywwLjA1N0MzNzYuOTUxLDEzMi45NTMsMzc2Ljg2MywxMzIuNDc5LDM3Ny4wNzMsMTMxLjY5MSIvPgoJCTxwYXRoIGZpbGw9IiM0MzQ5NEIiIGQ9Ik0xMjUuOTU2LDEwMy40MzVsLTYuOTcyLDI2LjUzOWMtMC42MSwyLjM1MS0wLjg2NiwzLjA4MS0zLjEzOCwzLjA4MUg4NC4wMDEKCQkJYy0xLjcwNSwwLTIuMDYtMC40NzMtMS41NDYtMi4zMjZsNi44OS0yNi4xNDVjMC42MDQtMi40MiwxLjA5Mi0zLjA4MiwzLjM1OC0zLjA4MmgzMS43OTYKCQkJQzEyNi4wMjUsMTAxLjUwMiwxMjYuMzM4LDEwMi4wMzYsMTI1Ljk1NiwxMDMuNDM1IE0xMzQuNjAxLDcwLjk3NmwtNS43NzQsMjEuNzc5SDg4LjQ5MmMtOC4wOTgsMC0xMS44MjIsMi42Ni0xMy4yOCw4LjE0NQoJCQlsLTcuODY1LDI5LjgzMmMtMS43NTUsNi43MTIsMC4xMDMsMTAuNzIsOC40NjksMTAuNzJoNTUuMzY3bDE4LjU3MS03MC40NzZIMTM0LjYwMXoiLz4KCQk8cGF0aCBmaWxsPSIjNDM0OTRCIiBkPSJNMjA0LjU0NSwxMDQuMDkybC0zLjIxMSwxMi4yMThoLTM2LjQ5bDMuMDk0LTExLjczMmMwLjYxNy0yLjM4LDEuNDEyLTMuMDc3LDMuNDU5LTMuMDc3aDMxLjI4NgoJCQlDMjA0Ljc0MywxMDEuNTAyLDIwNS4wNDksMTAyLjE0OCwyMDQuNTQ1LDEwNC4wOTIgTTIyMC4wODIsMTAzLjAwMWMxLjU0Mi01Ljk2Mi0wLjI4NS0xMC4yNTQtNy43MTMtMTAuMjU0aC00NC44OAoJCQljLTcuNTY1LDAtMTEuOTk5LDIuMzQxLTEzLjU4Nyw4LjM0OGwtNy44MjQsMjkuNjM1Yy0xLjYwOSw2LjE2OC0wLjg4OCwxMC43MjEsOC42NDgsMTAuNzIxaDU1LjA4OGwyLjIwMi04LjQyOGgtNDkuMjAyCgkJCWMtMS43OCwwLTIuMjA2LTAuNjQtMS42MzktMi43NDZsMS44NzctNy4xMTdsNTEuNzIxLDAuMDE0TDIyMC4wODIsMTAzLjAwMXoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K');    
+    background-repeat: no-repeat;
+    background-size: 104% auto;
+    background-position: -12px -10px;
+}
\ No newline at end of file
diff --git a/usr/share/delos-customization/variant-devolo/webui/customization.json b/usr/share/delos-customization/variant-devolo/webui/customization.json
new file mode 100644
index 0000000..57855f5
--- /dev/null
+++ b/usr/share/delos-customization/variant-devolo/webui/customization.json
@@ -0,0 +1,20 @@
+{
+    "active_variant": "___ACTIVE_VARIANT___",
+
+    "vendor_name": "___VENDOR_NAME___",
+    "vendor_url": "___VENDOR_URL___",
+    "product_name": "___PRODUCT_NAME___",
+
+    "features": {
+        "hide_update_link": false
+    },
+
+    "footer": {
+        "vendor_url": "https://www.devolo.com",
+        "manual_url_pattern": "{config.info.doc}"
+    },
+
+    "images": {
+        "favicon": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElHQsRJR0L9SUdC/0lHQv9JR0L/SUdC/0lHQv9JR0L/SUdC/0lHQv9JR0L/SUdC/0lHQqAAAAAAAAAAAAAAAABJR0LxSUdC/0lHQv9JR0JkSUdCUElHQlBJR0JQSUdCUElHQlBJR0JkSUdC/UlHQv9JR0LuSUdCBQAAAAAAAAAASUdCqElHQv9JR0L/SUdCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElHQr1JR0L/SUdC/0lHQkgAAAAAAAAAAElHQlNJR0L/SUdC/0lHQqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJR0JsSUdC/0lHQv9JR0KYAAAAAAAAAABJR0IMSUdC90lHQv9JR0L0SUdCCQAAAAAAAAAAAAAAAAAAAAAAAAAASUdCGklHQv5JR0L/SUdC6klHQgMAAAAAAAAAAElHQq1JR0L/SUdC/0lHQlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJR0LESUdC/0lHQv9JR0JBAAAAAAAAAABJR0JOSUdC/0lHQv9JR0LvSUdC0ElHQtBJR0LQSUdC0ElHQtBJR0LQSUdC70lHQv9JR0L/SUdCkwAAAAAAAAAAAAAAAElHQk9JR0KUSUdCoElHQqBJR0KgSUdCoElHQqBJR0KgSUdCoElHQqJJR0L/SUdC/0lHQuZJR0ICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUdCyElHQv9JR0L/SUdCOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElHQnNJR0L/SUdC/0lHQo0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJR0IjSUdC/0lHQv9JR0LiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAAABwAAAAMAAA/DAAAPwwAAB8EAAIfhAACAAQAAwAAAAP/wAAD/8AAA//AAAP//AAD///////8AAA=="
+    }
+}
diff --git a/usr/share/delos-fwknopd/cmd.sh b/usr/share/delos-fwknopd/cmd.sh
new file mode 100755
index 0000000..df225fc
--- /dev/null
+++ b/usr/share/delos-fwknopd/cmd.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+CMD="$1"
+PORT="$2"
+
+echo "delos-fwknopd: $CMD $PORT" > /dev/console
+
+if [ "$CMD" = "open" ]; then
+    case "$PORT" in
+        1000)
+            echo "delos-fwknopd: reboot and load firmware via TFTP" > /dev/console
+            fw_setenv FwBootSource TFTP
+            reboot
+            ;;
+    esac
+fi
diff --git a/usr/share/dlanx-standby/init-standby.sh b/usr/share/dlanx-standby/init-standby.sh
new file mode 100755
index 0000000..d830893
--- /dev/null
+++ b/usr/share/dlanx-standby/init-standby.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+EXTRA_COMMANDS="$EXTRA_COMMANDS standby normal"
+
+standby() {
+    #if on and enabled
+    [ $DISABLED = '1' ] && return
+    [ $STANDBY = '0' ] && return
+
+    case "$board" in
+    dlan2-2400-ac)
+        echo 0 > /sys/class/gpio/gpio63/value
+        ;;
+    dlan-1000-ac)
+        echo 0 > /sys/class/gpio/gpio2/value
+        ;;
+    dlan-pro-1200-ac|\
+    dlan-pro-1200-n)
+        echo 0 > /sys/class/gpio/gpio13/value
+        ;;
+    dlan-550-wifi)
+        echo 0 > /sys/class/gpio/gpio16/value
+        ;;
+    esac
+
+    # LED scheme 2014
+    [ "$LED_SCHEME" = "on" ] && {
+        led_timer "$(uci_get system led_plcw sysfs)" 500 59500
+        led_off "$(uci_get system led_plcr sysfs)"
+    }
+    led_set_attr "devolo:status:dlan" inverted 0
+}
+
+normal() {
+    #if on and enabled
+    [ $DISABLED = '1' ] && return
+    [ $STANDBY = '0' ] && return
+
+    case "$board" in
+    dlan2-2400-ac)
+        echo 1 > /sys/class/gpio/gpio63/value
+        ;;
+    dlan-1000-ac)
+        echo 1 > /sys/class/gpio/gpio2/value
+        ;;
+    dlan-pro-1200-ac|\
+    dlan-pro-1200-n)
+        echo 1 > /sys/class/gpio/gpio13/value
+        ;;
+    dlan-550-wifi)
+        echo 1 > /sys/class/gpio/gpio16/value
+        ;;
+    esac
+
+    # LED scheme 2014
+    [ "$LED_SCHEME" = "on" ] && {
+        ( . /etc/init.d/led && config_load system && load_led led_plcw && load_led led_plcr )
+    }
+    led_set_attr "devolo:status:dlan" inverted 1
+}
diff --git a/usr/share/easycwmp/functions/download b/usr/share/easycwmp/functions/download
new file mode 100755
index 0000000..2dc29d6
--- /dev/null
+++ b/usr/share/easycwmp/functions/download
@@ -0,0 +1,108 @@
+#!/bin/sh
+# Copyright (C) 2015 PIVA Software <www.pivasoftware.com>
+# 	Author: Anis Ellouze <anis.ellouze@pivasoftware.com>
+
+DOWNLOAD_DIR="/tmp/easycwmp_download"
+# Fault codes
+E_REQUEST_DENIED="1"
+E_INTERNAL_ERROR="2"
+E_INVALID_ARGUMENTS="3"
+E_RESOURCES_EXCEEDED="4"
+E_INVALID_PARAMETER_NAME="5"
+E_INVALID_PARAMETER_TYPE="6"
+E_INVALID_PARAMETER_VALUE="7"
+E_NON_WRITABLE_PARAMETER="8"
+E_NOTIFICATION_REJECTED="9"
+E_DOWNLOAD_FAILURE="10"
+E_UPLOAD_FAILURE="11"
+E_FILE_TRANSFER_AUTHENTICATION_FAILURE="12"
+E_FILE_TRANSFER_UNSUPPORTED_PROTOCOL="13"
+E_DOWNLOAD_FAIL_MULTICAST_GROUP="14"
+E_DOWNLOAD_FAIL_CONTACT_SERVER="15"
+E_DOWNLOAD_FAIL_ACCESS_FILE="16"
+E_DOWNLOAD_FAIL_COMPLETE_DOWNLOAD="17"
+E_DOWNLOAD_FAIL_FILE_CORRUPTED="18"
+E_DOWNLOAD_FAIL_FILE_AUTHENTICATION="19"
+UCI_COMMIT="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit"
+
+
+action="$1"
+file_type="$2"
+dw_url="$3"
+file_size="$4"
+user_name="$5"
+password="$6"
+
+debug() {
+	echo "$1" >&2
+}
+
+download() {
+	dl_size=`df  |grep  "/tmp$" | awk '{print $4;}'`
+	[ -n "$dl_size" ] && dl_size_byte=$((${dl_size}*1024))
+	if [ -n "$dl_size" -a "$dl_size_byte" -lt "$file_size" ]; then
+		let fault_code=9000+$E_DOWNLOAD_FAILURE
+		echo "$fault_code"
+	else 
+		rm -rf $DOWNLOAD_DIR 2> /dev/null
+		mkdir -p $DOWNLOAD_DIR
+		local url="$dw_url"
+		[ "$user_name" != "" -o "$password" != "" ] && dw_url=`echo "$url" | sed -e "s@://@://$user_name:$password\@@g"`
+		wget -P $DOWNLOAD_DIR "$dw_url"
+		fault_code="$?"
+		if [ "$fault_code" != "0" ]; then
+			rm -rf $DOWNLOAD_DIR 2> /dev/null
+			let fault_code=9000+$E_DOWNLOAD_FAILURE
+			echo "$fault_code"
+		else
+			echo "0"
+		fi
+	fi
+}
+
+apply_download() {
+	if [ "$file_type" = "3 Vendor Configuration File" ]; then 
+		dwfile=`ls $DOWNLOAD_DIR`
+		if [ "$dwfile" != "" ]; then
+			dwfile="$DOWNLOAD_DIR/$dwfile"
+			/sbin/sysupgrade --restore-backup $dwfile >/dev/null 2>&1
+			fault_code="$?"
+			if [ "$fault_code" != "0" ]; then
+				let fault_code=$E_DOWNLOAD_FAILURE+9000
+				echo "$fault_code"
+			else
+				$UCI_COMMIT
+				sync
+				reboot
+				echo "0"
+			fi
+		else
+			let fault_code=$E_DOWNLOAD_FAILURE+9000
+			echo "$fault_code"
+		fi
+	elif [ "$file_type" = "1 Firmware Upgrade Image" ]; then
+		local gr_backup=`grep "^/etc/easycwmp/\.backup\.xml" /etc/sysupgrade.conf`
+		[ -z $gr_backup ] && echo "/etc/easycwmp/.backup.xml" >> /etc/sysupgrade.conf
+		dwfile=`ls $DOWNLOAD_DIR`
+		if [ "$dwfile" != "" ]; then
+			dwfile="$DOWNLOAD_DIR/$dwfile"
+			/sbin/sysupgrade $dwfile
+			fault_code="$?"
+			if [ "$fault_code" != "0" ]; then
+				let fault_code=$E_DOWNLOAD_FAIL_FILE_CORRUPTED+9000
+				echo "$fault_code"
+			else
+				echo "0"
+			fi
+		else
+			let fault_code=$E_DOWNLOAD_FAILURE+9000
+			echo "" "$fault_code"
+		fi
+	else
+		echo "$(($E_INVALID_ARGUMENTS+9000))"
+	fi
+	rm -rf $DOWNLOAD_DIR 2> /dev/null
+}
+
+[ "$action" == "download" ] && { download; exit 0; } 2>/dev/null
+[ "$action" = "apply_download" ] && { apply_download; exit 0; } 2>/dev/null
\ No newline at end of file
diff --git a/usr/share/easycwmp/functions/ipping_launch b/usr/share/easycwmp/functions/ipping_launch
new file mode 100755
index 0000000..8a8fdb8
--- /dev/null
+++ b/usr/share/easycwmp/functions/ipping_launch
@@ -0,0 +1,93 @@
+#!/bin/sh
+# Copyright (C) 2015 PIVA Software <www.pivasoftware.com>
+# 	Author: MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
+
+[ "$1" != "run" -a "$1" != "stop" ] && return
+
+UCI_GET_VARSTATE="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state get"
+UCI_SET_VARSTATE="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state set"
+
+ipping_get() {
+	local val=`$UCI_GET_VARSTATE $1`
+	echo ${val:-$2}
+}
+
+ipping_launch() {
+	local i res ba stc times sc1 success_count failure_count min_time avg_time max_time avg_time_sum min max
+	[ "`$UCI_GET_VARSTATE easycwmp.@local[0].DiagnosticsState`" != "Requested" ] && return
+	local host=`ipping_get easycwmp.@local[0].Host`
+	local cnt=`ipping_get easycwmp.@local[0].NumberOfRepetitions 3`
+	local dsize=`ipping_get easycwmp.@local[0].DataBlockSize 64`
+	local timeout=`ipping_get easycwmp.@local[0].Timeout 1000`
+	[ "$host" = "" ] && return
+	timeout=$((timeout/1000))
+	[ "$timeout" = "0" ] && timeout = "1"
+	success_count=0
+	avg_time_sum=0
+	min=9999999
+	max=0
+	i=0
+	
+	while [ $i -lt $cnt ]; do
+		let i++
+		res=$(ping -q -c 1 -s $dsize -W $timeout $host 2>&1)
+		ba=`echo "$res" | grep "bad address"`
+		[ -n "$ba" ] && { $UCI_SET_VARSTATE easycwmp.@local[0].DiagnosticsState=Error_CannotResolveHostName; event_dignostic; return; }
+		ba=`echo "$res" | grep "unknown host"`
+		[ -n "$ba" ] && { $UCI_SET_VARSTATE easycwmp.@local[0].DiagnosticsState=Error_CannotResolveHostName; event_dignostic; return; }
+		stc=`echo "$res" | grep "received"`
+		[ -z "$stc" ] && { $UCI_SET_VARSTATE easycwmp.@local[0].DiagnosticsState=Error_Other; event_dignostic; return; }
+		times=`echo "$res" | grep "min/avg/max"`
+		[ -z "$times" ] && continue
+		sc1=`echo $stc | awk '{print $4}'`
+		sc1=${sc1:-0}
+		success_count=$((success_count+sc1))
+		times=`echo $times | awk -F'=' '{ print $2 }'`
+		min_time=`echo $times | awk -F'[=/ ]' '{ print $1 }'`	
+		avg_time=`echo $times | awk -F'[=/ ]' '{ print $2 }'`
+		max_time=`echo $times | awk -F'[=/ ]' '{ print $3 }'`
+		min_time=${min_time:-0}
+		avg_time=${avg_time:-0}
+		max_time=${max_time:-0}
+		min_time=${min_time%.*}
+		avg_time=${avg_time%.*}
+		max_time=${max_time%.*}
+		[ $min_time -lt $min ] && min=$min_time
+		[ $max_time -gt $max ] && max=$max_time
+		avg_time_sum=$((avg_time_sum+avg_time))
+	done
+	failure_count=$((cnt-success_count))
+	[ $success_count -gt 0 ] && avg_time=$((avg_time_sum/success_count)) || avg_time=0
+	min_time=$min
+	max_time=$max
+	$UCI_SET_VARSTATE easycwmp.@local[0].DiagnosticsState=Complete
+	$UCI_SET_VARSTATE easycwmp.@local[0].SuccessCount=$success_count
+	$UCI_SET_VARSTATE easycwmp.@local[0].FailureCount=$failure_count
+	$UCI_SET_VARSTATE easycwmp.@local[0].AverageResponseTime=$avg_time
+	$UCI_SET_VARSTATE easycwmp.@local[0].MinimumResponseTime=$min_time
+	$UCI_SET_VARSTATE easycwmp.@local[0].MaximumResponseTime=$max_time
+	event_dignostic
+}
+
+event_dignostic() {
+	local e=1
+	local i=0
+	while [ "$e" != 0 -a $i -lt 200 ]; do	
+		ubus -t 1 call tr069 inform '{"event":"8 DIAGNOSTICS COMPLETE"}'
+		e=$?
+		[ "$e" != "0" ] && sleep 1;
+		let i++
+	done
+}
+
+ipping_stop() {
+	local pids=`ps aux | grep ipping_launch | grep -v grep | grep -v stop | awk '{print $2}'`
+	[ -z "$pids" ] && pids=`ps | grep ipping_launch | grep -v grep | grep -v stop | awk '{print $2}'`
+	if [ -n "$pids" ]; then
+		kill -9 $pids 2>/dev/null
+		$UCI_SET_VARSTATE easycwmp.@local[0].DiagnosticsState=None
+	fi
+}
+
+[ "$1" == "run" ] && { ipping_launch 2>/dev/null; exit 0; }
+[ "$1" == "stop" ] && ipping_stop 2>/dev/null
diff --git a/usr/share/easycwmp/functions/traceroute_launch b/usr/share/easycwmp/functions/traceroute_launch
new file mode 100755
index 0000000..58ba4cb
--- /dev/null
+++ b/usr/share/easycwmp/functions/traceroute_launch
@@ -0,0 +1,82 @@
+#!/bin/sh
+# Copyright (C) 2016 PIVA Software <www.pivasoftware.com>
+# 	Author: MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
+
+[ "$1" != "run" -a "$1" != "stop" ] && return
+
+UCI_GET_VARSTATE="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state get"
+UCI_SET_VARSTATE="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state set"
+UCI_ADD_VARSTATE="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state add"
+UCI_DELETE_VARSTATE="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state delete"
+UCI_SHOW_VARSTATE="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state show"
+
+traceroute_get() {
+	local val=`$UCI_GET_VARSTATE $1`
+	echo ${val:-$2}
+}
+
+traceroute_launch() {
+	local i res host ip time=0
+	[ "`$UCI_GET_VARSTATE easycwmp.@local[0].TraceDiagnosticsState`" != "Requested" ] && return
+	local host=`traceroute_get easycwmp.@local[0].TraceHost`
+	local cnt=`traceroute_get easycwmp.@local[0].TraceNumberOfTries 3`
+	local dsize=`traceroute_get easycwmp.@local[0].TraceDataBlockSize 64`
+	local timeout=`traceroute_get easycwmp.@local[0].TraceTimeout 3000`
+	local maxhop=`traceroute_get easycwmp.@local[0].TraceMaxHops 30`
+	[ "$host" = "" ] && return
+	timeout=$((timeout/1000))
+	[ "$timeout" = "0" ] && timeout = "1"
+	i=-2
+	delete_all_route_hops
+	rm -f /tmp/traceres
+	traceroute -m $maxhop -w $timeout -q $cnt $host $dsize 2>&1 >/tmp/traceres
+	while read _ host ip time _; do
+		[ "$host" = "*" -a "$ip" = "*" ] && continue
+		let i++
+		[ "$i" = "-1" ] && continue;
+		ip=${ip#(}; ip=${ip%)}
+		time=${time%.*}
+		$UCI_ADD_VARSTATE easycwmp RouteHops
+		$UCI_SET_VARSTATE easycwmp.@RouteHops[$i].host=$host
+		$UCI_SET_VARSTATE easycwmp.@RouteHops[$i].ip=$ip
+		$UCI_SET_VARSTATE easycwmp.@RouteHops[$i].time=$time
+	done < /tmp/traceres
+	rm -f /tmp/traceres
+	let i++
+
+	$UCI_SET_VARSTATE easycwmp.@local[0].TraceDiagnosticsState=Complete
+	$UCI_SET_VARSTATE easycwmp.@local[0].TraceNumberOfHops=$i
+	$UCI_SET_VARSTATE easycwmp.@local[0].TraceResponseTime=$($UCI_GET_VARSTATE easycwmp.@RouteHops[-1].time)
+	event_diagnostic
+}
+
+delete_all_route_hops() {
+	local j
+	for j in $($UCI_SHOW_VARSTATE easycwmp | grep "easycwmp.@RouteHops.*=RouteHops"); do
+		$UCI_DELETE_VARSTATE easycwmp.@RouteHops[-1]
+	done
+}
+
+event_diagnostic() {
+	local e=1
+	local i=0
+	while [ "$e" != 0 -a $i -lt 200 ]; do	
+		ubus -t 1 call tr069 inform '{"event":"8 DIAGNOSTICS COMPLETE"}'
+		e=$?
+		[ "$e" != "0" ] && sleep 1;
+		let i++
+	done
+}
+
+traceroute_stop() {
+	delete_all_route_hops
+	local pids=`ps aux | grep traceroute_launch | grep -v grep | grep -v stop | awk '{print $2}'`
+	[ -z "$pids" ] && pids=`ps | grep traceroute_launch | grep -v grep | grep -v stop | awk '{print $2}'`
+	if [ -n "$pids" ]; then
+		kill -9 $pids 2>/dev/null
+		$UCI_SET_VARSTATE easycwmp.@local[0].TraceDiagnosticsState=None
+	fi
+}
+
+[ "$1" == "run" ] && { traceroute_launch 2>/dev/null; exit 0; }
+[ "$1" == "stop" ] && traceroute_stop 2>/dev/null
diff --git a/usr/share/libiwinfo/hardware.txt b/usr/share/libiwinfo/hardware.txt
new file mode 100644
index 0000000..4cac0a1
--- /dev/null
+++ b/usr/share/libiwinfo/hardware.txt
@@ -0,0 +1,60 @@
+# libiwinfo hardware database
+# vendor id | device id | subsystem vendor id | subsystem device id |
+# txpower offset | frequency offset | "vendor name" | "device name"
+0xffff 0xffff 0xffff 0xb102    0      0  "Ubiquiti" "PowerStation2 (18V)"
+0xffff 0xffff 0xffff 0xb202    0      0  "Ubiquiti" "PowerStation2 (16D)"
+0xffff 0xffff 0xffff 0xb302    0      0  "Ubiquiti" "PowerStation2 (EXT)"
+0xffff 0xffff 0xffff 0xb105    0      0  "Ubiquiti" "PowerStation5 (22V)"
+0xffff 0xffff 0xffff 0xb305    0      0  "Ubiquiti" "PowerStation5 (EXT)"
+0xffff 0xffff 0xffff 0xc302    0      0  "Ubiquiti" "PicoStation2"
+0xffff 0xffff 0xffff 0xc3a2   10      0  "Ubiquiti" "PicoStation2 HP"
+0xffff 0xffff 0xffff 0xa105    0      0  "Ubiquiti" "WispStation5"
+0xffff 0xffff 0xffff 0xa002   10      0  "Ubiquiti" "LiteStation2"
+0xffff 0xffff 0xffff 0xa005    5      0  "Ubiquiti" "LiteStation5"
+0xffff 0xffff 0xffff 0xc002   10      0  "Ubiquiti" "NanoStation2"
+0xffff 0xffff 0xffff 0xc005    5      0  "Ubiquiti" "NanoStation5"
+0xffff 0xffff 0xffff 0xc102   10      0  "Ubiquiti" "NanoStation Loco2"
+0xffff 0xffff 0xffff 0xc105    5      0  "Ubiquiti" "NanoStation Loco5"
+0xffff 0xffff 0xffff 0xc202   10      0  "Ubiquiti" "Bullet2"
+0xffff 0xffff 0xffff 0xc205    5      0  "Ubiquiti" "Bullet5"
+0x168c 0x001b 0x0777 0x3002   10      0  "Ubiquiti" "XR2"
+0x168c 0x001b 0x7777 0x3002   10      0  "Ubiquiti" "XR2"
+0x168c 0x001b 0x0777 0x3b02   10      0  "Ubiquiti" "XR2.3"
+0x168c 0x001b 0x0777 0x3c02   10      0  "Ubiquiti" "XR2.6"
+0x168c 0x001b 0x0777 0x3b03   10      0  "Ubiquiti" "XR3-2.8"
+0x168c 0x001b 0x0777 0x3c03   10      0  "Ubiquiti" "XR3-3.6"
+0x168c 0x001b 0x0777 0x3003   10      0  "Ubiquiti" "XR3"
+0x168c 0x001b 0x0777 0x3004   10      0  "Ubiquiti" "XR4"
+0x168c 0x001b 0x0777 0x3005   10      0  "Ubiquiti" "XR5"
+0x168c 0x001b 0x7777 0x3005   10      0  "Ubiquiti" "XR5"
+0x168c 0x001b 0x0777 0x3007   10      0  "Ubiquiti" "XR7"
+0x168c 0x001b 0x0777 0x3009   10  -1520  "Ubiquiti" "XR9"
+0x168c 0x001b 0x168c 0x2063    0      0  "Atheros"  "AR5413"
+0x168c 0x0013 0x168c 0x1042    1      0  "Ubiquiti" "SRC"
+0x168c 0x0013 0x0777 0x2041   10      0  "Ubiquiti" "SR2"
+0x168c 0x0013 0x0777 0x2004    6      0  "Ubiquiti" "SR4"
+0x168c 0x0013 0x7777 0x2004    6      0  "Ubiquiti" "SR4"
+0x168c 0x0013 0x0777 0x1004    6      0  "Ubiquiti" "SR4C"
+0x168c 0x0013 0x7777 0x1004    6      0  "Ubiquiti" "SR4C"
+0x168c 0x0013 0x168c 0x2042    7      0  "Ubiquiti" "SR5"
+0x168c 0x0013 0x7777 0x2009   12  -1500  "Ubiquiti" "SR9"
+0x168c 0x0027 0x168c 0x2082    7      0  "Ubiquiti" "SR71A"
+0x168c 0x0027 0x0777 0x4082    7      0  "Ubiquiti" "SR71"
+0x168c 0x0029 0x0777 0x4005    7      0  "Ubiquiti" "SR71-15"
+0x168c 0x002a 0x0777 0xe302   12      0  "Ubiquiti" "PicoStation M2" /* ToDo: confirm offset */
+0x168c 0x002a 0x0777 0xe012   12      0  "Ubiquiti" "NanoStation M2" /* ToDo: confirm offset */
+0x168c 0x002a 0x0777 0xe005    5      0  "Ubiquiti" "NanoStation M5" /* ToDo: confirm offset */
+0x168c 0x002a 0x0777 0xe202   12      0  "Ubiquiti" "Bullet M2"
+0x168c 0x002a 0x0777 0xe805    5      0  "Ubiquiti" "Bullet M5"
+0x168c 0x002a 0x0777 0xe345    0      0  "Ubiquiti" "WispStation M5" /* ToDo: confirm offset */
+0x168c 0x0029 0x168c 0xa094    0      0  "Atheros"  "AR9220"
+0x168c 0x0029 0x168c 0xa095    0      0  "Atheros"  "AR9223"
+0x168c 0x002a 0x168c 0xa093    0      0  "Atheros"  "AR9280"
+0x168c 0x002b 0x168c 0xa091    0      0  "Atheros"  "AR9285"
+0x168c 0x0033 0x168c 0xa120    0      0  "Atheros"  "AR9580"
+0x168c 0x0033 0x168c 0xa136    0      0  "Atheros"  "AR9580"
+0x168c 0x003c 0x0000 0x0000    0      0  "Qualcomm Atheros" "QCA9880"
+0x1814 0x3050 0x1814 0x0005    0      0  "RaLink"   "Rt3050"
+0x1814 0x3052 0x1814 0x0008    0      0  "RaLink"   "Rt3052"
+0x1814 0x3352 0x1814 0x000c    0      0  "RaLink"   "Rt3352"
+0x11ab 0x2a55 0x11ab 0x0000    0      0  "Marvell"  "88W8864"
diff --git a/usr/share/libubox/jshn.sh b/usr/share/libubox/jshn.sh
new file mode 100644
index 0000000..bf76edb
--- /dev/null
+++ b/usr/share/libubox/jshn.sh
@@ -0,0 +1,280 @@
+# functions for parsing and generating json
+
+_json_get_var() {
+	# dest=$1
+	# var=$2
+	eval "$1=\"\$${JSON_PREFIX}$2\""
+}
+
+_json_set_var() {
+	# var=$1
+	local ___val="$2"
+	eval "${JSON_PREFIX}$1=\"\$___val\""
+}
+
+__jshn_raw_append() {
+	# var=$1
+	local value="$2"
+	local sep="${3:- }"
+
+	eval "export -- \"$1=\${$1:+\${$1}\${value:+\$sep}}\$value\""
+}
+
+_jshn_append() {
+	# var=$1
+	local _a_value="$2"
+	eval "${JSON_PREFIX}$1=\"\${${JSON_PREFIX}$1} \$_a_value\""
+}
+
+_get_var() {
+	# var=$1
+	# value=$2
+	eval "$1=\"\$$2\""
+}
+
+_set_var() {
+	# var=$1
+	local __val="$2"
+	eval "$1=\"\$__val\""
+}
+
+_json_inc() {
+	# var=$1
+	# dest=$2
+
+	let "${JSON_PREFIX}$1 += 1" "$2 = ${JSON_PREFIX}$1"
+}
+
+_json_add_generic() {
+	# type=$1
+	# name=$2
+	# value=$3
+	# cur=$4
+
+	local var
+	if [ "${4%%[0-9]*}" = "J_A" ]; then
+		_json_inc "S_$4" var
+	else
+		var="${2//[^a-zA-Z0-9_]/_}"
+		[[ "$var" == "$2" ]] || export -- "${JSON_PREFIX}N_${4}_${var}=$2"
+	fi
+
+	export -- \
+		"${JSON_PREFIX}${4}_$var=$3" \
+		"${JSON_PREFIX}T_${4}_$var=$1"
+	_jshn_append "JSON_UNSET" "${4}_$var"
+	_jshn_append "K_$4" "$var"
+}
+
+_json_add_table() {
+	# name=$1
+	# type=$2
+	# itype=$3
+	local cur seq
+
+	_json_get_var cur JSON_CUR
+	_json_inc JSON_SEQ seq
+
+	local table="J_$3$seq"
+	_json_set_var "U_$table" "$cur"
+	export -- "${JSON_PREFIX}K_$table="
+	unset "${JSON_PREFIX}S_$table"
+	_json_set_var JSON_CUR "$table"
+	_jshn_append "JSON_UNSET" "$table"
+
+	_json_add_generic "$2" "$1" "$table" "$cur"
+}
+
+_json_close_table() {
+	local _s_cur
+
+	_json_get_var _s_cur JSON_CUR
+	_json_get_var "${JSON_PREFIX}JSON_CUR" "U_$_s_cur"
+}
+
+json_set_namespace() {
+	local _new="$1"
+	local _old="$2"
+
+	[ -n "$_old" ] && _set_var "$_old" "$JSON_PREFIX"
+	JSON_PREFIX="$_new"
+}
+
+json_cleanup() {
+	local unset tmp
+
+	_json_get_var unset JSON_UNSET
+	for tmp in $unset J_V; do
+		unset \
+			${JSON_PREFIX}U_$tmp \
+			${JSON_PREFIX}K_$tmp \
+			${JSON_PREFIX}S_$tmp \
+			${JSON_PREFIX}T_$tmp \
+			${JSON_PREFIX}N_$tmp \
+			${JSON_PREFIX}$tmp
+	done
+
+	unset \
+		${JSON_PREFIX}JSON_SEQ \
+		${JSON_PREFIX}JSON_CUR \
+		${JSON_PREFIX}JSON_UNSET
+}
+
+json_init() {
+	json_cleanup
+	export -n ${JSON_PREFIX}JSON_SEQ=0
+	export -- \
+		${JSON_PREFIX}JSON_CUR="J_V" \
+		${JSON_PREFIX}K_J_V=
+}
+
+json_add_object() {
+	_json_add_table "$1" object T
+}
+
+json_close_object() {
+	_json_close_table
+}
+
+json_add_array() {
+	_json_add_table "$1" array A
+}
+
+json_close_array() {
+	_json_close_table
+}
+
+json_add_string() {
+	local cur
+	_json_get_var cur JSON_CUR
+	_json_add_generic string "$1" "$2" "$cur"
+}
+
+json_add_int() {
+	local cur
+	_json_get_var cur JSON_CUR
+	_json_add_generic int "$1" "$2" "$cur"
+}
+
+json_add_boolean() {
+	local cur
+	_json_get_var cur JSON_CUR
+	_json_add_generic boolean "$1" "$2" "$cur"
+}
+
+json_add_double() {
+	local cur
+	_json_get_var cur JSON_CUR
+	_json_add_generic double "$1" "$2" "$cur"
+}
+
+# functions read access to json variables
+
+json_load() {
+	eval "`jshn -r "$1"`"
+}
+
+json_dump() {
+	jshn "$@" ${JSON_PREFIX:+-p "$JSON_PREFIX"} -w 
+}
+
+json_get_type() {
+	local __dest="$1"
+	local __cur
+
+	_json_get_var __cur JSON_CUR
+	local __var="${JSON_PREFIX}T_${__cur}_${2//[^a-zA-Z0-9_]/_}"
+	eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]"
+}
+
+json_get_keys() {
+	local __dest="$1"
+	local _tbl_cur
+
+	if [ -n "$2" ]; then
+		json_get_var _tbl_cur "$2"
+	else
+		_json_get_var _tbl_cur JSON_CUR
+	fi
+	local __var="${JSON_PREFIX}K_${_tbl_cur}"
+	eval "export -- \"$__dest=\${$__var}\"; [ -n \"\${$__var+x}\" ]"
+}
+
+json_get_values() {
+	local _v_dest="$1"
+	local _v_keys _v_val _select=
+	local _json_no_warning=1
+
+	unset "$_v_dest"
+	[ -n "$2" ] && {
+		json_select "$2" || return 1
+		_select=1
+	}
+
+	json_get_keys _v_keys
+	set -- $_v_keys
+	while [ "$#" -gt 0 ]; do
+		json_get_var _v_val "$1"
+		__jshn_raw_append "$_v_dest" "$_v_val"
+		shift
+	done
+	[ -n "$_select" ] && json_select ..
+
+	return 0
+}
+
+json_get_var() {
+	local __dest="$1"
+	local __cur
+
+	_json_get_var __cur JSON_CUR
+	local __var="${JSON_PREFIX}${__cur}_${2//[^a-zA-Z0-9_]/_}"
+	eval "export -- \"$__dest=\${$__var:-$3}\"; [ -n \"\${$__var+x}\${3+x}\" ]"
+}
+
+json_get_vars() {
+	while [ "$#" -gt 0 ]; do
+		local _var="$1"; shift
+		if [ "$_var" != "${_var#*:}" ]; then
+			json_get_var "${_var%%:*}" "${_var%%:*}" "${_var#*:}"
+		else
+			json_get_var "$_var" "$_var"
+		fi
+	done
+}
+
+json_select() {
+	local target="$1"
+	local type
+	local cur
+
+	[ -z "$1" ] && {
+		_json_set_var JSON_CUR "J_V"
+		return 0
+	}
+	[[ "$1" == ".." ]] && {
+		_json_get_var cur JSON_CUR
+		_json_get_var cur "U_$cur"
+		_json_set_var JSON_CUR "$cur"
+		return 0
+	}
+	json_get_type type "$target"
+	case "$type" in
+		object|array)
+			json_get_var cur "$target"
+			_json_set_var JSON_CUR "$cur"
+		;;
+		*)
+			[ -n "$_json_no_warning" ] || \
+				echo "WARNING: Variable '$target' does not exist or is not an array/object"
+			return 1
+		;;
+	esac
+}
+
+json_is_a() {
+	local type
+
+	json_get_type type "$1"
+	[ "$type" = "$2" ]
+}
diff --git a/usr/share/licenses/oss-license-info-oem.html b/usr/share/licenses/oss-license-info-oem.html
new file mode 100644
index 0000000..106fcfe
--- /dev/null
+++ b/usr/share/licenses/oss-license-info-oem.html
@@ -0,0 +1,13345 @@
+<!DOCTYPE html><html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta charset="utf-8">
+<title>Free Software</title>
+<style type="text/css">
+        .notice div {
+          padding-top: 10px;
+        }
+        div.notice_product {
+          font-size: 1.2em;
+          font-weight: bold;
+        }
+        div.notice_version {
+          font-size: 0.9em;
+          padding-bottom: 10px;
+        }
+        div.notice_title, div.notice_heading {
+          padding-top: 20px;
+          padding-bottom: 10px;
+          font-weight: bold;
+        }
+        div.notice_product, div.notice_version, div.notice_title {
+          text-align: center;
+        }
+        div.notice_email {
+          padding-left: 40px;
+        }
+
+        table.oss_components {
+          text-align: left;
+          padding-top: 40px;
+          padding-bottom: 40px;
+        }
+        table.oss_components th {
+          padding-bottom: 10px;
+          padding-right: 40px;
+        }
+        table.oss_components td {
+          font-size: 0.9em;
+          padding-right: 40px;
+        }
+        table.oss_components a, table.oss_components a:visited {
+          color: #3333ee;
+        }
+
+        .component_heading {
+          font-weight: bold;
+        }
+      </style>
+</head>
+<body>
+<div class="notice">
+<div class="notice_product">
+     
+  </div>
+<div class="notice_version">
+    Version 5.2.1 (2019-02-19)
+  </div>
+<div class="notice_title">
+    Copyright Notice and Warranty Disclaimer
+  </div>
+<div class="notice_normal">
+    In absence of an official legally proven version of the referenced license documents this document has to stay with the original English versions of the licenses.
+  </div>
+<div class="notice_heading">
+    Warranty Disclaimer
+  </div>
+<div class="notice_normal">
+    This program or product's firmware contains free software; you can redistribute the free software and/or modify it under the terms of the following Licenses.
+  </div>
+<div class="notice_normal">
+    The free software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  </div>
+<div class="notice_heading">
+    Copyright Notice
+  </div>
+<div class="notice_normal">
+    All copyrights are identified in more detail in the free software source code. You will receive copies of applied License along with each source code module. Please find below for ease of reference the program version and license version information.
+  </div>
+</div>
+<table class="oss_components">
+<tr>
+<th>Name</th>
+<th>Version</th>
+<th>Licenses</th>
+</tr>
+<tr>
+<td><a href="#2900d624863f168f2ddd7f8344234a83">boost_1_58_0</a></td>
+<td>1_58_0</td>
+<td>Boost Software License http://www.boost.org/users/license.html</td>
+</tr>
+<tr>
+<td><a href="#bed59cefaa162d2d339c7f68a0161fe0">bridge-utils</a></td>
+<td>1.5</td>
+<td>GPL-2.0+</td>
+</tr>
+<tr>
+<td><a href="#6765d9ccd08c622395efc466ca7b8d3b">busybox</a></td>
+<td>1.25.1</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#37055243218efa7c8adb2346f2386f7a">curl</a></td>
+<td>7.57.0</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#acb691e5a7cf3711b20bb3c5bbf4962b">dropbear</a></td>
+<td>2017.75</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#afdf0ea568926c6e5ba07054fc3444d9">ebtables-v2.0.10-4</a></td>
+<td>2.0.10-4</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#2fe417564aff906a9b3b617dfed9de6a">expat</a></td>
+<td>2.2.4</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#a543228b280e8787631976bfaba72770">firewall</a></td>
+<td>2015-07-27</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#34b462e99fa48ae17d216464e6ade7dd">fstools</a></td>
+<td>2016-01-10</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#3aba70f1a9f766c149b7d722ba842430">fwknop</a></td>
+<td>2.6.9</td>
+<td>GPLv2</td>
+</tr>
+<tr>
+<td><a href="#4d9641d67801e117e562d806e92bb20c">gcc-linaro-4.8-2014.04</a></td>
+<td>4.8-linaro</td>
+<td>GPL-3.0-with-GCC-exception</td>
+</tr>
+<tr>
+<td><a href="#9e5e62b6615522e182efd232e731276c">iproute2</a></td>
+<td>4.0.0</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#ac0d93e290e6dc4ac916b67c6ff684fb">iptables</a></td>
+<td>1.4.21</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#b35fb4266df7bc498a1a1fd4e14919a7">jansson</a></td>
+<td>2.7</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#5ad0db3ced98a71fc871b750567d58ad">json-c</a></td>
+<td>0.12</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#d1772d9ab47569bdd5ed2d84b78fc625">jsonfilter</a></td>
+<td>2018-02-04</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#8524cc80396861f6fada85cc57ea1502">libiwinfo</a></td>
+<td>2015-06-01</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#2b5114179d66e09516cbebb8c91c4c7c">libmesode</a></td>
+<td>0.9.1</td>
+<td>GPL-3.0</td>
+</tr>
+<tr>
+<td><a href="#2d18b3af1dc44df6ca764c095b1dc224">libmicrohttpd</a></td>
+<td>0.9.59</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#2427c9791094dd6cb57407b063c1d25c">libmicroxml</a></td>
+<td>2015-03-18</td>
+<td>LGPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#92f344960166be8a1e001a847c7dd961">libnl</a></td>
+<td>3.2.21</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#1d6319dafa78b2cff0699f142981b5a6">libpcap</a></td>
+<td>1.5.3</td>
+<td>BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#56756bccf20eb29add08b7b9aee10998">librpc</a></td>
+<td>2015-11-04</td>
+<td>Custom LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#dbe774c2a595cf2b7377846c02288b74">libubox</a></td>
+<td>2015-11-08</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#5bb062356cddb5d2c0ef41eb2660cb06">linux</a></td>
+<td>4.4.60</td>
+<td>GPLv2</td>
+</tr>
+<tr>
+<td><a href="#771035f77dff8c541478d9b688ab3f7a">miniupnpd</a></td>
+<td>2.0.20170421</td>
+<td>BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#9a1947924de463020e55ba9008b115d4">net-snmp</a></td>
+<td>5.7.3</td>
+<td>MIT BSD-3-Clause-Clear</td>
+</tr>
+<tr>
+<td><a href="#03b08995836e5e584b13d01a2096202b">netifd</a></td>
+<td>2015-12-16</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#6f720c4b8c220bc152617135f86f3b02">nghttp2</a></td>
+<td>1.29.0</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#270b0e6df216d736772e719c7e75b6c7">ntp</a></td>
+<td>4.2.8p9</td>
+<td>Unique</td>
+</tr>
+<tr>
+<td><a href="#8eb51203c78ba89d4e11b15a41566f95">odhcp6c</a></td>
+<td>2016-02-08</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#b41199e79125f11543cc926fae0af9a5">open-plc-utils</a></td>
+<td>2017-01-16</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#18822ccd0ee3c432ecdcea6e5625c7bf">openssl</a></td>
+<td>1.0.2o</td>
+<td>OpenSSL</td>
+</tr>
+<tr>
+<td><a href="#d3cb9b23f2943b2aafe2cf1ee1418bca">openwrt</a></td>
+<td></td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#65190960c33bd932307ab843c61e903c">opkg</a></td>
+<td>9c97d5ecd795709c8584e972bfdf3aee3a5b846d</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#a6c0639802d21d85b66fe420a1d72dc0">procd</a></td>
+<td>2015-10-29.1</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#a1c1ba21f2df75f49ff730ff75c4d2e1">protobuf</a></td>
+<td>3.4.1</td>
+<td>BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#232714236d4bfb82f768b7dafaa2c750">relayd</a></td>
+<td>2015-03-13</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#9a808dd3222ec1cd4132b25cec3e73d1">rpcd</a></td>
+<td>2016-06-30</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#76f2af56ed4edacd1643f372bce3d219">u-boot</a></td>
+<td>2014.10</td>
+<td>GPL-2.0 GPL-2.0+</td>
+</tr>
+<tr>
+<td><a href="#6f199b5f5bbe8fcda070f5ea84186ada">ubi-utils</a></td>
+<td>1.5.1</td>
+<td>GPLv2</td>
+</tr>
+<tr>
+<td><a href="#15d577010cc61bea37824880199968e7">ubox</a></td>
+<td>2015-11-22</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#2bb744eeeac1a40bbc12cf14fc316b8a">ubus</a></td>
+<td>2015-05-25</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#7a9f25836ffe26403e3fea1e5866e255">uci</a></td>
+<td>2015-08-27.1</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#9a66738f118523e7f46e4cd2020900cb">uhttpd</a></td>
+<td>2018-11-28</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#a385c716df001ddd1539613763bfbf68">ustream-ssl</a></td>
+<td>2015-07-09</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#7d0131cceb2f675e13e0fab41ac13aad">util-linux</a></td>
+<td>2.25.2</td>
+<td>GPL-2.0 LGPL-2.1 BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#bc993918e4acf46ea73ab5ba317c0be4">wireless_tools.29</a></td>
+<td>29</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#80fe70c3472ad809910c95625b63c7e6">zlib</a></td>
+<td>1.2.11</td>
+<td>Zlib</td>
+</tr>
+</table>
+<div>
+<a id="2900d624863f168f2ddd7f8344234a83"></a><div>
+<hr>
+<div class="component_heading">boost_1_58_0 1_58_0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="bed59cefaa162d2d339c7f68a0161fe0"></a><div>
+<hr>
+<div class="component_heading">bridge-utils 1.5</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.	This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.	Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.	For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.	If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.	For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) 19yy	&lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="6765d9ccd08c622395efc466ca7b8d3b"></a><div>
+<hr>
+<div class="component_heading">busybox 1.25.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+bzip2 applet in busybox is based on lightly-modified source
+of bzip2 version 1.0.4. bzip2 source is distributed
+under the following conditions (copied verbatim from LICENSE file)
+===========================================================
+
+
+This program, "bzip2", the associated library "libbzip2", and all
+documentation, are copyright (C) 1996-2006 Julian R Seward.  All
+rights reserved.
+
+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. The origin of this software must not be misrepresented; you must
+   not claim that you wrote the original software.  If you use this
+   software in a product, an acknowledgment in the product
+   documentation would be appreciated but is not required.
+
+3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+4. The name of the author may not be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+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 AUTHOR 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.
+
+Julian Seward, Cambridge, UK.
+jseward@bzip.org
+bzip2/libbzip2 version 1.0.4 of 20 December 2006
+</pre>
+<br><br><br><pre>
+--- A note on GPL versions
+
+BusyBox is distributed under version 2 of the General Public License (included
+in its entirety, below).  Version 2 is the only version of this license which
+this version of BusyBox (or modified versions derived from this one) may be
+distributed under.
+
+------------------------------------------------------------------------
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="37055243218efa7c8adb2346f2386f7a"></a><div>
+<hr>
+<div class="component_heading">curl 7.57.0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1996 - 2017, Daniel Stenberg, &lt;daniel@haxx.se&gt;, and many
+contributors, see the THANKS file.
+
+All rights reserved.
+
+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", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization of the copyright holder.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="acb691e5a7cf3711b20bb3c5bbf4962b"></a><div>
+<hr>
+<div class="component_heading">dropbear 2017.75</div>
+<hr>
+<br><div class="component_text">
+<pre>
+LibTomMath is hereby released into the Public Domain.  
+
+-- Tom St Denis
+
+</pre>
+<br><br><br><pre>
+Dropbear contains a number of components from different sources, hence there
+are a few licenses and authors involved. All licenses are fairly 
+non-restrictive.
+
+
+The majority of code is written by Matt Johnston, under the license below.
+
+Portions of the client-mode work are (c) 2004 Mihnea Stoenescu, under the
+same license:
+
+Copyright (c) 2002-2015 Matt Johnston
+Portions copyright (c) 2004 Mihnea Stoenescu
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+=====
+
+LibTomCrypt and LibTomMath are written by Tom St Denis, and are Public Domain.
+
+=====
+
+sshpty.c is taken from OpenSSH 3.5p1, 
+  Copyright (c) 1995 Tatu Ylonen &lt;ylo@cs.hut.fi&gt;, Espoo, Finland
+                     All rights reserved
+ "As far as I am concerned, the code I have written for this software
+  can be used freely for any purpose.  Any derived versions of this
+  software must be clearly marked as such, and if the derived work is
+  incompatible with the protocol description in the RFC file, it must be
+  called by a name other than "ssh" or "Secure Shell". "
+
+=====
+
+loginrec.c
+loginrec.h
+atomicio.h
+atomicio.c
+and strlcat() (included in util.c) are from OpenSSH 3.6.1p2, and are licensed
+under the 2 point BSD license.
+
+loginrec is written primarily by Andre Lucas, atomicio.c by Theo de Raadt.
+
+strlcat() is (c) Todd C. Miller
+
+=====
+
+Import code in keyimport.c is modified from PuTTY's import.c, licensed as
+follows:
+
+PuTTY is copyright 1997-2003 Simon Tatham.
+
+Portions copyright Robert de Bath, Joris van Rantwijk, Delian
+Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,
+Justin Bradford, and CORE SDI S.A.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+=====
+
+curve25519-donna:
+
+/* Copyright 2008, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS 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 COPYRIGHT
+ * OWNER OR 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.
+ *
+ * curve25519-donna: Curve25519 elliptic curve, public key function
+ *
+ * http://code.google.com/p/curve25519-donna/
+ *
+ * Adam Langley &lt;agl@imperialviolet.org&gt;
+ *
+ * Derived from public domain C code by Daniel J. Bernstein &lt;djb@cr.yp.to&gt;
+ *
+ * More information about curve25519 can be found here
+ *   http://cr.yp.to/ecdh.html
+ *
+ * djb's sample implementation of curve25519 is written in a special assembly
+ * language called qhasm and uses the floating point registers.
+ *
+ * This is, almost, a clean room reimplementation from the curve25519 paper. It
+ * uses many of the tricks described therein. Only the crecip function is taken
+ * from the sample implementation.
+ */
+</pre>
+<br><br><br><pre>
+LibTomCrypt is public domain.  As should all quality software be.
+
+Tom St Denis
+
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="afdf0ea568926c6e5ba07054fc3444d9"></a><div>
+<hr>
+<div class="component_heading">ebtables-v2.0.10-4 2.0.10-4</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2fe417564aff906a9b3b617dfed9de6a"></a><div>
+<hr>
+<div class="component_heading">expat 2.2.4</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
+Copyright (c) 2001-2017 Expat maintainers
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a543228b280e8787631976bfaba72770"></a><div>
+<hr>
+<div class="component_heading">firewall 2015-07-27</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * firewall3 - 3rd OpenWrt UCI firewall implementation
+ *
+ *   Copyright (C) 2013 Jo-Philipp Wich &lt;jow@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="34b462e99fa48ae17d216464e6ade7dd"></a><div>
+<hr>
+<div class="component_heading">fstools 2016-01-10</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="3aba70f1a9f766c149b7d722ba842430"></a><div>
+<hr>
+<div class="component_heading">fwknop 2.6.9</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="4d9641d67801e117e562d806e92bb20c"></a><div>
+<hr>
+<div class="component_heading">gcc-linaro-4.8-2014.04 4.8-linaro</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+</pre>
+<br><br><br><pre>
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
+</pre>
+<br><br><br><pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+&lt;http://www.gnu.org/licenses/&gt;.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+&lt;http://www.gnu.org/philosophy/why-not-lgpl.html&gt;.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9e5e62b6615522e182efd232e731276c"></a><div>
+<hr>
+<div class="component_heading">iproute2 4.0.0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="ac0d93e290e6dc4ac916b67c6ff684fb"></a><div>
+<hr>
+<div class="component_heading">iptables 1.4.21</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="b35fb4266df7bc498a1a1fd4e14919a7"></a><div>
+<hr>
+<div class="component_heading">jansson 2.7</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Copyright (c) 2009-2014 Petri Lehtinen &lt;petri@digip.org&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="5ad0db3ced98a71fc871b750567d58ad"></a><div>
+<hr>
+<div class="component_heading">json-c 0.12</div>
+<hr>
+<br><div class="component_text">
+<pre>
+
+Copyright (c) 2009-2012 Eric Haszlakiewicz
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+----------------------------------------------------------------
+
+Copyright (c) 2004, 2005 Metaparadigm Pte Ltd
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="d1772d9ab47569bdd5ed2d84b78fc625"></a><div>
+<hr>
+<div class="component_heading">jsonfilter 2018-02-04</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Copyright (C) 2013-2014 Jo-Philipp Wich &lt;jo@mein.io&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="8524cc80396861f6fada85cc57ea1502"></a><div>
+<hr>
+<div class="component_heading">libiwinfo 2015-06-01</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2b5114179d66e09516cbebb8c91c4c7c"></a><div>
+<hr>
+<div class="component_heading">libmesode 0.9.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+&lt;http://www.gnu.org/licenses/&gt;.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+&lt;http://www.gnu.org/philosophy/why-not-lgpl.html&gt;.
+Copyright (c) 2005-2009 Collecta, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2d18b3af1dc44df6ca764c095b1dc224"></a><div>
+<hr>
+<div class="component_heading">libmicrohttpd 0.9.59</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Some of this code is DUAL-LICENSED.  If you use MHD without HTTPS/SSL
+support, you are free to choose between the LGPL and the eCos License
+(http://ecos.sourceware.org/license-overview.html).  If you compile
+MHD with HTTPS support, you must obey the terms of the GNU LGPL.
+
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2427c9791094dd6cb57407b063c1d25c"></a><div>
+<hr>
+<div class="component_heading">libmicroxml 2015-03-18</div>
+<hr>
+<br><div class="component_text">
+<pre>
+			   microxml License
+			  September 18, 2010
+
+
+The microxml library and included programs are provided under the
+terms of the GNU Library General Public License version 2 (LGPL2)
+with the following exceptions:
+
+  1. Static linking of applications to the microxml library
+does not constitute a derivative work and does not require
+the author to provide source code for the application, use
+the shared microxml libraries, or link their applications
+against a user-supplied version of microxml
+
+If you link the application to a modified version of
+microxml then the changes to microxml must be provided
+under the terms of the LGPL2 in sections 1, 2, and 4.
+
+  2. You do not have to provide a copy of the microxml license
+with programs that are linked to the microxml library, nor
+do you have to identify the microxml license in your
+program or documentation as required by section 6 of the
+LGPL2.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+			 Version 2, June 1991
+
+	  Copyright (C) 1991 Free Software Foundation, Inc.
+       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+     Everyone is permitted to copy and distribute verbatim copies
+      of this license document, but changing it is not allowed.
+
+    [This is the first released version of the library GPL.  It is
+   numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			       Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    microxml is a micro XML parsing library
+    Copyright (C) 2011 Luka Perkov
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="92f344960166be8a1e001a847c7dd961"></a><div>
+<hr>
+<div class="component_heading">libnl 3.2.21</div>
+<hr>
+<br><div class="component_text">
+<pre>
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="1d6319dafa78b2cff0699f142981b5a6"></a><div>
+<hr>
+<div class="component_heading">libpcap 1.5.3</div>
+<hr>
+<br><div class="component_text">
+<pre>
+License: BSD
+ 
+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. The names of the authors may not be used to endorse or promote
+     products derived from this software without specific prior
+     written permission.
+  
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="56756bccf20eb29add08b7b9aee10998"></a><div>
+<hr>
+<div class="component_heading">librpc 2015-11-04</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ */
+/*
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+</pre>
+<br><br><br><pre>
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="dbe774c2a595cf2b7377846c02288b74"></a><div>
+<hr>
+<div class="component_heading">libubox 2015-11-08</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Copyright (C) 2012 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="5bb062356cddb5d2c0ef41eb2660cb06"></a><div>
+<hr>
+<div class="component_heading">linux 4.4.60</div>
+<hr>
+<br><div class="component_text">
+<pre>
+
+   NOTE! This copyright does *not* cover user programs that use kernel
+ services by normal system calls - this is merely considered normal use
+ of the kernel, and does *not* fall under the heading of "derived work".
+ Also note that the GPL below is copyrighted by the Free Software
+ Foundation, but the instance of code that it refers to (the Linux
+ kernel) is copyrighted by me and others who actually wrote it.
+
+ Also note that the only valid version of the GPL as far as the kernel
+ is concerned is _this_ particular version of the license (ie v2, not
+ v2.2 or v3.x or whatever), unless explicitly otherwise stated.
+
+			Linus Torvalds
+
+----------------------------------------
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="771035f77dff8c541478d9b688ab3f7a"></a><div>
+<hr>
+<div class="component_heading">miniupnpd 2.0.20170421</div>
+<hr>
+<br><div class="component_text">
+<pre>
+MiniUPnPd
+Copyright (c) 2006-2016, Thomas BERNARD
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * 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.
+    * The name of the author may not be used to endorse or promote products
+	  derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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.
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9a1947924de463020e55ba9008b115d4"></a><div>
+<hr>
+<div class="component_heading">net-snmp 5.7.3</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Various copyrights apply to this package, listed in various separate
+parts below.  Please make sure that you read all the parts.
+
+---- Part 1: CMU/UCD copyright notice: (BSD like) -----
+
+
+       Copyright 1989, 1991, 1992 by Carnegie Mellon University
+
+		  Derivative Work - 1996, 1998-2000
+Copyright 1996, 1998-2000 The Regents of the University of California
+
+			 All Rights Reserved
+
+Permission to use, copy, modify and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appears in all copies and
+that both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of CMU and The Regents of
+the University of California not be used in advertising or publicity
+pertaining to distribution of the software without specific written
+permission.
+
+CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL CMU OR
+THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+FROM THE 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.
+
+
+---- Part 2: Networks Associates Technology, Inc copyright notice (BSD) -----
+
+Copyright (c) 2001-2003, Networks Associates Technology, Inc
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of the Networks Associates Technology, Inc nor the
+   names of its contributors may be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 3: Cambridge Broadband Ltd. copyright notice (BSD) -----
+
+Portions of this code are copyright (c) 2001-2003, Cambridge Broadband Ltd.
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  The name of Cambridge Broadband Ltd. may not be used to endorse or
+   promote products derived from this software without specific prior
+   written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+EXPRESS 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 COPYRIGHT HOLDER 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.
+
+
+---- Part 4: Sun Microsystems, Inc. copyright notice (BSD) -----
+
+Copyright © 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 
+California 95054, U.S.A. All rights reserved.
+
+Use is subject to license terms below.
+
+This distribution may include materials developed by third parties.
+
+Sun, Sun Microsystems, the Sun logo and Solaris are trademarks or registered 
+trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+*  Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+
+*  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.
+
+*  Neither the name of the Sun Microsystems, Inc. nor the
+    names of its contributors may be used to endorse or promote
+    products derived from this software without specific prior written
+    permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 5: Sparta, Inc copyright notice (BSD) -----
+
+Copyright (c) 2003-2013, Sparta, Inc
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of Sparta, Inc nor the names of its contributors may
+   be used to endorse or promote products derived from this software
+   without specific prior written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 6: Cisco/BUPTNIC copyright notice (BSD) -----
+
+Copyright (c) 2004, Cisco, Inc and Information Network
+Center of Beijing University of Posts and Telecommunications.
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of Cisco, Inc, Beijing University of Posts and
+   Telecommunications, nor the names of their contributors may
+   be used to endorse or promote products derived from this software
+   without specific prior written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 7: Fabasoft R&amp;D Software GmbH &amp; Co KG copyright notice (BSD) -----
+
+Copyright (c) Fabasoft R&amp;D Software GmbH &amp; Co KG, 2003
+oss@fabasoft.com
+Author: Bernhard Penz &lt;bernhard.penz@fabasoft.com&gt;
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+*  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.
+
+*  The name of Fabasoft R&amp;D Software GmbH &amp; Co KG or any of its subsidiaries, 
+   brand or product names may not be used to endorse or promote products 
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+EXPRESS 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 COPYRIGHT HOLDER 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.
+
+---- Part 8: Apple Inc. copyright notice (BSD) -----
+
+Copyright (c) 2007 Apple Inc. All rights reserved.
+
+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.  Neither the name of Apple Inc. ("Apple") nor the names of its  
+contributors may be used to endorse or promote products derived  
+from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND  
+ANY EXPRESS 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 APPLE 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.
+
+---- Part 9: ScienceLogic, LLC copyright notice (BSD) -----
+
+Copyright (c) 2009, ScienceLogic, LLC
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of ScienceLogic, LLC nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS 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 COPYRIGHT
+HOLDERS OR 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.
+
+---- Part 10: IETF copyright notice (BSD) -----
+
+Copyright (c) 2013 IETF Trust and the persons identified as authors of
+the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+· Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+· 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.
+
+· Neither the name of Internet Society, IETF or IETF Trust, nor the
+names of specific contributors, may be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS
+IS” AND ANY EXPRESS 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 COPYRIGHT OWNER
+OR 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.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="03b08995836e5e584b13d01a2096202b"></a><div>
+<hr>
+<div class="component_heading">netifd 2015-12-16</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="6f720c4b8c220bc152617135f86f3b02"></a><div>
+<hr>
+<div class="component_heading">nghttp2 1.29.0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+The MIT License
+
+Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa
+Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="270b0e6df216d736772e719c7e75b6c7"></a><div>
+<hr>
+<div class="component_heading">ntp 4.2.8p9</div>
+<hr>
+<br><div class="component_text">
+<pre>
+This file is automatically generated from html/copyright.html
+
+  Copyright Notice
+  
+   jpg "Clone me," says Dolly sheepishly.
+   
+   Last update: 17-Jan-2015 00:16 UTC
+     _________________________________________________________________
+   
+   The following copyright notice applies to all files collectively
+   called the Network Time Protocol Version 4 Distribution. Unless
+   specifically declared otherwise in an individual file, this entire
+   notice applies as if the text was explicitly included in the file.
+***********************************************************************
+*                                                                     *
+* Copyright (c) University of Delaware 1992-2015                      *
+*                                                                     *
+* Permission to use, copy, modify, and distribute this software and   *
+* its documentation for any purpose with or without fee is hereby     *
+* granted, provided that the above copyright notice appears in all    *
+* copies and that both the copyright notice and this permission       *
+* notice appear in supporting documentation, and that the name        *
+* University of Delaware not be used in advertising or publicity      *
+* pertaining to distribution of the software without specific,        *
+* written prior permission. The University of Delaware makes no       *
+* representations about the suitability this software for any         *
+* purpose. It is provided "as is" without express or implied          *
+* warranty.                                                           *
+*                                                                     *
+***********************************************************************
+
+   Content starting in 2011 from Harlan Stenn, Danny Mayer, and Martin
+   Burnicki is:
+***********************************************************************
+*                                                                     *
+* Copyright (c) Network Time Foundation 2011-2015                     *
+*                                                                     *
+* All Rights Reserved                                                 *
+*                                                                     *
+* 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.                                           *
+*                                                                     *
+* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS  *
+* 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 AUTHORS OR 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.                                                             *
+***********************************************************************
+
+   The following individuals contributed in part to the Network Time
+   Protocol Distribution Version 4 and are acknowledged as authors of
+   this work.
+    1. [1]Takao Abe &lt;takao_abe@xurb.jp&gt; Clock driver for JJY receivers
+    2. [2]Mark Andrews &lt;mark_andrews@isc.org&gt; Leitch atomic clock
+       controller
+    3. [3]Bernd Altmeier &lt;altmeier@atlsoft.de&gt; hopf Elektronik serial
+       line and PCI-bus devices
+    4. [4]Viraj Bais &lt;vbais@mailman1.intel.com&gt; and [5]Clayton Kirkwood
+       &lt;kirkwood@striderfm.intel.com&gt; port to WindowsNT 3.5
+    5. [6]Michael Barone &lt;michael,barone@lmco.com&gt; GPSVME fixes
+    6. [7]Karl Berry &lt;karl@owl.HQ.ileaf.com&gt; syslog to file option
+    7. [8]Greg Brackley &lt;greg.brackley@bigfoot.com&gt; Major rework of WINNT
+       port. Clean up recvbuf and iosignal code into separate modules.
+    8. [9]Marc Brett &lt;Marc.Brett@westgeo.com&gt; Magnavox GPS clock driver
+    9. [10]Piete Brooks &lt;Piete.Brooks@cl.cam.ac.uk&gt; MSF clock driver,
+       Trimble PARSE support
+   10. [11]Nelson B Bolyard &lt;nelson@bolyard.me&gt; update and complete
+       broadcast and crypto features in sntp
+   11. [12]Jean-Francois Boudreault
+       &lt;Jean-Francois.Boudreault@viagenie.qc.ca&gt; IPv6 support
+   12. [13]Reg Clemens &lt;reg@dwf.com&gt; Oncore driver (Current maintainer)
+   13. [14]Steve Clift &lt;clift@ml.csiro.au&gt; OMEGA clock driver
+   14. [15]Casey Crellin &lt;casey@csc.co.za&gt; vxWorks (Tornado) port and
+       help with target configuration
+   15. [16]Sven Dietrich &lt;sven_dietrich@trimble.com&gt; Palisade reference
+       clock driver, NT adj. residuals, integrated Greg's Winnt port.
+   16. [17]John A. Dundas III &lt;dundas@salt.jpl.nasa.gov&gt; Apple A/UX port
+   17. [18]Torsten Duwe &lt;duwe@immd4.informatik.uni-erlangen.de&gt; Linux
+       port
+   18. [19]Dennis Ferguson &lt;dennis@mrbill.canet.ca&gt; foundation code for
+       NTP Version 2 as specified in RFC-1119
+   19. [20]John Hay &lt;jhay@icomtek.csir.co.za&gt; IPv6 support and testing
+   20. [21]Dave Hart &lt;davehart@davehart.com&gt; General maintenance, Windows
+       port interpolation rewrite
+   21. [22]Claas Hilbrecht &lt;neoclock4x@linum.com&gt; NeoClock4X clock driver
+   22. [23]Glenn Hollinger &lt;glenn@herald.usask.ca&gt; GOES clock driver
+   23. [24]Mike Iglesias &lt;iglesias@uci.edu&gt; DEC Alpha port
+   24. [25]Jim Jagielski &lt;jim@jagubox.gsfc.nasa.gov&gt; A/UX port
+   25. [26]Jeff Johnson &lt;jbj@chatham.usdesign.com&gt; massive prototyping
+       overhaul
+   26. [27]Hans Lambermont &lt;Hans.Lambermont@nl.origin-it.com&gt; or
+       [28]&lt;H.Lambermont@chello.nl&gt; ntpsweep
+   27. [29]Poul-Henning Kamp &lt;phk@FreeBSD.ORG&gt; Oncore driver (Original
+       author)
+   28. [30]Frank Kardel [31]&lt;kardel (at) ntp (dot) org&gt; PARSE &lt;GENERIC&gt;
+       (driver 14 reference clocks), STREAMS modules for PARSE, support
+       scripts, syslog cleanup, dynamic interface handling
+   29. [32]Johannes Maximilian Kuehn &lt;kuehn@ntp.org&gt; Rewrote sntp to
+       comply with NTPv4 specification, ntpq saveconfig
+   30. [33]William L. Jones &lt;jones@hermes.chpc.utexas.edu&gt; RS/6000 AIX
+       modifications, HPUX modifications
+   31. [34]Dave Katz &lt;dkatz@cisco.com&gt; RS/6000 AIX port
+   32. [35]Craig Leres &lt;leres@ee.lbl.gov&gt; 4.4BSD port, ppsclock, Magnavox
+       GPS clock driver
+   33. [36]George Lindholm &lt;lindholm@ucs.ubc.ca&gt; SunOS 5.1 port
+   34. [37]Louis A. Mamakos &lt;louie@ni.umd.edu&gt; MD5-based authentication
+   35. [38]Lars H. Mathiesen &lt;thorinn@diku.dk&gt; adaptation of foundation
+       code for Version 3 as specified in RFC-1305
+   36. [39]Danny Mayer &lt;mayer@ntp.org&gt;Network I/O, Windows Port, Code
+       Maintenance
+   37. [40]David L. Mills &lt;mills@udel.edu&gt; Version 4 foundation,
+       precision kernel; clock drivers: 1, 3, 4, 6, 7, 11, 13, 18, 19,
+       22, 36
+   38. [41]Wolfgang Moeller &lt;moeller@gwdgv1.dnet.gwdg.de&gt; VMS port
+   39. [42]Jeffrey Mogul &lt;mogul@pa.dec.com&gt; ntptrace utility
+   40. [43]Tom Moore &lt;tmoore@fievel.daytonoh.ncr.com&gt; i386 svr4 port
+   41. [44]Kamal A Mostafa &lt;kamal@whence.com&gt; SCO OpenServer port
+   42. [45]Derek Mulcahy &lt;derek@toybox.demon.co.uk&gt; and [46]Damon
+       Hart-Davis &lt;d@hd.org&gt; ARCRON MSF clock driver
+   43. [47]Rob Neal &lt;neal@ntp.org&gt; Bancomm refclock and config/parse code
+       maintenance
+   44. [48]Rainer Pruy &lt;Rainer.Pruy@informatik.uni-erlangen.de&gt;
+       monitoring/trap scripts, statistics file handling
+   45. [49]Dirce Richards &lt;dirce@zk3.dec.com&gt; Digital UNIX V4.0 port
+   46. [50]Wilfredo Sánchez &lt;wsanchez@apple.com&gt; added support for
+       NetInfo
+   47. [51]Nick Sayer &lt;mrapple@quack.kfu.com&gt; SunOS streams modules
+   48. [52]Jack Sasportas &lt;jack@innovativeinternet.com&gt; Saved a Lot of
+       space on the stuff in the html/pic/ subdirectory
+   49. [53]Ray Schnitzler &lt;schnitz@unipress.com&gt; Unixware1 port
+   50. [54]Michael Shields &lt;shields@tembel.org&gt; USNO clock driver
+   51. [55]Jeff Steinman &lt;jss@pebbles.jpl.nasa.gov&gt; Datum PTS clock
+       driver
+   52. [56]Harlan Stenn &lt;harlan@pfcs.com&gt; GNU automake/autoconfigure
+       makeover, various other bits (see the ChangeLog)
+   53. [57]Kenneth Stone &lt;ken@sdd.hp.com&gt; HP-UX port
+   54. [58]Ajit Thyagarajan &lt;ajit@ee.udel.edu&gt;IP multicast/anycast
+       support
+   55. [59]Tomoaki TSURUOKA &lt;tsuruoka@nc.fukuoka-u.ac.jp&gt;TRAK clock
+       driver
+   56. [60]Brian Utterback &lt;brian.utterback@oracle.com&gt; General codebase,
+       Solaris issues
+   57. [61]Loganaden Velvindron &lt;loganaden@gmail.com&gt; Sandboxing
+       (libseccomp) support
+   58. [62]Paul A Vixie &lt;vixie@vix.com&gt; TrueTime GPS driver, generic
+       TrueTime clock driver
+   59. [63]Ulrich Windl &lt;Ulrich.Windl@rz.uni-regensburg.de&gt; corrected and
+       validated HTML documents according to the HTML DTD
+     _________________________________________________________________
+
+References
+
+   1. mailto:%20takao_abe@xurb.jp
+   2. mailto:%20mark_andrews@isc.org
+   3. mailto:%20altmeier@atlsoft.de
+   4. mailto:%20vbais@mailman1.intel.co
+   5. mailto:%20kirkwood@striderfm.intel.com
+   6. mailto:%20michael.barone@lmco.com
+   7. mailto:%20karl@owl.HQ.ileaf.com
+   8. mailto:%20greg.brackley@bigfoot.com
+   9. mailto:%20Marc.Brett@westgeo.com
+  10. mailto:%20Piete.Brooks@cl.cam.ac.uk
+  11. mailto:%20nelson@bolyard.me
+  12. mailto:%20Jean-Francois.Boudreault@viagenie.qc.ca
+  13. mailto:%20reg@dwf.com
+  14. mailto:%20clift@ml.csiro.au
+  15. mailto:%20casey@csc.co.za
+  16. mailto:%20Sven_Dietrich@trimble.COM
+  17. mailto:%20dundas@salt.jpl.nasa.gov
+  18. mailto:%20duwe@immd4.informatik.uni-erlangen.de
+  19. mailto:%20dennis@mrbill.canet.ca
+  20. mailto:%20jhay@icomtek.csir.co.za
+  21. mailto:%20davehart@davehart.com
+  22. mailto:%20neoclock4x@linum.com
+  23. mailto:%20glenn@herald.usask.ca
+  24. mailto:%20iglesias@uci.edu
+  25. mailto:%20jagubox.gsfc.nasa.gov
+  26. mailto:%20jbj@chatham.usdesign.com
+  27. mailto:%20Hans.Lambermont@nl.origin-it.com
+  28. mailto:H.Lambermont@chello.nl
+  29. mailto:%20phk@FreeBSD.ORG
+  30. http://www4.informatik.uni-erlangen.de/%7ekardel
+  31. mailto:%20kardel%20%28at%29%20ntp%20%28dot%29%20org
+  32. mailto:kuehn@ntp.org
+  33. mailto:%20jones@hermes.chpc.utexas.edu
+  34. mailto:%20dkatz@cisco.com
+  35. mailto:%20leres@ee.lbl.gov
+  36. mailto:%20lindholm@ucs.ubc.ca
+  37. mailto:%20louie@ni.umd.edu
+  38. mailto:%20thorinn@diku.dk
+  39. mailto:%20mayer@ntp.org
+  40. mailto:%20mills@udel.edu
+  41. mailto:%20moeller@gwdgv1.dnet.gwdg.de
+  42. mailto:%20mogul@pa.dec.com
+  43. mailto:%20tmoore@fievel.daytonoh.ncr.com
+  44. mailto:%20kamal@whence.com
+  45. mailto:%20derek@toybox.demon.co.uk
+  46. mailto:%20d@hd.org
+  47. mailto:%20neal@ntp.org
+  48. mailto:%20Rainer.Pruy@informatik.uni-erlangen.de
+  49. mailto:%20dirce@zk3.dec.com
+  50. mailto:%20wsanchez@apple.com
+  51. mailto:%20mrapple@quack.kfu.com
+  52. mailto:%20jack@innovativeinternet.com
+  53. mailto:%20schnitz@unipress.com
+  54. mailto:%20shields@tembel.org
+  55. mailto:%20pebbles.jpl.nasa.gov
+  56. mailto:%20harlan@pfcs.com
+  57. mailto:%20ken@sdd.hp.com
+  58. mailto:%20ajit@ee.udel.edu
+  59. mailto:%20tsuruoka@nc.fukuoka-u.ac.jp
+  60. mailto:%20brian.utterback@oracle.com
+  61. mailto:%20loganaden@gmail.com
+  62. mailto:%20vixie@vix.com
+  63. mailto:%20Ulrich.Windl@rz.uni-regensburg.de
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="8eb51203c78ba89d4e11b15a41566f95"></a><div>
+<hr>
+<div class="component_heading">odhcp6c 2016-02-08</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="b41199e79125f11543cc926fae0af9a5"></a><div>
+<hr>
+<div class="component_heading">open-plc-utils 2017-01-16</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*====================================================================*
+ *
+ *   Copyright (c) 2013 Qualcomm Atheros, Inc.
+ *
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or 
+ *   without modification, are permitted (subject to the limitations 
+ *   in the disclaimer below) provided that the following conditions 
+ *   are met:
+ *
+ *   * Redistributions of source code must retain the above copyright 
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * 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.
+ *
+ *   * Neither the name of Qualcomm Atheros nor the names of 
+ *     its contributors may be used to endorse or promote products 
+ *     derived from this software without specific prior written 
+ *     permission.
+ *
+ *   NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE 
+ *   GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE 
+ *   COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 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 COPYRIGHT OWNER 
+ *   OR 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.  
+ *
+ *--------------------------------------------------------------------*/
+
+
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="18822ccd0ee3c432ecdcea6e5625c7bf"></a><div>
+<hr>
+<div class="component_heading">openssl 1.0.2o</div>
+<hr>
+<br><div class="component_text">
+<pre>
+
+  LICENSE ISSUES
+  ==============
+
+  The OpenSSL toolkit stays under a double license, i.e. both the conditions of
+  the OpenSSL License and the original SSLeay license apply to the toolkit.
+  See below for the actual license texts. Actually both licenses are BSD-style
+  Open Source licenses. In case of any license issues related to OpenSSL
+  please contact openssl-core@openssl.org.
+
+  OpenSSL License
+  ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2018 The OpenSSL Project.  All rights reserved.
+ *
+ * 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 OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL 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 OpenSSL 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.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * 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 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 acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS 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 AUTHOR OR 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.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="d3cb9b23f2943b2aafe2cf1ee1418bca"></a><div>
+<hr>
+<div class="component_heading">openwrt </div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="65190960c33bd932307ab843c61e903c"></a><div>
+<hr>
+<div class="component_heading">opkg 9c97d5ecd795709c8584e972bfdf3aee3a5b846d</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a6c0639802d21d85b66fe420a1d72dc0"></a><div>
+<hr>
+<div class="component_heading">procd 2015-10-29.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a1c1ba21f2df75f49ff730ff75c4d2e1"></a><div>
+<hr>
+<div class="component_heading">protobuf 3.4.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+This license applies to all parts of Protocol Buffers except the following:
+
+  - Atomicops support for generic gcc, located in
+    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
+    This file is copyrighted by Red Hat Inc.
+
+  - Atomicops support for AIX/POWER, located in
+    src/google/protobuf/stubs/atomicops_internals_power.h.
+    This file is copyrighted by Bloomberg Finance LP.
+
+Copyright 2014, Google Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * 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.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS 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 COPYRIGHT
+OWNER OR 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.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="232714236d4bfb82f768b7dafaa2c750"></a><div>
+<hr>
+<div class="component_heading">relayd 2015-03-13</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9a808dd3222ec1cd4132b25cec3e73d1"></a><div>
+<hr>
+<div class="component_heading">rpcd 2016-06-30</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * rpcd - UBUS RPC server
+ *
+ *   Copyright (C) 2013-2014 Jo-Philipp Wich &lt;jow@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="76f2af56ed4edacd1643f372bce3d219"></a><div>
+<hr>
+<div class="component_heading">u-boot 2014.10</div>
+<hr>
+<br><div class="component_text">
+<pre>
+  U-Boot is Free Software.  It is copyrighted by Wolfgang Denk and
+many others who contributed code (see the actual source code and the
+git commit messages for details).  You can redistribute U-Boot and/or
+modify it under the terms of version 2 of the GNU General Public
+License as published by the Free Software Foundation.  Most of it can
+also be distributed, at your option, under any later version of the
+GNU General Public License -- see individual files for exceptions.
+
+  NOTE! This license does *not* cover the so-called "standalone"
+applications that use U-Boot services by means of the jump table
+provided by U-Boot exactly for this purpose - this is merely
+considered normal use of U-Boot, and does *not* fall under the
+heading of "derived work" -- see file  Licenses/Exceptions  for
+details.
+
+  Also note that the GPL and the other licenses are copyrighted by
+the Free Software Foundation and other organizations, but the
+instance of code that they refer to (the U-Boot source code) is
+copyrighted by me and others who actually wrote it.
+-- Wolfgang Denk
+
+
+Like many other projects, U-Boot has a tradition of including big
+blocks of License headers in all files.  This not only blows up the
+source code with mostly redundant information, but also makes it very
+difficult to generate License Clearing Reports.  An additional problem
+is that even the same licenses are referred to by a number of
+slightly varying text blocks (full, abbreviated, different
+indentation, line wrapping and/or white space, with obsolete address
+information, ...) which makes automatic processing a nightmare.
+
+To make this easier, such license headers in the source files will be
+replaced with a single line reference to Unique License Identifiers
+as defined by the Linux Foundation's SPDX project [1].  For example,
+in a source file the full "GPL v2.0 or later" header text will be
+replaced by a single line:
+
+	SPDX-License-Identifier:	GPL-2.0+
+
+Ideally, the license terms of all files in the source tree should be
+defined by such License Identifiers; in no case a file can contain
+more than one such License Identifier list.
+
+If a "SPDX-License-Identifier:" line references more than one Unique
+License Identifier, then this means that the respective file can be
+used under the terms of either of these licenses, i. e. with
+
+	SPDX-License-Identifier:	GPL-2.0+	BSD-3-Clause
+
+you can chose between GPL-2.0+ and BSD-3-Clause licensing.
+
+We use the SPDX Unique License Identifiers here; these are available
+at [2].
+
+[1] http://spdx.org/
+[2] http://spdx.org/licenses/
+
+Full name					SPDX Identifier	OSI Approved	File name		URI
+=======================================================================================================================================
+GNU General Public License v2.0 only		GPL-2.0		Y		gpl-2.0.txt		http://www.gnu.org/licenses/gpl-2.0.txt
+GNU General Public License v2.0 or later	GPL-2.0+	Y		gpl-2.0.txt		http://www.gnu.org/licenses/gpl-2.0.txt
+GNU Library General Public License v2 or later	LGPL-2.0+	Y		lgpl-2.0.txt		http://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt
+GNU Lesser General Public License v2.1 or later	LGPL-2.1+	Y		lgpl-2.1.txt		http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
+eCos license version 2.0			eCos-2.0			eCos-2.0.txt		http://www.gnu.org/licenses/ecos-license.html
+BSD 2-Clause License				BSD-2-Clause	Y		bsd-2-clause.txt	http://spdx.org/licenses/BSD-2-Clause
+BSD 3-clause "New" or "Revised" License		BSD-3-Clause	Y		bsd-3-clause.txt	http://spdx.org/licenses/BSD-3-Clause#licenseText
+IBM PIBS (PowerPC Initialization and		IBM-pibs			ibm-pibs.txt
+	Boot Software) license
+ISC License					ISC		Y		isc.txt			https://spdx.org/licenses/ISC
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="6f199b5f5bbe8fcda070f5ea84186ada"></a><div>
+<hr>
+<div class="component_heading">ubi-utils 1.5.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) 19yy  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="15d577010cc61bea37824880199968e7"></a><div>
+<hr>
+<div class="component_heading">ubox 2015-11-22</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2bb744eeeac1a40bbc12cf14fc316b8a"></a><div>
+<hr>
+<div class="component_heading">ubus 2015-05-25</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Copyright (C) 2011 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="7a9f25836ffe26403e3fea1e5866e255"></a><div>
+<hr>
+<div class="component_heading">uci 2015-08-27.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * blob.c - uci &lt;-&gt; blobmsg conversion layer
+ * Copyright (C) 2012-2013 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9a66738f118523e7f46e4cd2020900cb"></a><div>
+<hr>
+<div class="component_heading">uhttpd 2018-11-28</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * uhttpd - Tiny single-threaded httpd
+ *
+ *   Copyright (C) 2010-2013 Jo-Philipp Wich &lt;xm@subsignal.org&gt;
+ *   Copyright (C) 2013 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a385c716df001ddd1539613763bfbf68"></a><div>
+<hr>
+<div class="component_heading">ustream-ssl 2015-07-09</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * ustream-ssl - library for SSL over ustream
+ *
+ * Copyright (C) 2012 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="7d0131cceb2f675e13e0fab41ac13aad"></a><div>
+<hr>
+<div class="component_heading">util-linux 2.25.2</div>
+<hr>
+<br><div class="component_text">
+<pre>
+This library is free software; you can redistribute it and/or
+modify it under the terms of the Modified BSD License.
+
+The complete text of the license is available in the
+../Documentation/licenses/COPYING.BSD-3 file.
+</pre>
+<br><br><br><pre>
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later
+version.
+
+The complete text of the license is available in the
+../Documentation/licenses/COPYING.LGPLv2.1 file.
+</pre>
+<br><br><br><pre>
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later
+version.
+
+The complete text of the license is available in the
+../Documentation/licenses/COPYING.LGPLv2.1 file.
+</pre>
+<br><br><br><pre>
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br><pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+</pre>
+<br><br><br><pre>
+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, and the entire permission notice in its entirety,
+   including the disclaimer of warranties.
+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. The name of the author may not be used to endorse or promote
+   products derived from this software without specific prior
+   written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+</pre>
+<br><br><br><pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="bc993918e4acf46ea73ab5ba317c0be4"></a><div>
+<hr>
+<div class="component_heading">wireless_tools.29 29</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="80fe70c3472ad809910c95625b63c7e6"></a><div>
+<hr>
+<div class="component_heading">zlib 1.2.11</div>
+<hr>
+<br><div class="component_text">
+<pre>
+ZLIB DATA COMPRESSION LIBRARY
+
+zlib 1.2.11 is a general purpose data compression library.  All the code is
+thread safe.  The data format used by the zlib library is described by RFCs
+(Request for Comments) 1950 to 1952 in the files
+http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
+rfc1952 (gzip format).
+
+All functions of the compression library are documented in the file zlib.h
+(volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
+of the library is given in the file test/example.c which also tests that
+the library is working correctly.  Another example is given in the file
+test/minigzip.c.  The compression library itself is composed of all source
+files in the root directory.
+
+To compile all files and run the test program, follow the instructions given at
+the top of Makefile.in.  In short "./configure; make test", and if that goes
+well, "make install" should work for most flavors of Unix.  For Windows, use
+one of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
+make_vms.com.
+
+Questions about zlib should be sent to &lt;zlib@gzip.org&gt;, or to Gilles Vollant
+&lt;info@winimage.com&gt; for the Windows DLL version.  The zlib home page is
+http://zlib.net/ .  Before reporting a problem, please check this site to
+verify that you have the latest version of zlib; otherwise get the latest
+version and check whether the problem still exists or not.
+
+PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
+
+Mark Nelson &lt;markn@ieee.org&gt; wrote an article about zlib for the Jan.  1997
+issue of Dr.  Dobb's Journal; a copy of the article is available at
+http://marknelson.us/1997/01/01/zlib-engine/ .
+
+The changes made in version 1.2.11 are documented in the file ChangeLog.
+
+Unsupported third party contributions are provided in directory contrib/ .
+
+zlib is available in Java using the java.util.zip package, documented at
+http://java.sun.com/developer/technicalArticles/Programming/compression/ .
+
+A Perl interface to zlib written by Paul Marquess &lt;pmqs@cpan.org&gt; is available
+at CPAN (Comprehensive Perl Archive Network) sites, including
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
+
+A Python interface to zlib written by A.M. Kuchling &lt;amk@amk.ca&gt; is
+available in Python 1.5 and later versions, see
+http://docs.python.org/library/zlib.html .
+
+zlib is built into tcl: http://wiki.tcl.tk/4610 .
+
+An experimental package to read and write files in .zip format, written on top
+of zlib by Gilles Vollant &lt;info@winimage.com&gt;, is available in the
+contrib/minizip directory of zlib.
+
+
+Notes for some targets:
+
+- For Windows DLL versions, please see win32/DLL_FAQ.txt
+
+- For 64-bit Irix, deflate.c must be compiled without any optimization. With
+  -O, one libpng test fails. The test works in 32 bit mode (with the -n32
+  compiler flag). The compiler bug has been reported to SGI.
+
+- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
+  when compiled with cc.
+
+- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
+  necessary to get gzprintf working correctly. This is done by configure.
+
+- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
+  other compilers. Use "make test" to check your compiler.
+
+- gzdopen is not supported on RISCOS or BEOS.
+
+- For PalmOs, see http://palmzlib.sourceforge.net/
+
+
+Acknowledgments:
+
+  The deflate format used by zlib was defined by Phil Katz.  The deflate and
+  zlib specifications were written by L.  Peter Deutsch.  Thanks to all the
+  people who reported problems and suggested various improvements in zlib; they
+  are too numerous to cite here.
+
+Copyright notice:
+
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+If you use the zlib library in a product, we would appreciate *not* receiving
+lengthy legal documents to sign.  The sources are provided for free but without
+warranty of any kind.  The library has been entirely written by Jean-loup
+Gailly and Mark Adler; it does not include third-party code.
+
+If you redistribute modified sources, we would appreciate that you include in
+the file ChangeLog history information documenting your changes.  Please read
+the FAQ for more information on the distribution of modified source versions.
+</pre>
+<br><br><br>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/usr/share/licenses/oss-license-info-retail.html b/usr/share/licenses/oss-license-info-retail.html
new file mode 100644
index 0000000..12d5c28
--- /dev/null
+++ b/usr/share/licenses/oss-license-info-retail.html
@@ -0,0 +1,13351 @@
+<!DOCTYPE html><html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta charset="utf-8">
+<title>Free Software</title>
+<style type="text/css">
+        .notice div {
+          padding-top: 10px;
+        }
+        div.notice_product {
+          font-size: 1.2em;
+          font-weight: bold;
+        }
+        div.notice_version {
+          font-size: 0.9em;
+          padding-bottom: 10px;
+        }
+        div.notice_title, div.notice_heading {
+          padding-top: 20px;
+          padding-bottom: 10px;
+          font-weight: bold;
+        }
+        div.notice_product, div.notice_version, div.notice_title {
+          text-align: center;
+        }
+        div.notice_email {
+          padding-left: 40px;
+        }
+
+        table.oss_components {
+          text-align: left;
+          padding-top: 40px;
+          padding-bottom: 40px;
+        }
+        table.oss_components th {
+          padding-bottom: 10px;
+          padding-right: 40px;
+        }
+        table.oss_components td {
+          font-size: 0.9em;
+          padding-right: 40px;
+        }
+        table.oss_components a, table.oss_components a:visited {
+          color: #3333ee;
+        }
+
+        .component_heading {
+          font-weight: bold;
+        }
+      </style>
+</head>
+<body>
+<div class="notice">
+<div class="notice_product">
+     
+  </div>
+<div class="notice_version">
+    Version 5.2.1 (2019-02-19)
+  </div>
+<div class="notice_title">
+    Copyright Notice and Warranty Disclaimer
+  </div>
+<div class="notice_normal">
+    In absence of an official legally proven version of the referenced license documents this document has to stay with the original English versions of the licenses.
+  </div>
+<div class="notice_heading">
+    Warranty Disclaimer
+  </div>
+<div class="notice_normal">
+    This program or product's firmware contains free software; you can redistribute the free software and/or modify it under the terms of the following Licenses.
+  </div>
+<div class="notice_normal">
+    The free software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  </div>
+<div class="notice_heading">
+    Copyright Notice
+  </div>
+<div class="notice_normal">
+    The free software source code is available as free download on the devolo website and source code can at least for a period of three years be requested from:
+  </div>
+<div class="notice_email">
+    gpl@devolo.de
+  </div>
+<div class="notice_normal">
+    All copyrights are identified in more detail in the free software source code. You will receive copies of applied License along with each source code module. Please find below for ease of reference the program version and license version information.
+  </div>
+</div>
+<table class="oss_components">
+<tr>
+<th>Name</th>
+<th>Version</th>
+<th>Licenses</th>
+</tr>
+<tr>
+<td><a href="#2900d624863f168f2ddd7f8344234a83">boost_1_58_0</a></td>
+<td>1_58_0</td>
+<td>Boost Software License http://www.boost.org/users/license.html</td>
+</tr>
+<tr>
+<td><a href="#bed59cefaa162d2d339c7f68a0161fe0">bridge-utils</a></td>
+<td>1.5</td>
+<td>GPL-2.0+</td>
+</tr>
+<tr>
+<td><a href="#6765d9ccd08c622395efc466ca7b8d3b">busybox</a></td>
+<td>1.25.1</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#37055243218efa7c8adb2346f2386f7a">curl</a></td>
+<td>7.57.0</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#acb691e5a7cf3711b20bb3c5bbf4962b">dropbear</a></td>
+<td>2017.75</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#afdf0ea568926c6e5ba07054fc3444d9">ebtables-v2.0.10-4</a></td>
+<td>2.0.10-4</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#2fe417564aff906a9b3b617dfed9de6a">expat</a></td>
+<td>2.2.4</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#a543228b280e8787631976bfaba72770">firewall</a></td>
+<td>2015-07-27</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#34b462e99fa48ae17d216464e6ade7dd">fstools</a></td>
+<td>2016-01-10</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#3aba70f1a9f766c149b7d722ba842430">fwknop</a></td>
+<td>2.6.9</td>
+<td>GPLv2</td>
+</tr>
+<tr>
+<td><a href="#4d9641d67801e117e562d806e92bb20c">gcc-linaro-4.8-2014.04</a></td>
+<td>4.8-linaro</td>
+<td>GPL-3.0-with-GCC-exception</td>
+</tr>
+<tr>
+<td><a href="#9e5e62b6615522e182efd232e731276c">iproute2</a></td>
+<td>4.0.0</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#ac0d93e290e6dc4ac916b67c6ff684fb">iptables</a></td>
+<td>1.4.21</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#b35fb4266df7bc498a1a1fd4e14919a7">jansson</a></td>
+<td>2.7</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#5ad0db3ced98a71fc871b750567d58ad">json-c</a></td>
+<td>0.12</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#d1772d9ab47569bdd5ed2d84b78fc625">jsonfilter</a></td>
+<td>2018-02-04</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#8524cc80396861f6fada85cc57ea1502">libiwinfo</a></td>
+<td>2015-06-01</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#2b5114179d66e09516cbebb8c91c4c7c">libmesode</a></td>
+<td>0.9.1</td>
+<td>GPL-3.0</td>
+</tr>
+<tr>
+<td><a href="#2d18b3af1dc44df6ca764c095b1dc224">libmicrohttpd</a></td>
+<td>0.9.59</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#2427c9791094dd6cb57407b063c1d25c">libmicroxml</a></td>
+<td>2015-03-18</td>
+<td>LGPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#92f344960166be8a1e001a847c7dd961">libnl</a></td>
+<td>3.2.21</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#1d6319dafa78b2cff0699f142981b5a6">libpcap</a></td>
+<td>1.5.3</td>
+<td>BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#56756bccf20eb29add08b7b9aee10998">librpc</a></td>
+<td>2015-11-04</td>
+<td>Custom LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#dbe774c2a595cf2b7377846c02288b74">libubox</a></td>
+<td>2015-11-08</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#5bb062356cddb5d2c0ef41eb2660cb06">linux</a></td>
+<td>4.4.60</td>
+<td>GPLv2</td>
+</tr>
+<tr>
+<td><a href="#771035f77dff8c541478d9b688ab3f7a">miniupnpd</a></td>
+<td>2.0.20170421</td>
+<td>BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#9a1947924de463020e55ba9008b115d4">net-snmp</a></td>
+<td>5.7.3</td>
+<td>MIT BSD-3-Clause-Clear</td>
+</tr>
+<tr>
+<td><a href="#03b08995836e5e584b13d01a2096202b">netifd</a></td>
+<td>2015-12-16</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#6f720c4b8c220bc152617135f86f3b02">nghttp2</a></td>
+<td>1.29.0</td>
+<td>MIT</td>
+</tr>
+<tr>
+<td><a href="#270b0e6df216d736772e719c7e75b6c7">ntp</a></td>
+<td>4.2.8p9</td>
+<td>Unique</td>
+</tr>
+<tr>
+<td><a href="#8eb51203c78ba89d4e11b15a41566f95">odhcp6c</a></td>
+<td>2016-02-08</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#b41199e79125f11543cc926fae0af9a5">open-plc-utils</a></td>
+<td>2017-01-16</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#18822ccd0ee3c432ecdcea6e5625c7bf">openssl</a></td>
+<td>1.0.2o</td>
+<td>OpenSSL</td>
+</tr>
+<tr>
+<td><a href="#d3cb9b23f2943b2aafe2cf1ee1418bca">openwrt</a></td>
+<td></td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#65190960c33bd932307ab843c61e903c">opkg</a></td>
+<td>9c97d5ecd795709c8584e972bfdf3aee3a5b846d</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#a6c0639802d21d85b66fe420a1d72dc0">procd</a></td>
+<td>2015-10-29.1</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#a1c1ba21f2df75f49ff730ff75c4d2e1">protobuf</a></td>
+<td>3.4.1</td>
+<td>BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#232714236d4bfb82f768b7dafaa2c750">relayd</a></td>
+<td>2015-03-13</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#9a808dd3222ec1cd4132b25cec3e73d1">rpcd</a></td>
+<td>2016-06-30</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#76f2af56ed4edacd1643f372bce3d219">u-boot</a></td>
+<td>2014.10</td>
+<td>GPL-2.0 GPL-2.0+</td>
+</tr>
+<tr>
+<td><a href="#6f199b5f5bbe8fcda070f5ea84186ada">ubi-utils</a></td>
+<td>1.5.1</td>
+<td>GPLv2</td>
+</tr>
+<tr>
+<td><a href="#15d577010cc61bea37824880199968e7">ubox</a></td>
+<td>2015-11-22</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#2bb744eeeac1a40bbc12cf14fc316b8a">ubus</a></td>
+<td>2015-05-25</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#7a9f25836ffe26403e3fea1e5866e255">uci</a></td>
+<td>2015-08-27.1</td>
+<td>LGPL-2.1</td>
+</tr>
+<tr>
+<td><a href="#9a66738f118523e7f46e4cd2020900cb">uhttpd</a></td>
+<td>2018-11-28</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#a385c716df001ddd1539613763bfbf68">ustream-ssl</a></td>
+<td>2015-07-09</td>
+<td>ISC</td>
+</tr>
+<tr>
+<td><a href="#7d0131cceb2f675e13e0fab41ac13aad">util-linux</a></td>
+<td>2.25.2</td>
+<td>GPL-2.0 LGPL-2.1 BSD-3-Clause</td>
+</tr>
+<tr>
+<td><a href="#bc993918e4acf46ea73ab5ba317c0be4">wireless_tools.29</a></td>
+<td>29</td>
+<td>GPL-2.0</td>
+</tr>
+<tr>
+<td><a href="#80fe70c3472ad809910c95625b63c7e6">zlib</a></td>
+<td>1.2.11</td>
+<td>Zlib</td>
+</tr>
+</table>
+<div>
+<a id="2900d624863f168f2ddd7f8344234a83"></a><div>
+<hr>
+<div class="component_heading">boost_1_58_0 1_58_0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="bed59cefaa162d2d339c7f68a0161fe0"></a><div>
+<hr>
+<div class="component_heading">bridge-utils 1.5</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.	This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.	Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.	For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.	If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.	For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) 19yy	&lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="6765d9ccd08c622395efc466ca7b8d3b"></a><div>
+<hr>
+<div class="component_heading">busybox 1.25.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+bzip2 applet in busybox is based on lightly-modified source
+of bzip2 version 1.0.4. bzip2 source is distributed
+under the following conditions (copied verbatim from LICENSE file)
+===========================================================
+
+
+This program, "bzip2", the associated library "libbzip2", and all
+documentation, are copyright (C) 1996-2006 Julian R Seward.  All
+rights reserved.
+
+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. The origin of this software must not be misrepresented; you must
+   not claim that you wrote the original software.  If you use this
+   software in a product, an acknowledgment in the product
+   documentation would be appreciated but is not required.
+
+3. Altered source versions must be plainly marked as such, and must
+   not be misrepresented as being the original software.
+
+4. The name of the author may not be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+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 AUTHOR 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.
+
+Julian Seward, Cambridge, UK.
+jseward@bzip.org
+bzip2/libbzip2 version 1.0.4 of 20 December 2006
+</pre>
+<br><br><br><pre>
+--- A note on GPL versions
+
+BusyBox is distributed under version 2 of the General Public License (included
+in its entirety, below).  Version 2 is the only version of this license which
+this version of BusyBox (or modified versions derived from this one) may be
+distributed under.
+
+------------------------------------------------------------------------
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="37055243218efa7c8adb2346f2386f7a"></a><div>
+<hr>
+<div class="component_heading">curl 7.57.0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1996 - 2017, Daniel Stenberg, &lt;daniel@haxx.se&gt;, and many
+contributors, see the THANKS file.
+
+All rights reserved.
+
+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", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
+OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization of the copyright holder.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="acb691e5a7cf3711b20bb3c5bbf4962b"></a><div>
+<hr>
+<div class="component_heading">dropbear 2017.75</div>
+<hr>
+<br><div class="component_text">
+<pre>
+LibTomMath is hereby released into the Public Domain.  
+
+-- Tom St Denis
+
+</pre>
+<br><br><br><pre>
+Dropbear contains a number of components from different sources, hence there
+are a few licenses and authors involved. All licenses are fairly 
+non-restrictive.
+
+
+The majority of code is written by Matt Johnston, under the license below.
+
+Portions of the client-mode work are (c) 2004 Mihnea Stoenescu, under the
+same license:
+
+Copyright (c) 2002-2015 Matt Johnston
+Portions copyright (c) 2004 Mihnea Stoenescu
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+=====
+
+LibTomCrypt and LibTomMath are written by Tom St Denis, and are Public Domain.
+
+=====
+
+sshpty.c is taken from OpenSSH 3.5p1, 
+  Copyright (c) 1995 Tatu Ylonen &lt;ylo@cs.hut.fi&gt;, Espoo, Finland
+                     All rights reserved
+ "As far as I am concerned, the code I have written for this software
+  can be used freely for any purpose.  Any derived versions of this
+  software must be clearly marked as such, and if the derived work is
+  incompatible with the protocol description in the RFC file, it must be
+  called by a name other than "ssh" or "Secure Shell". "
+
+=====
+
+loginrec.c
+loginrec.h
+atomicio.h
+atomicio.c
+and strlcat() (included in util.c) are from OpenSSH 3.6.1p2, and are licensed
+under the 2 point BSD license.
+
+loginrec is written primarily by Andre Lucas, atomicio.c by Theo de Raadt.
+
+strlcat() is (c) Todd C. Miller
+
+=====
+
+Import code in keyimport.c is modified from PuTTY's import.c, licensed as
+follows:
+
+PuTTY is copyright 1997-2003 Simon Tatham.
+
+Portions copyright Robert de Bath, Joris van Rantwijk, Delian
+Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry,
+Justin Bradford, and CORE SDI S.A.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+=====
+
+curve25519-donna:
+
+/* Copyright 2008, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS 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 COPYRIGHT
+ * OWNER OR 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.
+ *
+ * curve25519-donna: Curve25519 elliptic curve, public key function
+ *
+ * http://code.google.com/p/curve25519-donna/
+ *
+ * Adam Langley &lt;agl@imperialviolet.org&gt;
+ *
+ * Derived from public domain C code by Daniel J. Bernstein &lt;djb@cr.yp.to&gt;
+ *
+ * More information about curve25519 can be found here
+ *   http://cr.yp.to/ecdh.html
+ *
+ * djb's sample implementation of curve25519 is written in a special assembly
+ * language called qhasm and uses the floating point registers.
+ *
+ * This is, almost, a clean room reimplementation from the curve25519 paper. It
+ * uses many of the tricks described therein. Only the crecip function is taken
+ * from the sample implementation.
+ */
+</pre>
+<br><br><br><pre>
+LibTomCrypt is public domain.  As should all quality software be.
+
+Tom St Denis
+
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="afdf0ea568926c6e5ba07054fc3444d9"></a><div>
+<hr>
+<div class="component_heading">ebtables-v2.0.10-4 2.0.10-4</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2fe417564aff906a9b3b617dfed9de6a"></a><div>
+<hr>
+<div class="component_heading">expat 2.2.4</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
+Copyright (c) 2001-2017 Expat maintainers
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a543228b280e8787631976bfaba72770"></a><div>
+<hr>
+<div class="component_heading">firewall 2015-07-27</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * firewall3 - 3rd OpenWrt UCI firewall implementation
+ *
+ *   Copyright (C) 2013 Jo-Philipp Wich &lt;jow@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="34b462e99fa48ae17d216464e6ade7dd"></a><div>
+<hr>
+<div class="component_heading">fstools 2016-01-10</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="3aba70f1a9f766c149b7d722ba842430"></a><div>
+<hr>
+<div class="component_heading">fwknop 2.6.9</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="4d9641d67801e117e562d806e92bb20c"></a><div>
+<hr>
+<div class="component_heading">gcc-linaro-4.8-2014.04 4.8-linaro</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+</pre>
+<br><br><br><pre>
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
+
+</pre>
+<br><br><br><pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+&lt;http://www.gnu.org/licenses/&gt;.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+&lt;http://www.gnu.org/philosophy/why-not-lgpl.html&gt;.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9e5e62b6615522e182efd232e731276c"></a><div>
+<hr>
+<div class="component_heading">iproute2 4.0.0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="ac0d93e290e6dc4ac916b67c6ff684fb"></a><div>
+<hr>
+<div class="component_heading">iptables 1.4.21</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="b35fb4266df7bc498a1a1fd4e14919a7"></a><div>
+<hr>
+<div class="component_heading">jansson 2.7</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Copyright (c) 2009-2014 Petri Lehtinen &lt;petri@digip.org&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="5ad0db3ced98a71fc871b750567d58ad"></a><div>
+<hr>
+<div class="component_heading">json-c 0.12</div>
+<hr>
+<br><div class="component_text">
+<pre>
+
+Copyright (c) 2009-2012 Eric Haszlakiewicz
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+----------------------------------------------------------------
+
+Copyright (c) 2004, 2005 Metaparadigm Pte Ltd
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="d1772d9ab47569bdd5ed2d84b78fc625"></a><div>
+<hr>
+<div class="component_heading">jsonfilter 2018-02-04</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Copyright (C) 2013-2014 Jo-Philipp Wich &lt;jo@mein.io&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="8524cc80396861f6fada85cc57ea1502"></a><div>
+<hr>
+<div class="component_heading">libiwinfo 2015-06-01</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2b5114179d66e09516cbebb8c91c4c7c"></a><div>
+<hr>
+<div class="component_heading">libmesode 0.9.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+&lt;http://www.gnu.org/licenses/&gt;.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+&lt;http://www.gnu.org/philosophy/why-not-lgpl.html&gt;.
+Copyright (c) 2005-2009 Collecta, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2d18b3af1dc44df6ca764c095b1dc224"></a><div>
+<hr>
+<div class="component_heading">libmicrohttpd 0.9.59</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Some of this code is DUAL-LICENSED.  If you use MHD without HTTPS/SSL
+support, you are free to choose between the LGPL and the eCos License
+(http://ecos.sourceware.org/license-overview.html).  If you compile
+MHD with HTTPS support, you must obey the terms of the GNU LGPL.
+
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2427c9791094dd6cb57407b063c1d25c"></a><div>
+<hr>
+<div class="component_heading">libmicroxml 2015-03-18</div>
+<hr>
+<br><div class="component_text">
+<pre>
+			   microxml License
+			  September 18, 2010
+
+
+The microxml library and included programs are provided under the
+terms of the GNU Library General Public License version 2 (LGPL2)
+with the following exceptions:
+
+  1. Static linking of applications to the microxml library
+does not constitute a derivative work and does not require
+the author to provide source code for the application, use
+the shared microxml libraries, or link their applications
+against a user-supplied version of microxml
+
+If you link the application to a modified version of
+microxml then the changes to microxml must be provided
+under the terms of the LGPL2 in sections 1, 2, and 4.
+
+  2. You do not have to provide a copy of the microxml license
+with programs that are linked to the microxml library, nor
+do you have to identify the microxml license in your
+program or documentation as required by section 6 of the
+LGPL2.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+			 Version 2, June 1991
+
+	  Copyright (C) 1991 Free Software Foundation, Inc.
+       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+     Everyone is permitted to copy and distribute verbatim copies
+      of this license document, but changing it is not allowed.
+
+    [This is the first released version of the library GPL.  It is
+   numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			       Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    microxml is a micro XML parsing library
+    Copyright (C) 2011 Luka Perkov
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="92f344960166be8a1e001a847c7dd961"></a><div>
+<hr>
+<div class="component_heading">libnl 3.2.21</div>
+<hr>
+<br><div class="component_text">
+<pre>
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="1d6319dafa78b2cff0699f142981b5a6"></a><div>
+<hr>
+<div class="component_heading">libpcap 1.5.3</div>
+<hr>
+<br><div class="component_text">
+<pre>
+License: BSD
+ 
+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. The names of the authors may not be used to endorse or promote
+     products derived from this software without specific prior
+     written permission.
+  
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="56756bccf20eb29add08b7b9aee10998"></a><div>
+<hr>
+<div class="component_heading">librpc 2015-11-04</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ */
+/*
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+</pre>
+<br><br><br><pre>
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="dbe774c2a595cf2b7377846c02288b74"></a><div>
+<hr>
+<div class="component_heading">libubox 2015-11-08</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Copyright (C) 2012 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="5bb062356cddb5d2c0ef41eb2660cb06"></a><div>
+<hr>
+<div class="component_heading">linux 4.4.60</div>
+<hr>
+<br><div class="component_text">
+<pre>
+
+   NOTE! This copyright does *not* cover user programs that use kernel
+ services by normal system calls - this is merely considered normal use
+ of the kernel, and does *not* fall under the heading of "derived work".
+ Also note that the GPL below is copyrighted by the Free Software
+ Foundation, but the instance of code that it refers to (the Linux
+ kernel) is copyrighted by me and others who actually wrote it.
+
+ Also note that the only valid version of the GPL as far as the kernel
+ is concerned is _this_ particular version of the license (ie v2, not
+ v2.2 or v3.x or whatever), unless explicitly otherwise stated.
+
+			Linus Torvalds
+
+----------------------------------------
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="771035f77dff8c541478d9b688ab3f7a"></a><div>
+<hr>
+<div class="component_heading">miniupnpd 2.0.20170421</div>
+<hr>
+<br><div class="component_text">
+<pre>
+MiniUPnPd
+Copyright (c) 2006-2016, Thomas BERNARD
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * 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.
+    * The name of the author may not be used to endorse or promote products
+	  derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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.
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9a1947924de463020e55ba9008b115d4"></a><div>
+<hr>
+<div class="component_heading">net-snmp 5.7.3</div>
+<hr>
+<br><div class="component_text">
+<pre>
+Various copyrights apply to this package, listed in various separate
+parts below.  Please make sure that you read all the parts.
+
+---- Part 1: CMU/UCD copyright notice: (BSD like) -----
+
+
+       Copyright 1989, 1991, 1992 by Carnegie Mellon University
+
+		  Derivative Work - 1996, 1998-2000
+Copyright 1996, 1998-2000 The Regents of the University of California
+
+			 All Rights Reserved
+
+Permission to use, copy, modify and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appears in all copies and
+that both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of CMU and The Regents of
+the University of California not be used in advertising or publicity
+pertaining to distribution of the software without specific written
+permission.
+
+CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL CMU OR
+THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+FROM THE 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.
+
+
+---- Part 2: Networks Associates Technology, Inc copyright notice (BSD) -----
+
+Copyright (c) 2001-2003, Networks Associates Technology, Inc
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of the Networks Associates Technology, Inc nor the
+   names of its contributors may be used to endorse or promote
+   products derived from this software without specific prior written
+   permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 3: Cambridge Broadband Ltd. copyright notice (BSD) -----
+
+Portions of this code are copyright (c) 2001-2003, Cambridge Broadband Ltd.
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  The name of Cambridge Broadband Ltd. may not be used to endorse or
+   promote products derived from this software without specific prior
+   written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+EXPRESS 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 COPYRIGHT HOLDER 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.
+
+
+---- Part 4: Sun Microsystems, Inc. copyright notice (BSD) -----
+
+Copyright © 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 
+California 95054, U.S.A. All rights reserved.
+
+Use is subject to license terms below.
+
+This distribution may include materials developed by third parties.
+
+Sun, Sun Microsystems, the Sun logo and Solaris are trademarks or registered 
+trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+*  Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+
+*  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.
+
+*  Neither the name of the Sun Microsystems, Inc. nor the
+    names of its contributors may be used to endorse or promote
+    products derived from this software without specific prior written
+    permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 5: Sparta, Inc copyright notice (BSD) -----
+
+Copyright (c) 2003-2013, Sparta, Inc
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of Sparta, Inc nor the names of its contributors may
+   be used to endorse or promote products derived from this software
+   without specific prior written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 6: Cisco/BUPTNIC copyright notice (BSD) -----
+
+Copyright (c) 2004, Cisco, Inc and Information Network
+Center of Beijing University of Posts and Telecommunications.
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of Cisco, Inc, Beijing University of Posts and
+   Telecommunications, nor the names of their contributors may
+   be used to endorse or promote products derived from this software
+   without specific prior written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS 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 COPYRIGHT HOLDERS OR
+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.
+
+---- Part 7: Fabasoft R&amp;D Software GmbH &amp; Co KG copyright notice (BSD) -----
+
+Copyright (c) Fabasoft R&amp;D Software GmbH &amp; Co KG, 2003
+oss@fabasoft.com
+Author: Bernhard Penz &lt;bernhard.penz@fabasoft.com&gt;
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+*  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.
+
+*  The name of Fabasoft R&amp;D Software GmbH &amp; Co KG or any of its subsidiaries, 
+   brand or product names may not be used to endorse or promote products 
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
+EXPRESS 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 COPYRIGHT HOLDER 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.
+
+---- Part 8: Apple Inc. copyright notice (BSD) -----
+
+Copyright (c) 2007 Apple Inc. All rights reserved.
+
+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.  Neither the name of Apple Inc. ("Apple") nor the names of its  
+contributors may be used to endorse or promote products derived  
+from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND  
+ANY EXPRESS 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 APPLE 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.
+
+---- Part 9: ScienceLogic, LLC copyright notice (BSD) -----
+
+Copyright (c) 2009, ScienceLogic, LLC
+All rights reserved.
+ 
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ 
+*  Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+ 
+*  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.
+ 
+*  Neither the name of ScienceLogic, LLC nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+ 
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS 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 COPYRIGHT
+HOLDERS OR 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.
+
+---- Part 10: IETF copyright notice (BSD) -----
+
+Copyright (c) 2013 IETF Trust and the persons identified as authors of
+the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+· Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+· 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.
+
+· Neither the name of Internet Society, IETF or IETF Trust, nor the
+names of specific contributors, may be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS
+IS” AND ANY EXPRESS 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 COPYRIGHT OWNER
+OR 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.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="03b08995836e5e584b13d01a2096202b"></a><div>
+<hr>
+<div class="component_heading">netifd 2015-12-16</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="6f720c4b8c220bc152617135f86f3b02"></a><div>
+<hr>
+<div class="component_heading">nghttp2 1.29.0</div>
+<hr>
+<br><div class="component_text">
+<pre>
+The MIT License
+
+Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa
+Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="270b0e6df216d736772e719c7e75b6c7"></a><div>
+<hr>
+<div class="component_heading">ntp 4.2.8p9</div>
+<hr>
+<br><div class="component_text">
+<pre>
+This file is automatically generated from html/copyright.html
+
+  Copyright Notice
+  
+   jpg "Clone me," says Dolly sheepishly.
+   
+   Last update: 17-Jan-2015 00:16 UTC
+     _________________________________________________________________
+   
+   The following copyright notice applies to all files collectively
+   called the Network Time Protocol Version 4 Distribution. Unless
+   specifically declared otherwise in an individual file, this entire
+   notice applies as if the text was explicitly included in the file.
+***********************************************************************
+*                                                                     *
+* Copyright (c) University of Delaware 1992-2015                      *
+*                                                                     *
+* Permission to use, copy, modify, and distribute this software and   *
+* its documentation for any purpose with or without fee is hereby     *
+* granted, provided that the above copyright notice appears in all    *
+* copies and that both the copyright notice and this permission       *
+* notice appear in supporting documentation, and that the name        *
+* University of Delaware not be used in advertising or publicity      *
+* pertaining to distribution of the software without specific,        *
+* written prior permission. The University of Delaware makes no       *
+* representations about the suitability this software for any         *
+* purpose. It is provided "as is" without express or implied          *
+* warranty.                                                           *
+*                                                                     *
+***********************************************************************
+
+   Content starting in 2011 from Harlan Stenn, Danny Mayer, and Martin
+   Burnicki is:
+***********************************************************************
+*                                                                     *
+* Copyright (c) Network Time Foundation 2011-2015                     *
+*                                                                     *
+* All Rights Reserved                                                 *
+*                                                                     *
+* 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.                                           *
+*                                                                     *
+* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS  *
+* 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 AUTHORS OR 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.                                                             *
+***********************************************************************
+
+   The following individuals contributed in part to the Network Time
+   Protocol Distribution Version 4 and are acknowledged as authors of
+   this work.
+    1. [1]Takao Abe &lt;takao_abe@xurb.jp&gt; Clock driver for JJY receivers
+    2. [2]Mark Andrews &lt;mark_andrews@isc.org&gt; Leitch atomic clock
+       controller
+    3. [3]Bernd Altmeier &lt;altmeier@atlsoft.de&gt; hopf Elektronik serial
+       line and PCI-bus devices
+    4. [4]Viraj Bais &lt;vbais@mailman1.intel.com&gt; and [5]Clayton Kirkwood
+       &lt;kirkwood@striderfm.intel.com&gt; port to WindowsNT 3.5
+    5. [6]Michael Barone &lt;michael,barone@lmco.com&gt; GPSVME fixes
+    6. [7]Karl Berry &lt;karl@owl.HQ.ileaf.com&gt; syslog to file option
+    7. [8]Greg Brackley &lt;greg.brackley@bigfoot.com&gt; Major rework of WINNT
+       port. Clean up recvbuf and iosignal code into separate modules.
+    8. [9]Marc Brett &lt;Marc.Brett@westgeo.com&gt; Magnavox GPS clock driver
+    9. [10]Piete Brooks &lt;Piete.Brooks@cl.cam.ac.uk&gt; MSF clock driver,
+       Trimble PARSE support
+   10. [11]Nelson B Bolyard &lt;nelson@bolyard.me&gt; update and complete
+       broadcast and crypto features in sntp
+   11. [12]Jean-Francois Boudreault
+       &lt;Jean-Francois.Boudreault@viagenie.qc.ca&gt; IPv6 support
+   12. [13]Reg Clemens &lt;reg@dwf.com&gt; Oncore driver (Current maintainer)
+   13. [14]Steve Clift &lt;clift@ml.csiro.au&gt; OMEGA clock driver
+   14. [15]Casey Crellin &lt;casey@csc.co.za&gt; vxWorks (Tornado) port and
+       help with target configuration
+   15. [16]Sven Dietrich &lt;sven_dietrich@trimble.com&gt; Palisade reference
+       clock driver, NT adj. residuals, integrated Greg's Winnt port.
+   16. [17]John A. Dundas III &lt;dundas@salt.jpl.nasa.gov&gt; Apple A/UX port
+   17. [18]Torsten Duwe &lt;duwe@immd4.informatik.uni-erlangen.de&gt; Linux
+       port
+   18. [19]Dennis Ferguson &lt;dennis@mrbill.canet.ca&gt; foundation code for
+       NTP Version 2 as specified in RFC-1119
+   19. [20]John Hay &lt;jhay@icomtek.csir.co.za&gt; IPv6 support and testing
+   20. [21]Dave Hart &lt;davehart@davehart.com&gt; General maintenance, Windows
+       port interpolation rewrite
+   21. [22]Claas Hilbrecht &lt;neoclock4x@linum.com&gt; NeoClock4X clock driver
+   22. [23]Glenn Hollinger &lt;glenn@herald.usask.ca&gt; GOES clock driver
+   23. [24]Mike Iglesias &lt;iglesias@uci.edu&gt; DEC Alpha port
+   24. [25]Jim Jagielski &lt;jim@jagubox.gsfc.nasa.gov&gt; A/UX port
+   25. [26]Jeff Johnson &lt;jbj@chatham.usdesign.com&gt; massive prototyping
+       overhaul
+   26. [27]Hans Lambermont &lt;Hans.Lambermont@nl.origin-it.com&gt; or
+       [28]&lt;H.Lambermont@chello.nl&gt; ntpsweep
+   27. [29]Poul-Henning Kamp &lt;phk@FreeBSD.ORG&gt; Oncore driver (Original
+       author)
+   28. [30]Frank Kardel [31]&lt;kardel (at) ntp (dot) org&gt; PARSE &lt;GENERIC&gt;
+       (driver 14 reference clocks), STREAMS modules for PARSE, support
+       scripts, syslog cleanup, dynamic interface handling
+   29. [32]Johannes Maximilian Kuehn &lt;kuehn@ntp.org&gt; Rewrote sntp to
+       comply with NTPv4 specification, ntpq saveconfig
+   30. [33]William L. Jones &lt;jones@hermes.chpc.utexas.edu&gt; RS/6000 AIX
+       modifications, HPUX modifications
+   31. [34]Dave Katz &lt;dkatz@cisco.com&gt; RS/6000 AIX port
+   32. [35]Craig Leres &lt;leres@ee.lbl.gov&gt; 4.4BSD port, ppsclock, Magnavox
+       GPS clock driver
+   33. [36]George Lindholm &lt;lindholm@ucs.ubc.ca&gt; SunOS 5.1 port
+   34. [37]Louis A. Mamakos &lt;louie@ni.umd.edu&gt; MD5-based authentication
+   35. [38]Lars H. Mathiesen &lt;thorinn@diku.dk&gt; adaptation of foundation
+       code for Version 3 as specified in RFC-1305
+   36. [39]Danny Mayer &lt;mayer@ntp.org&gt;Network I/O, Windows Port, Code
+       Maintenance
+   37. [40]David L. Mills &lt;mills@udel.edu&gt; Version 4 foundation,
+       precision kernel; clock drivers: 1, 3, 4, 6, 7, 11, 13, 18, 19,
+       22, 36
+   38. [41]Wolfgang Moeller &lt;moeller@gwdgv1.dnet.gwdg.de&gt; VMS port
+   39. [42]Jeffrey Mogul &lt;mogul@pa.dec.com&gt; ntptrace utility
+   40. [43]Tom Moore &lt;tmoore@fievel.daytonoh.ncr.com&gt; i386 svr4 port
+   41. [44]Kamal A Mostafa &lt;kamal@whence.com&gt; SCO OpenServer port
+   42. [45]Derek Mulcahy &lt;derek@toybox.demon.co.uk&gt; and [46]Damon
+       Hart-Davis &lt;d@hd.org&gt; ARCRON MSF clock driver
+   43. [47]Rob Neal &lt;neal@ntp.org&gt; Bancomm refclock and config/parse code
+       maintenance
+   44. [48]Rainer Pruy &lt;Rainer.Pruy@informatik.uni-erlangen.de&gt;
+       monitoring/trap scripts, statistics file handling
+   45. [49]Dirce Richards &lt;dirce@zk3.dec.com&gt; Digital UNIX V4.0 port
+   46. [50]Wilfredo Sánchez &lt;wsanchez@apple.com&gt; added support for
+       NetInfo
+   47. [51]Nick Sayer &lt;mrapple@quack.kfu.com&gt; SunOS streams modules
+   48. [52]Jack Sasportas &lt;jack@innovativeinternet.com&gt; Saved a Lot of
+       space on the stuff in the html/pic/ subdirectory
+   49. [53]Ray Schnitzler &lt;schnitz@unipress.com&gt; Unixware1 port
+   50. [54]Michael Shields &lt;shields@tembel.org&gt; USNO clock driver
+   51. [55]Jeff Steinman &lt;jss@pebbles.jpl.nasa.gov&gt; Datum PTS clock
+       driver
+   52. [56]Harlan Stenn &lt;harlan@pfcs.com&gt; GNU automake/autoconfigure
+       makeover, various other bits (see the ChangeLog)
+   53. [57]Kenneth Stone &lt;ken@sdd.hp.com&gt; HP-UX port
+   54. [58]Ajit Thyagarajan &lt;ajit@ee.udel.edu&gt;IP multicast/anycast
+       support
+   55. [59]Tomoaki TSURUOKA &lt;tsuruoka@nc.fukuoka-u.ac.jp&gt;TRAK clock
+       driver
+   56. [60]Brian Utterback &lt;brian.utterback@oracle.com&gt; General codebase,
+       Solaris issues
+   57. [61]Loganaden Velvindron &lt;loganaden@gmail.com&gt; Sandboxing
+       (libseccomp) support
+   58. [62]Paul A Vixie &lt;vixie@vix.com&gt; TrueTime GPS driver, generic
+       TrueTime clock driver
+   59. [63]Ulrich Windl &lt;Ulrich.Windl@rz.uni-regensburg.de&gt; corrected and
+       validated HTML documents according to the HTML DTD
+     _________________________________________________________________
+
+References
+
+   1. mailto:%20takao_abe@xurb.jp
+   2. mailto:%20mark_andrews@isc.org
+   3. mailto:%20altmeier@atlsoft.de
+   4. mailto:%20vbais@mailman1.intel.co
+   5. mailto:%20kirkwood@striderfm.intel.com
+   6. mailto:%20michael.barone@lmco.com
+   7. mailto:%20karl@owl.HQ.ileaf.com
+   8. mailto:%20greg.brackley@bigfoot.com
+   9. mailto:%20Marc.Brett@westgeo.com
+  10. mailto:%20Piete.Brooks@cl.cam.ac.uk
+  11. mailto:%20nelson@bolyard.me
+  12. mailto:%20Jean-Francois.Boudreault@viagenie.qc.ca
+  13. mailto:%20reg@dwf.com
+  14. mailto:%20clift@ml.csiro.au
+  15. mailto:%20casey@csc.co.za
+  16. mailto:%20Sven_Dietrich@trimble.COM
+  17. mailto:%20dundas@salt.jpl.nasa.gov
+  18. mailto:%20duwe@immd4.informatik.uni-erlangen.de
+  19. mailto:%20dennis@mrbill.canet.ca
+  20. mailto:%20jhay@icomtek.csir.co.za
+  21. mailto:%20davehart@davehart.com
+  22. mailto:%20neoclock4x@linum.com
+  23. mailto:%20glenn@herald.usask.ca
+  24. mailto:%20iglesias@uci.edu
+  25. mailto:%20jagubox.gsfc.nasa.gov
+  26. mailto:%20jbj@chatham.usdesign.com
+  27. mailto:%20Hans.Lambermont@nl.origin-it.com
+  28. mailto:H.Lambermont@chello.nl
+  29. mailto:%20phk@FreeBSD.ORG
+  30. http://www4.informatik.uni-erlangen.de/%7ekardel
+  31. mailto:%20kardel%20%28at%29%20ntp%20%28dot%29%20org
+  32. mailto:kuehn@ntp.org
+  33. mailto:%20jones@hermes.chpc.utexas.edu
+  34. mailto:%20dkatz@cisco.com
+  35. mailto:%20leres@ee.lbl.gov
+  36. mailto:%20lindholm@ucs.ubc.ca
+  37. mailto:%20louie@ni.umd.edu
+  38. mailto:%20thorinn@diku.dk
+  39. mailto:%20mayer@ntp.org
+  40. mailto:%20mills@udel.edu
+  41. mailto:%20moeller@gwdgv1.dnet.gwdg.de
+  42. mailto:%20mogul@pa.dec.com
+  43. mailto:%20tmoore@fievel.daytonoh.ncr.com
+  44. mailto:%20kamal@whence.com
+  45. mailto:%20derek@toybox.demon.co.uk
+  46. mailto:%20d@hd.org
+  47. mailto:%20neal@ntp.org
+  48. mailto:%20Rainer.Pruy@informatik.uni-erlangen.de
+  49. mailto:%20dirce@zk3.dec.com
+  50. mailto:%20wsanchez@apple.com
+  51. mailto:%20mrapple@quack.kfu.com
+  52. mailto:%20jack@innovativeinternet.com
+  53. mailto:%20schnitz@unipress.com
+  54. mailto:%20shields@tembel.org
+  55. mailto:%20pebbles.jpl.nasa.gov
+  56. mailto:%20harlan@pfcs.com
+  57. mailto:%20ken@sdd.hp.com
+  58. mailto:%20ajit@ee.udel.edu
+  59. mailto:%20tsuruoka@nc.fukuoka-u.ac.jp
+  60. mailto:%20brian.utterback@oracle.com
+  61. mailto:%20loganaden@gmail.com
+  62. mailto:%20vixie@vix.com
+  63. mailto:%20Ulrich.Windl@rz.uni-regensburg.de
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="8eb51203c78ba89d4e11b15a41566f95"></a><div>
+<hr>
+<div class="component_heading">odhcp6c 2016-02-08</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="b41199e79125f11543cc926fae0af9a5"></a><div>
+<hr>
+<div class="component_heading">open-plc-utils 2017-01-16</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*====================================================================*
+ *
+ *   Copyright (c) 2013 Qualcomm Atheros, Inc.
+ *
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or 
+ *   without modification, are permitted (subject to the limitations 
+ *   in the disclaimer below) provided that the following conditions 
+ *   are met:
+ *
+ *   * Redistributions of source code must retain the above copyright 
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * 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.
+ *
+ *   * Neither the name of Qualcomm Atheros nor the names of 
+ *     its contributors may be used to endorse or promote products 
+ *     derived from this software without specific prior written 
+ *     permission.
+ *
+ *   NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE 
+ *   GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE 
+ *   COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 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 COPYRIGHT OWNER 
+ *   OR 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.  
+ *
+ *--------------------------------------------------------------------*/
+
+
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="18822ccd0ee3c432ecdcea6e5625c7bf"></a><div>
+<hr>
+<div class="component_heading">openssl 1.0.2o</div>
+<hr>
+<br><div class="component_text">
+<pre>
+
+  LICENSE ISSUES
+  ==============
+
+  The OpenSSL toolkit stays under a double license, i.e. both the conditions of
+  the OpenSSL License and the original SSLeay license apply to the toolkit.
+  See below for the actual license texts. Actually both licenses are BSD-style
+  Open Source licenses. In case of any license issues related to OpenSSL
+  please contact openssl-core@openssl.org.
+
+  OpenSSL License
+  ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2018 The OpenSSL Project.  All rights reserved.
+ *
+ * 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 OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL 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 OpenSSL 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.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * 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 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 acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS 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 AUTHOR OR 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.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="d3cb9b23f2943b2aafe2cf1ee1418bca"></a><div>
+<hr>
+<div class="component_heading">openwrt </div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="65190960c33bd932307ab843c61e903c"></a><div>
+<hr>
+<div class="component_heading">opkg 9c97d5ecd795709c8584e972bfdf3aee3a5b846d</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a6c0639802d21d85b66fe420a1d72dc0"></a><div>
+<hr>
+<div class="component_heading">procd 2015-10-29.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a1c1ba21f2df75f49ff730ff75c4d2e1"></a><div>
+<hr>
+<div class="component_heading">protobuf 3.4.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+This license applies to all parts of Protocol Buffers except the following:
+
+  - Atomicops support for generic gcc, located in
+    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
+    This file is copyrighted by Red Hat Inc.
+
+  - Atomicops support for AIX/POWER, located in
+    src/google/protobuf/stubs/atomicops_internals_power.h.
+    This file is copyrighted by Bloomberg Finance LP.
+
+Copyright 2014, Google Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * 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.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS 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 COPYRIGHT
+OWNER OR 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.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="232714236d4bfb82f768b7dafaa2c750"></a><div>
+<hr>
+<div class="component_heading">relayd 2015-03-13</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9a808dd3222ec1cd4132b25cec3e73d1"></a><div>
+<hr>
+<div class="component_heading">rpcd 2016-06-30</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * rpcd - UBUS RPC server
+ *
+ *   Copyright (C) 2013-2014 Jo-Philipp Wich &lt;jow@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="76f2af56ed4edacd1643f372bce3d219"></a><div>
+<hr>
+<div class="component_heading">u-boot 2014.10</div>
+<hr>
+<br><div class="component_text">
+<pre>
+  U-Boot is Free Software.  It is copyrighted by Wolfgang Denk and
+many others who contributed code (see the actual source code and the
+git commit messages for details).  You can redistribute U-Boot and/or
+modify it under the terms of version 2 of the GNU General Public
+License as published by the Free Software Foundation.  Most of it can
+also be distributed, at your option, under any later version of the
+GNU General Public License -- see individual files for exceptions.
+
+  NOTE! This license does *not* cover the so-called "standalone"
+applications that use U-Boot services by means of the jump table
+provided by U-Boot exactly for this purpose - this is merely
+considered normal use of U-Boot, and does *not* fall under the
+heading of "derived work" -- see file  Licenses/Exceptions  for
+details.
+
+  Also note that the GPL and the other licenses are copyrighted by
+the Free Software Foundation and other organizations, but the
+instance of code that they refer to (the U-Boot source code) is
+copyrighted by me and others who actually wrote it.
+-- Wolfgang Denk
+
+
+Like many other projects, U-Boot has a tradition of including big
+blocks of License headers in all files.  This not only blows up the
+source code with mostly redundant information, but also makes it very
+difficult to generate License Clearing Reports.  An additional problem
+is that even the same licenses are referred to by a number of
+slightly varying text blocks (full, abbreviated, different
+indentation, line wrapping and/or white space, with obsolete address
+information, ...) which makes automatic processing a nightmare.
+
+To make this easier, such license headers in the source files will be
+replaced with a single line reference to Unique License Identifiers
+as defined by the Linux Foundation's SPDX project [1].  For example,
+in a source file the full "GPL v2.0 or later" header text will be
+replaced by a single line:
+
+	SPDX-License-Identifier:	GPL-2.0+
+
+Ideally, the license terms of all files in the source tree should be
+defined by such License Identifiers; in no case a file can contain
+more than one such License Identifier list.
+
+If a "SPDX-License-Identifier:" line references more than one Unique
+License Identifier, then this means that the respective file can be
+used under the terms of either of these licenses, i. e. with
+
+	SPDX-License-Identifier:	GPL-2.0+	BSD-3-Clause
+
+you can chose between GPL-2.0+ and BSD-3-Clause licensing.
+
+We use the SPDX Unique License Identifiers here; these are available
+at [2].
+
+[1] http://spdx.org/
+[2] http://spdx.org/licenses/
+
+Full name					SPDX Identifier	OSI Approved	File name		URI
+=======================================================================================================================================
+GNU General Public License v2.0 only		GPL-2.0		Y		gpl-2.0.txt		http://www.gnu.org/licenses/gpl-2.0.txt
+GNU General Public License v2.0 or later	GPL-2.0+	Y		gpl-2.0.txt		http://www.gnu.org/licenses/gpl-2.0.txt
+GNU Library General Public License v2 or later	LGPL-2.0+	Y		lgpl-2.0.txt		http://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt
+GNU Lesser General Public License v2.1 or later	LGPL-2.1+	Y		lgpl-2.1.txt		http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
+eCos license version 2.0			eCos-2.0			eCos-2.0.txt		http://www.gnu.org/licenses/ecos-license.html
+BSD 2-Clause License				BSD-2-Clause	Y		bsd-2-clause.txt	http://spdx.org/licenses/BSD-2-Clause
+BSD 3-clause "New" or "Revised" License		BSD-3-Clause	Y		bsd-3-clause.txt	http://spdx.org/licenses/BSD-3-Clause#licenseText
+IBM PIBS (PowerPC Initialization and		IBM-pibs			ibm-pibs.txt
+	Boot Software) license
+ISC License					ISC		Y		isc.txt			https://spdx.org/licenses/ISC
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="6f199b5f5bbe8fcda070f5ea84186ada"></a><div>
+<hr>
+<div class="component_heading">ubi-utils 1.5.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) 19yy  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="15d577010cc61bea37824880199968e7"></a><div>
+<hr>
+<div class="component_heading">ubox 2015-11-22</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="2bb744eeeac1a40bbc12cf14fc316b8a"></a><div>
+<hr>
+<div class="component_heading">ubus 2015-05-25</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * Copyright (C) 2011 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="7a9f25836ffe26403e3fea1e5866e255"></a><div>
+<hr>
+<div class="component_heading">uci 2015-08-27.1</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * blob.c - uci &lt;-&gt; blobmsg conversion layer
+ * Copyright (C) 2012-2013 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="9a66738f118523e7f46e4cd2020900cb"></a><div>
+<hr>
+<div class="component_heading">uhttpd 2018-11-28</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * uhttpd - Tiny single-threaded httpd
+ *
+ *   Copyright (C) 2010-2013 Jo-Philipp Wich &lt;xm@subsignal.org&gt;
+ *   Copyright (C) 2013 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="a385c716df001ddd1539613763bfbf68"></a><div>
+<hr>
+<div class="component_heading">ustream-ssl 2015-07-09</div>
+<hr>
+<br><div class="component_text">
+<pre>
+/*
+ * ustream-ssl - library for SSL over ustream
+ *
+ * Copyright (C) 2012 Felix Fietkau &lt;nbd@openwrt.org&gt;
+ *
+ * Permission to use, copy, modify, and/or 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.
+ */
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="7d0131cceb2f675e13e0fab41ac13aad"></a><div>
+<hr>
+<div class="component_heading">util-linux 2.25.2</div>
+<hr>
+<br><div class="component_text">
+<pre>
+This library is free software; you can redistribute it and/or
+modify it under the terms of the Modified BSD License.
+
+The complete text of the license is available in the
+../Documentation/licenses/COPYING.BSD-3 file.
+</pre>
+<br><br><br><pre>
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later
+version.
+
+The complete text of the license is available in the
+../Documentation/licenses/COPYING.LGPLv2.1 file.
+</pre>
+<br><br><br><pre>
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later
+version.
+
+The complete text of the license is available in the
+../Documentation/licenses/COPYING.LGPLv2.1 file.
+</pre>
+<br><br><br><pre>
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the library's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+</pre>
+<br><br><br><pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+</pre>
+<br><br><br><pre>
+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, and the entire permission notice in its entirety,
+   including the disclaimer of warranties.
+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. The name of the author may not be used to endorse or promote
+   products derived from this software without specific prior
+   written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR 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 NOT ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+</pre>
+<br><br><br><pre>
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="bc993918e4acf46ea73ab5ba317c0be4"></a><div>
+<hr>
+<div class="component_heading">wireless_tools.29 29</div>
+<hr>
+<br><div class="component_text">
+<pre>
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &lt;one line to give the program's name and a brief idea of what it does.&gt;
+    Copyright (C) &lt;year&gt;  &lt;name of author&gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &lt;signature of Ty Coon&gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</pre>
+<br><br><br>
+</div>
+</div>
+<a id="80fe70c3472ad809910c95625b63c7e6"></a><div>
+<hr>
+<div class="component_heading">zlib 1.2.11</div>
+<hr>
+<br><div class="component_text">
+<pre>
+ZLIB DATA COMPRESSION LIBRARY
+
+zlib 1.2.11 is a general purpose data compression library.  All the code is
+thread safe.  The data format used by the zlib library is described by RFCs
+(Request for Comments) 1950 to 1952 in the files
+http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
+rfc1952 (gzip format).
+
+All functions of the compression library are documented in the file zlib.h
+(volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
+of the library is given in the file test/example.c which also tests that
+the library is working correctly.  Another example is given in the file
+test/minigzip.c.  The compression library itself is composed of all source
+files in the root directory.
+
+To compile all files and run the test program, follow the instructions given at
+the top of Makefile.in.  In short "./configure; make test", and if that goes
+well, "make install" should work for most flavors of Unix.  For Windows, use
+one of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
+make_vms.com.
+
+Questions about zlib should be sent to &lt;zlib@gzip.org&gt;, or to Gilles Vollant
+&lt;info@winimage.com&gt; for the Windows DLL version.  The zlib home page is
+http://zlib.net/ .  Before reporting a problem, please check this site to
+verify that you have the latest version of zlib; otherwise get the latest
+version and check whether the problem still exists or not.
+
+PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
+
+Mark Nelson &lt;markn@ieee.org&gt; wrote an article about zlib for the Jan.  1997
+issue of Dr.  Dobb's Journal; a copy of the article is available at
+http://marknelson.us/1997/01/01/zlib-engine/ .
+
+The changes made in version 1.2.11 are documented in the file ChangeLog.
+
+Unsupported third party contributions are provided in directory contrib/ .
+
+zlib is available in Java using the java.util.zip package, documented at
+http://java.sun.com/developer/technicalArticles/Programming/compression/ .
+
+A Perl interface to zlib written by Paul Marquess &lt;pmqs@cpan.org&gt; is available
+at CPAN (Comprehensive Perl Archive Network) sites, including
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
+
+A Python interface to zlib written by A.M. Kuchling &lt;amk@amk.ca&gt; is
+available in Python 1.5 and later versions, see
+http://docs.python.org/library/zlib.html .
+
+zlib is built into tcl: http://wiki.tcl.tk/4610 .
+
+An experimental package to read and write files in .zip format, written on top
+of zlib by Gilles Vollant &lt;info@winimage.com&gt;, is available in the
+contrib/minizip directory of zlib.
+
+
+Notes for some targets:
+
+- For Windows DLL versions, please see win32/DLL_FAQ.txt
+
+- For 64-bit Irix, deflate.c must be compiled without any optimization. With
+  -O, one libpng test fails. The test works in 32 bit mode (with the -n32
+  compiler flag). The compiler bug has been reported to SGI.
+
+- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
+  when compiled with cc.
+
+- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
+  necessary to get gzprintf working correctly. This is done by configure.
+
+- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
+  other compilers. Use "make test" to check your compiler.
+
+- gzdopen is not supported on RISCOS or BEOS.
+
+- For PalmOs, see http://palmzlib.sourceforge.net/
+
+
+Acknowledgments:
+
+  The deflate format used by zlib was defined by Phil Katz.  The deflate and
+  zlib specifications were written by L.  Peter Deutsch.  Thanks to all the
+  people who reported problems and suggested various improvements in zlib; they
+  are too numerous to cite here.
+
+Copyright notice:
+
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+If you use the zlib library in a product, we would appreciate *not* receiving
+lengthy legal documents to sign.  The sources are provided for free but without
+warranty of any kind.  The library has been entirely written by Jean-loup
+Gailly and Mark Adler; it does not include third-party code.
+
+If you redistribute modified sources, we would appreciate that you include in
+the file ChangeLog history information documenting your changes.  Please read
+the FAQ for more information on the distribution of modified source versions.
+</pre>
+<br><br><br>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/usr/share/miniupnpd/firewall.include b/usr/share/miniupnpd/firewall.include
new file mode 100644
index 0000000..818af9d
--- /dev/null
+++ b/usr/share/miniupnpd/firewall.include
@@ -0,0 +1,55 @@
+#!/bin/sh
+# miniupnpd integration for firewall3
+
+IP6TABLES=/usr/sbin/ip6tables
+
+iptables -t filter -N MINIUPNPD 2>/dev/null
+iptables -t nat -N MINIUPNPD 2>/dev/null
+
+[ -x $IP6TABLES ] && $IP6TABLES -t filter -N MINIUPNPD 2>/dev/null
+
+. /lib/functions/network.sh
+
+ADDED=0
+
+add_extzone_rules() {
+    local ext_zone=$1
+
+    [ -z "$ext_zone" ] && return
+
+    # IPv4 - due to NAT, need to add both to nat and filter table
+    iptables -t filter -I zone_${ext_zone}_forward -j MINIUPNPD
+    iptables -t nat -I zone_${ext_zone}_prerouting -j MINIUPNPD
+
+    # IPv6 if available - filter only
+    [ -x $IP6TABLES ] && {
+        $IP6TABLES -t filter -I zone_${ext_zone}_forward -j MINIUPNPD
+    }
+    ADDED=$(($ADDED + 1))
+}
+
+# By default, user configuration is king.
+
+for ext_iface in $(uci -q get upnpd.config.external_iface); do
+    add_extzone_rules $(fw3 -q network "$ext_iface")
+done
+
+add_extzone_rules $(uci -q get upnpd.config.external_zone)
+
+[ ! $ADDED = 0 ] && exit 0
+
+
+# If really nothing is available, resort to network_find_wan{,6} and
+# assume external interfaces all have same firewall zone.
+
+# (This heuristic may fail horribly, in case of e.g. multihoming, so
+# please set external_zone in that case!)
+
+network_find_wan wan_iface
+network_find_wan6 wan6_iface
+
+for ext_iface in $wan_iface $wan6_iface; do
+    # fw3 -q network fails on sub-interfaces => map to device first
+    network_get_device ext_device $ext_iface
+    add_extzone_rules $(fw3 -q device "$ext_device")
+done
diff --git a/usr/share/plc/simpleconnect.awk b/usr/share/plc/simpleconnect.awk
new file mode 100644
index 0000000..6177a2b
--- /dev/null
+++ b/usr/share/plc/simpleconnect.awk
@@ -0,0 +1,25 @@
+BEGIN {
+    FS="[ ,]"
+}
+
+/^INIT: [01]/ {
+    system( "uci -P/var/state revert plc.plc.simpleconnect" );
+    system( "uci -P/var/state set plc.plc.simpleconnect=0" );
+    if ( $2 == 1 ) {
+        system("logger \"plcgpio: Simple Connect sanity check triggered.\"");
+    }
+}
+
+/^EVENT: 1[34],/ {
+    system( "uci -P/var/state revert plc.plc.simpleconnect" );
+    system( "uci -P/var/state set plc.plc.simpleconnect=" ($2 - 13) * 256 + $3 );
+
+    if( $3 != 0 ) {
+        system( "uci -P/var/state revert plc.plc.joiner" );
+    }
+}
+
+/^JOINER:/ {
+    system( "uci -P/var/state revert plc.plc.joiner" );
+    system( "uci -P/var/state set plc.plc.joiner=" $2 );
+}
diff --git a/usr/share/rpcd/acl.d/debug.json b/usr/share/rpcd/acl.d/debug.json
new file mode 100644
index 0000000..fb5ec1e
--- /dev/null
+++ b/usr/share/rpcd/acl.d/debug.json
@@ -0,0 +1,779 @@
+{
+    "unauthenticated": {
+        "description": "Functions allowed for unauthenticated requests",
+        "read": {
+            "ubus": {
+                "luci2.ui": [
+                    "themes"
+                ]
+            }
+        }
+    },
+    "core": {
+        "description": "Core functions for LuCI",
+        "read": {
+            "ubus": {
+                "luci2.ui": [
+                    "*"
+                ],
+                "session": [
+                    "access",
+                    "destroy",
+                    "get",
+                    "get_timeout"
+                ],
+                "uci": [
+                    "*"
+                ]
+            }
+        }
+    },
+    "status": {
+        "description": "Status information display",
+        "read": {
+            "ubus": {
+                "iwinfo": [
+                    "devices",
+                    "info",
+                    "assoclist",
+                    "phyname",
+                    "scan"
+                ],
+                "system": [
+                    "info",
+                    "board"
+                ],
+                "network.interface": [
+                    "status"
+                ],
+                "network.interface.*": [
+                    "status"
+                ],
+                "network.swconfig": [
+                    "list",
+                    "status",
+                    "info"
+                ],
+                "luci2.network": [
+                    "conntrack_count",
+                    "dhcp_leases",
+                    "dhcp6_leases",
+                    "arp_table",
+                    "routes",
+                    "routes6"
+                ],
+                "network.info": [
+                    "*"
+                ],
+                "luci2.system": [
+                    "diskfree",
+                    "syslog",
+                    "dmesg",
+                    "process_list"
+                ],
+                "service": [
+                    "list"
+                ],
+                "ath10k.peerstat": [
+                    "get"
+                ]
+            }
+        }
+    },
+    "system": {
+        "description": "General system settings",
+        "read": {
+            "ubus": {
+                "system": [
+                    "info",
+                    "board"
+                ],
+                "luci2.system": [
+                    "init_list"
+                ]
+            },
+            "uci": [
+                "luci"
+            ]
+        },
+        "write": {
+            "ubus": {
+                "luci2.system": [
+                    "init_action"
+                ]
+            },
+            "uci": [
+                "luci"
+            ]
+        }
+    },
+    "admin": {
+        "description": "Authentication and SSH settings",
+        "read": {
+            "ubus": {
+                "luci2.system": [
+                    "sshkeys_get"
+                ]
+            },
+            "uci": [
+                "dropbear"
+            ]
+        },
+        "write": {
+            "ubus": {
+                "luci2.system": [
+                    "sshkeys_set",
+                    "password_set"
+                ]
+            },
+            "uci": [
+                "dropbear"
+            ]
+        }
+    },
+    "users": {
+        "description": "Guest login settings",
+        "read": {
+            "uci": [
+                "rpcd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "rpcd"
+            ]
+        }
+    },
+    "accounts": {
+        "description": "Add user, change password",
+        "write": {
+            "ubus": {
+                "system.accounts": [
+                    "password_set"
+                ]
+            }
+        }
+    },
+    "software": {
+        "description": "Package management",
+        "read": {
+            "ubus": {
+                "system": [
+                    "info",
+                    "board"
+                ],
+                "luci2.opkg": [
+                    "list",
+                    "list_installed",
+                    "find",
+                    "config_get"
+                ]
+            },
+            "uci": [
+                "easycwmp"
+            ]
+        },
+        "write": {
+            "ubus": {
+                "luci2.opkg": [
+                    "install",
+                    "remove",
+                    "update",
+                    "config_set"
+                ]
+            }
+        }
+    },
+    "upgrade": {
+        "description": "Firmware upgrade",
+        "read": {
+            "ubus": {
+                "system.management.upgrade": [
+                    "test"
+                ]
+            }
+        },
+        "write": {
+            "base-cgi": [
+                "upload"
+            ],
+            "ubus": {
+                "system.management.upgrade": [
+                    "start",
+                    "clean"
+                ],
+                "system.management": [
+                    "reboot",
+                    "version"
+                ]
+            }
+        }
+    },
+    "backup": {
+        "description": "Backup and Restore",
+        "read": {
+            "base-cgi": [
+                "backup"
+            ],
+            "ubus": {
+                "system.management.backup": [
+                    "get",
+                    "list"
+                ]
+            }
+        },
+        "write": {
+            "ubus": {
+                "system.management.backup": [
+                    "clean",
+                    "set",
+                    "restore",
+                    "restore_state"
+                ],
+                "system.management": [
+                    "reboot",
+                    "version"
+                ]
+            }
+        }
+    },
+    "factorydefault": {
+        "description": "factorydefault and reboot",
+        "read": {
+            "ubus": {
+                "system.management.factorydefault": [
+                    "test"
+                ]
+            }
+        },
+        "write": {
+            "ubus": {
+                "system.management.factorydefault": [
+                    "start"
+                ],
+                "system.management": [
+                    "reboot",
+                    "version"
+                ]
+            }
+        }
+    },
+    "startup": {
+        "description": "System boot settings",
+        "read": {
+            "ubus": {
+                "luci2.system": [
+                    "init_list",
+                    "rclocal_get"
+                ]
+            }
+        },
+        "write": {
+            "ubus": {
+                "luci2.system": [
+                    "init_action",
+                    "rclocal_set"
+                ]
+            }
+        }
+    },
+    "cron": {
+        "description": "Crontab management",
+        "read": {
+            "ubus": {
+                "luci2.system": [
+                    "crontab_get"
+                ]
+            }
+        },
+        "write": {
+            "ubus": {
+                "luci2.system": [
+                    "crontab_set"
+                ]
+            }
+        }
+    },
+    "leds": {
+        "description": "Hardware LED configuration",
+        "read": {
+            "ubus": {
+                "network.device": [
+                    "status"
+                ],
+                "luci2.system": [
+                    "led_list",
+                    "usb_list"
+                ]
+            },
+            "uci": [
+                "system"
+            ]
+        },
+        "write": {
+            "uci": [
+                "system"
+            ]
+        }
+    },
+    "diagnostics": {
+        "description": "Network diagnostic tools",
+        "read": {
+            "ubus": {
+                "luci2.network": [
+                    "ping",
+                    "ping6",
+                    "traceroute",
+                    "traceroute6",
+                    "nslookup"
+                ]
+            }
+        }
+    },
+    "hostnames": {
+        "description": "Host entry management",
+        "read": {
+            "uci": [
+                "dhcp"
+            ]
+        },
+        "write": {
+            "uci": [
+                "dhcp"
+            ]
+        }
+    },
+    "socketman": {
+        "description": "Socketman management",
+        "read": {
+            "uci": [
+                "socketman"
+            ],
+            "ubus": {
+                "system.management.cloud": [
+                    "disable"
+                ]
+            }
+        },
+        "write": {
+            "ubus": {
+                "system.management.cloud": [
+                    "disable"
+                ]
+            }
+        }
+    },
+    "homeplug": {
+        "description": "HomePlug management",
+        "read": {
+            "ubus": {
+                "network.plctool": [
+                    "fw_version",
+                    "identity",
+                    "membership",
+                    "avlninfo",
+                    "get_pibsettings"
+                ]
+            },
+            "uci": [
+                "plc"
+            ]
+        },
+        "write": {
+            "ubus": {
+                "network.plctool": [
+                    "defaults",
+                    "pushbtn",
+                    "set_nmk",
+                    "set_npw",
+                    "add_secid",
+                    "set_pibsettings"
+                ]
+            },
+            "uci": [
+                "plc"
+            ]
+        }
+    },
+    "ghn": {
+        "description": "G.hn management",
+        "read": {
+            "ubus": {
+                "network.ghntool": [
+                    "ghninfo",
+                    "get_settings",
+                    "version"
+                ]
+            },
+            "uci": [
+                "ghn"
+            ]
+        },
+        "write": {
+            "ubus": {
+                "network.ghntool": [
+                    "pushbtn",
+                    "set_npw",
+                    "factory_reset",
+                    "set_settings"
+                ]
+            },
+            "uci": [
+                "ghn"
+            ]
+        }
+    },
+    "powerline": {
+        "description": "Powerline (HPAV/G.hn) management",
+        "read": {
+            "ubus": {
+                "network.powerline": [
+                    "get_compat_mode",
+                    "get_user_notches"
+                ]
+            }
+        },
+        "write": {
+            "ubus": {
+                "network.powerline": [
+                    "set_compat_mode",
+                    "set_user_notches"
+                ]
+            }
+        }
+    },
+    "network": {
+        "description": "Network, switch and routing configuration",
+        "read": {
+            "ubus": {
+                "network": [
+                    "get_proto_handlers"
+                ],
+                "network.wps": [
+                    "*"
+                ],
+                "network.wifi": [
+                    "*"
+                ],
+                "network.device": [
+                    "status"
+                ],
+                "network.interface": [
+                    "dump"
+                ],
+                "network.wireless": [
+                    "status"
+                ],
+                "luci2.network": [
+                    "switch_list",
+                    "switch_info",
+                    "switch_status",
+                    "device_list"
+                ],
+                "luci2.network.bwmon": [
+                    "devices",
+                    "statistics"
+                ]
+            },
+            "uci": [
+                "network",
+                "wireless"
+            ]
+        },
+        "write": {
+            "ubus": {
+                "network.interface.wwan": [
+                    "up", "down"
+                ]
+            },
+            "uci": [
+                "network",
+                "wireless"
+            ]
+        }
+    },
+    "firewall": {
+        "description": "Firewall configuration",
+        "read": {
+            "uci": [
+                "firewall"
+            ]
+        },
+        "write": {
+            "uci": [
+                "firewall"
+            ]
+        }
+    },
+    "systeminformation": {
+        "description": "system information",
+        "read": {
+            "ubus": {
+                "system.info": [
+                    "syslog",
+                    "image"
+                ],
+                "system.init": [
+                    "list"
+                ],
+                "system.date": [
+                    "get"
+                ]
+            }
+        }
+    },
+    "snmp": {
+        "description": "SNMP configuration",
+        "read": {
+            "uci": [
+                "snmpd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "snmpd"
+            ]
+        }
+    },
+    "avahi": {
+	"description": "mdns configuration",
+	"read": {
+	    "uci": [
+		"avahi"
+	    ]
+	},
+	"write": {
+	    "uci": [
+		"avahi"
+	    ]
+	}
+    },
+    "upnpd": {
+        "description": "SSDP configuration",
+        "read": {
+            "uci": [
+                "upnpd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "upnpd"
+            ]
+        }
+    },
+    "mdnsresponder": {
+        "description": "mDNSResponder",
+        "read": {
+            "uci": [
+                "mDNSResponder"
+            ]
+        },
+        "write": {
+            "uci": [
+                "mDNSResponder"
+            ]
+        }
+    },
+    "radius": {
+        "description": "Radius Configuration",
+        "read": {
+            "uci": [
+                "radius"
+            ]
+        },
+        "write": {
+            "uci": [
+                "radius"
+            ]
+        }
+    },
+    "delos": {
+        "description": "Delos basic configuration",
+        "read": {
+            "uci": [
+                "delos"
+            ]
+        }
+    },
+    "vlan": {
+        "description": "VLAN configuration",
+        "read": {
+            "uci": [
+                "vlan"
+            ]
+        },
+        "write": {
+            "uci": [
+                "vlan"
+            ]
+        }
+    },
+    "wifitoggle": {
+        "description": "wifitoggle",
+        "read": {
+            "ubus": {
+                "wifitoggle": [
+                    "remaining",
+                    "toggle"
+                ]
+            }
+        }
+    },
+    "buzzer": {
+        "description": "buzzer",
+        "read": {
+            "ubus": {
+                "buzzer": [
+                    "*"
+                ]
+            }
+        }
+    },
+    "wifi_schedule": {
+        "description": "wifi schedule configuration",
+        "read": {
+            "uci": [
+                "wifi_schedule"
+            ]
+        },
+        "write": {
+            "uci": [
+                "wifi_schedule"
+            ]
+        }
+    },
+    "lbd": {
+        "description": "band steering configuration",
+        "read": {
+            "uci": [
+                "lbd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "lbd"
+            ]
+        }
+    },
+    "acd": {
+        "description": "auto configuration",
+        "read": {
+            "uci": [
+                "acd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "acd"
+            ]
+        }
+    },
+    "configsync": {
+        "description": "auto configuration",
+        "read": {
+            "uci": [
+                "configsync"
+            ]
+        },
+        "write": {
+            "uci": [
+                "configsync"
+            ]
+        }
+    },
+    "repacd": {
+        "description": "auto configuration",
+        "read": {
+            "uci": [
+                "repacd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "repacd"
+            ]
+        }
+    },
+    "hyd": {
+        "description": "hyfi hybrid configuration",
+        "read": {
+            "uci": [
+                "hyd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "hyd"
+            ]
+        }
+    },
+    "wsplcd": {
+        "description": "hyfi security configuration",
+        "read": {
+            "uci": [
+                "wsplcd"
+            ]
+        },
+        "write": {
+            "uci": [
+                "wsplcd"
+            ]
+        }
+    },
+    "fwuagent": {
+        "description": "Agent for hawkBit auto firmware update",
+        "read": {
+            "uci": [
+                "fwuagent"
+            ],
+            "ubus": {
+                "fwuagent": [
+                    "force_poll",
+                    "get_deployment",
+                    "accept_deployment"
+                ]
+            }
+        },
+        "write": {
+            "uci": [
+                "fwuagent"
+            ],
+            "ubus": {
+                "fwuagent": [
+                    "accept_deployment"
+                ]
+            }
+        }
+    },
+    "parental_control": {
+        "description": "parental control configuration",
+        "read": {
+            "uci": [
+                "parental_control"
+            ]
+        },
+        "write": {
+            "uci": [
+                "parental_control"
+            ]
+        }
+    },
+    "station_quota": {
+        "description": "station quota control configuration",
+        "read": {
+            "uci": [
+                "station_quota"
+            ],
+            "ubus": {
+                "station_quota": [
+                    "status"
+                ]
+            }
+        },
+        "write": {
+            "uci": [
+                "station_quota"
+            ]
+        }
+    }
+}
diff --git a/usr/share/rpcd/acl.d/unauthenticated.json b/usr/share/rpcd/acl.d/unauthenticated.json
new file mode 100644
index 0000000..baded9d
--- /dev/null
+++ b/usr/share/rpcd/acl.d/unauthenticated.json
@@ -0,0 +1,13 @@
+{
+	"unauthenticated": {
+		"description": "Access controls for unauthenticated requests",
+		"read": {
+			"ubus": {
+				"session": [
+					"access",
+					"login"
+				]
+			}
+		}
+	}
+}
diff --git a/usr/share/rpcd/nwinfo.awk b/usr/share/rpcd/nwinfo.awk
new file mode 100644
index 0000000..52327ff
--- /dev/null
+++ b/usr/share/rpcd/nwinfo.awk
@@ -0,0 +1,81 @@
+BEGIN {
+        level = 0;
+        printf( "{\"networks\":[" );
+}
+
+/^$/ {
+        nl = 1;
+}
+
+/^\tnetwork/ && level == 3 {
+        printf( "}" );
+        level = 2;
+        first = 1;
+}
+
+/^\tnetwork/ && level == 2 {
+        printf( "]" );
+        level = 1;
+        first = 1;
+}
+
+/^\tnetwork/ && level == 1 && nl == 1 {
+        printf( "},{" );
+        first = 1;
+}
+
+/^\tnetwork/ && level == 0 {
+        printf( "{" );
+        level = 1;
+        first = 1;
+}
+
+/^$/ && level == 1 {
+        printf( "\"stations\":[" );
+        level = 2;
+        first = 1;
+}
+
+/^\t\tstation/ && level == 3 && nl == 1 {
+        printf( "},{" );
+        first = 1;
+}
+
+/^\t\tstation/ && level == 2 {
+        printf( "{" );
+        level = 3;
+        first = 1;
+}
+
+/^\tnetwork/ {
+        gsub(/network->/, "", $1);
+        printf( "\"%s\":\"%s\",", $1, $3 );
+        first = 0;
+}
+
+/^\t\tstation/ {
+        gsub(/station->/, "", $1);
+        printf( "%s\"%s\":\"%s\"", first ? "" : ",", $1, $3 );
+        first = 0;
+}
+
+/^..*$/ && nl == 1 {
+        nl = 0;
+}
+
+END {
+        if( level == 3 ) {
+                printf( "}" );
+                level = 2;
+        };
+        if( level == 2 ) {
+                printf( "]" );
+                level = 1;
+        };
+        if( level == 1 ) {
+                printf( "}" );
+                level = 0;
+        };
+        printf( "]}\n" );
+}
+
diff --git a/usr/share/rpcd/plc_add_secid.sh b/usr/share/rpcd/plc_add_secid.sh
new file mode 100755
index 0000000..8385ee8
--- /dev/null
+++ b/usr/share/rpcd/plc_add_secid.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+device="$(uci_get_state delos baptization DlanMacAddress)"
+[ -n "$device" ] || exit 1
+nmk=$(plctool -i "$1" -I "$device" | grep NMK | cut -d' ' -f 2)
+[ -n "$nmk" ] || exit 1
+plctool -i "$1" -D "$(hpavkey -D "$2")" -J FF:FF:FF:FF:FF:FF -K "$nmk" "$device"
diff --git a/usr/share/rpcd/plc_set_npw.sh b/usr/share/rpcd/plc_set_npw.sh
new file mode 100755
index 0000000..9beffd7
--- /dev/null
+++ b/usr/share/rpcd/plc_set_npw.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+device="$(uci_get_state delos baptization DlanMacAddress)"
+[ -n "$device" ] || exit 1
+plctool -i "$1" -K "$(hpavkey -M "$2")" -M "$device"
diff --git a/usr/share/rpcd/plcstat-t.awk b/usr/share/rpcd/plcstat-t.awk
new file mode 100644
index 0000000..80c6bc4
--- /dev/null
+++ b/usr/share/rpcd/plcstat-t.awk
@@ -0,0 +1,31 @@
+BEGIN {
+	avln = 0
+	nl = 0
+	printf( "{\"devices\":[" )
+}
+
+/^ P\/L / {
+	avln++
+}
+
+/^ (LOC|REM) / {
+	if (nl == 1)
+		printf( "," )
+	printf( "{" )
+	printf( "\"avln_num\":\"%s\"\n", avln )
+	printf( ",\"local\":\"%s\"", $1 == "LOC" )
+	printf( ",\"cco\":\"%s\"\n", $2 == "CCO" )
+	printf( ",\"tei\":\"%s\"\n", $3+0 )
+	printf( ",\"mac\":\"%s\"\n", $4 )
+	printf( ",\"bda\":\"%s\"\n", $5 )
+	if ($1 != "LOC") {
+		printf( ",\"tx\":\"%.0f\"\n", ($6+0)*21/16 )
+		printf( ",\"rx\":\"%.0f\"\n", ($7+0)*21/16 )
+	}
+	printf( "}" )
+	nl = 1
+}
+
+END {
+	printf( "]}\n" )
+}
diff --git a/usr/share/udhcpc/default.script b/usr/share/udhcpc/default.script
new file mode 100755
index 0000000..ac765a6
--- /dev/null
+++ b/usr/share/udhcpc/default.script
@@ -0,0 +1,57 @@
+#!/bin/sh
+[ -z "$1" ] && echo "Error: should be run by udhcpc" && exit 1
+
+set_classless_routes() {
+	local max=128
+	local type
+	while [ -n "$1" -a -n "$2" -a $max -gt 0 ]; do
+		[ ${1##*/} -eq 32 ] && type=host || type=net
+		echo "udhcpc: adding route for $type $1 via $2"
+		route add -$type "$1" gw "$2" dev "$interface"
+		max=$(($max-1))
+		shift 2
+	done
+}
+
+setup_interface() {
+	echo "udhcpc: ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+}"
+	ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+}
+
+	[ -n "$router" ] && [ "$router" != "0.0.0.0" ] && [ "$router" != "255.255.255.255" ] && {
+		echo "udhcpc: setting default routers: $router"
+
+		local valid_gw=""
+		for i in $router ; do
+			route add default gw $i dev $interface
+			valid_gw="${valid_gw:+$valid_gw|}$i"
+		done
+		
+		eval $(route -n | awk '
+			/^0.0.0.0\W{9}('$valid_gw')\W/ {next}
+			/^0.0.0.0/ {print "route del -net "$1" gw "$2";"}
+		')
+	}
+
+	# CIDR STATIC ROUTES (rfc3442)
+	[ -n "$staticroutes" ] && set_classless_routes $staticroutes
+	[ -n "$msstaticroutes" ] && set_classless_routes $msstaticroutes
+}
+
+
+applied=
+case "$1" in
+	deconfig)
+		ifconfig "$interface" 0.0.0.0
+	;;
+	renew)
+		setup_interface update
+	;;
+	bound)
+		setup_interface ifup
+	;;
+esac
+
+# user rules
+[ -f /etc/udhcpc.user ] && . /etc/udhcpc.user
+
+exit 0
diff --git a/var b/var
new file mode 120000
index 0000000..cad2309
--- /dev/null
+++ b/var
@@ -0,0 +1 @@
+/tmp
\ No newline at end of file
diff --git a/www/10.afa7a7c4d6ac4b046a79.js b/www/10.afa7a7c4d6ac4b046a79.js
new file mode 100644
index 0000000..c6e3254
--- /dev/null
+++ b/www/10.afa7a7c4d6ac4b046a79.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{"0VpC":function(l,n,u){"use strict";u.r(n);var t=u("CcnG"),e=function(){return function(){}}(),a=u("pMnS"),o=u("A7o+"),s=u("gIcY"),i=u("Ip0R"),r=u("nQCY"),c=u("5SxG"),b=u("weCn"),d=u("xR9I"),p=u("Sxbm"),g=u("FW/t"),m=function(){function l(){this.allModes=[],this.currentModes=[],this.mimoModes=[],this.sisoModes=[],this.isMimoEnabled=!0,this.selectedMode="",this.modeChanged=new t.m}return Object.defineProperty(l.prototype,"modes",{set:function(l){var n=this;void 0!==l&&(this.selectedMode=l.selectedMode,this.allModes=l.availableModes,this.mimoModes=this.allModes.filter(function(l){return l.startsWith("mimo_")}),this.sisoModes=this.allModes.filter(function(l){return l.startsWith("siso_")}),this.isMimoEnabled=this.mimoModes.some(function(l){return l===n.selectedMode}),this.currentModes=this.hasMimoSisoModes()?this.isMimoEnabled?this.mimoModes:this.sisoModes:this.allModes)},enumerable:!0,configurable:!0}),l.prototype.hasMimoSisoModes=function(){return this.mimoModes.length>0&&this.sisoModes.length>0},l.prototype.selectMode=function(l){this.modeChanged.emit(l)},l.prototype.selectMimo=function(){this.isMimoEnabled=!0,this.currentModes=this.mimoModes,this.selectedMode=void 0,this.modeChanged.emit(void 0)},l.prototype.selectSiso=function(){this.isMimoEnabled=!1,this.currentModes=this.sisoModes,this.selectedMode=void 0,this.modeChanged.emit(void 0)},l}(),h=t.ob({encapsulation:2,styles:[],data:{}});function f(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,5,"div",[["class","col-md-3 small-margin-bottom"],["style","text-align: center"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"div",[["class","btn-group"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,1,"button",[["class","btn btn-primary"],["id","compatibility-mimo"],["type","button"]],[[2,"active",null]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.selectMimo()&&t),t},null,null)),(l()(),t.Ib(-1,null,["MIMO"])),(l()(),t.qb(4,0,null,null,1,"button",[["class","btn btn-primary"],["id","compatibility-siso"],["type","button"]],[[2,"active",null]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.selectSiso()&&t),t},null,null)),(l()(),t.Ib(-1,null,["SISO"]))],null,function(l,n){var u=n.component;l(n,2,0,u.isMimoEnabled),l(n,4,0,!u.isMimoEnabled)})}function v(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"option",[],[[8,"id",0]],null,null,null,null)),t.pb(1,147456,null,0,s.o,[t.k,t.E,[2,s.r]],{ngValue:[0,"ngValue"]},null),t.pb(2,147456,null,0,s.y,[t.k,t.E,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),t.Ib(3,null,["",""])),t.Cb(131072,o.i,[o.j,t.h])],function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)},function(l,n){l(n,0,0,t.sb(1,"compatibility-mode-",n.context.index,"")),l(n,3,0,t.Jb(n,3,0,t.Ab(n,4).transform(n.context.$implicit)))})}function C(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,19,"div",[["class","buttons-dialog"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"p",[["class","no-margin"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Choose the compatibility mode of your device. This setting can help increase performance with technologies such as VDSL."])),(l()(),t.qb(4,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"label",[["class","control-label col-md-3 small-margin-bottom"],["for","compmode"],["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Compatibility Mode"])),(l()(),t.qb(8,0,null,null,11,"div",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,f)),t.pb(10,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(11,0,null,null,8,"div",[],[[2,"col-md-7",null],[2,"col-md-4",null],[2,"has-error",null]],null,null,null,null)),(l()(),t.qb(12,0,null,null,7,"select",[["class","form-control"],["id","compmode"],["name","compmode"]],[[1,"selectedMode",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var e=!0,a=l.component;return"change"===n&&(e=!1!==t.Ab(l,13).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,13).onTouched()&&e),"ngModelChange"===n&&(e=!1!==(a.selectedMode=u)&&e),"ngModelChange"===n&&(e=!1!==a.selectMode(u)&&e),e},null,null)),t.pb(13,16384,null,0,s.r,[t.E,t.k],null,null),t.Fb(1024,null,s.i,function(l){return[l]},[s.r]),t.pb(15,671744,null,0,s.n,[[8,null],[8,null],[8,null],[6,s.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(17,16384,null,0,s.k,[[4,s.j]],null,null),(l()(),t.hb(16777216,null,null,1,null,v)),t.pb(19,278528,null,0,i.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,""),l(n,10,0,u.hasMimoSisoModes()),l(n,15,0,"compmode",u.selectedMode),l(n,19,0,u.currentModes)},function(l,n){var u=n.component;l(n,11,0,!u.hasMimoSisoModes(),u.hasMimoSisoModes(),void 0===u.selectedMode),l(n,12,0,u.selectedMode,t.Ab(n,17).ngClassUntouched,t.Ab(n,17).ngClassTouched,t.Ab(n,17).ngClassPristine,t.Ab(n,17).ngClassDirty,t.Ab(n,17).ngClassValid,t.Ab(n,17).ngClassInvalid,t.Ab(n,17).ngClassPending)})}var y=u("tl7y"),k=u("Eidh"),M=u("CG3r"),A=u("jGGy"),q=u("+NEN"),I=u("JPNY"),x=u("Obbf"),P=u("UVPe"),w=u("+/+x"),D=t.ob({encapsulation:0,styles:[["input[_ngcontent-%COMP%]{height:30px}.no-margin-top[_ngcontent-%COMP%]{margin-top:0!important}.small-margin-bottom[_ngcontent-%COMP%]{margin-bottom:15px!important}"]],data:{}});function _(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,20,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"label",[["class","control-label col-md-3"],["for","ccomode"]],null,null,null,null,null)),(l()(),t.Ib(2,null,[" "," "])),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(4,0,null,null,16,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(5,0,[[3,0],["forceNode",1]],null,15,"select",[["class","form-control"],["name","forceNode"]],[[8,"value",0],[8,"disabled",0]],[[null,"change"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==l.component.markAsDirty()&&t),t},null,null)),(l()(),t.qb(6,0,null,null,4,"option",[["translate",""],["value","NONE"]],null,null,null,null,null)),t.pb(7,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),t.pb(8,147456,null,0,s.o,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(9,147456,null,0,s.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),(l()(),t.Ib(-1,null,["Automatic *"])),(l()(),t.qb(11,0,null,null,4,"option",[["translate",""],["value","END_POINT"]],null,null,null,null,null)),t.pb(12,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),t.pb(13,147456,null,0,s.o,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(14,147456,null,0,s.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),(l()(),t.Ib(-1,null,["End Point"])),(l()(),t.qb(16,0,null,null,4,"option",[["translate",""],["value","DOMAIN_MASTER"]],null,null,null,null,null)),t.pb(17,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),t.pb(18,147456,null,0,s.o,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(19,147456,null,0,s.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),(l()(),t.Ib(-1,null,["Domain Master"]))],function(l,n){l(n,7,0,""),l(n,8,0,"NONE"),l(n,9,0,"NONE"),l(n,12,0,""),l(n,13,0,"END_POINT"),l(n,14,0,"END_POINT"),l(n,17,0,""),l(n,18,0,"DOMAIN_MASTER"),l(n,19,0,"DOMAIN_MASTER")},function(l,n){var u=n.component;l(n,2,0,t.Jb(n,2,0,t.Ab(n,3).transform("Force Node Type"))),l(n,5,0,u.settings.force_node,u.pairingInProgress||u.unpairingInProgress)})}function j(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function O(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function T(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function F(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function E(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"td",[["class","text-center empty-vaps-list"],["colspan","5"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["no PLC connections"]))],function(l,n){l(n,3,0,"")},null)}function S(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["*"]))],null,null)}function B(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,22,"tr",[["role","row"]],[[8,"id",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),(l()(),t.qb(1,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(3,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(4,0,null,null,3,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(5,null,[""," "])),(l()(),t.hb(16777216,null,null,1,null,S)),t.pb(7,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(8,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(10,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(11,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(12,null,["",""])),(l()(),t.qb(13,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(15,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(16,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(17,null,["",""])),(l()(),t.qb(18,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(20,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(21,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(22,null,["",""]))],function(l,n){l(n,7,0,n.context.$implicit.did==n.component.deviceId)},function(l,n){l(n,0,0,t.sb(1,"plc-",n.context.index,""),n.context.odd,n.context.even),l(n,1,0,t.sb(1,"",t.Jb(n,1,0,t.Ab(n,2).transform("Device ID")),"")),l(n,4,0,t.sb(1,"plc-id-",n.context.index,"")),l(n,5,0,n.context.$implicit.did||"---"),l(n,8,0,t.sb(1,"",t.Jb(n,8,0,t.Ab(n,9).transform("Device MAC")),"")),l(n,11,0,t.sb(1,"plc-mac-",n.context.index,"")),l(n,12,0,n.context.$implicit.mac||"---"),l(n,13,0,t.sb(1,"",t.Jb(n,13,0,t.Ab(n,14).transform("Tx rate (Mbit/s)")),"")),l(n,16,0,t.sb(1,"plc-tx-",n.context.index,"")),l(n,17,0,n.context.$implicit.tx||"---"),l(n,18,0,t.sb(1,"",t.Jb(n,18,0,t.Ab(n,19).transform("Rx rate (Mbit/s)")),"")),l(n,21,0,t.sb(1,"plc-rx-",n.context.index,"")),l(n,22,0,n.context.$implicit.rx||"---")})}function K(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save()&&t),t},r.b,r.a)),t.pb(1,114688,null,0,c.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,1,0,t.Ab(n.parent,9).form.invalid||u.savingInProgress||u.invalidCompatibilityMode,"save")},null)}function N(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancel()&&t),t},r.b,r.a)),t.pb(1,114688,null,0,c.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,n.component.savingInProgress,"cancel")},null)}function J(l){return t.Kb(0,[t.Cb(0,b.a,[]),t.Gb(402653184,1,{profile:0}),t.Gb(402653184,2,{password:0}),t.Gb(671088640,3,{forceNode:0}),t.Gb(402653184,4,{domainName:0}),t.Gb(402653184,5,{delos:0}),(l()(),t.qb(6,0,null,null,110,"div",[["class","vendor-dialogs"],["id","dlan-configuration"]],null,null,null,null,null)),(l()(),t.qb(7,0,null,null,109,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,9).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,9).onReset()&&e),e},null,null)),t.pb(8,16384,null,0,s.w,[],null,null),t.pb(9,4210688,[[5,4],["delos",4]],0,s.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,s.c,null,[s.m]),t.pb(11,16384,null,0,s.l,[[4,s.c]],null,null),(l()(),t.qb(12,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(13,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Pairing"])),(l()(),t.qb(15,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(16,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,['Start the pairing process by pressing the PLC button on an adapter in your existing network first. Then, click on "PAIR".'])),(l()(),t.qb(18,0,null,null,6,"div",[["class","form-group small-margin-top small-margin-bottom no-row-paddings"]],null,null,null,null,null)),(l()(),t.qb(19,0,null,null,2,"button",[["class","btn btn-default"],["translate",""]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.startPairing()&&t),t},null,null)),t.pb(20,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["PAIR"])),(l()(),t.qb(22,0,null,null,2,"button",[["class","btn btn-default small-margin-left"],["translate",""]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.unpair()&&t),t},null,null)),t.pb(23,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["UNPAIR"])),(l()(),t.qb(25,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(26,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["PLC password"])),(l()(),t.qb(28,0,null,null,18,"div",[],null,null,null,null,null)),(l()(),t.qb(29,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(30,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Here you can assign a custom PLC password to your network (instead of the automatically generated PLC password)."])),(l()(),t.qb(32,0,null,null,14,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(33,0,null,null,2,"label",[["class","control-label col-md-3"],["for","ccomode"]],null,null,null,null,null)),(l()(),t.Ib(34,null,[" "," "])),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(36,0,null,null,10,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(37,0,null,null,0,"input",[["autocomplete","off"],["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),t.qb(38,0,[[2,0],["password",1]],null,1,"input",[["autocomplete","new-password"],["class","col-xs-11"],["maxlength","30"],["name","password"]],[[8,"type",0],[8,"placeholder",0],[8,"disabled",0]],[[null,"input"]],function(l,n,u){var t=!0;return"input"===n&&(t=!1!==l.component.markAsDirty()&&t),t},null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(40,0,null,null,6,"span",[["class","input-group-btn col-xs-3 no-row-paddings"]],null,null,null,null,null)),(l()(),t.qb(41,0,null,null,5,"button",[["class","btn btn-default small"],["id","toggleKeyVisibility"],["type","button"]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.toggleLocalPassVisibility()&&t),t},null,null)),t.Cb(131072,o.i,[o.j,t.h]),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(44,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),t.pb(45,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(46,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),t.qb(47,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(48,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Advanced Settings"])),(l()(),t.qb(50,0,null,null,5,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(51,0,null,null,2,"label",[["class","control-label col-md-3"],["for","ccomode"]],null,null,null,null,null)),(l()(),t.Ib(52,null,[" "," "])),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(54,0,null,null,1,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(55,0,[[4,0],["domainName",1]],null,0,"input",[["class","col-xs-12"],["disabled",""],["name","domainName"],["type","text"]],[[8,"value",0]],[[null,"input"]],function(l,n,u){var t=!0;return"input"===n&&(t=!1!==l.component.markAsDirty()&&t),t},null,null)),(l()(),t.hb(16777216,null,null,1,null,_)),t.pb(57,212992,null,0,d.a,[t.M,t.P,p.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(58,0,null,null,2,"h3",[["class","clearfix"],["translate",""]],null,null,null,null,null)),t.pb(59,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Compatibility Mode"])),(l()(),t.qb(61,0,null,null,5,"div",[["class","form-group clearfix"]],null,null,null,null,null)),(l()(),t.qb(62,0,null,null,1,"app-compatibility-mode",[],null,[[null,"modeChanged"]],function(l,n,u){var t=!0;return"modeChanged"===n&&(t=!1!==l.component.onCompatibilityModeChange(u)&&t),t},C,h)),t.pb(63,49152,null,0,m,[],{modes:[0,"modes"]},{modeChanged:"modeChanged"}),(l()(),t.qb(64,0,null,null,2,"p",[["class","no-margin-top small-margin-bottom"],["translate",""]],null,null,null,null,null)),t.pb(65,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["All changes will have effect after system boot."])),(l()(),t.qb(67,0,null,null,45,"div",[["class","vendor-tables clearfix"]],null,null,null,null,null)),(l()(),t.qb(68,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(69,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["PLC Connections"])),(l()(),t.qb(71,0,null,null,5,"app-search-box",[],null,null,null,y.b,y.a)),t.pb(72,114688,null,0,k.a,[],null,null),(l()(),t.qb(73,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),t.qb(74,0,null,null,2,"button",[["class","btn btn-default small"],["id","update-stations"],["tab-index","2"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.getNetworkDevicesList()&&t),t},null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(76,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),t.qb(77,0,null,null,32,"table",[["class","dataTable vendorTable-responsive dataTableHightlight"],["id","plcConnections"]],null,null,null,null,null)),(l()(),t.qb(78,0,null,null,25,"thead",[],null,null,null,null,null)),(l()(),t.qb(79,0,null,null,24,"tr",[],null,null,null,null,null)),(l()(),t.qb(80,0,null,null,5,"th",[["class","pointer"],["style","width:100px;"]],null,null,null,null,null)),(l()(),t.qb(81,0,null,null,2,"span",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("id*1")&&t),t},null,null)),t.pb(82,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Device ID"])),(l()(),t.hb(16777216,null,null,1,null,j)),t.pb(85,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(86,0,null,null,5,"th",[["class","pointer"],["style","width:auto;"]],null,null,null,null,null)),(l()(),t.qb(87,0,null,null,2,"span",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("mac")&&t),t},null,null)),t.pb(88,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MAC Address"])),(l()(),t.hb(16777216,null,null,1,null,O)),t.pb(91,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(92,0,null,null,5,"th",[["class","pointer"],["style","width:150px;"]],null,null,null,null,null)),(l()(),t.qb(93,0,null,null,2,"span",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("tx*1")&&t),t},null,null)),t.pb(94,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Transmit (Mbps)"])),(l()(),t.hb(16777216,null,null,1,null,T)),t.pb(97,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(98,0,null,null,5,"th",[["class","pointer"],["style","width:150px;"]],null,null,null,null,null)),(l()(),t.qb(99,0,null,null,2,"span",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("rx*1")&&t),t},null,null)),t.pb(100,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Receive (Mbps)"])),(l()(),t.hb(16777216,null,null,1,null,F)),t.pb(103,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(104,0,null,null,5,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,E)),t.pb(106,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,2,null,B)),t.pb(108,278528,null,0,i.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Eb(109,3),(l()(),t.qb(110,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(111,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["* marks this device."])),(l()(),t.hb(16777216,null,null,1,null,K)),t.pb(114,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,N)),t.pb(116,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,13,0,""),l(n,16,0,""),l(n,20,0,""),l(n,23,0,""),l(n,26,0,""),l(n,30,0,"");var e=l(n,46,0,"text"==u.localPassType,"password"==u.localPassType);l(n,45,0,"glyphicon ",e),l(n,48,0,""),l(n,57,0,null),l(n,59,0,""),l(n,63,0,u.compatibilityModeInfo),l(n,65,0,""),l(n,69,0,""),l(n,72,0),l(n,82,0,""),l(n,85,0,"did*1"===u.orderby),l(n,88,0,""),l(n,91,0,"mac"===u.orderby),l(n,94,0,""),l(n,97,0,"tx*1"===u.orderby),l(n,100,0,""),l(n,103,0,"rx*1"===u.orderby),l(n,106,0,!u.connections.length);var a=t.Jb(n,108,0,l(n,109,0,t.Ab(n,0),u.connections,u.orderby,u.reverse));l(n,108,0,a),l(n,111,0,""),l(n,114,0,t.Ab(n,9).form.dirty),l(n,116,0,t.Ab(n,9).form.dirty)},function(l,n){var u=n.component;l(n,7,0,t.Ab(n,11).ngClassUntouched,t.Ab(n,11).ngClassTouched,t.Ab(n,11).ngClassPristine,t.Ab(n,11).ngClassDirty,t.Ab(n,11).ngClassValid,t.Ab(n,11).ngClassInvalid,t.Ab(n,11).ngClassPending),l(n,19,0,u.pairingInProgress||u.unpairingInProgress),l(n,22,0,u.pairingInProgress||u.unpairingInProgress),l(n,34,0,t.Jb(n,34,0,t.Ab(n,35).transform("PLC password"))),l(n,38,0,t.sb(1,"",u.localPassType,""),t.sb(1,"",t.Jb(n,38,1,t.Ab(n,39).transform("PLC password")),""),u.pairingInProgress||u.unpairingInProgress),l(n,41,0,t.Jb(n,41,0,"text"==u.localPassType?t.Ab(n,42).transform("Hide password"):t.Ab(n,43).transform("Show password")),u.pairingInProgress||u.unpairingInProgress),l(n,52,0,t.Jb(n,52,0,t.Ab(n,53).transform("PLC domain name"))),l(n,55,0,u.settings.domain_name),l(n,74,0,t.sb(1,"",t.Jb(n,74,0,t.Ab(n,75).transform("Update table")),""))})}function V(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-ghn-powerline",[],null,null,null,J,D)),t.Fb(512,null,M.a,M.a,[A.a,q.a,p.a]),t.pb(2,245760,null,0,I.a,[M.a,x.a,P.a,w.a,g.a],null,null)],function(l,n){l(n,2,0)},null)}var z=t.mb("app-ghn-powerline",I.a,V,{},{},[]),R=u("ilcq"),L=u("H6Ep"),$=u("6aHO"),G=u("T7CS"),U=u("IZUe"),H=u("UhSo"),Y=u("3a/w"),Z=u("JXkt"),X=t.ob({encapsulation:0,styles:[[".main-dlan-status[_ngcontent-%COMP%]   .vendor-tables[_ngcontent-%COMP%]   table#foundDlanDevices[_ngcontent-%COMP%]   th[_ngcontent-%COMP%]{font-size:12px}.main-dlan-status[_ngcontent-%COMP%]   .vendor-tables[_ngcontent-%COMP%]   table#foundDlanDevices[_ngcontent-%COMP%]   tbody[_ngcontent-%COMP%]   tr[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{border-bottom:none}.main-dlan-status[_ngcontent-%COMP%]   .vendor-tables[_ngcontent-%COMP%]   table#foundDlanDevices[_ngcontent-%COMP%]   tbody[_ngcontent-%COMP%]:hover   tr[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{border-color:#ccc!important}.main-dlan-status[_ngcontent-%COMP%]   .vendor-tables[_ngcontent-%COMP%]   table#foundDlanDevices[_ngcontent-%COMP%]   tbody[_ngcontent-%COMP%]   tr[_ngcontent-%COMP%]:last-child   td[_ngcontent-%COMP%], .main-dlan-status[_ngcontent-%COMP%]   .vendor-tables[_ngcontent-%COMP%]   table#foundDlanDevices[_ngcontent-%COMP%]   tbody[_ngcontent-%COMP%]:hover   tr[_ngcontent-%COMP%]:nth-last-child(2)   td[_ngcontent-%COMP%]{border-bottom:1px solid #ccc!important}.main-dlan-status[_ngcontent-%COMP%]   .vendor-tables[_ngcontent-%COMP%]   table#foundDlanDevices[_ngcontent-%COMP%]   tbody[_ngcontent-%COMP%]:hover   tr[_ngcontent-%COMP%]:nth-last-child(2)   td[_ngcontent-%COMP%]:first-child{border-bottom-left-radius:5px!important;border-bottom:1px solid #ccc!important}.main-dlan-status[_ngcontent-%COMP%]   .vendor-tables[_ngcontent-%COMP%]   table#foundDlanDevices[_ngcontent-%COMP%]   tbody[_ngcontent-%COMP%]:hover   tr[_ngcontent-%COMP%]:nth-last-child(2)   td[_ngcontent-%COMP%]:last-child{border-bottom-right-radius:5px!important;border-bottom:1px solid #ccc!important}"]],data:{}});function W(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Encryption:"]))],function(l,n){l(n,1,0,"")},null)}function Q(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Security status:"]))],function(l,n){l(n,1,0,"")},null)}function ll(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,14,"div",[["class","row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Security"])),(l()(),t.qb(4,0,null,null,10,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,4,"dt",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,W)),t.pb(7,212992,null,0,R.a,[t.M,t.P,p.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,Q)),t.pb(9,212992,null,0,d.a,[t.M,t.P,p.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(10,0,null,null,4,"dd",[["id","current-status"]],null,null,null,null,null)),t.pb(11,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(12,{"text-warning":0,"text-success":1}),(l()(),t.Ib(13,null,[" "," "])),t.Cb(131072,o.i,[o.j,t.h])],function(l,n){var u=n.component;l(n,2,0,""),l(n,7,0,null),l(n,9,0,null);var t=l(n,12,0,!u.secured,u.secured);l(n,11,0,t)},function(l,n){var u=n.component;l(n,13,0,t.Jb(n,13,0,t.Ab(n,14).transform(u.securityText)))})}function nl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Connected powerline devices"]))],function(l,n){l(n,1,0,"")},null)}function ul(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Network"]))],function(l,n){l(n,1,0,"")},null)}function tl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function el(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function al(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function ol(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function sl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function il(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function rl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function cl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"td",[["class","text-center empty-vaps-list"],["colspan","7"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Your Powerline pro network is disabled."]))],function(l,n){l(n,3,0,"")},null)}function bl(l){return t.Kb(0,[(l()(),t.qb(0,16777216,null,null,34,"tr",[["role","row"]],[[8,"id",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(2,{disabled:0}),t.pb(3,212992,null,0,L.a,[t.P,t.E,t.k,$.a,G.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(l()(),t.qb(4,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(6,0,null,null,2,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(7,null,[" "," "])),t.Eb(8,1),(l()(),t.qb(9,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(11,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(12,null,[" "," "])),(l()(),t.qb(13,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(15,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(16,null,[" "," "])),(l()(),t.qb(17,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(19,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(20,null,[" "," "])),(l()(),t.qb(21,0,null,null,5,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(23,0,null,null,3,"div",[["class","td-content text-center"]],null,null,null,null,null)),(l()(),t.qb(24,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),t.pb(25,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(26,{"glyphicon-ok-circle":0,"":1}),(l()(),t.qb(27,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(29,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(30,null,[" "," "])),(l()(),t.qb(31,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(33,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(34,null,[" "," "])),(l()(),t.hb(0,null,null,0))],function(l,n){var u=n.component,e=l(n,2,0,1!=n.context.$implicit.avln_num);l(n,1,0,e),l(n,3,0,t.sb(1,"",u.getMfg(n.context.$implicit.mac),""),t.sb(1,"",u.tooltipPlacement,""));var a=l(n,26,0,!0===n.context.$implicit.cco,!1===n.context.$implicit.cco);l(n,25,0,"glyphicon",a)},function(l,n){l(n,0,0,t.sb(1,"dlan-",n.context.index,""),n.context.odd,n.context.even),l(n,4,0,t.Jb(n,4,0,t.Ab(n,5).transform("AVLN"))),l(n,6,0,t.sb(1,"dlan-avln-",n.context.index,""));var u=t.Jb(n,7,0,l(n,8,0,t.Ab(n.parent,1),n.context.$implicit.avln_num));l(n,7,0,u),l(n,9,0,t.Jb(n,9,0,t.Ab(n,10).transform("Device Name"))),l(n,11,0,t.sb(1,"dlan-device-",n.context.index,"")),l(n,12,0,n.context.$implicit.deviceName),l(n,13,0,t.Jb(n,13,0,t.Ab(n,14).transform("MAC Address"))),l(n,15,0,t.sb(1,"dlan-mac-",n.context.index,"")),l(n,16,0,n.context.$implicit.mac),l(n,17,0,t.Jb(n,17,0,t.Ab(n,18).transform("Connection"))),l(n,19,0,t.sb(1,"dlan-connection-",n.context.index,"")),l(n,20,0,n.context.$implicit.local),l(n,21,0,t.Jb(n,21,0,t.Ab(n,22).transform("Central Coordinator"))),l(n,24,0,t.sb(1,"cco-icon-",n.context.index,""),n.context.$implicit.cco),l(n,27,0,t.Jb(n,27,0,t.Ab(n,28).transform("Tx rate (Mbit/s)"))),l(n,29,0,t.sb(1,"dlan-tx-",n.context.index,"")),l(n,30,0,""===n.context.$implicit.tx?"\u2013":n.context.$implicit.tx),l(n,31,0,t.Jb(n,31,0,t.Ab(n,32).transform("Rx rate (Mbit/s)"))),l(n,33,0,t.sb(1,"dlan-rx-",n.context.index,"")),l(n,34,0,""===n.context.$implicit.rx?"\u2013":n.context.$implicit.rx)})}function dl(l){return t.Kb(0,[t.Cb(0,b.a,[]),t.Cb(0,i.f,[t.u]),(l()(),t.qb(2,0,null,null,79,"div",[["class","vendor-dialogs main-dlan-status"],["id","dlan-status"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,ll)),t.pb(4,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(5,0,null,null,76,"div",[["class","vendor-tables"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,nl)),t.pb(7,212992,null,0,R.a,[t.M,t.P,p.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,ul)),t.pb(9,212992,null,0,d.a,[t.M,t.P,p.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(10,0,null,null,17,"app-search-box",[],null,null,null,y.b,y.a)),t.pb(11,114688,null,0,k.a,[],null,null),(l()(),t.qb(12,0,null,0,7,"input",[["class","col-md-8"],["id","dlan-network-search"],["name","searchDlanDevices"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,13)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,13).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,13)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,13)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.searchDlanDevices=u)&&e),e},null,null)),t.pb(13,16384,null,0,s.d,[t.E,t.k,[2,s.a]],null,null),t.Fb(1024,null,s.i,function(l){return[l]},[s.d]),t.pb(15,671744,null,0,s.n,[[8,null],[8,null],[8,null],[6,s.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(17,16384,null,0,s.k,[[4,s.j]],null,null),t.pb(18,81920,null,0,U.a,[t.k,P.a,t.z],null,null),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(20,0,null,1,4,"div",[],null,null,null,null,null)),(l()(),t.Ib(21,null,[" "," "])),t.Cb(0,H.a,[]),t.Db(23,{num:0,all:1}),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(25,0,null,2,2,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),t.qb(26,0,null,null,1,"button",[["class","btn btn-default small"],["id","dlan-network-refresh"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.getDevices()&&t),t},null,null)),(l()(),t.qb(27,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),t.qb(28,0,null,null,53,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),t.qb(29,0,null,null,52,"table",[["class","dataTable vendorTable-responsive"],["id","foundDlanDevices"]],null,null,null,null,null)),(l()(),t.qb(30,0,null,null,43,"thead",[],null,null,null,null,null)),(l()(),t.qb(31,0,null,null,42,"tr",[],null,null,null,null,null)),(l()(),t.qb(32,0,null,null,5,"th",[["style","width: 45px;"]],null,null,null,null,null)),(l()(),t.qb(33,0,null,null,2,"a",[["id","dlan-orderby-avln"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("avln_num*1")&&t),t},null,null)),t.pb(34,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["AVLN"])),(l()(),t.hb(16777216,null,null,1,null,tl)),t.pb(37,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(38,0,null,null,5,"th",[["style","width: auto;"]],null,null,null,null,null)),(l()(),t.qb(39,0,null,null,2,"a",[["id","dlan-orderby-name"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("deviceName")&&t),t},null,null)),t.pb(40,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Device Name"])),(l()(),t.hb(16777216,null,null,1,null,el)),t.pb(43,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(44,0,null,null,5,"th",[["style","width: 100px;"]],null,null,null,null,null)),(l()(),t.qb(45,0,null,null,2,"a",[["id","dlan-orderby-mac"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("mac")&&t),t},null,null)),t.pb(46,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MAC Address"])),(l()(),t.hb(16777216,null,null,1,null,al)),t.pb(49,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(50,0,null,null,5,"th",[["style","width: 80px;"]],null,null,null,null,null)),(l()(),t.qb(51,0,null,null,2,"a",[["id","dlan-orderby-connection"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("local")&&t),t},null,null)),t.pb(52,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Connection"])),(l()(),t.hb(16777216,null,null,1,null,ol)),t.pb(55,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(56,0,null,null,5,"th",[["style","width: 85px;"]],null,null,null,null,null)),(l()(),t.qb(57,0,null,null,2,"a",[["id","dlan-orderby-coordinator"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("cco")&&t),t},null,null)),t.pb(58,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Central Coordinator"])),(l()(),t.hb(16777216,null,null,1,null,sl)),t.pb(61,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(62,0,null,null,5,"th",[["style","width: 65px;"]],null,null,null,null,null)),(l()(),t.qb(63,0,null,null,2,"a",[["id","dlan-orderby-tx"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("tx*1")&&t),t},null,null)),t.pb(64,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Tx rate (Mbit/s)"])),(l()(),t.hb(16777216,null,null,1,null,il)),t.pb(67,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(68,0,null,null,5,"th",[["style","width: 65px;"]],null,null,null,null,null)),(l()(),t.qb(69,0,null,null,2,"a",[["id","dlan-orderby-rx"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("rx*1")&&t),t},null,null)),t.pb(70,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Rx rate (Mbit/s)"])),(l()(),t.hb(16777216,null,null,1,null,rl)),t.pb(73,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(74,0,null,null,2,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,cl)),t.pb(76,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(77,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,3,null,bl)),t.pb(79,278528,null,0,i.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Eb(80,3),t.Cb(0,H.a,[])],function(l,n){var u=n.component;l(n,4,0,!u.disabled),l(n,7,0,null),l(n,9,0,null),l(n,11,0),l(n,15,0,"searchDlanDevices",u.searchDlanDevices),l(n,18,0),l(n,34,0,""),l(n,37,0,"avln_num"===u.orderby),l(n,40,0,""),l(n,43,0,"deviceName"===u.orderby),l(n,46,0,""),l(n,49,0,"mac"===u.orderby),l(n,52,0,""),l(n,55,0,"local"===u.orderby),l(n,58,0,""),l(n,61,0,"cco"===u.orderby),l(n,64,0,""),l(n,67,0,"tx*1"===u.orderby),l(n,70,0,""),l(n,73,0,"rx*1"===u.orderby),l(n,76,0,!u.dlanDevices.length);var e=t.Jb(n,79,0,t.Ab(n,81).transform(t.Jb(n,79,0,l(n,80,0,t.Ab(n,0),u.dlanDevices,u.orderby,u.reverse)),u.searchDlanDevices));l(n,79,0,e)},function(l,n){var u=n.component;l(n,12,0,t.sb(1,"",t.Jb(n,12,0,t.Ab(n,19).transform("Search ...")),""),t.Ab(n,17).ngClassUntouched,t.Ab(n,17).ngClassTouched,t.Ab(n,17).ngClassPristine,t.Ab(n,17).ngClassDirty,t.Ab(n,17).ngClassValid,t.Ab(n,17).ngClassInvalid,t.Ab(n,17).ngClassPending);var e=t.Jb(n,21,0,t.Ab(n,24).transform("display {num} of {all}",l(n,23,0,t.Jb(n,21,0,t.Ab(n,22).transform(u.dlanDevices,u.searchDlanDevices)).length,u.dlanDevices.length)));l(n,21,0,e)})}function pl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-status",[],null,[["window","resize"]],function(l,n,u){var e=!0;return"window:resize"===n&&(e=!1!==t.Ab(l,2).onResize(u)&&e),e},dl,X)),t.Fb(512,null,Y.a,Y.a,[A.a,q.a]),t.pb(2,245760,null,0,Z.a,[Y.a,P.a],null,null)],function(l,n){l(n,2,0)},null)}var gl=t.mb("app-status",Z.a,pl,{},{},[]),ml=u("k1Yr"),hl=u("1dzw"),fl=u("krbb"),vl=u("5yF5"),Cl=u("008C"),yl=t.ob({encapsulation:2,styles:[],data:{}});function kl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"div",[["class","form-group"],["style","margin-bottom: 30px;"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,7,"label",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["id","dlan-network-enable"],["name","enablePlc"],["trueValue","0"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,4).onInput(u)&&e),"valueChange"===n&&(e=!1!==(a.disabled=u)&&e),"click"===n&&(e=!1!==a.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,s.n,s.n,[[2,s.c],[8,null],[8,null],[8,null]]),t.pb(4,16384,null,0,ml.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),t.pb(5,540672,null,0,hl.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),(l()(),t.qb(6,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable"]))],function(l,n){l(n,4,0,"0","1"),l(n,5,0,!0),l(n,7,0,"")},function(l,n){var u=n.component;l(n,2,0,u.disabled,0==u.disabled)})}function Ml(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"option",[],null,null,null,null,null)),t.pb(1,147456,null,0,s.o,[t.k,t.E,[2,s.r]],{value:[0,"value"]},null),t.pb(2,147456,null,0,s.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),(l()(),t.Ib(3,null,["",""]))],function(l,n){l(n,1,0,t.sb(1,"",n.context.$implicit,"")),l(n,2,0,t.sb(1,"",n.context.$implicit,""))},function(l,n){l(n,3,0,n.component.mduModes[n.context.$implicit])})}function Al(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,56,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Powerline Password"])),(l()(),t.qb(4,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(5,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enter the Powerline network password needed for your device to access your Powerline network. All devices that are part of a Powerline network must use the same Powerline network password."])),(l()(),t.qb(7,0,null,null,19,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(8,0,null,null,2,"label",[["class","col-md-3 control-label"],["translate",""]],null,null,null,null,null)),t.pb(9,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Password:"])),(l()(),t.qb(11,0,null,null,15,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(12,0,null,null,14,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t.qb(13,0,null,null,0,"input",[["autocomplete","off"],["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,5,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["id","dlan-network-password"],["name","localPass"]],[[8,"type",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,15)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,15).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,15)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,15)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.localPass=u)&&e),e},null,null)),t.pb(15,16384,null,0,s.d,[t.E,t.k,[2,s.a]],null,null),t.Fb(1024,null,s.i,function(l){return[l]},[s.d]),t.pb(17,671744,[["password",4]],0,s.n,[[2,s.c],[8,null],[8,null],[6,s.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(19,16384,null,0,s.k,[[4,s.j]],null,null),(l()(),t.qb(20,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),t.qb(21,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleKeyVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.toggleLocalPassVisibility()&&t),t},null,null)),t.Cb(131072,o.i,[o.j,t.h]),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(24,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),t.pb(25,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(26,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),t.qb(27,0,null,null,20,"div",[],null,null,null,null,null)),(l()(),t.qb(28,0,null,null,0,"div",[],null,null,null,null,null)),(l()(),t.qb(29,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(30,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Powerline Network Mode"])),(l()(),t.qb(32,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(33,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Choose the network mode of your device."])),(l()(),t.qb(35,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(36,0,null,null,2,"label",[["class","control-label col-md-3"],["for","mdumode"],["translate",""]],null,null,null,null,null)),t.pb(37,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Network Mode:"])),(l()(),t.qb(39,0,null,null,8,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(40,0,null,null,7,"select",[["class","form-control"],["id","mdumode"],["name","mdu"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"change"],[null,"ngModelChange"],[null,"blur"]],function(l,n,u){var e=!0,a=l.component;return"change"===n&&(e=!1!==t.Ab(l,41).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,41).onTouched()&&e),"change"===n&&(e=!1!==a.selectedMdu()&&e),"ngModelChange"===n&&(e=!1!==(a.mdu=u)&&e),e},null,null)),t.pb(41,16384,null,0,s.r,[t.E,t.k],null,null),t.Fb(1024,null,s.i,function(l){return[l]},[s.r]),t.pb(43,671744,null,0,s.n,[[2,s.c],[8,null],[8,null],[6,s.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(45,16384,null,0,s.k,[[4,s.j]],null,null),(l()(),t.hb(16777216,null,null,1,null,Ml)),t.pb(47,278528,null,0,i.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.qb(48,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(49,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Compatibility Mode"])),(l()(),t.qb(51,0,null,null,5,"div",[["class","form-group clearfix"]],null,null,null,null,null)),(l()(),t.qb(52,0,null,null,1,"app-compatibility-mode",[],null,[[null,"modeChanged"]],function(l,n,u){var t=!0;return"modeChanged"===n&&(t=!1!==l.component.onCompatibilityModeChange(u)&&t),t},C,h)),t.pb(53,49152,null,0,m,[],{modes:[0,"modes"]},{modeChanged:"modeChanged"}),(l()(),t.qb(54,0,null,null,2,"p",[["class","no-margin-top small-margin-bottom"],["translate",""]],null,null,null,null,null)),t.pb(55,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["All changes will have effect after system boot."]))],function(l,n){var u=n.component;l(n,2,0,""),l(n,5,0,""),l(n,9,0,""),l(n,17,0,"localPass",u.localPass);var t=l(n,26,0,"text"==u.localPassType,"password"==u.localPassType);l(n,25,0,"glyphicon ",t),l(n,30,0,""),l(n,33,0,""),l(n,37,0,""),l(n,43,0,"mdu",u.mdu),l(n,47,0,u.objectKeys(u.mduModes)),l(n,49,0,""),l(n,53,0,u.compatibilityModeInfo),l(n,55,0,"")},function(l,n){var u=n.component;l(n,14,0,t.sb(1,"",u.localPassType,""),t.Ab(n,19).ngClassUntouched,t.Ab(n,19).ngClassTouched,t.Ab(n,19).ngClassPristine,t.Ab(n,19).ngClassDirty,t.Ab(n,19).ngClassValid,t.Ab(n,19).ngClassInvalid,t.Ab(n,19).ngClassPending),l(n,21,0,t.Jb(n,21,0,"text"==u.localPassType?t.Ab(n,22).transform("Hide password"):t.Ab(n,23).transform("Show password"))),l(n,40,0,t.Ab(n,45).ngClassUntouched,t.Ab(n,45).ngClassTouched,t.Ab(n,45).ngClassPristine,t.Ab(n,45).ngClassDirty,t.Ab(n,45).ngClassValid,t.Ab(n,45).ngClassInvalid,t.Ab(n,45).ngClassPending)})}function ql(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save()&&t),t},r.b,r.a)),t.pb(1,114688,null,0,c.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,1,0,t.Ab(n.parent,4).form.invalid||u.invalidCompatibilityMode,"save")},null)}function Il(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancel()&&t),t},r.b,r.a)),t.pb(1,114688,null,0,c.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function xl(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,13,"div",[["class","vendor-dialogs"],["id","dlan-network"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,12,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,4).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,4).onReset()&&e),e},null,null)),t.pb(3,16384,null,0,s.w,[],null,null),t.pb(4,4210688,[[1,4],["delos",4]],0,s.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,s.c,null,[s.m]),t.pb(6,16384,null,0,s.l,[[4,s.c]],null,null),(l()(),t.hb(16777216,null,null,1,null,kl)),t.pb(8,212992,null,0,d.a,[t.M,t.P,p.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,Al)),t.pb(10,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,ql)),t.pb(12,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Il)),t.pb(14,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,8,0,null),l(n,10,0,0==u.disabled),l(n,12,0,t.Ab(n,4).form.dirty),l(n,14,0,t.Ab(n,4).form.dirty)},function(l,n){l(n,2,0,t.Ab(n,6).ngClassUntouched,t.Ab(n,6).ngClassTouched,t.Ab(n,6).ngClassPristine,t.Ab(n,6).ngClassDirty,t.Ab(n,6).ngClassValid,t.Ab(n,6).ngClassInvalid,t.Ab(n,6).ngClassPending)})}function Pl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-network",[],null,null,null,xl,yl)),t.Fb(512,null,fl.a,fl.a,[A.a,q.a]),t.pb(2,245760,null,0,vl.a,[fl.a,Cl.a,x.a,P.a,g.a],null,null)],function(l,n){l(n,2,0)},null)}var wl=t.mb("app-network",vl.a,Pl,{},{},[]),Dl=u("st81"),_l=u("t+HJ"),jl=u("N+XP"),Ol=t.ob({encapsulation:2,styles:[],data:{}});function Tl(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,84,"div",[["class","vendor-dialogs"],["id","dlan-devices"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,83,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,4).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,4).onReset()&&e),e},null,null)),t.pb(3,16384,null,0,s.w,[],null,null),t.pb(4,4210688,[[1,4],["delos",4]],0,s.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,s.c,null,[s.m]),t.pb(6,16384,null,0,s.l,[[4,s.c]],null,null),(l()(),t.qb(7,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(8,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Using the encryption button"])),(l()(),t.qb(10,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,['Use the encryption button to allow the device to join the Powerline network. Press the encryption button on the device which you want to join your Powerline network! Afterwards, click the "Start configuration" button.'])),(l()(),t.qb(13,0,null,null,3,"div",[["class","dlanDevice-edit-buttons form-group text-right"]],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,2,"button",[["class","btn btn-default"],["id","dlan-simple-connect-button"]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.simpleconnect()&&t),t},null,null)),(l()(),t.Ib(15,null,["",""])),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(17,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(18,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Via security ID"])),(l()(),t.qb(20,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(21,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Here you can add a new Powerline device to your network. First, enter the security ID printed on the rear side, plug the device into a power outlet and then confirm by clicking Start configuration."])),(l()(),t.qb(23,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(24,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["The security ID consists of four groups, each with four capital letters, separated by hyphens."])),(l()(),t.qb(26,0,null,null,55,"div",[["class","form-horizontal"]],null,null,null,null,null)),(l()(),t.qb(27,0,null,null,54,"div",[["class","form-group text-left"]],null,null,null,null,null)),(l()(),t.qb(28,0,null,null,2,"label",[["class","control-label sequrityId-label text-right"],["translate",""]],null,null,null,null,null)),t.pb(29,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Security ID:"])),(l()(),t.qb(31,0,null,null,11,"input",[["appCapitalize",""],["class","form-control securityId"],["data-maybe-empty","true"],["id","dlan-secid-0"],["mask","[^a-zA-Z]"],["maxlength","4"],["minlength","4"],["name","secid1"],["type","text"]],[[1,"minlength",0],[1,"maxlength",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,32)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,32).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,32)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,32)._compositionEnd(u.target.value)&&e),"input"===n&&(e=!1!==t.Ab(l,42).onInputChange(u)&&e),"ngModelChange"===n&&(e=!1!==(a.secId[0]=u)&&e),"input"===n&&(e=!1!==(t.Ab(l,37).value=u.target.value.toUpperCase())&&e),e},null,null)),t.pb(32,16384,null,0,s.d,[t.E,t.k,[2,s.a]],null,null),t.pb(33,540672,null,0,s.g,[],{minlength:[0,"minlength"]},null),t.pb(34,540672,null,0,s.f,[],{maxlength:[0,"maxlength"]},null),t.Fb(1024,null,s.h,function(l,n){return[l,n]},[s.g,s.f]),t.Fb(1024,null,s.i,function(l){return[l]},[s.d]),t.pb(37,671744,[["secid1",4]],0,s.n,[[2,s.c],[6,s.h],[8,null],[6,s.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(39,16384,null,0,s.k,[[4,s.j]],null,null),t.pb(40,81920,null,0,U.a,[t.k,P.a,t.z],null,null),t.pb(41,540672,null,0,hl.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),t.pb(42,16384,null,0,Dl.a,[],null,{ngModelChange:"ngModelChange"}),(l()(),t.qb(43,0,null,null,1,"span",[["class","divider"]],null,null,null,null,null)),(l()(),t.Ib(-1,null,["-"])),(l()(),t.qb(45,0,null,null,10,"input",[["appCapitalize",""],["class","form-control securityId"],["data-maybe-empty","true"],["forceFocusForMobileDevice","true"],["id","dlan-secid-1"],["mask","[^a-zA-Z]"],["maxlength","4"],["minlength","4"],["name","secid2"],["type","text"]],[[1,"minlength",0],[1,"maxlength",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,46)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,46).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,46)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,46)._compositionEnd(u.target.value)&&e),"input"===n&&(e=!1!==t.Ab(l,55).onInputChange(u)&&e),"ngModelChange"===n&&(e=!1!==(a.secId[1]=u)&&e),e},null,null)),t.pb(46,16384,null,0,s.d,[t.E,t.k,[2,s.a]],null,null),t.pb(47,540672,null,0,s.g,[],{minlength:[0,"minlength"]},null),t.pb(48,540672,null,0,s.f,[],{maxlength:[0,"maxlength"]},null),t.Fb(1024,null,s.h,function(l,n){return[l,n]},[s.g,s.f]),t.Fb(1024,null,s.i,function(l){return[l]},[s.d]),t.pb(51,671744,[["secid2",4]],0,s.n,[[2,s.c],[6,s.h],[8,null],[6,s.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(53,16384,null,0,s.k,[[4,s.j]],null,null),t.pb(54,540672,null,0,hl.a,[t.k,t.z],{appFocus:[0,"appFocus"],forceFocusForMobileDevice:[1,"forceFocusForMobileDevice"]},null),t.pb(55,16384,null,0,Dl.a,[],null,{ngModelChange:"ngModelChange"}),(l()(),t.qb(56,0,null,null,1,"span",[["class","divider"]],null,null,null,null,null)),(l()(),t.Ib(-1,null,["-"])),(l()(),t.qb(58,0,null,null,10,"input",[["appCapitalize",""],["class","form-control securityId"],["data-maybe-empty","true"],["forceFocusForMobileDevice","true"],["id","dlan-secid-2"],["mask","[^a-zA-Z]"],["maxlength","4"],["minlength","4"],["name","secid3"],["type","text"]],[[1,"minlength",0],[1,"maxlength",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,59)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,59).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,59)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,59)._compositionEnd(u.target.value)&&e),"input"===n&&(e=!1!==t.Ab(l,68).onInputChange(u)&&e),"ngModelChange"===n&&(e=!1!==(a.secId[2]=u)&&e),e},null,null)),t.pb(59,16384,null,0,s.d,[t.E,t.k,[2,s.a]],null,null),t.pb(60,540672,null,0,s.g,[],{minlength:[0,"minlength"]},null),t.pb(61,540672,null,0,s.f,[],{maxlength:[0,"maxlength"]},null),t.Fb(1024,null,s.h,function(l,n){return[l,n]},[s.g,s.f]),t.Fb(1024,null,s.i,function(l){return[l]},[s.d]),t.pb(64,671744,[["secid3",4]],0,s.n,[[2,s.c],[6,s.h],[8,null],[6,s.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(66,16384,null,0,s.k,[[4,s.j]],null,null),t.pb(67,540672,null,0,hl.a,[t.k,t.z],{appFocus:[0,"appFocus"],forceFocusForMobileDevice:[1,"forceFocusForMobileDevice"]},null),t.pb(68,16384,null,0,Dl.a,[],null,{ngModelChange:"ngModelChange"}),(l()(),t.qb(69,0,null,null,1,"span",[["class","divider"]],null,null,null,null,null)),(l()(),t.Ib(-1,null,["-"])),(l()(),t.qb(71,0,null,null,10,"input",[["appCapitalize",""],["class","form-control securityId"],["data-maybe-empty","true"],["forceFocusForMobileDevice","true"],["id","dlan-secid-3"],["mask","[^a-zA-Z]"],["maxlength","4"],["minlength","4"],["name","secid4"],["type","text"]],[[1,"minlength",0],[1,"maxlength",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,72)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,72).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,72)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,72)._compositionEnd(u.target.value)&&e),"input"===n&&(e=!1!==t.Ab(l,81).onInputChange(u)&&e),"ngModelChange"===n&&(e=!1!==(a.secId[3]=u)&&e),e},null,null)),t.pb(72,16384,null,0,s.d,[t.E,t.k,[2,s.a]],null,null),t.pb(73,540672,null,0,s.g,[],{minlength:[0,"minlength"]},null),t.pb(74,540672,null,0,s.f,[],{maxlength:[0,"maxlength"]},null),t.Fb(1024,null,s.h,function(l,n){return[l,n]},[s.g,s.f]),t.Fb(1024,null,s.i,function(l){return[l]},[s.d]),t.pb(77,671744,[["secid4",4]],0,s.n,[[2,s.c],[6,s.h],[8,null],[6,s.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(79,16384,null,0,s.k,[[4,s.j]],null,null),t.pb(80,540672,null,0,hl.a,[t.k,t.z],{appFocus:[0,"appFocus"],forceFocusForMobileDevice:[1,"forceFocusForMobileDevice"]},null),t.pb(81,16384,null,0,Dl.a,[],null,{ngModelChange:"ngModelChange"}),(l()(),t.qb(82,0,null,null,3,"div",[["class","dlanDevice-edit-buttons form-group text-right"]],null,null,null,null,null)),(l()(),t.qb(83,0,null,null,2,"button",[["class","btn btn-default"],["id","dlan-start-configuration-button"],["translate",""]],[[8,"disabled",0]],[[null,"click"],[null,"focus"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==a.startConfiguration()&&e),"focus"===n&&(e=0!=(4==t.Ab(l,37).length&&4==a.secId[1].length&&4==a.secId[2].length&&4==a.secId[3].length)&&e),e},null,null)),t.pb(84,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Start Configuration"]))],function(l,n){var u=n.component;l(n,8,0,""),l(n,11,0,""),l(n,18,0,""),l(n,21,0,""),l(n,24,0,""),l(n,29,0,""),l(n,33,0,"4"),l(n,34,0,"4"),l(n,37,0,"secid1",u.buttonDisable||u.secIdDisable,u.secId[0]),l(n,40,0),l(n,41,0,!0),l(n,47,0,"4"),l(n,48,0,"4"),l(n,51,0,"secid2",u.buttonDisable||u.secIdDisable,u.secId[1]),l(n,54,0,4==u.secId[0].length,"true"),l(n,60,0,"4"),l(n,61,0,"4"),l(n,64,0,"secid3",u.buttonDisable||u.secIdDisable,u.secId[2]),l(n,67,0,4==u.secId[1].length,"true"),l(n,73,0,"4"),l(n,74,0,"4"),l(n,77,0,"secid4",u.buttonDisable||u.secIdDisable,u.secId[3]),l(n,80,0,4==u.secId[2].length,"true"),l(n,84,0,"")},function(l,n){var u=n.component;l(n,2,0,t.Ab(n,6).ngClassUntouched,t.Ab(n,6).ngClassTouched,t.Ab(n,6).ngClassPristine,t.Ab(n,6).ngClassDirty,t.Ab(n,6).ngClassValid,t.Ab(n,6).ngClassInvalid,t.Ab(n,6).ngClassPending),l(n,14,0,u.buttonDisable),l(n,15,0,t.Jb(n,15,0,t.Ab(n,16).transform(u.simpleConnectBtnText))),l(n,31,0,t.Ab(n,33).minlength?t.Ab(n,33).minlength:null,t.Ab(n,34).maxlength?t.Ab(n,34).maxlength:null,t.Ab(n,39).ngClassUntouched,t.Ab(n,39).ngClassTouched,t.Ab(n,39).ngClassPristine,t.Ab(n,39).ngClassDirty,t.Ab(n,39).ngClassValid,t.Ab(n,39).ngClassInvalid,t.Ab(n,39).ngClassPending),l(n,45,0,t.Ab(n,47).minlength?t.Ab(n,47).minlength:null,t.Ab(n,48).maxlength?t.Ab(n,48).maxlength:null,t.Ab(n,53).ngClassUntouched,t.Ab(n,53).ngClassTouched,t.Ab(n,53).ngClassPristine,t.Ab(n,53).ngClassDirty,t.Ab(n,53).ngClassValid,t.Ab(n,53).ngClassInvalid,t.Ab(n,53).ngClassPending),l(n,58,0,t.Ab(n,60).minlength?t.Ab(n,60).minlength:null,t.Ab(n,61).maxlength?t.Ab(n,61).maxlength:null,t.Ab(n,66).ngClassUntouched,t.Ab(n,66).ngClassTouched,t.Ab(n,66).ngClassPristine,t.Ab(n,66).ngClassDirty,t.Ab(n,66).ngClassValid,t.Ab(n,66).ngClassInvalid,t.Ab(n,66).ngClassPending),l(n,71,0,t.Ab(n,73).minlength?t.Ab(n,73).minlength:null,t.Ab(n,74).maxlength?t.Ab(n,74).maxlength:null,t.Ab(n,79).ngClassUntouched,t.Ab(n,79).ngClassTouched,t.Ab(n,79).ngClassPristine,t.Ab(n,79).ngClassDirty,t.Ab(n,79).ngClassValid,t.Ab(n,79).ngClassInvalid,t.Ab(n,79).ngClassPending),l(n,83,0,4!==(null==t.Ab(n,37).value?null:t.Ab(n,37).value.length)||4!==(null==t.Ab(n,51).value?null:t.Ab(n,51).value.length)||4!==(null==t.Ab(n,64).value?null:t.Ab(n,64).value.length)||4!==(null==t.Ab(n,77).value?null:t.Ab(n,77).value.length)||u.buttonDisable||u.simpleConnectInProgress)})}function Fl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-devices",[],null,null,null,Tl,Ol)),t.Fb(512,null,_l.a,_l.a,[A.a,q.a]),t.pb(2,245760,null,0,jl.a,[_l.a,x.a,t.E,o.j,P.a],null,null)],function(l,n){l(n,2,0)},null)}var El=t.mb("app-devices",jl.a,Fl,{},{},[]),Sl=u("RChO"),Bl=u("ueff"),Kl=u("lOTE"),Nl=u("KXou"),Jl=u("S7LP"),Vl=u("ZYCi"),zl=u("AuKA"),Rl=u("ZLSo"),Ll=u("9Xeq"),$l=u("yGOH"),Gl=u("Jg5P"),Ul=u("Fq6B"),Hl=u("Aivk"),Yl=u("rSzr"),Zl=u("LLTo"),Xl=u("ub4/");u.d(n,"PowerlineModuleNgFactory",function(){return Wl});var Wl=t.nb(e,[],function(l){return t.xb([t.yb(512,t.j,t.cb,[[8,[a.a,z,gl,wl,El,Sl.a,Bl.a,Kl.a,Nl.a]],[3,t.j],t.x]),t.yb(4608,i.q,i.p,[t.u,[2,i.B]]),t.yb(4608,P.a,P.a,[[3,P.a]]),t.yb(4608,s.x,s.x,[]),t.yb(4608,Jl.a,Jl.a,[]),t.yb(4608,$.a,$.a,[t.j,t.z,t.q,Jl.a,t.g]),t.yb(4608,Cl.a,Cl.a,[t.F,$.a]),t.yb(4608,G.a,G.a,[]),t.yb(4608,g.a,g.a,[A.a,q.a]),t.yb(1073742336,i.c,i.c,[]),t.yb(1073742336,Vl.p,Vl.p,[[2,Vl.v],[2,Vl.m]]),t.yb(1073742336,zl.a,zl.a,[]),t.yb(1073742336,o.g,o.g,[]),t.yb(1073742336,Rl.a,Rl.a,[]),t.yb(1073742336,s.t,s.t,[]),t.yb(1073742336,s.e,s.e,[]),t.yb(1073742336,Ll.a,Ll.a,[]),t.yb(1073742336,$l.a,$l.a,[]),t.yb(1073742336,Gl.a,Gl.a,[]),t.yb(1073742336,Ul.a,Ul.a,[]),t.yb(1073742336,Hl.a,Hl.a,[]),t.yb(1073742336,Yl.a,Yl.a,[]),t.yb(1073742336,Zl.a,Zl.a,[]),t.yb(1073742336,e,e,[]),t.yb(1024,Vl.j,function(){return[[{path:"",component:I.a,data:{displayName:"Powerline",order:0},canDeactivate:[Xl.a]},{path:"status",component:Z.a,data:{displayName:"Status",order:0}},{path:"network",component:vl.a,data:{displayName:"Settings",order:10},canDeactivate:[Xl.a]},{path:"devices",component:jl.a,data:{displayName:"Add Devices",order:20},canDeactivate:[Xl.a]}]]},[])])})},"5SxG":function(l,n,u){"use strict";u.d(n,"a",function(){return a});var t=u("CcnG"),e=u("+3se"),a=function(){function l(){this.floatBtnClick=new t.m,this.floatBtn={className:"",icon:"",type:"",id:""}}return l.prototype.customFn=function(){this.floatBtnClick.emit()},l.prototype.ngOnInit=function(){"cancel"==this.floatBtnType?(this.floatBtn.className="delos-float-cancel",this.floatBtn.icon="remove",this.floatBtn.type="button"):(this.floatBtn.className="delos-float-save",this.floatBtn.icon="floppy-disk",this.floatBtn.type="submit"),this.floatBtn.id=this.floatBtn.type+e.a.newGuid()},l}()},Eidh:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){function l(){this.shouldShowForRetail=!1}return l.prototype.ngOnInit=function(){},l}()},H6Ep:function(l,n,u){"use strict";var t=u("mrSG"),e=u("CcnG"),a=u("fR9y"),o=u("T7CS");u("FfxL");var s={},i="undefined"==typeof console||!("warn"in console);function r(l){!Object(e.Y)()||i||l in s||(s[l]=!0,console.warn(l))}var c=u("hjjD"),b=u("gI3B");u.d(n,"a",function(){return d});var d=function(){function l(l,n,u,t,a){this._renderer=n,this._elementRef=u,this.tooltipChange=new e.m,this.containerClass="",this._animation=!0,this._fadeDuration=150,this.tooltipStateChanged=new e.m,this._tooltip=t.createLoader(this._elementRef,l,this._renderer).provide({provide:o.a,useValue:a}),Object.assign(this,a),this.onShown=this._tooltip.onShown,this.onHidden=this._tooltip.onHidden}return Object.defineProperty(l.prototype,"isOpen",{get:function(){return this._tooltip.isShown},set:function(l){l?this.show():this.hide()},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"htmlContent",{set:function(l){r("tooltipHtml was deprecated, please use `tooltip` instead"),this.tooltip=l},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_placement",{set:function(l){r("tooltipPlacement was deprecated, please use `placement` instead"),this.placement=l},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_isOpen",{get:function(){return r("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen},set:function(l){r("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen=l},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_enable",{get:function(){return r("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled},set:function(l){r("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled=l},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_appendToBody",{get:function(){return r('tooltipAppendToBody was deprecated, please use `container="body"` instead'),"body"===this.container},set:function(l){r('tooltipAppendToBody was deprecated, please use `container="body"` instead'),this.container=l?"body":this.container},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_popupClass",{set:function(l){r("tooltipClass deprecated")},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_tooltipContext",{set:function(l){r("tooltipContext deprecated")},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_tooltipPopupDelay",{set:function(l){r("tooltipPopupDelay is deprecated, use `delay` instead"),this.delay=l},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"_tooltipTrigger",{get:function(){return r("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers},set:function(l){r("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers=(l||"").toString()},enumerable:!0,configurable:!0}),l.prototype.ngOnInit=function(){var l=this;this._tooltip.listen({triggers:this.triggers,show:function(){return l.show()}}),this.tooltipChange.subscribe(function(n){n||l._tooltip.hide()})},l.prototype.toggle=function(){if(this.isOpen)return this.hide();this.show()},l.prototype.show=function(){var l=this;if(!(this.isOpen||this.isDisabled||this._delayTimeoutId)&&this.tooltip){var n=function(){l._delayTimeoutId&&(l._delayTimeoutId=void 0),l._tooltip.attach(a.a).to(l.container).position({attachment:l.placement}).show({content:l.tooltip,placement:l.placement,containerClass:l.containerClass})},u=function(){l._tooltipCancelShowFn&&l._tooltipCancelShowFn()};if(this.delay){var t=Object(b.a)(this.delay).subscribe(function(){n(),u()});if(this.triggers){var e=Object(c.b)(this.triggers);this._tooltipCancelShowFn=this._renderer.listen(this._elementRef.nativeElement,e[0].close,function(){t.unsubscribe(),u()})}}else n()}},l.prototype.hide=function(){var l=this;this._delayTimeoutId&&(clearTimeout(this._delayTimeoutId),this._delayTimeoutId=void 0),this._tooltip.isShown&&(this._tooltip.instance.classMap.in=!1,setTimeout(function(){l._tooltip.hide()},this._fadeDuration))},l.prototype.ngOnDestroy=function(){this._tooltip.dispose()},Object(t.b)([function(l,n){var u=" __"+n+"Value";Object.defineProperty(l,n,{get:function(){return this[u]},set:function(l){var t=this[u];this[u]=l,t!==l&&this[n+"Change"]&&this[n+"Change"].emit(l)}})},Object(t.d)("design:type",Object)],l.prototype,"tooltip",void 0),l}()},Jg5P:function(l,n,u){"use strict";u.d(n,"a",function(){return o}),u("fR9y"),u("H6Ep");var t=u("T7CS"),e=u("FfxL"),a=u("XD9u"),o=function(){function l(){}return l.forRoot=function(){return{ngModule:l,providers:[t.a,e.a,a.a]}},l}()},LLTo:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){}}()},RChO:function(l,n,u){"use strict";u.d(n,"a",function(){return r});var t=u("CcnG"),e=u("fR9y"),a=u("T7CS"),o=t.ob({encapsulation:0,styles:[".tooltip[_nghost-%COMP%] {\n      display: block;\n    }\n    .bs-tooltip-top[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-tooltip-bottom[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      left: 50%;\n      margin-left: -6px;\n    }\n    .bs-tooltip-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-tooltip-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      top: 50%;\n      margin-top: -6px;\n    }"],data:{}});function s(l){return t.Kb(2,[(l()(),t.qb(0,0,null,null,0,"div",[["class","tooltip-arrow arrow"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"div",[["class","tooltip-inner"]],null,null,null,null,null)),t.zb(null,0)],null,null)}function i(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"bs-tooltip-container",[["role","tooltip"]],[[8,"className",0],[2,"show",null]],null,null,s,o)),t.pb(1,4243456,null,0,e.a,[a.a],null,null)],null,function(l,n){l(n,0,0,"tooltip in tooltip-"+t.Ab(n,1).placement+" bs-tooltip-"+t.Ab(n,1).placement+" "+t.Ab(n,1).placement+" "+t.Ab(n,1).containerClass,!t.Ab(n,1).isBs3)})}var r=t.mb("bs-tooltip-container",e.a,i,{},{},["*"])},T7CS:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){this.placement="top",this.triggers="hover focus"}}()},UhSo:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){function l(){}return l.prototype.transform=function(l,n,u){return l&&l.length?n?(n=n.toLowerCase(),l.filter(function(t){return u?Array.isArray(u)?u.map(function(l){return t[l].toString().toLowerCase().includes(n)}).includes(!0):t[u].toString().toLowerCase().includes(n):"object"==typeof l[0]?JSON.stringify(Object.values(t)).toLowerCase().includes(n):t.toLowerCase().includes(n)})):l:[]},l}()},fR9y:function(l,n,u){"use strict";u.d(n,"a",function(){return e}),u("T7CS");var t=u("yZXx"),e=function(){function l(l){Object.assign(this,l)}return Object.defineProperty(l.prototype,"isBs3",{get:function(){return Object(t.a)()},enumerable:!0,configurable:!0}),l.prototype.ngAfterViewInit=function(){this.classMap={in:!1,fade:!1},this.classMap[this.placement]=!0,this.classMap["tooltip-"+this.placement]=!0,this.classMap.in=!0,this.animation&&(this.classMap.fade=!0),this.containerClass&&(this.classMap[this.containerClass]=!0)},l}()},nQCY:function(l,n,u){"use strict";u.d(n,"a",function(){return a}),u.d(n,"b",function(){return o});var t=u("CcnG"),e=u("Ip0R"),a=(u("5SxG"),t.ob({encapsulation:2,styles:[],data:{}}));function o(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"button",[["class","delos-float-action"],["type","button"]],[[8,"id",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.customFn()&&t),t},null,null)),t.pb(1,278528,null,0,e.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(l()(),t.qb(2,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],function(l,n){l(n,1,0,"delos-float-action",n.component.floatBtn.className)},function(l,n){var u=n.component;l(n,0,0,t.sb(1,"",u.floatBtn.className,"-btn"),u.disableFloatBtn),l(n,2,0,t.sb(1,"glyphicon glyphicon-",u.floatBtn.icon,""))})}},rSzr:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){}}()},tl7y:function(l,n,u){"use strict";u.d(n,"a",function(){return o}),u.d(n,"b",function(){return r});var t=u("CcnG"),e=u("xR9I"),a=u("Sxbm"),o=(u("Eidh"),t.ob({encapsulation:2,styles:[],data:{}}));function s(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","dataTables_filter"]],null,null,null,null,null)),t.zb(null,0)],null,null)}function i(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","col-md-5 hint-text displayed-entires"]],null,null,null,null,null)),t.zb(null,1)],null,null)}function r(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"div",[["class","row filter-row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"div",[["class","col-md-4"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,s)),t.pb(3,212992,null,0,e.a,[t.M,t.P,a.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,i)),t.pb(5,212992,null,0,e.a,[t.M,t.P,a.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(6,0,null,null,1,"div",[["class","col-xs-6 col-md-3 text-right pull-right"]],null,null,null,null,null)),t.zb(null,2)],function(l,n){var u=n.component;l(n,3,0,u.shouldShowForRetail),l(n,5,0,u.shouldShowForRetail)},null)}}}]);
\ No newline at end of file
diff --git a/www/11.aa4fc852b7bc31805b3c.js b/www/11.aa4fc852b7bc31805b3c.js
new file mode 100644
index 0000000..f663554
--- /dev/null
+++ b/www/11.aa4fc852b7bc31805b3c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{"1QHZ":function(l,n,u){"use strict";u.r(n);var t=u("CcnG"),e=u("K9Ia"),s=function(){function l(){this.ngUnsubscribe=new e.a}return l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l}(),a=function(){return function(){}}(),r=u("pMnS"),o=u("A7o+"),i=u("Ip0R"),b=u("gI3B"),c=u("ny24"),d=u("Vx+w"),p=u("+3se"),g=u("CPDd"),f=u("iIpO"),h=u("t2rx"),y=u("jGGy"),m=u("+NEN"),v=function(){function l(l,n){this.ubusService=l,this.authService=n}return l.prototype.getSystemInfo=function(){var l=[[this.authService.getSid(),"system.management","version",{}],[this.authService.getSid(),"system","info",{}],[this.authService.getSid(),"uci","get",{config:"system",section:"@system[0]"}],[this.authService.getSid(),"system.date","get",{}],[this.authService.getSid(),"uci","get",{config:"system",section:"ntp"}],[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"SerialNumber"}]];return l.push(d.a.ghn?[this.authService.getSid(),"network.ghntool","version",{}]:[this.authService.getSid(),"network.plctool","fw_version",{}]),this.ubusService.call({data:l})},l.prototype.getSystemStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"system","info",{}]})},l}(),I=function(){function l(l,n,u,t){this.statusService=l,this.formatTimeService=n,this.addressCheckService=u,this.pageLoadingService=t,this.statusInfo={sysName:null,sysLocation:null,sysContact:null,remoteSysLog:null,sysLogIpPort:null},this.updatingSysInfoDisplay=!1,this.ngUnsubscribe=new e.a,this.Config=d.a,this.refresh=1e3,this.updatingSysInfo=!1,this.deviceFirmwareVersion="",this.isPlc=!1,this.isPlc=Object(p.e)(d.a,"plc"),this.pageLoadingService.register(["updateSysInfo","displayStatusInfo"])}return l.prototype.ngOnInit=function(){var l=this;this.displayStatusInfo(),Object(b.a)(0,this.refresh).pipe(Object(c.a)(this.ngUnsubscribe)).subscribe(function(){l.updateSysInfo()})},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.displayStatusInfo=function(){var l=this;this.updatingSysInfoDisplay||(this.updatingSysInfoDisplay=!0,this.statusService.getSystemInfo().pipe(Object(c.a)(this.ngUnsubscribe)).subscribe(function(n){l.pageLoadingService.ready("displayStatusInfo");var u=n.result[2][1].values,t=u.log_ip||"",e=u.log_port||"";l.statusInfo.sysName=u.hostname,l.statusInfo.sysLocation=u.location||"",l.statusInfo.sysContact=u.contact||"",l.statusInfo.remoteSysLog=u.log_remote||"0",l.statusInfo.sysLogIpPort=t+":"+e,l.timeZone=u.zonename||"UTC";var s=n.result[3][1].value.split("-");l.localtime=new Date(s[0],s[1]-1,s[2],s[3],s[4],s[5]),l.statusInfoTotalMemory=(n.result[1][1].memory.total/1048576).toFixed(2),l.statusInfoFreeMemory=(n.result[1][1].memory.free/1048576).toFixed(2);var a=n.result[1][1].load;l.loadOneMin=(a[0]/65535).toFixed(2),l.loadFiveMin=(a[1]/65535).toFixed(2),l.loadFifteenMin=(a[2]/65535).toFixed(2),l.servers=(n.result[4][1].values.server||[]).map(l.addressCheckService.toUnicode),l.serialNumber=n.result[5][1].value,n.result[6]&&(l.deviceFirmwareVersion=l.isPlc?n.result[6][1].stdout?l.extractPlcFW(n.result[6][1].stdout):Object(p.b)("n/a"):n.result[6][1].fw_version),l.updatingSysInfoDisplay=!1},function(n){console.log(n),l.pageLoadingService.ready("displayStatusInfo")}))},l.prototype.updateSysInfo=function(){var l=this;if(++this.uptime,this.formatTimeService.toDays(this.uptime).subscribe(function(n){l.statusInfoUptime=n,l.pageLoadingService.ready("updateSysInfo")}),this.refresh-=1e3,this.refresh<=0){if(this.updatingSysInfo)return;this.updatingSysInfo=!0,this.refresh=d.a.system.status.sysinfo.refresh,this.statusService.getSystemStatus().pipe(Object(c.a)(this.ngUnsubscribe)).subscribe(function(n){l.uptime=n.result[1].uptime,l.updatingSysInfo=!1,l.displayStatusInfo()})}},l.prototype.extractPlcFW=function(l){var n;return(n=l.split(" ").splice(-1)[0].split("-"))[2].substr(0,n[2].lastIndexOf(".")+1)+n[3]},l}(),S=t.ob({encapsulation:2,styles:[],data:{}});function q(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Location:"]))],function(l,n){l(n,1,0,"")},null)}function C(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","syslocation"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.statusInfo.sysLocation)})}function k(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Contact:"]))],function(l,n){l(n,1,0,"")},null)}function j(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","syscontact"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.statusInfo.sysContact)})}function w(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Remote syslog server:"]))],function(l,n){l(n,1,0,"")},null)}function M(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","remote-syslog"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.statusInfo.sysLogIpPort)})}function x(l){return t.Kb(0,[t.Cb(0,i.f,[t.u]),(l()(),t.qb(1,0,null,null,80,"div",[["class","row"],["id","system-info"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["System Information"])),(l()(),t.qb(5,0,null,null,76,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(6,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Name:"])),(l()(),t.qb(9,0,null,null,1,"dd",[["id","sysname"]],null,null,null,null,null)),(l()(),t.Ib(10,null,["",""])),(l()(),t.hb(16777216,null,null,1,null,q)),t.pb(12,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,C)),t.pb(14,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,k)),t.pb(16,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,j)),t.pb(18,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(19,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(20,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Serial number:"])),(l()(),t.qb(22,0,null,null,1,"dd",[["id","snumber"]],null,null,null,null,null)),(l()(),t.Ib(23,null,["",""])),(l()(),t.qb(24,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(25,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Firmware version:"])),(l()(),t.qb(27,0,null,null,1,"dd",[["id","firmware"]],null,null,null,null,null)),(l()(),t.Ib(28,null,[" "," (",") "])),(l()(),t.qb(29,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(30,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["PLC firmware version:"])),(l()(),t.qb(32,0,null,null,1,"dd",[["id","firmware-version"]],null,null,null,null,null)),(l()(),t.Ib(33,null,["",""])),(l()(),t.qb(34,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(35,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Uptime:"])),(l()(),t.qb(37,0,null,null,1,"dd",[["id","uptime"]],null,null,null,null,null)),(l()(),t.Ib(38,null,[" "," "])),(l()(),t.qb(39,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(40,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Total memory:"])),(l()(),t.qb(42,0,null,null,6,"dd",[["id","memory"]],null,null,null,null,null)),(l()(),t.qb(43,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t.Ib(44,null,[""," "])),t.Eb(45,1),(l()(),t.qb(46,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(47,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MBytes"])),(l()(),t.qb(49,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(50,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Free memory:"])),(l()(),t.qb(52,0,null,null,6,"dd",[["id","free-memory"]],null,null,null,null,null)),(l()(),t.qb(53,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t.Ib(54,null,[""," "])),t.Eb(55,1),(l()(),t.qb(56,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(57,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MBytes"])),(l()(),t.qb(59,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(60,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["CPU load:"])),(l()(),t.qb(62,0,null,null,15,"dd",[["id","cpu-load"]],null,null,null,null,null)),(l()(),t.qb(63,0,null,null,4,"span",[],null,null,null,null,null)),t.pb(64,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(65,{"text-success":0,"text-warning":1,"text-danger":2}),(l()(),t.Ib(66,null,[""," / "])),t.Eb(67,1),(l()(),t.qb(68,0,null,null,4,"span",[],null,null,null,null,null)),t.pb(69,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(70,{"text-success":0,"text-warning":1,"text-danger":2}),(l()(),t.Ib(71,null,[""," / "])),t.Eb(72,1),(l()(),t.qb(73,0,null,null,4,"span",[],null,null,null,null,null)),t.pb(74,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(75,{"text-success":0,"text-warning":1,"text-danger":2}),(l()(),t.Ib(76,null,["",""])),t.Eb(77,1),(l()(),t.hb(16777216,null,null,1,null,w)),t.pb(79,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,M)),t.pb(81,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,""),l(n,7,0,""),l(n,12,0,u.statusInfo.sysLocation),l(n,14,0,u.statusInfo.sysLocation),l(n,16,0,u.statusInfo.sysContact),l(n,18,0,u.statusInfo.sysContact),l(n,20,0,""),l(n,25,0,""),l(n,30,0,""),l(n,35,0,""),l(n,40,0,""),l(n,47,0,""),l(n,50,0,""),l(n,57,0,""),l(n,60,0,"");var t=l(n,65,0,u.loadOneMin<=.7,u.loadOneMin<=1&&u.loadOneMin>.7,u.loadOneMin>=1&&u.loadOneMin>1);l(n,64,0,t);var e=l(n,70,0,u.loadFiveMin<=.7,u.loadFiveMin<=1&&u.loadFiveMin>.7,u.loadFiveMin>=1&&u.loadFiveMin>1);l(n,69,0,e);var s=l(n,75,0,u.loadFifteenMin<=.7,u.loadFifteenMin<=1&&u.loadFifteenMin>.7,u.loadFiveMin>=1&&u.loadFiveMin>1);l(n,74,0,s),l(n,79,0,"1"==u.statusInfo.remoteSysLog),l(n,81,0,"1"==u.statusInfo.remoteSysLog)},function(l,n){var u=n.component;l(n,10,0,u.statusInfo.sysName),l(n,23,0,u.serialNumber),l(n,28,0,u.Config.firmwareVersion,u.Config.firmwareBuildDate),l(n,33,0,u.deviceFirmwareVersion),l(n,38,0,u.statusInfoUptime);var e=t.Jb(n,44,0,l(n,45,0,t.Ab(n,0),u.statusInfoTotalMemory));l(n,44,0,e);var s=t.Jb(n,54,0,l(n,55,0,t.Ab(n,0),u.statusInfoFreeMemory));l(n,54,0,s);var a=t.Jb(n,66,0,l(n,67,0,t.Ab(n,0),u.loadOneMin));l(n,66,0,a);var r=t.Jb(n,71,0,l(n,72,0,t.Ab(n,0),u.loadFiveMin));l(n,71,0,r);var o=t.Jb(n,76,0,l(n,77,0,t.Ab(n,0),u.loadFifteenMin));l(n,76,0,o)})}var L=function(){function l(l){this.translateService=l}return l.prototype.transform=function(l){return new Date(l).toLocaleString(this.translateService.currentLang,{weekday:"short",year:"numeric",month:"2-digit",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})},l}(),F=u("weCn"),O=u("tl7y"),A=u("Eidh"),P=u("gIcY"),U=u("IZUe"),D=u("UVPe"),K=u("UhSo"),E=u("XlPw"),T=u("67Y/"),J=u("9Z1F"),B=function(){function l(l,n){this.ubusService=l,this.authService=n}return l.prototype.getLogs=function(){var l=this;return this.logs=[],this.ubusService.call({data:[this.authService.getSid(),"system.info","syslog",{}]}).pipe(Object(T.a)(function(n){return n.result[1].log.split(/\n/g).map(function(n){var u=n.split(/\ +/),t=u.splice(0,5).join(" "),e=u.splice(0,1).join(" "),s=u.splice(0,1).join(" ");s=s.substr(0,s.length-1);var a=u.join(" ");"daemon.debug"!=e&&l.logs.push({date:Date.parse(t),level:e,origin:s,msg:a})}),l.logs}),Object(J.a)(function(l){return Object(E.a)(l)}))},l}(),N=u("nbXG"),R=function(){function l(l,n,u){this.logService=l,this.localStorage=n,this.pageLoadingService=u,this.ngUnsubscribe=new e.a,this.updatingLogs=!1,this.logs=[],this.orderBy=this.localStorage.get("logsorderby")||"date",this.reverse=this.localStorage.get("logsorderreverse")||!0,this.pageLoadingService.register(["logsLoaded"])}return l.prototype.ngOnInit=function(){var l=this;Object(b.a)(0,1e4).pipe(Object(c.a)(this.ngUnsubscribe)).subscribe(function(){l.getSyslog()})},l.prototype.getSyslog=function(){var l=this;this.updatingLogs||(this.updatingLogs=!0,this.logService.getLogs().pipe(Object(c.a)(this.ngUnsubscribe)).subscribe(function(n){l.logs=n,l.updatingLogs=!1,l.pageLoadingService.ready("logsLoaded")},function(l){console.log(l)}))},l.prototype.order=function(l){this.reverse=this.orderBy===l&&!this.reverse,this.orderBy=l,this.localStorage.set("logsorderby",this.orderBy),this.localStorage.set("logsorderreverse",this.reverse)},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l}(),_=t.ob({encapsulation:2,styles:[],data:{}});function z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function G(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function V(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function X(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,i.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"tr",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"td",[["class","text-center empty-logs-list"],["colspan","4"]],null,null,null,null,null)),(l()(),t.Ib(2,null,[" "," "])),t.Cb(131072,o.i,[o.j,t.h])],null,function(l,n){l(n,2,0,t.Jb(n,2,0,t.Ab(n,3).transform("No Log Information")))})}function $(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""])),t.Cb(0,L,[o.j])],null,function(l,n){l(n,1,0,t.Jb(n,1,0,t.Ab(n,2).transform(n.parent.context.$implicit.date)))})}function W(l){return t.Kb(0,[(l()(),t.qb(0,0,[["logRow",1]],null,16,"tr",[],[[2,"odd",null],[2,"even",null]],null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.hb(16777216,null,null,1,null,$)),t.pb(4,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(5,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(7,0,null,null,1,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.Ib(8,null,["",""])),(l()(),t.qb(9,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(11,0,null,null,1,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.Ib(12,null,["",""])),(l()(),t.qb(13,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(15,0,null,null,1,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.Ib(16,null,["",""]))],function(l,n){l(n,4,0,n.context.$implicit.date)},function(l,n){l(n,0,0,n.context.odd,n.context.even),l(n,1,0,t.Jb(n,1,0,t.Ab(n,2).transform("Date"))),l(n,5,0,t.Jb(n,5,0,t.Ab(n,6).transform("Log Level"))),l(n,8,0,n.context.$implicit.level),l(n,9,0,t.Jb(n,9,0,t.Ab(n,10).transform("Origin"))),l(n,12,0,n.context.$implicit.origin),l(n,13,0,t.Jb(n,13,0,t.Ab(n,14).transform("Message"))),l(n,16,0,n.context.$implicit.msg)})}function Y(l){return t.Kb(0,[t.Cb(0,F.a,[]),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Logs"])),(l()(),t.qb(4,0,null,null,58,"div",[["class","vendor-tables"],["id","status-logs"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,21,"app-search-box",[],null,null,null,O.b,O.a)),t.pb(6,114688,null,0,A.a,[],{shouldShowForRetail:[0,"shouldShowForRetail"]},null),(l()(),t.qb(7,0,null,0,7,"input",[["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,s=l.component;return"input"===n&&(e=!1!==t.Ab(l,8)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,8).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,8)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,8)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(s.searchTerm=u)&&e),e},null,null)),t.pb(8,16384,null,0,P.d,[t.E,t.k,[2,P.a]],null,null),t.Fb(1024,null,P.i,function(l){return[l]},[P.d]),t.pb(10,671744,null,0,P.n,[[8,null],[8,null],[8,null],[6,P.i]],{model:[0,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,P.j,null,[P.n]),t.pb(12,16384,null,0,P.k,[[4,P.j]],null,null),t.pb(13,81920,null,0,U.a,[t.k,D.a,t.z],null,null),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(15,0,null,1,5,"div",[],null,null,null,null,null)),(l()(),t.Ib(16,null,[" "," "])),t.Eb(17,4),t.Cb(0,K.a,[]),t.Db(19,{num:0,all:1}),t.Cb(131072,o.i,[o.j,t.h]),(l()(),t.qb(21,0,null,2,5,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),t.qb(22,0,null,null,2,"a",[["class","log-link"],["href","/app/components/status/logs/log"],["target","_blank"]],null,null,null,null,null)),(l()(),t.qb(23,0,null,null,1,"button",[["class","btn btn-default small"]],null,null,null,null,null)),(l()(),t.qb(24,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-file"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,1,"button",[["class","btn btn-default small"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.getSyslog()&&t),t},null,null)),(l()(),t.qb(26,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),t.qb(27,0,null,null,35,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),t.qb(28,0,null,null,34,"table",[["class","dataTable vendorTable-responsive logs"]],null,null,null,null,null)),(l()(),t.qb(29,0,null,null,25,"thead",[],null,null,null,null,null)),(l()(),t.qb(30,0,null,null,24,"tr",[],null,null,null,null,null)),(l()(),t.qb(31,0,null,null,5,"th",[["style","width: 162px;"]],null,null,null,null,null)),(l()(),t.qb(32,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("date")&&t),t},null,null)),t.pb(33,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Date"])),(l()(),t.hb(16777216,null,null,1,null,z)),t.pb(36,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(37,0,null,null,5,"th",[["style","width: 91px;"]],null,null,null,null,null)),(l()(),t.qb(38,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("level")&&t),t},null,null)),t.pb(39,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Log Level"])),(l()(),t.hb(16777216,null,null,1,null,G)),t.pb(42,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(43,0,null,null,5,"th",[["style","width: auto;"]],null,null,null,null,null)),(l()(),t.qb(44,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("origin")&&t),t},null,null)),t.pb(45,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Origin"])),(l()(),t.hb(16777216,null,null,1,null,V)),t.pb(48,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(49,0,null,null,5,"th",[["style","width: auto;"]],null,null,null,null,null)),(l()(),t.qb(50,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("msg")&&t),t},null,null)),t.pb(51,8536064,null,0,o.d,[o.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Message"])),(l()(),t.hb(16777216,null,null,1,null,X)),t.pb(54,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(55,0,null,null,2,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Z)),t.pb(57,16384,null,0,i.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(58,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,3,null,W)),t.pb(60,278528,null,0,i.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Cb(0,K.a,[]),t.Eb(62,4)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,!0),l(n,10,0,u.searchTerm),l(n,13,0),l(n,33,0,""),l(n,36,0,"date"===u.orderBy),l(n,39,0,""),l(n,42,0,"level"===u.orderBy),l(n,45,0,""),l(n,48,0,"origin"===u.orderBy),l(n,51,0,""),l(n,54,0,"msg"===u.orderBy),l(n,57,0,!u.logs.length);var e=t.Jb(n,60,0,l(n,62,0,t.Ab(n,0),t.Jb(n,60,0,t.Ab(n,61).transform(u.logs,u.searchTerm)),u.orderBy,u.reverse,u.reverse));l(n,60,0,e)},function(l,n){var u=n.component;l(n,7,0,t.sb(1,"",t.Jb(n,7,0,t.Ab(n,14).transform("Search ...")),""),t.Ab(n,12).ngClassUntouched,t.Ab(n,12).ngClassTouched,t.Ab(n,12).ngClassPristine,t.Ab(n,12).ngClassDirty,t.Ab(n,12).ngClassValid,t.Ab(n,12).ngClassInvalid,t.Ab(n,12).ngClassPending);var e,s=t.Jb(n,16,0,t.Ab(n,20).transform("display {num} of {all}",l(n,19,0,null==(e=t.Jb(n,16,0,t.Ab(n,18).transform(t.Jb(n,16,0,l(n,17,0,t.Ab(n,0),u.logs,u.orderBy,u.reverse,u.reverse)),u.searchTerm)))?null:e.length,u.logs.length)));l(n,16,0,s)})}var H=t.ob({encapsulation:2,styles:[],data:{}});function Q(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,5,"div",[["class","vendor-dialogs support-dlg"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,1,"app-system-info",[],null,null,null,x,S)),t.pb(3,245760,null,0,I,[v,f.a,g.a,h.a],null,null),(l()(),t.qb(4,0,null,null,2,"app-logs",[],null,null,null,Y,_)),t.Fb(512,null,B,B,[m.a,y.a]),t.pb(6,245760,null,0,R,[B,N.a,h.a],null,null)],function(l,n){l(n,3,0),l(n,6,0)},null)}function ll(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-support",[],null,null,null,Q,H)),t.pb(1,180224,null,0,s,[],null,null)],null,null)}var nl=t.mb("app-support",s,ll,{},{},[]),ul=u("t/Na"),tl=u("3GWt"),el=u("ZLSo"),sl=u("9Xeq"),al=u("yGOH"),rl=u("bKdQ"),ol=u("rSzr"),il=u("ZYCi");u.d(n,"SupportModuleNgFactory",function(){return bl});var bl=t.nb(a,[],function(l){return t.xb([t.yb(512,t.j,t.cb,[[8,[r.a,nl]],[3,t.j],t.x]),t.yb(4608,i.q,i.p,[t.u,[2,i.B]]),t.yb(4608,D.a,D.a,[[3,D.a]]),t.yb(4608,P.x,P.x,[]),t.yb(4608,ul.k,ul.q,[i.d,t.B,ul.o]),t.yb(4608,ul.r,ul.r,[ul.k,ul.p]),t.yb(5120,ul.a,function(l){return[l]},[ul.r]),t.yb(4608,ul.n,ul.n,[]),t.yb(6144,ul.l,null,[ul.n]),t.yb(4608,ul.j,ul.j,[ul.l]),t.yb(6144,ul.b,null,[ul.j]),t.yb(4608,ul.g,ul.m,[ul.b,t.q]),t.yb(4608,ul.c,ul.c,[ul.g]),t.yb(4608,tl.a,tl.a,[ul.c]),t.yb(4608,v,v,[m.a,y.a]),t.yb(1073742336,i.c,i.c,[]),t.yb(1073742336,o.g,o.g,[]),t.yb(1073742336,el.a,el.a,[]),t.yb(1073742336,sl.a,sl.a,[]),t.yb(1073742336,P.t,P.t,[]),t.yb(1073742336,P.e,P.e,[]),t.yb(1073742336,al.a,al.a,[]),t.yb(1073742336,ul.e,ul.e,[]),t.yb(1073742336,ul.d,ul.d,[]),t.yb(1073742336,rl.a,rl.a,[]),t.yb(1073742336,ol.a,ol.a,[]),t.yb(1073742336,il.p,il.p,[[2,il.v],[2,il.m]]),t.yb(1073742336,a,a,[]),t.yb(256,ul.o,"XSRF-TOKEN",[]),t.yb(256,ul.p,"X-XSRF-TOKEN",[]),t.yb(1024,il.j,function(){return[[{path:"",component:s}]]},[])])})},Eidh:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){function l(){this.shouldShowForRetail=!1}return l.prototype.ngOnInit=function(){},l}()},UhSo:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){function l(){}return l.prototype.transform=function(l,n,u){return l&&l.length?n?(n=n.toLowerCase(),l.filter(function(t){return u?Array.isArray(u)?u.map(function(l){return t[l].toString().toLowerCase().includes(n)}).includes(!0):t[u].toString().toLowerCase().includes(n):"object"==typeof l[0]?JSON.stringify(Object.values(t)).toLowerCase().includes(n):t.toLowerCase().includes(n)})):l:[]},l}()},rSzr:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){}}()},tl7y:function(l,n,u){"use strict";u.d(n,"a",function(){return a}),u.d(n,"b",function(){return i});var t=u("CcnG"),e=u("xR9I"),s=u("Sxbm"),a=(u("Eidh"),t.ob({encapsulation:2,styles:[],data:{}}));function r(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","dataTables_filter"]],null,null,null,null,null)),t.zb(null,0)],null,null)}function o(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","col-md-5 hint-text displayed-entires"]],null,null,null,null,null)),t.zb(null,1)],null,null)}function i(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"div",[["class","row filter-row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"div",[["class","col-md-4"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,r)),t.pb(3,212992,null,0,e.a,[t.M,t.P,s.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,o)),t.pb(5,212992,null,0,e.a,[t.M,t.P,s.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(6,0,null,null,1,"div",[["class","col-xs-6 col-md-3 text-right pull-right"]],null,null,null,null,null)),t.zb(null,2)],function(l,n){var u=n.component;l(n,3,0,u.shouldShowForRetail),l(n,5,0,u.shouldShowForRetail)},null)}}}]);
\ No newline at end of file
diff --git a/www/12.0a730e5dbf73fbf320f2.js b/www/12.0a730e5dbf73fbf320f2.js
new file mode 100644
index 0000000..a2d5011
--- /dev/null
+++ b/www/12.0a730e5dbf73fbf320f2.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{SnfS:function(l,n,u){"use strict";u.r(n);var t=u("CcnG"),e=function(){return function(){}}(),a=u("pMnS"),i=u("A7o+"),r=u("Ip0R"),s=u("K9Ia"),b=u("ny24"),c=u("UVPe"),o=function(){function l(l){this.spinner=l,this.ngUnsubscribe=new s.a}return l.prototype.ngOnInit=function(){var l=this;this.spinner.spinnerState.pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(n){0==n.show&&setTimeout(function(){l.showExpandButton=!(l.cardBody.nativeElement&&l.cardBody.nativeElement.firstElementChild&&l.cardBody.nativeElement.firstElementChild.offsetHeight<240),l.ngOnDestroy()},0)})},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe&&this.ngUnsubscribe.unsubscribe()},l}(),d=t.ob({encapsulation:0,styles:[[""]],data:{}});function f(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"span",[["aria-hidden","true"],["class","glyphicon"],["id","overview-system-more"]],null,[[null,"click"]],function(l,n,u){var t=!0,e=l.component;return"click"===n&&(t=0!=(e.showme=!e.showme)&&t),t},null,null)),t.pb(2,278528,null,0,r.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(3,{"glyphicon-chevron-down":0,"glyphicon-chevron-up":1})],function(l,n){var u=n.component,t=l(n,3,0,!u.showme,u.showme);l(n,2,0,"glyphicon",t)},null)}function p(l){return t.Kb(0,[t.Gb(402653184,1,{cardBody:0}),(l()(),t.qb(1,0,null,null,10,"div",[["class","widget-wrapper-6"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,9,"div",[["class","widget"]],null,null,null,null,null)),t.pb(3,278528,null,0,r.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(4,{"widget-expanded":0}),(l()(),t.qb(5,0,null,null,1,"div",[["class","widget-head"]],null,null,null,null,null)),t.zb(null,0),(l()(),t.qb(7,0,[[1,0],["cardBody",1]],null,1,"div",[["class","widget-body"]],null,null,null,null,null)),t.zb(null,1),(l()(),t.qb(9,0,null,null,2,"div",[["class","widget-footer text-right"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,f)),t.pb(11,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,t=l(n,4,0,u.showme);l(n,3,0,"widget",t),l(n,11,0,u.showExpandButton)},null)}var h=u("xR9I"),g=u("Sxbm"),v=u("Vx+w"),m=u("t2rx"),y=u("67Y/"),I=u("+NEN"),q=u("jGGy"),w=u("nMVA"),S=function(){function l(l,n,u){this.ubusService=l,this.authService=n,this.lanStatusService=u}return l.prototype.getOverviewSystem=function(){return this.ubusService.call({data:[[this.authService.getSid(),"system","board",{}],[this.authService.getSid(),"system.management","version",{}],[this.authService.getSid(),"uci","get",{config:"system",section:"@system[0]"}],[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"SerialNumber"}]]})},l.prototype.updateOverviewSystem=function(){return this.ubusService.call({data:[this.authService.getSid(),"system","info",{}]})},l.prototype.getQueryManagementInterface=function(){return this.lanStatusService.getQueryManagementInterface()},l.prototype.getLanStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"vlan",type:"vlan"}]}).pipe(Object(y.a)(function(l){return l.result[1].values}))},l.prototype.getPowerlineStatus=function(){var l=[];return v.a.plc?l=[[this.authService.getSid(),"network.plctool","avlninfo",{}],[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"DlanMacAddress"}],[this.authService.getSid(),"uci","get",{config:"plc",section:"plc",option:"disabled"}]]:v.a.ghn&&(l=[[this.authService.getSid(),"network.ghntool","ghninfo",{}],[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"DlanMacAddress"}],[this.authService.getSid(),"uci","get",{config:"ghn",section:"ghn",option:"disabled"}]]),this.ubusService.call({data:l})},l.prototype.getWifiStatus=function(){return this.ubusService.call({data:[[this.authService.getSid(),"network.info","radio_state",{}],[this.authService.getSid(),"iwinfo","devices",{}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"ap"}}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"sta"}}],[this.authService.getSid(),"uci","get",{config:"vlan",type:"vlan"}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}]]}).pipe(Object(y.a)(function(l){return l.result.map(function(l){return l[1]})}))},l.prototype.getWifiDevices=function(l){var n=this,u=[];return l.forEach(function(l){u.push([n.authService.getSid(),"network.info","clients",{device:l}])}),this.ubusService.call({data:u}).pipe(Object(y.a)(function(l){return l.result.map(function(l){return l[1]})}))},l.prototype.getWifiInterface=function(l){return this.ubusService.call({data:[this.authService.getSid(),"iwinfo","info",{device:l}],raw:!0}).pipe(Object(y.a)(function(l){return l.result}))},l}(),j=function(){function l(l,n){this.overviewService=l,this.pageLoadingService=n,this.firmwareVersion=v.a.firmwareVersion,this.firmwareBuildDate=v.a.firmwareBuildDate,this.ngUnsubscribe=new s.a,this.localtime=(new Date).getTime()-1e3,this.updatingdisplayInfo=!1,this.pageLoadingService.register(["getOverview"])}return l.prototype.ngOnInit=function(){this.getOverview()},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.getOverview=function(){var l=this;this.updatingdisplayInfo||(this.updatingdisplayInfo=!0,this.overviewService.getOverviewSystem().pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(n){l.pageLoadingService.ready("getOverview"),l.hostname=n.result[0][1].hostname,l.version=n.result[1][1].version,l.system_board_hostname=l.hostname,l.system_contact=n.result[2][1].values.contact||"",l.system_location=n.result[2][1].values.location||"",l.system_timezone=n.result[2][1].values.zonename,l.serialNumber=n.result[3].length>1?n.result[3][1].value:"",l.updatingdisplayInfo=!1}))},l}(),x=t.ob({encapsulation:2,styles:[],data:{}});function P(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Location:"]))],function(l,n){l(n,1,0,"")},null)}function k(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-location"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.system_location)})}function O(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],null,null)}function M(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Contact:"]))],function(l,n){l(n,1,0,"")},null)}function K(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-contact"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.system_contact)})}function C(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],null,null)}function N(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time zone:"]))],function(l,n){l(n,1,0,"")},null)}function A(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dd",[["id","system-timezone"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""])),t.Cb(131072,i.i,[i.j,t.h])],null,function(l,n){var u=n.component;l(n,1,0,t.Jb(n,1,0,t.Ab(n,2).transform(u.system_timezone)))})}function L(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,49,"app-card",[["class","system-status"],["id","overview-system-status"]],null,null,null,p,d)),t.pb(1,245760,null,0,o,[c.a],null,null),(l()(),t.qb(2,0,null,0,5,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,4,"a",[["href","#/system/status"],["id","overview-route-system-status"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(4,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["System"])),(l()(),t.qb(8,0,null,1,41,"div",[["id","system-status-height"]],null,null,null,null,null)),(l()(),t.qb(9,0,null,null,40,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.qb(11,0,null,null,3,"a",[["href","#/system/management"],["id","overview-route-system-management"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(12,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Information"])),(l()(),t.qb(15,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(16,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Name:"])),(l()(),t.qb(18,0,null,null,1,"dd",[["id","system-board-hostname"]],null,null,null,null,null)),(l()(),t.Ib(19,null,["",""])),(l()(),t.qb(20,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,P)),t.pb(22,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,k)),t.pb(24,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,O)),t.pb(26,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,M)),t.pb(28,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,K)),t.pb(30,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,C)),t.pb(32,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(33,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(34,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Serial number:"])),(l()(),t.qb(36,0,null,null,1,"dd",[["id","system-serial-number"]],null,null,null,null,null)),(l()(),t.Ib(37,null,["",""])),(l()(),t.qb(38,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.qb(39,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(40,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Firmware version:"])),(l()(),t.qb(42,0,null,null,1,"dd",[["id","system-firmware-version"]],null,null,null,null,null)),(l()(),t.Ib(43,null,[" "," "," "])),(l()(),t.qb(44,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,N)),t.pb(46,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,A)),t.pb(48,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(49,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){var u=n.component;l(n,1,0),l(n,4,0,""),l(n,12,0,""),l(n,16,0,""),l(n,22,0,u.system_location),l(n,24,0,u.system_location),l(n,26,0,u.system_location),l(n,28,0,u.system_contact),l(n,30,0,u.system_contact),l(n,32,0,u.system_contact),l(n,34,0,""),l(n,40,0,""),l(n,46,0,null),l(n,48,0,null)},function(l,n){var u=n.component;l(n,3,0,t.sb(2,"",t.Jb(n,3,0,t.Ab(n,5).transform("System"))," / ",t.Jb(n,3,0,t.Ab(n,6).transform("Status")),"")),l(n,11,0,t.sb(1,"",t.Jb(n,11,0,t.Ab(n,13).transform("Management")),"")),l(n,19,0,u.system_board_hostname),l(n,37,0,u.serialNumber),l(n,43,0,u.firmwareVersion,u.firmwareBuildDate)})}var D=u("ilcq"),T=u("4sBD"),$=u("Z5Gg"),V=u("bO+w"),U=u("EDOA"),E=u("gI3B"),_=u("+3se"),J=function(){function l(l,n,u,t){this.statusService=l,this.wifiConfigService=n,this.pageLoadingService=u,this.issRetailService=t,this.ngUnsubscribe=new s.a,this.wifiinfo=[],this.radioPrefix="radio",this.interfacePrefix="wlan",this.updatingWiFiStatus=!1,this.pageLoadingService.register(["getWifiStatus"])}return l.prototype.ngOnInit=function(){var l=this;Object(E.a)(0,v.a.status.overview.wifi.refresh).pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(){l.getWifiStatus()})},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.getWifiStatus=function(){var l,n,u,t,e,a=this,i={},r={},s={},c=0,o=0,d=0,f=0;if(v.a.wireless.devices.hasOwnProperty("radio0")||v.a.wireless.devices.hasOwnProperty("radio1")){var p=function(){if(i.radio0&&i.radio1&&!(e>0)){for(var n in a.wifiinfo=[],l)if(l.hasOwnProperty(n)&&1!=l[n].disabled){var u={},b=n.charAt(a.radioPrefix.length);u.name=n,u.logicalName="radio"+b,u.freq=v.a.wireless.devices[u.logicalName].frequency,u.label=5===v.a.wireless.devices[u.logicalName].frequency?Object(_.b)("5 GHz Radio"):Object(_.b)("2.4 GHz Radio"),a.issRetailService.isDeviceLicenseRetail()&&(u.label=5===v.a.wireless.devices[u.logicalName].frequency?Object(_.b)("5 GHz"):Object(_.b)("2.4 GHz")),u.disabled=1==(Number(t[u.name].disabled)||0),u.status=u.disabled?Object(_.b)("Disabled"):Object(_.b)("Enabled"),u.disabled||(u.configuredChannel=l[n].config.channel,u.configuredHTMode=l[n].config.htmode,u.actualChannel=i[u.logicalName],u.actualFreq=r[u.logicalName],u.ssidcount=n===a.radioPrefix.concat("0")?d:o,u.ssidcounten=n===a.radioPrefix.concat("0")?f:c,u.clients=s[u.logicalName],u.enabled=!u.disabled,u.activeSsids=n===a.radioPrefix.concat("0")?a.radio0Vaps:a.radio1Vaps),a.wifiinfo.push(u)}a.pageLoadingService.ready("getWifiStatus")}};this.updatingWiFiStatus||(this.updatingWiFiStatus=!0,this.statusService.getWifiStatus().pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(h){i.radio0="n/a",i.radio1="n/a",r.radio0="n/a",r.radio1="n/a",s.radio0=0,s.radio1=0,n=h[1].devices,u=h[2].values;var g=h[3].values,v=h[4].values;t=h[5].values,(l=h[0])&&l.wifi0&&(a.radioPrefix="wifi",a.interfacePrefix="ath"),e=n.length,n.length&&(a.statusService.getWifiDevices(n).pipe(Object(b.a)(a.ngUnsubscribe)).subscribe(function(l){for(var u=0,t=0,i=function(i){var r=n[i],b=l[i].clients,c=Object.keys(b).map(function(l){return b[l]});if(e--,r.indexOf(".")>=0)return"continue";r.indexOf(a.interfacePrefix.concat("0"))>=0&&l[i].clients&&c.forEach(function(l){l.connected_time&&(s.radio0=++u)}),r.indexOf(a.interfacePrefix.concat("1"))>=0&&l[i].clients&&c.forEach(function(l){l.connected_time&&(s.radio1=++t)})},r=0;r<n.length;++r)i(r);p()}),n.forEach(function(l){0===l.indexOf(a.interfacePrefix.concat("0"))&&"n/a"===i.radio0&&(i.radio0="",a.statusService.getWifiInterface(a.interfacePrefix.concat("0")).pipe(Object(b.a)(a.ngUnsubscribe)).subscribe(function(l){0===l[0]&&(i.radio0=l[1].channel||"n/a",l[1].channel&&(r.radio0=l[1].frequency+" MHz"),p())})),0===l.indexOf(a.interfacePrefix.concat("1"))&&"n/a"===i.radio1&&(i.radio1="",a.statusService.getWifiInterface(a.interfacePrefix.concat("1")).pipe(Object(b.a)(a.ngUnsubscribe)).subscribe(function(l){0===l[0]&&(i.radio1=l[1].channel||"n/a",l[1].channel&&(r.radio1=l[1].frequency+" MHz"),p())}))}));var m=0,y=0;for(var I in Object(_.g)(t.wifi0)&&(m=t.wifi0.disabled),Object(_.g)(t.wifi1)&&(y=t.wifi1.disabled),a.radio0Vaps=[],a.radio1Vaps=[],u)u[I].device===a.radioPrefix.concat("0")?(d++,1!=u[I].disabled&&1!=m&&(a.radio0Vaps.push(u[I].ssid),f++)):u[I].device===a.radioPrefix.concat("1")&&(o++,1!=u[I].disabled&&1!=y&&(a.radio1Vaps.push(u[I].ssid),c++));for(var q in a.bridge||(a.bridge={enabled:!1,connection:Object(_.b)("pending")}),g)if(g.hasOwnProperty(q)){var w=g[q];a.bridge.enabled=!0,a.bridge.ssid=w.ssid,a.bridge.device=w.device;var S=w.device===a.radioPrefix.concat("0")?a.interfacePrefix.concat("0"):a.interfacePrefix.concat("1");a.statusService.getWifiInterface(S).pipe(Object(b.a)(a.ngUnsubscribe)).subscribe(function(l){l[1].channel?a.bridge.connection=Object(_.b)("connected"):l[1].channel?4===l[0]&&(a.bridge.connection=Object(_.b)("pending")):a.bridge.connection=Object(_.b)("Not connected")}),a.bridge.security=NaN===w.security?Object(_.b)("WPA2 Enterprise"):Object(_.b)("WPA2 Personal"),w.network in v&&(a.bridge.vlan=v[w.network].name,a.bridge.vlan_id=w.network.replace(/^vlan/,""));break}p()}))}},l.prototype.radarDetected=function(l){return 5===l.freq&&(this.bridge.enabled||this.bridge.device!==l.name)&&!this.wifiConfigService.channelInRange(l.actualChannel,l.configuredChannel,l.configuredHTMode)},l}(),W=t.ob({encapsulation:2,styles:[],data:{}});function F(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"hr",[],null,null,null,null,null))],null,null)}function B(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"a",[["href","#/wifi/radios"]],[[8,"id",0],[8,"title",0]],null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){var u=t.sb(1,"overview-route-wifi-radios-retail-",n.parent.context.$implicit.label.replace(" ",""),"");l(n,0,0,u,t.sb(1,"",n.parent.context.$implicit.label,"")),l(n,1,0,n.parent.context.$implicit.label)})}function z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"a",[],[[8,"id",0],[8,"href",4],[8,"title",0]],null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){var u=t.sb(1,"overview-route-wifi-radios-pro-",n.parent.context.$implicit.logicalName.replace(" ",""),"");l(n,0,0,u,t.sb(1,"#/wifi/",n.parent.context.$implicit.logicalName,""),t.sb(1,"",n.parent.context.$implicit.label,"")),l(n,1,0,n.parent.context.$implicit.label)})}function R(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dd",[["class","text-danger pull-right"],["translate",""]],[[8,"id",0]],null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Disabled"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"radio-",n.parent.context.index,"-disabled"))})}function G(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,0,0,t.sb(1,"system-wifi-channel-pro-",n.parent.parent.context.index,"")),l(n,1,0,n.parent.parent.context.$implicit.actualChannel+" ("+n.parent.parent.context.$implicit.actualFreq+("auto"===n.parent.parent.context.$implicit.configuredChannel?", auto":"")+")")})}function H(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(2,null,[" "," "]))],null,function(l,n){l(n,0,0,t.sb(1,"system-wifi-channel-retail-",n.parent.parent.context.index,"")),l(n,2,0,n.parent.parent.context.$implicit.actualChannel+("auto"===n.parent.parent.context.$implicit.configuredChannel?" (auto)":""))})}function Q(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"dt",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["\xa0"])),(l()(),t.qb(3,0,null,null,3,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(4,null,[" "," "])),t.Db(5,{channel:0}),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.qb(7,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],null,function(l,n){l(n,3,0,t.sb(1,"system-wifi-radar-",n.parent.parent.context.$implicit.configuredChannel,""));var u=t.Jb(n,4,0,t.Ab(n,6).transform("(Radar detected on {channel})",l(n,5,0,n.parent.parent.context.$implicit.configuredChannel)));l(n,4,0,u)})}function X(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(1,null,[" "," "]))],null,function(l,n){l(n,1,0,n.parent.parent.context.$implicit.ssidcounten+"/"+n.parent.parent.context.$implicit.ssidcount)})}function Y(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"br",[],null,null,null,null,null))],null,null)}function Z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"span",[["class","wifi_label"]],null,null,null,null,null)),(l()(),t.Ib(1,null,[" "," "])),(l()(),t.hb(16777216,null,null,1,null,Y)),t.pb(3,212992,null,0,D.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null)],function(l,n){l(n,3,0,null)},function(l,n){l(n,1,0,n.context.$implicit+(n.context.index<n.parent.parent.context.$implicit.activeSsids.length-1?",":""))})}function ll(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["n/a"]))],null,null)}function nl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,32,"div",[],null,null,null,null,null)),t.pb(1,278528,null,0,r.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(2,{"text-muted":0}),(l()(),t.qb(3,0,null,null,8,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(4,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(5,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Current channel:"])),(l()(),t.hb(16777216,null,null,1,null,G)),t.pb(8,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,H)),t.pb(10,212992,null,0,D.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(11,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Q)),t.pb(13,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(14,0,null,null,18,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(15,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(16,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enabled SSIDs:"])),(l()(),t.qb(18,0,null,null,7,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.qb(19,0,null,null,6,null,null,null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,X)),t.pb(21,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,Z)),t.pb(23,278528,null,0,r.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.hb(16777216,null,null,1,null,ll)),t.pb(25,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(26,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.qb(27,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(28,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Connected WiFi clients:"])),(l()(),t.qb(30,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(31,null,["",""])),(l()(),t.qb(32,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){var u=n.component,t=l(n,2,0,!n.parent.context.$implicit.enabled);l(n,1,0,t),l(n,5,0,""),l(n,8,0,null),l(n,10,0,null),l(n,13,0,u.radarDetected(n.parent.context.$implicit)),l(n,16,0,""),l(n,21,0,null),l(n,23,0,n.parent.context.$implicit.activeSsids),l(n,25,0,0==n.parent.context.$implicit.ssidcounten),l(n,28,0,"")},function(l,n){l(n,18,0,t.sb(1,"system-wifi-ssids-",n.parent.context.index,"")),l(n,30,0,t.sb(1,"system-wifi-radio-clients-",n.parent.context.index,"")),l(n,31,0,n.parent.context.$implicit.clients)})}function ul(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,11,"div",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,F)),t.pb(2,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(3,0,null,null,6,"h5",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,B)),t.pb(5,212992,null,0,D.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,z)),t.pb(7,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,R)),t.pb(9,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,nl)),t.pb(11,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,n.context.index>0),l(n,5,0,null),l(n,7,0,null),l(n,9,0,!n.context.$implicit.enabled),l(n,11,0,!n.context.$implicit.disabled)},null)}function tl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["SSID:"]))],function(l,n){l(n,1,0,"")},null)}function el(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-wifi-bridge-ssid"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.bridge.ssid)})}function al(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Connection status:"]))],function(l,n){l(n,1,0,"")},null)}function il(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-wifi-bridge-connection"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.bridge.connection)})}function rl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Security:"]))],function(l,n){l(n,1,0,"")},null)}function sl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-wifi-bridge-security"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.bridge.security)})}function bl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["VLAN:"]))],function(l,n){l(n,1,0,"")},null)}function cl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-wifi-bridge-vlan"]],null,null,null,null,null)),(l()(),t.Ib(1,null,[""," (",")"]))],null,function(l,n){var u=n.component;l(n,1,0,u.bridge.vlan,u.bridge.vlan_id)})}function ol(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,20,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,tl)),t.pb(2,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,el)),t.pb(4,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(5,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,al)),t.pb(7,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,il)),t.pb(9,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(10,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,rl)),t.pb(12,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,sl)),t.pb(14,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(15,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,bl)),t.pb(17,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,cl)),t.pb(19,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(20,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){var u=n.component;l(n,2,0,u.bridge.enabled),l(n,4,0,u.bridge.enabled),l(n,7,0,u.bridge.enabled),l(n,9,0,u.bridge.enabled),l(n,12,0,u.bridge.enabled),l(n,14,0,u.bridge.enabled),l(n,17,0,u.bridge.enabled&&u.bridge.vlan),l(n,19,0,u.bridge.enabled&&u.bridge.vlan)},null)}function dl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,3,"a",[["href","#/wifi/bridge"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(4,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Bridge"])),(l()(),t.hb(16777216,null,null,1,null,ol)),t.pb(8,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,4,0,""),l(n,8,0,u.bridge&&u.bridge.enabled)},function(l,n){l(n,3,0,t.sb(1,"",t.Jb(n,3,0,t.Ab(n,5).transform("Bridge")),""))})}function fl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,22,"app-card",[["class","wifi-status"],["id","overview-wifi-status"]],null,null,null,p,d)),t.pb(1,245760,null,0,o,[c.a],null,null),(l()(),t.qb(2,0,null,0,4,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,3,"a",[["href","#/wifi/status/#wifiRadio"],["id","overview-route-wifi-status-wifiRadio"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(4,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["WiFi"])),(l()(),t.qb(7,0,null,1,15,"div",[["id","wifi-status-height"]],null,null,null,null,null)),(l()(),t.qb(8,0,null,null,10,"div",[],null,null,null,null,null)),t.pb(9,278528,null,0,r.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(10,{hidden:0}),(l()(),t.qb(11,0,null,null,3,"h5",[],null,null,null,null,null)),(l()(),t.qb(12,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(13,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Guest network"])),(l()(),t.qb(15,0,null,null,2,"div",[["style","padding-left: 10px;"]],null,null,null,null,null)),(l()(),t.qb(16,0,null,null,1,"app-guest-wifi-timeout",[],null,null,null,T.b,T.a)),t.pb(17,114688,[["wifi_timeout",4]],0,$.a,[V.a,i.j],null,null),(l()(),t.qb(18,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,ul)),t.pb(20,278528,null,0,r.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.hb(16777216,null,null,1,null,dl)),t.pb(22,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,1,0),l(n,4,0,"");var e=l(n,10,0,!t.Ab(n,17).enabled);l(n,9,0,e),l(n,13,0,""),l(n,17,0),l(n,20,0,u.wifiinfo),l(n,22,0,u.bridge&&u.bridge.enabled)},function(l,n){l(n,3,0,t.sb(1,"",t.Jb(n,3,0,t.Ab(n,5).transform("Wifi Status")),""))})}var pl=function(){function l(l,n){this.statusService=l,this.pageLoadingService=n,this.ngUnsubscribe=new s.a,this.dlan={enabled:!0,statusText:Object(_.b)("Enabled"),secured:!0,securityText:Object(_.b)("Secured"),deviceCount:1,avlnCount:1},this.isPlc=!1,this.pageLoadingService.register(["updateDlanStatus"])}return l.prototype.ngOnInit=function(){var l=this;this.isPlc=Object(_.e)(v.a,"plc"),Object(E.a)(0,v.a.status.overview.networkStatus.refresh).pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(){l.updateDlanStatus()})},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.updateDlanStatus=function(){var l=this;this.statusService.getPowerlineStatus().pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(n){var u;l.pageLoadingService.ready("updateDlanStatus"),n.result[1][1].value&&(u=n.result[1][1].value.toUpperCase());var t=!1;if(n.result[2][1].value&&(t=!("0"===n.result[2][1].value)),n.result[0][1].devices){var e=!1,a=n.result[0][1].devices,i={};for(var r in a)a.hasOwnProperty(r)&&(i[a[r].avln_num]?i[a[r].avln_num]+=1:i[a[r].avln_num]=1,u&&a[r].mac===u&&(e=!("50:D3:E4:93:3F:85:5B:70:40:78:4D:F8:15:AA:8D:B7"===a[r].nmk)));l.dlan.deviceCount=a.length,l.dlan.avlnCount=Object.keys(i).length,l.dlan.secured=e,l.dlan.securityText=e?Object(_.b)("Secured"):Object(_.b)("Unsecured")}l.dlan.enabled=!t,l.dlan.statusText=t?Object(_.b)("Disabled"):Object(_.b)("Enabled")})},l}(),hl=t.ob({encapsulation:2,styles:[],data:{}});function gl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"a",[["href","#/powerline/status"],["id","overview-route-powerline-status"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Powerline"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"Powerline / ",t.Jb(n,0,0,t.Ab(n,2).transform("Status")),""))})}function vl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"a",[["href","#/powerline"],["id","overview-route-powerline"],["title","Powerline"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Powerline"]))],function(l,n){l(n,1,0,"")},null)}function ml(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"a",[["href","#/powerline/status"],["id","overview-route-powerline-status-local-device"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Local Device"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"",t.Jb(n,0,0,t.Ab(n,2).transform("Local Device")),""))})}function yl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"a",[["href","#/powerline"],["id","overview-route-powerline-local-device"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Local Device"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"",t.Jb(n,0,0,t.Ab(n,2).transform("Local Device")),""))})}function Il(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Status:"]))],function(l,n){l(n,1,0,"")},null)}function ql(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dd",[["id","system-dlan-status"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""])),t.Cb(131072,i.i,[i.j,t.h])],null,function(l,n){var u=n.component;l(n,1,0,t.Jb(n,1,0,t.Ab(n,2).transform(u.dlan.statusText)))})}function wl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],null,null)}function Sl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Encryption:"]))],function(l,n){l(n,1,0,"")},null)}function jl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Security status:"]))],function(l,n){l(n,1,0,"")},null)}function xl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"dt",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Sl)),t.pb(2,212992,null,0,D.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,jl)),t.pb(4,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null)],function(l,n){l(n,2,0,null),l(n,4,0,null)},null)}function Pl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"dd",[["id","system-dlan-security-status"]],null,null,null,null,null)),t.pb(1,278528,null,0,r.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(2,{"text-warning":0,"text-success":1}),(l()(),t.Ib(3,null,[" "," "])),t.Cb(131072,i.i,[i.j,t.h])],function(l,n){var u=n.component,t=l(n,2,0,!u.dlan.secured,u.dlan.secured);l(n,1,0,t)},function(l,n){var u=n.component;l(n,3,0,t.Jb(n,3,0,t.Ab(n,4).transform(u.dlan.securityText)))})}function kl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"a",[["href","#/powerline/network"],["id","overview-route-powerline-network"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Network"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"",t.Jb(n,0,0,t.Ab(n,2).transform("Network")),""))})}function Ol(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"a",[["href","#/powerline"],["id","overview-route-powerline-main"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Network"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"",t.Jb(n,0,0,t.Ab(n,2).transform("Network")),""))})}function Ml(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Connected devices:"]))],function(l,n){l(n,1,0,"")},null)}function Kl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-dlan-connected-devices"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.dlan.deviceCount)})}function Cl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Connected AVLNs:"]))],function(l,n){l(n,1,0,"")},null)}function Nl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","system-dlan-connected-avlns"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.dlan.avlnCount)})}function Al(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,5,"div",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Cl)),t.pb(2,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Nl)),t.pb(4,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(5,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){var u=n.component;l(n,2,0,u.dlan.enabled),l(n,4,0,u.dlan.enabled)},null)}function Ll(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,14,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,kl)),t.pb(4,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Ol)),t.pb(6,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(7,0,null,null,7,"dl",[["class","clearfix"],["id","overview-dlan-network"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Ml)),t.pb(9,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Kl)),t.pb(11,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(12,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Al)),t.pb(14,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null)],function(l,n){var u=n.component;l(n,4,0,u.isPlc),l(n,6,0,!u.isPlc),l(n,9,0,u.dlan.enabled),l(n,11,0,u.dlan.enabled),l(n,14,0,null)},null)}function Dl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,25,"app-card",[["class","dlan-status"],["id","overview-dlan-status"]],null,null,null,p,d)),t.pb(1,245760,null,0,o,[c.a],null,null),(l()(),t.qb(2,0,null,0,4,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,gl)),t.pb(4,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,vl)),t.pb(6,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(7,0,null,1,18,"div",[["id","dlan-status-height"]],null,null,null,null,null)),(l()(),t.qb(8,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,ml)),t.pb(10,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,yl)),t.pb(12,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(13,0,null,null,10,"dl",[["class","clearfix"],["id","overview-dlan-device"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Il)),t.pb(15,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,ql)),t.pb(17,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,wl)),t.pb(19,212992,null,0,h.a,[t.M,t.P,g.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,xl)),t.pb(21,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Pl)),t.pb(23,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Ll)),t.pb(25,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,1,0),l(n,4,0,u.isPlc),l(n,6,0,!u.isPlc),l(n,10,0,u.isPlc),l(n,12,0,!u.isPlc),l(n,15,0,null),l(n,17,0,null),l(n,19,0,null),l(n,21,0,u.dlan.enabled),l(n,23,0,u.dlan.enabled),l(n,25,0,u.dlan.enabled)},null)}var Tl=u("Obbf"),$l=u("BioP"),Vl=u("+I7i"),Ul=function(){function l(l,n,u,t,e){this.statusService=l,this.notification=n,this.pageLoadingService=u,this.ipService=t,this.portStatusService=e,this.ngUnsubscribe=new s.a,this.ifinfo=[],this.showLanStatus=!0,this.updatingInterfaceStatus=!1,this.pageLoadingService.register(["getInterfaceStatus","determineNetworkStatus","getVLANStatus"])}return l.prototype.ngOnInit=function(){var l=this;this.getVLANStatus(),Object(E.a)(0,v.a.status.overview.interfaceStatus.refresh).pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(){l.getInterfaceStatus()}),Object(E.a)(0,v.a.status.overview.networkStatus.refresh).pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(){l.determineNetworkStatus()})},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.getInterfaceStatus=function(){var l=this;this.updatingInterfaceStatus||(this.updatingInterfaceStatus=!0,this.statusService.getQueryManagementInterface().pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(n){l.pageLoadingService.ready("getInterfaceStatus");var u=n;switch(l.ifinfo=[],u.proto){case"dhcp":u.proto=Object(_.b)("DHCP");break;case"static":u.proto=Object(_.b)("static");break;default:u.proto=Object(_.b)("unknown")}l.ifinfo.push(u),l.ifinfo[0].netmask=l.ipService.cidr2bin(u.netmask),l.gateway=l.ifinfo[0].gateway,l.nameserver=l.ifinfo[0].dns,l.lan6=l.ifinfo[0].lan6},function(n){l.notification.error(Object(_.b)("Cannot retrieve current network information.")),l.updatingInterfaceStatus=!1}))},l.prototype.getVLANStatus=function(){var l=this;this.updatingVLANStatus||(this.updatingVLANStatus=!0,this.statusService.getLanStatus().pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(n){if(l.pageLoadingService.ready("getVLANStatus"),Object.keys(n).length){for(var u in l.vlansNumber=Object.keys(n).length,n)n.hasOwnProperty(u)&&"1"===n[u].management&&(l.managementVlan=n[u].name,l.managementVlanId=n[u][".name"].replace(/^vlan/,""));l.updatingVLANStatus=!1}else l.noVLANs=!0}))},l.prototype.determineNetworkStatus=function(){var l=this;this.portStatusService.update().pipe(Object(b.a)(this.ngUnsubscribe)).subscribe(function(n){l.pageLoadingService.ready("determineNetworkStatus"),l.ports=n})},l}(),El=t.ob({encapsulation:2,styles:[],data:{}});function _l(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dd",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Not connected"]))],function(l,n){l(n,1,0,"")},null)}function Jl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,5,"dd",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(2,null,[""," "])),(l()(),t.qb(3,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(4,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Mbit/s"]))],function(l,n){l(n,4,0,"")},function(l,n){l(n,1,0,"system-lan-port-speed-"+n.parent.context.$implicit.speed),l(n,2,0,n.parent.context.$implicit.speed)})}function Wl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,7,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,1,"dt",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(3,null,["",":"])),(l()(),t.hb(16777216,null,null,1,null,_l)),t.pb(5,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Jl)),t.pb(7,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(8,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){l(n,5,0,!n.context.$implicit.link),l(n,7,0,n.context.$implicit.link)},function(l,n){l(n,2,0,"system-lan-port-"+n.context.$implicit.name),l(n,3,0,n.context.$implicit.name)})}function Fl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,36,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,3,"a",[["href","#/lan/ip"],["translate",""]],[[8,"id",0],[8,"title",0]],null,null,null,null)),t.pb(3,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["IPv4"])),(l()(),t.qb(6,0,null,null,6,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(7,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(8,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Protocol:"])),(l()(),t.qb(10,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(11,null,["",""])),(l()(),t.qb(12,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.qb(13,0,null,null,23,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(15,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Address:"])),(l()(),t.qb(17,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(18,null,["",""])),(l()(),t.qb(19,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(20,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Subnet mask:"])),(l()(),t.qb(22,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(23,null,["",""])),(l()(),t.qb(24,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(26,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Default gateway:"])),(l()(),t.qb(28,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(29,null,["",""])),(l()(),t.qb(30,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.qb(31,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(32,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Name server:"])),(l()(),t.qb(34,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(35,null,["",""])),(l()(),t.qb(36,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){l(n,3,0,""),l(n,8,0,""),l(n,15,0,""),l(n,20,0,""),l(n,26,0,""),l(n,32,0,"")},function(l,n){var u=n.component;l(n,2,0,t.sb(1,"overview-route-lan-ip-",n.context.$implicit,""),t.sb(1,"",t.Jb(n,2,1,t.Ab(n,4).transform("IPv4")),"")),l(n,10,0,"system-lan-interface-proto-"+n.context.$implicit.proto),l(n,11,0,n.context.$implicit.proto),l(n,17,0,"system-lan-interface-ipaddr-"+n.context.$implicit.ipaddr),l(n,18,0,n.context.$implicit.ipaddr),l(n,22,0,"system-lan-interface-netmask-"+n.context.$implicit.netmask),l(n,23,0,n.context.$implicit.netmask),l(n,28,0,"system-lan-interface-gateway-"+n.context.$implicit.gateway),l(n,29,0,u.gateway),l(n,34,0,"system-lan-interface-nameserver-"+n.context.$implicit.nameserver),l(n,35,0,u.nameserver)})}function Bl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,20,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,3,"a",[["href","#/lan/ip"],["id","overview-route-lan-ip-main"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(4,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["IPv6"])),(l()(),t.qb(7,0,null,null,6,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(8,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(9,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Protocol:"])),(l()(),t.qb(11,0,null,null,1,"dd",[["id","system-lan-lan6-proto"],["style","text-transform: uppercase;"]],null,null,null,null,null)),(l()(),t.Ib(12,null,["",""])),(l()(),t.qb(13,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,6,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(15,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(16,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Address/Subnet:"])),(l()(),t.qb(18,0,null,null,1,"dd",[["class","ipv6-address"],["id","system-lan-lan6-address"]],null,null,null,null,null)),(l()(),t.Ib(19,null,["",""])),(l()(),t.qb(20,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){l(n,4,0,""),l(n,9,0,""),l(n,16,0,"")},function(l,n){var u=n.component;l(n,3,0,t.sb(1,"",t.Jb(n,3,0,t.Ab(n,5).transform("IPv6")),"")),l(n,12,0,u.lan6.proto),l(n,19,0,u.lan6["ipv6-address"][0].address+"/"+u.lan6["ipv6-address"][0].mask)})}function zl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,43,"app-card",[["class","lan-status"],["id","overview-lan-status"]],null,null,null,p,d)),t.pb(1,245760,null,0,o,[c.a],null,null),(l()(),t.qb(2,0,null,0,5,"div",[["class","card-header"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,4,"a",[["href","#/lan/status"],["id","overview-route-lan-status"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(4,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["LAN"])),(l()(),t.qb(8,0,null,1,35,"div",[["id","lan-status-height"]],null,null,null,null,null)),(l()(),t.qb(9,0,null,null,7,"div",[],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.qb(11,0,null,null,3,"a",[["href","#/lan/status"],["id","overview-route-lan-status-ethernet"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(12,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["Ethernet"])),(l()(),t.hb(16777216,null,null,1,null,Wl)),t.pb(16,278528,null,0,r.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.qb(17,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Fl)),t.pb(19,278528,null,0,r.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.hb(16777216,null,null,1,null,Bl)),t.pb(21,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(22,0,null,null,21,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),t.qb(23,0,null,null,0,"hr",[],null,null,null,null,null)),(l()(),t.qb(24,0,null,null,4,"h5",[],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,3,"a",[["href","#/lan/vlan"],["translate",""]],[[8,"title",0]],null,null,null,null)),t.pb(26,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,i.i,[i.j,t.h]),(l()(),t.Ib(-1,null,["VLANs"])),(l()(),t.qb(29,0,null,null,14,"dl",[["class","clearfix"]],null,null,null,null,null)),(l()(),t.qb(30,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(31,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Configured VLANs:"])),(l()(),t.qb(33,0,null,null,1,"dd",[["id","system-lan-vlansNumber"]],null,null,null,null,null)),(l()(),t.Ib(34,null,["",""])),(l()(),t.qb(35,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null)),(l()(),t.qb(36,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(37,8536064,null,0,i.d,[i.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Management VLAN:"])),(l()(),t.qb(39,0,null,null,3,"dd",[["id","system-lan-managementVlan"]],null,null,null,null,null)),(l()(),t.Ib(40,null,[""," "])),(l()(),t.qb(41,0,null,null,1,"span",[],[[8,"hidden",0]],null,null,null,null)),(l()(),t.Ib(42,null,["(",")"])),(l()(),t.qb(43,0,null,null,0,"br",[["class","clear"]],null,null,null,null,null))],function(l,n){var u=n.component;l(n,1,0),l(n,4,0,""),l(n,12,0,""),l(n,16,0,u.ports),l(n,19,0,u.ifinfo),l(n,21,0,u.lan6&&u.lan6["ipv6-address"]&&u.lan6["ipv6-address"].length),l(n,26,0,""),l(n,31,0,""),l(n,37,0,"")},function(l,n){var u=n.component;l(n,3,0,t.sb(2,"",t.Jb(n,3,0,t.Ab(n,5).transform("LAN"))," / ",t.Jb(n,3,0,t.Ab(n,6).transform("Status")),"")),l(n,11,0,t.sb(1,"",t.Jb(n,11,0,t.Ab(n,13).transform("Ethernet")),"")),l(n,22,0,u.noVLANs),l(n,25,0,t.sb(1,"",t.Jb(n,25,0,t.Ab(n,27).transform("VLANs")),"")),l(n,34,0,u.vlansNumber),l(n,40,0,u.managementVlan),l(n,41,0,!u.managementVlanId),l(n,42,0,u.managementVlanId)})}var Rl=function(){function l(){this.loadPowerline=v.a.plc||v.a.ghn,this.loadSystem=v.a.system,this.loadLan=v.a.lan,this.loadWifi=Object.keys(v.a.wireless.devices).length}return l.prototype.ngOnInit=function(){},l}(),Gl=t.ob({encapsulation:2,styles:[],data:{}});function Hl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[["class","widget-item"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-system",[],null,null,null,L,x)),t.pb(2,245760,null,0,j,[S,m.a],null,null)],function(l,n){l(n,2,0)},null)}function Ql(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"div",[["class","widget-item"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"app-wifi",[],null,null,null,fl,W)),t.Fb(512,null,U.a,U.a,[]),t.pb(3,245760,null,0,J,[S,U.a,m.a,g.a],null,null)],function(l,n){l(n,3,0)},null)}function Xl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[["class","widget-item"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-powerline",[],null,null,null,Dl,hl)),t.pb(2,245760,null,0,pl,[S,m.a],null,null)],function(l,n){l(n,2,0)},null)}function Yl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[["class","widget-item"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-lan",[],null,null,null,zl,El)),t.pb(2,245760,null,0,Ul,[S,Tl.a,m.a,Vl.a,$l.a],null,null)],function(l,n){l(n,2,0)},null)}function Zl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,9,"div",[["class","dashboard clearfix"],["id","status-overview"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,8,"div",[["class","widget-container clearfix"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Hl)),t.pb(3,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Ql)),t.pb(5,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Xl)),t.pb(7,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Yl)),t.pb(9,16384,null,0,r.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,u.loadSystem),l(n,5,0,u.loadWifi),l(n,7,0,u.loadPowerline),l(n,9,0,u.loadLan)},null)}function ln(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-overview",[],null,null,null,Zl,Gl)),t.pb(1,114688,null,0,Rl,[],null,null)],function(l,n){l(n,1,0)},null)}var nn=t.mb("app-overview",Rl,ln,{},{},[]),un=u("NU/u"),tn=u("MQte"),en=u("Q5BN"),an=u("mGS5"),rn=u("RChO"),sn=u("t/Na"),bn=u("gIcY"),cn=u("3GWt"),on=u("chmc"),dn=u("S7LP"),fn=u("6aHO"),pn=u("T7CS"),hn=u("ZYCi"),gn=function(){return function(){}}(),vn=u("yGOH"),mn=u("9Xeq"),yn=function(){return function(){}}(),In=u("x5KT"),qn=u("ZLSo"),wn=u("bKdQ"),Sn=u("rSzr"),jn=u("LLTo"),xn=u("AW84"),Pn=u("qDsZ"),kn=u("AEJi"),On=u("Jg5P"),Mn=u("Vl9L"),Kn=u("9nVo"),Cn=u("RYmd"),Nn=u("ub4/"),An=u("VEEB");u.d(n,"OverviewModuleNgFactory",function(){return Ln});var Ln=t.nb(e,[],function(l){return t.xb([t.yb(512,t.j,t.cb,[[8,[a.a,nn,un.a,tn.a,en.a,an.a,rn.a]],[3,t.j],t.x]),t.yb(4608,r.q,r.p,[t.u,[2,r.B]]),t.yb(4608,sn.k,sn.q,[r.d,t.B,sn.o]),t.yb(4608,sn.r,sn.r,[sn.k,sn.p]),t.yb(5120,sn.a,function(l){return[l]},[sn.r]),t.yb(4608,sn.n,sn.n,[]),t.yb(6144,sn.l,null,[sn.n]),t.yb(4608,sn.j,sn.j,[sn.l]),t.yb(6144,sn.b,null,[sn.j]),t.yb(4608,sn.g,sn.m,[sn.b,t.q]),t.yb(4608,sn.c,sn.c,[sn.g]),t.yb(4608,bn.x,bn.x,[]),t.yb(4608,c.a,c.a,[[3,c.a]]),t.yb(4608,cn.a,cn.a,[sn.c]),t.yb(4608,on.a,on.a,[]),t.yb(4608,dn.a,dn.a,[]),t.yb(4608,fn.a,fn.a,[t.j,t.z,t.q,dn.a,t.g]),t.yb(4608,w.a,w.a,[q.a,I.a]),t.yb(4608,Vl.a,Vl.a,[q.a,I.a]),t.yb(4608,pn.a,pn.a,[]),t.yb(4608,V.a,V.a,[q.a,I.a]),t.yb(4608,S,S,[I.a,q.a,w.a]),t.yb(1073742336,r.c,r.c,[]),t.yb(1073742336,hn.p,hn.p,[[2,hn.v],[2,hn.m]]),t.yb(1073742336,gn,gn,[]),t.yb(1073742336,sn.e,sn.e,[]),t.yb(1073742336,sn.d,sn.d,[]),t.yb(1073742336,bn.t,bn.t,[]),t.yb(1073742336,bn.e,bn.e,[]),t.yb(1073742336,i.g,i.g,[]),t.yb(1073742336,vn.a,vn.a,[]),t.yb(1073742336,mn.a,mn.a,[]),t.yb(1073742336,yn,yn,[]),t.yb(1073742336,In.a,In.a,[]),t.yb(1073742336,qn.a,qn.a,[]),t.yb(1073742336,wn.a,wn.a,[]),t.yb(1073742336,Sn.a,Sn.a,[]),t.yb(1073742336,jn.a,jn.a,[]),t.yb(1073742336,xn.a,xn.a,[]),t.yb(1073742336,Pn.a,Pn.a,[]),t.yb(1073742336,kn.c,kn.c,[]),t.yb(1073742336,On.a,On.a,[]),t.yb(1073742336,Mn.a,Mn.a,[]),t.yb(1073742336,e,e,[]),t.yb(1024,hn.j,function(){return[[{path:"",component:Rl}],[{path:"status",component:Kn.a,data:{displayName:"Status",retailOrder:0}},{path:"ip",component:Cn.a,data:{displayName:"IPv4/IPv6",retailOrder:10},canDeactivate:[Nn.a]},{path:"vlan",component:An.a,data:{displayName:"VLANs",appHideForRetail:!0},canDeactivate:[Nn.a]}]]},[]),t.yb(256,sn.o,"XSRF-TOKEN",[]),t.yb(256,sn.p,"X-XSRF-TOKEN",[])])})}}]);
\ No newline at end of file
diff --git a/www/2.00c0b2f404d4152eaa72.js b/www/2.00c0b2f404d4152eaa72.js
new file mode 100644
index 0000000..f3076b9
--- /dev/null
+++ b/www/2.00c0b2f404d4152eaa72.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"+s0g":function(e,t,a){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],s=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?a[e.month()]:t[e.month()]:t},monthsRegex:s,monthsShortRegex:s,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(a("wd/R"))},"//9w":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},"/X5v":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},"0mo+":function(e,t,a){!function(e){"use strict";var t={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},a={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};e.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===t&&e>=4||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===t&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===t?e+12:e},meridiem:function(e,t,a){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}})}(a("wd/R"))},"0tRk":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba"})}()},"1rYy":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,t){switch(t){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}})}()},"1xZ4":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,t){var a=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8";return"w"!==t&&"W"!==t||(a="a"),e+a},week:{dow:1,doy:4}})}()},"2fjn":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})}()},"2ykv":function(e,t,a){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),a="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],s=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?a[e.month()]:t[e.month()]:t},monthsRegex:s,monthsShortRegex:s,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(a("wd/R"))},"3E1r":function(e,t,a){!function(e){"use strict";var t={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},a={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};e.defineLocale("hi",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0930\u093e\u0924"===t?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===t?e:"\u0926\u094b\u092a\u0939\u0930"===t?e>=10?e:e+12:"\u0936\u093e\u092e"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}})}(a("wd/R"))},"4MV3":function(e,t,a){!function(e){"use strict";var t={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},a={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};e.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ac7\u0ab9\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===t?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===t?e:"\u0aac\u0aaa\u0acb\u0ab0"===t?e>=10?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}})}(a("wd/R"))},"4dOw":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},"4sBD":function(e,t,a){"use strict";a.d(t,"a",function(){return u}),a.d(t,"b",function(){return l});var n=a("CcnG"),s=a("H6Ep"),r=a("6aHO"),i=a("T7CS"),d=a("AEJi"),_=a("A7o+"),o=a("Ip0R"),u=(a("Z5Gg"),a("bO+w"),n.ob({encapsulation:2,styles:[],data:{}}));function m(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,10,"div",[["class","guest-timeout-warning"]],null,null,null,null,null)),(e()(),n.qb(1,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-time"],["style","margin-right: .3em;"]],null,null,null,null,null)),(e()(),n.qb(2,16777216,null,null,8,"span",[["id","guest-wifi-timeout-hint"],["placement","bottom"]],[[1,"expires",0]],null,null,null,null)),n.pb(3,212992,null,0,s.a,[n.P,n.E,n.k,r.a,i.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),n.Eb(4,2),n.Cb(131072,d.a,[n.h,n.z]),(e()(),n.Ib(6,null,[" "," "])),n.Eb(7,2),n.Cb(131072,d.d,[n.h,n.z]),n.Db(9,{duration:0}),n.Cb(131072,_.i,[_.j,n.h])],function(e,t){var a=t.component,s=n.sb(1,"",n.Jb(t,3,0,n.Ab(t,5).transform(n.Jb(t,3,0,e(t,4,0,n.Ab(t.parent,0),a.timeout,a.translateService.currentLang)))),"");e(t,3,0,s,"bottom")},function(e,t){var a=t.component;e(t,2,0,a.timestamp);var s=n.Jb(t,6,0,n.Ab(t,10).transform(a.text,e(t,9,0,n.Jb(t,6,0,n.Ab(t,8).transform(n.Jb(t,6,0,e(t,7,0,n.Ab(t.parent,0),a.timeout,a.translateService.currentLang)))))));e(t,6,0,s)})}function l(e){return n.Kb(0,[n.Cb(0,d.b,[]),(e()(),n.hb(16777216,null,null,1,null,m)),n.pb(2,16384,null,0,o.o,[n.P,n.M],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,2,0,t.component.enabled)},null)}},"5SxG":function(e,t,a){"use strict";a.d(t,"a",function(){return r});var n=a("CcnG"),s=a("+3se"),r=function(){function e(){this.floatBtnClick=new n.m,this.floatBtn={className:"",icon:"",type:"",id:""}}return e.prototype.customFn=function(){this.floatBtnClick.emit()},e.prototype.ngOnInit=function(){"cancel"==this.floatBtnType?(this.floatBtn.className="delos-float-cancel",this.floatBtn.icon="remove",this.floatBtn.type="button"):(this.floatBtn.className="delos-float-save",this.floatBtn.icon="floppy-disk",this.floatBtn.type="submit"),this.floatBtn.id=this.floatBtn.type+s.a.newGuid()},e}()},"6+QB":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,a){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}()},"6B0Y":function(e,t,a){!function(e){"use strict";var t={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},a={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};e.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,t,a){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(a("wd/R"))},"6dTq":function(e,t,a){"use strict";a.d(t,"a",function(){return s}),a("chmc");var n=a("yZXx"),s=function(){function e(e){Object.assign(this,e)}return Object.defineProperty(e.prototype,"isBs3",{get:function(){return Object(n.a)()},enumerable:!0,configurable:!0}),e}()},"7BjC":function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return t?s[a][2]?s[a][2]:s[a][1]:n?s[a][0]:s[a][1]}a("wd/R").defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d p\xe4eva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},"7aV9":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,t,a){return e>11?a?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":a?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}})}()},"8/+R":function(e,t,a){!function(e){"use strict";var t={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},a={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};e.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===t?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===t?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===t?e>=10?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}})}(a("wd/R"))},"8b39":function(e,t,a){"use strict";a.d(t,"a",function(){return r});var n=a("chmc"),s=(a("FfxL"),a("6dTq")),r=function(){function e(e,t,a,s,r){this.outsideClick=!1,this.containerClass="",this._isInited=!1,this._popover=r.createLoader(e,a,t).provide({provide:n.a,useValue:s}),Object.assign(this,s),this.onShown=this._popover.onShown,this.onHidden=this._popover.onHidden,"undefined"!=typeof window&&e.nativeElement.addEventListener("click",function(){try{e.nativeElement.focus()}catch(t){return}})}return Object.defineProperty(e.prototype,"isOpen",{get:function(){return this._popover.isShown},set:function(e){e?this.show():this.hide()},enumerable:!0,configurable:!0}),e.prototype.show=function(){!this._popover.isShown&&this.popover&&(this._popover.attach(s.a).to(this.container).position({attachment:this.placement}).show({content:this.popover,context:this.popoverContext,placement:this.placement,title:this.popoverTitle,containerClass:this.containerClass}),this.isOpen=!0)},e.prototype.hide=function(){this.isOpen&&(this._popover.hide(),this.isOpen=!1)},e.prototype.toggle=function(){if(this.isOpen)return this.hide();this.show()},e.prototype.ngOnInit=function(){var e=this;this._isInited||(this._isInited=!0,this._popover.listen({triggers:this.triggers,outsideClick:this.outsideClick,show:function(){return e.show()}}))},e.prototype.ngOnDestroy=function(){this._popover.dispose()},e}()},"8mBD":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}()},"9rRi":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}()},"A+xa":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}})}()},AEJi:function(e,t,a){"use strict";a.d(t,"a",function(){return i}),a.d(t,"c",function(){return m}),a.d(t,"d",function(){return _}),a.d(t,"b",function(){return u});var n=a("CcnG"),s=a("wd/R"),r=s,i=function(){function e(t,a){var n=this;this.cdRef=t,this.ngZone=a,e.initTimer(a),e.refs++,this.midnightSub=e.midnight.subscribe(function(){n.ngZone.run(function(){return n.cdRef.markForCheck()})})}return e.prototype.transform=function(e){for(var t=[],a=1;a<arguments.length;a++)t[a-1]=arguments[a];for(var n=null,i=null,d=0,_=t.length;d<_;d++)null!==t[d]&&("object"!=typeof t[d]||Object(s.isMoment)(t[d])?i=r(t[d]):n=t[d]);return r(e).calendar(i,n)},e.prototype.ngOnDestroy=function(){e.refs>0&&e.refs--,0===e.refs&&e.removeTimer(),this.midnightSub.unsubscribe()},e.initTimer=function(t){if(!e.midnight&&(e.midnight=new n.m,"undefined"!=typeof window)){var a=e._getMillisecondsUntilUpdate();e.timer=t.runOutsideAngular(function(){return window.setTimeout(function(){e.midnight.emit(new Date),e.removeTimer(),e.initTimer(t)},a)})}},e.removeTimer=function(){e.timer&&(window.clearTimeout(e.timer),e.timer=null,e.midnight=null)},e._getMillisecondsUntilUpdate=function(){var e=r();return r().startOf("day").add(1,"days").valueOf()-e.valueOf()+1e3},e.refs=0,e.timer=null,e.midnight=null,e}(),d=s,_=function(){function e(e,t){this.cdRef=e,this.ngZone=t}return e.prototype.transform=function(e,t){return this.hasChanged(e,t)?(this.lastTime=this.getTime(e),this.lastValue=e,this.lastOmitSuffix=t,this.lastLocale=this.getLocale(e),this.removeTimer(),this.createTimer(),this.lastText=d(e).from(d(),t)):this.createTimer(),this.lastText},e.prototype.ngOnDestroy=function(){this.removeTimer()},e.prototype.createTimer=function(){var e=this;if(!this.currentTimer){var t=d(this.lastValue),a=1e3*this.getSecondsUntilUpdate(t);this.currentTimer=this.ngZone.runOutsideAngular(function(){if("undefined"!=typeof window)return window.setTimeout(function(){e.lastText=d(e.lastValue).from(d(),e.lastOmitSuffix),e.currentTimer=null,e.ngZone.run(function(){return e.cdRef.markForCheck()})},a)})}},e.prototype.removeTimer=function(){this.currentTimer&&(window.clearTimeout(this.currentTimer),this.currentTimer=null)},e.prototype.getSecondsUntilUpdate=function(e){var t=Math.abs(d().diff(e,"minute"));return t<1?1:t<60?30:t<180?300:3600},e.prototype.hasChanged=function(e,t){return this.getTime(e)!==this.lastTime||this.getLocale(e)!==this.lastLocale||t!==this.lastOmitSuffix},e.prototype.getTime=function(e){return Object(s.isDate)(e)?e.getTime():Object(s.isMoment)(e)?e.valueOf():d(e).valueOf()},e.prototype.getLocale=function(e){return Object(s.isMoment)(e)?e.locale():null},e}(),o=s,u=function(){function e(){}return e.prototype.transform=function(e,t){return o(e).locale(t)},e}(),m=function(){return function(){}}()},AQ68:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}()},AW84:function(e,t,a){"use strict";a.d(t,"a",function(){return i});var n=a("FfxL"),s=a("XD9u"),r=a("chmc"),i=(a("8b39"),a("6dTq"),function(){function e(){}return e.forRoot=function(){return{ngModule:e,providers:[r.a,n.a,s.a]}},e}())},AvvY:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===t&&e>=4||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===t||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===t?e+12:e},meridiem:function(e,t,a){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}})}()},B55N:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ja",{months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,t,a){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()<this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()<e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}})}()},BVg3:function(e,t,a){!function(e){"use strict";function t(e){return e%100==11||e%10!=1}function n(e,a,n,s){var r=e+" ";switch(n){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return t(e)?r+(a||s?"sek\xfandur":"sek\xfandum"):r+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return t(e)?r+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?r+"m\xedn\xfata":r+"m\xedn\xfatu";case"hh":return t(e)?r+(a||s?"klukkustundir":"klukkustundum"):r+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return t(e)?a?r+"dagar":r+(s?"daga":"d\xf6gum"):a?r+"dagur":r+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return t(e)?a?r+"m\xe1nu\xf0ir":r+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?r+"m\xe1nu\xf0ur":r+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return t(e)?r+(a||s?"\xe1r":"\xe1rum"):r+(a||s?"\xe1r":"\xe1ri")}}a("wd/R").defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},ByF4:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minutt",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0i",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},CjzT:function(e,t,a){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],s=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?a[e.month()]:t[e.month()]:t},monthsRegex:s,monthsShortRegex:s,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(a("wd/R"))},CoRJ:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:6,doy:12}})}()},"D/JM":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},"DKr+":function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s={s:["thodde secondanim","thodde second"],ss:[e+" secondanim",e+" second"],m:["eka mintan","ek minute"],mm:[e+" mintanim",e+" mintam"],h:["eka horan","ek hor"],hh:[e+" horanim",e+" horam"],d:["eka disan","ek dis"],dd:[e+" disanim",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineanim",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsanim",e+" vorsam"]};return t?s[a][0]:s[a][1]}a("wd/R").defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){switch(t){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(e,t){return 12===e&&(e=0),"rati"===t?e<4?e:e+12:"sokalli"===t?e:"donparam"===t?e>12?e:e+12:"sanje"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"rati":e<12?"sokalli":e<16?"donparam":e<20?"sanje":"rati"}})}()},Dkky:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}()},Dmvi:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},DoHr:function(e,t,a){!function(e){"use strict";var t={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};e.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xc7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'\u0131nc\u0131";var n=e%10;return e+(t[n]||t[e%100-n]||t[e>=100?100:null])}},week:{dow:1,doy:7}})}(a("wd/R"))},DxQv:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},Dzi0:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}()},"E+lV":function(e,t,a){!function(e){"use strict";var t={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u0435"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0435","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],yy:["\u0433\u043e\u0434\u0438\u043d\u0430","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,a,n){var s=t.words[n];return 1===n.length?a?s[0]:s[1]:e+" "+t.correctGrammaticalCase(e,s)}};e.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"\u0434\u0430\u043d",dd:t.translate,M:"\u043c\u0435\u0441\u0435\u0446",MM:t.translate,y:"\u0433\u043e\u0434\u0438\u043d\u0443",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(a("wd/R"))},EOgW:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,t,a){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}})}()},Eidh:function(e,t,a){"use strict";a.d(t,"a",function(){return n});var n=function(){function e(){this.shouldShowForRetail=!1}return e.prototype.ngOnInit=function(){},e}()},G0Uy:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}()},H6Ep:function(e,t,a){"use strict";var n=a("mrSG"),s=a("CcnG"),r=a("fR9y"),i=a("T7CS");a("FfxL");var d={},_="undefined"==typeof console||!("warn"in console);function o(e){!Object(s.Y)()||_||e in d||(d[e]=!0,console.warn(e))}var u=a("hjjD"),m=a("gI3B");a.d(t,"a",function(){return l});var l=function(){function e(e,t,a,n,r){this._renderer=t,this._elementRef=a,this.tooltipChange=new s.m,this.containerClass="",this._animation=!0,this._fadeDuration=150,this.tooltipStateChanged=new s.m,this._tooltip=n.createLoader(this._elementRef,e,this._renderer).provide({provide:i.a,useValue:r}),Object.assign(this,r),this.onShown=this._tooltip.onShown,this.onHidden=this._tooltip.onHidden}return Object.defineProperty(e.prototype,"isOpen",{get:function(){return this._tooltip.isShown},set:function(e){e?this.show():this.hide()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"htmlContent",{set:function(e){o("tooltipHtml was deprecated, please use `tooltip` instead"),this.tooltip=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_placement",{set:function(e){o("tooltipPlacement was deprecated, please use `placement` instead"),this.placement=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_isOpen",{get:function(){return o("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen},set:function(e){o("tooltipIsOpen was deprecated, please use `isOpen` instead"),this.isOpen=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_enable",{get:function(){return o("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled},set:function(e){o("tooltipEnable was deprecated, please use `isDisabled` instead"),this.isDisabled=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_appendToBody",{get:function(){return o('tooltipAppendToBody was deprecated, please use `container="body"` instead'),"body"===this.container},set:function(e){o('tooltipAppendToBody was deprecated, please use `container="body"` instead'),this.container=e?"body":this.container},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_popupClass",{set:function(e){o("tooltipClass deprecated")},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_tooltipContext",{set:function(e){o("tooltipContext deprecated")},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_tooltipPopupDelay",{set:function(e){o("tooltipPopupDelay is deprecated, use `delay` instead"),this.delay=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_tooltipTrigger",{get:function(){return o("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers},set:function(e){o("tooltipTrigger was deprecated, please use `triggers` instead"),this.triggers=(e||"").toString()},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var e=this;this._tooltip.listen({triggers:this.triggers,show:function(){return e.show()}}),this.tooltipChange.subscribe(function(t){t||e._tooltip.hide()})},e.prototype.toggle=function(){if(this.isOpen)return this.hide();this.show()},e.prototype.show=function(){var e=this;if(!(this.isOpen||this.isDisabled||this._delayTimeoutId)&&this.tooltip){var t=function(){e._delayTimeoutId&&(e._delayTimeoutId=void 0),e._tooltip.attach(r.a).to(e.container).position({attachment:e.placement}).show({content:e.tooltip,placement:e.placement,containerClass:e.containerClass})},a=function(){e._tooltipCancelShowFn&&e._tooltipCancelShowFn()};if(this.delay){var n=Object(m.a)(this.delay).subscribe(function(){t(),a()});if(this.triggers){var s=Object(u.b)(this.triggers);this._tooltipCancelShowFn=this._renderer.listen(this._elementRef.nativeElement,s[0].close,function(){n.unsubscribe(),a()})}}else t()}},e.prototype.hide=function(){var e=this;this._delayTimeoutId&&(clearTimeout(this._delayTimeoutId),this._delayTimeoutId=void 0),this._tooltip.isShown&&(this._tooltip.instance.classMap.in=!1,setTimeout(function(){e._tooltip.hide()},this._fadeDuration))},e.prototype.ngOnDestroy=function(){this._tooltip.dispose()},Object(n.b)([function(e,t){var a=" __"+t+"Value";Object.defineProperty(e,t,{get:function(){return this[a]},set:function(e){var n=this[a];this[a]=e,n!==e&&this[t+"Change"]&&this[t+"Change"].emit(e)}})},Object(n.d)("design:type",Object)],e.prototype,"tooltip",void 0),e}()},H8ED:function(e,t,a){!function(e){"use strict";function t(e,t,a){var n,s;return"m"===a?t?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===a?t?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(n=+e,s={ss:t?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:t?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:t?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[a].split("_"),n%10==1&&n%100!=11?s[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?s[1]:s[2])}a("wd/R").defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:t,mm:t,h:t,hh:t,d:"\u0434\u0437\u0435\u043d\u044c",dd:t,M:"\u043c\u0435\u0441\u044f\u0446",MM:t,y:"\u0433\u043e\u0434",yy:t},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,t,a){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}})}()},HP3h:function(e,t,a){!function(e){"use strict";var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},a=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},s=function(e){return function(t,s,r,i){var d=a(t),_=n[e][a(t)];return 2===d&&(_=_[s?0:1]),_.replace(/%d/i,t)}},r=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-ly",{months:r,monthsShort:r,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,t,a){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:s("s"),ss:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(a("wd/R"))},IBtZ:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ka",{months:{standalone:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),format:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10e1_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10e1_\u10db\u10d0\u10e0\u10e2\u10e1_\u10d0\u10de\u10e0\u10d8\u10da\u10d8\u10e1_\u10db\u10d0\u10d8\u10e1\u10e1_\u10d8\u10d5\u10dc\u10d8\u10e1\u10e1_\u10d8\u10d5\u10da\u10d8\u10e1\u10e1_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10e1_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10e1_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10e1_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10e1_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10e1".split("_")},monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10ec\u10d4\u10da\u10d8)/.test(e)?e.replace(/\u10d8$/,"\u10e8\u10d8"):e+"\u10e8\u10d8"},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):void 0},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}})}()},"Ivi+":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,t,a){return e<12?"\uc624\uc804":"\uc624\ud6c4"}})}()},JVSJ:function(e,t,a){!function(e){"use strict";function t(e,t,a){var n=e+" ";switch(a){case"ss":return n+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return t?"jedna minuta":"jedne minute";case"mm":return n+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return t?"jedan sat":"jednog sata";case"hh":return n+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return n+(1===e?"dan":"dana");case"MM":return n+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return n+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}a("wd/R").defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},Jg5P:function(e,t,a){"use strict";a.d(t,"a",function(){return i}),a("fR9y"),a("H6Ep");var n=a("T7CS"),s=a("FfxL"),r=a("XD9u"),i=function(){function e(){}return e.forRoot=function(){return{ngModule:e,providers:[n.a,s.a,r.a]}},e}()},JvlW:function(e,t,a){!function(e){"use strict";var t={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function a(e,t,a,n){return t?s(a)[0]:n?s(a)[1]:s(a)[2]}function n(e){return e%10==0||e>10&&e<20}function s(e){return t[e].split("_")}function r(e,t,r,i){var d=e+" ";return 1===e?d+a(0,t,r[0],i):t?d+(n(e)?s(r)[1]:s(r)[0]):i?d+s(r)[1]:d+(n(e)?s(r)[1]:s(r)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,t,a,n){return t?"kelios sekund\u0117s":n?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:r,m:a,mm:r,h:a,hh:r,d:a,dd:r,M:a,MM:r,y:a,yy:r},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(a("wd/R"))},"K/tc":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,t,a){return e<12?a?"vm":"VM":a?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}()},KSF8:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,a){return e<12?a?"sa":"SA":a?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n r\u1ed3i l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}()},KTz0:function(e,t,a){!function(e){"use strict";var t={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,a,n){var s=t.words[n];return 1===n.length?a?s[0]:s[1]:e+" "+t.correctGrammaticalCase(e,s)}};e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mjesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(a("wd/R"))},LLTo:function(e,t,a){"use strict";a.d(t,"a",function(){return n});var n=function(){return function(){}}()},Loxo:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}})}()},OIYi:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}()},Oaa7:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},Ob0Z:function(e,t,a){!function(e){"use strict";var t={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},a={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function n(e,t,a,n){var s="";if(t)switch(a){case"s":s="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":s="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":s="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":s="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":s="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":s="%d \u0924\u093e\u0938";break;case"d":s="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":s="%d \u0926\u093f\u0935\u0938";break;case"M":s="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":s="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":s="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":s="%d \u0935\u0930\u094d\u0937\u0947"}else switch(a){case"s":s="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":s="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":s="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":s="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":s="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":s="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":s="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":s="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":s="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":s="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":s="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":s="%d \u0935\u0930\u094d\u0937\u093e\u0902"}return s.replace(/%d/i,e)}e.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0930\u093e\u0924\u094d\u0930\u0940|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0930\u093e\u0924\u094d\u0930\u0940"===t?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940"===t?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===t?e>=10?e:e+12:"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"\u0930\u093e\u0924\u094d\u0930\u0940":e<10?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}})}(a("wd/R"))},OjkT:function(e,t,a){!function(e){"use strict";var t={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},a={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};e.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===t?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===t?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===t?e>=10?e:e+12:"\u0938\u093e\u0901\u091d"===t?e+12:void 0},meridiem:function(e,t,a){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}})}(a("wd/R"))},Oxv6:function(e,t,a){!function(e){"use strict";var t={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};e.defineLocale("tg",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u041f\u0430\u0433\u043e\u04b3 \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0448\u0430\u0431"===t?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===t?e:"\u0440\u04ef\u0437"===t?e>=11?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(a("wd/R"))},PA2r:function(e,t,a){!function(e){"use strict";var t="leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),a="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_");function n(e){return e>1&&e<5&&1!=~~(e/10)}function s(e,t,a,s){var r=e+" ";switch(a){case"s":return t||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return t||s?r+(n(e)?"sekundy":"sekund"):r+"sekundami";case"m":return t?"minuta":s?"minutu":"minutou";case"mm":return t||s?r+(n(e)?"minuty":"minut"):r+"minutami";case"h":return t?"hodina":s?"hodinu":"hodinou";case"hh":return t||s?r+(n(e)?"hodiny":"hodin"):r+"hodinami";case"d":return t||s?"den":"dnem";case"dd":return t||s?r+(n(e)?"dny":"dn\xed"):r+"dny";case"M":return t||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return t||s?r+(n(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):r+"m\u011bs\xedci";case"y":return t||s?"rok":"rokem";case"yy":return t||s?r+(n(e)?"roky":"let"):r+"lety"}}e.defineLocale("cs",{months:t,monthsShort:a,monthsParse:function(e,t){var a,n=[];for(a=0;a<12;a++)n[a]=new RegExp("^"+e[a]+"$|^"+t[a]+"$","i");return n}(t,a),shortMonthsParse:function(e){var t,a=[];for(t=0;t<12;t++)a[t]=new RegExp("^"+e[t]+"$","i");return a}(a),longMonthsParse:function(e){var t,a=[];for(t=0;t<12;t++)a[t]=new RegExp("^"+e[t]+"$","i");return a}(t),weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(a("wd/R"))},PeUW:function(e,t,a){!function(e){"use strict";var t={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},a={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};e.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,t,a){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,t){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===t?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===t||"\u0b95\u0bbe\u0bb2\u0bc8"===t?e:"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(a("wd/R"))},PpIw:function(e,t,a){!function(e){"use strict";var t={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},a={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};e.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===t?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===t?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===t?e>=10?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}})}(a("wd/R"))},Qj4J:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}})}()},RAwQ:function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return t?s[a][0]:s[a][1]}function n(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var t=e%10;return n(0===t?e/10:t)}if(e<1e4){for(;e>=10;)e/=10;return n(e)}return n(e/=1e3)}a("wd/R").defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return n(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return n(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d M\xe9int",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},RChO:function(e,t,a){"use strict";a.d(t,"a",function(){return o});var n=a("CcnG"),s=a("fR9y"),r=a("T7CS"),i=n.ob({encapsulation:0,styles:[".tooltip[_nghost-%COMP%] {\n      display: block;\n    }\n    .bs-tooltip-top[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-tooltip-bottom[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      left: 50%;\n      margin-left: -6px;\n    }\n    .bs-tooltip-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-tooltip-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      top: 50%;\n      margin-top: -6px;\n    }"],data:{}});function d(e){return n.Kb(2,[(e()(),n.qb(0,0,null,null,0,"div",[["class","tooltip-arrow arrow"]],null,null,null,null,null)),(e()(),n.qb(1,0,null,null,1,"div",[["class","tooltip-inner"]],null,null,null,null,null)),n.zb(null,0)],null,null)}function _(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,1,"bs-tooltip-container",[["role","tooltip"]],[[8,"className",0],[2,"show",null]],null,null,d,i)),n.pb(1,4243456,null,0,s.a,[r.a],null,null)],null,function(e,t){e(t,0,0,"tooltip in tooltip-"+n.Ab(t,1).placement+" bs-tooltip-"+n.Ab(t,1).placement+" "+n.Ab(t,1).placement+" "+n.Ab(t,1).containerClass,!n.Ab(t,1).isBs3)})}var o=n.mb("bs-tooltip-container",s.a,_,{},{},["*"])},RnhZ:function(e,t,a){var n={"./af":"K/tc","./af.js":"K/tc","./ar":"jnO4","./ar-dz":"o1bE","./ar-dz.js":"o1bE","./ar-kw":"Qj4J","./ar-kw.js":"Qj4J","./ar-ly":"HP3h","./ar-ly.js":"HP3h","./ar-ma":"CoRJ","./ar-ma.js":"CoRJ","./ar-sa":"gjCT","./ar-sa.js":"gjCT","./ar-tn":"bYM6","./ar-tn.js":"bYM6","./ar.js":"jnO4","./az":"SFxW","./az.js":"SFxW","./be":"H8ED","./be.js":"H8ED","./bg":"hKrs","./bg.js":"hKrs","./bm":"p/rL","./bm.js":"p/rL","./bn":"kEOa","./bn.js":"kEOa","./bo":"0mo+","./bo.js":"0mo+","./br":"aIdf","./br.js":"aIdf","./bs":"JVSJ","./bs.js":"JVSJ","./ca":"1xZ4","./ca.js":"1xZ4","./cs":"PA2r","./cs.js":"PA2r","./cv":"A+xa","./cv.js":"A+xa","./cy":"l5ep","./cy.js":"l5ep","./da":"DxQv","./da.js":"DxQv","./de":"tGlX","./de-at":"s+uk","./de-at.js":"s+uk","./de-ch":"u3GI","./de-ch.js":"u3GI","./de.js":"tGlX","./dv":"WYrj","./dv.js":"WYrj","./el":"jUeY","./el.js":"jUeY","./en-au":"Dmvi","./en-au.js":"Dmvi","./en-ca":"OIYi","./en-ca.js":"OIYi","./en-gb":"Oaa7","./en-gb.js":"Oaa7","./en-ie":"4dOw","./en-ie.js":"4dOw","./en-il":"czMo","./en-il.js":"czMo","./en-nz":"b1Dy","./en-nz.js":"b1Dy","./eo":"Zduo","./eo.js":"Zduo","./es":"iYuL","./es-do":"CjzT","./es-do.js":"CjzT","./es-us":"Vclq","./es-us.js":"Vclq","./es.js":"iYuL","./et":"7BjC","./et.js":"7BjC","./eu":"D/JM","./eu.js":"D/JM","./fa":"jfSC","./fa.js":"jfSC","./fi":"gekB","./fi.js":"gekB","./fo":"ByF4","./fo.js":"ByF4","./fr":"nyYc","./fr-ca":"2fjn","./fr-ca.js":"2fjn","./fr-ch":"Dkky","./fr-ch.js":"Dkky","./fr.js":"nyYc","./fy":"cRix","./fy.js":"cRix","./gd":"9rRi","./gd.js":"9rRi","./gl":"iEDd","./gl.js":"iEDd","./gom-latn":"DKr+","./gom-latn.js":"DKr+","./gu":"4MV3","./gu.js":"4MV3","./he":"x6pH","./he.js":"x6pH","./hi":"3E1r","./hi.js":"3E1r","./hr":"S6ln","./hr.js":"S6ln","./hu":"WxRl","./hu.js":"WxRl","./hy-am":"1rYy","./hy-am.js":"1rYy","./id":"UDhR","./id.js":"UDhR","./is":"BVg3","./is.js":"BVg3","./it":"bpih","./it.js":"bpih","./ja":"B55N","./ja.js":"B55N","./jv":"tUCv","./jv.js":"tUCv","./ka":"IBtZ","./ka.js":"IBtZ","./kk":"bXm7","./kk.js":"bXm7","./km":"6B0Y","./km.js":"6B0Y","./kn":"PpIw","./kn.js":"PpIw","./ko":"Ivi+","./ko.js":"Ivi+","./ky":"lgnt","./ky.js":"lgnt","./lb":"RAwQ","./lb.js":"RAwQ","./lo":"sp3z","./lo.js":"sp3z","./lt":"JvlW","./lt.js":"JvlW","./lv":"uXwI","./lv.js":"uXwI","./me":"KTz0","./me.js":"KTz0","./mi":"aIsn","./mi.js":"aIsn","./mk":"aQkU","./mk.js":"aQkU","./ml":"AvvY","./ml.js":"AvvY","./mn":"lYtQ","./mn.js":"lYtQ","./mr":"Ob0Z","./mr.js":"Ob0Z","./ms":"6+QB","./ms-my":"ZAMP","./ms-my.js":"ZAMP","./ms.js":"6+QB","./mt":"G0Uy","./mt.js":"G0Uy","./my":"honF","./my.js":"honF","./nb":"bOMt","./nb.js":"bOMt","./ne":"OjkT","./ne.js":"OjkT","./nl":"+s0g","./nl-be":"2ykv","./nl-be.js":"2ykv","./nl.js":"+s0g","./nn":"uEye","./nn.js":"uEye","./pa-in":"8/+R","./pa-in.js":"8/+R","./pl":"jVdC","./pl.js":"jVdC","./pt":"8mBD","./pt-br":"0tRk","./pt-br.js":"0tRk","./pt.js":"8mBD","./ro":"lyxo","./ro.js":"lyxo","./ru":"lXzo","./ru.js":"lXzo","./sd":"Z4QM","./sd.js":"Z4QM","./se":"//9w","./se.js":"//9w","./si":"7aV9","./si.js":"7aV9","./sk":"e+ae","./sk.js":"e+ae","./sl":"gVVK","./sl.js":"gVVK","./sq":"yPMs","./sq.js":"yPMs","./sr":"zx6S","./sr-cyrl":"E+lV","./sr-cyrl.js":"E+lV","./sr.js":"zx6S","./ss":"Ur1D","./ss.js":"Ur1D","./sv":"X709","./sv.js":"X709","./sw":"dNwA","./sw.js":"dNwA","./ta":"PeUW","./ta.js":"PeUW","./te":"XLvN","./te.js":"XLvN","./tet":"V2x9","./tet.js":"V2x9","./tg":"Oxv6","./tg.js":"Oxv6","./th":"EOgW","./th.js":"EOgW","./tl-ph":"Dzi0","./tl-ph.js":"Dzi0","./tlh":"z3Vd","./tlh.js":"z3Vd","./tr":"DoHr","./tr.js":"DoHr","./tzl":"z1FC","./tzl.js":"z1FC","./tzm":"wQk9","./tzm-latn":"tT3J","./tzm-latn.js":"tT3J","./tzm.js":"wQk9","./ug-cn":"YRex","./ug-cn.js":"YRex","./uk":"raLr","./uk.js":"raLr","./ur":"UpQW","./ur.js":"UpQW","./uz":"Loxo","./uz-latn":"AQ68","./uz-latn.js":"AQ68","./uz.js":"Loxo","./vi":"KSF8","./vi.js":"KSF8","./x-pseudo":"/X5v","./x-pseudo.js":"/X5v","./yo":"fzPg","./yo.js":"fzPg","./zh-cn":"XDpg","./zh-cn.js":"XDpg","./zh-hk":"SatO","./zh-hk.js":"SatO","./zh-tw":"kOpN","./zh-tw.js":"kOpN"};function s(e){var t=r(e);return a(t)}function r(e){var t=n[e];if(!(t+1)){var a=new Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}return t}s.keys=function(){return Object.keys(n)},s.resolve=r,e.exports=s,s.id="RnhZ"},S6ln:function(e,t,a){!function(e){"use strict";function t(e,t,a){var n=e+" ";switch(a){case"ss":return n+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return t?"jedna minuta":"jedne minute";case"mm":return n+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return t?"jedan sat":"jednog sata";case"hh":return n+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return n+(1===e?"dan":"dana");case"MM":return n+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return n+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}a("wd/R").defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},SFxW:function(e,t,a){!function(e){"use strict";var t={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"birne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,t,a){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(t[a]||t[e%100-a]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(a("wd/R"))},SatO:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u51cc\u6668"===t||"\u65e9\u4e0a"===t||"\u4e0a\u5348"===t?e:"\u4e2d\u5348"===t?e>=11?e:e+12:"\u4e0b\u5348"===t||"\u665a\u4e0a"===t?e+12:void 0},meridiem:function(e,t,a){var n=100*e+t;return n<600?"\u51cc\u6668":n<900?"\u65e9\u4e0a":n<1130?"\u4e0a\u5348":n<1230?"\u4e2d\u5348":n<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}()},T7CS:function(e,t,a){"use strict";a.d(t,"a",function(){return n});var n=function(){return function(){this.placement="top",this.triggers="hover focus"}}()},UDhR:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"siang"===t?e>=11?e:e+12:"sore"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,a){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}()},UhSo:function(e,t,a){"use strict";a.d(t,"a",function(){return n});var n=function(){function e(){}return e.prototype.transform=function(e,t,a){return e&&e.length?t?(t=t.toLowerCase(),e.filter(function(n){return a?Array.isArray(a)?a.map(function(e){return n[e].toString().toLowerCase().includes(t)}).includes(!0):n[a].toString().toLowerCase().includes(t):"object"==typeof e[0]?JSON.stringify(Object.values(n)).toLowerCase().includes(t):n.toLowerCase().includes(t)})):e:[]},e}()},UpQW:function(e,t,a){!function(e){"use strict";var t=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],n=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];a("wd/R").defineLocale("ur",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,t,a){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}()},Ur1D:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,a){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,t){return 12===e&&(e=0),"ekuseni"===t?e:"emini"===t?e>=11?e:e+12:"entsambama"===t||"ebusuku"===t?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}()},V2x9:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},Vclq:function(e,t,a){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?a[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"MMMM [de] D [de] YYYY",LLL:"MMMM [de] D [de] YYYY h:mm A",LLLL:"dddd, MMMM [de] D [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}})}(a("wd/R"))},Vl9L:function(e,t,a){"use strict";a.d(t,"a",function(){return n});var n=function(){return function(){}}()},WYrj:function(e,t,a){!function(e){"use strict";var t=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],n=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];a("wd/R").defineLocale("dv",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,t,a){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}})}()},WxRl:function(e,t,a){!function(e){"use strict";var t="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function a(e,t,a,n){var s=e;switch(a){case"s":return n||t?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return s+(n||t)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(n||t?" perc":" perce");case"mm":return s+(n||t?" perc":" perce");case"h":return"egy"+(n||t?" \xf3ra":" \xf3r\xe1ja");case"hh":return s+(n||t?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(n||t?" nap":" napja");case"dd":return s+(n||t?" nap":" napja");case"M":return"egy"+(n||t?" h\xf3nap":" h\xf3napja");case"MM":return s+(n||t?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(n||t?" \xe9v":" \xe9ve");case"yy":return s+(n||t?" \xe9v":" \xe9ve")}return""}function n(e){return(e?"":"[m\xfalt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan_feb_m\xe1rc_\xe1pr_m\xe1j_j\xfan_j\xfal_aug_szept_okt_nov_dec".split("_"),weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,t,a){return e<12?!0===a?"de":"DE":!0===a?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return n.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return n.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(a("wd/R"))},X709:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"e":1===t?"a":2===t?"a":"e")},week:{dow:1,doy:4}})}()},XDpg:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u51cc\u6668"===t||"\u65e9\u4e0a"===t||"\u4e0a\u5348"===t?e:"\u4e0b\u5348"===t||"\u665a\u4e0a"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,a){var n=100*e+t;return n<600?"\u51cc\u6668":n<900?"\u65e9\u4e0a":n<1130?"\u4e0a\u5348":n<1230?"\u4e2d\u5348":n<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u5185",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}})}()},XLvN:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c42\u0c32\u0c46\u0c56_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c42\u0c32\u0c46\u0c56_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===t?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===t?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===t?e>=10?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===t?e+12:void 0},meridiem:function(e,t,a){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}})}()},YRex:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===t||"\u0633\u06d5\u06be\u06d5\u0631"===t||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===t?e:"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"===t||"\u0643\u06d5\u0686"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,a){var n=100*e+t;return n<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":n<900?"\u0633\u06d5\u06be\u06d5\u0631":n<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":n<1230?"\u0686\u06c8\u0634":n<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}})}()},Z4QM:function(e,t,a){!function(e){"use strict";var t=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],n=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];a("wd/R").defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,t,a){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}()},ZAMP:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,a){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}()},Zduo:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_a\u016dg_sep_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,t,a){return e>11?a?"p.t.m.":"P.T.M.":a?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}()},aIdf:function(e,t,a){!function(e){"use strict";function t(e,t,a){return e+" "+function(e,t){return 2===t?function(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[a],e)}a("wd/R").defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:function(e){switch(function e(t){return t>9?e(t%10):t}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4}})}()},aIsn:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}()},aQkU:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u043e\u0441\u043b\u0435 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var t=e%10,a=e%100;return 0===e?e+"-\u0435\u0432":0===a?e+"-\u0435\u043d":a>10&&a<20?e+"-\u0442\u0438":1===t?e+"-\u0432\u0438":2===t?e+"-\u0440\u0438":7===t||8===t?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}})}()},b1Dy:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},bOMt:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},bXm7:function(e,t,a){!function(e){"use strict";var t={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};e.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(a("wd/R"))},bYM6:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}})}()},bpih:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}()},cRix:function(e,t,a){!function(e){"use strict";var t="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),a="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?a[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(a("wd/R"))},chmc:function(e,t,a){"use strict";a.d(t,"a",function(){return n});var n=function(){return function(){this.placement="top",this.triggers="click",this.outsideClick=!1}}()},czMo:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}()},dNwA:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}()},"e+ae":function(e,t,a){!function(e){"use strict";var t="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),a="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function n(e){return e>1&&e<5}function s(e,t,a,s){var r=e+" ";switch(a){case"s":return t||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return t||s?r+(n(e)?"sekundy":"sek\xfand"):r+"sekundami";case"m":return t?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return t||s?r+(n(e)?"min\xfaty":"min\xfat"):r+"min\xfatami";case"h":return t?"hodina":s?"hodinu":"hodinou";case"hh":return t||s?r+(n(e)?"hodiny":"hod\xedn"):r+"hodinami";case"d":return t||s?"de\u0148":"d\u0148om";case"dd":return t||s?r+(n(e)?"dni":"dn\xed"):r+"d\u0148ami";case"M":return t||s?"mesiac":"mesiacom";case"MM":return t||s?r+(n(e)?"mesiace":"mesiacov"):r+"mesiacmi";case"y":return t||s?"rok":"rokom";case"yy":return t||s?r+(n(e)?"roky":"rokov"):r+"rokmi"}}e.defineLocale("sk",{months:t,monthsShort:a,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(a("wd/R"))},fR9y:function(e,t,a){"use strict";a.d(t,"a",function(){return s}),a("T7CS");var n=a("yZXx"),s=function(){function e(e){Object.assign(this,e)}return Object.defineProperty(e.prototype,"isBs3",{get:function(){return Object(n.a)()},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewInit=function(){this.classMap={in:!1,fade:!1},this.classMap[this.placement]=!0,this.classMap["tooltip-"+this.placement]=!0,this.classMap.in=!0,this.animation&&(this.classMap.fade=!0),this.containerClass&&(this.classMap[this.containerClass]=!0)},e}()},fzPg:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}})}()},gVVK:function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s=e+" ";switch(a){case"s":return t||n?"nekaj sekund":"nekaj sekundami";case"ss":return s+(1===e?t?"sekundo":"sekundi":2===e?t||n?"sekundi":"sekundah":e<5?t||n?"sekunde":"sekundah":"sekund");case"m":return t?"ena minuta":"eno minuto";case"mm":return s+(1===e?t?"minuta":"minuto":2===e?t||n?"minuti":"minutama":e<5?t||n?"minute":"minutami":t||n?"minut":"minutami");case"h":return t?"ena ura":"eno uro";case"hh":return s+(1===e?t?"ura":"uro":2===e?t||n?"uri":"urama":e<5?t||n?"ure":"urami":t||n?"ur":"urami");case"d":return t||n?"en dan":"enim dnem";case"dd":return s+(1===e?t||n?"dan":"dnem":2===e?t||n?"dni":"dnevoma":t||n?"dni":"dnevi");case"M":return t||n?"en mesec":"enim mesecem";case"MM":return s+(1===e?t||n?"mesec":"mesecem":2===e?t||n?"meseca":"mesecema":e<5?t||n?"mesece":"meseci":t||n?"mesecev":"meseci");case"y":return t||n?"eno leto":"enim letom";case"yy":return s+(1===e?t||n?"leto":"letom":2===e?t||n?"leti":"letoma":e<5?t||n?"leta":"leti":t||n?"let":"leti")}}a("wd/R").defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},gekB:function(e,t,a){!function(e){"use strict";var t="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),a=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",t[7],t[8],t[9]];function n(e,n,s,r){var i="";switch(s){case"s":return r?"muutaman sekunnin":"muutama sekunti";case"ss":return r?"sekunnin":"sekuntia";case"m":return r?"minuutin":"minuutti";case"mm":i=r?"minuutin":"minuuttia";break;case"h":return r?"tunnin":"tunti";case"hh":i=r?"tunnin":"tuntia";break;case"d":return r?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":i=r?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return r?"kuukauden":"kuukausi";case"MM":i=r?"kuukauden":"kuukautta";break;case"y":return r?"vuoden":"vuosi";case"yy":i=r?"vuoden":"vuotta"}return function(e,n){return e<10?n?a[e]:t[e]:e}(e,r)+" "+i}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(a("wd/R"))},gjCT:function(e,t,a){!function(e){"use strict";var t={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},a={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};e.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,t,a){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return a[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}})}(a("wd/R"))},hKrs:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0440_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0412 \u0438\u0437\u043c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u0412 \u0438\u0437\u043c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u043d\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var t=e%10,a=e%100;return 0===e?e+"-\u0435\u0432":0===a?e+"-\u0435\u043d":a>10&&a<20?e+"-\u0442\u0438":1===t?e+"-\u0432\u0438":2===t?e+"-\u0440\u0438":7===t||8===t?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}})}()},honF:function(e,t,a){!function(e){"use strict";var t={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},a={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};e.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(a("wd/R"))},iEDd:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}()},iYuL:function(e,t,a){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),a="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],s=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?a[e.month()]:t[e.month()]:t},monthsRegex:s,monthsShortRegex:s,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(a("wd/R"))},jUeY:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,t){return e?"string"==typeof t&&/D/.test(t.substring(0,t.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,t,a){return e>11?a?"\u03bc\u03bc":"\u039c\u039c":a?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,t){var a,n=this._calendarEl[e],s=t&&t.hours();return((a=n)instanceof Function||"[object Function]"===Object.prototype.toString.call(a))&&(n=n.apply(t)),n.replace("{}",s%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}})}()},jVdC:function(e,t,a){!function(e){"use strict";var t="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),a="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_");function n(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function s(e,t,a){var s=e+" ";switch(a){case"ss":return s+(n(e)?"sekundy":"sekund");case"m":return t?"minuta":"minut\u0119";case"mm":return s+(n(e)?"minuty":"minut");case"h":return t?"godzina":"godzin\u0119";case"hh":return s+(n(e)?"godziny":"godzin");case"MM":return s+(n(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(n(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,n){return e?""===n?"("+a[e.month()]+"|"+t[e.month()]+")":/D MMMM/.test(n)?a[e.month()]:t[e.month()]:t},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:s,m:s,mm:s,h:s,hh:s,d:"1 dzie\u0144",dd:"%d dni",M:"miesi\u0105c",MM:s,y:"rok",yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(a("wd/R"))},jfSC:function(e,t,a){!function(e){"use strict";var t={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},a={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};e.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,t,a){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"\u062b\u0627\u0646\u06cc\u0647 d%",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return a[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}})}(a("wd/R"))},jnO4:function(e,t,a){!function(e){"use strict";var t={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},a={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},s={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},r=function(e){return function(t,a,r,i){var d=n(t),_=s[e][n(t)];return 2===d&&(_=_[a?0:1]),_.replace(/%d/i,t)}},i=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar",{months:i,monthsShort:i,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,t,a){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return a[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(a("wd/R"))},kEOa:function(e,t,a){!function(e){"use strict";var t={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},a={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};e.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09c0_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2_\u0986\u0997_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u0983_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return a[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===t&&e>=4||"\u09a6\u09c1\u09aa\u09c1\u09b0"===t&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===t?e+12:e},meridiem:function(e,t,a){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}})}(a("wd/R"))},kOpN:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,t){return 12===e&&(e=0),"\u51cc\u6668"===t||"\u65e9\u4e0a"===t||"\u4e0a\u5348"===t?e:"\u4e2d\u5348"===t?e>=11?e:e+12:"\u4e0b\u5348"===t||"\u665a\u4e0a"===t?e+12:void 0},meridiem:function(e,t,a){var n=100*e+t;return n<600?"\u51cc\u6668":n<900?"\u65e9\u4e0a":n<1130?"\u4e0a\u5348":n<1230?"\u4e2d\u5348":n<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}()},l5ep:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t="";return e>20?t=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(t=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+t},week:{dow:1,doy:4}})}()},lXzo:function(e,t,a){!function(e){"use strict";function t(e,t,a){var n,s;return"m"===a?t?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(n=+e,s={ss:t?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:t?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[a].split("_"),n%10==1&&n%100!=11?s[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?s[1]:s[2])}var n=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];a("wd/R").defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?\] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:t,m:t,mm:t,h:"\u0447\u0430\u0441",hh:t,d:"\u0434\u0435\u043d\u044c",dd:t,M:"\u043c\u0435\u0441\u044f\u0446",MM:t,y:"\u0433\u043e\u0434",yy:t},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,t,a){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}})}()},lYtQ:function(e,t,a){!function(e){"use strict";function t(e,t,a,n){switch(a){case"s":return t?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(t?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(t?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(t?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(t?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(t?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(t?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}a("wd/R").defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,t,a){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}})}()},lgnt:function(e,t,a){!function(e){"use strict";var t={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};e.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u0435 \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(a("wd/R"))},lyxo:function(e,t,a){!function(e){"use strict";function t(e,t,a){var n=" ";return(e%100>=20||e>=100&&e%100==0)&&(n=" de "),e+n+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[a]}a("wd/R").defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:t,m:"un minut",mm:t,h:"o or\u0103",hh:t,d:"o zi",dd:t,M:"o lun\u0103",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})}()},mGS5:function(e,t,a){"use strict";a.d(t,"a",function(){return m});var n=a("CcnG"),s=a("Ip0R"),r=a("6dTq"),i=a("chmc"),d=n.ob({encapsulation:0,styles:[".bs-popover-top[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-popover-bottom[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      left: 50%;\n      margin-left: -8px;\n    }\n    .bs-popover-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-popover-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      top: 50%;\n      margin-top: -8px;\n    }"],data:{}});function _(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,1,"h3",[["class","popover-title popover-header"]],null,null,null,null,null)),(e()(),n.Ib(1,null,["",""]))],null,function(e,t){e(t,1,0,t.component.title)})}function o(e){return n.Kb(2,[(e()(),n.qb(0,0,null,null,0,"div",[["class","popover-arrow arrow"]],null,null,null,null,null)),(e()(),n.hb(16777216,null,null,1,null,_)),n.pb(2,16384,null,0,s.o,[n.P,n.M],{ngIf:[0,"ngIf"]},null),(e()(),n.qb(3,0,null,null,1,"div",[["class","popover-content popover-body"]],null,null,null,null,null)),n.zb(null,0)],function(e,t){e(t,2,0,t.component.title)},null)}function u(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,1,"popover-container",[["role","tooltip"],["style","display:block;"]],[[8,"className",0],[2,"show",null]],null,null,o,d)),n.pb(1,49152,null,0,r.a,[i.a],null,null)],null,function(e,t){e(t,0,0,"popover in popover-"+n.Ab(t,1).placement+" bs-popover-"+n.Ab(t,1).placement+" "+n.Ab(t,1).placement+" "+n.Ab(t,1).containerClass,!n.Ab(t,1).isBs3)})}var m=n.mb("popover-container",r.a,u,{placement:"placement",title:"title"},{},["*"])},nQCY:function(e,t,a){"use strict";a.d(t,"a",function(){return r}),a.d(t,"b",function(){return i});var n=a("CcnG"),s=a("Ip0R"),r=(a("5SxG"),n.ob({encapsulation:2,styles:[],data:{}}));function i(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,2,"button",[["class","delos-float-action"],["type","button"]],[[8,"id",0],[8,"disabled",0]],[[null,"click"]],function(e,t,a){var n=!0;return"click"===t&&(n=!1!==e.component.customFn()&&n),n},null,null)),n.pb(1,278528,null,0,s.m,[n.s,n.t,n.k,n.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),n.qb(2,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],function(e,t){e(t,1,0,"delos-float-action",t.component.floatBtn.className)},function(e,t){var a=t.component;e(t,0,0,n.sb(1,"",a.floatBtn.className,"-btn"),a.disableFloatBtn),e(t,2,0,n.sb(1,"glyphicon glyphicon-",a.floatBtn.icon,""))})}},nyYc:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}()},o1bE:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("ar-dz",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u0623\u062d_\u0625\u062b_\u062b\u0644\u0627_\u0623\u0631_\u062e\u0645_\u062c\u0645_\u0633\u0628".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:4}})}()},"p/rL":function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}()},rSzr:function(e,t,a){"use strict";a.d(t,"a",function(){return n});var n=function(){return function(){}}()},raLr:function(e,t,a){!function(e){"use strict";function t(e,t,a){var n,s;return"m"===a?t?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===a?t?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(n=+e,s={ss:t?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:t?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:t?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[a].split("_"),n%10==1&&n%100!=11?s[0]:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?s[1]:s[2])}function n(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}a("wd/R").defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,t){var a={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return e?a[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(t)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(t)?"genitive":"nominative"][e.day()]:a.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:n("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:n("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:n("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:n("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return n("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:t,m:t,mm:t,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:t,d:"\u0434\u0435\u043d\u044c",dd:t,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:t,y:"\u0440\u0456\u043a",yy:t},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,t,a){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}})}()},"s+uk":function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?s[a][0]:s[a][1]}a("wd/R").defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},sp3z:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,t,a){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}})}()},tGlX:function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?s[a][0]:s[a][1]}a("wd/R").defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},tT3J:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}()},tUCv:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,t){return 12===e&&(e=0),"enjing"===t?e:"siyang"===t?e>=11?e:e+12:"sonten"===t||"ndalu"===t?e+12:void 0},meridiem:function(e,t,a){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}()},tl7y:function(e,t,a){"use strict";a.d(t,"a",function(){return i}),a.d(t,"b",function(){return o});var n=a("CcnG"),s=a("xR9I"),r=a("Sxbm"),i=(a("Eidh"),n.ob({encapsulation:2,styles:[],data:{}}));function d(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,1,"div",[["class","dataTables_filter"]],null,null,null,null,null)),n.zb(null,0)],null,null)}function _(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,1,"div",[["class","col-md-5 hint-text displayed-entires"]],null,null,null,null,null)),n.zb(null,1)],null,null)}function o(e){return n.Kb(0,[(e()(),n.qb(0,0,null,null,7,"div",[["class","row filter-row"]],null,null,null,null,null)),(e()(),n.qb(1,0,null,null,2,"div",[["class","col-md-4"]],null,null,null,null,null)),(e()(),n.hb(16777216,null,null,1,null,d)),n.pb(3,212992,null,0,s.a,[n.M,n.P,r.a],{renderTemplate:[0,"renderTemplate"]},null),(e()(),n.hb(16777216,null,null,1,null,_)),n.pb(5,212992,null,0,s.a,[n.M,n.P,r.a],{renderTemplate:[0,"renderTemplate"]},null),(e()(),n.qb(6,0,null,null,1,"div",[["class","col-xs-6 col-md-3 text-right pull-right"]],null,null,null,null,null)),n.zb(null,2)],function(e,t){var a=t.component;e(t,3,0,a.shouldShowForRetail),e(t,5,0,a.shouldShowForRetail)},null)}},u3GI:function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?s[a][0]:s[a][1]}a("wd/R").defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},uEye:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_m\xe5n_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},uXwI:function(e,t,a){!function(e){"use strict";var t={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function a(e,t,a){return a?t%10==1&&t%100!=11?e[2]:e[3]:t%10==1&&t%100!=11?e[0]:e[1]}function n(e,n,s){return e+" "+a(t[s],e,n)}function s(e,n,s){return a(t[s],e,n)}e.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,t){return t?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:n,m:s,mm:n,h:s,hh:n,d:s,dd:n,M:s,MM:n,y:s,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(a("wd/R"))},wQk9:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}})}()},"wd/R":function(e,t,a){(function(e){e.exports=function(){"use strict";var t,n;function s(){return t.apply(null,arguments)}function r(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function d(e){return void 0===e}function _(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function o(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,t){var a,n=[];for(a=0;a<e.length;++a)n.push(t(e[a],a));return n}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e,t){for(var a in t)m(t,a)&&(e[a]=t[a]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function c(e,t,a,n){return Ht(e,t,a,n,!0).utc()}function h(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function M(e){if(null==e._isValid){var t=h(e),a=n.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&a);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function L(e){var t=c(NaN);return null!=e?l(h(t),e):h(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),a=t.length>>>0,n=0;n<a;n++)if(n in t&&e.call(this,t[n],n,t))return!0;return!1};var Y=s.momentProperties=[];function y(e,t){var a,n,s;if(d(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),d(t._i)||(e._i=t._i),d(t._f)||(e._f=t._f),d(t._l)||(e._l=t._l),d(t._strict)||(e._strict=t._strict),d(t._tzm)||(e._tzm=t._tzm),d(t._isUTC)||(e._isUTC=t._isUTC),d(t._offset)||(e._offset=t._offset),d(t._pf)||(e._pf=h(t)),d(t._locale)||(e._locale=t._locale),Y.length>0)for(a=0;a<Y.length;a++)d(s=t[n=Y[a]])||(e[n]=s);return e}var f=!1;function p(e){y(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===f&&(f=!0,s.updateOffset(this),f=!1)}function k(e){return e instanceof p||null!=e&&null!=e._isAMomentObject}function D(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function w(e){var t=+e,a=0;return 0!==t&&isFinite(t)&&(a=D(t)),a}function T(e,t,a){var n,s=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),i=0;for(n=0;n<s;n++)(a&&e[n]!==t[n]||!a&&w(e[n])!==w(t[n]))&&i++;return i+r}function g(e){!1===s.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function v(e,t){var a=!0;return l(function(){if(null!=s.deprecationHandler&&s.deprecationHandler(null,e),a){for(var n,r=[],i=0;i<arguments.length;i++){if(n="","object"==typeof arguments[i]){for(var d in n+="\n["+i+"] ",arguments[0])n+=d+": "+arguments[0][d]+", ";n=n.slice(0,-2)}else n=arguments[i];r.push(n)}g(e+"\nArguments: "+Array.prototype.slice.call(r).join("")+"\n"+(new Error).stack),a=!1}return t.apply(this,arguments)},t)}var b,S={};function H(e,t){null!=s.deprecationHandler&&s.deprecationHandler(e,t),S[e]||(g(t),S[e]=!0)}function j(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function x(e,t){var a,n=l({},e);for(a in t)m(t,a)&&(i(e[a])&&i(t[a])?(n[a]={},l(n[a],e[a]),l(n[a],t[a])):null!=t[a]?n[a]=t[a]:delete n[a]);for(a in e)m(e,a)&&!m(t,a)&&i(e[a])&&(n[a]=l({},n[a]));return n}function O(e){null!=e&&this.set(e)}s.suppressDeprecationWarnings=!1,s.deprecationHandler=null,b=Object.keys?Object.keys:function(e){var t,a=[];for(t in e)m(e,t)&&a.push(t);return a};var P={};function W(e,t){var a=e.toLowerCase();P[a]=P[a+"s"]=P[t]=e}function E(e){return"string"==typeof e?P[e]||P[e.toLowerCase()]:void 0}function A(e){var t,a,n={};for(a in e)m(e,a)&&(t=E(a))&&(n[t]=e[a]);return n}var F={};function R(e,t){F[e]=t}function z(e,t,a){var n=""+Math.abs(e);return(e>=0?a?"+":"":"-")+Math.pow(10,Math.max(0,t-n.length)).toString().substr(1)+n}var C=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,J=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,I={},N={};function U(e,t,a,n){var s=n;"string"==typeof n&&(s=function(){return this[n]()}),e&&(N[e]=s),t&&(N[t[0]]=function(){return z(s.apply(this,arguments),t[1],t[2])}),a&&(N[a]=function(){return this.localeData().ordinal(s.apply(this,arguments),e)})}function G(e,t){return e.isValid()?(t=V(t,e.localeData()),I[t]=I[t]||function(e){var t,a,n,s=e.match(C);for(t=0,a=s.length;t<a;t++)s[t]=N[s[t]]?N[s[t]]:(n=s[t]).match(/\[[\s\S]/)?n.replace(/^\[|\]$/g,""):n.replace(/\\/g,"");return function(t){var n,r="";for(n=0;n<a;n++)r+=j(s[n])?s[n].call(t,e):s[n];return r}}(t),I[t](e)):e.localeData().invalidDate()}function V(e,t){var a=5;function n(e){return t.longDateFormat(e)||e}for(J.lastIndex=0;a>=0&&J.test(e);)e=e.replace(J,n),J.lastIndex=0,a-=1;return e}var B=/\d/,K=/\d\d/,Z=/\d{3}/,q=/\d{4}/,Q=/[+-]?\d{6}/,$=/\d\d?/,X=/\d\d\d\d?/,ee=/\d\d\d\d\d\d?/,te=/\d{1,3}/,ae=/\d{1,4}/,ne=/[+-]?\d{1,6}/,se=/\d+/,re=/[+-]?\d+/,ie=/Z|[+-]\d\d:?\d\d/gi,de=/Z|[+-]\d\d(?::?\d\d)?/gi,_e=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,oe={};function ue(e,t,a){oe[e]=j(t)?t:function(e,n){return e&&a?a:t}}function me(e,t){return m(oe,e)?oe[e](t._strict,t._locale):new RegExp(le(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,a,n,s){return t||a||n||s})))}function le(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ce={};function he(e,t){var a,n=t;for("string"==typeof e&&(e=[e]),_(t)&&(n=function(e,a){a[t]=w(e)}),a=0;a<e.length;a++)ce[e[a]]=n}function Me(e,t){he(e,function(e,a,n,s){n._w=n._w||{},t(e,n._w,n,s)})}function Le(e,t,a){null!=t&&m(ce,e)&&ce[e](t,a._a,a,e)}var Ye=0,ye=1,fe=2,pe=3,ke=4,De=5,we=6,Te=7,ge=8;function ve(e){return be(e)?366:365}function be(e){return e%4==0&&e%100!=0||e%400==0}U("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),U(0,["YY",2],0,function(){return this.year()%100}),U(0,["YYYY",4],0,"year"),U(0,["YYYYY",5],0,"year"),U(0,["YYYYYY",6,!0],0,"year"),W("year","y"),R("year",1),ue("Y",re),ue("YY",$,K),ue("YYYY",ae,q),ue("YYYYY",ne,Q),ue("YYYYYY",ne,Q),he(["YYYYY","YYYYYY"],Ye),he("YYYY",function(e,t){t[Ye]=2===e.length?s.parseTwoDigitYear(e):w(e)}),he("YY",function(e,t){t[Ye]=s.parseTwoDigitYear(e)}),he("Y",function(e,t){t[Ye]=parseInt(e,10)}),s.parseTwoDigitYear=function(e){return w(e)+(w(e)>68?1900:2e3)};var Se,He=je("FullYear",!0);function je(e,t){return function(a){return null!=a?(Oe(this,e,a),s.updateOffset(this,t),this):xe(this,e)}}function xe(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function Oe(e,t,a){e.isValid()&&!isNaN(a)&&("FullYear"===t&&be(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](a,e.month(),Pe(a,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](a))}function Pe(e,t){if(isNaN(e)||isNaN(t))return NaN;var a=(t%12+12)%12;return e+=(t-a)/12,1===a?be(e)?29:28:31-a%7%2}Se=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},U("M",["MM",2],"Mo",function(){return this.month()+1}),U("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),U("MMMM",0,0,function(e){return this.localeData().months(this,e)}),W("month","M"),R("month",8),ue("M",$),ue("MM",$,K),ue("MMM",function(e,t){return t.monthsShortRegex(e)}),ue("MMMM",function(e,t){return t.monthsRegex(e)}),he(["M","MM"],function(e,t){t[ye]=w(e)-1}),he(["MMM","MMMM"],function(e,t,a,n){var s=a._locale.monthsParse(e,n,a._strict);null!=s?t[ye]=s:h(a).invalidMonth=e});var We=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ee="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ae="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Fe(e,t){var a;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=w(t);else if(!_(t=e.localeData().monthsParse(t)))return e;return a=Math.min(e.date(),Pe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,a),e}function Re(e){return null!=e?(Fe(this,e),s.updateOffset(this,!0),this):xe(this,"Month")}var ze=_e,Ce=_e;function Je(){function e(e,t){return t.length-e.length}var t,a,n=[],s=[],r=[];for(t=0;t<12;t++)a=c([2e3,t]),n.push(this.monthsShort(a,"")),s.push(this.months(a,"")),r.push(this.months(a,"")),r.push(this.monthsShort(a,""));for(n.sort(e),s.sort(e),r.sort(e),t=0;t<12;t++)n[t]=le(n[t]),s[t]=le(s[t]);for(t=0;t<24;t++)r[t]=le(r[t]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function Ie(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ne(e,t,a){var n=7+t-a;return-(7+Ie(e,0,n).getUTCDay()-t)%7+n-1}function Ue(e,t,a,n,s){var r,i,d=1+7*(t-1)+(7+a-n)%7+Ne(e,n,s);return d<=0?i=ve(r=e-1)+d:d>ve(e)?(r=e+1,i=d-ve(e)):(r=e,i=d),{year:r,dayOfYear:i}}function Ge(e,t,a){var n,s,r=Ne(e.year(),t,a),i=Math.floor((e.dayOfYear()-r-1)/7)+1;return i<1?n=i+Ve(s=e.year()-1,t,a):i>Ve(e.year(),t,a)?(n=i-Ve(e.year(),t,a),s=e.year()+1):(s=e.year(),n=i),{week:n,year:s}}function Ve(e,t,a){var n=Ne(e,t,a),s=Ne(e+1,t,a);return(ve(e)-n+s)/7}U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),W("week","w"),W("isoWeek","W"),R("week",5),R("isoWeek",5),ue("w",$),ue("ww",$,K),ue("W",$),ue("WW",$,K),Me(["w","ww","W","WW"],function(e,t,a,n){t[n.substr(0,1)]=w(e)}),U("d",0,"do","day"),U("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),U("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),U("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),W("day","d"),W("weekday","e"),W("isoWeekday","E"),R("day",11),R("weekday",11),R("isoWeekday",11),ue("d",$),ue("e",$),ue("E",$),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),Me(["dd","ddd","dddd"],function(e,t,a,n){var s=a._locale.weekdaysParse(e,n,a._strict);null!=s?t.d=s:h(a).invalidWeekday=e}),Me(["d","e","E"],function(e,t,a,n){t[n]=w(e)});var Be="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ke="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),qe=_e,Qe=_e,$e=_e;function Xe(){function e(e,t){return t.length-e.length}var t,a,n,s,r,i=[],d=[],_=[],o=[];for(t=0;t<7;t++)a=c([2e3,1]).day(t),n=this.weekdaysMin(a,""),s=this.weekdaysShort(a,""),r=this.weekdays(a,""),i.push(n),d.push(s),_.push(r),o.push(n),o.push(s),o.push(r);for(i.sort(e),d.sort(e),_.sort(e),o.sort(e),t=0;t<7;t++)d[t]=le(d[t]),_[t]=le(_[t]),o[t]=le(o[t]);this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function et(){return this.hours()%12||12}function tt(e,t){U(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function at(e,t){return t._meridiemParse}U("H",["HH",2],0,"hour"),U("h",["hh",2],0,et),U("k",["kk",2],0,function(){return this.hours()||24}),U("hmm",0,0,function(){return""+et.apply(this)+z(this.minutes(),2)}),U("hmmss",0,0,function(){return""+et.apply(this)+z(this.minutes(),2)+z(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+z(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+z(this.minutes(),2)+z(this.seconds(),2)}),tt("a",!0),tt("A",!1),W("hour","h"),R("hour",13),ue("a",at),ue("A",at),ue("H",$),ue("h",$),ue("k",$),ue("HH",$,K),ue("hh",$,K),ue("kk",$,K),ue("hmm",X),ue("hmmss",ee),ue("Hmm",X),ue("Hmmss",ee),he(["H","HH"],pe),he(["k","kk"],function(e,t,a){var n=w(e);t[pe]=24===n?0:n}),he(["a","A"],function(e,t,a){a._isPm=a._locale.isPM(e),a._meridiem=e}),he(["h","hh"],function(e,t,a){t[pe]=w(e),h(a).bigHour=!0}),he("hmm",function(e,t,a){var n=e.length-2;t[pe]=w(e.substr(0,n)),t[ke]=w(e.substr(n)),h(a).bigHour=!0}),he("hmmss",function(e,t,a){var n=e.length-4,s=e.length-2;t[pe]=w(e.substr(0,n)),t[ke]=w(e.substr(n,2)),t[De]=w(e.substr(s)),h(a).bigHour=!0}),he("Hmm",function(e,t,a){var n=e.length-2;t[pe]=w(e.substr(0,n)),t[ke]=w(e.substr(n))}),he("Hmmss",function(e,t,a){var n=e.length-4,s=e.length-2;t[pe]=w(e.substr(0,n)),t[ke]=w(e.substr(n,2)),t[De]=w(e.substr(s))});var nt,st=je("Hours",!0),rt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ee,monthsShort:Ae,week:{dow:0,doy:6},weekdays:Be,weekdaysMin:Ze,weekdaysShort:Ke,meridiemParse:/[ap]\.?m?\.?/i},it={},dt={};function _t(e){return e?e.toLowerCase().replace("_","-"):e}function ot(t){var n=null;if(!it[t]&&void 0!==e&&e&&e.exports)try{n=nt._abbr,a("RnhZ")("./"+t),ut(n)}catch(s){}return it[t]}function ut(e,t){var a;return e&&((a=d(t)?lt(e):mt(e,t))?nt=a:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function mt(e,t){if(null!==t){var a,n=rt;if(t.abbr=e,null!=it[e])H("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=it[e]._config;else if(null!=t.parentLocale)if(null!=it[t.parentLocale])n=it[t.parentLocale]._config;else{if(null==(a=ot(t.parentLocale)))return dt[t.parentLocale]||(dt[t.parentLocale]=[]),dt[t.parentLocale].push({name:e,config:t}),null;n=a._config}return it[e]=new O(x(n,t)),dt[e]&&dt[e].forEach(function(e){mt(e.name,e.config)}),ut(e),it[e]}return delete it[e],null}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!r(e)){if(t=ot(e))return t;e=[e]}return function(e){for(var t,a,n,s,r=0;r<e.length;){for(t=(s=_t(e[r]).split("-")).length,a=(a=_t(e[r+1]))?a.split("-"):null;t>0;){if(n=ot(s.slice(0,t).join("-")))return n;if(a&&a.length>=t&&T(s,a,!0)>=t-1)break;t--}r++}return nt}(e)}function ct(e){var t,a=e._a;return a&&-2===h(e).overflow&&(t=a[ye]<0||a[ye]>11?ye:a[fe]<1||a[fe]>Pe(a[Ye],a[ye])?fe:a[pe]<0||a[pe]>24||24===a[pe]&&(0!==a[ke]||0!==a[De]||0!==a[we])?pe:a[ke]<0||a[ke]>59?ke:a[De]<0||a[De]>59?De:a[we]<0||a[we]>999?we:-1,h(e)._overflowDayOfYear&&(t<Ye||t>fe)&&(t=fe),h(e)._overflowWeeks&&-1===t&&(t=Te),h(e)._overflowWeekday&&-1===t&&(t=ge),h(e).overflow=t),e}function ht(e,t,a){return null!=e?e:null!=t?t:a}function Mt(e){var t,a,n,r,i,d=[];if(!e._d){for(n=function(e){var t=new Date(s.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}(e),e._w&&null==e._a[fe]&&null==e._a[ye]&&function(e){var t,a,n,s,r,i,d,_;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,i=4,a=ht(t.GG,e._a[Ye],Ge(jt(),1,4).year),n=ht(t.W,1),((s=ht(t.E,1))<1||s>7)&&(_=!0);else{r=e._locale._week.dow,i=e._locale._week.doy;var o=Ge(jt(),r,i);a=ht(t.gg,e._a[Ye],o.year),n=ht(t.w,o.week),null!=t.d?((s=t.d)<0||s>6)&&(_=!0):null!=t.e?(s=t.e+r,(t.e<0||t.e>6)&&(_=!0)):s=r}n<1||n>Ve(a,r,i)?h(e)._overflowWeeks=!0:null!=_?h(e)._overflowWeekday=!0:(d=Ue(a,n,s,r,i),e._a[Ye]=d.year,e._dayOfYear=d.dayOfYear)}(e),null!=e._dayOfYear&&(i=ht(e._a[Ye],n[Ye]),(e._dayOfYear>ve(i)||0===e._dayOfYear)&&(h(e)._overflowDayOfYear=!0),a=Ie(i,0,e._dayOfYear),e._a[ye]=a.getUTCMonth(),e._a[fe]=a.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=d[t]=n[t];for(;t<7;t++)e._a[t]=d[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[pe]&&0===e._a[ke]&&0===e._a[De]&&0===e._a[we]&&(e._nextDay=!0,e._a[pe]=0),e._d=(e._useUTC?Ie:function(e,t,a,n,s,r,i){var d=new Date(e,t,a,n,s,r,i);return e<100&&e>=0&&isFinite(d.getFullYear())&&d.setFullYear(e),d}).apply(null,d),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[pe]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(h(e).weekdayMismatch=!0)}}var Lt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Yt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yt=/Z|[+-]\d\d(?::?\d\d)?/,ft=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],pt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],kt=/^\/?Date\((\-?\d+)/i;function Dt(e){var t,a,n,s,r,i,d=e._i,_=Lt.exec(d)||Yt.exec(d);if(_){for(h(e).iso=!0,t=0,a=ft.length;t<a;t++)if(ft[t][1].exec(_[1])){s=ft[t][0],n=!1!==ft[t][2];break}if(null==s)return void(e._isValid=!1);if(_[3]){for(t=0,a=pt.length;t<a;t++)if(pt[t][1].exec(_[3])){r=(_[2]||" ")+pt[t][0];break}if(null==r)return void(e._isValid=!1)}if(!n&&null!=r)return void(e._isValid=!1);if(_[4]){if(!yt.exec(_[4]))return void(e._isValid=!1);i="Z"}e._f=s+(r||"")+(i||""),bt(e)}else e._isValid=!1}var wt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function Tt(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}var gt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function vt(e){var t,a,n,s,r,i,d=wt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(d){var _=(t=d[3],a=d[2],n=d[5],s=d[6],r=d[7],i=[Tt(d[4]),Ae.indexOf(t),parseInt(a,10),parseInt(n,10),parseInt(s,10)],r&&i.push(parseInt(r,10)),i);if(!function(e,t,a){return!e||Ke.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(h(a).weekdayMismatch=!0,a._isValid=!1,!1)}(d[1],_,e))return;e._a=_,e._tzm=function(e,t,a){if(e)return gt[e];if(d[9])return 0;var n=parseInt(d[10],10),s=n%100;return(n-s)/100*60+s}(d[8]),e._d=Ie.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),h(e).rfc2822=!0}else e._isValid=!1}function bt(e){if(e._f!==s.ISO_8601)if(e._f!==s.RFC_2822){e._a=[],h(e).empty=!0;var t,a,n,r,i,d=""+e._i,_=d.length,o=0;for(n=V(e._f,e._locale).match(C)||[],t=0;t<n.length;t++)(a=(d.match(me(r=n[t],e))||[])[0])&&((i=d.substr(0,d.indexOf(a))).length>0&&h(e).unusedInput.push(i),d=d.slice(d.indexOf(a)+a.length),o+=a.length),N[r]?(a?h(e).empty=!1:h(e).unusedTokens.push(r),Le(r,a,e)):e._strict&&!a&&h(e).unusedTokens.push(r);h(e).charsLeftOver=_-o,d.length>0&&h(e).unusedInput.push(d),e._a[pe]<=12&&!0===h(e).bigHour&&e._a[pe]>0&&(h(e).bigHour=void 0),h(e).parsedDateParts=e._a.slice(0),h(e).meridiem=e._meridiem,e._a[pe]=(u=e._locale,m=e._a[pe],null==(l=e._meridiem)?m:null!=u.meridiemHour?u.meridiemHour(m,l):null!=u.isPM?((c=u.isPM(l))&&m<12&&(m+=12),c||12!==m||(m=0),m):m),Mt(e),ct(e)}else vt(e);else Dt(e);var u,m,l,c}function St(e){var t=e._i,a=e._f;return e._locale=e._locale||lt(e._l),null===t||void 0===a&&""===t?L({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),k(t)?new p(ct(t)):(o(t)?e._d=t:r(a)?function(e){var t,a,n,s,r;if(0===e._f.length)return h(e).invalidFormat=!0,void(e._d=new Date(NaN));for(s=0;s<e._f.length;s++)r=0,t=y({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[s],bt(t),M(t)&&(r+=h(t).charsLeftOver,r+=10*h(t).unusedTokens.length,h(t).score=r,(null==n||r<n)&&(n=r,a=t));l(e,a||t)}(e):a?bt(e):function(e){var t=e._i;d(t)?e._d=new Date(s.now()):o(t)?e._d=new Date(t.valueOf()):"string"==typeof t?function(e){var t=kt.exec(e._i);null===t?(Dt(e),!1===e._isValid&&(delete e._isValid,vt(e),!1===e._isValid&&(delete e._isValid,s.createFromInputFallback(e)))):e._d=new Date(+t[1])}(e):r(t)?(e._a=u(t.slice(0),function(e){return parseInt(e,10)}),Mt(e)):i(t)?function(e){if(!e._d){var t=A(e._i);e._a=u([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),Mt(e)}}(e):_(t)?e._d=new Date(t):s.createFromInputFallback(e)}(e),M(e)||(e._d=null),e))}function Ht(e,t,a,n,s){var d,_={};return!0!==a&&!1!==a||(n=a,a=void 0),(i(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||r(e)&&0===e.length)&&(e=void 0),_._isAMomentObject=!0,_._useUTC=_._isUTC=s,_._l=a,_._i=e,_._f=t,_._strict=n,(d=new p(ct(St(_))))._nextDay&&(d.add(1,"d"),d._nextDay=void 0),d}function jt(e,t,a,n){return Ht(e,t,a,n,!1)}s.createFromInputFallback=v("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),s.ISO_8601=function(){},s.RFC_2822=function(){};var xt=v("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=jt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:L()}),Ot=v("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=jt.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:L()});function Pt(e,t){var a,n;if(1===t.length&&r(t[0])&&(t=t[0]),!t.length)return jt();for(a=t[0],n=1;n<t.length;++n)t[n].isValid()&&!t[n][e](a)||(a=t[n]);return a}var Wt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Et(e){var t=A(e),a=t.year||0,n=t.quarter||0,s=t.month||0,r=t.week||0,i=t.day||0,d=t.hour||0,_=t.minute||0,o=t.second||0,u=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Se.call(Wt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var a=!1,n=0;n<Wt.length;++n)if(e[Wt[n]]){if(a)return!1;parseFloat(e[Wt[n]])!==w(e[Wt[n]])&&(a=!0)}return!0}(t),this._milliseconds=+u+1e3*o+6e4*_+1e3*d*60*60,this._days=+i+7*r,this._months=+s+3*n+12*a,this._data={},this._locale=lt(),this._bubble()}function At(e){return e instanceof Et}function Ft(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Rt(e,t){U(e,0,0,function(){var e=this.utcOffset(),a="+";return e<0&&(e=-e,a="-"),a+z(~~(e/60),2)+t+z(~~e%60,2)})}Rt("Z",":"),Rt("ZZ",""),ue("Z",de),ue("ZZ",de),he(["Z","ZZ"],function(e,t,a){a._useUTC=!0,a._tzm=Ct(de,e)});var zt=/([\+\-]|\d\d)/gi;function Ct(e,t){var a=(t||"").match(e);if(null===a)return null;var n=((a[a.length-1]||[])+"").match(zt)||["-",0,0],s=60*n[1]+w(n[2]);return 0===s?0:"+"===n[0]?s:-s}function Jt(e,t){var a,n;return t._isUTC?(a=t.clone(),n=(k(e)||o(e)?e.valueOf():jt(e).valueOf())-a.valueOf(),a._d.setTime(a._d.valueOf()+n),s.updateOffset(a,!1),a):jt(e).local()}function It(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Nt(){return!!this.isValid()&&this._isUTC&&0===this._offset}s.updateOffset=function(){};var Ut=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Gt=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Vt(e,t){var a,n,s,r,i,d,o=e,u=null;return At(e)?o={ms:e._milliseconds,d:e._days,M:e._months}:_(e)?(o={},t?o[t]=e:o.milliseconds=e):(u=Ut.exec(e))?(a="-"===u[1]?-1:1,o={y:0,d:w(u[fe])*a,h:w(u[pe])*a,m:w(u[ke])*a,s:w(u[De])*a,ms:w(Ft(1e3*u[we]))*a}):(u=Gt.exec(e))?o={y:Bt(u[2],a="-"===u[1]?-1:1),M:Bt(u[3],a),w:Bt(u[4],a),d:Bt(u[5],a),h:Bt(u[6],a),m:Bt(u[7],a),s:Bt(u[8],a)}:null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(r=jt(o.from),i=jt(o.to),s=r.isValid()&&i.isValid()?(i=Jt(i,r),r.isBefore(i)?d=Kt(r,i):((d=Kt(i,r)).milliseconds=-d.milliseconds,d.months=-d.months),d):{milliseconds:0,months:0},(o={}).ms=s.milliseconds,o.M=s.months),n=new Et(o),At(e)&&m(e,"_locale")&&(n._locale=e._locale),n}function Bt(e,t){var a=e&&parseFloat(e.replace(",","."));return(isNaN(a)?0:a)*t}function Kt(e,t){var a={milliseconds:0,months:0};return a.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(a.months,"M").isAfter(t)&&--a.months,a.milliseconds=+t-+e.clone().add(a.months,"M"),a}function Zt(e,t){return function(a,n){var s;return null===n||isNaN(+n)||(H(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=a,a=n,n=s),qt(this,Vt(a="string"==typeof a?+a:a,n),e),this}}function qt(e,t,a,n){var r=t._milliseconds,i=Ft(t._days),d=Ft(t._months);e.isValid()&&(n=null==n||n,d&&Fe(e,xe(e,"Month")+d*a),i&&Oe(e,"Date",xe(e,"Date")+i*a),r&&e._d.setTime(e._d.valueOf()+r*a),n&&s.updateOffset(e,i||d))}Vt.fn=Et.prototype,Vt.invalid=function(){return Vt(NaN)};var Qt=Zt(1,"add"),$t=Zt(-1,"subtract");function Xt(e,t){var a=12*(t.year()-e.year())+(t.month()-e.month()),n=e.clone().add(a,"months");return-(a+(t-n<0?(t-n)/(n-e.clone().add(a-1,"months")):(t-n)/(e.clone().add(a+1,"months")-n)))||0}function ea(e){var t;return void 0===e?this._locale._abbr:(null!=(t=lt(e))&&(this._locale=t),this)}s.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",s.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ta=v("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function aa(){return this._locale}function na(e,t){U(0,[e,e.length],0,t)}function sa(e,t,a,n,s){var r;return null==e?Ge(this,n,s).year:(t>(r=Ve(e,n,s))&&(t=r),(function(e,t,a,n,s){var r=Ue(e,t,a,n,s),i=Ie(r.year,0,r.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}).call(this,e,t,a,n,s))}U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),na("gggg","weekYear"),na("ggggg","weekYear"),na("GGGG","isoWeekYear"),na("GGGGG","isoWeekYear"),W("weekYear","gg"),W("isoWeekYear","GG"),R("weekYear",1),R("isoWeekYear",1),ue("G",re),ue("g",re),ue("GG",$,K),ue("gg",$,K),ue("GGGG",ae,q),ue("gggg",ae,q),ue("GGGGG",ne,Q),ue("ggggg",ne,Q),Me(["gggg","ggggg","GGGG","GGGGG"],function(e,t,a,n){t[n.substr(0,2)]=w(e)}),Me(["gg","GG"],function(e,t,a,n){t[n]=s.parseTwoDigitYear(e)}),U("Q",0,"Qo","quarter"),W("quarter","Q"),R("quarter",7),ue("Q",B),he("Q",function(e,t){t[ye]=3*(w(e)-1)}),U("D",["DD",2],"Do","date"),W("date","D"),R("date",9),ue("D",$),ue("DD",$,K),ue("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),he(["D","DD"],fe),he("Do",function(e,t){t[fe]=w(e.match($)[0])});var ra=je("Date",!0);U("DDD",["DDDD",3],"DDDo","dayOfYear"),W("dayOfYear","DDD"),R("dayOfYear",4),ue("DDD",te),ue("DDDD",Z),he(["DDD","DDDD"],function(e,t,a){a._dayOfYear=w(e)}),U("m",["mm",2],0,"minute"),W("minute","m"),R("minute",14),ue("m",$),ue("mm",$,K),he(["m","mm"],ke);var ia=je("Minutes",!1);U("s",["ss",2],0,"second"),W("second","s"),R("second",15),ue("s",$),ue("ss",$,K),he(["s","ss"],De);var da,_a=je("Seconds",!1);for(U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),W("millisecond","ms"),R("millisecond",16),ue("S",te,B),ue("SS",te,K),ue("SSS",te,Z),da="SSSS";da.length<=9;da+="S")ue(da,se);function oa(e,t){t[we]=w(1e3*("0."+e))}for(da="S";da.length<=9;da+="S")he(da,oa);var ua=je("Milliseconds",!1);U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var ma=p.prototype;function la(e){return e}ma.add=Qt,ma.calendar=function(e,t){var a=e||jt(),n=Jt(a,this).startOf("day"),r=s.calendarFormat(this,n)||"sameElse",i=t&&(j(t[r])?t[r].call(this,a):t[r]);return this.format(i||this.localeData().calendar(r,this,jt(a)))},ma.clone=function(){return new p(this)},ma.diff=function(e,t,a){var n,s,r;if(!this.isValid())return NaN;if(!(n=Jt(e,this)).isValid())return NaN;switch(s=6e4*(n.utcOffset()-this.utcOffset()),t=E(t)){case"year":r=Xt(this,n)/12;break;case"month":r=Xt(this,n);break;case"quarter":r=Xt(this,n)/3;break;case"second":r=(this-n)/1e3;break;case"minute":r=(this-n)/6e4;break;case"hour":r=(this-n)/36e5;break;case"day":r=(this-n-s)/864e5;break;case"week":r=(this-n-s)/6048e5;break;default:r=this-n}return a?r:D(r)},ma.endOf=function(e){return void 0===(e=E(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},ma.format=function(e){e||(e=this.isUtc()?s.defaultFormatUtc:s.defaultFormat);var t=G(this,e);return this.localeData().postformat(t)},ma.from=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||jt(e).isValid())?Vt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ma.fromNow=function(e){return this.from(jt(),e)},ma.to=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||jt(e).isValid())?Vt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ma.toNow=function(e){return this.to(jt(),e)},ma.get=function(e){return j(this[e=E(e)])?this[e]():this},ma.invalidAt=function(){return h(this).overflow},ma.isAfter=function(e,t){var a=k(e)?e:jt(e);return!(!this.isValid()||!a.isValid())&&("millisecond"===(t=E(d(t)?"millisecond":t))?this.valueOf()>a.valueOf():a.valueOf()<this.clone().startOf(t).valueOf())},ma.isBefore=function(e,t){var a=k(e)?e:jt(e);return!(!this.isValid()||!a.isValid())&&("millisecond"===(t=E(d(t)?"millisecond":t))?this.valueOf()<a.valueOf():this.clone().endOf(t).valueOf()<a.valueOf())},ma.isBetween=function(e,t,a,n){return("("===(n=n||"()")[0]?this.isAfter(e,a):!this.isBefore(e,a))&&(")"===n[1]?this.isBefore(t,a):!this.isAfter(t,a))},ma.isSame=function(e,t){var a,n=k(e)?e:jt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=E(t||"millisecond"))?this.valueOf()===n.valueOf():(a=n.valueOf(),this.clone().startOf(t).valueOf()<=a&&a<=this.clone().endOf(t).valueOf()))},ma.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},ma.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},ma.isValid=function(){return M(this)},ma.lang=ta,ma.locale=ea,ma.localeData=aa,ma.max=Ot,ma.min=xt,ma.parsingFlags=function(){return l({},h(this))},ma.set=function(e,t){if("object"==typeof e)for(var a=function(e){var t=[];for(var a in e)t.push({unit:a,priority:F[a]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=A(e)),n=0;n<a.length;n++)this[a[n].unit](e[a[n].unit]);else if(j(this[e=E(e)]))return this[e](t);return this},ma.startOf=function(e){switch(e=E(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this},ma.subtract=$t,ma.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},ma.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},ma.toDate=function(){return new Date(this.valueOf())},ma.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,a=t?this.clone().utc():this;return a.year()<0||a.year()>9999?G(a,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):j(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",G(a,"Z")):G(a,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},ma.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var a="["+e+'("]',n=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";return this.format(a+n+"-MM-DD[T]HH:mm:ss.SSS"+t+'[")]')},ma.toJSON=function(){return this.isValid()?this.toISOString():null},ma.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},ma.unix=function(){return Math.floor(this.valueOf()/1e3)},ma.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},ma.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},ma.year=He,ma.isLeapYear=function(){return be(this.year())},ma.weekYear=function(e){return sa.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},ma.isoWeekYear=function(e){return sa.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},ma.quarter=ma.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},ma.month=Re,ma.daysInMonth=function(){return Pe(this.year(),this.month())},ma.week=ma.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},ma.isoWeek=ma.isoWeeks=function(e){var t=Ge(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},ma.weeksInYear=function(){var e=this.localeData()._week;return Ve(this.year(),e.dow,e.doy)},ma.isoWeeksInYear=function(){return Ve(this.year(),1,4)},ma.date=ra,ma.day=ma.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,"d")):t},ma.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},ma.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},ma.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},ma.hour=ma.hours=st,ma.minute=ma.minutes=ia,ma.second=ma.seconds=_a,ma.millisecond=ma.milliseconds=ua,ma.utcOffset=function(e,t,a){var n,r=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=Ct(de,e)))return this}else Math.abs(e)<16&&!a&&(e*=60);return!this._isUTC&&t&&(n=It(this)),this._offset=e,this._isUTC=!0,null!=n&&this.add(n,"m"),r!==e&&(!t||this._changeInProgress?qt(this,Vt(e-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,s.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:It(this)},ma.utc=function(e){return this.utcOffset(0,e)},ma.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(It(this),"m")),this},ma.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=Ct(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},ma.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?jt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},ma.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ma.isLocal=function(){return!!this.isValid()&&!this._isUTC},ma.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ma.isUtc=Nt,ma.isUTC=Nt,ma.zoneAbbr=function(){return this._isUTC?"UTC":""},ma.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ma.dates=v("dates accessor is deprecated. Use date instead.",ra),ma.months=v("months accessor is deprecated. Use month instead",Re),ma.years=v("years accessor is deprecated. Use year instead",He),ma.zone=v("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ma.isDSTShifted=v("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!d(this._isDSTShifted))return this._isDSTShifted;var e={};if(y(e,this),(e=St(e))._a){var t=e._isUTC?c(e._a):jt(e._a);this._isDSTShifted=this.isValid()&&T(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var ca=O.prototype;function ha(e,t,a,n){var s=lt(),r=c().set(n,t);return s[a](r,e)}function Ma(e,t,a){if(_(e)&&(t=e,e=void 0),e=e||"",null!=t)return ha(e,t,a,"month");var n,s=[];for(n=0;n<12;n++)s[n]=ha(e,n,a,"month");return s}function La(e,t,a,n){"boolean"==typeof e?(_(t)&&(a=t,t=void 0),t=t||""):(a=t=e,e=!1,_(t)&&(a=t,t=void 0),t=t||"");var s,r=lt(),i=e?r._week.dow:0;if(null!=a)return ha(t,(a+i)%7,n,"day");var d=[];for(s=0;s<7;s++)d[s]=ha(t,(s+i)%7,n,"day");return d}ca.calendar=function(e,t,a){var n=this._calendar[e]||this._calendar.sameElse;return j(n)?n.call(t,a):n},ca.longDateFormat=function(e){var t=this._longDateFormat[e],a=this._longDateFormat[e.toUpperCase()];return t||!a?t:(this._longDateFormat[e]=a.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},ca.invalidDate=function(){return this._invalidDate},ca.ordinal=function(e){return this._ordinal.replace("%d",e)},ca.preparse=la,ca.postformat=la,ca.relativeTime=function(e,t,a,n){var s=this._relativeTime[a];return j(s)?s(e,t,a,n):s.replace(/%d/i,e)},ca.pastFuture=function(e,t){var a=this._relativeTime[e>0?"future":"past"];return j(a)?a(t):a.replace(/%s/i,t)},ca.set=function(e){var t,a;for(a in e)j(t=e[a])?this[a]=t:this["_"+a]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},ca.months=function(e,t){return e?r(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||We).test(t)?"format":"standalone"][e.month()]:r(this._months)?this._months:this._months.standalone},ca.monthsShort=function(e,t){return e?r(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[We.test(t)?"format":"standalone"][e.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},ca.monthsParse=function(e,t,a){var n,s,r;if(this._monthsParseExact)return(function(e,t,a){var n,s,r,i=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)r=c([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(r,"").toLocaleLowerCase();return a?"MMM"===t?-1!==(s=Se.call(this._shortMonthsParse,i))?s:null:-1!==(s=Se.call(this._longMonthsParse,i))?s:null:"MMM"===t?-1!==(s=Se.call(this._shortMonthsParse,i))?s:-1!==(s=Se.call(this._longMonthsParse,i))?s:null:-1!==(s=Se.call(this._longMonthsParse,i))?s:-1!==(s=Se.call(this._shortMonthsParse,i))?s:null}).call(this,e,t,a);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(s=c([2e3,n]),a&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(s,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(s,"").replace(".","")+"$","i")),a||this._monthsParse[n]||(r="^"+this.months(s,"")+"|^"+this.monthsShort(s,""),this._monthsParse[n]=new RegExp(r.replace(".",""),"i")),a&&"MMMM"===t&&this._longMonthsParse[n].test(e))return n;if(a&&"MMM"===t&&this._shortMonthsParse[n].test(e))return n;if(!a&&this._monthsParse[n].test(e))return n}},ca.monthsRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Je.call(this),e?this._monthsStrictRegex:this._monthsRegex):(m(this,"_monthsRegex")||(this._monthsRegex=Ce),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},ca.monthsShortRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Je.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(m(this,"_monthsShortRegex")||(this._monthsShortRegex=ze),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},ca.week=function(e){return Ge(e,this._week.dow,this._week.doy).week},ca.firstDayOfYear=function(){return this._week.doy},ca.firstDayOfWeek=function(){return this._week.dow},ca.weekdays=function(e,t){return e?r(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:r(this._weekdays)?this._weekdays:this._weekdays.standalone},ca.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},ca.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},ca.weekdaysParse=function(e,t,a){var n,s,r;if(this._weekdaysParseExact)return(function(e,t,a){var n,s,r,i=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)r=c([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(r,"").toLocaleLowerCase();return a?"dddd"===t?-1!==(s=Se.call(this._weekdaysParse,i))?s:null:"ddd"===t?-1!==(s=Se.call(this._shortWeekdaysParse,i))?s:null:-1!==(s=Se.call(this._minWeekdaysParse,i))?s:null:"dddd"===t?-1!==(s=Se.call(this._weekdaysParse,i))?s:-1!==(s=Se.call(this._shortWeekdaysParse,i))?s:-1!==(s=Se.call(this._minWeekdaysParse,i))?s:null:"ddd"===t?-1!==(s=Se.call(this._shortWeekdaysParse,i))?s:-1!==(s=Se.call(this._weekdaysParse,i))?s:-1!==(s=Se.call(this._minWeekdaysParse,i))?s:null:-1!==(s=Se.call(this._minWeekdaysParse,i))?s:-1!==(s=Se.call(this._weekdaysParse,i))?s:-1!==(s=Se.call(this._shortWeekdaysParse,i))?s:null}).call(this,e,t,a);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(s=c([2e3,1]).day(n),a&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(s,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(s,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(s,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(r="^"+this.weekdays(s,"")+"|^"+this.weekdaysShort(s,"")+"|^"+this.weekdaysMin(s,""),this._weekdaysParse[n]=new RegExp(r.replace(".",""),"i")),a&&"dddd"===t&&this._fullWeekdaysParse[n].test(e))return n;if(a&&"ddd"===t&&this._shortWeekdaysParse[n].test(e))return n;if(a&&"dd"===t&&this._minWeekdaysParse[n].test(e))return n;if(!a&&this._weekdaysParse[n].test(e))return n}},ca.weekdaysRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Xe.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(m(this,"_weekdaysRegex")||(this._weekdaysRegex=qe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},ca.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Xe.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(m(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},ca.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Xe.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(m(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=$e),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},ca.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},ca.meridiem=function(e,t,a){return e>11?a?"pm":"PM":a?"am":"AM"},ut("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===w(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),s.lang=v("moment.lang is deprecated. Use moment.locale instead.",ut),s.langData=v("moment.langData is deprecated. Use moment.localeData instead.",lt);var Ya=Math.abs;function ya(e,t,a,n){var s=Vt(t,a);return e._milliseconds+=n*s._milliseconds,e._days+=n*s._days,e._months+=n*s._months,e._bubble()}function fa(e){return e<0?Math.floor(e):Math.ceil(e)}function pa(e){return 4800*e/146097}function ka(e){return 146097*e/4800}function Da(e){return function(){return this.as(e)}}var wa=Da("ms"),Ta=Da("s"),ga=Da("m"),va=Da("h"),ba=Da("d"),Sa=Da("w"),Ha=Da("M"),ja=Da("y");function xa(e){return function(){return this.isValid()?this._data[e]:NaN}}var Oa=xa("milliseconds"),Pa=xa("seconds"),Wa=xa("minutes"),Ea=xa("hours"),Aa=xa("days"),Fa=xa("months"),Ra=xa("years"),za=Math.round,Ca={ss:44,s:45,m:45,h:22,d:26,M:11},Ja=Math.abs;function Ia(e){return(e>0)-(e<0)||+e}function Na(){if(!this.isValid())return this.localeData().invalidDate();var e,t,a=Ja(this._milliseconds)/1e3,n=Ja(this._days),s=Ja(this._months);e=D(a/60),t=D(e/60),a%=60,e%=60;var r=D(s/12),i=s%=12,d=n,_=t,o=e,u=a?a.toFixed(3).replace(/\.?0+$/,""):"",m=this.asSeconds();if(!m)return"P0D";var l=m<0?"-":"",c=Ia(this._months)!==Ia(m)?"-":"",h=Ia(this._days)!==Ia(m)?"-":"",M=Ia(this._milliseconds)!==Ia(m)?"-":"";return l+"P"+(r?c+r+"Y":"")+(i?c+i+"M":"")+(d?h+d+"D":"")+(_||o||u?"T":"")+(_?M+_+"H":"")+(o?M+o+"M":"")+(u?M+u+"S":"")}var Ua=Et.prototype;return Ua.isValid=function(){return this._isValid},Ua.abs=function(){var e=this._data;return this._milliseconds=Ya(this._milliseconds),this._days=Ya(this._days),this._months=Ya(this._months),e.milliseconds=Ya(e.milliseconds),e.seconds=Ya(e.seconds),e.minutes=Ya(e.minutes),e.hours=Ya(e.hours),e.months=Ya(e.months),e.years=Ya(e.years),this},Ua.add=function(e,t){return ya(this,e,t,1)},Ua.subtract=function(e,t){return ya(this,e,t,-1)},Ua.as=function(e){if(!this.isValid())return NaN;var t,a,n=this._milliseconds;if("month"===(e=E(e))||"year"===e)return a=this._months+pa(t=this._days+n/864e5),"month"===e?a:a/12;switch(t=this._days+Math.round(ka(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return 24*t+n/36e5;case"minute":return 1440*t+n/6e4;case"second":return 86400*t+n/1e3;case"millisecond":return Math.floor(864e5*t)+n;default:throw new Error("Unknown unit "+e)}},Ua.asMilliseconds=wa,Ua.asSeconds=Ta,Ua.asMinutes=ga,Ua.asHours=va,Ua.asDays=ba,Ua.asWeeks=Sa,Ua.asMonths=Ha,Ua.asYears=ja,Ua.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN},Ua._bubble=function(){var e,t,a,n,s,r=this._milliseconds,i=this._days,d=this._months,_=this._data;return r>=0&&i>=0&&d>=0||r<=0&&i<=0&&d<=0||(r+=864e5*fa(ka(d)+i),i=0,d=0),_.milliseconds=r%1e3,e=D(r/1e3),_.seconds=e%60,t=D(e/60),_.minutes=t%60,a=D(t/60),_.hours=a%24,i+=D(a/24),d+=s=D(pa(i)),i-=fa(ka(s)),n=D(d/12),d%=12,_.days=i,_.months=d,_.years=n,this},Ua.clone=function(){return Vt(this)},Ua.get=function(e){return e=E(e),this.isValid()?this[e+"s"]():NaN},Ua.milliseconds=Oa,Ua.seconds=Pa,Ua.minutes=Wa,Ua.hours=Ea,Ua.days=Aa,Ua.weeks=function(){return D(this.days()/7)},Ua.months=Fa,Ua.years=Ra,Ua.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),a=function(e,t,a){var n=Vt(e).abs(),s=za(n.as("s")),r=za(n.as("m")),i=za(n.as("h")),d=za(n.as("d")),_=za(n.as("M")),o=za(n.as("y")),u=s<=Ca.ss&&["s",s]||s<Ca.s&&["ss",s]||r<=1&&["m"]||r<Ca.m&&["mm",r]||i<=1&&["h"]||i<Ca.h&&["hh",i]||d<=1&&["d"]||d<Ca.d&&["dd",d]||_<=1&&["M"]||_<Ca.M&&["MM",_]||o<=1&&["y"]||["yy",o];return u[2]=t,u[3]=+e>0,u[4]=a,(function(e,t,a,n,s){return s.relativeTime(t||1,!!a,e,n)}).apply(null,u)}(this,!e,t);return e&&(a=t.pastFuture(+this,a)),t.postformat(a)},Ua.toISOString=Na,Ua.toString=Na,Ua.toJSON=Na,Ua.locale=ea,Ua.localeData=aa,Ua.toIsoString=v("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Na),Ua.lang=ta,U("X",0,0,"unix"),U("x",0,0,"valueOf"),ue("x",re),ue("X",/[+-]?\d+(\.\d{1,3})?/),he("X",function(e,t,a){a._d=new Date(1e3*parseFloat(e,10))}),he("x",function(e,t,a){a._d=new Date(w(e))}),s.version="2.22.2",t=jt,s.fn=ma,s.min=function(){return Pt("isBefore",[].slice.call(arguments,0))},s.max=function(){return Pt("isAfter",[].slice.call(arguments,0))},s.now=function(){return Date.now?Date.now():+new Date},s.utc=c,s.unix=function(e){return jt(1e3*e)},s.months=function(e,t){return Ma(e,t,"months")},s.isDate=o,s.locale=ut,s.invalid=L,s.duration=Vt,s.isMoment=k,s.weekdays=function(e,t,a){return La(e,t,a,"weekdays")},s.parseZone=function(){return jt.apply(null,arguments).parseZone()},s.localeData=lt,s.isDuration=At,s.monthsShort=function(e,t){return Ma(e,t,"monthsShort")},s.weekdaysMin=function(e,t,a){return La(e,t,a,"weekdaysMin")},s.defineLocale=mt,s.updateLocale=function(e,t){if(null!=t){var a,n,s=rt;null!=(n=ot(e))&&(s=n._config),(a=new O(t=x(s,t))).parentLocale=it[e],it[e]=a,ut(e)}else null!=it[e]&&(null!=it[e].parentLocale?it[e]=it[e].parentLocale:null!=it[e]&&delete it[e]);return it[e]},s.locales=function(){return b(it)},s.weekdaysShort=function(e,t,a){return La(e,t,a,"weekdaysShort")},s.normalizeUnits=E,s.relativeTimeRounding=function(e){return void 0===e?za:"function"==typeof e&&(za=e,!0)},s.relativeTimeThreshold=function(e,t){return void 0!==Ca[e]&&(void 0===t?Ca[e]:(Ca[e]=t,"s"===e&&(Ca.ss=t-1),!0))},s.calendarFormat=function(e,t){var a=e.diff(t,"days",!0);return a<-6?"sameElse":a<-1?"lastWeek":a<0?"lastDay":a<1?"sameDay":a<2?"nextDay":a<7?"nextWeek":"sameElse"},s.prototype=ma,s.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"YYYY-[W]WW",MONTH:"YYYY-MM"},s}()}).call(this,a("YuTi")(e))},x6pH:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,t,a){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?a?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?a?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}})}()},yPMs:function(e,t,a){!function(e){"use strict";a("wd/R").defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,t,a){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},z1FC:function(e,t,a){!function(e){"use strict";function t(e,t,a,n){var s={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return n?s[a][0]:t?s[a][0]:s[a][1]}a("wd/R").defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,t,a){return e>11?a?"d'o":"D'O":a?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},z3Vd:function(e,t,a){!function(e){"use strict";var t="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function a(e,a,n,s){var r=function(e){var a=Math.floor(e%1e3/100),n=Math.floor(e%100/10),s=e%10,r="";return a>0&&(r+=t[a]+"vatlh"),n>0&&(r+=(""!==r?" ":"")+t[n]+"maH"),s>0&&(r+=(""!==r?" ":"")+t[s]),""===r?"pagh":r}(e);switch(n){case"ss":return r+" lup";case"mm":return r+" tup";case"hh":return r+" rep";case"dd":return r+" jaj";case"MM":return r+" jar";case"yy":return r+" DIS"}}e.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"leS":-1!==e.indexOf("jar")?t.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?t.slice(0,-3)+"nem":t+" pIq"},past:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?t.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?t.slice(0,-3)+"ben":t+" ret"},s:"puS lup",ss:a,m:"wa\u2019 tup",mm:a,h:"wa\u2019 rep",hh:a,d:"wa\u2019 jaj",dd:a,M:"wa\u2019 jar",MM:a,y:"wa\u2019 DIS",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(a("wd/R"))},zx6S:function(e,t,a){!function(e){"use strict";var t={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,a,n){var s=t.words[n];return 1===n.length?a?s[0]:s[1]:e+" "+t.correctGrammaticalCase(e,s)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(a("wd/R"))}}]);
\ No newline at end of file
diff --git a/www/3.c4115c289c5994a23c55.js b/www/3.c4115c289c5994a23c55.js
new file mode 100644
index 0000000..b261ce9
--- /dev/null
+++ b/www/3.c4115c289c5994a23c55.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{MQte:function(l,n,u){"use strict";var t=u("CcnG"),e=u("A7o+"),a=u("gIcY"),r=u("CPDd"),i=u("+I7i"),s=u("+3se"),o=function(){function l(l,n){this.addressCheckService=l,this.ipService=n,this.validator=this.ipAddrValidator()}return l.prototype.validate=function(l){return this.validator(l)},l.prototype.ipAddrValidator=function(){var l=this;return function(n){var u=null,t=!0;return function(){if(!l.addressCheckService.ip(n.value))return u=Object(s.b)("Invalid IP address!"),void(t=!1);if(l.netmask&&n.value){var e=l.ipService.ip2int32(n.value),a=l.ipService.ip2int32(l.netmask),r=e|4294967295^a;if((e&&a)===e)return u=Object(s.b)("This is the network address!"),void(t=!1);if(r===e)return u=Object(s.b)("This is the broadcast address!"),void(t=!1);2130706432==(2130706432&e)&&(u=Object(s.b)("IP address is inside the loopback network!"),t=!1)}}(),t||!n.value?null:(n.setErrors(null),{appDelosIpAddr:{valid:!1,error:u}})}},l}(),b=u("8b39"),d=u("chmc"),c=u("6aHO"),p=function(){function l(l,n){this.addressCheckService=l,this.ipService=n,this.validator=this.serverValidator()}return l.prototype.validate=function(l){return this.validator(l)},l.prototype.serverValidator=function(){var l=this;return function(n){var u=null,t=!0;return function(){if(!l.addressCheckService.ip(n.value))return u=Object(s.b)("Invalid IP address!"),void(t=!1);if(l.netmask&&n.value){var e=l.ipService.ip2int32(n.value),a=l.ipService.ip2int32(l.netmask),r=e&a,i=e|4294967295^a;if(!l.isDns&&l.ipaddr&&r!==(l.ipService.ip2int32(l.ipaddr)&a))return u=Object(s.b)("Server is outside of the network and unreachable!"),t=!1,!1;if(r===e)return u=Object(s.b)("This is the network address!"),void(t=!1);if(i===e)return u=Object(s.b)("This is the broadcast address!"),void(t=!1);if(n.value===l.ipaddr)return u=Object(s.b)("This is the device's IP address!"),void(t=!1);2130706432==(2130706432&e)&&(u=Object(s.b)("IP address is inside the loopback network!"),t=!1)}}(),t||!n.value?null:(n.setErrors(null),{server:{valid:!1,error:u}})}},l}(),g=function(){function l(l,n){this.addressCheckService=l,this.ipService=n,this.validator=this.dhcpValidator()}return l.prototype.validate=function(l){return this.validator(l)},l.prototype.convertToUInt=function(l){return l>>>0},l.prototype.dhcpValidator=function(){var l=this;return function(n){var u=null,t=!0;return function(){if(!l.addressCheckService.ip(n.value))return u=Object(s.b)("Invalid IP address!"),void(t=!1);if(l.netmask&&n.value){var e=l.ipService.ip2int32(n.value),a=l.ipService.ip2int32(l.netmask),r=e|4294967295^a;if((e&&a)===e)return u=Object(s.b)("This is the network address!"),void(t=!1);if(r===e)return u=Object(s.b)("This is the broadcast address!"),void(t=!1);if(2130706432==(2130706432&e))return u=Object(s.b)("IP address is inside the loopback network!"),void(t=!1);var i=l.convertToUInt(l.ipService.ip2int32(l.ipaddr)&a)+l.convertToUInt(1),o=l.convertToUInt(l.ipService.ip2int32(l.ipaddr)&a)+l.convertToUInt(4294967295^a)-l.convertToUInt(1),b=l.convertToUInt(e);if(b<i||b>o)return u=Object(s.b)("Outside of the address range!"),void(t=!1);if(l.isEnd){var d=l.convertToUInt(l.ipService.ip2int32(l.startAddress));if(b===d)return u=Object(s.b)("End address equals start address!"),void(t=!1);b<d&&(u=Object(s.b)("End address must be larger than start address!"),t=!1)}else{var c=l.convertToUInt(l.ipService.ip2int32(l.endAddress));if(b===c)return u=Object(s.b)("Start address equals end address!"),void(t=!1);b>c&&(u=Object(s.b)("Start address must be smaller than end address!"),t=!1)}}}(),t||!n.value?null:(n.setErrors(null),{dhcp:{valid:!1,error:u}})}},l}(),m=u("kH1E"),f=u("k1Yr"),h=u("IZUe"),v=u("UVPe"),A=u("Ip0R"),k=u("nQCY"),C=u("5SxG"),I=function(){function l(){}return l.prototype.transform=function(l){if(null==l||""===l)return Object(s.b)("N/A");var n=Math.floor(l/86400),u=Math.floor(l%86400/3600),t=Math.floor(l%86400%3600/60),e=l%86400%3600%60;return(n>0?n+Object(s.b)("d, "):"")+("00"+u).slice(-2)+":"+("00"+t).slice(-2)+":"+("00"+e).slice(-2)},l}(),q=u("bJ/p"),x=u("yeMH"),_=u("nbXG"),y=u("3GWt"),w=u("jGGy"),j=u("Obbf"),P=u("+NEN"),M=u("RYmd"),V=u("ZYCi");u.d(n,"a",function(){return G});var D=t.ob({encapsulation:2,styles:[],data:{}});function O(l){return t.Kb(0,[(l()(),t.Ib(0,null,["",""])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){l(n,0,0,t.Jb(n,0,0,t.Ab(n,1).transform(null==t.Ab(n.parent,16).errors?null:null==t.Ab(n.parent,16).errors.appDelosIpAddr?null:t.Ab(n.parent,16).errors.appDelosIpAddr.error)))})}function E(l){return t.Kb(0,[(l()(),t.Ib(0,null,["",""])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){l(n,0,0,t.Jb(n,0,0,t.Ab(n,1).transform(null==t.Ab(n.parent,50).errors?null:null==t.Ab(n.parent,50).errors.server?null:t.Ab(n.parent,50).errors.server.error)))})}function N(l){return t.Kb(0,[(l()(),t.Ib(0,null,["",""])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){l(n,0,0,t.Jb(n,0,0,t.Ab(n,1).transform(null==t.Ab(n.parent,66).errors?null:null==t.Ab(n.parent,66).errors.server?null:t.Ab(n.parent,66).errors.server.error)))})}function F(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,104,"div",[["class","ipaddr"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["class","not-first-child"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Static IPv4 Address"])),(l()(),t.qb(4,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","ipaddr"],["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Address:"])),(l()(),t.qb(8,0,null,null,12,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.hb(0,[["popipaddr",2]],null,0,null,O)),(l()(),t.qb(10,16777216,null,null,10,"input",[["appDelosIpAddr",""],["class","form-control"],["containerClass","text-danger"],["id","ipaddr"],["name","ipaddr"],["required",""],["triggers","none"]],[[8,"placeholder",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,11)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,11).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,11)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,11)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.network.ipaddr=u)&&e),e},null,null)),t.pb(11,16384,null,0,a.d,[t.E,t.k,[2,a.a]],null,null),t.pb(12,16384,null,0,a.q,[],{required:[0,"required"]},null),t.pb(13,16384,null,0,o,[r.a,i.a],{netmask:[0,"netmask"]},null),t.Fb(1024,null,a.h,function(l,n){return[l,n]},[a.q,o]),t.Fb(1024,null,a.i,function(l){return[l]},[a.d]),t.pb(16,671744,[["ipaddr",4]],0,a.n,[[2,a.c],[6,a.h],[8,null],[6,a.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,a.j,null,[a.n]),t.pb(18,16384,null,0,a.k,[[4,a.j]],null,null),t.pb(19,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(21,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(22,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","netmask"],["translate",""]],null,null,null,null,null)),t.pb(23,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Subnet mask:"])),(l()(),t.qb(25,0,null,null,12,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(26,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","netmask"],["name","netmask"],["required",""],["triggers","none"]],[[8,"placeholder",0],[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,27)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,27).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,27)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,27)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.network.netmask=u)&&e),e},null,null)),t.pb(27,16384,null,0,a.d,[t.E,t.k,[2,a.a]],null,null),t.pb(28,16384,null,0,a.q,[],{required:[0,"required"]},null),t.pb(29,540672,null,0,a.p,[],{pattern:[0,"pattern"]},null),t.Fb(1024,null,a.h,function(l,n){return[l,n]},[a.q,a.p]),t.Fb(1024,null,a.i,function(l){return[l]},[a.d]),t.pb(32,671744,[["netmask",4]],0,a.n,[[2,a.c],[6,a.h],[8,null],[6,a.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,a.j,null,[a.n]),t.pb(34,16384,null,0,a.k,[[4,a.j]],null,null),t.pb(35,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,e.i,[e.j,t.h]),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(38,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(39,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","gateway"],["translate",""]],null,null,null,null,null)),t.pb(40,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Default gateway:"])),(l()(),t.qb(42,0,null,null,12,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.hb(0,[["popgateway",2]],null,0,null,E)),(l()(),t.qb(44,16777216,null,null,10,"input",[["appDelosServer",""],["class","form-control"],["containerClass","text-danger"],["id","gateway"],["name","gateway"],["required",""],["triggers","none"]],[[8,"placeholder",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,45)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,45).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,45)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,45)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.network.gateway=u)&&e),e},null,null)),t.pb(45,16384,null,0,a.d,[t.E,t.k,[2,a.a]],null,null),t.pb(46,16384,null,0,a.q,[],{required:[0,"required"]},null),t.pb(47,16384,null,0,p,[r.a,i.a],{netmask:[0,"netmask"],ipaddr:[1,"ipaddr"]},null),t.Fb(1024,null,a.h,function(l,n){return[l,n]},[a.q,p]),t.Fb(1024,null,a.i,function(l){return[l]},[a.d]),t.pb(50,671744,[["gateway",4]],0,a.n,[[2,a.c],[6,a.h],[8,null],[6,a.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,a.j,null,[a.n]),t.pb(52,16384,null,0,a.k,[[4,a.j]],null,null),t.pb(53,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(55,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(56,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","dns"],["translate",""]],null,null,null,null,null)),t.pb(57,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Name server:"])),(l()(),t.qb(59,0,null,null,11,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.hb(0,[["popdns",2]],null,0,null,N)),(l()(),t.qb(61,16777216,null,null,9,"input",[["appDelosServer",""],["class","form-control"],["containerClass","text-danger"],["id","dns"],["isDns","true"],["name","dns"],["triggers","none"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,62)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,62).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,62)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,62)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.network.dns=u)&&e),e},null,null)),t.pb(62,16384,null,0,a.d,[t.E,t.k,[2,a.a]],null,null),t.pb(63,16384,null,0,p,[r.a,i.a],{netmask:[0,"netmask"],ipaddr:[1,"ipaddr"],isDns:[2,"isDns"]},null),t.Fb(1024,null,a.h,function(l){return[l]},[p]),t.Fb(1024,null,a.i,function(l){return[l]},[a.d]),t.pb(66,671744,[["dns",4]],0,a.n,[[2,a.c],[6,a.h],[8,null],[6,a.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,a.j,null,[a.n]),t.pb(68,16384,null,0,a.k,[[4,a.j]],null,null),t.pb(69,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(71,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(72,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["IPv6 Address"])),(l()(),t.qb(74,0,null,null,30,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(75,0,null,null,2,"label",[["class","col-md-3 control-label"],["translate",""]],null,null,null,null,null)),t.pb(76,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Address:"])),(l()(),t.qb(78,0,null,null,3,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(79,0,null,null,2,"span",[["class","fake-control"]],null,null,null,null,null)),(l()(),t.Ib(80,null,["",""])),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(82,0,null,null,2,"label",[["class","col-md-3 control-label"],["translate",""]],null,null,null,null,null)),t.pb(83,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Mask:"])),(l()(),t.qb(85,0,null,null,3,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(86,0,null,null,2,"span",[["class","fake-control"]],null,null,null,null,null)),(l()(),t.Ib(87,null,["",""])),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(89,0,null,null,2,"label",[["class","col-md-3 control-label"],["translate",""]],null,null,null,null,null)),t.pb(90,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Preferred:"])),(l()(),t.qb(92,0,null,null,4,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(93,0,null,null,3,"span",[["class","fake-control"]],null,null,null,null,null)),(l()(),t.Ib(94,null,["",""])),t.Eb(95,1),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(97,0,null,null,2,"label",[["class","col-md-3 control-label"],["translate",""]],null,null,null,null,null)),t.pb(98,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Valid:"])),(l()(),t.qb(100,0,null,null,4,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(101,0,null,null,3,"span",[["class","fake-control"]],null,null,null,null,null)),(l()(),t.Ib(102,null,["",""])),t.Eb(103,1),t.Cb(131072,e.i,[e.j,t.h])],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,""),l(n,12,0,""),l(n,13,0,t.sb(1,"",u.network.netmask,"")),l(n,16,0,"ipaddr","dhcp"==u.network.proto&&"static"!=u.network.proto,u.network.ipaddr),l(n,19,0,t.Ab(n,9),"none","text-danger",t.sb(1,"",t.Ab(n,16).invalid&&(null==t.Ab(n,16).errors?null:t.Ab(n,16).errors.appDelosIpAddr)||"","")),l(n,23,0,""),l(n,28,0,""),l(n,29,0,u.netmaskPattern),l(n,32,0,"netmask","dhcp"==u.network.proto&&"static"!=u.network.proto,u.network.netmask),l(n,35,0,t.sb(1,"",t.Jb(n,35,0,t.Ab(n,36).transform("Invalid netmask!")),""),"none","text-danger",t.sb(1,"",t.Ab(n,32).invalid||"","")),l(n,40,0,""),l(n,46,0,""),l(n,47,0,t.sb(1,"",u.network.netmask,""),t.sb(1,"",u.network.ipaddr,"")),l(n,50,0,"gateway","dhcp"==u.network.proto&&"static"!=u.network.proto,u.network.gateway),l(n,53,0,t.Ab(n,43),"none","text-danger",t.sb(1,"",(null==t.Ab(n,50).errors?null:null==t.Ab(n,50).errors.server?null:t.Ab(n,50).errors.server.error)||"","")),l(n,57,0,""),l(n,63,0,t.sb(1,"",u.network.netmask,""),t.sb(1,"",u.network.ipaddr,""),"true"),l(n,66,0,"dns","dhcp"==u.network.proto&&"static"!=u.network.proto,u.network.dns),l(n,69,0,t.Ab(n,60),"none","text-danger",t.sb(1,"",(null==t.Ab(n,66).errors?null:null==t.Ab(n,66).errors.server?null:t.Ab(n,66).errors.server.error)||"","")),l(n,72,0,""),l(n,76,0,""),l(n,83,0,""),l(n,90,0,""),l(n,98,0,"")},function(l,n){var u=n.component;l(n,10,0,t.sb(1,"",t.Jb(n,10,0,t.Ab(n,20).transform("IPv4 address")),""),t.Ab(n,12).required?"":null,t.Ab(n,18).ngClassUntouched,t.Ab(n,18).ngClassTouched,t.Ab(n,18).ngClassPristine,t.Ab(n,18).ngClassDirty,t.Ab(n,18).ngClassValid,t.Ab(n,18).ngClassInvalid,t.Ab(n,18).ngClassPending),l(n,26,0,t.sb(1,"",t.Jb(n,26,0,t.Ab(n,37).transform("IPv4 netmask")),""),t.Ab(n,28).required?"":null,t.Ab(n,29).pattern?t.Ab(n,29).pattern:null,t.Ab(n,34).ngClassUntouched,t.Ab(n,34).ngClassTouched,t.Ab(n,34).ngClassPristine,t.Ab(n,34).ngClassDirty,t.Ab(n,34).ngClassValid,t.Ab(n,34).ngClassInvalid,t.Ab(n,34).ngClassPending),l(n,44,0,t.sb(1,"",t.Jb(n,44,0,t.Ab(n,54).transform("IPv4 address of default gateway")),""),t.Ab(n,46).required?"":null,t.Ab(n,52).ngClassUntouched,t.Ab(n,52).ngClassTouched,t.Ab(n,52).ngClassPristine,t.Ab(n,52).ngClassDirty,t.Ab(n,52).ngClassValid,t.Ab(n,52).ngClassInvalid,t.Ab(n,52).ngClassPending),l(n,61,0,t.sb(1,"",t.Jb(n,61,0,t.Ab(n,70).transform("IPv4 address of DNS server")),""),t.Ab(n,68).ngClassUntouched,t.Ab(n,68).ngClassTouched,t.Ab(n,68).ngClassPristine,t.Ab(n,68).ngClassDirty,t.Ab(n,68).ngClassValid,t.Ab(n,68).ngClassInvalid,t.Ab(n,68).ngClassPending),l(n,80,0,u.ipv6GlobalAddr?u.lan6["ipv6-address"][0].address:t.Jb(n,80,0,t.Ab(n,81).transform("not configured"))),l(n,87,0,u.ipv6GlobalAddr?u.lan6["ipv6-address"][0].mask:t.Jb(n,87,0,t.Ab(n,88).transform("not configured")));var e=t.Jb(n,94,0,u.ipv6GlobalAddr?l(n,95,0,t.Ab(n.parent,0),u.lan6["ipv6-address"][0].preferred):t.Ab(n,96).transform("not configured"));l(n,94,0,e);var a=t.Jb(n,102,0,u.ipv6GlobalAddr?l(n,103,0,t.Ab(n.parent,0),u.lan6["ipv6-address"][0].valid):t.Ab(n,104).transform("not configured"));l(n,102,0,a)})}function T(l){return t.Kb(0,[(l()(),t.Ib(0,null,["",""])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){l(n,0,0,t.Jb(n,0,0,t.Ab(n,1).transform(null==t.Ab(n.parent,12).errors?null:null==t.Ab(n.parent,12).errors.dhcp?null:t.Ab(n.parent,12).errors.dhcp.error)))})}function $(l){return t.Kb(0,[(l()(),t.Ib(0,null,["",""])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){l(n,0,0,t.Jb(n,0,0,t.Ab(n,1).transform(null==t.Ab(n.parent,28).errors?null:null==t.Ab(n.parent,28).errors.dhcp?null:t.Ab(n.parent,28).errors.dhcp.error)))})}function K(l){return t.Kb(0,[(l()(),t.Ib(0,null,["",""])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){l(n,0,0,t.Jb(n,0,0,t.Ab(n,1).transform(null==t.Ab(n.parent,44).errors?null:null==t.Ab(n.parent,44).errors.leasetime?null:t.Ab(n.parent,44).errors.leasetime.error)))})}function S(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,48,"div",[["class","dhcp_server_info"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","start_address"]],null,null,null,null,null)),(l()(),t.Ib(3,null,[" "," "])),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(5,0,null,null,11,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.hb(0,[["popstartaddr",2]],null,0,null,T)),(l()(),t.qb(7,16777216,null,null,9,"input",[["appDelosDhcp",""],["class","form-control"],["containerClass","text-danger"],["id","start_addr"],["isEnd","false"],["isStart","true"],["name","start_addr"],["startaddr",""],["triggers","none"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,8)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,8).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,8)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,8)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.dhcp_server.start_address=u)&&e),"focus"===n&&(e=!1!==a.markAsDirty(t.Ab(l,12))&&e),e},null,null)),t.pb(8,16384,null,0,a.d,[t.E,t.k,[2,a.a]],null,null),t.pb(9,16384,null,0,g,[r.a,i.a],{startAddress:[0,"startAddress"],endAddress:[1,"endAddress"],isStart:[2,"isStart"],isEnd:[3,"isEnd"],netmask:[4,"netmask"],ipaddr:[5,"ipaddr"]},null),t.Fb(1024,null,a.h,function(l){return[l]},[g]),t.Fb(1024,null,a.i,function(l){return[l]},[a.d]),t.pb(12,671744,[["startaddr",4]],0,a.n,[[2,a.c],[6,a.h],[8,null],[6,a.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,a.j,null,[a.n]),t.pb(14,16384,null,0,a.k,[[4,a.j]],null,null),t.pb(15,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(17,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(18,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","end_address"]],null,null,null,null,null)),(l()(),t.Ib(19,null,[" "," "])),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(21,0,null,null,11,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.hb(0,[["popendaddr",2]],null,0,null,$)),(l()(),t.qb(23,16777216,null,null,9,"input",[["appDelosDhcp",""],["class","form-control"],["containerClass","text-danger"],["id","end_addr"],["isEnd","true"],["isStart","false"],["name","end_addr"],["startaddr",""],["triggers","none"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,24)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,24).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,24)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,24)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.dhcp_server.end_address=u)&&e),"focus"===n&&(e=!1!==a.markAsDirty(t.Ab(l,28))&&e),e},null,null)),t.pb(24,16384,null,0,a.d,[t.E,t.k,[2,a.a]],null,null),t.pb(25,16384,null,0,g,[r.a,i.a],{startAddress:[0,"startAddress"],endAddress:[1,"endAddress"],isStart:[2,"isStart"],isEnd:[3,"isEnd"],netmask:[4,"netmask"],ipaddr:[5,"ipaddr"]},null),t.Fb(1024,null,a.h,function(l){return[l]},[g]),t.Fb(1024,null,a.i,function(l){return[l]},[a.d]),t.pb(28,671744,[["endaddr",4]],0,a.n,[[2,a.c],[6,a.h],[8,null],[6,a.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,a.j,null,[a.n]),t.pb(30,16384,null,0,a.k,[[4,a.j]],null,null),t.pb(31,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(33,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(34,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","lease_time"]],null,null,null,null,null)),(l()(),t.Ib(35,null,[" "," "])),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(37,0,null,null,11,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.hb(0,[["popleasetime",2]],null,0,null,K)),(l()(),t.qb(39,16777216,null,null,9,"input",[["appDelosLeaseTime",""],["class","form-control"],["containerClass","text-danger"],["id","leasetime"],["name","leasetime"],["triggers","none"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,40)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,40).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,40)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,40)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.dhcp_server.leasetime=u)&&e),"focus"===n&&(e=!1!==a.markAsDirty(t.Ab(l,44))&&e),e},null,null)),t.pb(40,16384,null,0,a.d,[t.E,t.k,[2,a.a]],null,null),t.pb(41,16384,null,0,m.a,[],null,null),t.Fb(1024,null,a.h,function(l){return[l]},[m.a]),t.Fb(1024,null,a.i,function(l){return[l]},[a.d]),t.pb(44,671744,[["leasetime",4]],0,a.n,[[2,a.c],[6,a.h],[8,null],[6,a.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,a.j,null,[a.n]),t.pb(46,16384,null,0,a.k,[[4,a.j]],null,null),t.pb(47,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,e.i,[e.j,t.h])],function(l,n){var u=n.component;l(n,9,0,t.sb(1,"",u.dhcp_server.start_address,""),t.sb(1,"",u.dhcp_server.end_address,""),"true","false",t.sb(1,"",u.network.netmask,""),t.sb(1,"",u.network.ipaddr,"")),l(n,12,0,"start_addr","dhcp"==u.network.proto&&"static"!=u.network.proto&&"on"!=u.dhcp_server.mode,u.dhcp_server.start_address),l(n,15,0,t.Ab(n,6),"none","text-danger",t.sb(1,"",(null==t.Ab(n,12).errors?null:null==t.Ab(n,12).errors.dhcp?null:t.Ab(n,12).errors.dhcp.error)&&t.Ab(n,12).dirty||"","")),l(n,25,0,t.sb(1,"",u.dhcp_server.start_address,""),t.sb(1,"",u.dhcp_server.end_address,""),"false","true",t.sb(1,"",u.network.netmask,""),t.sb(1,"",u.network.ipaddr,"")),l(n,28,0,"end_addr","dhcp"==u.network.proto&&"static"!=u.network.proto&&"on"!=u.dhcp_server.mode,u.dhcp_server.end_address),l(n,31,0,t.Ab(n,22),"none","text-danger",t.sb(1,"",(null==t.Ab(n,28).errors?null:null==t.Ab(n,28).errors.dhcp?null:t.Ab(n,28).errors.dhcp.error)&&t.Ab(n,28).dirty||"","")),l(n,44,0,"leasetime","dhcp"==u.network.proto&&"static"!=u.network.proto&&"on"!=u.dhcp_server.mode,u.dhcp_server.leasetime),l(n,47,0,t.Ab(n,38),"none","text-danger",t.sb(1,"",(null==t.Ab(n,44).errors?null:null==t.Ab(n,44).errors.leasetime?null:t.Ab(n,44).errors.leasetime.error)&&t.Ab(n,44).dirty||"",""))},function(l,n){l(n,3,0,t.Jb(n,3,0,t.Ab(n,4).transform("Start IP Address:"))),l(n,7,0,t.sb(1,"",t.Jb(n,7,0,t.Ab(n,16).transform("IPv4 address")),""),t.Ab(n,14).ngClassUntouched,t.Ab(n,14).ngClassTouched,t.Ab(n,14).ngClassPristine,t.Ab(n,14).ngClassDirty,t.Ab(n,14).ngClassValid,t.Ab(n,14).ngClassInvalid,t.Ab(n,14).ngClassPending),l(n,19,0,t.Jb(n,19,0,t.Ab(n,20).transform("End IP Address:"))),l(n,23,0,t.sb(1,"",t.Jb(n,23,0,t.Ab(n,32).transform("IPv4 address")),""),t.Ab(n,30).ngClassUntouched,t.Ab(n,30).ngClassTouched,t.Ab(n,30).ngClassPristine,t.Ab(n,30).ngClassDirty,t.Ab(n,30).ngClassValid,t.Ab(n,30).ngClassInvalid,t.Ab(n,30).ngClassPending),l(n,35,0,t.Jb(n,35,0,t.Ab(n,36).transform("Lease Time:"))),l(n,39,0,t.sb(1,"",t.Jb(n,39,0,t.Ab(n,48).transform("Leasetime")),""),t.Ab(n,46).ngClassUntouched,t.Ab(n,46).ngClassTouched,t.Ab(n,46).ngClassPristine,t.Ab(n,46).ngClassDirty,t.Ab(n,46).ngClassValid,t.Ab(n,46).ngClassInvalid,t.Ab(n,46).ngClassPending)})}function J(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,14,"div",[["class","dhcp_server"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["DHCP Server"])),(l()(),t.qb(4,0,null,null,8,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,7,"label",[],null,null,null,null,null)),(l()(),t.qb(6,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","of'"],["id","dhcp-mode"],["name","dhcp_server_mode"],["trueValue","on"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,8).onInput(u)&&e),"valueChange"===n&&(e=!1!==(a.dhcp_server.mode=u)&&e),e},null,null)),t.Fb(135680,null,a.n,a.n,[[2,a.c],[8,null],[8,null],[8,null]]),t.pb(8,16384,null,0,f.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),t.pb(9,81920,null,0,h.a,[t.k,v.a,t.z],null,null),(l()(),t.qb(10,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Operate as DHCP server"])),(l()(),t.hb(16777216,null,null,1,null,S)),t.pb(14,16384,null,0,A.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,8,0,"on","of'"),l(n,9,0),l(n,11,0,""),l(n,14,0,"on"==u.dhcp_server.mode)},function(l,n){var u=n.component;l(n,6,0,u.dhcp_server.mode,"on"==u.dhcp_server.mode)})}function L(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save()&&t),t},k.b,k.a)),t.pb(2,114688,null,0,C.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),t.qb(3,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cleanupForm()&&t),t},k.b,k.a)),t.pb(4,114688,null,0,C.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,2,0,t.Ab(n.parent,6).invalid,"save"),l(n,4,0,"cancel")},null)}function B(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,5,"p",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["The device has a new IP address. Please login at the new URL:"])),(l()(),t.qb(5,0,null,null,1,"a",[],[[8,"href",4]],null,null,null,null)),(l()(),t.Ib(6,null,["",""]))],function(l,n){l(n,3,0,"")},function(l,n){var u=n.component;l(n,5,0,t.sb(1,"",u.new_uri,"")),l(n,6,0,u.new_uri)})}function U(l){return t.Kb(0,[t.Cb(0,I,[]),t.Gb(402653184,1,{waitPingComponent:0}),t.Gb(402653184,2,{delos:0}),(l()(),t.qb(3,0,null,null,28,"div",[["class","vendor-dialogs"],["id","lan-ip4"]],null,null,null,null,null)),(l()(),t.qb(4,0,null,null,22,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[8,"hidden",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0,a=l.component;return"submit"===n&&(e=!1!==t.Ab(l,6).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,6).onReset()&&e),"submit"===n&&(e=!1!==a.save()&&e),e},null,null)),t.pb(5,16384,null,0,a.w,[],null,null),t.pb(6,4210688,[[2,4],["delos",4]],0,a.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,a.c,null,[a.m]),t.pb(8,16384,null,0,a.l,[[4,a.c]],null,null),(l()(),t.qb(9,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(10,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["IP Configuration"])),(l()(),t.qb(12,0,null,null,8,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(13,0,null,null,7,"label",[],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","static"],["id","lan-ip4-get-config"],["name","proto"],["trueValue","dhcp"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,16).onInput(u)&&e),"valueChange"===n&&(e=!1!==(a.network.proto=u)&&e),"click"===n&&(e=!1!==t.Ab(l,6).form.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,a.n,a.n,[[2,a.c],[8,null],[8,null],[8,null]]),t.pb(16,16384,null,0,f.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),t.pb(17,81920,null,0,h.a,[t.k,v.a,t.z],null,null),(l()(),t.qb(18,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(19,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Get IP configuration from a DHCP server"])),(l()(),t.hb(16777216,null,null,1,null,F)),t.pb(22,16384,null,0,A.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,J)),t.pb(24,16384,null,0,A.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,L)),t.pb(26,16384,null,0,A.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(27,0,null,null,2,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),t.qb(28,0,null,null,1,"app-wait-ping",[],null,null,null,q.b,q.a)),t.pb(29,245760,[[1,4]],0,x.a,[_.a,y.a,w.a,j.a],null,null),(l()(),t.hb(16777216,null,null,1,null,B)),t.pb(31,16384,null,0,A.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,10,0,""),l(n,16,0,"dhcp","static"),l(n,17,0),l(n,19,0,""),l(n,22,0,"static"==u.network.proto),l(n,24,0,u.hasDhcpServer&&"static"==u.network.proto),l(n,26,0,t.Ab(n,6).dirty),l(n,29,0),l(n,31,0,"success"===u.step)},function(l,n){var u=n.component;l(n,4,0,"init"!==u.step,t.Ab(n,8).ngClassUntouched,t.Ab(n,8).ngClassTouched,t.Ab(n,8).ngClassPristine,t.Ab(n,8).ngClassDirty,t.Ab(n,8).ngClassValid,t.Ab(n,8).ngClassInvalid,t.Ab(n,8).ngClassPending),l(n,14,0,u.network.proto,"dhcp"==u.network.proto),l(n,27,0,"wait"!==u.step)})}function R(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-ip",[],null,null,null,U,D)),t.Fb(512,null,i.a,i.a,[w.a,P.a]),t.pb(2,245760,null,0,M.a,[i.a,V.m,j.a,v.a],null,null)],function(l,n){l(n,2,0)},null)}var G=t.mb("app-ip",M.a,R,{},{},[])},"NU/u":function(l,n,u){"use strict";u.d(n,"a",function(){return B});var t=u("CcnG"),e=u("A7o+"),a=u("Ip0R"),r=u("tl7y"),i=u("Eidh"),s=u("gIcY"),o=u("IZUe"),b=u("UVPe"),d=u("UhSo"),c=u("weCn"),p=u("nMVA"),g=u("jGGy"),m=u("+NEN"),f=u("9nVo"),h=u("Obbf"),v=u("BioP"),A=u("t2rx"),k=u("+I7i"),C=t.ob({encapsulation:2,styles:[],data:{}});function I(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dd",[["translate",""]],[[8,"id",0]],null,null,null,null)),t.pb(1,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Not connected"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"port-not-connected-",n.parent.context.index,""))})}function q(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(1,null,[" "," "])),(l()(),t.qb(2,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Mbit/s"]))],function(l,n){l(n,3,0,"")},function(l,n){l(n,0,0,t.sb(1,"port-speed-",n.parent.context.index,"")),l(n,1,0,n.parent.context.$implicit.speed)})}function x(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"dt",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(2,null,["",":"])),(l()(),t.hb(16777216,null,null,1,null,I)),t.pb(4,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,q)),t.pb(6,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,4,0,!n.context.$implicit.link),l(n,6,0,n.context.$implicit.link)},function(l,n){l(n,1,0,t.sb(1,"port-name-",n.context.index,"")),l(n,2,0,n.context.$implicit.name)})}function _(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"dt",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(2,null,["",":"])),(l()(),t.qb(3,0,null,null,1,"dd",[["class","macaddr"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(4,null,["",""]))],null,function(l,n){l(n,1,0,t.sb(1,"iface-name-",n.context.index,"")),l(n,2,0,n.context.$implicit.description),l(n,3,0,t.sb(1,"iface-macaddr-",n.context.index,"")),l(n,4,0,n.context.$implicit.macaddr)})}function y(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Default gateway:"]))],function(l,n){l(n,1,0,"")},null)}function w(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Name server:"]))],function(l,n){l(n,1,0,"")},null)}function j(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,19,"span",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["IPv6"])),(l()(),t.qb(4,0,null,null,15,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Protocol:"])),(l()(),t.qb(8,0,null,null,1,"dd",[["id","lan-ip6-proto"],["style","text-transform: uppercase;"]],null,null,null,null,null)),(l()(),t.Ib(9,null,[" "," "])),(l()(),t.qb(10,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Address:"])),(l()(),t.qb(13,0,null,null,1,"dd",[["id","lan-ip6-addrsub"]],null,null,null,null,null)),(l()(),t.Ib(14,null,[" "," "])),(l()(),t.qb(15,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(16,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Subnet:"])),(l()(),t.qb(18,0,null,null,1,"dd",[["id","lan-ip6-addrsub"]],null,null,null,null,null)),(l()(),t.Ib(19,null,[" "," "]))],function(l,n){l(n,2,0,""),l(n,6,0,""),l(n,11,0,""),l(n,16,0,"")},function(l,n){var u=n.component;l(n,9,0,u.network.lan6.proto),l(n,14,0,u.network.lan6["ipv6-address"][0].address),l(n,19,0,u.network.lan6["ipv6-address"][0].mask)})}function P(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"h3",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["VLANs"]))],null,null)}function M(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,a.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function V(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,a.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function D(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"td",[["class","text-center empty-vaps-list"],["colspan","4"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Not configured"]))],function(l,n){l(n,3,0,"")},null)}function O(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"span",[["class","glyphicon glyphicon-ok"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null))],null,function(l,n){l(n,0,0,t.sb(1,"vlan-managed-icon-",n.parent.context.index,""),!0)})}function E(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["(5 GHz)"]))],function(l,n){l(n,1,0,"")},null)}function N(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["(2.4 GHz)"]))],function(l,n){l(n,1,0,"")},null)}function F(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["(dynamic VLAN)"]))],null,null)}function T(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.parent.context.$implicit.iface)})}function $(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"span",[["class","comma-separation"]],[[8,"id",0]],null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,E)),t.pb(2,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,N)),t.pb(4,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,F)),t.pb(6,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,T)),t.pb(8,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,5==n.context.$implicit.frequency),l(n,4,0,2.4==n.context.$implicit.frequency),l(n,6,0,n.context.$implicit.dynamic),l(n,8,0,n.context.$implicit.iface)},function(l,n){l(n,0,0,t.sb(1,"vlan-freq-",n.parent.context.index,""))})}function K(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,20,"tr",[["role","row"]],[[8,"id",0],[2,"odd",null],[2,"even",null],[1,"data-pkey",0]],null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(3,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(4,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(5,null,["",""])),(l()(),t.qb(6,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(8,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(9,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(10,null,["",""])),(l()(),t.qb(11,0,null,null,4,"td",[["class","icon-td clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(13,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,O)),t.pb(15,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(16,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(18,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,$)),t.pb(20,278528,null,0,a.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){l(n,15,0,"1"===n.context.$implicit.management),l(n,20,0,n.context.$implicit.members)},function(l,n){l(n,0,0,t.sb(1,"vlan-",n.context.index,""),n.context.odd,n.context.even,t.sb(1,"",n.context.$implicit[".name"],"")),l(n,1,0,t.sb(1,"",t.Jb(n,1,0,t.Ab(n,2).transform("VLAN ID")),"")),l(n,4,0,t.sb(1,"vlan-id-",n.context.index,"")),l(n,5,0,n.context.$implicit.id),l(n,6,0,t.sb(1,"",t.Jb(n,6,0,t.Ab(n,7).transform("VLAN Name")),"")),l(n,9,0,t.sb(1,"vlan-name-",n.context.index,"")),l(n,10,0,n.context.$implicit.name),l(n,11,0,t.sb(1,"",t.Jb(n,11,0,t.Ab(n,12).transform("Management VLAN")),"")),l(n,16,0,t.sb(1,"",t.Jb(n,16,0,t.Ab(n,17).transform("Members")),""))})}function S(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,46,"div",[["class","vendor-tables"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,15,"app-search-box",[],null,null,null,r.b,r.a)),t.pb(2,114688,null,0,i.a,[],null,null),(l()(),t.qb(3,0,null,0,7,"input",[["class","col-md-8"],["id","lan-status-search"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,4)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,4).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,4)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,4)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.searchVlansList=u)&&e),e},null,null)),t.pb(4,16384,null,0,s.d,[t.E,t.k,[2,s.a]],null,null),t.Fb(1024,null,s.i,function(l){return[l]},[s.d]),t.pb(6,671744,null,0,s.n,[[8,null],[8,null],[8,null],[6,s.i]],{model:[0,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,s.j,null,[s.n]),t.pb(8,16384,null,0,s.k,[[4,s.j]],null,null),t.pb(9,81920,null,0,o.a,[t.k,b.a,t.z],null,null),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(11,0,null,1,5,"div",[],null,null,null,null,null)),(l()(),t.Ib(12,null,[" "," "])),t.Bb(13,1),t.Cb(0,d.a,[]),t.Db(15,{num:0,all:1}),t.Cb(131072,e.i,[e.j,t.h]),(l()(),t.qb(17,0,null,null,29,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),t.qb(18,0,null,null,28,"table",[["class","dataTable vendorTable-responsive"],["id","vlansList"]],null,null,null,null,null)),(l()(),t.qb(19,0,null,null,19,"thead",[],null,null,null,null,null)),(l()(),t.qb(20,0,null,null,18,"tr",[],null,null,null,null,null)),(l()(),t.qb(21,0,null,null,5,"th",[["style","width:100px;"]],null,null,null,null,null)),(l()(),t.qb(22,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("id*1")&&t),t},null,null)),t.pb(23,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["VLAN ID"])),(l()(),t.hb(16777216,null,null,1,null,M)),t.pb(26,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(27,0,null,null,5,"th",[["style","width: 200px;"]],null,null,null,null,null)),(l()(),t.qb(28,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("name")&&t),t},null,null)),t.pb(29,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["VLAN Name"])),(l()(),t.hb(16777216,null,null,1,null,V)),t.pb(32,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(33,0,null,null,2,"th",[["style","width: 130px;"],["translate",""]],null,null,null,null,null)),t.pb(34,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Management VLAN"])),(l()(),t.qb(36,0,null,null,2,"th",[["style","width: auto;"],["translate",""]],null,null,null,null,null)),t.pb(37,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Interfaces"])),(l()(),t.qb(39,0,null,null,7,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,D)),t.pb(41,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,4,null,K)),t.pb(43,278528,null,0,a.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Eb(44,3),t.Bb(45,1),t.Cb(0,d.a,[])],function(l,n){var u=n.component;l(n,2,0),l(n,6,0,u.searchVlansList),l(n,9,0),l(n,23,0,""),l(n,26,0,"id*1"===u.orderby),l(n,29,0,""),l(n,32,0,"name"===u.orderby),l(n,34,0,""),l(n,37,0,""),l(n,41,0,!u.vlans.length);var e=t.Jb(n,43,0,t.Ab(n,46).transform(t.Jb(n,43,0,l(n,44,0,t.Ab(n.parent,0),u.vlans,u.orderby,u.reverse)),u.searchVlansList,l(n,45,0,"name")));l(n,43,0,e)},function(l,n){var u=n.component;l(n,3,0,t.sb(1,"",t.Jb(n,3,0,t.Ab(n,10).transform("Search ...")),""),t.Ab(n,8).ngClassUntouched,t.Ab(n,8).ngClassTouched,t.Ab(n,8).ngClassPristine,t.Ab(n,8).ngClassDirty,t.Ab(n,8).ngClassValid,t.Ab(n,8).ngClassInvalid,t.Ab(n,8).ngClassPending);var e=t.Jb(n,12,0,t.Ab(n,16).transform("display {num} of {all}",l(n,15,0,t.Jb(n,12,0,t.Ab(n,14).transform(u.vlans,u.searchVlansList,l(n,13,0,"name"))).length,u.vlans.length)));l(n,12,0,e)})}function J(l){return t.Kb(0,[t.Cb(0,c.a,[]),(l()(),t.qb(1,0,null,null,40,"div",[["class","vendor-dialogs"],["id","lan-status"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,1,"h3",[["class","no_margin"]],null,null,null,null,null)),(l()(),t.Ib(-1,null,["Ethernet"])),(l()(),t.qb(4,0,null,null,4,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,x)),t.pb(6,278528,null,0,a.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.hb(16777216,null,null,1,null,_)),t.pb(8,278528,null,0,a.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.qb(9,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(10,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["IPv4"])),(l()(),t.qb(12,0,null,null,23,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(13,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(14,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Protocol:"])),(l()(),t.qb(16,0,null,null,1,"dd",[["id","lan-ip4-proto"]],null,null,null,null,null)),(l()(),t.Ib(17,null,[" "," "])),(l()(),t.qb(18,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(19,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Address:"])),(l()(),t.qb(21,0,null,null,1,"dd",[["id","lan-ip4-addsub"]],null,null,null,null,null)),(l()(),t.Ib(22,null,[" "," "])),(l()(),t.qb(23,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(24,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Subnet mask:"])),(l()(),t.qb(26,0,null,null,1,"dd",[["id","lan-ip4-addsub"]],null,null,null,null,null)),(l()(),t.Ib(27,null,[" "," "])),(l()(),t.hb(16777216,null,null,1,null,y)),t.pb(29,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(30,0,null,null,1,"dd",[["id","lan-ip4-gateway"]],null,null,null,null,null)),(l()(),t.Ib(31,null,[" "," "])),(l()(),t.hb(16777216,null,null,1,null,w)),t.pb(33,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(34,0,null,null,1,"dd",[["id","lan-ip4-dns"]],null,null,null,null,null)),(l()(),t.Ib(35,null,[" "," "])),(l()(),t.hb(16777216,null,null,1,null,j)),t.pb(37,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,P)),t.pb(39,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,S)),t.pb(41,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,6,0,u.ports),l(n,8,0,u.interfaces),l(n,10,0,""),l(n,14,0,""),l(n,19,0,""),l(n,24,0,""),l(n,29,0,u.network.gateway),l(n,33,0,u.network.dns),l(n,37,0,u.ipv6GlobalAddr),l(n,39,0,u.vlans.length),l(n,41,0,u.vlans.length)},function(l,n){var u=n.component;l(n,17,0,u.network.proto),l(n,22,0,u.network.ipaddr),l(n,27,0,u.network.netmask),l(n,31,0,u.network.gateway),l(n,35,0,u.network.dns)})}function L(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-lan-status",[],null,null,null,J,C)),t.Fb(512,null,p.a,p.a,[g.a,m.a]),t.pb(2,245760,null,0,f.a,[p.a,h.a,v.a,A.a,k.a],null,null)],function(l,n){l(n,2,0)},null)}var B=t.mb("app-lan-status",f.a,L,{},{},[])},Q5BN:function(l,n,u){"use strict";var t=u("CcnG"),e=u("Ip0R"),a=u("A7o+"),r=u("gIcY"),i=u("+3se"),s=function(){function l(){this.validator=this.vlanIdsValidator()}return l.prototype.validate=function(l){return this.validator(l)},l.prototype.vlanIdsValidator=function(){var l=this;return function(n){var u,t=null,e=!0;return u=parseInt(n.value,10),n.value&&n.value.toString().match(/^[1-9][0-9]*$/)?u<1||u>4094?(t=Object(i.b)("VLAN ID out of range (1-4094)!"),e=!1):l.vlans.forEach(function(n){if(n.id==u&&n.id!==l.vlan.id)return t=Object(i.b)("VLAN ID must be unique!"),void(e=!1)}):(t=Object(i.b)("Invalid VLAN ID.  Please enter a value between 1 and 4094!"),e=!1),e?null:(n.setErrors(null),{id:{valid:!1,error:t}})}},l}(),o=u("1dzw"),b=u("8b39"),d=u("chmc"),c=u("6aHO"),p=function(){function l(){this.validator=this.vlanNamesValidator()}return l.prototype.validate=function(l){return this.validator(l)},l.prototype.vlanNamesValidator=function(){var l=this;return function(n){var u=null,t=!0;return n.value&&n.value.match(/^[ -~\u0080-\uffff]{1,256}$/)?l.vlans.forEach(function(e){if(e.name==n.value&&e.vlan!==l.vlan.vlan)return u=Object(i.b)("VLAN name must be unique!"),void(t=!1)}):(u=Object(i.b)("Invalid name!"),t=!1),t?null:(n.setErrors(null),{name:{valid:!1,error:u}})}},l}(),g=u("k1Yr"),m=u("nQCY"),f=u("5SxG"),h=u("weCn"),v=u("tl7y"),A=u("Eidh"),k=u("IZUe"),C=u("UVPe"),I=u("UhSo"),q=u("RZQe"),x=u("jGGy"),_=u("+NEN"),y=u("VEEB");u.d(n,"a",function(){return tl});var w=t.ob({encapsulation:2,styles:[],data:{}});function j(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,e.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function P(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,e.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function M(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"td",[["class","text-center empty-vaps-list"],["colspan","3"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Please click the + button to add a VLAN"]))],function(l,n){l(n,3,0,"")},null)}function V(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,5,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"td",[["class","text-center allowed-vaps-number"],["colspan","3"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,3,"span",[["class","text-danger"]],null,null,null,null,null)),(l()(),t.Ib(3,null,[" "," "])),t.Db(4,{maxVLANs:0}),t.Cb(131072,a.i,[a.j,t.h])],null,function(l,n){var u=n.component,e=t.Jb(n,3,0,t.Ab(n,5).transform("The maximum number ({maxVLANs}) of VLANs has been configured.",l(n,4,0,u.config.network.maxVLANs)));l(n,3,0,e)})}function D(l){return t.Kb(0,[(l()(),t.qb(0,16777216,null,null,10,"input",[["appDelosVlanUniqueId",""],["class","form-control"],["containerClass","text-danger"],["triggers","none"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,1)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,1).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,1)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,1)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.id=u)&&e),e},null,null)),t.pb(1,16384,null,0,r.d,[t.E,t.k,[2,r.a]],null,null),t.pb(2,16384,null,0,s,[],{vlans:[0,"vlans"],vlan:[1,"vlan"]},null),t.Fb(1024,null,r.h,function(l){return[l]},[s]),t.Fb(1024,null,r.i,function(l){return[l]},[r.d]),t.pb(5,671744,[["id",4]],0,r.n,[[2,r.c],[6,r.h],[8,null],[6,r.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,r.j,null,[r.n]),t.pb(7,16384,null,0,r.k,[[4,r.j]],null,null),t.pb(8,540672,null,0,o.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),t.pb(9,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.hb(0,null,null,0))],function(l,n){var u=n.component;l(n,2,0,u.vlans,n.parent.context.$implicit),l(n,5,0,t.sb(1,"vlan",n.parent.context.index,""),n.parent.context.$implicit.id),l(n,8,0,u.editRowName===n.parent.context.$implicit.old_id),l(n,9,0,t.sb(1,"",t.Jb(n,9,0,t.Ab(n,10).transform(null==t.Ab(n,5)?null:null==t.Ab(n,5).errors?null:null==t.Ab(n,5).errors.id?null:t.Ab(n,5).errors.id.error)),""),"none","text-danger",t.sb(1,"",t.Ab(n,5).invalid&&u.editRowName===n.parent.context.$implicit.old_id||"",""))},function(l,n){l(n,0,0,t.sb(1,"vlanid-",n.parent.context.$implicit.id,""),t.Ab(n,7).ngClassUntouched,t.Ab(n,7).ngClassTouched,t.Ab(n,7).ngClassPristine,t.Ab(n,7).ngClassDirty,t.Ab(n,7).ngClassValid,t.Ab(n,7).ngClassInvalid,t.Ab(n,7).ngClassPending)})}function O(l){return t.Kb(0,[(l()(),t.qb(0,16777216,null,null,9,"input",[["appDelosVlanUniqueName",""],["class","form-control"],["containerClass","text-danger"],["size","256"],["triggers","none"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,1)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,1).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,1)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,1)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.name=u)&&e),e},null,null)),t.pb(1,16384,null,0,r.d,[t.E,t.k,[2,r.a]],null,null),t.pb(2,16384,null,0,p,[],{vlans:[0,"vlans"],vlan:[1,"vlan"]},null),t.Fb(1024,null,r.h,function(l){return[l]},[p]),t.Fb(1024,null,r.i,function(l){return[l]},[r.d]),t.pb(5,671744,[["vlanName",4]],0,r.n,[[2,r.c],[6,r.h],[8,null],[6,r.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,r.j,null,[r.n]),t.pb(7,16384,null,0,r.k,[[4,r.j]],null,null),t.pb(8,212992,null,0,b.a,[t.k,t.E,t.P,d.a,c.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.hb(0,null,null,0))],function(l,n){var u=n.component;l(n,2,0,u.vlans,n.parent.context.$implicit),l(n,5,0,t.sb(1,"vlan",n.parent.context.index,"_name"),n.parent.context.$implicit.name),l(n,8,0,t.sb(1,"",t.Jb(n,8,0,t.Ab(n,9).transform(null==t.Ab(n,5)?null:null==t.Ab(n,5).errors?null:null==t.Ab(n,5).errors.name?null:t.Ab(n,5).errors.name.error)),""),"none","text-danger",t.sb(1,"",t.Ab(n,5).invalid&&u.editRowName===n.parent.context.$implicit.old_id||"",""))},function(l,n){l(n,0,0,t.sb(1,"vlanid-",n.parent.context.$implicit.name,""),t.Ab(n,7).ngClassUntouched,t.Ab(n,7).ngClassTouched,t.Ab(n,7).ngClassPristine,t.Ab(n,7).ngClassDirty,t.Ab(n,7).ngClassValid,t.Ab(n,7).ngClassInvalid,t.Ab(n,7).ngClassPending)})}function E(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"span",[["class","glyphicon glyphicon-ok"],["style","font-size: 18px;"]],[[1,"data-value",0]],null,null,null,null))],null,function(l,n){l(n,0,0,!0)})}function N(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,6,"td",[["colspan","3"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","management"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0],[8,"disabled",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==t.Ab(l,4).onInput(u)&&e),"valueChange"===n&&(e=!1!==(l.parent.context.$implicit.management=u)&&e),"click"===n&&(e=!1!==t.Ab(l.parent.parent,25).form.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,r.n,r.n,[[2,r.c],[8,null],[8,null],[8,null]]),t.pb(4,16384,null,0,g.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),t.qb(5,0,null,null,2,"label",[["for","management"],["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Management VLAN"]))],function(l,n){l(n,4,0,"1","0"),l(n,6,0,"")},function(l,n){l(n,2,0,n.parent.context.$implicit.management,1==n.parent.context.$implicit.management,1===n.component.vlans.length||n.parent.context.$implicit.wasManagement)})}function F(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,6,"td",[["colspan","3"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","'0'"],["id","untagged"],["trueValue","'1'"],["type","checkbox"]],[[8,"value",0],[8,"checked",0],[8,"disabled",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==t.Ab(l,4).onInput(u)&&e),"valueChange"===n&&(e=!1!==(l.parent.context.$implicit.untagged=u)&&e),"click"===n&&(e=!1!==t.Ab(l.parent.parent,25).form.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,r.n,r.n,[[2,r.c],[8,null],[8,null],[8,null]]),t.pb(4,16384,null,0,g.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),t.qb(5,0,null,null,2,"label",[["for","untagged"],["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Untagged"]))],function(l,n){l(n,4,0,"'1'","'0'"),l(n,6,0,"")},function(l,n){l(n,2,0,n.parent.context.$implicit.untagged,1==n.parent.context.$implicit.untagged,"1"!==n.parent.context.$implicit.management)})}function T(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"button",[["class","btn btn-default remove-icon-button"],["id","btn-remove"],["type","button"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.remove(l.parent.parent.context.$implicit)&&t),t},null,null)),(l()(),t.qb(1,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-trash"]],null,null,null,null,null))],null,null)}function $(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,9,"tr",[["class","vap-additional-settings"],["role","row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,8,"td",[["colspan","3"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,7,"div",[["class","form-group col-xs-12 text-right"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,T)),t.pb(4,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(5,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(6,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save(l.parent.context.$implicit)&&t),t},m.b,m.a)),t.pb(7,114688,null,0,f.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),t.qb(8,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancel()&&t),t},m.b,m.a)),t.pb(9,114688,null,0,f.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,4,0,n.component.editRowName===n.parent.context.$implicit.old_id&&n.parent.context.$implicit.deletable),l(n,7,0,!t.Ab(n.parent.parent,25).dirty||t.Ab(n.parent.parent,25).invalid,"save"),l(n,9,0,"cancel")},null)}function K(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,30,"tbody",[["class","vap-rows-wrapper"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,23,"tr",[["class","doedit"],["role","row"]],[[8,"id",0],[1,"data-pkey",0],[8,"title",0],[2,"odd",null],[2,"even",null]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.editRow(l.context.$implicit)&&t),t},null,null)),t.pb(2,278528,null,0,e.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(3,{editedRow:0,noEditRow:1}),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.qb(5,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.qb(7,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(8,0,null,null,1,"span",[],[[8,"hidden",0]],null,null,null,null)),(l()(),t.Ib(9,null,["",""])),(l()(),t.hb(16777216,null,null,1,null,D)),t.pb(11,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(12,0,null,null,7,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.Ib(14,null,[" "," "])),(l()(),t.qb(15,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(16,0,null,null,1,"span",[],[[8,"hidden",0]],null,null,null,null)),(l()(),t.Ib(17,null,["",""])),(l()(),t.hb(16777216,null,null,1,null,O)),t.pb(19,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(20,0,null,null,4,"td",[["class","icon-td clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.qb(22,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,E)),t.pb(24,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,N)),t.pb(26,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,F)),t.pb(28,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,$)),t.pb(30,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,t=l(n,3,0,u.editRowName===n.context.$implicit.old_id,u.editRowName&&u.editRowName!==n.context.$implicit.old_id);l(n,2,0,"doedit",t),l(n,11,0,u.editRowName===n.context.$implicit.old_id),l(n,19,0,u.editRowName===n.context.$implicit.old_id),l(n,24,0,"1"===n.context.$implicit.management),l(n,26,0,u.editRowName===n.context.$implicit.old_id),l(n,28,0,u.editRowName===n.context.$implicit.old_id),l(n,30,0,u.editRowName===n.context.$implicit.old_id)},function(l,n){var u=n.component;l(n,1,0,t.sb(1,"vlan-",n.context.$implicit[".name"],""),t.sb(1,"",n.context.$implicit[".name"],""),t.sb(1,"",t.Jb(n,1,2,t.Ab(n,4).transform("Click to edit")),""),n.context.odd,n.context.even),l(n,5,0,t.sb(1,"",t.Jb(n,5,0,t.Ab(n,6).transform("VLAN ID")),"")),l(n,8,0,u.editRowName===n.context.$implicit.old_id),l(n,9,0,n.context.$implicit.id),l(n,12,0,t.sb(1,"",t.Jb(n,12,0,t.Ab(n,13).transform("VLAN Name")),"")),l(n,14,0,null==u.vlanName?null:null==u.vlanName.errors?null:null==u.vlanName.errors.name?null:u.vlanName.errors.name.error),l(n,16,0,u.editRowName===n.context.$implicit.old_id),l(n,17,0,n.context.$implicit.name),l(n,20,0,t.sb(1,"",t.Jb(n,20,0,t.Ab(n,21).transform("Management VLAN")),""))})}function S(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","rotate"]],[[8,"title",0]],null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,0,0,t.sb(1,"",n.parent.context.$implicit.name,"")),l(n,1,0,n.parent.context.$implicit.name)})}function J(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"th",[["class","th-vlan-name"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,S)),t.pb(2,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,1!=n.context.$implicit.new)},null)}function L(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"td",[["class","td-checkbox"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["trueValue","1"],["type","checkbox"]],[[8,"disabled",0],[8,"checked",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==t.Ab(l,3).onInput(u)&&e),e},null,null)),t.Fb(135680,null,r.n,r.n,[[2,r.c],[8,null],[8,null],[8,null]]),t.pb(3,16384,null,0,g.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},null)],function(l,n){l(n,3,0,"1","0")},function(l,n){l(n,1,0,!0,1==n.context.$implicit.management)})}function B(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["\xa0"]))],null,null)}function U(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,B)),t.pb(2,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,1!=n.context.$implicit.new)},null)}function R(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"input",[["disabled","disabled"],["type","checkbox"]],[[8,"checked",0]],null,null,null,null))],null,function(l,n){l(n,0,0,n.component.matrix[n.parent.parent.context.$implicit][n.parent.context.$implicit[".name"]])})}function G(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"td",[["class","td-checkbox"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,R)),t.pb(2,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,1!=n.context.$implicit.new)},null)}function H(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,5,"tbody",[["class","vap-rows-wrapper"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t.Ib(3,null,["",""])),(l()(),t.hb(16777216,null,null,1,null,G)),t.pb(5,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){l(n,5,0,n.component.vlans)},function(l,n){l(n,3,0,n.component.config.network.interfaces[n.context.$implicit].description)})}function z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["\xa0"]))],null,null)}function Y(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"td",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,z)),t.pb(2,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,1!=n.context.$implicit.new)},null)}function W(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"input",[["disabled","disabled"],["type","checkbox"]],[[8,"checked",0]],null,null,null,null))],null,function(l,n){l(n,0,0,n.component.matrix[n.parent.parent.parent.context.$implicit.name][n.parent.parent.context.$implicit[".name"]][n.parent.context.$implicit[".name"]])})}function Z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"td",[["class","td-checkbox"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,W)),t.pb(2,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,1!=n.context.$implicit.new)},null)}function Q(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),t.Ib(2,null,["",""])),(l()(),t.hb(16777216,null,null,1,null,Z)),t.pb(4,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){l(n,4,0,n.component.vlans)},function(l,n){l(n,2,0,n.context.$implicit.ssid)})}function X(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"tbody",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,1,"th",[],null,null,null,null,null)),(l()(),t.Ib(3,null,["",""])),(l()(),t.hb(16777216,null,null,1,null,Y)),t.pb(5,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.hb(16777216,null,null,1,null,Q)),t.pb(7,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){l(n,5,0,n.component.vlans),l(n,7,0,n.context.$implicit.vaps)},function(l,n){l(n,3,0,n.context.$implicit.description)})}function ll(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,25,"div",[["class","table-responsive"],["style","margin-bottom: 40px;"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,24,"table",[["border","1"],["class","matrix-table"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,5,"thead",[],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),t.qb(4,0,null,null,1,"th",[["translate",""]],null,null,null,null,null)),t.pb(5,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.hb(16777216,null,null,1,null,J)),t.pb(7,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.qb(8,0,null,null,12,"tbody",[],null,null,null,null,null)),(l()(),t.qb(9,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,2,"td",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Management VLAN"])),(l()(),t.hb(16777216,null,null,1,null,L)),t.pb(14,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.qb(15,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),t.qb(16,0,null,null,2,"th",[["translate",""]],null,null,null,null,null)),t.pb(17,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Ethernet"])),(l()(),t.hb(16777216,null,null,1,null,U)),t.pb(20,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.hb(16777216,null,null,2,null,H)),t.pb(22,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Eb(23,2),(l()(),t.hb(16777216,null,null,1,null,X)),t.pb(25,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,5,0,""),l(n,7,0,u.vlans),l(n,11,0,""),l(n,14,0,u.vlans),l(n,17,0,""),l(n,20,0,u.vlans);var e=t.Jb(n,22,0,l(n,23,0,t.Ab(n.parent,0),u.objectKeys(u.config.network.interfaces),"description"));l(n,22,0,e),l(n,25,0,u.radios)},null)}function nl(l){return t.Kb(0,[t.Cb(0,h.a,[]),t.Gb(402653184,1,{delos:0}),(l()(),t.qb(2,0,null,null,56,"div",[["class","vendor-tables"],["id","lan-vlan"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,19,"app-search-box",[],null,null,null,v.b,v.a)),t.pb(4,114688,null,0,A.a,[],null,null),(l()(),t.qb(5,0,null,0,7,"input",[["class","col-md-8"],["id","lan-vlan-search"],["type","text"]],[[8,"placeholder",0],[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,6)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,6).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,6)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,6)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.searchVlans=u)&&e),e},null,null)),t.pb(6,16384,null,0,r.d,[t.E,t.k,[2,r.a]],null,null),t.Fb(1024,null,r.i,function(l){return[l]},[r.d]),t.pb(8,671744,null,0,r.n,[[8,null],[8,null],[8,null],[6,r.i]],{model:[0,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,r.j,null,[r.n]),t.pb(10,16384,null,0,r.k,[[4,r.j]],null,null),t.pb(11,81920,null,0,k.a,[t.k,C.a,t.z],null,null),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.qb(13,0,null,1,5,"div",[],null,null,null,null,null)),(l()(),t.Ib(14,null,[" "," "])),t.Bb(15,1),t.Cb(0,I.a,[]),t.Db(17,{num:0,all:1}),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.qb(19,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),t.qb(20,0,null,null,2,"button",[["class","btn btn-default small"],["id","lan-vlan-add"]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.add()&&t),t},null,null)),t.Cb(131072,a.i,[a.j,t.h]),(l()(),t.qb(22,0,null,null,0,"span",[["attr.aria-hidden","true"],["class","glyphicon glyphicon-plus"]],null,null,null,null,null)),(l()(),t.qb(23,0,null,null,35,"form",[["class","form"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,25).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,25).onReset()&&e),e},null,null)),t.pb(24,16384,null,0,r.w,[],null,null),t.pb(25,4210688,[[1,4],["delos",4]],0,r.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,r.c,null,[r.m]),t.pb(27,16384,null,0,r.l,[[4,r.c]],null,null),(l()(),t.qb(28,0,null,null,28,"div",[["class","table-responsive-disabled"]],null,null,null,null,null)),(l()(),t.qb(29,0,null,null,27,"table",[["class","dataTable dataTableHighlight vendorTable-responsive"],["id","foundVlans"]],null,null,null,null,null)),(l()(),t.qb(30,0,null,null,16,"thead",[],null,null,null,null,null)),(l()(),t.qb(31,0,null,null,15,"tr",[],null,null,null,null,null)),(l()(),t.qb(32,0,null,null,5,"th",[["style","width: 80px;"]],null,null,null,null,null)),(l()(),t.qb(33,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("id*1")&&t),t},null,null)),t.pb(34,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["VLAN ID"])),(l()(),t.hb(16777216,null,null,1,null,j)),t.pb(37,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(38,0,null,null,5,"th",[["style","width: auto;"]],null,null,null,null,null)),(l()(),t.qb(39,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("name")&&t),t},null,null)),t.pb(40,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["VLAN Name"])),(l()(),t.hb(16777216,null,null,1,null,P)),t.pb(43,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(44,0,null,null,2,"th",[["style","width: 130px;"],["translate",""]],null,null,null,null,null)),t.pb(45,8536064,null,0,a.d,[a.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Management VLAN"])),(l()(),t.qb(47,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,M)),t.pb(49,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,V)),t.pb(51,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,4,null,K)),t.pb(53,278528,null,0,e.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Eb(54,3),t.Bb(55,1),t.Cb(0,I.a,[]),(l()(),t.hb(16777216,null,null,1,null,ll)),t.pb(58,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,4,0),l(n,8,0,u.searchVlans),l(n,11,0),l(n,34,0,""),l(n,37,0,"id*1"===u.orderby),l(n,40,0,""),l(n,43,0,"name"===u.orderby),l(n,45,0,""),l(n,49,0,!u.vlans.length),l(n,51,0,u.vlans.length>=u.config.network.maxVLANs);var e=t.Jb(n,53,0,t.Ab(n,56).transform(t.Jb(n,53,0,l(n,54,0,t.Ab(n,0),u.vlans,u.orderby,u.reverse)),u.searchVlans,l(n,55,0,"name")));l(n,53,0,e),l(n,58,0,u.vlans.length)},function(l,n){var u=n.component;l(n,5,0,t.sb(1,"",t.Jb(n,5,0,t.Ab(n,12).transform("Search ...")),""),void 0!==u.editRowName,t.Ab(n,10).ngClassUntouched,t.Ab(n,10).ngClassTouched,t.Ab(n,10).ngClassPristine,t.Ab(n,10).ngClassDirty,t.Ab(n,10).ngClassValid,t.Ab(n,10).ngClassInvalid,t.Ab(n,10).ngClassPending);var e=t.Jb(n,14,0,t.Ab(n,18).transform("display {num} of {all}",l(n,17,0,t.Jb(n,14,0,t.Ab(n,16).transform(u.vlans,u.searchVlans,l(n,15,0,"name"))).length,u.vlans.length)));l(n,14,0,e),l(n,20,0,t.sb(1,"",t.Jb(n,20,0,t.Ab(n,21).transform("Add new VLAN")),""),void 0!==u.editRowName||u.vlans.length>=u.config.network.maxVLANs),l(n,23,0,t.Ab(n,27).ngClassUntouched,t.Ab(n,27).ngClassTouched,t.Ab(n,27).ngClassPristine,t.Ab(n,27).ngClassDirty,t.Ab(n,27).ngClassValid,t.Ab(n,27).ngClassInvalid,t.Ab(n,27).ngClassPending)})}function ul(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-vlan",[],null,null,null,nl,w)),t.Fb(512,null,q.a,q.a,[x.a,_.a]),t.pb(2,245760,null,0,y.a,[q.a,a.j,x.a,_.a,C.a],null,null)],function(l,n){l(n,2,0)},null)}var tl=t.mb("app-vlan",y.a,ul,{},{},[])},"bJ/p":function(l,n,u){"use strict";var t=u("CcnG"),e=u("A7o+"),a=u("Ip0R");u("yeMH"),u("nbXG"),u("3GWt"),u("jGGy"),u("Obbf"),u.d(n,"a",function(){return r}),u.d(n,"b",function(){return s});var r=t.ob({encapsulation:0,styles:[[""]],data:{}});function i(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"p",[],null,null,null,null,null)),(l()(),t.Ib(1,null,[" ","\n"])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){var u=n.component;l(n,1,0,t.Jb(n,1,0,t.Ab(n,2).transform(u.waitPingDescription)))})}function s(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[["class","progress"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,5,"div",[["attr.aria-valuemax","100"],["attr.aria-valuemin","0"],["class","progress-bar changed"],["role","progressbar"]],[[1,"aria-valuenow",0]],null,null,null,null)),t.pb(2,278528,null,0,a.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(3,{"progress-bar-striped":0,active:1}),t.pb(4,278528,null,0,a.r,[t.t,t.k,t.E],{ngStyle:[0,"ngStyle"]},null),t.Db(5,{width:0}),(l()(),t.Ib(6,null,[" "," % "])),(l()(),t.hb(16777216,null,null,1,null,i)),t.pb(8,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(9,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(10,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" This page will be reloaded automatically, when the action has finished.\n"])),(l()(),t.qb(12,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(13,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" Should the device no longer be accessible with changed settings, you have to reload the page manually, after having re-established the connection.\n"]))],function(l,n){var u=n.component,t=l(n,3,0,99===u.iprogress,99===u.iprogress);l(n,2,0,"progress-bar changed",t);var e=l(n,5,0,(u.progress||0)+"%");l(n,4,0,e),l(n,8,0,void 0!==u.waitPingDescription),l(n,10,0,""),l(n,13,0,"")},function(l,n){var u=n.component;l(n,1,0,t.sb(1,"",u.iprogress||0,"")),l(n,6,0,u.iprogress)})}},kH1E:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return LeaseTimeDirective});var _shared_utils_utils__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("+3se"),LeaseTimeDirective=function(){function LeaseTimeDirective(){this.validator=this.leaseTimeValidator()}return LeaseTimeDirective.prototype.validate=function(l){return this.validator(l)},LeaseTimeDirective.prototype.leaseTimeValidator=function(){return function(c){var error=null,valid=!0,validateNetmask=function(){var expr=c.value,replacements=[{key:"d",value:"60*24"},{key:"h",value:"60"},{key:"m",value:"1"}];if(!expr)return error=Object(_shared_utils_utils__WEBPACK_IMPORTED_MODULE_0__.b)('Not a valid input such as "1d 12h 30m"!'),void(valid=!1);expr=expr.replace(/\s/g,"");var result=replacements.filter(function(l){return l.key===expr[expr.length-1]});if(0==result.length)return error=Object(_shared_utils_utils__WEBPACK_IMPORTED_MODULE_0__.b)('Not a valid input such as "1d 12h 30m"!'),void(valid=!1);for(var cur=0;cur<replacements.length;++cur)expr=expr.replace(replacements[cur].key,"*"+replacements[cur].value+"*");expr+="1";for(var cur=0;cur<expr.length;++cur)if("*"!=expr[cur]&&isNaN(expr[cur]))return error=Object(_shared_utils_utils__WEBPACK_IMPORTED_MODULE_0__.b)('Not a valid input such as "1d 12h 30m"!'),void(valid=!1);var minutes=0;try{minutes=eval(expr)}catch(e){return error=Object(_shared_utils_utils__WEBPACK_IMPORTED_MODULE_0__.b)('Not a valid input such as "1d 12h 30m"!'),void(valid=!1)}return minutes<2?(error=Object(_shared_utils_utils__WEBPACK_IMPORTED_MODULE_0__.b)("Minimum lease time is two minutes!"),void(valid=!1)):void 0};return validateNetmask(),valid?null:(c.setErrors(null),{leasetime:{valid:!1,error:error}})}},LeaseTimeDirective}()},qDsZ:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){}}()}}]);
\ No newline at end of file
diff --git a/www/3rdpartylicenses.txt b/www/3rdpartylicenses.txt
new file mode 100644
index 0000000..ceb2fd8
--- /dev/null
+++ b/www/3rdpartylicenses.txt
@@ -0,0 +1,1190 @@
+bootstrap
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2011-2016 Twitter, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+ngx-bootstrap
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2015-2017 Valor Software
+Copyright (c) 2015-2017 Dmitriy Shekhovtsov<valorkin@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+
+moment
+MIT
+Copyright (c) JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
+ngx-moment
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2013-2017 Uri Shaked and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+gettext-parser
+MIT
+Copyright (c) 2014-2015 Andris Reinman
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+timers-browserify
+MIT
+# timers-browserify
+
+This project uses the [MIT](http://jryans.mit-license.org/) license:
+
+    Copyright © 2012 J. Ryan Stinnett <jryans@gmail.com>
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the “Software”),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+
+# lib/node
+
+The `lib/node` directory borrows files from joyent/node which uses the following license:
+
+    Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to
+    deal in the Software without restriction, including without limitation the
+    rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+    sell copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+    IN THE SOFTWARE.
+
+
+webpack
+MIT
+Copyright JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+setimmediate
+MIT
+Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic Denicola
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+process
+MIT
+(The MIT License)
+
+Copyright (c) 2013 Roman Shtylman <shtylman@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+buffer
+MIT
+The MIT License (MIT)
+
+Copyright (c) Feross Aboukhadijeh, and other contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+base64-js
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2014
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+ieee754
+BSD-3-Clause
+Copyright (c) 2008, Fair Oaks Labs, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+ * 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.
+
+ * Neither the name of Fair Oaks Labs, Inc. nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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.
+
+
+isarray
+MIT
+
+encoding
+MIT
+Copyright (c) 2012-2014 Andris Reinman
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+iconv-lite
+MIT
+Copyright (c) 2011 Alexander Shtuchkin
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+safer-buffer
+MIT
+MIT License
+
+Copyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+string_decoder
+MIT
+Node.js is licensed for use as follows:
+
+"""
+Copyright Node.js contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+"""
+
+This license applies to parts of Node.js originating from the
+https://github.com/joyent/node repository:
+
+"""
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+"""
+
+
+
+safe-buffer
+MIT
+The MIT License (MIT)
+
+Copyright (c) Feross Aboukhadijeh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+@angular/forms
+MIT
+
+rxjs
+Apache-2.0
+                               Apache License
+                         Version 2.0, January 2004
+                      http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+    "License" shall mean the terms and conditions for use, reproduction,
+    and distribution as defined by Sections 1 through 9 of this document.
+
+    "Licensor" shall mean the copyright owner or entity authorized by
+    the copyright owner that is granting the License.
+
+    "Legal Entity" shall mean the union of the acting entity and all
+    other entities that control, are controlled by, or are under common
+    control with that entity. For the purposes of this definition,
+    "control" means (i) the power, direct or indirect, to cause the
+    direction or management of such entity, whether by contract or
+    otherwise, or (ii) ownership of fifty percent (50%) or more of the
+    outstanding shares, or (iii) beneficial ownership of such entity.
+
+    "You" (or "Your") shall mean an individual or Legal Entity
+    exercising permissions granted by this License.
+
+    "Source" form shall mean the preferred form for making modifications,
+    including but not limited to software source code, documentation
+    source, and configuration files.
+
+    "Object" form shall mean any form resulting from mechanical
+    transformation or translation of a Source form, including but
+    not limited to compiled object code, generated documentation,
+    and conversions to other media types.
+
+    "Work" shall mean the work of authorship, whether in Source or
+    Object form, made available under the License, as indicated by a
+    copyright notice that is included in or attached to the work
+    (an example is provided in the Appendix below).
+
+    "Derivative Works" shall mean any work, whether in Source or Object
+    form, that is based on (or derived from) the Work and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship. For the purposes
+    of this License, Derivative Works shall not include works that remain
+    separable from, or merely link (or bind by name) to the interfaces of,
+    the Work and Derivative Works thereof.
+
+    "Contribution" shall mean any work of authorship, including
+    the original version of the Work and any modifications or additions
+    to that Work or Derivative Works thereof, that is intentionally
+    submitted to Licensor for inclusion in the Work by the copyright owner
+    or by an individual or Legal Entity authorized to submit on behalf of
+    the copyright owner. For the purposes of this definition, "submitted"
+    means any form of electronic, verbal, or written communication sent
+    to the Licensor or its representatives, including but not limited to
+    communication on electronic mailing lists, source code control systems,
+    and issue tracking systems that are managed by, or on behalf of, the
+    Licensor for the purpose of discussing and improving the Work, but
+    excluding communication that is conspicuously marked or otherwise
+    designated in writing by the copyright owner as "Not a Contribution."
+
+    "Contributor" shall mean Licensor and any individual or Legal Entity
+    on behalf of whom a Contribution has been received by Licensor and
+    subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    copyright license to reproduce, prepare Derivative Works of,
+    publicly display, publicly perform, sublicense, and distribute the
+    Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    (except as stated in this section) patent license to make, have made,
+    use, offer to sell, sell, import, and otherwise transfer the Work,
+    where such license applies only to those patent claims licensable
+    by such Contributor that are necessarily infringed by their
+    Contribution(s) alone or by combination of their Contribution(s)
+    with the Work to which such Contribution(s) was submitted. If You
+    institute patent litigation against any entity (including a
+    cross-claim or counterclaim in a lawsuit) alleging that the Work
+    or a Contribution incorporated within the Work constitutes direct
+    or contributory patent infringement, then any patent licenses
+    granted to You under this License for that Work shall terminate
+    as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+    Work or Derivative Works thereof in any medium, with or without
+    modifications, and in Source or Object form, provided that You
+    meet the following conditions:
+
+    (a) You must give any other recipients of the Work or
+        Derivative Works a copy of this License; and
+
+    (b) You must cause any modified files to carry prominent notices
+        stating that You changed the files; and
+
+    (c) You must retain, in the Source form of any Derivative Works
+        that You distribute, all copyright, patent, trademark, and
+        attribution notices from the Source form of the Work,
+        excluding those notices that do not pertain to any part of
+        the Derivative Works; and
+
+    (d) If the Work includes a "NOTICE" text file as part of its
+        distribution, then any Derivative Works that You distribute must
+        include a readable copy of the attribution notices contained
+        within such NOTICE file, excluding those notices that do not
+        pertain to any part of the Derivative Works, in at least one
+        of the following places: within a NOTICE text file distributed
+        as part of the Derivative Works; within the Source form or
+        documentation, if provided along with the Derivative Works; or,
+        within a display generated by the Derivative Works, if and
+        wherever such third-party notices normally appear. The contents
+        of the NOTICE file are for informational purposes only and
+        do not modify the License. You may add Your own attribution
+        notices within Derivative Works that You distribute, alongside
+        or as an addendum to the NOTICE text from the Work, provided
+        that such additional attribution notices cannot be construed
+        as modifying the License.
+
+    You may add Your own copyright statement to Your modifications and
+    may provide additional or different license terms and conditions
+    for use, reproduction, or distribution of Your modifications, or
+    for any such Derivative Works as a whole, provided Your use,
+    reproduction, and distribution of the Work otherwise complies with
+    the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+    any Contribution intentionally submitted for inclusion in the Work
+    by You to the Licensor shall be under the terms and conditions of
+    this License, without any additional terms or conditions.
+    Notwithstanding the above, nothing herein shall supersede or modify
+    the terms of any separate license agreement you may have executed
+    with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+    names, trademarks, service marks, or product names of the Licensor,
+    except as required for reasonable and customary use in describing the
+    origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+    agreed to in writing, Licensor provides the Work (and each
+    Contributor provides its Contributions) on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+    implied, including, without limitation, any warranties or conditions
+    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+    PARTICULAR PURPOSE. You are solely responsible for determining the
+    appropriateness of using or redistributing the Work and assume any
+    risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+    whether in tort (including negligence), contract, or otherwise,
+    unless required by applicable law (such as deliberate and grossly
+    negligent acts) or agreed to in writing, shall any Contributor be
+    liable to You for damages, including any direct, indirect, special,
+    incidental, or consequential damages of any character arising as a
+    result of this License or out of the use or inability to use the
+    Work (including but not limited to damages for loss of goodwill,
+    work stoppage, computer failure or malfunction, or any and all
+    other commercial damages or losses), even if such Contributor
+    has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+    the Work or Derivative Works thereof, You may choose to offer,
+    and charge a fee for, acceptance of support, warranty, indemnity,
+    or other liability obligations and/or rights consistent with this
+    License. However, in accepting such obligations, You may act only
+    on Your own behalf and on Your sole responsibility, not on behalf
+    of any other Contributor, and only if You agree to indemnify,
+    defend, and hold each Contributor harmless for any liability
+    incurred by, or claims asserted against, such Contributor by reason
+    of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+    To apply the Apache License to your work, attach the following
+    boilerplate notice, with the fields enclosed by brackets "[]"
+    replaced with your own identifying information. (Don't include
+    the brackets!)  The text should be enclosed in the appropriate
+    comment syntax for the file format. We also recommend that a
+    file or class name and description of purpose be included on the
+    same "printed page" as the copyright notice for easier
+    identification within third-party archives.
+
+ Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ 
+
+
+stream-browserify
+MIT
+This software is released under the MIT license:
+
+Copyright (c) James Halliday
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+events
+MIT
+MIT
+
+Copyright Joyent, Inc. and other Node contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+inherits
+ISC
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or 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.
+
+
+
+readable-stream
+MIT
+Node.js is licensed for use as follows:
+
+"""
+Copyright Node.js contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+"""
+
+This license applies to parts of Node.js originating from the
+https://github.com/joyent/node repository:
+
+"""
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+"""
+
+
+process-nextick-args
+MIT
+# Copyright (c) 2015 Calvin Metcalf
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.**
+
+
+core-util-is
+MIT
+Copyright Node.js contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+
+util-deprecate
+MIT
+(The MIT License)
+
+Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
+util
+MIT
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+
+@angular/core
+MIT
+
+lodash
+MIT
+Copyright JS Foundation and other contributors <https://js.foundation/>
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
+
+
+@angular/common
+MIT
+
+@angular/platform-browser
+MIT
+
+tslib
+Apache-2.0
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/ 
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+
+punycode
+MIT
+Copyright Mathias Bynens <https://mathiasbynens.be/>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+@angular/router
+MIT
+
+@ngx-translate/core
+MIT
+
+core-js
+MIT
+Copyright (c) 2014-2018 Denis Pushkarev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+zone.js
+MIT
+The MIT License
+
+Copyright (c) 2016-2018 Google, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+qrcode
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2012 Ryan Day
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+window-or-global
+MIT
+The MIT License (MIT)
+
+Copyright (c) Purpose Industries
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+can-promise
+MIT
+MIT License
+
+Copyright (c) 2017 Vincenzo Greco
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+dijkstrajs
+MIT
+```
+Dijkstra path-finding functions. Adapted from the Dijkstar Python project.
+
+Copyright (C) 2008
+  Wyatt Baldwin <self@wyattbaldwin.com>
+  All rights reserved
+
+Licensed under the MIT license.
+
+  http://www.opensource.org/licenses/mit-license.php
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+```
diff --git a/www/7.d9d99f6dcbb411098c9c.js b/www/7.d9d99f6dcbb411098c9c.js
new file mode 100644
index 0000000..75af911
--- /dev/null
+++ b/www/7.d9d99f6dcbb411098c9c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{"0FX9":function(l,n,u){var e=u("D5XT"),t=u("qmMu"),a=u("QUaw"),i=u("QAZZ");function r(l,n,u,a,i){var r=[].slice.call(arguments,1),o=r.length,s="function"==typeof r[o-1];if(!s&&!e())throw new Error("Callback required as last argument");if(!s){if(o<1)throw new Error("Too few arguments provided");return 1===o?(u=n,n=a=void 0):2!==o||n.getContext||(a=u,u=n,n=void 0),new Promise(function(e,i){try{var r=t.create(u,a);e(l(r,n,a))}catch(o){i(o)}})}if(o<2)throw new Error("Too few arguments provided");2===o?(i=u,u=n,n=a=void 0):3===o&&(n.getContext&&void 0===i?(i=a,a=void 0):(i=a,a=u,u=n,n=void 0));try{var b=t.create(u,a);i(null,l(b,n,a))}catch(c){i(c)}}n.create=t.create,n.toCanvas=r.bind(null,a.render),n.toDataURL=r.bind(null,a.renderToDataURL),n.toString=r.bind(null,function(l,n,u){return i.render(l,u)})},"1sBl":function(l,n,u){var e=u("e/Dd").getSymbolSize;n.getRowColCoords=function(l){if(1===l)return[];for(var n=Math.floor(l/7)+2,u=e(l),t=145===u?26:2*Math.ceil((u-13)/(2*n-2)),a=[u-7],i=1;i<n-1;i++)a[i]=a[i-1]-t;return a.push(6),a.reverse()},n.getPositions=function(l){for(var u=[],e=n.getRowColCoords(l),t=e.length,a=0;a<t;a++)for(var i=0;i<t;i++)0===a&&0===i||0===a&&i===t-1||a===t-1&&0===i||u.push([e[a],e[i]]);return u}},"2uZd":function(l,n,u){"use strict";(function(n){l.exports="object"==typeof self&&self.self===self&&self||"object"==typeof n&&n.global===n&&n||this}).call(this,u("yLpj"))},"3X7Y":function(l,n,u){var e=u("u/Db");function t(l){this.mode=e.NUMERIC,this.data=l.toString()}t.getBitsLength=function(l){return 10*Math.floor(l/3)+(l%3?l%3*3+1:0)},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(l){var n,u,e;for(n=0;n+3<=this.data.length;n+=3)u=this.data.substr(n,3),e=parseInt(u,10),l.put(e,10);var t=this.data.length-n;t>0&&(u=this.data.substr(n),e=parseInt(u,10),l.put(e,3*t+1))},l.exports=t},"49sm":function(l,n){var u={}.toString;l.exports=Array.isArray||function(l){return"[object Array]"==u.call(l)}},AZa5:function(l,n,u){var e=u("Wogr"),t=u("u/Db");function a(l){this.mode=t.BYTE,this.data=new e(l)}a.getBitsLength=function(l){return 8*l},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(l){for(var n=0,u=this.data.length;n<u;n++)l.put(this.data[n],8)},l.exports=a},BCVQ:function(l,n){var u="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+",e="(?:(?![A-Z0-9 $%*+\\-./:]|"+(u=u.replace(/u/g,"\\u"))+")(?:.|[\r\n]))+";n.KANJI=new RegExp(u,"g"),n.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),n.BYTE=new RegExp(e,"g"),n.NUMERIC=new RegExp("[0-9]+","g"),n.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");var t=new RegExp("^"+u+"$"),a=new RegExp("^[0-9]+$"),i=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");n.testKanji=function(l){return t.test(l)},n.testNumeric=function(l){return a.test(l)},n.testAlphanumeric=function(l){return i.test(l)}},D5XT:function(l,n,u){"use strict";var e=u("2uZd");l.exports=function(){return"function"==typeof e.Promise&&"function"==typeof e.Promise.prototype.then}},ELBg:function(l,n,u){"use strict";var e={single_source_shortest_paths:function(l,n,u){var t={},a={};a[n]=0;var i,r,o,s,b,c,d=e.PriorityQueue.make();for(d.push(n,0);!d.empty();)for(o in s=(i=d.pop()).cost,b=l[r=i.value]||{})b.hasOwnProperty(o)&&(c=s+b[o],(void 0===a[o]||a[o]>c)&&(a[o]=c,d.push(o,c),t[o]=r));if(void 0!==u&&void 0===a[u]){var p=["Could not find a path from ",n," to ",u,"."].join("");throw new Error(p)}return t},extract_shortest_path_from_predecessor_list:function(l,n){for(var u=[],e=n;e;)u.push(e),e=l[e];return u.reverse(),u},find_path:function(l,n,u){var t=e.single_source_shortest_paths(l,n,u);return e.extract_shortest_path_from_predecessor_list(t,u)},PriorityQueue:{make:function(l){var n,u=e.PriorityQueue,t={};for(n in l=l||{},u)u.hasOwnProperty(n)&&(t[n]=u[n]);return t.queue=[],t.sorter=l.sorter||u.default_sorter,t},default_sorter:function(l,n){return l.cost-n.cost},push:function(l,n){this.queue.push({value:l,cost:n}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};l.exports=e},J6Nv:function(l,n){n.isValid=function(l){return!isNaN(l)&&l>=1&&l<=40}},JzKC:function(l,n,u){var e=u("Wogr"),t=u("aZ40");n.mul=function(l,n){var u=new e(l.length+n.length-1);u.fill(0);for(var a=0;a<l.length;a++)for(var i=0;i<n.length;i++)u[a+i]^=t.mul(l[a],n[i]);return u},n.mod=function(l,n){for(var u=new e(l);u.length-n.length>=0;){for(var a=u[0],i=0;i<n.length;i++)u[i]^=t.mul(n[i],a);for(var r=0;r<u.length&&0===u[r];)r++;u=u.slice(r)}return u},n.generateECPolynomial=function(l){for(var u=new e([1]),a=0;a<l;a++)u=n.mul(u,[1,t.exp(a)]);return u}},Lzq4:function(l,n,u){var e=u("u/Db"),t=u("e/Dd");function a(l){this.mode=e.KANJI,this.data=l}a.getBitsLength=function(l){return 13*l},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(l){var n;for(n=0;n<this.data.length;n++){var u=t.toSJIS(this.data[n]);if(u>=33088&&u<=40956)u-=33088;else{if(!(u>=57408&&u<=60351))throw new Error("Invalid SJIS character: "+this.data[n]+"\nMake sure your charset is UTF-8");u-=49472}l.put(u=192*(u>>>8&255)+(255&u),13)}},l.exports=a},NPxG:function(l,n,u){var e=u("ekOh"),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],a=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];n.getBlocksCount=function(l,n){switch(n){case e.L:return t[4*(l-1)+0];case e.M:return t[4*(l-1)+1];case e.Q:return t[4*(l-1)+2];case e.H:return t[4*(l-1)+3];default:return}},n.getTotalCodewordsCount=function(l,n){switch(n){case e.L:return a[4*(l-1)+0];case e.M:return a[4*(l-1)+1];case e.Q:return a[4*(l-1)+2];case e.H:return a[4*(l-1)+3];default:return}}},QAZZ:function(l,n,u){var e=u("Rb7d");function t(l,n){var u=l.a/255,e=n+'="'+l.hex+'"';return u<1?e+" "+n+'-opacity="'+u.toFixed(2).slice(1)+'"':e}function a(l,n,u){var e=l+n;return void 0!==u&&(e+=" "+u),e}n.render=function(l,n,u){var i=e.getOptions(n),r=l.modules.size,o=l.modules.data,s=r+2*i.margin,b=i.color.light.a?"<path "+t(i.color.light,"fill")+' d="M0 0h'+s+"v"+s+'H0z"/>':"",c="<path "+t(i.color.dark,"stroke")+' d="'+function(l,n,u){for(var e="",t=0,i=!1,r=0,o=0;o<l.length;o++){var s=Math.floor(o%n),b=Math.floor(o/n);s||i||(i=!0),l[o]?(r++,o>0&&s>0&&l[o-1]||(e+=i?a("M",s+u,.5+b+u):a("m",t,0),t=0,i=!1),s+1<n&&l[o+1]||(e+=a("h",r),r=0)):t++}return e}(o,r,i.margin)+'"/>',d='<svg xmlns="http://www.w3.org/2000/svg" '+(i.width?'width="'+i.width+'" height="'+i.width+'" ':"")+'viewBox="0 0 '+s+" "+s+'" shape-rendering="crispEdges">'+b+c+"</svg>\n";return"function"==typeof u&&u(null,d),d}},QEHt:function(l,n,u){"use strict";u.r(n);var e=u("CcnG"),t=function(){return function(){}}(),a=u("pMnS"),i=u("Ip0R"),r=u("A7o+"),o=u("H6Ep"),s=u("6aHO"),b=u("T7CS"),c=u("UhSo"),d=u("4sBD"),p=u("Z5Gg"),g=u("bO+w"),h=u("tl7y"),f=u("Eidh"),m=u("gIcY"),v=u("weCn"),C=function(){function l(){}return l.prototype.transform=function(l,n,u,e,t){void 0===e&&(e=!1);var a=l.filter(function(l){return"online"===l.status}),i=l.filter(function(l){return"offline"===l.status}),r=new v.a,o=r.transform(a,n,u,e,t);"connected_time"===n&&(n="disconnected_time");var s=r.transform(i,n,u,e,t);return o.concat(s)},l}(),A=u("xR9I"),k=u("Sxbm"),y=u("ilcq"),q=u("TN6a"),I=u("jGGy"),x=u("+NEN"),w=u("WiWG"),P=u("iIpO"),M=u("EDOA"),E=u("t2rx"),j=e.ob({encapsulation:0,styles:[[".clients-table[_ngcontent-%COMP%]   th[_ngcontent-%COMP%]{padding-right:3px}.client_label[_ngcontent-%COMP%]{width:100%;max-width:130px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:600px){.client_label[_ngcontent-%COMP%]{max-width:100%}}"]],data:{}});function T(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function F(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function S(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function V(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("radio")&&e),e},null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radio"]))],function(l,n){l(n,1,0,"")},null)}function $(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("radio")&&e),e},null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Frequency band"]))],function(l,n){l(n,1,0,"")},null)}function D(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function B(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("ssid")&&e),e},null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID"]))],function(l,n){l(n,1,0,"")},null)}function K(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("ssid")&&e),e},null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Network name"]))],function(l,n){l(n,1,0,"")},null)}function _(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function R(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function J(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function O(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseSta);l(n,1,0,"caret",u)},null)}function N(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"tr",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,3,"td",[["class","text-center empty-logs-list"],["colspan","8"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["No clients are connected"]))],function(l,n){l(n,3,0,"")},null)}function U(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,40,"tr",[["role","row"]],[[2,"odd",null],[2,"even",null]],null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{ngClass:[0,"ngClass"]},null),e.Db(2,{disabled:0}),(l()(),e.qb(3,0,null,null,6,"td",[["class","text-center clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(5,0,null,null,4,"div",[["class","td-content"]],[[8,"id",0],[8,"title",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(7,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),e.pb(8,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(9,{"glyphicon-ok-circle":0,"glyphicon-ban-circle":1}),(l()(),e.qb(10,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(12,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(13,null,["",""])),(l()(),e.qb(14,0,null,null,5,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(16,16777216,null,null,3,"div",[["class","td-content"],["placement","bottom"]],[[8,"id",0]],null,null,null,null)),e.pb(17,212992,null,0,o.a,[e.P,e.E,e.k,s.a,b.a],{tooltip:[0,"tooltip"],placement:[1,"placement"]},null),(l()(),e.qb(18,0,null,null,1,"span",[["class","client_label"]],null,null,null,null,null)),(l()(),e.Ib(19,null,[" "," "])),(l()(),e.qb(20,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(22,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(23,null,["",""])),(l()(),e.qb(24,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(26,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(27,null,["",""])),(l()(),e.qb(28,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(30,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(31,null,["",""])),(l()(),e.qb(32,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(34,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(35,null,["",""])),(l()(),e.qb(36,0,null,null,4,"td",[["class","text-center clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(38,0,null,null,2,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(39,null,["",""])),e.Cb(131072,i.b,[e.h])],function(l,n){var u=l(n,2,0,"offline"==n.context.$implicit.status);l(n,1,0,u);var t=l(n,9,0,"online"==n.context.$implicit.status,"offline"==n.context.$implicit.status);l(n,8,0,"glyphicon",t),l(n,17,0,e.sb(1,"",n.context.$implicit.label,""),"bottom")},function(l,n){var u=n.component;l(n,0,0,n.context.odd,n.context.even),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform("Status"))),l(n,5,0,e.sb(1,"station-status-",n.context.index,""),e.sb(1,"",e.Jb(n,5,1,e.Ab(n,6).transform(n.context.$implicit.status)),"")),l(n,7,0,e.sb(1,"station-status-icon-",n.context.index,""),n.context.$implicit.status),l(n,10,0,e.Jb(n,10,0,e.Ab(n,11).transform("MAC Address"))),l(n,12,0,e.sb(1,"station-mac-",n.context.index,"")),l(n,13,0,n.context.$implicit.mac),l(n,14,0,e.Jb(n,14,0,e.Ab(n,15).transform("Manufacturer"))),l(n,16,0,e.sb(1,"station-vendor-",n.context.index,"")),l(n,19,0,n.context.$implicit.label),l(n,20,0,e.Jb(n,20,0,e.Ab(n,21).transform("Radio"))),l(n,22,0,e.sb(1,"station-radio-",n.context.index,"")),l(n,23,0,n.context.$implicit.radio),l(n,24,0,e.Jb(n,24,0,e.Ab(n,25).transform("SSID"))),l(n,26,0,e.sb(1,"station-ssid-",n.context.index,"")),l(n,27,0,n.context.$implicit.ssid),l(n,28,0,e.Jb(n,28,0,e.Ab(n,29).transform("Tx rate (Mbit/s)"))),l(n,30,0,e.sb(1,"station-tx-",n.context.index,"")),l(n,31,0,null==n.context.$implicit.tx?null:n.context.$implicit.tx.rate),l(n,32,0,e.Jb(n,32,0,e.Ab(n,33).transform("Rx rate (Mbit/s)"))),l(n,34,0,e.sb(1,"station-rx-",n.context.index,"")),l(n,35,0,null==n.context.$implicit.rx?null:n.context.$implicit.rx.rate),l(n,36,0,e.Jb(n,36,0,e.Ab(n,37).transform("Since"))),l(n,38,0,e.sb(1,"station-conntime-",n.context.index,"")),l(n,39,0,e.Jb(n,39,0,e.Ab(n,40).transform(u.formatSince(n.context.$implicit))))})}function W(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["VLAN:"]))],function(l,n){l(n,1,0,"")},null)}function H(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"dd",[["id","bridge-vlan"]],null,null,null,null,null)),(l()(),e.Ib(1,null,[""," (",")"]))],null,function(l,n){var u=n.component;l(n,1,0,u.bridge.vlan,u.bridge.vlan_id)})}function z(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,19,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID:"])),(l()(),e.qb(4,0,null,null,1,"dd",[["id","bridge-ssid"]],null,null,null,null,null)),(l()(),e.Ib(5,null,["",""])),(l()(),e.qb(6,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),e.pb(7,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Connection status:"])),(l()(),e.qb(9,0,null,null,1,"dd",[["id","bridge-connection"]],null,null,null,null,null)),(l()(),e.Ib(10,null,["",""])),(l()(),e.qb(11,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),e.pb(12,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Security:"])),(l()(),e.qb(14,0,null,null,1,"dd",[["id","bridge-security"]],null,null,null,null,null)),(l()(),e.Ib(15,null,["",""])),(l()(),e.hb(16777216,null,null,1,null,W)),e.pb(17,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,H)),e.pb(19,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,7,0,""),l(n,12,0,""),l(n,17,0,u.bridge.vlan),l(n,19,0,u.bridge.vlan)},function(l,n){var u=n.component;l(n,5,0,u.bridge.ssid),l(n,10,0,u.bridge.connection),l(n,15,0,u.bridge.security)})}function L(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,0,"div",[],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Bridge"])),(l()(),e.qb(5,0,null,null,2,"div",[["class","row radius-server-stat"],["id","bridge"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,z)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,""),l(n,7,0,u.bridge.enabled)},null)}function G(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi Network"]))],function(l,n){l(n,1,0,"")},null)}function Y(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function Q(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function Z(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function X(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function ll(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function nl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function ul(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"tr",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"td",[["class","text-center empty-logs-list"],["colspan","7"]],null,null,null,null,null)),(l()(),e.Ib(2,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("Disabled")))})}function el(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,30,"tr",[["role","row"]],[[8,"id",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{ngClass:[0,"ngClass"]},null),e.Db(2,{disabled:0}),(l()(),e.qb(3,0,null,null,5,"td",[["class","text-center clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(5,0,null,null,3,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),e.pb(7,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(8,{"glyphicon-ok-circle":0,"glyphicon-ban-circle":1}),(l()(),e.qb(9,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(11,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(12,null,["",""])),(l()(),e.qb(13,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(16,null,["",""])),(l()(),e.qb(17,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(19,0,null,null,2,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(20,null,["",""])),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(22,0,null,null,4,"td",[["class","clearfix one-line"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(24,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(25,0,null,null,1,"div",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(26,null,[" ",""," "])),(l()(),e.qb(27,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(29,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(30,null,["",""]))],function(l,n){var u=l(n,2,0,!1===n.context.$implicit.enabled||n.context.$implicit.disabledRadio);l(n,1,0,u);var e=l(n,8,0,!0===n.context.$implicit.enabled&&!n.context.$implicit.disabledRadio,!1===n.context.$implicit.enabled||n.context.$implicit.disabledRadio);l(n,7,0,"glyphicon",e)},function(l,n){l(n,0,0,e.sb(1,"vap-",n.context.index,""),n.context.odd,n.context.even),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform("Enabled"))),l(n,6,0,e.sb(1,"ssid-icon-",n.context.index,""),n.context.$implicit.enabled&&!n.context.$implicit.disabledRadio),l(n,9,0,e.Jb(n,9,0,e.Ab(n,10).transform("SSID"))),l(n,11,0,e.sb(1,"ssid-name-",n.context.index,"")),l(n,12,0,n.context.$implicit.ssid),l(n,13,0,e.Jb(n,13,0,e.Ab(n,14).transform("Security"))),l(n,15,0,e.sb(1,"ssid-security-",n.context.index,"")),l(n,16,0,n.context.$implicit.security),l(n,17,0,e.Jb(n,17,0,e.Ab(n,18).transform("Radio"))),l(n,19,0,e.sb(1,"ssid-radio-",n.context.index,"")),l(n,20,0,e.Jb(n,20,0,e.Ab(n,21).transform(n.context.$implicit.radio))),l(n,22,0,e.Jb(n,22,0,e.Ab(n,23).transform("Current channel"))),l(n,25,0,e.sb(1,"ssid-channel-",n.context.index,"")),l(n,26,0,n.context.$implicit.actualChannel,!n.context.$implicit.disabled&&n.context.$implicit.frequency&&"auto"===n.context.$implicit.configuredChannel?" (auto)":""),l(n,27,0,e.Jb(n,27,0,e.Ab(n,28).transform("Connected clients"))),l(n,29,0,e.sb(1,"ssid-clients-",n.context.index,"")),l(n,30,0,!0!==n.context.$implicit.enabled||n.context.$implicit.disabledRadio?"0":n.context.$implicit.stationCount)})}function tl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,3,null,el)),e.pb(2,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Eb(3,3),e.Cb(0,c.a,[])],function(l,n){var u=n.component,t=e.Jb(n,2,0,e.Ab(n,4).transform(e.Jb(n,2,0,l(n,3,0,e.Ab(n.parent.parent,1),u.displayVaps,u.orderbyVaps,u.reverseVaps)),u.searchVapTable));l(n,2,0,t)},null)}function al(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,53,"div",[["class","vendor-tables"],["id","wifi-network"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"app-guest-wifi-timeout",[],null,null,null,d.b,d.a)),e.pb(2,114688,null,0,p.a,[g.a,r.j],null,null),(l()(),e.qb(3,0,null,null,5,"app-search-box",[],null,null,null,h.b,h.a)),e.pb(4,114688,null,0,f.a,[],null,null),(l()(),e.qb(5,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,2,"button",[["class","btn btn-default small"],["id","btn-update-vaps"],["tab-index","4"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.getRadios()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(8,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,44,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),e.qb(10,0,null,null,43,"table",[["class","dataTable vendorTable-responsive"]],null,null,null,null,null)),(l()(),e.qb(11,0,null,null,37,"thead",[],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,36,"tr",[],null,null,null,null,null)),(l()(),e.qb(13,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(14,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("enabled")&&e),e},null,null)),e.pb(15,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Active"])),(l()(),e.hb(16777216,null,null,1,null,Y)),e.pb(18,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(19,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(20,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("ssid")&&e),e},null,null)),e.pb(21,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Network name"])),(l()(),e.hb(16777216,null,null,1,null,Q)),e.pb(24,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(25,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("security")&&e),e},null,null)),e.pb(27,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Security"])),(l()(),e.hb(16777216,null,null,1,null,Z)),e.pb(30,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(31,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(32,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("radio")&&e),e},null,null)),e.pb(33,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Frequency band"])),(l()(),e.hb(16777216,null,null,1,null,X)),e.pb(36,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(37,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(38,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("configuredChannel")&&e),e},null,null)),e.pb(39,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Current channel"])),(l()(),e.hb(16777216,null,null,1,null,ll)),e.pb(42,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(43,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(44,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("stationCount")&&e),e},null,null)),e.pb(45,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Connected clients"])),(l()(),e.hb(16777216,null,null,1,null,nl)),e.pb(48,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(49,0,null,null,2,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,ul)),e.pb(51,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,tl)),e.pb(53,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0),l(n,4,0),l(n,15,0,""),l(n,18,0,"enabled"===u.orderbyVaps),l(n,21,0,""),l(n,24,0,"ssid"===u.orderbyVaps),l(n,27,0,""),l(n,30,0,"security"===u.orderbyVaps),l(n,33,0,""),l(n,36,0,"radio"===u.orderbyVaps),l(n,39,0,""),l(n,42,0,"configuredChannel"===u.orderbyVaps),l(n,45,0,""),l(n,48,0,"stationCount"===u.orderbyVaps),l(n,51,0,!u.displayVaps),l(n,53,0,u.vaps.length)},function(l,n){l(n,6,0,e.sb(1,"",e.Jb(n,6,0,e.Ab(n,7).transform("Update table")),""))})}function il(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSIDs"]))],function(l,n){l(n,1,0,"")},null)}function rl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function ol(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function sl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function bl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function cl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function dl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function pl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseVaps);l(n,1,0,"caret",u)},null)}function gl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"tr",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"td",[["class","text-center empty-logs-list"],["colspan","7"]],null,null,null,null,null)),(l()(),e.Ib(2,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("Not configured")))})}function hl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(3,null,["",""]))],null,function(l,n){l(n,0,0,e.Jb(n,0,0,e.Ab(n,1).transform("Default VLAN"))),l(n,2,0,e.sb(1,"ssid-vlan-",n.parent.context.index,"")),l(n,3,0,n.parent.context.$implicit.vlan)})}function fl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"td",[["class","clearfix text-center"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,1,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,0,"span",[["class","glyphicon glyphicon-ban-circle"],["style","font-size: 18px;"]],[[8,"id",0]],null,null,null,null))],null,function(l,n){l(n,0,0,e.Jb(n,0,0,e.Ab(n,1).transform("Default VLAN"))),l(n,3,0,e.sb(1,"ssid-def-vlan-icon-",n.parent.context.index,""))})}function ml(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,35,"tr",[["role","row"]],[[8,"id",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{ngClass:[0,"ngClass"]},null),e.Db(2,{disabled:0}),(l()(),e.qb(3,0,null,null,5,"td",[["class","text-center clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(5,0,null,null,3,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),e.pb(7,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(8,{"glyphicon-ok-circle":0,"glyphicon-ban-circle":1}),(l()(),e.qb(9,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(11,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(12,null,["",""])),(l()(),e.qb(13,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,2,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(16,null,["",""])),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(18,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(20,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(21,null,["",""])),(l()(),e.hb(16777216,null,null,1,null,hl)),e.pb(23,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,fl)),e.pb(25,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(26,0,null,null,5,"td",[["class","clearfix text-center"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(28,0,null,null,3,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(29,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),e.pb(30,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(31,{"glyphicon-ok-circle":0,"glyphicon-ban-circle":1}),(l()(),e.qb(32,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(34,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(35,null,["",""]))],function(l,n){var u=l(n,2,0,!1===n.context.$implicit.enabled||n.context.$implicit.disabledRadio);l(n,1,0,u);var e=l(n,8,0,!0===n.context.$implicit.enabled&&!n.context.$implicit.disabledRadio,!1===n.context.$implicit.enabled||n.context.$implicit.disabledRadio);l(n,7,0,"glyphicon",e),l(n,23,0,""!==n.context.$implicit.vlan),l(n,25,0,""===n.context.$implicit.vlan);var t=l(n,31,0,!0===n.context.$implicit.dynamicVlan,!1===n.context.$implicit.dynamicVlan);l(n,30,0,"glyphicon",t)},function(l,n){l(n,0,0,e.sb(1,"vap-",n.context.index,""),n.context.odd,n.context.even),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform("Enabled"))),l(n,6,0,e.sb(1,"ssid-icon-",n.context.index,""),n.context.$implicit.enabled&&!n.context.$implicit.disabledRadio),l(n,9,0,e.Jb(n,9,0,e.Ab(n,10).transform("SSID"))),l(n,11,0,e.sb(1,"ssid-name-",n.context.index,"")),l(n,12,0,n.context.$implicit.ssid),l(n,13,0,e.Jb(n,13,0,e.Ab(n,14).transform("Radio"))),l(n,15,0,e.sb(1,"ssid-radio-",n.context.index,"")),l(n,16,0,e.Jb(n,16,0,e.Ab(n,17).transform(n.context.$implicit.radio))),l(n,18,0,e.Jb(n,18,0,e.Ab(n,19).transform("Security"))),l(n,20,0,e.sb(1,"ssid-security-",n.context.index,"")),l(n,21,0,n.context.$implicit.security),l(n,26,0,e.Jb(n,26,0,e.Ab(n,27).transform("Dynamic VLAN"))),l(n,29,0,e.sb(1,"ssid-dyn-vlan-icon-",n.context.index,""),n.context.$implicit.dynamicVlan),l(n,32,0,e.Jb(n,32,0,e.Ab(n,33).transform("Connected clients"))),l(n,34,0,e.sb(1,"ssid-clients-",n.context.index,"")),l(n,35,0,!0!==n.context.$implicit.enabled||n.context.$implicit.disabledRadio?"0":n.context.$implicit.stationCount)})}function vl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,3,null,ml)),e.pb(2,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Eb(3,3),e.Cb(0,c.a,[])],function(l,n){var u=n.component,t=e.Jb(n,2,0,e.Ab(n,4).transform(e.Jb(n,2,0,l(n,3,0,e.Ab(n.parent.parent,1),u.vaps,u.orderbyVaps,u.reverseVaps)),u.searchVapTable));l(n,2,0,t)},null)}function Cl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,71,"div",[["class","vendor-tables"],["id","SSID"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"app-guest-wifi-timeout",[],null,null,null,d.b,d.a)),e.pb(2,114688,null,0,p.a,[g.a,r.j],null,null),(l()(),e.qb(3,0,null,null,17,"app-search-box",[],null,null,null,h.b,h.a)),e.pb(4,114688,null,0,f.a,[],null,null),(l()(),e.qb(5,0,null,0,6,"input",[["id","search-vaps"],["tab-index","3"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,6)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,6).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,6)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,6)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.searchVapTable=u)&&t),t},null,null)),e.pb(6,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(8,671744,null,0,m.n,[[8,null],[8,null],[8,null],[6,m.i]],{model:[0,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(12,0,null,1,4,"div",[],null,null,null,null,null)),(l()(),e.Ib(13,null,[" "," "])),e.Cb(0,c.a,[]),e.Db(15,{num:0,all:1}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(17,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),e.qb(18,0,null,null,2,"button",[["class","btn btn-default small"],["id","btn-update-vaps"],["tab-index","4"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.getVaps()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(20,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),e.qb(21,0,null,null,50,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,49,"table",[["class","dataTable vendorTable-responsive"]],null,null,null,null,null)),(l()(),e.qb(23,0,null,null,43,"thead",[],null,null,null,null,null)),(l()(),e.qb(24,0,null,null,42,"tr",[],null,null,null,null,null)),(l()(),e.qb(25,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("enabled")&&e),e},null,null)),e.pb(27,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enabled"])),(l()(),e.hb(16777216,null,null,1,null,rl)),e.pb(30,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(31,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(32,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("ssid")&&e),e},null,null)),e.pb(33,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID"])),(l()(),e.hb(16777216,null,null,1,null,ol)),e.pb(36,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(37,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(38,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("radio")&&e),e},null,null)),e.pb(39,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radio"])),(l()(),e.hb(16777216,null,null,1,null,sl)),e.pb(42,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(43,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(44,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("security")&&e),e},null,null)),e.pb(45,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Security"])),(l()(),e.hb(16777216,null,null,1,null,bl)),e.pb(48,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(49,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(50,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("vlan")&&e),e},null,null)),e.pb(51,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Default VLAN"])),(l()(),e.hb(16777216,null,null,1,null,cl)),e.pb(54,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(55,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(56,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("dynamicVlan")&&e),e},null,null)),e.pb(57,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Dynamic VLAN"])),(l()(),e.hb(16777216,null,null,1,null,dl)),e.pb(60,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(61,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(62,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderVaps("stationCount")&&e),e},null,null)),e.pb(63,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Connected clients"])),(l()(),e.hb(16777216,null,null,1,null,pl)),e.pb(66,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(67,0,null,null,2,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,gl)),e.pb(69,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,vl)),e.pb(71,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0),l(n,4,0),l(n,8,0,u.searchVapTable),l(n,27,0,""),l(n,30,0,"enabled"===u.orderbyVaps),l(n,33,0,""),l(n,36,0,"ssid"===u.orderbyVaps),l(n,39,0,""),l(n,42,0,"radio"===u.orderbyVaps),l(n,45,0,""),l(n,48,0,"security"===u.orderbyVaps),l(n,51,0,""),l(n,54,0,"vlan"===u.orderbyVaps),l(n,57,0,""),l(n,60,0,"dynamicVlan"===u.orderbyVaps),l(n,63,0,""),l(n,66,0,"stationCount"===u.orderbyVaps),l(n,69,0,!u.vaps.length),l(n,71,0,u.vaps.length)},function(l,n){var u=n.component;l(n,5,0,e.sb(1,"",e.Jb(n,5,0,e.Ab(n,11).transform("Search ...")),""),e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending);var t=e.Jb(n,13,0,e.Ab(n,16).transform("display {num} of {all}",l(n,15,0,e.Jb(n,13,0,e.Ab(n,14).transform(u.vaps,u.searchVapTable)).length,u.vaps.length)));l(n,13,0,t),l(n,18,0,e.sb(1,"",e.Jb(n,18,0,e.Ab(n,19).transform("Update table")),""))})}function Al(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["RADIUS"]))],function(l,n){l(n,1,0,"")},null)}function kl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,13,"div",[["class","row radius-server-stat"],["id","radius"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,12,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Authentication Server:"])),(l()(),e.qb(5,0,null,null,2,"dd",[["id","rad-auth-serv"]],null,null,null,null,null)),(l()(),e.Ib(6,null,["",""])),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(8,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),e.pb(9,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Accounting Server:"])),(l()(),e.qb(11,0,null,null,2,"dd",[["id","rad-acc-serv"]],null,null,null,null,null)),(l()(),e.Ib(12,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,3,0,""),l(n,9,0,"")},function(l,n){var u=n.component;l(n,6,0,e.Jb(n,6,0,e.Ab(n,7).transform(u.auth_server_and_port))),l(n,12,0,e.Jb(n,12,0,e.Ab(n,13).transform(u.acct_server_and_port)))})}function yl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radios"]))],function(l,n){l(n,1,0,"")},null)}function ql(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseRadios);l(n,1,0,"caret",u)},null)}function Il(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseRadios);l(n,1,0,"caret",u)},null)}function xl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseRadios);l(n,1,0,"caret",u)},null)}function wl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseRadios);l(n,1,0,"caret",u)},null)}function Pl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseRadios);l(n,1,0,"caret",u)},null)}function Ml(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverseRadios);l(n,1,0,"caret",u)},null)}function El(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(1,null,[" "," "]))],null,function(l,n){l(n,0,0,e.sb(1,"radio-channel-freq-",n.parent.context.index,"")),l(n,1,0," ("+n.parent.context.$implicit.frequency+("auto"===n.parent.context.$implicit.configuredChannel?", auto":"")+")")})}function jl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Db(2,{channel:0}),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,0,0,e.sb(1,"radio-radar-",n.parent.context.index,""));var u=e.Jb(n,1,0,e.Ab(n,3).transform("(Radar detected on {channel})",l(n,2,0,n.parent.context.$implicit.configuredChannel)));l(n,1,0,u)})}function Tl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,35,"tr",[["role","row"]],[[8,"id",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{ngClass:[0,"ngClass"]},null),e.Db(2,{disabled:0}),(l()(),e.qb(3,0,null,null,5,"td",[["class","clearfix text-center"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(5,0,null,null,3,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),e.pb(7,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(8,{"glyphicon-ok-circle":0,"glyphicon-ban-circle":1}),(l()(),e.qb(9,0,null,null,3,"td",[["class","clearfix one-line"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(11,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(12,null,["",""])),(l()(),e.qb(13,0,null,null,8,"td",[["class","clearfix one-line"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,6,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,3,"div",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(17,null,[" "," "])),(l()(),e.hb(16777216,null,null,1,null,El)),e.pb(19,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,jl)),e.pb(21,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(22,0,null,null,5,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(24,0,null,null,3,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(25,null,[""," "])),(l()(),e.qb(26,0,null,null,1,"span",[],[[8,"hidden",0]],null,null,null,null)),(l()(),e.Ib(-1,null,["dBm"])),(l()(),e.qb(28,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(30,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(31,null,["","/",""])),(l()(),e.qb(32,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(34,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(35,null,["",""]))],function(l,n){var u=n.component,e=l(n,2,0,n.context.$implicit.disabled);l(n,1,0,e);var t=l(n,8,0,!n.context.$implicit.disabled,n.context.$implicit.disabled);l(n,7,0,"glyphicon",t),l(n,19,0,!n.context.$implicit.disabled&&n.context.$implicit.frequency),l(n,21,0,u.radarDetected(n.context.$implicit))},function(l,n){l(n,0,0,e.sb(1,"radio=",n.context.index,""),n.context.odd,n.context.even),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform("Enabled"))),l(n,6,0,e.sb(1,"radio-enabled-icon-",n.context.index,""),!n.context.$implicit.disabled),l(n,9,0,e.Jb(n,9,0,e.Ab(n,10).transform("Radio"))),l(n,11,0,e.sb(1,"radio-freq-",n.context.index,"")),l(n,12,0,n.context.$implicit.freq),l(n,13,0,e.Jb(n,13,0,e.Ab(n,14).transform("Current channel"))),l(n,16,0,e.sb(1,"radio-channel-",n.context.index,"")),l(n,17,0,n.context.$implicit.actualChannel),l(n,22,0,e.Jb(n,22,0,e.Ab(n,23).transform("Tx-Power"))),l(n,24,0,e.sb(1,"radio-txpower-",n.context.index,"")),l(n,25,0,n.context.$implicit.txPower),l(n,26,0,n.context.$implicit.disabled||!n.context.$implicit.frequency),l(n,28,0,e.Jb(n,28,0,e.Ab(n,29).transform("Enabled SSIDs"))),l(n,30,0,e.sb(1,"radio-vaps-",n.context.index,"")),l(n,31,0,n.context.$implicit.enabled?n.context.$implicit.enabledVaps:"0",n.context.$implicit.configuredVaps),l(n,32,0,e.Jb(n,32,0,e.Ab(n,33).transform("Connected clients"))),l(n,34,0,e.sb(1,"radio-clients-",n.context.index,"")),l(n,35,0,n.context.$implicit.stationCount)})}function Fl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,63,"div",[["class","vendor-tables"],["id","radios"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,17,"app-search-box",[],null,null,null,h.b,h.a)),e.pb(2,114688,null,0,f.a,[],null,null),(l()(),e.qb(3,0,null,0,6,"input",[["id","search-radios"],["tab-index","5"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,4)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,4)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,4)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.searchRadioTable=u)&&t),t},null,null)),e.pb(4,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(6,671744,null,0,m.n,[[8,null],[8,null],[8,null],[6,m.i]],{model:[0,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(8,16384,null,0,m.k,[[4,m.j]],null,null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(10,0,null,1,4,"div",[],null,null,null,null,null)),(l()(),e.Ib(11,null,[" "," "])),e.Cb(0,c.a,[]),e.Db(13,{num:0,all:1}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,2,"button",[["class","btn btn-default small"],["id","update-radios"],["tab-index","6"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.getRadios()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(18,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),e.qb(19,0,null,null,44,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),e.qb(20,0,null,null,43,"table",[["class","dataTable vendorTable-responsive"]],null,null,null,null,null)),(l()(),e.qb(21,0,null,null,37,"thead",[],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,36,"tr",[],null,null,null,null,null)),(l()(),e.qb(23,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(24,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderRadios("enabled")&&e),e},null,null)),e.pb(25,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enabled"])),(l()(),e.hb(16777216,null,null,1,null,ql)),e.pb(28,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(29,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(30,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderRadios("radio")&&e),e},null,null)),e.pb(31,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radio"])),(l()(),e.hb(16777216,null,null,1,null,Il)),e.pb(34,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(35,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(36,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderRadios("confChannel")&&e),e},null,null)),e.pb(37,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Current channel"])),(l()(),e.hb(16777216,null,null,1,null,xl)),e.pb(40,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(41,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(42,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderRadios("txpower")&&e),e},null,null)),e.pb(43,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Tx-Power"])),(l()(),e.hb(16777216,null,null,1,null,wl)),e.pb(46,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(47,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(48,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderRadios("confVaps")&&e),e},null,null)),e.pb(49,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enabled SSIDs"])),(l()(),e.hb(16777216,null,null,1,null,Pl)),e.pb(52,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(53,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(54,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderRadios("stationCount")&&e),e},null,null)),e.pb(55,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Connected clients"])),(l()(),e.hb(16777216,null,null,1,null,Ml)),e.pb(58,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(59,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,3,null,Tl)),e.pb(61,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Eb(62,3),e.Cb(0,c.a,[])],function(l,n){var u=n.component;l(n,2,0),l(n,6,0,u.searchRadioTable),l(n,25,0,""),l(n,28,0,"enabled"===u.orderbyRadios),l(n,31,0,""),l(n,34,0,"radio"===u.orderbyRadios),l(n,37,0,""),l(n,40,0,"confChannel"===u.orderbyRadios),l(n,43,0,""),l(n,46,0,"txpower"===u.orderbyRadios),l(n,49,0,""),l(n,52,0,"confVaps"===u.orderbyRadios),l(n,55,0,""),l(n,58,0,"stationCount"===u.orderbyRadios);var t=e.Jb(n,61,0,e.Ab(n,63).transform(e.Jb(n,61,0,l(n,62,0,e.Ab(n.parent,1),u.displayRadios,u.orderbyRadios,u.reverseRadios)),u.searchRadioTable));l(n,61,0,t)},function(l,n){var u=n.component;l(n,3,0,e.sb(1,"",e.Jb(n,3,0,e.Ab(n,9).transform("Search ...")),""),e.Ab(n,8).ngClassUntouched,e.Ab(n,8).ngClassTouched,e.Ab(n,8).ngClassPristine,e.Ab(n,8).ngClassDirty,e.Ab(n,8).ngClassValid,e.Ab(n,8).ngClassInvalid,e.Ab(n,8).ngClassPending);var t=e.Jb(n,11,0,e.Ab(n,14).transform("display {num} of {all}",l(n,13,0,e.Jb(n,11,0,e.Ab(n,12).transform(u.radios,u.searchRadioTable)).length,u.radios.length)));l(n,11,0,t),l(n,16,0,e.sb(1,"",e.Jb(n,16,0,e.Ab(n,17).transform("Update table")),""))})}function Sl(l){return e.Kb(0,[e.Cb(0,C,[]),e.Cb(0,v.a,[]),(l()(),e.qb(2,0,null,null,102,"div",[["class","vendor-dialogs"],["id","wifi-status"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,2,"h3",[["class","no_margin"],["translate",""],["translate-context","title-case"]],null,null,null,null,null)),e.pb(4,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi Clients"])),(l()(),e.qb(6,0,null,null,80,"div",[["class","vendor-tables"]],null,null,null,null,null)),(l()(),e.qb(7,0,null,null,17,"app-search-box",[],null,null,null,h.b,h.a)),e.pb(8,114688,null,0,f.a,[],null,null),(l()(),e.qb(9,0,null,0,6,"input",[["id","search-clients"],["tab-index","1"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,10)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,10).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,10)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,10)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.searchStationTable=u)&&t),t},null,null)),e.pb(10,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(12,671744,null,0,m.n,[[8,null],[8,null],[8,null],[6,m.i]],{model:[0,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(14,16384,null,0,m.k,[[4,m.j]],null,null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(16,0,null,1,4,"div",[],null,null,null,null,null)),(l()(),e.Ib(17,null,[" "," "])),e.Cb(0,c.a,[]),e.Db(19,{num:0,all:1}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(21,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,2,"button",[["class","btn btn-default small"],["id","update-stations"],["tab-index","2"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.getRadios()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(24,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),e.qb(25,0,null,null,61,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,60,"table",[["class","dataTable vendorTable-responsive clients-table"]],null,null,null,null,null)),(l()(),e.qb(27,0,null,null,51,"thead",[],null,null,null,null,null)),(l()(),e.qb(28,0,null,null,50,"tr",[],null,null,null,null,null)),(l()(),e.qb(29,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(30,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("status")&&e),e},null,null)),e.pb(31,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Status"])),(l()(),e.hb(16777216,null,null,1,null,T)),e.pb(34,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(35,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(36,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("mac")&&e),e},null,null)),e.pb(37,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["MAC Address"])),(l()(),e.hb(16777216,null,null,1,null,F)),e.pb(40,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(41,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(42,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("vendor.description")&&e),e},null,null)),e.pb(43,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Manufacturer"])),(l()(),e.hb(16777216,null,null,1,null,S)),e.pb(46,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(47,0,null,null,6,"th",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,V)),e.pb(49,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,$)),e.pb(51,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,D)),e.pb(53,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(54,0,null,null,6,"th",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,B)),e.pb(56,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,K)),e.pb(58,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,_)),e.pb(60,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(61,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(62,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("tx.rate")&&e),e},null,null)),e.pb(63,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Tx rate (Mbit/s)"])),(l()(),e.hb(16777216,null,null,1,null,R)),e.pb(66,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(67,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(68,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("rx.rate")&&e),e},null,null)),e.pb(69,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Rx rate (Mbit/s)"])),(l()(),e.hb(16777216,null,null,1,null,J)),e.pb(72,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(73,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(74,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.orderSta("connected_time")&&e),e},null,null)),e.pb(75,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Since"])),(l()(),e.hb(16777216,null,null,1,null,O)),e.pb(78,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(79,0,null,null,2,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,N)),e.pb(81,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(82,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,3,null,U)),e.pb(84,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Cb(0,c.a,[]),e.Eb(86,3),(l()(),e.hb(16777216,null,null,1,null,L)),e.pb(88,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,G)),e.pb(90,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,al)),e.pb(92,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,il)),e.pb(94,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,Cl)),e.pb(96,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,Al)),e.pb(98,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,kl)),e.pb(100,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,yl)),e.pb(102,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,Fl)),e.pb(104,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null)],function(l,n){var u=n.component;l(n,4,0,""),l(n,8,0),l(n,12,0,u.searchStationTable),l(n,31,0,""),l(n,34,0,"status"===u.orderbySta),l(n,37,0,""),l(n,40,0,"mac"===u.orderbySta),l(n,43,0,""),l(n,46,0,"vendor.description"===u.orderbySta),l(n,49,0,null),l(n,51,0,null),l(n,53,0,"radio"===u.orderbySta),l(n,56,0,null),l(n,58,0,null),l(n,60,0,"ssid"===u.orderbySta),l(n,63,0,""),l(n,66,0,"tx.rate"===u.orderbySta),l(n,69,0,""),l(n,72,0,"rx.rate"===u.orderbySta),l(n,75,0,""),l(n,78,0,"connected_time"===u.orderbySta),l(n,81,0,!u.stations.length);var t=e.Jb(n,84,0,l(n,86,0,e.Ab(n,0),e.Jb(n,84,0,e.Ab(n,85).transform(u.stations,u.searchStationTable)),u.orderbySta,u.reverseSta));l(n,84,0,t),l(n,88,0,u.bridge.enabled),l(n,90,0,null),l(n,92,0,null),l(n,94,0,null),l(n,96,0,null),l(n,98,0,!u.notConfigured),l(n,100,0,!u.notConfigured),l(n,102,0,null),l(n,104,0,null)},function(l,n){var u=n.component;l(n,9,0,e.sb(1,"",e.Jb(n,9,0,e.Ab(n,15).transform("Search ...")),""),e.Ab(n,14).ngClassUntouched,e.Ab(n,14).ngClassTouched,e.Ab(n,14).ngClassPristine,e.Ab(n,14).ngClassDirty,e.Ab(n,14).ngClassValid,e.Ab(n,14).ngClassInvalid,e.Ab(n,14).ngClassPending);var t=e.Jb(n,17,0,e.Ab(n,20).transform("display {num} of {all}",l(n,19,0,e.Jb(n,17,0,e.Ab(n,18).transform(u.stations,u.searchStationTable)).length,u.stations.length)));l(n,17,0,t),l(n,22,0,e.sb(1,"",e.Jb(n,22,0,e.Ab(n,23).transform("Update table")),""))})}function Vl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-status",[],null,null,null,Sl,j)),e.Fb(512,null,q.a,q.a,[I.a,x.a]),e.pb(2,245760,null,0,w.a,[q.a,P.a,M.a,E.a],null,null)],function(l,n){l(n,2,0)},null)}var $l=e.mb("app-status",w.a,Vl,{},{},[]),Dl=u("8b39"),Bl=u("chmc"),Kl=u("nQCY"),_l=u("5SxG"),Rl=u("k1Yr"),Jl=u("IZUe"),Ol=u("UVPe"),Nl=u("5Ki+"),Ul=u("PIxe"),Wl=u("008C"),Hl=u("Obbf"),zl=u("ZYCi"),Ll=e.ob({encapsulation:2,styles:[],data:{}});function Gl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"label",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Disabled"]))],function(l,n){l(n,1,0,"")},null)}function Yl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Gl)),e.pb(2,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,1==n.component.enable)},null)}function Ql(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"option",[["translate",""],["value",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11b/g/n "])),(l()(),e.qb(5,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["*"]))],function(l,n){l(n,1,0,""),l(n,2,0,""),l(n,3,0,"")},null)}function Zl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11g"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11g/n"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11g"),l(n,3,0,"11g")},null)}function Xl(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11n"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11n"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11n"),l(n,3,0,"11n")},null)}function ln(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"option",[["translate",""],["value",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11a/n/ac "])),(l()(),e.qb(5,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["*"]))],function(l,n){l(n,1,0,""),l(n,2,0,""),l(n,3,0,"")},null)}function nn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11n"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11n/ac"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11n"),l(n,3,0,"11n")},null)}function un(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11ac"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11ac"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11ac"),l(n,3,0,"11ac")},null)}function en(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit.channel,"")),l(n,2,0,e.sb(1,"",n.context.$implicit.channel,""))},function(l,n){l(n,0,0,!n.context.$implicit.enabled),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.label)))})}function tn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Recommended: Auto, 1, 6, 11"]))],function(l,n){l(n,1,0,"")},null)}function an(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Recommended: Auto"]))],function(l,n){l(n,1,0,"")},null)}function rn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,20,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,19,"div",[["class","form-group"],["style","margin-bottom: 0px;"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"label",[["class","control-label col-md-3"],["for","rescan_interval"],["style","margin-top: 10px;"],["translate",""]],null,null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Scan interval (min.):"])),(l()(),e.qb(5,0,null,null,15,"div",[["class","col-md-7"],["style","margin-top: 10px;"]],null,null,null,null,null)),(l()(),e.qb(6,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["name","rescan_interval"],["triggers","none"],["type","number"]],[[8,"id",0],[8,"placeholder",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,7)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,7).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,7)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,7)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e.Ab(l,8).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e.Ab(l,8).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,8).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.rescan.interval=u)&&t),t},null,null)),e.pb(7,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(8,16384,null,0,m.u,[e.E,e.k],null,null),e.pb(9,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.p]),e.Fb(1024,null,m.i,function(l,n){return[l,n]},[m.d,m.u]),e.pb(12,671744,[["rescaninterval",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(14,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(15,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(18,0,null,null,2,"div",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(19,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["When scan interval is set to 0 this function is disabled. Recommended: 240 minutes"]))],function(l,n){var u=n.component;l(n,3,0,""),l(n,9,0,u.rescanIntervalPattern),l(n,12,0,"rescan_interval",u.rescan.interval),l(n,15,0,e.sb(1,"",e.Jb(n,15,0,e.Ab(n,16).transform("Please enter a value of at least 15 minutes or 0 to disable the functionality!")),""),"none","text-danger",e.sb(1,"",e.Ab(n,12).invalid||0!=u.rescan.interval&&u.rescan.interval<15||"","")),l(n,19,0,"")},function(l,n){l(n,6,0,e.sb(1,"rescan_interval_",n.component.radioName,""),e.sb(1,"",e.Jb(n,6,1,e.Ab(n,17).transform("Scan interval in minutes")),""),e.Ab(n,9).pattern?e.Ab(n,9).pattern:null,e.Ab(n,14).ngClassUntouched,e.Ab(n,14).ngClassTouched,e.Ab(n,14).ngClassPristine,e.Ab(n,14).ngClassDirty,e.Ab(n,14).ngClassValid,e.Ab(n,14).ngClassInvalid,e.Ab(n,14).ngClassPending)})}function on(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"option",[["translate",""],["value","HT40"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["20/40 MHz "])),(l()(),e.qb(5,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["*"]))],function(l,n){l(n,1,0,""),l(n,2,0,"HT40"),l(n,3,0,"HT40")},null)}function sn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","HT20"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["20 MHz"]))],function(l,n){l(n,1,0,""),l(n,2,0,"HT20"),l(n,3,0,"HT20")},null)}function bn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"option",[["translate",""],["value","VHT80"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["80 MHz "])),(l()(),e.qb(5,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["*"]))],function(l,n){l(n,1,0,""),l(n,2,0,"VHT80"),l(n,3,0,"VHT80")},null)}function cn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","VHT40"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["40 MHz"]))],function(l,n){l(n,1,0,""),l(n,2,0,"VHT40"),l(n,3,0,"VHT40")},null)}function dn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","VHT20"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["20 MHz"]))],function(l,n){l(n,1,0,""),l(n,2,0,"VHT20"),l(n,3,0,"VHT20")},null)}function pn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,5,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Db(4,{power:0}),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){var u=n.component;l(n,1,0,e.sb(1,"",u.txPowerVeryHigh,"")),l(n,2,0,e.sb(1,"",u.txPowerVeryHigh,""))},function(l,n){var u=n.component,t=e.Jb(n,3,0,e.Ab(n,5).transform("Very High ({power} dBm)",l(n,4,0,u.txPowerVeryHigh)));l(n,3,0,t)})}function gn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"input",[["max","20"],["min","3"],["name","radio0"],["step","1"],["type","range"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,1)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,1)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,1)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e.Ab(l,2).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e.Ab(l,2).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.txPowerCustom=u)&&t),t},null,null)),e.pb(1,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(2,16384,null,0,m.v,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l,n){return[l,n]},[m.d,m.v]),e.pb(4,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(6,16384,null,0,m.k,[[4,m.j]],null,null)],function(l,n){l(n,4,0,"radio0",n.component.txPowerCustom)},function(l,n){l(n,0,0,e.sb(1,"tx-range_",n.component.radioName,""),e.Ab(n,6).ngClassUntouched,e.Ab(n,6).ngClassTouched,e.Ab(n,6).ngClassPristine,e.Ab(n,6).ngClassDirty,e.Ab(n,6).ngClassValid,e.Ab(n,6).ngClassInvalid,e.Ab(n,6).ngClassPending)})}function hn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"input",[["max","27"],["min","3"],["name","radio1"],["step","1"],["type","range"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,1)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,1)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,1)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e.Ab(l,2).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e.Ab(l,2).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.txPowerCustom=u)&&t),t},null,null)),e.pb(1,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(2,16384,null,0,m.v,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l,n){return[l,n]},[m.d,m.v]),e.pb(4,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(6,16384,null,0,m.k,[[4,m.j]],null,null)],function(l,n){l(n,4,0,"radio1",n.component.txPowerCustom)},function(l,n){l(n,0,0,e.sb(1,"tx-range_",n.component.radioName,""),e.Ab(n,6).ngClassUntouched,e.Ab(n,6).ngClassTouched,e.Ab(n,6).ngClassPristine,e.Ab(n,6).ngClassDirty,e.Ab(n,6).ngClassValid,e.Ab(n,6).ngClassInvalid,e.Ab(n,6).ngClassPending)})}function fn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,8,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"label",[["class","control-label col-md-3"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Individual transmit power:"])),(l()(),e.qb(4,0,null,null,4,"div",[["class","tx-wrapper col-md-7"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,gn)),e.pb(6,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,hn)),e.pb(8,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,u.radio0),l(n,8,0,u.radio1)},null)}function mn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["11"]))],null,null)}function vn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["5.5"]))],null,null)}function Cn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["2"]))],null,null)}function An(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["1"]))],null,null)}function kn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"td",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,5,"input",[["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,2).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.supportedRates[l.context.index]=u)&&t),"change"===n&&(t=!1!==a.onSupportedChange(l.context.index)&&t),t},null,null)),e.pb(2,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(4,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(6,16384,null,0,m.k,[[4,m.j]],null,null)],function(l,n){var u=n.component;l(n,4,0,e.sb(1,"supportedRates",n.context.index,""),u.supportedRates[n.context.index])},function(l,n){l(n,1,0,e.Ab(n,6).ngClassUntouched,e.Ab(n,6).ngClassTouched,e.Ab(n,6).ngClassPristine,e.Ab(n,6).ngClassDirty,e.Ab(n,6).ngClassValid,e.Ab(n,6).ngClassInvalid,e.Ab(n,6).ngClassPending)})}function yn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"td",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,5,"input",[["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,2).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.basicRate[l.context.index]=u)&&t),"change"===n&&(t=!1!==a.onBasicChange(l.context.index)&&t),t},null,null)),e.pb(2,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(4,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(6,16384,null,0,m.k,[[4,m.j]],null,null)],function(l,n){var u=n.component;l(n,4,0,e.sb(1,"basicRate",n.context.index,""),u.basicRate[n.context.index])},function(l,n){l(n,1,0,e.Ab(n,6).ngClassUntouched,e.Ab(n,6).ngClassTouched,e.Ab(n,6).ngClassPristine,e.Ab(n,6).ngClassDirty,e.Ab(n,6).ngClassValid,e.Ab(n,6).ngClassInvalid,e.Ab(n,6).ngClassPending)})}function qn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,47,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"label",[["class","control-label col-md-3"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Data rates:"])),(l()(),e.qb(4,0,null,null,43,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,42,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,41,"table",[["class","table table-bordered table-condensed\n                                  wifi-data-rates"],["style","margin-bottom: 0px;"]],null,null,null,null,null)),(l()(),e.qb(7,0,null,null,40,"tbody",[],null,null,null,null,null)),(l()(),e.qb(8,0,null,null,27,"tr",[],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,2,"td",[["class","left-align"],["translate",""],["width","100px"]],null,null,null,null,null)),e.pb(10,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Rate (Mbit/s)"])),(l()(),e.qb(12,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["54"])),(l()(),e.qb(14,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["48"])),(l()(),e.qb(16,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["36"])),(l()(),e.qb(18,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["24"])),(l()(),e.qb(20,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["18"])),(l()(),e.qb(22,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["12"])),(l()(),e.hb(16777216,null,null,1,null,mn)),e.pb(25,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(26,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["9"])),(l()(),e.qb(28,0,null,null,1,"td",[],null,null,null,null,null)),(l()(),e.Ib(-1,null,["6"])),(l()(),e.hb(16777216,null,null,1,null,vn)),e.pb(31,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Cn)),e.pb(33,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,An)),e.pb(35,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(36,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e.qb(37,0,null,null,2,"td",[["class","left-align"],["translate",""],["width","100px"]],null,null,null,null,null)),e.pb(38,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Supported"])),(l()(),e.hb(16777216,null,null,1,null,kn)),e.pb(41,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),(l()(),e.qb(42,0,null,null,5,"tr",[],null,null,null,null,null)),(l()(),e.qb(43,0,null,null,2,"td",[["class","left-align"],["translate",""],["width","100px"]],null,null,null,null,null)),e.pb(44,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Basic"])),(l()(),e.hb(16777216,null,null,1,null,yn)),e.pb(47,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,10,0,""),l(n,25,0,u.radio0),l(n,31,0,u.radio0),l(n,33,0,u.radio0),l(n,35,0,u.radio0),l(n,38,0,""),l(n,41,0,u.rates,u.trackByIndex),l(n,44,0,""),l(n,47,0,u.basicRate,u.trackByIndex)},null)}function In(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,10,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"label",[["class","control-label checkbox-control-label col-md-3"],["for","indoorUse"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Indoor use only:"])),(l()(),e.qb(4,0,null,null,6,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,5,"input",[["name","indoorUse"],["type","checkbox"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,6).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,6).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.indoorUse.enabled=u)&&t),"change"===n&&(t=!1!==a.updateChannelListView()&&t),t},null,null)),e.pb(6,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(8,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,8,0,"indoorUse",u.indoorUse.enabled)},function(l,n){l(n,5,0,e.sb(1,"indoorUse_",n.component.radioName,""),e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending)})}function xn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,e.Ab(n.parent,4).invalid,"save")},null)}function wn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function Pn(l){return e.Kb(0,[e.Gb(402653184,1,{delos:0}),(l()(),e.qb(1,0,null,null,140,"div",[["class","vendor-dialogs"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,139,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0,a=l.component;return"submit"===n&&(t=!1!==e.Ab(l,4).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,4).onReset()&&t),"submit"===n&&(t=!1!==a.save()&&t),t},null,null)),e.pb(3,16384,null,0,m.w,[],null,null),e.pb(4,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(6,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(7,0,null,null,7,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(8,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["name","enable"],["trueValue","0"],["type","checkbox"]],[[8,"id",0],[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,10).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.enable=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(10,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),e.pb(11,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(12,0,null,null,2,"label",[["translate",""]],[[8,"htmlFor",0]],null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.hb(16777216,null,null,1,null,Yl)),e.pb(16,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(17,0,null,null,124,"div",[["class","form-group clearfix"]],[[8,"hidden",0]],null,null,null,null)),(l()(),e.qb(18,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(19,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Basic Settings"])),(l()(),e.qb(21,0,null,null,28,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,2,"label",[["class","control-label col-md-3"],["for","wifimode"],["translate",""]],null,null,null,null,null)),e.pb(23,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Mode:"])),(l()(),e.qb(25,0,null,null,24,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,17,"select",[["class","form-control"],["name","mode"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,27).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,27).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.mode=u)&&t),t},null,null)),e.pb(27,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(29,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(31,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Ql)),e.pb(33,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Zl)),e.pb(35,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Xl)),e.pb(37,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ln)),e.pb(39,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,nn)),e.pb(41,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,un)),e.pb(43,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(44,0,null,null,2,"div",[["class","hint-text"],["translate",""]],[[8,"hidden",0]],null,null,null,null)),e.pb(45,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Recommended: 802.11g/n"])),(l()(),e.qb(47,0,null,null,2,"div",[["class","hint-text"],["translate",""]],[[8,"hidden",0]],null,null,null,null)),e.pb(48,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Recommended: 802.11n/ac"])),(l()(),e.qb(50,0,null,null,19,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(51,0,null,null,2,"label",[["class","control-label col-md-3"],["for","wifichannel"],["translate",""]],null,null,null,null,null)),e.pb(52,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Channel:"])),(l()(),e.qb(54,0,null,null,13,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(55,0,null,null,7,"select",[["class","form-control"],["name","channel"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,56).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,56).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.channel=u)&&t),t},null,null)),e.pb(56,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(58,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(60,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,en)),e.pb(62,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(63,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,tn)),e.pb(65,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,an)),e.pb(67,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,rn)),e.pb(69,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(70,0,null,null,23,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(71,0,null,null,2,"label",[["class","control-label col-md-3"],["for","wifibandwidth"],["translate",""]],null,null,null,null,null)),e.pb(72,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Channel bandwidth:"])),(l()(),e.qb(74,0,null,null,19,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(75,0,null,null,15,"select",[["class","form-control"],["name","bandwidth"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,76).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,76).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.bandwidth=u)&&t),t},null,null)),e.pb(76,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(78,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(80,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,on)),e.pb(82,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,sn)),e.pb(84,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,bn)),e.pb(86,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,cn)),e.pb(88,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,dn)),e.pb(90,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(91,0,null,null,2,"div",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(92,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Recommended: 20 MHz"])),(l()(),e.qb(94,0,null,null,47,"div",[],null,null,null,null,null)),(l()(),e.qb(95,0,null,null,0,"div",[],null,null,null,null,null)),(l()(),e.qb(96,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(97,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Advanced Settings"])),(l()(),e.qb(99,0,null,null,36,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(100,0,null,null,2,"label",[["class","control-label col-md-3"],["for","wifitransmit"],["translate",""]],null,null,null,null,null)),e.pb(101,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Max. transmit power:"])),(l()(),e.qb(103,0,null,null,32,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(104,0,[["txpowerSelect",1]],null,31,"select",[["class","form-control"],["name","txpower"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,105).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,105).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.txpower=u)&&t),t},null,null)),e.pb(105,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(107,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(109,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(110,0,null,null,5,"option",[],null,null,null,null,null)),e.pb(111,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(112,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(113,null,["",""])),e.Db(114,{power:0}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(116,0,null,null,5,"option",[],null,null,null,null,null)),e.pb(117,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(118,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(119,null,["",""])),e.Db(120,{power:0}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(122,0,null,null,5,"option",[],null,null,null,null,null)),e.pb(123,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(124,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(125,null,["",""])),e.Db(126,{power:0}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(16777216,null,null,1,null,pn)),e.pb(129,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(130,0,null,null,5,"option",[],null,null,null,null,null)),e.pb(131,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(132,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(133,null,[" ",""])),e.Db(134,{power:0}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(16777216,null,null,1,null,fn)),e.pb(137,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,qn)),e.pb(139,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,In)),e.pb(141,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(142,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,xn)),e.pb(144,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,wn)),e.pb(146,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,10,0,"0","1"),l(n,11,0),l(n,13,0,""),l(n,16,0,null),l(n,19,0,""),l(n,23,0,""),l(n,29,0,"mode",u.mode),l(n,33,0,u.radio0),l(n,35,0,u.radio0),l(n,37,0,u.radio0),l(n,39,0,u.radio1),l(n,41,0,u.radio1),l(n,43,0,u.radio1),l(n,45,0,""),l(n,48,0,""),l(n,52,0,""),l(n,58,0,"channel",u.channel),l(n,62,0,u.channels),l(n,65,0,u.radio0),l(n,67,0,u.radio1),l(n,69,0,"auto"===u.channel),l(n,72,0,""),l(n,78,0,"bandwidth",u.bandwidth),l(n,82,0,u.radio0),l(n,84,0,u.radio0),l(n,86,0,u.radio1),l(n,88,0,u.radio1),l(n,90,0,u.radio1),l(n,92,0,""),l(n,97,0,""),l(n,101,0,""),l(n,107,0,"txpower",u.txpower),l(n,111,0,e.sb(1,"",u.txPowerLow,"")),l(n,112,0,e.sb(1,"",u.txPowerLow,"")),l(n,117,0,e.sb(1,"",u.txPowerMedium,"")),l(n,118,0,e.sb(1,"",u.txPowerMedium,"")),l(n,123,0,e.sb(1,"",u.txPowerHigh,"")),l(n,124,0,e.sb(1,"",u.txPowerHigh,"")),l(n,129,0,u.radio1),l(n,131,0,e.sb(1,"",u.txPowerCustomInit,"")),l(n,132,0,e.sb(1,"",u.txPowerCustomInit,"")),l(n,137,0,e.Ab(n,104).selectedIndex==e.Ab(n,104).length-1),l(n,139,0,!1),l(n,141,0,u.radio1&&u.indoorUse&&1==u.indoorUse.available),l(n,144,0,e.Ab(n,4).dirty),l(n,146,0,e.Ab(n,4).dirty)},function(l,n){var u=n.component;l(n,2,0,e.Ab(n,6).ngClassUntouched,e.Ab(n,6).ngClassTouched,e.Ab(n,6).ngClassPristine,e.Ab(n,6).ngClassDirty,e.Ab(n,6).ngClassValid,e.Ab(n,6).ngClassInvalid,e.Ab(n,6).ngClassPending),l(n,8,0,e.sb(1,"enable_",u.radioName,""),u.enable,0==u.enable),l(n,12,0,e.sb(1,"enable_",u.radioName,"")),l(n,17,0,0!=u.enable),l(n,26,0,e.sb(1,"wifimode_",u.radioName,""),e.Ab(n,31).ngClassUntouched,e.Ab(n,31).ngClassTouched,e.Ab(n,31).ngClassPristine,e.Ab(n,31).ngClassDirty,e.Ab(n,31).ngClassValid,e.Ab(n,31).ngClassInvalid,e.Ab(n,31).ngClassPending),l(n,44,0,u.radio1),l(n,47,0,u.radio0),l(n,55,0,e.sb(1,"wifichannel_",u.radioName,""),e.Ab(n,60).ngClassUntouched,e.Ab(n,60).ngClassTouched,e.Ab(n,60).ngClassPristine,e.Ab(n,60).ngClassDirty,e.Ab(n,60).ngClassValid,e.Ab(n,60).ngClassInvalid,e.Ab(n,60).ngClassPending),l(n,75,0,e.sb(1,"wifibandwidth_",u.radioName,""),e.Ab(n,80).ngClassUntouched,e.Ab(n,80).ngClassTouched,e.Ab(n,80).ngClassPristine,e.Ab(n,80).ngClassDirty,e.Ab(n,80).ngClassValid,e.Ab(n,80).ngClassInvalid,e.Ab(n,80).ngClassPending),l(n,104,0,e.sb(1,"wifitransmit_",u.radioName,""),e.Ab(n,109).ngClassUntouched,e.Ab(n,109).ngClassTouched,e.Ab(n,109).ngClassPristine,e.Ab(n,109).ngClassDirty,e.Ab(n,109).ngClassValid,e.Ab(n,109).ngClassInvalid,e.Ab(n,109).ngClassPending);var t=e.Jb(n,113,0,e.Ab(n,115).transform("Low ({power} dBm)",l(n,114,0,u.txPowerLow)));l(n,113,0,t);var a=e.Jb(n,119,0,e.Ab(n,121).transform("Medium ({power} dBm)",l(n,120,0,u.txPowerMedium)));l(n,119,0,a);var i=e.Jb(n,125,0,e.Ab(n,127).transform("High ({power} dBm)",l(n,126,0,u.txPowerHigh)));l(n,125,0,i);var r=e.Jb(n,133,0,e.Ab(n,135).transform("Individual ({power} dBm)",l(n,134,0,u.txPowerCustom)));l(n,133,0,r)})}function Mn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-radio",[],null,null,null,Pn,Ll)),e.Fb(512,null,Nl.a,Nl.a,[I.a,x.a]),e.pb(2,245760,null,0,Ul.a,[Nl.a,E.a,Wl.a,Hl.a,M.a,zl.m],null,null)],function(l,n){l(n,2,0)},null)}var En=e.mb("app-radio",Ul.a,Mn,{radioType:"radioType"},{},[]),jn=u("CkFY"),Tn=u("uAiS"),Fn=u("QRwJ"),Sn=u("ZTy4"),Vn=u("CPDd"),$n=e.ob({encapsulation:0,styles:[[".control-2line-label[_ngcontent-%COMP%]{padding-top:0;margin-top:-4px}.btn-group-label[_ngcontent-%COMP%]{margin-right:10px}.control-label-checkbox[_ngcontent-%COMP%]{padding:0;text-align:right}.row[_ngcontent-%COMP%] > .col-md-6[_ngcontent-%COMP%]{padding-left:0;margin-top:0}"]],data:{}});function Dn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"button",[["btnRadio","2,4+5 GHz"],["class","btn btn-primary"],["id","wifi-button-def"],["name","radioModeBoth"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,2).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radioMode=u)&&t),"click"===n&&(t=!1!==a.selectRadioMode("2,4+5 GHz")&&t),t},null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(4,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(6,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["2.4 GHz + 5 GHz"]))],function(l,n){var u=n.component;l(n,1,0,""),l(n,2,0,"2,4+5 GHz"),l(n,4,0,"radioModeBoth",u.radioMode)},function(l,n){l(n,0,0,e.Ab(n,2).isActive,e.Ab(n,2).isActive,e.Ab(n,6).ngClassUntouched,e.Ab(n,6).ngClassTouched,e.Ab(n,6).ngClassPristine,e.Ab(n,6).ngClassDirty,e.Ab(n,6).ngClassValid,e.Ab(n,6).ngClassInvalid,e.Ab(n,6).ngClassPending)})}function Bn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"button",[["btnRadio","2,4Ghz"],["class","btn btn-primary"],["id","wifi-button-off0"],["name","radioMode0"],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,1).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radioMode=u)&&t),"click"===n&&(t=!1!==a.selectRadioMode("2,4Ghz")&&t),t},null,null)),e.pb(1,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(3,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(5,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(6,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){var u=n.component;l(n,1,0,"2,4Ghz"),l(n,3,0,"radioMode0",u.radioMode)},function(l,n){var u=n.component;l(n,0,0,e.Ab(n,1).isActive,e.Ab(n,1).isActive,e.Ab(n,5).ngClassUntouched,e.Ab(n,5).ngClassTouched,e.Ab(n,5).ngClassPristine,e.Ab(n,5).ngClassDirty,e.Ab(n,5).ngClassValid,e.Ab(n,5).ngClassInvalid,e.Ab(n,5).ngClassPending),l(n,6,0,u.dualRadio?"2.4 GHz":e.Jb(n,6,0,e.Ab(n,7).transform("on")))})}function Kn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"button",[["btnRadio","5Ghz"],["class","btn btn-primary"],["id","wifi-button-reduced"],["name","radioMode1"],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,1).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radioMode=u)&&t),"click"===n&&(t=!1!==a.selectRadioMode("5Ghz")&&t),t},null,null)),e.pb(1,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(3,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(5,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(6,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){var u=n.component;l(n,1,0,"5Ghz"),l(n,3,0,"radioMode1",u.radioMode)},function(l,n){var u=n.component;l(n,0,0,e.Ab(n,1).isActive,e.Ab(n,1).isActive,e.Ab(n,5).ngClassUntouched,e.Ab(n,5).ngClassTouched,e.Ab(n,5).ngClassPristine,e.Ab(n,5).ngClassDirty,e.Ab(n,5).ngClassValid,e.Ab(n,5).ngClassInvalid,e.Ab(n,5).ngClassPending),l(n,6,0,u.dualRadio?"5 GHz":e.Jb(n,6,0,e.Ab(n,7).transform("on")))})}function _n(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,6,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,3,"label",[["class","control-label-checkbox col-md-4"],["for","use-common"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(4,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Use common settings"])),(l()(),e.qb(6,0,null,null,1,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(7,0,null,null,0,"input",[["id","use-common"],["name","common"],["type","checkbox"]],[[8,"checked",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.changeCommonSettings()&&e),e},null,null))],function(l,n){l(n,4,0,"")},function(l,n){l(n,7,0,n.component.useCommonSettings)})}function Rn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Jn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Rn)),e.pb(3,540672,null,0,i.v,[e.P],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],function(l,n){l(n,3,0,e.Ab(n.parent.parent,42))},null)}function On(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Nn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Un(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,6,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,On)),e.pb(4,540672,null,0,i.v,[e.P],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null),(l()(),e.qb(5,0,null,null,2,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Nn)),e.pb(7,540672,null,0,i.v,[e.P],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],function(l,n){l(n,4,0,e.Ab(n.parent.parent,40)),l(n,7,0,e.Ab(n.parent.parent,41))},null)}function Wn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,_n)),e.pb(2,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Jn)),e.pb(4,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Un)),e.pb(6,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.dualRadio),l(n,4,0,u.useCommonSettings),l(n,6,0,!u.useCommonSettings)},null)}function Hn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function zn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Hn)),e.pb(2,540672,null,0,i.v,[e.P],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],function(l,n){l(n,2,0,e.Ab(n.parent,40))},null)}function Ln(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function Gn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Ln)),e.pb(2,540672,null,0,i.v,[e.P],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],function(l,n){l(n,2,0,e.Ab(n.parent,41))},null)}function Yn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,"div",[],null,null,null,null,null))],null,null)}function Qn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit.channel,"")),l(n,2,0,e.sb(1,"",n.context.$implicit.channel,""))},function(l,n){l(n,0,0,!n.context.$implicit.enabled),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.label)))})}function Zn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11b/g/n"]))],function(l,n){l(n,1,0,""),l(n,2,0,""),l(n,3,0,"")},null)}function Xn(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11g"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11g/n"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11g"),l(n,3,0,"11g")},null)}function lu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11n"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11n"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11n"),l(n,3,0,"11n")},null)}function nu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,24,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(3,16777216,null,null,11,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["containerClass","text-danger"],["id","key-radio0ssid"],["maxlength","64"],["name","key-radio0ssid"],["triggers","none"]],[[8,"type",0],[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,4)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,4)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,4)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.key=u)&&t),"keyup"===n&&(t=!1!==a.keySsidCheck(a.radio0Vap)&&t),"focus"===n&&(t=!1!==a.keySsidCheck(a.radio0Vap)&&t),t},null,null)),e.pb(4,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(5,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(6,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(7,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(10,671744,[["radio0key",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(12,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(13,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleKeyVisibility0"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0,t=l.component;return"click"===n&&(e=!1!==t.toggleKeyVisibility(t.radio0Vap)&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(19,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(20,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(21,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),e.qb(22,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(23,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){var u=n.component;l(n,5,0,!0),l(n,6,0,"64"),l(n,7,0,u.regExPass),l(n,10,0,"key-radio0ssid",u.radio0Vap.key),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,14).transform(u.key_ssid_error)),""),"none","text-danger",e.sb(1,"",e.Ab(n,10).invalid&&u.key_ssid_error||"",""));var t=l(n,21,0,"text"==u.keyInputTypeRadio0,"password"==u.keyInputTypeRadio0);l(n,20,0,"glyphicon ",t)},function(l,n){var u=n.component;l(n,3,1,[e.sb(1,"",u.keyInputTypeRadio0,""),e.Ab(n,5).required?"":null,e.Ab(n,6).maxlength?e.Ab(n,6).maxlength:null,e.Ab(n,7).pattern?e.Ab(n,7).pattern:null,e.Ab(n,12).ngClassUntouched,e.Ab(n,12).ngClassTouched,e.Ab(n,12).ngClassPristine,e.Ab(n,12).ngClassDirty,e.Ab(n,12).ngClassValid,e.Ab(n,12).ngClassInvalid,e.Ab(n,12).ngClassPending]),l(n,16,0,e.Jb(n,16,0,"text"==u.keyInputTypeRadio0?e.Ab(n,17).transform("Hide password"):e.Ab(n,18).transform("Show password"))),l(n,23,0,e.Jb(n,23,0,e.Ab(n,24).transform("A passphrase (8-63 characters) or a pre-shared key (64 characters) is required")))})}function uu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(2,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("Your WiFi is not encrypted. Please activate the encryption.")))})}function eu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,99,"form",[["class","form-horizontal"],["name","radio0"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,2).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,2).onReset()&&t),t},null,null)),e.pb(1,16384,null,0,m.w,[],null,null),e.pb(2,4210688,[[2,4],["radio0",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(4,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(5,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(6,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,[" 2.4 GHz"])),(l()(),e.qb(8,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,2,"label",[["class","control-label col-md-4 control-2line-label"],["for","radio0name"],["translate",""]],null,null,null,null,null)),e.pb(10,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["2.4 GHz network name:"])),(l()(),e.qb(12,0,null,null,12,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(13,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","radio0name"],["name","radio0name"],["required",""],["triggers","none"],["type","text"]],[[8,"placeholder",0],[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,14)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,14).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,14)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,14)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.ssid=u)&&t),"keyup"===n&&(t=!1!==a.ssidCheck(a.radio0Vap)&&t),"focus"===n&&(t=!1!==a.ssidCheck(a.radio0Vap)&&t),t},null,null)),e.pb(14,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(15,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(16,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n){return[l,n]},[m.q,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(19,671744,[["radio0name",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(21,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(22,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(25,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,2,"label",[["class","control-label col-md-4"],["for","channel0"],["translate",""]],null,null,null,null,null)),e.pb(27,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Channel:"])),(l()(),e.qb(29,0,null,null,8,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(30,0,null,null,7,"select",[["class","form-control"],["name","channel0"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,31).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,31).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.channel0=u)&&t),t},null,null)),e.pb(31,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(33,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(35,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Qn)),e.pb(37,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(38,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(39,0,null,null,2,"label",[["class","control-label col-md-4"],["for","radio0mode"],["translate",""]],null,null,null,null,null)),e.pb(40,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Mode:"])),(l()(),e.qb(42,0,null,null,12,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(43,0,null,null,11,"select",[["class","form-control"],["name","radio0mode"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,44).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,44).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.radio0mode=u)&&t),t},null,null)),e.pb(44,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(46,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(48,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Zn)),e.pb(50,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Xn)),e.pb(52,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,lu)),e.pb(54,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(55,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(56,0,null,null,9,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(57,0,null,null,3,"label",[["class","control-label-checkbox col-md-4"],["for","ssid-br-0"]],null,null,null,null,null)),(l()(),e.qb(58,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(59,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Hide SSID:"])),(l()(),e.qb(61,0,null,null,4,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(62,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","ssid-br-0"],["name","ssid-br-0"],["translate",""],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,65).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.radio0Vap.hidden=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(64,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(65,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(66,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e.qb(67,0,null,null,2,"label",[["class","btn-group-label"],["translate",""]],null,null,null,null,null)),e.pb(68,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Encryption:"])),(l()(),e.qb(70,0,null,null,25,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(71,0,null,null,24,"div",[["class","btn-group "]],null,null,null,null,null)),(l()(),e.qb(72,0,null,null,7,"button",[["btnRadio","psk2"],["class","btn btn-primary"],["id","encryption-radio0-wpa"],["name","encryptionRadio0"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,74).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio0Vap)&&t),t},null,null)),e.pb(73,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(74,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(76,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(78,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA2"])),(l()(),e.qb(80,0,null,null,7,"button",[["btnRadio","psk-mixed+tkip+ccmp"],["class","btn btn-primary"],["id","encryption-radio0-wpa-wpa2"],["name","encryptionRadio0"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,82).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio0Vap)&&t),t},null,null)),e.pb(81,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(82,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(84,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(86,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA/WPA2"])),(l()(),e.qb(88,0,null,null,7,"button",[["btnRadio","none"],["class","btn btn-primary"],["id","encryption-radio0-none"],["name","encryptionRadio0"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,90).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio0Vap)&&t),t},null,null)),e.pb(89,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(90,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(92,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(94,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["none"])),(l()(),e.hb(16777216,null,null,1,null,nu)),e.pb(97,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,uu)),e.pb(99,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,6,0,""),l(n,10,0,""),l(n,15,0,""),l(n,16,0,u.regExSsid),l(n,19,0,"radio0name",u.radio0Vap.ssid),l(n,22,0,e.sb(1,"",e.Jb(n,22,0,e.Ab(n,23).transform(u.ssid_error)),""),"none","text-danger",e.sb(1,"",e.Ab(n,19).invalid&&u.ssid_error||"","")),l(n,27,0,""),l(n,33,0,"channel0",u.channel0),l(n,37,0,u.channels0),l(n,40,0,""),l(n,46,0,"radio0mode",u.radio0mode),l(n,50,0,e.Ab(n,2)),l(n,52,0,e.Ab(n,2)),l(n,54,0,e.Ab(n,2)),l(n,59,0,""),l(n,64,0,""),l(n,65,0,"1","0"),l(n,68,0,""),l(n,73,0,""),l(n,74,0,"psk2"),l(n,76,0,"encryptionRadio0",u.radio0Vap.encryption),l(n,81,0,""),l(n,82,0,"psk-mixed+tkip+ccmp"),l(n,84,0,"encryptionRadio0",u.radio0Vap.encryption),l(n,89,0,""),l(n,90,0,"none"),l(n,92,0,"encryptionRadio0",u.radio0Vap.encryption),l(n,97,0,"none"!==u.radio0Vap.encryption),l(n,99,0,"none"===u.radio0Vap.encryption)},function(l,n){var u=n.component;l(n,0,0,e.Ab(n,4).ngClassUntouched,e.Ab(n,4).ngClassTouched,e.Ab(n,4).ngClassPristine,e.Ab(n,4).ngClassDirty,e.Ab(n,4).ngClassValid,e.Ab(n,4).ngClassInvalid,e.Ab(n,4).ngClassPending),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,24).transform("2.4 GHz network name")),""),e.Ab(n,15).required?"":null,e.Ab(n,16).pattern?e.Ab(n,16).pattern:null,e.Ab(n,21).ngClassUntouched,e.Ab(n,21).ngClassTouched,e.Ab(n,21).ngClassPristine,e.Ab(n,21).ngClassDirty,e.Ab(n,21).ngClassValid,e.Ab(n,21).ngClassInvalid,e.Ab(n,21).ngClassPending),l(n,30,0,e.sb(1,"wifichannel_",u.radio0Name,""),e.Ab(n,35).ngClassUntouched,e.Ab(n,35).ngClassTouched,e.Ab(n,35).ngClassPristine,e.Ab(n,35).ngClassDirty,e.Ab(n,35).ngClassValid,e.Ab(n,35).ngClassInvalid,e.Ab(n,35).ngClassPending),l(n,43,0,e.sb(1,"wifimode_",u.radio0Name,""),e.Ab(n,48).ngClassUntouched,e.Ab(n,48).ngClassTouched,e.Ab(n,48).ngClassPristine,e.Ab(n,48).ngClassDirty,e.Ab(n,48).ngClassValid,e.Ab(n,48).ngClassInvalid,e.Ab(n,48).ngClassPending),l(n,62,0,u.radio0Vap.hidden,1==u.radio0Vap.hidden),l(n,72,0,e.Ab(n,74).isActive,e.Ab(n,74).isActive,e.Ab(n,78).ngClassUntouched,e.Ab(n,78).ngClassTouched,e.Ab(n,78).ngClassPristine,e.Ab(n,78).ngClassDirty,e.Ab(n,78).ngClassValid,e.Ab(n,78).ngClassInvalid,e.Ab(n,78).ngClassPending),l(n,80,0,e.Ab(n,82).isActive,e.Ab(n,82).isActive,e.Ab(n,86).ngClassUntouched,e.Ab(n,86).ngClassTouched,e.Ab(n,86).ngClassPristine,e.Ab(n,86).ngClassDirty,e.Ab(n,86).ngClassValid,e.Ab(n,86).ngClassInvalid,e.Ab(n,86).ngClassPending),l(n,88,0,e.Ab(n,90).isActive,e.Ab(n,90).isActive,e.Ab(n,94).ngClassUntouched,e.Ab(n,94).ngClassTouched,e.Ab(n,94).ngClassPristine,e.Ab(n,94).ngClassDirty,e.Ab(n,94).ngClassValid,e.Ab(n,94).ngClassInvalid,e.Ab(n,94).ngClassPending)})}function tu(l){return e.Kb(0,[(l()(),e.hb(16777216,null,null,1,null,eu)),e.pb(1,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(0,null,null,0))],function(l,n){l(n,1,0,n.component.radio0Vap)},null)}function au(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit.channel,"")),l(n,2,0,e.sb(1,"",n.context.$implicit.channel,""))},function(l,n){l(n,0,0,!n.context.$implicit.enabled),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.label)))})}function iu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11a/n/ac"]))],function(l,n){l(n,1,0,""),l(n,2,0,""),l(n,3,0,"")},null)}function ru(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11n"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11n/ac"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11n"),l(n,3,0,"11n")},null)}function ou(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","11ac"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["802.11ac"]))],function(l,n){l(n,1,0,""),l(n,2,0,"11ac"),l(n,3,0,"11ac")},null)}function su(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,24,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(3,16777216,null,null,11,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["containerClass","text-danger"],["id","key-radio1ssid"],["maxlength","64"],["name","key-radio1ssid"],["triggers","none"]],[[8,"type",0],[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,4)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,4)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,4)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radio1Vap.key=u)&&t),"keyup"===n&&(t=!1!==a.keySsidCheck(a.radio1Vap)&&t),"focus"===n&&(t=!1!==a.keySsidCheck(a.radio1Vap)&&t),t},null,null)),e.pb(4,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(5,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(6,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(7,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(10,671744,[["radio1key",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(12,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(13,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleKeyVisibility1"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0,t=l.component;return"click"===n&&(e=!1!==t.toggleKeyVisibility(t.radio1Vap)&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(19,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(20,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(21,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),e.qb(22,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(23,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){var u=n.component;l(n,5,0,!0),l(n,6,0,"64"),l(n,7,0,u.regExPass),l(n,10,0,"key-radio1ssid",u.radio1Vap.key),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,14).transform(u.key_ssid_error)),""),"none","text-danger",e.sb(1,"",e.Ab(n,10).invalid&&u.key_ssid_error||"",""));var t=l(n,21,0,"text"==u.keyInputTypeRadio1,"password"==u.keyInputTypeRadio1);l(n,20,0,"glyphicon ",t)},function(l,n){var u=n.component;l(n,3,1,[e.sb(1,"",u.keyInputTypeRadio1,""),e.Ab(n,5).required?"":null,e.Ab(n,6).maxlength?e.Ab(n,6).maxlength:null,e.Ab(n,7).pattern?e.Ab(n,7).pattern:null,e.Ab(n,12).ngClassUntouched,e.Ab(n,12).ngClassTouched,e.Ab(n,12).ngClassPristine,e.Ab(n,12).ngClassDirty,e.Ab(n,12).ngClassValid,e.Ab(n,12).ngClassInvalid,e.Ab(n,12).ngClassPending]),l(n,16,0,e.Jb(n,16,0,"text"==u.keyInputTypeRadio1?e.Ab(n,17).transform("Hide password"):e.Ab(n,18).transform("Show password"))),l(n,23,0,e.Jb(n,23,0,e.Ab(n,24).transform("A passphrase (8-63 characters) or a pre-shared key (64 characters) is required")))})}function bu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(2,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("Your WiFi is not encrypted. Please activate the encryption.")))})}function cu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,99,"form",[["class","form-horizontal"],["name","radio1"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,2).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,2).onReset()&&t),t},null,null)),e.pb(1,16384,null,0,m.w,[],null,null),e.pb(2,4210688,[[4,4],["radio1",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(4,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(5,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(6,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,[" 5 GHz"])),(l()(),e.qb(8,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,2,"label",[["class","control-label col-md-4 control-2line-label"],["for","radio1name"],["translate",""]],null,null,null,null,null)),e.pb(10,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["5 GHz network name:"])),(l()(),e.qb(12,0,null,null,12,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(13,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","radio1name"],["name","radio1name"],["required",""],["triggers","none"],["type","text"]],[[8,"placeholder",0],[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,14)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,14).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,14)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,14)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radio1Vap.ssid=u)&&t),"keyup"===n&&(t=!1!==a.ssidCheck(a.radio1Vap)&&t),"focus"===n&&(t=!1!==a.ssidCheck(a.radio1Vap)&&t),t},null,null)),e.pb(14,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(15,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(16,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n){return[l,n]},[m.q,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(19,671744,[["radio1name",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(21,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(22,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(25,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,2,"label",[["class","control-label col-md-4"],["for","channel1"],["translate",""]],null,null,null,null,null)),e.pb(27,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Channel:"])),(l()(),e.qb(29,0,null,null,8,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(30,0,null,null,7,"select",[["class","form-control"],["name","channel1"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,31).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,31).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.channel1=u)&&t),t},null,null)),e.pb(31,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(33,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(35,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,au)),e.pb(37,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(38,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(39,0,null,null,2,"label",[["class","control-label col-md-4"],["for","radio1mode"],["translate",""]],null,null,null,null,null)),e.pb(40,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Mode:"])),(l()(),e.qb(42,0,null,null,12,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(43,0,null,null,11,"select",[["class","form-control"],["name","radio1mode"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,44).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,44).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.radio1mode=u)&&t),t},null,null)),e.pb(44,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(46,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(48,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,iu)),e.pb(50,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ru)),e.pb(52,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ou)),e.pb(54,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(55,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(56,0,null,null,9,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(57,0,null,null,3,"label",[["class","control-label-checkbox col-md-4"],["for","ssid-br-0"]],null,null,null,null,null)),(l()(),e.qb(58,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(59,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Hide SSID:"])),(l()(),e.qb(61,0,null,null,4,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(62,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","ssid-br-1"],["name","ssid-br-1"],["translate",""],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,65).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.radio1Vap.hidden=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(64,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(65,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(66,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e.qb(67,0,null,null,2,"label",[["class","btn-group-label"],["translate",""]],null,null,null,null,null)),e.pb(68,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Encryption:"])),(l()(),e.qb(70,0,null,null,25,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(71,0,null,null,24,"div",[["class","btn-group "]],null,null,null,null,null)),(l()(),e.qb(72,0,null,null,7,"button",[["btnRadio","psk2"],["class","btn btn-primary"],["id","encryption-radio1-wpa"],["name","encryptionRadio1"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,74).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio1Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio1Vap)&&t),t},null,null)),e.pb(73,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(74,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(76,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(78,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA2"])),(l()(),e.qb(80,0,null,null,7,"button",[["btnRadio","psk-mixed+tkip+ccmp"],["class","btn btn-primary"],["id","encryption-radio1-wpa-wpa2"],["name","encryptionRadio1"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,82).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio1Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio1Vap)&&t),t},null,null)),e.pb(81,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(82,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(84,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(86,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA/WPA2"])),(l()(),e.qb(88,0,null,null,7,"button",[["btnRadio","none"],["class","btn btn-primary"],["id","encryption-radio1-none"],["name","encryptionRadio1"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,90).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio1Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio1Vap)&&t),t},null,null)),e.pb(89,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(90,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(92,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(94,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["none"])),(l()(),e.hb(16777216,null,null,1,null,su)),e.pb(97,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,bu)),e.pb(99,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,6,0,""),l(n,10,0,""),l(n,15,0,""),l(n,16,0,u.regExSsid),l(n,19,0,"radio1name",u.radio1Vap.ssid),l(n,22,0,e.sb(1,"",e.Jb(n,22,0,e.Ab(n,23).transform(u.ssid_error)),""),"none","text-danger",e.sb(1,"",e.Ab(n,19).invalid&&u.ssid_error||"","")),l(n,27,0,""),l(n,33,0,"channel1",u.channel1),l(n,37,0,u.channels1),l(n,40,0,""),l(n,46,0,"radio1mode",u.radio1mode),l(n,50,0,e.Ab(n,2)),l(n,52,0,e.Ab(n,2)),l(n,54,0,e.Ab(n,2)),l(n,59,0,""),l(n,64,0,""),l(n,65,0,"1","0"),l(n,68,0,""),l(n,73,0,""),l(n,74,0,"psk2"),l(n,76,0,"encryptionRadio1",u.radio1Vap.encryption),l(n,81,0,""),l(n,82,0,"psk-mixed+tkip+ccmp"),l(n,84,0,"encryptionRadio1",u.radio1Vap.encryption),l(n,89,0,""),l(n,90,0,"none"),l(n,92,0,"encryptionRadio1",u.radio1Vap.encryption),l(n,97,0,"none"!==u.radio1Vap.encryption),l(n,99,0,"none"===u.radio1Vap.encryption)},function(l,n){var u=n.component;l(n,0,0,e.Ab(n,4).ngClassUntouched,e.Ab(n,4).ngClassTouched,e.Ab(n,4).ngClassPristine,e.Ab(n,4).ngClassDirty,e.Ab(n,4).ngClassValid,e.Ab(n,4).ngClassInvalid,e.Ab(n,4).ngClassPending),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,24).transform("5 GHz network name")),""),e.Ab(n,15).required?"":null,e.Ab(n,16).pattern?e.Ab(n,16).pattern:null,e.Ab(n,21).ngClassUntouched,e.Ab(n,21).ngClassTouched,e.Ab(n,21).ngClassPristine,e.Ab(n,21).ngClassDirty,e.Ab(n,21).ngClassValid,e.Ab(n,21).ngClassInvalid,e.Ab(n,21).ngClassPending),l(n,30,0,e.sb(1,"wifichannel_",u.radio1Name,""),e.Ab(n,35).ngClassUntouched,e.Ab(n,35).ngClassTouched,e.Ab(n,35).ngClassPristine,e.Ab(n,35).ngClassDirty,e.Ab(n,35).ngClassValid,e.Ab(n,35).ngClassInvalid,e.Ab(n,35).ngClassPending),l(n,43,0,e.sb(1,"wifimode_",u.radio1Name,""),e.Ab(n,48).ngClassUntouched,e.Ab(n,48).ngClassTouched,e.Ab(n,48).ngClassPristine,e.Ab(n,48).ngClassDirty,e.Ab(n,48).ngClassValid,e.Ab(n,48).ngClassInvalid,e.Ab(n,48).ngClassPending),l(n,62,0,u.radio1Vap.hidden,1==u.radio1Vap.hidden),l(n,72,0,e.Ab(n,74).isActive,e.Ab(n,74).isActive,e.Ab(n,78).ngClassUntouched,e.Ab(n,78).ngClassTouched,e.Ab(n,78).ngClassPristine,e.Ab(n,78).ngClassDirty,e.Ab(n,78).ngClassValid,e.Ab(n,78).ngClassInvalid,e.Ab(n,78).ngClassPending),l(n,80,0,e.Ab(n,82).isActive,e.Ab(n,82).isActive,e.Ab(n,86).ngClassUntouched,e.Ab(n,86).ngClassTouched,e.Ab(n,86).ngClassPristine,e.Ab(n,86).ngClassDirty,e.Ab(n,86).ngClassValid,e.Ab(n,86).ngClassInvalid,e.Ab(n,86).ngClassPending),l(n,88,0,e.Ab(n,90).isActive,e.Ab(n,90).isActive,e.Ab(n,94).ngClassUntouched,e.Ab(n,94).ngClassTouched,e.Ab(n,94).ngClassPristine,e.Ab(n,94).ngClassDirty,e.Ab(n,94).ngClassValid,e.Ab(n,94).ngClassInvalid,e.Ab(n,94).ngClassPending)})}function du(l){return e.Kb(0,[(l()(),e.hb(16777216,null,null,1,null,cu)),e.pb(1,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(0,null,null,0))],function(l,n){l(n,1,0,n.component.radio1Vap)},null)}function pu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit.channel,"")),l(n,2,0,e.sb(1,"",n.context.$implicit.channel,""))},function(l,n){l(n,0,0,!n.context.$implicit.enabled),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.label)))})}function gu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit.channel,"")),l(n,2,0,e.sb(1,"",n.context.$implicit.channel,""))},function(l,n){l(n,0,0,!n.context.$implicit.enabled),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.label)))})}function hu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,24,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(3,16777216,null,null,11,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["containerClass","text-danger"],["id","key-radio0ssid"],["maxlength","64"],["name","key-radio0ssid"],["triggers","none"]],[[8,"type",0],[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,4)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,4)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,4)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.key=u)&&t),"keyup"===n&&(t=!1!==a.keySsidCheck(a.radio0Vap)&&t),"focus"===n&&(t=!1!==a.keySsidCheck(a.radio0Vap)&&t),t},null,null)),e.pb(4,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(5,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(6,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(7,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(10,671744,[["radio0key",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(12,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(13,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleKeyVisibility0"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0,t=l.component;return"click"===n&&(e=!1!==t.toggleKeyVisibility(t.radio0Vap)&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(19,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(20,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(21,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),e.qb(22,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(23,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){var u=n.component;l(n,5,0,!0),l(n,6,0,"64"),l(n,7,0,u.regExPass),l(n,10,0,"key-radio0ssid",u.radio0Vap.key),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,14).transform(u.key_ssid_error)),""),"none","text-danger",e.sb(1,"",e.Ab(n,10).invalid&&u.key_ssid_error||"",""));var t=l(n,21,0,"text"==u.keyInputTypeRadio0,"password"==u.keyInputTypeRadio0);l(n,20,0,"glyphicon ",t)},function(l,n){var u=n.component;l(n,3,1,[e.sb(1,"",u.keyInputTypeRadio0,""),e.Ab(n,5).required?"":null,e.Ab(n,6).maxlength?e.Ab(n,6).maxlength:null,e.Ab(n,7).pattern?e.Ab(n,7).pattern:null,e.Ab(n,12).ngClassUntouched,e.Ab(n,12).ngClassTouched,e.Ab(n,12).ngClassPristine,e.Ab(n,12).ngClassDirty,e.Ab(n,12).ngClassValid,e.Ab(n,12).ngClassInvalid,e.Ab(n,12).ngClassPending]),l(n,16,0,e.Jb(n,16,0,"text"==u.keyInputTypeRadio0?e.Ab(n,17).transform("Hide password"):e.Ab(n,18).transform("Show password"))),l(n,23,0,e.Jb(n,23,0,e.Ab(n,24).transform("A passphrase (8-63 characters) or a pre-shared key (64 characters) is required")))})}function fu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(2,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("Your WiFi is not encrypted. Please activate the encryption.")))})}function mu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,95,"form",[["class","form-horizontal"],["name","dualNotShared"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,2).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,2).onReset()&&t),t},null,null)),e.pb(1,16384,null,0,m.w,[],null,null),e.pb(2,4210688,[[1,4],["dualNotShared",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(4,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(5,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(6,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,[" 2.4 GHz + 5 GHz"])),(l()(),e.qb(8,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,2,"label",[["class","control-label col-md-4 control-2line-label"],["for","radio0name"],["translate",""]],null,null,null,null,null)),e.pb(10,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Network name 2.4 + 5 GHz"])),(l()(),e.qb(12,0,null,null,12,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(13,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","radio0name"],["name","radio0name"],["required",""],["triggers","none"],["type","text"]],[[8,"placeholder",0],[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,14)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,14).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,14)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,14)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.ssid=u)&&t),"keyup"===n&&(t=!1!==a.ssidCheck(a.radio0Vap)&&t),"focus"===n&&(t=!1!==a.ssidCheck(a.radio0Vap)&&t),t},null,null)),e.pb(14,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(15,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(16,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n){return[l,n]},[m.q,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(19,671744,[["radio0name",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(21,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(22,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(25,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,2,"label",[["class","control-label col-md-4"],["for","channel0"],["translate",""]],null,null,null,null,null)),e.pb(27,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Channel 2.4 GHz:"])),(l()(),e.qb(29,0,null,null,8,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(30,0,null,null,7,"select",[["class","form-control"],["name","channel0"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,31).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,31).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.channel0=u)&&t),t},null,null)),e.pb(31,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(33,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(35,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,pu)),e.pb(37,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(38,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(39,0,null,null,2,"label",[["class","control-label col-md-4"],["for","channel1"],["translate",""]],null,null,null,null,null)),e.pb(40,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Channel 5 GHz:"])),(l()(),e.qb(42,0,null,null,8,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(43,0,null,null,7,"select",[["class","form-control"],["name","channel1"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,44).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,44).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.channel1=u)&&t),t},null,null)),e.pb(44,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(46,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(48,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,gu)),e.pb(50,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(51,0,null,null,10,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(52,0,null,null,9,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(53,0,null,null,3,"label",[["class","control-label-checkbox col-md-4"],["for","ssid-br-0"]],null,null,null,null,null)),(l()(),e.qb(54,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(55,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Hide SSID:"])),(l()(),e.qb(57,0,null,null,4,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),e.qb(58,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","ssid-br-0"],["name","ssid-br-0"],["translate",""],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,61).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.radio0Vap.hidden=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(60,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(61,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(62,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e.qb(63,0,null,null,2,"label",[["class","btn-group-label"],["translate",""]],null,null,null,null,null)),e.pb(64,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Encryption:"])),(l()(),e.qb(66,0,null,null,25,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(67,0,null,null,24,"div",[["class","btn-group "]],null,null,null,null,null)),(l()(),e.qb(68,0,null,null,7,"button",[["btnRadio","psk2"],["class","btn btn-primary"],["id","encryption-radio0-wpa"],["name","encryptionRadio0"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,70).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio0Vap)&&t),t},null,null)),e.pb(69,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(70,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(72,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(74,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA2"])),(l()(),e.qb(76,0,null,null,7,"button",[["btnRadio","psk-mixed+tkip+ccmp"],["class","btn btn-primary"],["id","encryption-radio0-wpa-wpa2"],["name","encryptionRadio0"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,78).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio0Vap)&&t),t},null,null)),e.pb(77,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(78,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(80,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(82,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA/WPA2"])),(l()(),e.qb(84,0,null,null,7,"button",[["btnRadio","none"],["class","btn btn-primary"],["id","encryption-radio0-none"],["name","encryptionRadio0"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,86).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radio0Vap.encryption=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.radio0Vap)&&t),t},null,null)),e.pb(85,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(86,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(88,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(90,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["none"])),(l()(),e.hb(16777216,null,null,1,null,hu)),e.pb(93,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,fu)),e.pb(95,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,6,0,""),l(n,10,0,""),l(n,15,0,""),l(n,16,0,u.regExSsid),l(n,19,0,"radio0name",u.radio0Vap.ssid),l(n,22,0,e.sb(1,"",e.Jb(n,22,0,e.Ab(n,23).transform(u.ssid_error)),""),"none","text-danger",e.sb(1,"",e.Ab(n,19).invalid&&u.ssid_error||"","")),l(n,27,0,""),l(n,33,0,"channel0",u.channel0),l(n,37,0,u.channels0),l(n,40,0,""),l(n,46,0,"channel1",u.channel1),l(n,50,0,u.channels1),l(n,55,0,""),l(n,60,0,""),l(n,61,0,"1","0"),l(n,64,0,""),l(n,69,0,""),l(n,70,0,"psk2"),l(n,72,0,"encryptionRadio0",u.radio0Vap.encryption),l(n,77,0,""),l(n,78,0,"psk-mixed+tkip+ccmp"),l(n,80,0,"encryptionRadio0",u.radio0Vap.encryption),l(n,85,0,""),l(n,86,0,"none"),l(n,88,0,"encryptionRadio0",u.radio0Vap.encryption),l(n,93,0,"none"!==u.radio0Vap.encryption),l(n,95,0,"none"===u.radio0Vap.encryption)},function(l,n){var u=n.component;l(n,0,0,e.Ab(n,4).ngClassUntouched,e.Ab(n,4).ngClassTouched,e.Ab(n,4).ngClassPristine,e.Ab(n,4).ngClassDirty,e.Ab(n,4).ngClassValid,e.Ab(n,4).ngClassInvalid,e.Ab(n,4).ngClassPending),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,24).transform("2.4 + 5 GHz network name")),""),e.Ab(n,15).required?"":null,e.Ab(n,16).pattern?e.Ab(n,16).pattern:null,e.Ab(n,21).ngClassUntouched,e.Ab(n,21).ngClassTouched,e.Ab(n,21).ngClassPristine,e.Ab(n,21).ngClassDirty,e.Ab(n,21).ngClassValid,e.Ab(n,21).ngClassInvalid,e.Ab(n,21).ngClassPending),l(n,30,0,e.sb(1,"wifichannel_",u.radio0Name,""),e.Ab(n,35).ngClassUntouched,e.Ab(n,35).ngClassTouched,e.Ab(n,35).ngClassPristine,e.Ab(n,35).ngClassDirty,e.Ab(n,35).ngClassValid,e.Ab(n,35).ngClassInvalid,e.Ab(n,35).ngClassPending),l(n,43,0,e.sb(1,"wifichannel_",u.radio1Name,""),e.Ab(n,48).ngClassUntouched,e.Ab(n,48).ngClassTouched,e.Ab(n,48).ngClassPristine,e.Ab(n,48).ngClassDirty,e.Ab(n,48).ngClassValid,e.Ab(n,48).ngClassInvalid,e.Ab(n,48).ngClassPending),l(n,58,0,u.radio0Vap.hidden,1==u.radio0Vap.hidden),l(n,68,0,e.Ab(n,70).isActive,e.Ab(n,70).isActive,e.Ab(n,74).ngClassUntouched,e.Ab(n,74).ngClassTouched,e.Ab(n,74).ngClassPristine,e.Ab(n,74).ngClassDirty,e.Ab(n,74).ngClassValid,e.Ab(n,74).ngClassInvalid,e.Ab(n,74).ngClassPending),l(n,76,0,e.Ab(n,78).isActive,e.Ab(n,78).isActive,e.Ab(n,82).ngClassUntouched,e.Ab(n,82).ngClassTouched,e.Ab(n,82).ngClassPristine,e.Ab(n,82).ngClassDirty,e.Ab(n,82).ngClassValid,e.Ab(n,82).ngClassInvalid,e.Ab(n,82).ngClassPending),l(n,84,0,e.Ab(n,86).isActive,e.Ab(n,86).isActive,e.Ab(n,90).ngClassUntouched,e.Ab(n,90).ngClassTouched,e.Ab(n,90).ngClassPristine,e.Ab(n,90).ngClassDirty,e.Ab(n,90).ngClassValid,e.Ab(n,90).ngClassInvalid,e.Ab(n,90).ngClassPending)})}function vu(l){return e.Kb(0,[(l()(),e.hb(16777216,null,null,1,null,mu)),e.pb(1,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(0,null,null,0))],function(l,n){l(n,1,0,n.component.radio0Vap)},null)}function Cu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,1,0,e.Ab(n.parent,6).invalid||!e.Ab(n.parent,6).dirty||u.savingInProgress,"save")},null)}function Au(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,n.component.savingInProgress,"cancel")},null)}function ku(l){return e.Kb(0,[e.Gb(671088640,1,{dualNotSharedForm:0}),e.Gb(671088640,2,{radio0Form:0}),e.Gb(402653184,3,{delos:0}),e.Gb(671088640,4,{radio1Form:0}),(l()(),e.qb(4,0,null,null,42,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,6).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,6).onReset()&&t),t},null,null)),e.pb(5,16384,null,0,m.w,[],null,null),e.pb(6,4210688,[[3,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(8,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(9,0,null,null,37,"div",[["class","vendor-dialogs buttons-dialog"]],null,null,null,null,null)),(l()(),e.qb(10,0,null,null,2,"h3",[["class","no_margin btn-group-label"],["translate",""]],null,null,null,null,null)),e.pb(11,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi network mode:"])),(l()(),e.qb(13,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(14,0,null,null,14,"div",[["class","btn-group "]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Dn)),e.pb(16,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Bn)),e.pb(18,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Kn)),e.pb(20,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(21,0,null,null,7,"button",[["btnRadio","off"],["class","btn btn-primary"],["id","wifi-button-off1"],["name","radioModeOff"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,23).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.radioMode=u)&&t),"click"===n&&(t=!1!==a.selectRadioMode("off")&&t),t},null,null)),e.pb(22,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(23,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(25,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(27,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["off"])),(l()(),e.qb(29,0,null,null,10,"div",[],null,null,null,null,null)),e.pb(30,16384,null,0,i.s,[],{ngSwitch:[0,"ngSwitch"]},null),(l()(),e.hb(16777216,null,null,1,null,Wn)),e.pb(32,278528,null,0,i.t,[e.P,e.M,i.s],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),e.qb(33,0,null,null,6,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,zn)),e.pb(35,278528,null,0,i.t,[e.P,e.M,i.s],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),e.hb(16777216,null,null,1,null,Gn)),e.pb(37,278528,null,0,i.t,[e.P,e.M,i.s],{ngSwitchCase:[0,"ngSwitchCase"]},null),(l()(),e.hb(16777216,null,null,1,null,Yn)),e.pb(39,16384,null,0,i.u,[e.P,e.M,i.s],null,null),(l()(),e.hb(0,[["radio24",2]],null,0,null,tu)),(l()(),e.hb(0,[["radio5",2]],null,0,null,du)),(l()(),e.hb(0,[["dualNotSharedSettings",2]],null,0,null,vu)),(l()(),e.hb(16777216,null,null,1,null,Cu)),e.pb(44,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Au)),e.pb(46,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,11,0,""),l(n,16,0,u.dualRadio),l(n,18,0,u.radio0Available),l(n,20,0,u.radio1Available),l(n,22,0,""),l(n,23,0,"off"),l(n,25,0,"radioModeOff",u.radioMode),l(n,30,0,u.radioMode),l(n,32,0,"2,4+5 GHz"),l(n,35,0,"2,4Ghz"),l(n,37,0,"5Ghz"),l(n,44,0,e.Ab(n,6).dirty||u.showSave),l(n,46,0,e.Ab(n,6).dirty||u.showCancel)},function(l,n){l(n,4,0,e.Ab(n,8).ngClassUntouched,e.Ab(n,8).ngClassTouched,e.Ab(n,8).ngClassPristine,e.Ab(n,8).ngClassDirty,e.Ab(n,8).ngClassValid,e.Ab(n,8).ngClassInvalid,e.Ab(n,8).ngClassPending),l(n,21,0,e.Ab(n,23).isActive,e.Ab(n,23).isActive,e.Ab(n,27).ngClassUntouched,e.Ab(n,27).ngClassTouched,e.Ab(n,27).ngClassPristine,e.Ab(n,27).ngClassDirty,e.Ab(n,27).ngClassValid,e.Ab(n,27).ngClassInvalid,e.Ab(n,27).ngClassPending)})}function yu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"app-vaps-radio-retail",[],null,null,null,ku,$n)),e.Fb(512,null,Fn.a,Fn.a,[I.a,x.a]),e.Fb(512,null,Nl.a,Nl.a,[I.a,x.a]),e.pb(3,4440064,null,0,Sn.a,[Ol.a,Hl.a,M.a,Fn.a,Wl.a,Vn.a,Nl.a,E.a],null,null)],function(l,n){l(n,3,0)},null)}var qu=e.mb("app-vaps-radio-retail",Sn.a,yu,{},{},[]),Iu=u("1dzw"),xu=u("5xw/"),wu=e.ob({encapsulation:0,styles:[[".input-group[_ngcontent-%COMP%]{width:100%}.tiny-padding-top[_ngcontent-%COMP%]{padding-top:7px}"]],data:{}});function Pu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Mu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Eu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function ju(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Tu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Fu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,3,"td",[["class","text-center empty-vaps-list"],["colspan","5"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Please click the + button to add a SSID."]))],function(l,n){l(n,3,0,"")},null)}function Su(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"span",[["class","hint-text"]],null,null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Db(2,{num1:0,radio1:1,num2:2,radio2:3}),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){var u=n.component,t=e.Jb(n,1,0,e.Ab(n,3).transform("Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} radio.",l(n,2,0,u.allowedRadio1VapNumber,u.radio1Band,u.allowedRadio0VapNumber,u.radio0Band)));l(n,1,0,t)})}function Vu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"span",[["class","hint-text"]],null,null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Db(2,{allowedRadioVapNumber:0,radioBand:1}),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){var u=n.component,t=e.Jb(n,1,0,e.Ab(n,3).transform("Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio.",l(n,2,0,u.allowedRadio0VapNumber,u.radio0Band)));l(n,1,0,t)})}function $u(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"span",[["class","hint-text"]],null,null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Db(2,{allowedRadioVapNumber:0,radioBand:1}),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){var u=n.component,t=e.Jb(n,1,0,e.Ab(n,3).transform("Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio.",l(n,2,0,u.allowedRadio1VapNumber,u.radio1Band)));l(n,1,0,t)})}function Du(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","text-danger"]],null,null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Db(2,{radioBand:0}),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){var u=n.component,t=e.Jb(n,1,0,e.Ab(n,3).transform("You can no longer create SSIDs for the {radioBand} radio",l(n,2,0,u.radio1Band)));l(n,1,0,t)})}function Bu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","text-danger"]],null,null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Db(2,{radioBand:0}),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){var u=n.component,t=e.Jb(n,1,0,e.Ab(n,3).transform("You can no longer create SSIDs for the {radioBand} radio",l(n,2,0,u.radio0Band)));l(n,1,0,t)})}function Ku(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,12,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,11,"td",[["class","text-center allowed-vaps-number"],["colspan","5"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Su)),e.pb(3,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Vu)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,$u)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(8,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Du)),e.pb(10,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Bu)),e.pb(12,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,u.hasRadio0&&u.hasRadio1),l(n,5,0,u.hasRadio0&&!u.hasRadio1),l(n,7,0,!u.hasRadio0&&u.hasRadio1),l(n,10,0,u.hasRadio1&&!u.allowRadio1Vap),l(n,12,0,u.hasRadio0&&!u.allowRadio0Vap)},null)}function _u(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"glyphicon-ok-circle":0,"glyphicon-ban-circle":1})],function(l,n){var u=l(n,2,0,!n.parent.context.$implicit.disabled,n.parent.context.$implicit.disabled);l(n,1,0,"glyphicon",u)},function(l,n){l(n,0,0,e.sb(1,"enabled-ssid-icon-",n.parent.context.index,""),!n.parent.context.$implicit.disabled)})}function Ru(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["id","enable-ssid"],["trueValue","0"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e.Ab(l,2).onInput(u)&&t),"valueChange"===n&&(t=!1!==(l.parent.context.$implicit.disabled=u)&&t),"click"===n&&(t=!1!==e.Ab(l.parent.parent,31).form.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(2,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"})],function(l,n){l(n,2,0,"0","1")},function(l,n){l(n,0,0,n.parent.context.$implicit.disabled,0==n.parent.context.$implicit.disabled)})}function Ju(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(1,null,["",""]))],null,function(l,n){l(n,0,0,e.sb(1,"name-ssid-",n.parent.context.index,"")),l(n,1,0,n.parent.context.$implicit.ssid)})}function Ou(l){return e.Kb(0,[(l()(),e.qb(0,16777216,null,null,12,"input",[["class","form-control edit-ssid"],["containerClass","text-danger"],["id","name-ssid"],["minlength","1"],["name","nameSsid"],["required",""],["triggers","none"]],[[1,"required",0],[1,"minlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,1)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,1)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,1)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.ssid=u)&&t),"keyup"===n&&(t=!1!==a.ssidCheck(l.parent.context.$implicit)&&t),"focus"===n&&(t=!1!==a.ssidCheck(l.parent.context.$implicit)&&t),t},null,null)),e.pb(1,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(2,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(3,540672,null,0,m.g,[],{minlength:[0,"minlength"]},null),e.pb(4,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.g,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(7,671744,[["nameSsid",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(9,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(10,540672,null,0,Iu.a,[e.k,e.z],{appFocus:[0,"appFocus"]},null),e.pb(11,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(0,null,null,0))],function(l,n){var u=n.component;l(n,2,0,""),l(n,3,0,"1"),l(n,4,0,u.regExSsid),l(n,7,0,"nameSsid",n.parent.context.$implicit.ssid),l(n,10,0,u.editRowName===n.parent.context.$implicit[".name"]),l(n,11,0,e.sb(1,"",e.Jb(n,11,0,e.Ab(n,12).transform(u.ssid_error)),""),"none","text-danger",e.sb(1,"",u.editRowName===n.parent.context.$implicit[".name"]&&u.ssid_error||"",""))},function(l,n){l(n,0,0,e.Ab(n,2).required?"":null,e.Ab(n,3).minlength?e.Ab(n,3).minlength:null,e.Ab(n,4).pattern?e.Ab(n,4).pattern:null,e.Ab(n,9).ngClassUntouched,e.Ab(n,9).ngClassTouched,e.Ab(n,9).ngClassPristine,e.Ab(n,9).ngClassDirty,e.Ab(n,9).ngClassValid,e.Ab(n,9).ngClassInvalid,e.Ab(n,9).ngClassPending)})}function Nu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(1,null,["",""]))],null,function(l,n){var u=n.component;l(n,0,0,e.sb(1,"radio-ssid-",n.parent.context.index,"")),l(n,1,0,u.deviceOptions[n.parent.context.$implicit.device])})}function Uu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","radio1"]],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,"radio1"),l(n,2,0,"radio1")},function(l,n){var u=n.component;l(n,0,0,u.disableRadioOption("radio1",n.parent.parent.context.$implicit)),l(n,3,0,u.radio1Band)})}function Wu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","radio0"]],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,"radio0"),l(n,2,0,"radio0")},function(l,n){var u=n.component;l(n,0,0,u.disableRadioOption("radio0",n.parent.parent.context.$implicit)),l(n,3,0,u.radio0Band)})}function Hu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","radio1+radio0"]],[[8,"disabled",0]],null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["2.4 GHz + 5 GHz"]))],function(l,n){l(n,1,0,""),l(n,2,0,"radio1+radio0"),l(n,3,0,"radio1+radio0")},function(l,n){l(n,0,0,n.component.disableRadioOption("radio1+radio0",n.parent.parent.context.$implicit))})}function zu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,"select",[["class","form-control edit-radio"],["id","radio-ssid"],["name","radioSsid"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,1).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.device=u)&&t),"change"===n&&(t=!1!==a.maxassocCheck(l.parent.context.$implicit)&&t),t},null,null)),e.pb(1,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(3,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(5,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Uu)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Wu)),e.pb(9,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Hu)),e.pb(11,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,"radioSsid",!u.hasRadio1||!u.hasRadio0,n.parent.context.$implicit.device),l(n,7,0,u.hasRadio1),l(n,9,0,u.hasRadio0),l(n,11,0,u.hasRadio1&&u.hasRadio0)},function(l,n){l(n,0,0,e.Ab(n,5).ngClassUntouched,e.Ab(n,5).ngClassTouched,e.Ab(n,5).ngClassPristine,e.Ab(n,5).ngClassDirty,e.Ab(n,5).ngClassValid,e.Ab(n,5).ngClassInvalid,e.Ab(n,5).ngClassPending)})}function Lu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(1,null,["",""]))],null,function(l,n){var u=n.component;l(n,0,0,e.sb(1,"encryption-ssid-",n.parent.context.index,"")),l(n,1,0,u.encryptionOptions[n.parent.context.$implicit.encryption])})}function Gu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit,"")),l(n,2,0,e.sb(1,"",n.context.$implicit,""))},function(l,n){var u=n.component;l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(u.encryptionOptions[n.context.$implicit])))})}function Yu(l){return e.Kb(0,[(l()(),e.qb(0,16777216,null,null,11,"select",[["class","form-control edit-encryption"],["containerClass","text-danger"],["id","encryption-ssid"],["name","encryptionSsid"],["triggers","none"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,3).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,3).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.encryption=u)&&t),"change"===n&&(t=!1!==a.onEncryptionChange(l.parent.context.$implicit)&&t),t},null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{error:0}),e.pb(3,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(5,671744,[["encryption",4]],0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(7,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(8,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(16777216,null,null,1,null,Gu)),e.pb(11,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(0,null,null,0))],function(l,n){var u=n.component,t=l(n,2,0,!u.hasRadiusAuth&&"wpa2"===n.parent.context.$implicit.encryption);l(n,1,0,"form-control edit-encryption",t),l(n,5,0,"encryptionSsid",n.parent.context.$implicit.encryption),l(n,8,0,e.sb(1,"",e.Jb(n,8,0,e.Ab(n,9).transform("No RADIUS server configured")),""),"none","text-danger",e.sb(1,"",!u.hasRadiusAuth&&"wpa2"===n.parent.context.$implicit.encryption&&u.editRowName===n.parent.context.$implicit[".name"]||"","")),l(n,11,0,u.objectKeys(u.encryptionOptions))},function(l,n){l(n,0,0,e.Ab(n,7).ngClassUntouched,e.Ab(n,7).ngClassTouched,e.Ab(n,7).ngClassPristine,e.Ab(n,7).ngClassDirty,e.Ab(n,7).ngClassValid,e.Ab(n,7).ngClassInvalid,e.Ab(n,7).ngClassPending)})}function Qu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"div",[["class","text-center"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,0,"span",[["class","glyphicon glyphicon-ban-circle"],["style","font-size: 18px;"]],[[8,"id",0]],null,null,null,null))],null,function(l,n){l(n,1,0,e.sb(1,"vlan-ssid-icon-",n.parent.parent.context.index,""))})}function Zu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,[" No VLAN "]))],function(l,n){l(n,1,0,"")},null)}function Xu(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["(dynamic)"]))],function(l,n){l(n,1,0,"")},null)}function le(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,8,"div",[],[[8,"id",0]],null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"span",[],[[8,"hidden",0]],null,null,null,null)),(l()(),e.Ib(2,null,[" "," (",") "])),(l()(),e.hb(16777216,null,null,1,null,Qu)),e.pb(4,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Zu)),e.pb(6,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Xu)),e.pb(8,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,4,0,!u.vlans.length&&!n.parent.context.$implicit.dynamicVLAN),l(n,6,0,!u.vlans.length&&n.parent.context.$implicit.dynamicVLAN||"lan"===n.parent.context.$implicit.network&&n.parent.context.$implicit.dynamicVLAN||"lan"===n.parent.context.$implicit.network&&u.vlans.length),l(n,8,0,n.parent.context.$implicit.dynamicVLAN)},function(l,n){var u=n.component;l(n,0,0,e.sb(1,"vlan-ssid-",n.parent.context.index,"")),l(n,1,0,"lan"===n.parent.context.$implicit.network||!u.vlans.length),l(n,2,0,u.vlansByID[n.parent.context.$implicit.network].name,u.vlansByID[n.parent.context.$implicit.network].id)})}function ne(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","lan"]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["No VLAN"]))],function(l,n){l(n,1,0,""),l(n,2,0,"lan"),l(n,3,0,"lan")},null)}function ue(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,[""," (",")"]))],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit[".name"],"")),l(n,2,0,e.sb(1,"",n.context.$implicit[".name"],""))},function(l,n){l(n,3,0,n.context.$implicit.name,n.context.$implicit.id)})}function ee(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,9,"select",[["class","form-control"],["id","vlan-ssid"],["name","vlanSsid"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e.Ab(l,1).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.network=u)&&t),t},null,null)),e.pb(1,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(3,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(5,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ne)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ue)),e.pb(9,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,3,0,"vlanSsid",n.parent.context.$implicit.network),l(n,7,0,!u.vlans.length||n.parent.context.$implicit.dynamicVLAN),l(n,9,0,u.vlans)},function(l,n){l(n,0,0,e.Ab(n,5).ngClassUntouched,e.Ab(n,5).ngClassTouched,e.Ab(n,5).ngClassPristine,e.Ab(n,5).ngClassDirty,e.Ab(n,5).ngClassValid,e.Ab(n,5).ngClassInvalid,e.Ab(n,5).ngClassPending)})}function te(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,"div",[["class","col-md-2 col-sm-3"]],null,null,null,null,null))],null,null)}function ae(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("A passphrase (8-63 characters) or a pre-shared key (64 characters) is required")))})}function ie(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,"div",[["class","form-group check-group clearfix"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,10,"label",[["class","check-label"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,6,"input",[["id","dynamic-vlan-ssid"],["name","dynamicVlanSsid"],["translate",""],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"change"],[null,"ngModelChange"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,4).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"change"===n&&(t=!1!==a.onDynamicVLANToggle(l.parent.parent.context.$implicit)&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.dynamicVLAN=u)&&t),t},null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(4,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(6,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(8,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(9,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(10,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Dynamic VLAN"]))],function(l,n){l(n,3,0,""),l(n,6,0,"dynamicVlanSsid",n.parent.parent.context.$implicit.dynamicVLAN),l(n,10,0,"")},function(l,n){l(n,2,0,e.Ab(n,8).ngClassUntouched,e.Ab(n,8).ngClassTouched,e.Ab(n,8).ngClassPristine,e.Ab(n,8).ngClassDirty,e.Ab(n,8).ngClassValid,e.Ab(n,8).ngClassInvalid,e.Ab(n,8).ngClassPending)})}function re(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,12,"div",[["class","form-group check-group clearfix"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,11,"label",[["class","check-label"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,7,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","fast-tr-ssid"],["name","fastSrSsid"],["translate",""],["trueValue","1"],["type","checkbox"]],[[8,"checked",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e.Ab(l,4).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"click"===n&&(t=!1!==e.Ab(l,9).onInput(u)&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.ieee80211r=u)&&t),"click"===n&&(t=!1!==e.Ab(l.parent.parent.parent,31).form.markAsDirty()&&t),t},null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(4,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(6,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(8,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(9,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},null),(l()(),e.qb(10,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(11,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Fast transition (802.11r)"]))],function(l,n){l(n,3,0,""),l(n,6,0,"fastSrSsid",n.parent.parent.context.$implicit.ieee80211r),l(n,9,0,"1","0"),l(n,11,0,"")},function(l,n){l(n,2,0,1==n.parent.parent.context.$implicit.ieee80211r,e.Ab(n,8).ngClassUntouched,e.Ab(n,8).ngClassTouched,e.Ab(n,8).ngClassPristine,e.Ab(n,8).ngClassDirty,e.Ab(n,8).ngClassValid,e.Ab(n,8).ngClassInvalid,e.Ab(n,8).ngClassPending)})}function oe(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,82,"tr",[["class","vap-additional-settings"],["role","row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,81,"td",[["colspan","5"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,80,"div",[["class","vap-additional-settings-wrapper clearfix"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,79,"div",[["class","form-group col-md-7 clearfix"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,te)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(6,0,null,null,2,"label",[["class","control-label col-md-2 col-sm-3 text-right key-label"],["translate",""]],[[8,"hidden",0]],null,null,null,null)),e.pb(7,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Key:"])),(l()(),e.qb(9,0,null,null,24,"div",[["class","col-md-10 col-sm-9"]],null,null,null,null,null)),(l()(),e.qb(10,0,null,null,23,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],[[8,"hidden",0]],null,null,null,null)),(l()(),e.qb(11,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(13,16777216,null,null,11,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["containerClass","text-danger"],["id","key-ssid"],["maxlength","64"],["name","keySsid"],["triggers","none"]],[[8,"type",0],[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,14)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,14).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,14)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,14)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.key=u)&&t),"keyup"===n&&(t=!1!==a.keySsidCheck(l.parent.context.$implicit)&&t),"focus"===n&&(t=!1!==a.keySsidCheck(l.parent.context.$implicit)&&t),t},null,null)),e.pb(14,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(15,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(16,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(17,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(20,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(22,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(23,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(25,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,5,"button",[["class","btn btn-default"],["id","toggle-visibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.toggleKeyVisibility(l.parent.context.$implicit)&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(29,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(30,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(31,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),e.hb(16777216,null,null,1,null,ae)),e.pb(33,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(34,0,null,null,2,"label",[["class","control-label col-md-2 col-sm-3 text-right key-label"],["translate",""]],null,null,null,null,null)),e.pb(35,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Max. clients:"])),(l()(),e.qb(37,0,null,null,45,"div",[["class","col-md-10 col-sm-9 tiny-padding-top"]],null,null,null,null,null)),(l()(),e.qb(38,0,null,null,13,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],[[8,"hidden",0]],null,null,null,null)),(l()(),e.qb(39,0,null,null,12,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(40,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(41,16777216,null,null,10,"input",[["class","form-control"],["id","max-assoc-ssid"],["name","maxSssocSsid"],["triggers","none"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"blur"],[null,"focus"],[null,"input"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,44)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,44).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,44)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,44)._compositionEnd(u.target.value)&&t),"change"===n&&(t=!1!==e.Ab(l,45).onChange(u.target.value)&&t),"input"===n&&(t=!1!==e.Ab(l,45).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,45).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.maxassoc=u)&&t),"keyup"===n&&(t=!1!==a.maxassocCheck(l.parent.context.$implicit)&&t),"blur"===n&&(t=!1!==a.clearWarnings(l.parent.context.$implicit)&&t),"focus"===n&&(t=!1!==a.showWarnings(l.parent.context.$implicit)&&t),t},null,null)),e.pb(42,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(43,{"ng-invalid":0}),e.pb(44,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(45,16384,null,0,m.u,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l,n){return[l,n]},[m.d,m.u]),e.pb(47,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(49,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(50,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],placement:[1,"placement"],triggers:[2,"triggers"],containerClass:[3,"containerClass"],isOpen:[4,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(16777216,null,null,1,null,ie)),e.pb(53,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(54,0,null,null,8,"div",[["class","form-group check-group clearfix"]],null,null,null,null,null)),(l()(),e.qb(55,0,null,null,7,"label",[["class","check-label"]],null,null,null,null,null)),(l()(),e.qb(56,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["id","br-ssid"],["name","brSsid"],["translate",""],["trueValue","0"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e.Ab(l,59).onInput(u)&&t),"valueChange"===n&&(t=!1!==(l.parent.context.$implicit.hidden=u)&&t),"click"===n&&(t=!1!==e.Ab(l.parent.parent,31).form.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(58,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(59,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(60,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(61,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID broadcast"])),(l()(),e.qb(63,0,null,null,8,"div",[["class","form-group check-group clearfix"]],null,null,null,null,null)),(l()(),e.qb(64,0,null,null,7,"label",[["class","check-label"]],null,null,null,null,null)),(l()(),e.qb(65,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","peer-ssid"],["name","peerSsid"],["translate",""],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e.Ab(l,68).onInput(u)&&t),"valueChange"===n&&(t=!1!==(l.parent.context.$implicit.isolate=u)&&t),"click"===n&&(t=!1!==e.Ab(l.parent.parent,31).form.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(67,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(68,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(69,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(70,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Peer isolation"])),(l()(),e.qb(72,0,null,null,8,"div",[["class","form-group check-group clearfix"]],null,null,null,null,null)),(l()(),e.qb(73,0,null,null,7,"label",[["class","check-label"]],null,null,null,null,null)),(l()(),e.qb(74,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","powersave-ssid"],["name","powersaveSsid"],["translate",""],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==e.Ab(l,77).onInput(u)&&t),"valueChange"===n&&(t=!1!==(l.parent.context.$implicit.uapsd=u)&&t),"click"===n&&(t=!1!==e.Ab(l.parent.parent,31).form.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(76,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(77,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(78,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(79,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WMM Power-Save (U-APSD)"])),(l()(),e.hb(16777216,null,null,1,null,re)),e.pb(82,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,5,0,u.hideKey(n.parent.context.$implicit)),l(n,7,0,""),l(n,15,0,u.required(n.parent.context.$implicit)),l(n,16,0,"64"),l(n,17,0,u.regExPass),l(n,20,0,"keySsid",n.parent.context.$implicit.key),l(n,23,0,e.sb(1,"",e.Jb(n,23,0,e.Ab(n,24).transform(u.key_ssid_error)),""),"none","text-danger",e.sb(1,"",u.editRowName===n.parent.context.$implicit[".name"]&&u.key_ssid_error||"",""));var t=l(n,31,0,"text"==u.keyInputType,"password"==u.keyInputType);l(n,30,0,"glyphicon ",t),l(n,33,0,u.required(n.parent.context.$implicit)),l(n,35,0,"");var a=l(n,43,0,u.maxassocError);l(n,42,0,"form-control",a),l(n,47,0,"maxSssocSsid",n.parent.context.$implicit.maxassoc),l(n,50,0,e.sb(1,"",e.Jb(n,50,0,e.Ab(n,51).transform(u.maxassocMsg)),""),e.sb(1,"",u.maxassocPlacement,""),"none",e.sb(1,"",u.maxassocClass," bigger"),e.sb(1,"",(u.maxassocError||u.maxassocWarning)&&u.editRowName===n.parent.context.$implicit[".name"]||"","")),l(n,53,0,"wpa2"===n.parent.context.$implicit.encryption),l(n,58,0,""),l(n,59,0,"0","1"),l(n,61,0,""),l(n,67,0,""),l(n,68,0,"1","0"),l(n,70,0,""),l(n,76,0,""),l(n,77,0,"1","0"),l(n,79,0,""),l(n,82,0,1==n.parent.context.$implicit.show11r)},function(l,n){var u=n.component;l(n,6,0,u.hideKey(n.parent.context.$implicit)),l(n,10,0,u.hideKey(n.parent.context.$implicit)),l(n,13,1,[e.sb(1,"",u.keyInputType,""),e.Ab(n,15).required?"":null,e.Ab(n,16).maxlength?e.Ab(n,16).maxlength:null,e.Ab(n,17).pattern?e.Ab(n,17).pattern:null,e.Ab(n,22).ngClassUntouched,e.Ab(n,22).ngClassTouched,e.Ab(n,22).ngClassPristine,e.Ab(n,22).ngClassDirty,e.Ab(n,22).ngClassValid,e.Ab(n,22).ngClassInvalid,e.Ab(n,22).ngClassPending]),l(n,26,0,e.Jb(n,26,0,"text"==u.keyInputType?e.Ab(n,27).transform("Hide password"):e.Ab(n,28).transform("Show password"))),l(n,38,0,u.hideKey(n.parent.context.$implicit)),l(n,41,0,e.Ab(n,49).ngClassUntouched,e.Ab(n,49).ngClassTouched,e.Ab(n,49).ngClassPristine,e.Ab(n,49).ngClassDirty,e.Ab(n,49).ngClassValid,e.Ab(n,49).ngClassInvalid,e.Ab(n,49).ngClassPending),l(n,56,0,n.parent.context.$implicit.hidden,0==n.parent.context.$implicit.hidden),l(n,65,0,n.parent.context.$implicit.isolate,1==n.parent.context.$implicit.isolate),l(n,74,0,n.parent.context.$implicit.uapsd,1==n.parent.context.$implicit.uapsd)})}function se(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"button",[["class","btn btn-default remove-icon-button"],["id","remove-ssid"],["type","button"]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.remove(l.parent.parent.context.$implicit)&&e),e},null,null)),(l()(),e.qb(1,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-trash"]],null,null,null,null,null))],null,null)}function be(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save(l.parent.parent.context.$implicit)&&e),e},Kl.b,Kl.a)),e.pb(2,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),e.qb(3,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(4,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,2,0,!e.Ab(n.parent.parent.parent,31).dirty||e.Ab(n.parent.parent.parent,31).invalid||!u.hasRadiusAuth&&"wpa2"==n.parent.parent.context.$implicit.encryption,"save"),l(n,4,0,"cancel")},null)}function ce(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"tr",[["class","vap-additional-settings"],["role","row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,5,"td",[["colspan","5"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,4,"div",[["class","form-group col-xs-12 text-right"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,se)),e.pb(4,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,be)),e.pb(6,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,4,0,u.editRowName===n.parent.context.$implicit[".name"]&&!n.parent.context.$implicit.new),l(n,6,0,!u.isRetail)},null)}function de(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,46,"tbody",[["class","vap-rows-wrapper"]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.currentVap(l.context.$implicit)&&e),e},null,null)),(l()(),e.qb(1,0,null,null,41,"tr",[["class","doedit"],["role","row"]],[[8,"id",0],[1,"data-pkey",0],[8,"title",0],[2,"odd",null],[2,"even",null]],[[null,"click"]],function(l,n,u){var e=!0,t=l.component;return"click"===n&&(e=!1!==(t.editMode?"":t.editRow(l.context.$implicit))&&e),e},null,null)),e.pb(2,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(3,{disabled:0,editedRow:1,noEditRow:2}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(5,0,null,null,6,"td",[["class","clearfix text-center"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(7,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,_u)),e.pb(9,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ru)),e.pb(11,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(12,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(14,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Ju)),e.pb(16,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ou)),e.pb(18,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(19,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(21,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Nu)),e.pb(23,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,zu)),e.pb(25,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(26,0,null,null,9,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(28,0,null,null,7,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Lu)),e.pb(30,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(31,16777216,null,null,4,"span",[["containerClass","no-hover"],["triggers","none"]],null,null,null,null,null)),e.pb(32,212992,null,0,o.a,[e.P,e.E,e.k,s.a,b.a],{tooltip:[0,"tooltip"],triggers:[1,"triggers"],isOpen:[2,"isOpen"],containerClass:[3,"containerClass"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(16777216,null,null,1,null,Yu)),e.pb(35,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(36,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(38,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,le)),e.pb(40,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ee)),e.pb(42,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,oe)),e.pb(44,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ce)),e.pb(46,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,t=l(n,3,0,n.context.$implicit.disabled||u.editRowName&&u.editRowName!==n.context.$implicit[".name"],u.editRowName===n.context.$implicit[".name"],u.deleteInProgress||u.editRowName&&u.editRowName!==n.context.$implicit[".name"]);l(n,2,0,"doedit",t),l(n,9,0,u.editRowName!==n.context.$implicit[".name"]),l(n,11,0,u.editRowName===n.context.$implicit[".name"]),l(n,16,0,u.editRowName!==n.context.$implicit[".name"]),l(n,18,0,u.editRowName===n.context.$implicit[".name"]),l(n,23,0,u.editRowName!==n.context.$implicit[".name"]),l(n,25,0,u.editRowName===n.context.$implicit[".name"]),l(n,30,0,u.editRowName!==n.context.$implicit[".name"]),l(n,32,0,e.sb(1,"",e.Jb(n,32,0,e.Ab(n,33).transform("No encryption (not recommended)")),""),"none",e.sb(1,"","none"===n.context.$implicit.encryption&&u.editRowName===n.context.$implicit[".name"]||"",""),"no-hover"),l(n,35,0,u.editRowName===n.context.$implicit[".name"]),l(n,40,0,u.editRowName!==n.context.$implicit[".name"]),l(n,42,0,u.editRowName===n.context.$implicit[".name"]),l(n,44,0,u.editMode&&u.editRowName===n.context.$implicit[".name"]),l(n,46,0,u.editRowName===n.context.$implicit[".name"])},function(l,n){l(n,1,0,e.sb(1,"ssid-",n.context.index,""),n.context.$implicit[".name"],e.sb(1,"",e.Jb(n,1,2,e.Ab(n,4).transform("Click to edit")),""),n.context.odd,n.context.even),l(n,5,0,e.Jb(n,5,0,e.Ab(n,6).transform("Enable"))),l(n,12,0,e.Jb(n,12,0,e.Ab(n,13).transform("SSID"))),l(n,19,0,e.Jb(n,19,0,e.Ab(n,20).transform("Radio"))),l(n,26,0,e.Jb(n,26,0,e.Ab(n,27).transform("Security"))),l(n,36,0,e.Jb(n,36,0,e.Ab(n,37).transform("Default VLAN")))})}function pe(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,9,"div",[["style","margin: 40px 0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,8,"div",[["class","progress"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,7,"div",[["attr.aria-valuemax","120"],["attr.aria-valuemin","0"],["attr.aria-valuenow","elapsed || 0"],["class","progress-bar"],["role","progressbar"]],null,null,null,null,null)),e.pb(3,278528,null,0,i.r,[e.t,e.k,e.E],{ngStyle:[0,"ngStyle"]},null),e.Db(4,{width:0}),(l()(),e.Ib(5,null,[" "," "])),e.Eb(6,2),(l()(),e.qb(7,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(8,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["s"]))],function(l,n){var u=n.component,e=l(n,4,0,(u.elapsed/u.wpsCloneDuration*100||0)+"%");l(n,3,0,e),l(n,8,0,"")},function(l,n){var u=n.component,t=e.Jb(n,5,0,l(n,6,0,e.Ab(n.parent,1),u.elapsed||0,"1.0-0"));l(n,5,0,t)})}function ge(l){return e.Kb(0,[e.Cb(0,v.a,[]),e.Cb(0,i.f,[e.u]),e.Gb(402653184,1,{filterTable:0}),e.Gb(402653184,2,{delos:0}),(l()(),e.qb(4,0,null,null,75,"div",[["class","vendor-tables"],["id","wifi-vaps"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,23,"app-search-box",[],null,null,null,h.b,h.a)),e.pb(6,114688,null,0,f.a,[],null,null),(l()(),e.qb(7,0,null,0,7,"input",[["class","col-md-8"],["id","search-vaps"],["type","text"]],[[8,"placeholder",0],[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,8)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,8).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,8)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,8)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.searchVAPs=u)&&t),t},null,null)),e.pb(8,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(10,671744,null,0,m.n,[[8,null],[8,null],[8,null],[6,m.i]],{model:[0,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(12,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(13,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,1,5,"div",[],null,null,null,null,null)),(l()(),e.Ib(16,null,[" "," "])),e.Bb(17,3),e.Cb(0,c.a,[]),e.Db(19,{num:0,all:1}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(21,0,null,2,7,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,3,"button",[["class","btn btn-default small"],["id","clone-ssid"],["translate",""]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.wps_clone()&&e),e},null,null)),e.pb(23,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.Ib(-1,null,["Clone SSID"])),(l()(),e.qb(26,0,null,null,2,"button",[["class","btn btn-default small"],["id","add-ssid"]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.add()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(28,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-plus"]],null,null,null,null,null)),(l()(),e.qb(29,0,null,null,48,"form",[["class","form"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,31).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,31).onReset()&&t),t},null,null)),e.pb(30,16384,null,0,m.w,[],null,null),e.pb(31,4210688,[[2,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(33,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(34,0,null,null,43,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),e.qb(35,0,null,null,42,"table",[["class","dataTable dataTableHighlight vendorTable-responsive vaptable"],["id","foundVAPs"]],null,null,null,null,null)),(l()(),e.qb(36,0,null,null,31,"thead",[],null,null,null,null,null)),(l()(),e.qb(37,0,null,null,30,"tr",[],null,null,null,null,null)),(l()(),e.qb(38,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(39,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("disabled")&&e),e},null,null)),e.pb(40,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.hb(16777216,null,null,1,null,Pu)),e.pb(43,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(44,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(45,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("ssid")&&e),e},null,null)),e.pb(46,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID"])),(l()(),e.hb(16777216,null,null,1,null,Mu)),e.pb(49,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(50,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(51,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("device")&&e),e},null,null)),e.pb(52,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radio"])),(l()(),e.hb(16777216,null,null,1,null,Eu)),e.pb(55,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(56,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(57,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("encryption")&&e),e},null,null)),e.pb(58,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Security"])),(l()(),e.hb(16777216,null,null,1,null,ju)),e.pb(61,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(62,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(63,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("vlanid")&&e),e},null,null)),e.pb(64,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Default VLAN"])),(l()(),e.hb(16777216,null,null,1,null,Tu)),e.pb(67,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(68,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Fu)),e.pb(70,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ku)),e.pb(72,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,4,null,de)),e.pb(74,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"],ngForTrackBy:[1,"ngForTrackBy"]},null),e.Eb(75,3),e.Bb(76,3),e.Cb(0,c.a,[]),(l()(),e.hb(16777216,null,null,1,null,pe)),e.pb(79,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,6,0),l(n,10,0,u.searchVAPs),l(n,13,0),l(n,23,0,""),l(n,40,0,""),l(n,43,0,"disabled"===u.orderby),l(n,46,0,""),l(n,49,0,"ssid"===u.orderby),l(n,52,0,""),l(n,55,0,"device"===u.orderby),l(n,58,0,""),l(n,61,0,"encryption"===u.orderby),l(n,64,0,""),l(n,67,0,"vlanid"===u.orderby),l(n,70,0,!u.vaps.length),l(n,72,0,u.vaps.length);var t=e.Jb(n,74,0,e.Ab(n,77).transform(e.Jb(n,74,0,l(n,75,0,e.Ab(n,0),u.vaps,u.orderby,u.reverse)),u.searchVAPs,l(n,76,0,"ssid","deviceName","encryptionName")));l(n,74,0,t,u.trackByIndex),l(n,79,0,"running"===u.wpsCloneState||"pending"===u.wpsCloneState)},function(l,n){var u=n.component;l(n,7,0,e.sb(1,"",e.Jb(n,7,0,e.Ab(n,14).transform("Search ...")),""),void 0!==u.editRowName,e.Ab(n,12).ngClassUntouched,e.Ab(n,12).ngClassTouched,e.Ab(n,12).ngClassPristine,e.Ab(n,12).ngClassDirty,e.Ab(n,12).ngClassValid,e.Ab(n,12).ngClassInvalid,e.Ab(n,12).ngClassPending);var t=e.Jb(n,16,0,e.Ab(n,20).transform("display {num} of {all}",l(n,19,0,e.Jb(n,16,0,e.Ab(n,18).transform(u.vaps,u.searchVAPs,l(n,17,0,"ssid","deviceName","encryptionName"))).length,u.vaps.length)));l(n,16,0,t),l(n,22,0,e.sb(1,"",e.Jb(n,22,0,e.Ab(n,24).transform(u.cloneSsidButtonTitle)),""),void 0!==u.editRowName||0==u.allowNewVaps||u.radiosDisabled),l(n,26,0,e.sb(1,"",e.Jb(n,26,0,e.Ab(n,27).transform("Add new SSID")),""),void 0!==u.editRowName||0==u.allowNewVaps||"stopped"!=u.wpsCloneState),l(n,29,0,e.Ab(n,33).ngClassUntouched,e.Ab(n,33).ngClassTouched,e.Ab(n,33).ngClassPristine,e.Ab(n,33).ngClassDirty,e.Ab(n,33).ngClassValid,e.Ab(n,33).ngClassInvalid,e.Ab(n,33).ngClassPending)})}function he(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-vaps",[],null,null,null,ge,wu)),e.Fb(512,null,Fn.a,Fn.a,[I.a,x.a]),e.pb(2,245760,null,0,xu.a,[Fn.a,Wl.a,Vn.a,Hl.a,E.a],null,null)],function(l,n){l(n,2,0)},null)}var fe=e.mb("app-vaps",xu.a,he,{},{},[]),me=u("FV9V"),ve=u("Y/Uj"),Ce=e.ob({encapsulation:2,styles:[],data:{}});function Ae(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit.id,"")),l(n,2,0,e.sb(1,"",n.context.$implicit.id,""))},function(l,n){l(n,3,0,n.context.$implicit.description)})}function ke(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,13,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","device"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radio:"])),(l()(),e.qb(4,0,null,null,9,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,8,"select",[["class","form-control"],["id","device"],["name","device"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,6).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,6).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.bridge.device=u)&&t),"change"===n&&(t=!1!==a.onRadioChange()&&t),t},null,null)),e.pb(6,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(8,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,2,null,Ae)),e.pb(12,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Eb(13,2)],function(l,n){var u=n.component;l(n,2,0,""),l(n,8,0,"device",u.bridge.device);var t=e.Jb(n,12,0,l(n,13,0,e.Ab(n.parent.parent,0),u.devices,"-frequency"));l(n,12,0,t)},function(l,n){l(n,5,0,e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending)})}function ye(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,23,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","key"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WPA2 pre-shared key:"])),(l()(),e.qb(4,0,null,null,19,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,18,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(6,16777216,null,null,10,"input",[["autocomplete","off"],["class","form-control"],["containerClass","text-danger"],["id","key"],["name","key"],["triggers","none"],["type","{wpa2KeyInputType}}"]],[[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,7)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,7).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,7)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,7)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.bridge.key=u)&&t),t},null,null)),e.pb(7,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(8,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(9,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n){return[l,n]},[m.q,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(12,671744,[["key",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(14,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(15,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(17,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(18,0,null,null,5,"button",[["class","btn btn-default"],["id","btn-wpa2KeyInputTypeVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.wpa2KeyInputTypeVisibility()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(21,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(22,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(23,{"glyphicon-eye-close":0,"glyphicon-eye-open":1})],function(l,n){var u=n.component;l(n,2,0,""),l(n,8,0,u.bridgeEnabled&&"psk2"===u.bridge.encryption),l(n,9,0,u.regExPass),l(n,12,0,"key",u.bridge.key),l(n,15,0,e.sb(1,"",e.Jb(n,15,0,e.Ab(n,16).transform("A pre-shared key is required (8-64 characters)!")),""),"none","text-danger",e.sb(1,"",e.Ab(n,12).invalid&&e.Ab(n,12).dirty&&!(e.Ab(n.parent,22).invalid&&e.Ab(n.parent,22).dirty)||"",""));var t=l(n,23,0,"text"==u.wpa2KeyInputType,"password"==u.wpa2KeyInputType);l(n,22,0,"glyphicon ",t)},function(l,n){var u=n.component;l(n,6,0,e.Ab(n,8).required?"":null,e.Ab(n,9).pattern?e.Ab(n,9).pattern:null,e.Ab(n,14).ngClassUntouched,e.Ab(n,14).ngClassTouched,e.Ab(n,14).ngClassPristine,e.Ab(n,14).ngClassDirty,e.Ab(n,14).ngClassValid,e.Ab(n,14).ngClassInvalid,e.Ab(n,14).ngClassPending),l(n,18,0,e.Jb(n,18,0,"text"==u.wpa2KeyInputType?e.Ab(n,19).transform("Hide password"):e.Ab(n,20).transform("Show password")))})}function qe(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,38,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,14,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","identity"],["translate",""]],null,null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["RADIUS username:"])),(l()(),e.qb(5,0,null,null,10,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(6,16777216,null,null,9,"input",[["class","form-control"],["containerClass","text-danger"],["id","rad-username"],["name","identity"],["triggers","none"]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,7)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,7).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,7)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,7)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.bridge.identity=u)&&t),t},null,null)),e.pb(7,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(8,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(11,671744,[["identity",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(13,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(14,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(16,0,null,null,22,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(17,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","password"],["translate",""]],null,null,null,null,null)),e.pb(18,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["RADIUS password:"])),(l()(),e.qb(20,0,null,null,18,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(21,0,null,null,17,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(22,16777216,null,null,9,"input",[["class","form-control"],["containerClass","text-danger"],["id","rad-password"],["name","password"],["triggers","none"]],[[8,"type",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,23)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,23).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,23)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,23)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.bridge.password=u)&&t),t},null,null)),e.pb(23,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(24,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(27,671744,[["password",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(29,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(30,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(32,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(33,0,null,null,5,"button",[["class","btn btn-default"],["id","btn-radiusPassInputTypeVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.radiusPassInputTypeVisibility()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(36,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(37,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(38,{"glyphicon-eye-close":0,"glyphicon-eye-open":1})],function(l,n){var u=n.component;l(n,3,0,""),l(n,8,0,u.bridgeEnabled&&"wpa2"===u.bridge.encryption),l(n,11,0,"identity",u.bridge.identity),l(n,14,0,e.sb(1,"",e.Jb(n,14,0,e.Ab(n,15).transform("A RADIUS username is required!")),""),"none","text-danger",e.sb(1,"",e.Ab(n,11).invalid&&e.Ab(n,11).dirty&&!(e.Ab(n.parent,22).invalid&&e.Ab(n.parent,22).dirty)||"","")),l(n,18,0,""),l(n,24,0,u.bridgeEnabled&&"wpa2"===u.bridge.encryption),l(n,27,0,"password",u.bridge.password),l(n,30,0,e.sb(1,"",e.Jb(n,30,0,e.Ab(n,31).transform("A RADIUS password is required!")),""),"none","text-danger",e.sb(1,"",e.Ab(n,27).invalid&&e.Ab(n,27).dirty&&!e.Ab(n,11).invalid&&!(e.Ab(n.parent,22).invalid&&e.Ab(n.parent,22).dirty)||"",""));var t=l(n,38,0,"text"==u.radiusPassInputType,"password"==u.radiusPassInputType);l(n,37,0,"glyphicon ",t)},function(l,n){var u=n.component;l(n,6,0,e.Ab(n,8).required?"":null,e.Ab(n,13).ngClassUntouched,e.Ab(n,13).ngClassTouched,e.Ab(n,13).ngClassPristine,e.Ab(n,13).ngClassDirty,e.Ab(n,13).ngClassValid,e.Ab(n,13).ngClassInvalid,e.Ab(n,13).ngClassPending),l(n,22,0,e.sb(1,"",u.radiusPassInputType,""),e.Ab(n,24).required?"":null,e.Ab(n,29).ngClassUntouched,e.Ab(n,29).ngClassTouched,e.Ab(n,29).ngClassPristine,e.Ab(n,29).ngClassDirty,e.Ab(n,29).ngClassValid,e.Ab(n,29).ngClassInvalid,e.Ab(n,29).ngClassPending),l(n,33,0,e.Jb(n,33,0,"text"==u.radiusPassInputType?e.Ab(n,34).transform("Hide password"):e.Ab(n,35).transform("Show password")))})}function Ie(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,[""," (",")"]))],function(l,n){l(n,1,0,e.sb(1,"",n.context.$implicit.vlan_id,"")),l(n,2,0,e.sb(1,"",n.context.$implicit.vlan_id,""))},function(l,n){l(n,3,0,n.context.$implicit.name,n.context.$implicit.id)})}function xe(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,13,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","network"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["VLAN:"])),(l()(),e.qb(4,0,null,null,9,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,8,"select",[["class","form-control edit-encryption"],["id","network"],["name","network"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,6).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,6).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.bridge.network=u)&&t),t},null,null)),e.pb(6,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(8,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,2,null,Ie)),e.pb(12,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Eb(13,2)],function(l,n){var u=n.component;l(n,2,0,""),l(n,8,0,"network",u.bridge.network);var t=e.Jb(n,12,0,l(n,13,0,e.Ab(n.parent.parent,0),u.vlans,"name"));l(n,12,0,t)},function(l,n){l(n,5,0,e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending)})}function we(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,54,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,ke)),e.pb(2,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(3,0,null,null,7,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,2,"label",[["class","col-md-3 control-label"],["translate",""]],null,null,null,null,null)),e.pb(5,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radio channel:"])),(l()(),e.qb(7,0,null,null,3,"div",[["class","col-md-7"],["style","padding-top: 7px;"]],null,null,null,null,null)),e.pb(8,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(9,{"text-error":0}),(l()(),e.Ib(10,null,[" "," "])),(l()(),e.qb(11,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","ssid"],["translate",""]],null,null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID:"])),(l()(),e.qb(15,0,null,null,12,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(16,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","ssid"],["name","ssid"],["required",""],["triggers","none"]],[[8,"placeholder",0],[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,17)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,17).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,17)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,17)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.bridge.ssid=u)&&t),t},null,null)),e.pb(17,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(18,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(19,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n){return[l,n]},[m.q,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(22,671744,[["ssid",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(24,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(25,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(28,0,null,null,20,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(29,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","encryption"],["translate",""]],null,null,null,null,null)),e.pb(30,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Security:"])),(l()(),e.qb(32,0,null,null,16,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(33,0,null,null,15,"select",[["class","form-control edit-encryption"],["id","encryption"],["name","encryption"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,34).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,34).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.bridge.encryption=u)&&t),"change"===n&&(t=!1!==a.onEncryptionChange()&&t),t},null,null)),e.pb(34,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(36,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(38,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(39,0,null,null,4,"option",[["translate",""],["value","psk2"]],null,null,null,null,null)),e.pb(40,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(41,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(42,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["WPA2 Personal"])),(l()(),e.qb(44,0,null,null,4,"option",[["translate",""],["value","wpa2"]],null,null,null,null,null)),e.pb(45,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(46,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(47,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["WPA2 Enterprise"])),(l()(),e.hb(16777216,null,null,1,null,ye)),e.pb(50,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,qe)),e.pb(52,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,xe)),e.pb(54,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.devices.length>1),l(n,5,0,"");var t=l(n,9,0,"auto"===u.radioChannel);l(n,8,0,"col-md-7",t),l(n,13,0,""),l(n,18,0,u.bridgeEnabled),l(n,19,0,u.regExSsid),l(n,22,0,"ssid",u.bridge.ssid),l(n,25,0,e.sb(1,"",e.Jb(n,25,0,e.Ab(n,26).transform("Invalid SSID!  Please enter between 1 and 32 characters).")),""),"none","text-danger",e.sb(1,"",e.Ab(n,22).invalid&&e.Ab(n,22).dirty||"","")),l(n,30,0,""),l(n,36,0,"encryption",u.bridge.encryption),l(n,40,0,""),l(n,41,0,"psk2"),l(n,42,0,"psk2"),l(n,45,0,""),l(n,46,0,"wpa2"),l(n,47,0,"wpa2"),l(n,50,0,"psk2"===u.bridge.encryption),l(n,52,0,"wpa2"===u.bridge.encryption),l(n,54,0,u.hasVLANs)},function(l,n){l(n,10,0,n.component.radioChanne),l(n,16,0,e.sb(1,"",e.Jb(n,16,0,e.Ab(n,27).transform("SSID")),""),e.Ab(n,18).required?"":null,e.Ab(n,19).pattern?e.Ab(n,19).pattern:null,e.Ab(n,24).ngClassUntouched,e.Ab(n,24).ngClassTouched,e.Ab(n,24).ngClassPristine,e.Ab(n,24).ngClassDirty,e.Ab(n,24).ngClassValid,e.Ab(n,24).ngClassInvalid,e.Ab(n,24).ngClassPending),l(n,33,0,e.Ab(n,38).ngClassUntouched,e.Ab(n,38).ngClassTouched,e.Ab(n,38).ngClassPristine,e.Ab(n,38).ngClassDirty,e.Ab(n,38).ngClassValid,e.Ab(n,38).ngClassInvalid,e.Ab(n,38).ngClassPending)})}function Pe(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,1,0,u.bridgeEnabled&&e.Ab(n.parent,5).invalid||u.channelIsAuto,"save")},null)}function Me(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function Ee(l){return e.Kb(0,[e.Cb(0,v.a,[]),e.Gb(402653184,1,{delos:0}),(l()(),e.qb(2,0,null,null,23,"div",[["class","vendor-dialogs"],["id","wifi-bridge"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,22,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,5).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,5).onReset()&&t),t},null,null)),e.pb(4,16384,null,0,m.w,[],null,null),e.pb(5,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(7,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(8,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(9,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Bridge to Remote Access Point (WDS)"])),(l()(),e.qb(11,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,0,"input",[["id","password"],["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(13,0,null,null,10,"label",[],null,null,null,null,null)),(l()(),e.qb(14,0,null,null,6,"input",[["id","enable-bridge"],["name","bridgeEnabled"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,15).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,15).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.bridgeEnabled=u)&&t),"change"===n&&(t=!1!==a.onStateChange()&&t),t},null,null)),e.pb(15,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(17,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(19,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(20,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(21,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(22,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.hb(16777216,null,null,1,null,we)),e.pb(25,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Pe)),e.pb(27,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Me)),e.pb(29,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,9,0,""),l(n,17,0,"bridgeEnabled",u.bridgeEnabled),l(n,20,0),l(n,22,0,""),l(n,25,0,u.bridgeEnabled),l(n,27,0,e.Ab(n,5).dirty),l(n,29,0,e.Ab(n,5).dirty)},function(l,n){l(n,3,0,e.Ab(n,7).ngClassUntouched,e.Ab(n,7).ngClassTouched,e.Ab(n,7).ngClassPristine,e.Ab(n,7).ngClassDirty,e.Ab(n,7).ngClassValid,e.Ab(n,7).ngClassInvalid,e.Ab(n,7).ngClassPending),l(n,14,0,e.Ab(n,19).ngClassUntouched,e.Ab(n,19).ngClassTouched,e.Ab(n,19).ngClassPristine,e.Ab(n,19).ngClassDirty,e.Ab(n,19).ngClassValid,e.Ab(n,19).ngClassInvalid,e.Ab(n,19).ngClassPending)})}function je(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-bridge",[],null,null,null,Ee,Ce)),e.Fb(512,null,me.a,me.a,[I.a,x.a]),e.pb(2,114688,null,0,ve.a,[me.a,Ol.a,Hl.a,r.j,Vn.a,M.a],null,null)],function(l,n){l(n,2,0)},null)}var Te=e.mb("app-bridge",ve.a,je,{},{},[]),Fe=u("HYbQ"),Se=u("rf+q"),Ve=e.ob({encapsulation:0,styles:[["h3[_ngcontent-%COMP%]{clear:both}h3[_ngcontent-%COMP%]:not(:first-child){padding-top:20px}"]],data:{}});function $e(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,e.Ab(n.parent,4).invalid,"save")},null)}function De(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function Be(l){return e.Kb(0,[e.Gb(402653184,1,{delos:0}),(l()(),e.qb(1,0,null,null,125,"div",[["class","vendor-dialogs"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,124,"form",[["autocomplete","off"],["class","form-horizontal"],["id","radiusConfig"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0,a=l.component;return"submit"===n&&(t=!1!==e.Ab(l,4).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,4).onReset()&&t),"submit"===n&&(t=!1!==a.save()&&t),t},null,null)),e.pb(3,16384,null,0,m.w,[],null,null),e.pb(4,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(6,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(7,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(8,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Authentication Server"])),(l()(),e.qb(10,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(11,0,null,null,14,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","auth_server"],["translate",""]],null,null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Server:"])),(l()(),e.qb(15,0,null,null,10,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(16,16777216,null,null,9,"input",[["class","form-control"],["containerClass","text-danger"],["data-maybe-empty","true"],["delosIp",""],["id","auth_server"],["name","auth_server"],["triggers","none"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,17)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,17).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,17)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,17)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radius.auth_server=u)&&t),t},null,null)),e.pb(17,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(19,671744,[["authserver",4]],0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(21,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(22,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),e.pb(23,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(26,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(27,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","auth_port"],["translate",""]],null,null,null,null,null)),e.pb(28,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Port:"])),(l()(),e.qb(30,0,null,null,11,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(31,16777216,null,null,10,"input",[["class","form-control"],["containerClass","text-danger"],["id","auth_port"],["name","auth_port"],["triggers","none"],["type","text"]],[[8,"min",0],[8,"max",0],[8,"placeholder",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"keypress"],[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,32)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,32).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,32)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,32)._compositionEnd(u.target.value)&&t),"keypress"===n&&(t=!1!==a.onlyDecimalNumberKey(u)&&t),"ngModelChange"===n&&(t=!1!==(a.radius.auth_port=u)&&t),t},null,null)),e.pb(32,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(33,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(36,671744,[["authport",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(38,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(39,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(42,0,null,null,84,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(43,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","auth_secret"],["translate",""],["translate-context","RADIUS secret"]],null,null,null,null,null)),e.pb(44,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Secret:"])),(l()(),e.qb(46,0,null,null,21,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(47,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(48,16777216,null,null,12,"input",[["attr.aria-describedby","basic-addon1"],["autocomplete","off"],["class","form-control"],["containerClass","text-danger"],["id","auth_secret"],["maxlength","64"],["minlength","1"],["name","auth_secret"],["triggers","none"]],[[8,"type",0],[8,"placeholder",0],[1,"minlength",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,49)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,49).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,49)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,49)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radius.auth_secret=u)&&t),t},null,null)),e.pb(49,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(50,540672,null,0,m.g,[],{minlength:[0,"minlength"]},null),e.pb(51,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(52,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.g,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(55,671744,[["authsecret",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(57,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(58,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(61,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(62,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleAuthPasswordVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.toggleAuthPasswordVisibility()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(65,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(66,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(67,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),e.qb(68,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(69,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Accounting Server"])),(l()(),e.qb(71,0,null,null,13,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(72,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","acct_server"],["translate",""]],null,null,null,null,null)),e.pb(73,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Server:"])),(l()(),e.qb(75,0,null,null,9,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(76,16777216,null,null,8,"input",[["class","form-control"],["containerClass","text-danger"],["data-maybe-empty","true"],["delosIp",""],["id","acct_server"],["name","acct_server"],["triggers","none"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,77)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,77).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,77)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,77)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radius.acct_server=u)&&t),t},null,null)),e.pb(77,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(79,671744,[["acctserver",4]],0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(81,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(82,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(85,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(86,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","acct_port"],["translate",""]],null,null,null,null,null)),e.pb(87,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Port:"])),(l()(),e.qb(89,0,null,null,11,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(90,16777216,null,null,10,"input",[["class","form-control"],["containerClass","text-danger"],["id","acct_port"],["name","acct_port"],["triggers","none"],["type","text"]],[[8,"min",0],[8,"max",0],[8,"placeholder",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"keypress"],[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,91)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,91).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,91)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,91)._compositionEnd(u.target.value)&&t),"keypress"===n&&(t=!1!==a.onlyDecimalNumberKey(u)&&t),"ngModelChange"===n&&(t=!1!==(a.radius.acct_port=u)&&t),t},null,null)),e.pb(91,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(92,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(95,671744,[["acctport",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(97,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(98,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(101,0,null,null,25,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(102,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","acct_secret"],["translate",""],["translate-context","RADIUS secret"]],null,null,null,null,null)),e.pb(103,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Secret:"])),(l()(),e.qb(105,0,null,null,21,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),e.qb(106,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(107,16777216,null,null,12,"input",[["autocomplete","off"],["class","form-control"],["containerClass","text-danger"],["id","acct_secret"],["maxlength","64"],["minlength","1"],["name","acct_secret"],["ng-trim","false"],["triggers","none"]],[[8,"type",0],[8,"placeholder",0],[1,"minlength",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,108)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,108).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,108)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,108)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.radius.acct_secret=u)&&t),t},null,null)),e.pb(108,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(109,540672,null,0,m.g,[],{minlength:[0,"minlength"]},null),e.pb(110,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(111,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.g,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(114,671744,[["acctsecret",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(116,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(117,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(120,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(121,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleAcctPasswordVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.toggleAcctPasswordVisibility()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(124,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(125,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(126,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),e.hb(16777216,null,null,1,null,$e)),e.pb(128,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,De)),e.pb(130,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,8,0,""),l(n,13,0,""),l(n,19,0,"auth_server",u.radius.auth_server),l(n,22,0),l(n,23,0,e.sb(1,"",e.Jb(n,23,0,e.Ab(n,24).transform("Invalid IP address!")),""),"none","text-danger",e.sb(1,"",e.Ab(n,19).invalid&&e.Ab(n,19).dirty||"","")),l(n,28,0,""),l(n,33,0,u.digitsPattern),l(n,36,0,"auth_port",u.radius.auth_port),l(n,39,0,e.sb(1,"",e.Jb(n,39,0,e.Ab(n,40).transform("Invalid port! Please enter a value between 1 and 65535.")),""),"none","text-danger",e.sb(1,"",e.Ab(n,36).invalid||"","")),l(n,44,0,""),l(n,50,0,"1"),l(n,51,0,"64"),l(n,52,0,u.authsecretPattern),l(n,55,0,"auth_secret",u.radius.auth_secret),l(n,58,0,e.sb(1,"",e.Jb(n,58,0,e.Ab(n,59).transform("Enter between 1 and 64 of these characters:"))," a-z A-Z 0-9  \xa0\xa0  ! # $ % & ( ) * + , - . / : ; < = > ? @ [  ] ^ _ ` { | } ~"),"none","text-danger",e.sb(1,"",e.Ab(n,55).invalid||"",""));var t=l(n,67,0,"text"==u.authSecretInputType,"password"==u.authSecretInputType);l(n,66,0,"glyphicon ",t),l(n,69,0,""),l(n,73,0,""),l(n,79,0,"acct_server",u.radius.acct_server),l(n,82,0,e.sb(1,"",e.Jb(n,82,0,e.Ab(n,83).transform("Invalid IP address!")),""),"none","text-danger",e.sb(1,"",e.Ab(n,79).invalid&&e.Ab(n,79).dirty||"","")),l(n,87,0,""),l(n,92,0,u.digitsPattern),l(n,95,0,"acct_port",u.radius.acct_port),l(n,98,0,e.sb(1,"",e.Jb(n,98,0,e.Ab(n,99).transform("Invalid port! Please enter a value between 1 and 65535.")),""),"none","text-danger",e.sb(1,"",e.Ab(n,95).invalid||"","")),l(n,103,0,""),l(n,109,0,"1"),l(n,110,0,"64"),l(n,111,0,u.acctsecretPattern),l(n,114,0,"acct_secret",u.radius.acct_secret),l(n,117,0,e.sb(1,"",e.Jb(n,117,0,e.Ab(n,118).transform("Enter between 1 and 64 of these characters:"))," a-z A-Z 0-9  \xa0\xa0  ! # $ % & ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~"),"none","text-danger",e.sb(1,"",e.Ab(n,114).invalid||"",""));var a=l(n,126,0,"text"==u.acctSecretInputType,"password"==u.acctSecretInputType);l(n,125,0,"glyphicon ",a),l(n,128,0,e.Ab(n,4).dirty),l(n,130,0,e.Ab(n,4).dirty)},function(l,n){var u=n.component;l(n,2,0,e.Ab(n,6).ngClassUntouched,e.Ab(n,6).ngClassTouched,e.Ab(n,6).ngClassPristine,e.Ab(n,6).ngClassDirty,e.Ab(n,6).ngClassValid,e.Ab(n,6).ngClassInvalid,e.Ab(n,6).ngClassPending),l(n,16,0,e.sb(1,"",e.Jb(n,16,0,e.Ab(n,25).transform("IPv4 address")),""),e.Ab(n,21).ngClassUntouched,e.Ab(n,21).ngClassTouched,e.Ab(n,21).ngClassPristine,e.Ab(n,21).ngClassDirty,e.Ab(n,21).ngClassValid,e.Ab(n,21).ngClassInvalid,e.Ab(n,21).ngClassPending),l(n,31,1,[1,65535,e.sb(1,"",e.Jb(n,31,2,e.Ab(n,41).transform("Port number")),""),e.Ab(n,33).pattern?e.Ab(n,33).pattern:null,e.Ab(n,38).ngClassUntouched,e.Ab(n,38).ngClassTouched,e.Ab(n,38).ngClassPristine,e.Ab(n,38).ngClassDirty,e.Ab(n,38).ngClassValid,e.Ab(n,38).ngClassInvalid,e.Ab(n,38).ngClassPending]),l(n,48,1,[e.sb(1,"",u.authSecretInputType,""),e.sb(1,"",e.Jb(n,48,1,e.Ab(n,60).transform("Server-side NAS key")),""),e.Ab(n,50).minlength?e.Ab(n,50).minlength:null,e.Ab(n,51).maxlength?e.Ab(n,51).maxlength:null,e.Ab(n,52).pattern?e.Ab(n,52).pattern:null,e.Ab(n,57).ngClassUntouched,e.Ab(n,57).ngClassTouched,e.Ab(n,57).ngClassPristine,e.Ab(n,57).ngClassDirty,e.Ab(n,57).ngClassValid,e.Ab(n,57).ngClassInvalid,e.Ab(n,57).ngClassPending]),l(n,62,0,e.Jb(n,62,0,"text"==u.authSecretInputType?e.Ab(n,63).transform("Hide password"):e.Ab(n,64).transform("Show password"))),l(n,76,0,e.sb(1,"",e.Jb(n,76,0,e.Ab(n,84).transform("IPv4 address")),""),e.Ab(n,81).ngClassUntouched,e.Ab(n,81).ngClassTouched,e.Ab(n,81).ngClassPristine,e.Ab(n,81).ngClassDirty,e.Ab(n,81).ngClassValid,e.Ab(n,81).ngClassInvalid,e.Ab(n,81).ngClassPending),l(n,90,1,[1,65535,e.sb(1,"",e.Jb(n,90,2,e.Ab(n,100).transform("Port number")),""),e.Ab(n,92).pattern?e.Ab(n,92).pattern:null,e.Ab(n,97).ngClassUntouched,e.Ab(n,97).ngClassTouched,e.Ab(n,97).ngClassPristine,e.Ab(n,97).ngClassDirty,e.Ab(n,97).ngClassValid,e.Ab(n,97).ngClassInvalid,e.Ab(n,97).ngClassPending]),l(n,107,1,[e.sb(1,"",u.acctSecretInputType,""),e.sb(1,"",e.Jb(n,107,1,e.Ab(n,119).transform("Server-side NAS key")),""),e.Ab(n,109).minlength?e.Ab(n,109).minlength:null,e.Ab(n,110).maxlength?e.Ab(n,110).maxlength:null,e.Ab(n,111).pattern?e.Ab(n,111).pattern:null,e.Ab(n,116).ngClassUntouched,e.Ab(n,116).ngClassTouched,e.Ab(n,116).ngClassPristine,e.Ab(n,116).ngClassDirty,e.Ab(n,116).ngClassValid,e.Ab(n,116).ngClassInvalid,e.Ab(n,116).ngClassPending]),l(n,121,0,e.Jb(n,121,0,"text"==u.acctSecretInputType?e.Ab(n,122).transform("Hide password"):e.Ab(n,123).transform("Show password")))})}function Ke(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-radius",[],null,null,null,Be,Ve)),e.Fb(512,null,Fe.a,Fe.a,[I.a,x.a]),e.pb(2,114688,null,0,Se.a,[Ol.a,Hl.a,Fe.a],null,null)],function(l,n){l(n,2,0)},null)}var _e=e.mb("app-radius",Se.a,Ke,{},{},[]),Re=u("P/o0"),Je=u("ycm9"),Oe=e.ob({encapsulation:2,styles:[],data:{}});function Ne(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"p",[],null,null,null,null,null)),(l()(),e.Ib(1,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){var u=n.component;l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform(u.message)))})}function Ue(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"a",[["id","scanner-network-name"],["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("ssid")&&e),e},null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Network name"]))],function(l,n){l(n,1,0,"")},null)}function We(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"a",[["id","scanner-ssid"],["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("ssid")&&e),e},null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID"]))],function(l,n){l(n,1,0,"")},null)}function He(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function ze(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Le(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"a",[["id","scanner-bssid"],["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("bssid")&&e),e},null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["BSSID"])),(l()(),e.hb(16777216,null,null,1,null,ze)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,5,0,"bssid"===u.orderby)},null)}function Ge(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Ye(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Qe(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"a",[["id","scanner-signal"],["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("signal")&&e),e},null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Signal (dBm)"])),(l()(),e.hb(16777216,null,null,1,null,Ye)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,5,0,"signal"===u.orderby)},null)}function Ze(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),e.pb(1,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function Xe(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(3,null,["",""]))],null,function(l,n){l(n,0,0,e.sb(1,"",e.Jb(n,0,0,e.Ab(n,1).transform("BSSID")),"")),l(n,2,0,e.sb(1,"bssid_",n.parent.context.index,"")),l(n,3,0,n.parent.context.$implicit.bssid)})}function lt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(3,null,["",""]))],null,function(l,n){l(n,0,0,e.sb(1,"",e.Jb(n,0,0,e.Ab(n,1).transform("Signal (dBm)")),"")),l(n,2,0,e.sb(1,"signal_",n.parent.context.index,"")),l(n,3,0,n.parent.context.$implicit.signal)})}function nt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,16,"tr",[["role","row"]],[[2,"odd",null],[2,"even",null]],null,null,null,null)),(l()(),e.qb(1,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(4,null,["",""])),(l()(),e.hb(16777216,null,null,1,null,Xe)),e.pb(6,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(7,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(9,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(10,null,["",""])),(l()(),e.hb(16777216,null,null,1,null,lt)),e.pb(12,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(13,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(16,null,["",""]))],function(l,n){l(n,6,0,null),l(n,12,0,null)},function(l,n){l(n,0,0,n.context.odd,n.context.even),l(n,1,0,e.sb(1,"",e.Jb(n,1,0,e.Ab(n,2).transform("SSID")),"")),l(n,3,0,e.sb(1,"ssid_",n.context.index,"")),l(n,4,0,n.context.$implicit.ssid),l(n,7,0,e.sb(1,"",e.Jb(n,7,0,e.Ab(n,8).transform("Channel")),"")),l(n,9,0,e.sb(1,"channel_",n.context.index,"")),l(n,10,0,n.context.$implicit.channel),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,14).transform("Signal quality (%)")),"")),l(n,15,0,e.sb(1,"signal_q_",n.context.index,"")),l(n,16,0,n.context.$implicit.quality)})}function ut(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,51,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,18,"app-search-box",[],null,null,null,h.b,h.a)),e.pb(2,114688,null,0,f.a,[],null,null),(l()(),e.qb(3,0,null,0,7,"input",[["class",""],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,4)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,4)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,4)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.searchStation=u)&&t),t},null,null)),e.pb(4,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(6,671744,null,0,m.n,[[8,null],[8,null],[8,null],[6,m.i]],{model:[0,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(8,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(9,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(11,0,null,1,4,"div",[],null,null,null,null,null)),(l()(),e.Ib(12,null,[" "," "])),e.Cb(0,c.a,[]),e.Db(14,{num:0,all:1}),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(16,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),e.qb(17,0,null,null,2,"button",[["class","btn btn-default small"],["id","btn-scan"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.scan()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(19,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(l()(),e.qb(20,0,null,null,31,"div",[["class","table-responsive"]],null,null,null,null,null)),(l()(),e.qb(21,0,null,null,30,"table",[["class","dataTable vendorTable-responsive"],["id","foundStations"]],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,24,"thead",[],null,null,null,null,null)),(l()(),e.qb(23,0,null,null,23,"tr",[],null,null,null,null,null)),(l()(),e.qb(24,0,null,null,6,"th",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Ue)),e.pb(26,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,We)),e.pb(28,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,He)),e.pb(30,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Le)),e.pb(32,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(33,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(34,0,null,null,2,"a",[["id","scanner-channel"],["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("channel")&&e),e},null,null)),e.pb(35,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Channel"])),(l()(),e.hb(16777216,null,null,1,null,Ge)),e.pb(38,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Qe)),e.pb(40,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(41,0,null,null,5,"th",[],null,null,null,null,null)),(l()(),e.qb(42,0,null,null,2,"a",[["id","scanner-quality"],["translate",""]],null,[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.order("quality")&&e),e},null,null)),e.pb(43,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Signal quality (%)"])),(l()(),e.hb(16777216,null,null,1,null,Ze)),e.pb(46,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(47,0,null,null,4,"tbody",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,3,null,nt)),e.pb(49,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Cb(0,c.a,[]),e.Eb(51,3)],function(l,n){var u=n.component;l(n,2,0),l(n,6,0,u.searchStation),l(n,9,0),l(n,26,0,null),l(n,28,0,null),l(n,30,0,"ssid"===u.orderby),l(n,32,0,null),l(n,35,0,""),l(n,38,0,"channel"===u.orderby),l(n,40,0,null),l(n,43,0,""),l(n,46,0,"quality"===u.orderby);var t=e.Jb(n,49,0,l(n,51,0,e.Ab(n.parent,0),e.Jb(n,49,0,e.Ab(n,50).transform(u.aps,u.searchStation)),u.orderby,u.reverse));l(n,49,0,t)},function(l,n){var u=n.component;l(n,3,0,e.sb(1,"",e.Jb(n,3,0,e.Ab(n,10).transform("Search ...")),""),e.Ab(n,8).ngClassUntouched,e.Ab(n,8).ngClassTouched,e.Ab(n,8).ngClassPristine,e.Ab(n,8).ngClassDirty,e.Ab(n,8).ngClassValid,e.Ab(n,8).ngClassInvalid,e.Ab(n,8).ngClassPending);var t=e.Jb(n,12,0,e.Ab(n,15).transform("display {num} of {all}",l(n,14,0,e.Jb(n,12,0,e.Ab(n,13).transform(u.aps,u.searchStation)).length,u.aps.length)));l(n,12,0,t),l(n,17,0,e.sb(1,"",e.Jb(n,17,0,e.Ab(n,18).transform("Scan")),""))})}function et(l){return e.Kb(0,[e.Cb(0,v.a,[]),(l()(),e.qb(1,0,null,null,4,"div",[["class","vendor-tables"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Ne)),e.pb(3,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ut)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,!u.showActive),l(n,5,0,u.showActive)},null)}function tt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-scanner",[],null,null,null,et,Oe)),e.Fb(512,null,Re.a,Re.a,[x.a,I.a]),e.pb(2,245760,null,0,Je.a,[Re.a,zl.m,Ol.a],null,null)],function(l,n){l(n,2,0)},null)}var at=e.mb("app-scanner",Je.a,tt,{},{},[]),it=u("/TrN"),rt=u("+pXn"),ot=e.ob({encapsulation:2,styles:[],data:{}});function st(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"label",[["class","col-md-2 control-label text-right"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID:"]))],function(l,n){l(n,1,0,"")},null)}function bt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"label",[["class","col-md-2 control-label text-right"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Network name:"]))],function(l,n){l(n,1,0,"")},null)}function ct(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],[[8,"selected",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{ngValue:[0,"ngValue"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{ngValue:[0,"ngValue"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)},function(l,n){l(n,0,0,n.context.$implicit===n.component.wps_active),l(n,3,0,n.context.$implicit)})}function dt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,13,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,st)),e.pb(2,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,bt)),e.pb(4,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(5,0,null,null,8,"div",[["class","col-md-10"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,7,"select",[["class","form-control col-md-5"],["id","wps_ssid"],["name","wps_ssid"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,7).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,7).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.wps_active=u)&&t),t},null,null)),e.pb(7,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(9,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(11,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ct)),e.pb(13,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,null),l(n,4,0,null),l(n,9,0,"wps_ssid",1==u.enable||"stopped"!=u.state,u.wps_active),l(n,13,0,u.ssids)},function(l,n){l(n,6,0,e.Ab(n,11).ngClassUntouched,e.Ab(n,11).ngClassTouched,e.Ab(n,11).ngClassPristine,e.Ab(n,11).ngClassDirty,e.Ab(n,11).ngClassValid,e.Ab(n,11).ngClassInvalid,e.Ab(n,11).ngClassPending)})}function pt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,0,null,null,null,null,null,null,null))],null,null)}function gt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[["class","wps_controls"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,pt)),e.pb(2,540672,null,0,i.v,[e.P],{ngTemplateOutlet:[0,"ngTemplateOutlet"]},null)],function(l,n){l(n,2,0,e.Ab(n.parent,33))},null)}function ht(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,null,null,null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"p",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Please define the name of the network and confirm your settings by clicking the diskette icon."]))],function(l,n){l(n,2,0,"")},null)}function ft(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"p",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WPS Pushbutton is active..."]))],function(l,n){l(n,1,0,"")},null)}function mt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"p",[["class","hint-text "],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WPS PIN is active..."]))],function(l,n){l(n,1,0,"")},null)}function vt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,13,"div",[["style","margin: 40px 0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,8,"div",[["class","progress"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,7,"div",[["attr.aria-valuemax","120"],["attr.aria-valuemin","0"],["class","progress-bar"],["role","progressbar"]],[[1,"aria-valuenow",0]],null,null,null,null)),e.pb(3,278528,null,0,i.r,[e.t,e.k,e.E],{ngStyle:[0,"ngStyle"]},null),e.Db(4,{width:0}),(l()(),e.Ib(5,null,[" "," "])),e.Eb(6,2),(l()(),e.qb(7,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(8,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["s"])),(l()(),e.hb(16777216,null,null,1,null,ft)),e.pb(11,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,mt)),e.pb(13,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,e=l(n,4,0,(u.elapsed/u.wpsDuration*100||0)+"%");l(n,3,0,e),l(n,8,0,""),l(n,11,0,"wps_pbc"==u.wpsmode),l(n,13,0,"wps_pbc"!=u.wpsmode)},function(l,n){var u=n.component;l(n,2,0,e.sb(1,"",u.elapsed||0,""));var t=e.Jb(n,5,0,l(n,6,0,e.Ab(n.parent,0),u.elapsed||0,"1.0-0"));l(n,5,0,t)})}function Ct(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"p",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WPS is active..."]))],function(l,n){l(n,1,0,"")},null)}function At(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"save")},null)}function kt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cleanupForm()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function yt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,41,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"label",[["class","control-label col-md-2"],["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WPS Mode:"])),(l()(),e.qb(4,0,null,null,13,"div",[["class","col-md-5"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,2,"label",[["class","control-label"],["translate",""]],null,null,null,null,null)),e.pb(6,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WPS Pushbutton"])),(l()(),e.qb(8,0,null,null,2,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,1,"button",[["class","btn btn-default wps-start-btn"],["id","startWpsPbc"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.startWpsPbc()&&e),e},null,null)),(l()(),e.Ib(-1,null,["Start"])),(l()(),e.qb(11,0,null,null,6,"div",[],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,2,"div",[["translate",""]],null,null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Add devices to the WiFi network using the soft push button."])),(l()(),e.qb(15,0,null,null,2,"div",[["translate",""]],null,null,null,null,null)),e.pb(16,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Now press the WPS button on the device being added to your WiFi network."])),(l()(),e.qb(18,0,null,null,23,"div",[["class","col-md-5"]],null,null,null,null,null)),(l()(),e.qb(19,0,null,null,2,"label",[["class","control-label"],["translate",""]],null,null,null,null,null)),e.pb(20,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WPS PIN"])),(l()(),e.qb(22,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(23,0,null,null,9,"div",[["class","col-md-6 col-lg-9"],["style","padding-left: 0;padding-right: 5px;"]],null,null,null,null,null)),(l()(),e.qb(24,0,null,null,8,"input",[["class","form-control"],["id","wps_pin_input"],["maxlength","8"],["name","wpspin"],["no-dirty",""],["type","text"]],[[8,"placeholder",0],[1,"maxlength",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,25)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,25).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,25)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,25)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.wps_pin_input=u)&&t),t},null,null)),e.pb(25,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(26,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.f]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(29,671744,null,0,m.n,[[8,null],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(31,16384,null,0,m.k,[[4,m.j]],null,null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(33,0,null,null,1,"button",[["class","btn btn-default wps-start-btn"],["id","startWpsPin"],["type","button"]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.startWpsPin()&&e),e},null,null)),(l()(),e.Ib(-1,null,["Start"])),(l()(),e.qb(35,0,null,null,6,"div",[],null,null,null,null,null)),(l()(),e.qb(36,0,null,null,2,"div",[["translate",""]],null,null,null,null,null)),e.pb(37,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Add devices to the WiFi network using your PIN."])),(l()(),e.qb(39,0,null,null,2,"div",[["translate",""]],null,null,null,null,null)),e.pb(40,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enter the PIN of the device to be added to your WiFi network."]))],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,""),l(n,13,0,""),l(n,16,0,""),l(n,20,0,""),l(n,26,0,"8"),l(n,29,0,"wpspin","wps_running"===u.state||"wps_pending"===u.state||!u.isSelectedSsidEnabled,u.wps_pin_input),l(n,37,0,""),l(n,40,0,"")},function(l,n){var u=n.component;l(n,9,0,"wps_running"===u.state||"wps_pending"===u.state||!u.isSelectedSsidEnabled),l(n,24,0,e.sb(1,"",e.Jb(n,24,0,e.Ab(n,32).transform("Enter WPS PIN")),""),e.Ab(n,26).maxlength?e.Ab(n,26).maxlength:null,e.Ab(n,31).ngClassUntouched,e.Ab(n,31).ngClassTouched,e.Ab(n,31).ngClassPristine,e.Ab(n,31).ngClassDirty,e.Ab(n,31).ngClassValid,e.Ab(n,31).ngClassInvalid,e.Ab(n,31).ngClassPending),l(n,33,0,"wps_running"===u.state||"wps_pending"===u.state||!u.isSelectedSsidEnabled)})}function qt(l){return e.Kb(0,[e.Cb(0,i.f,[e.u]),e.Gb(402653184,1,{delos:0}),(l()(),e.qb(2,0,null,null,30,"div",[["class","vendor-dialogs"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,29,"form",[["autocomplete","off"],["class","form-horizontal"],["id","wpsConfig"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0,a=l.component;return"submit"===n&&(t=!1!==e.Ab(l,5).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,5).onReset()&&t),"submit"===n&&(t=!1!==a.save()&&t),t},null,null)),e.pb(4,16384,null,0,m.w,[],null,null),e.pb(5,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(7,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(8,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),e.pb(9,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi Protected Setup (WPS) - Configuration"])),(l()(),e.qb(11,0,null,null,7,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["id","enable"],["name","enable"],["trueValue","0"],["type","checkbox"]],[[8,"value",0],[8,"checked",0],[8,"disabled",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,14).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.enable=u)&&t),"click"===n&&(t=!1!==e.Ab(l,5).form.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(14,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),e.pb(15,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(16,0,null,null,2,"label",[["for","enable"],["translate",""]],null,null,null,null,null)),e.pb(17,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.hb(16777216,null,null,1,null,dt)),e.pb(20,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,gt)),e.pb(22,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ht)),e.pb(24,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,vt)),e.pb(26,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ct)),e.pb(28,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,At)),e.pb(30,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,kt)),e.pb(32,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(0,[["radios",2]],null,0,null,yt))],function(l,n){var u=n.component;l(n,9,0,""),l(n,14,0,"0","1"),l(n,15,0),l(n,17,0,""),l(n,20,0,0==u.enable),l(n,22,0,0==u.enable&&u.wps_active==u.configured_WPS_SSID),l(n,24,0,0==u.enable&&u.wps_active!==u.configured_WPS_SSID),l(n,26,0,"wps_running"===u.state||"wps_pending"===u.state),l(n,28,0,u.wpsActive),l(n,30,0,!e.Ab(n,5).pristine),l(n,32,0,!e.Ab(n,5).pristine)},function(l,n){var u=n.component;l(n,3,0,e.Ab(n,7).ngClassUntouched,e.Ab(n,7).ngClassTouched,e.Ab(n,7).ngClassPristine,e.Ab(n,7).ngClassDirty,e.Ab(n,7).ngClassValid,e.Ab(n,7).ngClassInvalid,e.Ab(n,7).ngClassPending),l(n,12,0,u.enable,0==u.enable,"stopped"!=u.state)})}function It(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-wps",[],null,null,null,qt,ot)),e.Fb(512,null,it.a,it.a,[I.a,x.a]),e.pb(2,245760,null,0,rt.a,[it.a,Ol.a,Hl.a],null,null)],function(l,n){l(n,2,0)},null)}var xt=e.mb("app-wps",rt.a,It,{},{},[]),wt=u("+3se"),Pt=function(){function l(){}return l.prototype.transform=function(l){if(null==l||""===l)return Object(wt.b)("N/A");switch(l){case"Monday":return Object(wt.b)("Mon");case"Tuesday":return Object(wt.b)("Tue");case"Wednesday":return Object(wt.b)("Wed");case"Thursday":return Object(wt.b)("Thu");case"Friday":return Object(wt.b)("Fri");case"Saturday":return Object(wt.b)("Sat");case"Sunday":return Object(wt.b)("Sun");default:return l}},l}(),Mt=function(){function l(){}return l.prototype.transform=function(l){if(null==l||""===l)return Object(wt.b)("N/A");switch(l){case"business":return Object(wt.b)("Mon-Fri");case"weekend":return Object(wt.b)("Sat+Sun");case"daily":return Object(wt.b)("daily");default:return Object(wt.b)(l)}},l}(),Et=u("a2IU"),jt=u("xJys"),Tt=e.ob({encapsulation:2,styles:[],data:{}});function Ft(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,17,"div",[["class","col-sm-6"],["style","padding-left: 0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"h5",[["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi convenience function"])),(l()(),e.qb(4,0,null,null,7,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,6,"label",[["for","wifi-conv-enable"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["id","wifi-conv-enable"],["name","forcewifidown"],["trueValue","0"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,8).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.globalForcewifidown=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(8,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(9,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(10,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.qb(12,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["When the WiFi convenience function is activated, the wireless network is not switched off until the last WiFi device has logged off from your access point."])),(l()(),e.qb(15,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),e.pb(16,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Please note that many tablets/smartphones maintain their WiFi connection indefinitely!"]))],function(l,n){l(n,2,0,""),l(n,8,0,"0","1"),l(n,10,0,""),l(n,13,0,""),l(n,16,0,"")},function(l,n){var u=n.component;l(n,6,0,u.globalForcewifidown,"1"!=u.globalForcewifidown)})}function St(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.saveGlobalSettingsCheck()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"save")},null)}function Vt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function $t(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,St)),e.pb(2,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Vt)),e.pb(4,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,e.Ab(n.parent,7).dirty&&!u.currentRow&&!u.addNew),l(n,4,0,e.Ab(n.parent,7).dirty&&!u.currentRow&&!u.addNew)},null)}function Dt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[],[[8,"className",0]],null,null,null,null)),e.pb(1,278528,null,0,i.r,[e.t,e.k,e.E],{ngStyle:[0,"ngStyle"]},null),e.Db(2,{left:0,right:1}),e.Eb(3,1)],function(l,n){var u=l(n,2,0,n.context.$implicit.leftPos+"%",n.context.$implicit.rightPos+"%");l(n,1,0,u)},function(l,n){var u=e.sb(1,"status_on ",e.Jb(n,0,0,l(n,3,0,e.Ab(n.parent.parent.parent,1),n.context.$implicit.duration)),"");l(n,0,0,u)})}function Bt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,"div",[["class","day"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,7,"p",[],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"span",[["class","day-label-full"]],null,null,null,null,null)),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(5,0,null,null,3,"span",[["class","day-label-short"]],null,null,null,null,null)),(l()(),e.Ib(6,null,["",""])),e.Eb(7,1),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(9,0,null,null,2,"div",[["class","status"]],[[8,"id",0]],null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Dt)),e.pb(11,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){l(n,11,0,n.component.schedules)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit)));var u=e.Jb(n,6,0,e.Ab(n,8).transform(e.Jb(n,6,0,l(n,7,0,e.Ab(n.parent.parent,0),n.context.$implicit))));l(n,6,0,u),l(n,9,0,e.sb(1,"day_",n.context.index,""))})}function Kt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,15,"div",[["class","row"],["style","margin-top: 40px;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Overview of the wifi schedule settings"])),(l()(),e.qb(4,0,null,null,2,"div",[["class","timetable_container clearfix"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Bt)),e.pb(6,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(7,0,null,null,8,"div",[["class","timetable_legend clearifx"]],null,null,null,null,null)),(l()(),e.qb(8,0,null,null,3,"div",[["class","wifi_on"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(10,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi enabled"])),(l()(),e.qb(12,0,null,null,3,"div",[["class","wifi_off"]],null,null,null,null,null)),(l()(),e.qb(13,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(14,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi disabled"]))],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,u.days),l(n,10,0,""),l(n,14,0,"")},null)}function _t(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function Rt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit)))})}function Jt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,9,"select",[["class","form-control singleday"],["id","weekday"],["name","newWeekday"]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,1).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.weekday=u)&&t),t},null,null)),e.pb(1,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(2,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(5,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(7,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Rt)),e.pb(9,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.newSchedule.showWeekdays),l(n,5,0,"newWeekday",u.newSchedule.weekday),l(n,9,0,u.days)},function(l,n){l(n,0,0,e.Ab(n,2).required?"":null,e.Ab(n,7).ngClassUntouched,e.Ab(n,7).ngClassTouched,e.Ab(n,7).ngClassPristine,e.Ab(n,7).ngClassDirty,e.Ab(n,7).ngClassValid,e.Ab(n,7).ngClassInvalid,e.Ab(n,7).ngClassPending)})}function Ot(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.context.$implicit.value),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function Nt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.component.newSchedule.starthour),l(n,3,0,n.context.$implicit.key)})}function Ut(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function Wt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function Ht(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.component.newSchedule.endhour),l(n,3,0,n.context.$implicit.key)})}function zt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function Lt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"p",[],null,null,null,null,null)),(l()(),e.Ib(2,null,["",""]))],null,function(l,n){l(n,2,0,n.component.timeValidationErrorMsg)})}function Gt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,107,"tbody",[["class","new_entry"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,96,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,23,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(4,0,null,null,21,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,20,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,19,"div",[["class","daysofweek_wrapper"]],null,null,null,null,null)),(l()(),e.qb(7,0,null,null,16,"select",[["class","form-control"],["id","interval"],["name","newDaysofweek"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,10).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,10).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.daysofweek=u)&&t),"change"===n&&(t=!1!==a.synchWeekday(a.newSchedule)&&t),t},null,null)),e.pb(8,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(9,{singleday:0,"":1}),e.pb(10,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(11,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(14,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(16,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(17,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(18,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(19,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(20,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["Select Interval"])),(l()(),e.hb(16777216,null,null,1,null,_t)),e.pb(23,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,Jt)),e.pb(25,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(26,0,null,null,35,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(28,0,null,null,33,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(29,0,null,null,32,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(30,0,null,null,14,"select",[["class","form-control"],["id","from-hh"],["name","newStarthour"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,31).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,31).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.starthour=u)&&t),"change"===n&&(t=!1!==a.synchMins(a.newSchedule,"starthour")&&t),t},null,null)),e.pb(31,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(32,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(35,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(37,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(38,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(39,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(40,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(41,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["HH"])),(l()(),e.hb(16777216,null,null,1,null,Ot)),e.pb(44,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(45,0,null,null,16,"select",[["class","form-control"],["id","from-mm"],["name","newStartmins"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,46).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,46).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.startmins=u)&&t),t},null,null)),e.pb(46,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(47,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(50,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(52,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(53,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(54,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(55,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(56,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["MM"])),(l()(),e.hb(16777216,null,null,1,null,Nt)),e.pb(59,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ut)),e.pb(61,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(62,0,null,null,35,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(64,0,null,null,33,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(65,0,null,null,32,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(66,0,null,null,14,"select",[["class","form-control"],["id","to-hh"],["name","newEndhour"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,67).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,67).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.endhour=u)&&t),"change"===n&&(t=!1!==a.synchMins(a.newSchedule,"endhour")&&t),t},null,null)),e.pb(67,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(68,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(71,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(73,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(74,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(75,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(76,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(77,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["HH"])),(l()(),e.hb(16777216,null,null,1,null,Wt)),e.pb(80,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(81,0,null,null,16,"select",[["class","form-control"],["id","to-mm"],["name","newEndmin"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,82).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,82).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.endmins=u)&&t),t},null,null)),e.pb(82,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(83,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(86,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(88,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(89,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(90,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(91,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(92,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["MM"])),(l()(),e.hb(16777216,null,null,1,null,Ht)),e.pb(95,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,zt)),e.pb(97,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(98,0,null,null,9,"tr",[["class","noHighlight controls"]],null,null,null,null,null)),(l()(),e.qb(99,0,null,null,8,"td",[["colspan","3"]],null,null,null,null,null)),(l()(),e.qb(100,0,null,null,2,"div",[["class","error_messages"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Lt)),e.pb(102,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(103,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.qb(104,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0,t=l.component;return"floatBtnClick"===n&&(t.saveGlobalSettings(),e=!1!==t.saveNew()&&e),e},Kl.b,Kl.a)),e.pb(105,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),e.qb(106,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(107,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component,t=l(n,9,0,u.newSchedule.showWeekdays,!u.newSchedule.showWeekdays);l(n,8,0,"form-control",t),l(n,11,0,""),l(n,14,0,"newDaysofweek",u.newSchedule.daysofweek),l(n,18,0,""),l(n,19,0,""),l(n,20,0,""),l(n,23,0,u.ranges),l(n,25,0,u.newSchedule.showWeekdays),l(n,32,0,""),l(n,35,0,"newStarthour",u.newSchedule.starthour),l(n,39,0,""),l(n,40,0,""),l(n,41,0,""),l(n,44,0,u.hours),l(n,47,0,""),l(n,50,0,"newStartmins",u.newSchedule.startmins),l(n,54,0,""),l(n,55,0,""),l(n,56,0,""),l(n,59,0,u.mins),l(n,61,0,24==u.newSchedule.starthour),l(n,68,0,""),l(n,71,0,"newEndhour",u.newSchedule.endhour),l(n,75,0,""),l(n,76,0,""),l(n,77,0,""),l(n,80,0,u.hours),l(n,83,0,""),l(n,86,0,"newEndmin",u.newSchedule.endmins),l(n,90,0,""),l(n,91,0,""),l(n,92,0,""),l(n,95,0,u.mins),l(n,97,0,24==u.newSchedule.endhour),l(n,102,0,u.timeValidationError),l(n,105,0,e.Ab(n.parent.parent,7).invalid,"save"),l(n,107,0,"cancel")},function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("Interval"))),l(n,7,0,e.Ab(n,11).required?"":null,e.Ab(n,16).ngClassUntouched,e.Ab(n,16).ngClassTouched,e.Ab(n,16).ngClassPristine,e.Ab(n,16).ngClassDirty,e.Ab(n,16).ngClassValid,e.Ab(n,16).ngClassInvalid,e.Ab(n,16).ngClassPending),l(n,26,0,e.Jb(n,26,0,e.Ab(n,27).transform("From"))),l(n,30,0,e.Ab(n,32).required?"":null,e.Ab(n,37).ngClassUntouched,e.Ab(n,37).ngClassTouched,e.Ab(n,37).ngClassPristine,e.Ab(n,37).ngClassDirty,e.Ab(n,37).ngClassValid,e.Ab(n,37).ngClassInvalid,e.Ab(n,37).ngClassPending),l(n,45,0,e.Ab(n,47).required?"":null,e.Ab(n,52).ngClassUntouched,e.Ab(n,52).ngClassTouched,e.Ab(n,52).ngClassPristine,e.Ab(n,52).ngClassDirty,e.Ab(n,52).ngClassValid,e.Ab(n,52).ngClassInvalid,e.Ab(n,52).ngClassPending),l(n,62,0,e.Jb(n,62,0,e.Ab(n,63).transform("To"))),l(n,66,0,e.Ab(n,68).required?"":null,e.Ab(n,73).ngClassUntouched,e.Ab(n,73).ngClassTouched,e.Ab(n,73).ngClassPristine,e.Ab(n,73).ngClassDirty,e.Ab(n,73).ngClassValid,e.Ab(n,73).ngClassInvalid,e.Ab(n,73).ngClassPending),l(n,81,0,e.Ab(n,83).required?"":null,e.Ab(n,88).ngClassUntouched,e.Ab(n,88).ngClassTouched,e.Ab(n,88).ngClassPristine,e.Ab(n,88).ngClassDirty,e.Ab(n,88).ngClassValid,e.Ab(n,88).ngClassInvalid,e.Ab(n,88).ngClassPending)})}function Yt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function Qt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit)))})}function Zt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"select",[["class","form-control singleday"],["name","editWeekday"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e.Ab(l,1).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.weekday=u)&&t),t},null,null)),e.pb(1,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(3,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(5,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Qt)),e.pb(7,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,3,0,"editWeekday",n.parent.parent.context.$implicit.weekday),l(n,7,0,u.days)},function(l,n){l(n,0,0,e.sb(1,"weekday-",n.parent.parent.context.$implicit[".index"],""),e.Ab(n,5).ngClassUntouched,e.Ab(n,5).ngClassTouched,e.Ab(n,5).ngClassPristine,e.Ab(n,5).ngClassDirty,e.Ab(n,5).ngClassValid,e.Ab(n,5).ngClassInvalid,e.Ab(n,5).ngClassPending)})}function Xt(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.context.$implicit.value),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function la(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,n.context.$implicit.key)})}function na(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function ua(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function ea(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.parent.parent.context.$implicit.endhour),l(n,3,0,n.context.$implicit.key)})}function ta(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function aa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,61,"tr",[["class","noHighlight edit_row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,16,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,14,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,12,"div",[["class","daysofweek_wrapper"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,9,"select",[["class","form-control"],["name","editDaysofweek"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,9).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,9).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.daysofweek=u)&&t),"change"===n&&(t=!1!==a.synchWeekday(l.parent.context.$implicit)&&t),t},null,null)),e.pb(7,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(8,{singleday:0,"":1}),e.pb(9,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(11,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(13,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Yt)),e.pb(15,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,Zt)),e.pb(17,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(18,0,null,null,21,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(20,0,null,null,19,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(21,0,null,null,18,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,7,"select",[["class","form-control"],["name","editStarthour"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,23).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,23).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.starthour=u)&&t),"change"===n&&(t=!1!==a.synchMins(l.parent.context.$implicit,"starthour")&&t),t},null,null)),e.pb(23,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(25,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(27,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Xt)),e.pb(29,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(30,0,null,null,9,"select",[["class","form-control"],["name","editStartmins"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e.Ab(l,31).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,31).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.startmins=u)&&t),t},null,null)),e.pb(31,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(33,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(35,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,la)),e.pb(37,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,na)),e.pb(39,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(40,0,null,null,21,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(42,0,null,null,19,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(43,0,null,null,18,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(44,0,null,null,7,"select",[["class","form-control"],["name","editEndhour"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,45).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,45).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.endhour=u)&&t),"change"===n&&(t=!1!==a.synchMins(l.parent.context.$implicit)&&t),t},null,null)),e.pb(45,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(47,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(49,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ua)),e.pb(51,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(52,0,null,null,9,"select",[["class","form-control"],["name","editEndmins"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,53).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,53).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.context.$implicit.endmins=u)&&t),"change"===n&&(t=!1!==a.synchMins(l.parent.context.$implicit,"endhour")&&t),t},null,null)),e.pb(53,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(55,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(57,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ea)),e.pb(59,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,ta)),e.pb(61,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,e=l(n,8,0,n.parent.context.$implicit.showWeekdays,!n.parent.context.$implicit.showWeekdays);l(n,7,0,"form-control",e),l(n,11,0,"editDaysofweek",n.parent.context.$implicit.daysofweek),l(n,15,0,u.ranges),l(n,17,0,n.parent.context.$implicit.showWeekdays),l(n,25,0,"editStarthour",n.parent.context.$implicit.starthour),l(n,29,0,u.hours),l(n,33,0,"editStartmins",n.parent.context.$implicit.startmins),l(n,37,0,u.mins),l(n,39,0,24==n.parent.context.$implicit.starthour),l(n,47,0,"editEndhour",n.parent.context.$implicit.endhour),l(n,51,0,u.hours),l(n,55,0,"editEndmins",n.parent.context.$implicit.endmins),l(n,59,0,u.mins),l(n,61,0,24==n.parent.context.$implicit.endhour)},function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("Interval"))),l(n,6,0,e.sb(1,"interval-",n.parent.context.$implicit[".index"],""),e.Ab(n,13).ngClassUntouched,e.Ab(n,13).ngClassTouched,e.Ab(n,13).ngClassPristine,e.Ab(n,13).ngClassDirty,e.Ab(n,13).ngClassValid,e.Ab(n,13).ngClassInvalid,e.Ab(n,13).ngClassPending),l(n,18,0,e.Jb(n,18,0,e.Ab(n,19).transform("From"))),l(n,22,0,e.sb(1,"from-hh-",n.parent.context.$implicit[".index"],""),e.Ab(n,27).ngClassUntouched,e.Ab(n,27).ngClassTouched,e.Ab(n,27).ngClassPristine,e.Ab(n,27).ngClassDirty,e.Ab(n,27).ngClassValid,e.Ab(n,27).ngClassInvalid,e.Ab(n,27).ngClassPending),l(n,30,0,e.sb(1,"from-mm-",n.parent.context.$implicit[".index"],""),e.Ab(n,35).ngClassUntouched,e.Ab(n,35).ngClassTouched,e.Ab(n,35).ngClassPristine,e.Ab(n,35).ngClassDirty,e.Ab(n,35).ngClassValid,e.Ab(n,35).ngClassInvalid,e.Ab(n,35).ngClassPending),l(n,40,0,e.Jb(n,40,0,e.Ab(n,41).transform("To"))),l(n,44,0,e.sb(1,"to-hh-",n.parent.context.$implicit[".index"],""),e.Ab(n,49).ngClassUntouched,e.Ab(n,49).ngClassTouched,e.Ab(n,49).ngClassPristine,e.Ab(n,49).ngClassDirty,e.Ab(n,49).ngClassValid,e.Ab(n,49).ngClassInvalid,e.Ab(n,49).ngClassPending),l(n,52,0,e.sb(1,"to-hh-",n.parent.context.$implicit[".index"],""),e.Ab(n,57).ngClassUntouched,e.Ab(n,57).ngClassTouched,e.Ab(n,57).ngClassPristine,e.Ab(n,57).ngClassDirty,e.Ab(n,57).ngClassValid,e.Ab(n,57).ngClassInvalid,e.Ab(n,57).ngClassPending)})}function ia(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"p",[],null,null,null,null,null)),(l()(),e.Ib(2,null,["",""]))],null,function(l,n){l(n,2,0,n.component.timeValidationErrorMsg)})}function ra(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,13,"tr",[["class","noHighlight controls"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,12,"td",[["colspan","3"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,11,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,2,"div",[["class","error_messages"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,ia)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(6,0,null,null,7,"div",[["class","form-group text-right"]],null,null,null,null,null)),(l()(),e.qb(7,0,null,null,2,"button",[["class","btn btn-default remove-icon-button"],["id","btn-remove"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.delete(l.parent.context.$implicit)&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(9,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-trash"]],null,null,null,null,null)),(l()(),e.qb(10,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0,t=l.component;return"floatBtnClick"===n&&(t.saveGlobalSettings(),e=!1!==t.saveSchedule(l.parent.context.$implicit)&&e),e},Kl.b,Kl.a)),e.pb(11,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),e.qb(12,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(13,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,5,0,n.component.timeValidationError),l(n,11,0,e.Ab(n.parent.parent.parent,7).pristine,"save"),l(n,13,0,"cancel")},function(l,n){l(n,7,0,e.sb(1,"",e.Jb(n,7,0,e.Ab(n,8).transform("Delete")),""))})}function oa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,22,"tbody",[],[[8,"id",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),(l()(),e.qb(1,0,null,null,17,"tr",[],[[8,"hidden",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.editRow(l.context.$implicit[".name"])&&e),e},null,null)),e.pb(2,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{ngClass:[0,"ngClass"]},null),e.Db(3,{disabled_row:0}),(l()(),e.qb(4,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(6,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(7,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),e.Ib(8,null,["",""])),e.Eb(9,1),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(11,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(13,0,null,null,1,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.Ib(14,null,[" "," "])),(l()(),e.qb(15,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(17,0,null,null,1,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.Ib(18,null,[" "," "])),(l()(),e.hb(16777216,null,null,1,null,aa)),e.pb(20,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ra)),e.pb(22,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,e=l(n,3,0,u.currentRow&&n.context.$implicit[".name"]!=u.currentRow||u.addNew);l(n,2,0,e),l(n,20,0,n.context.$implicit[".name"]==u.currentRow),l(n,22,0,n.context.$implicit[".name"]==u.currentRow)},function(l,n){var u=n.component;l(n,0,0,e.sb(1,"schedule-",n.context.index,""),n.context.odd,n.context.even),l(n,1,0,n.context.$implicit[".name"]==u.currentRow),l(n,4,0,e.Jb(n,4,0,e.Ab(n,5).transform("Interval")));var t=e.Jb(n,8,0,e.Ab(n,10).transform(e.Jb(n,8,0,l(n,9,0,e.Ab(n.parent.parent,2),n.context.$implicit.duration))));l(n,8,0,t),l(n,11,0,e.Jb(n,11,0,e.Ab(n,12).transform("From"))),l(n,14,0,n.context.$implicit.starttime),l(n,15,0,e.Jb(n,15,0,e.Ab(n,16).transform("To"))),l(n,18,0,n.context.$implicit.stoptime)})}function sa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,33,"div",[["class","row"],["style","margin-top: 40px;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Configuration of time quotas"])),(l()(),e.qb(4,0,null,null,29,"div",[["class","vendor-tables"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),e.pb(6,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Here you can define the time intervals for when you want your WiFi to be activated."])),(l()(),e.qb(8,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,2,"div",[["class","text-right"],["style","float: right;"]],null,null,null,null,null)),(l()(),e.qb(10,0,null,null,1,"button",[["class","btn btn-default small"],["id","add-interval"]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.addNewSchedule()&&e),e},null,null)),(l()(),e.qb(11,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-plus"]],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,21,"table",[["class","dataTable dataTableHighlight vendorTable-responsive time_control"]],null,null,null,null,null)),(l()(),e.qb(13,0,null,null,10,"thead",[],null,null,null,null,null)),(l()(),e.qb(14,0,null,null,9,"tr",[],null,null,null,null,null)),(l()(),e.qb(15,0,null,null,2,"th",[["translate",""]],null,null,null,null,null)),e.pb(16,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Interval"])),(l()(),e.qb(18,0,null,null,2,"th",[["translate",""]],null,null,null,null,null)),e.pb(19,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["From"])),(l()(),e.qb(21,0,null,null,2,"th",[["translate",""]],null,null,null,null,null)),e.pb(22,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["To"])),(l()(),e.qb(24,0,null,null,5,"tbody",[],[[8,"hidden",0]],null,null,null,null)),(l()(),e.qb(25,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,3,"td",[["class","text-center empty-vaps-list"],["colspan","3"]],null,null,null,null,null)),(l()(),e.qb(27,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),e.pb(28,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Please click the + button to add a new schedule."])),(l()(),e.hb(16777216,null,null,1,null,Gt)),e.pb(31,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,oa)),e.pb(33,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,""),l(n,16,0,""),l(n,19,0,""),l(n,22,0,""),l(n,28,0,""),l(n,31,0,u.addNew),l(n,33,0,u.schedules)},function(l,n){var u=n.component;l(n,10,0,u.addNew||u.currentRow),l(n,24,0,u.schedules.length||u.addNew)})}function ba(l){return e.Kb(0,[e.Cb(0,Pt,[]),e.Cb(0,i.l,[]),e.Cb(0,Mt,[]),e.Gb(402653184,1,{delos:0}),(l()(),e.qb(4,0,null,null,30,"div",[["class","vendor-dialogs"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,29,"form",[["autocomplete","off"],["class","form-horizontal"],["id","wifi-schedule"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,7).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,7).onReset()&&t),t},null,null)),e.pb(6,16384,null,0,m.w,[],null,null),e.pb(7,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(9,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(10,0,null,null,18,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(11,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),e.pb(12,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi schedule settings"])),(l()(),e.qb(14,0,null,null,12,"div",[["class","col-sm-6"],["style","padding-left: 0;"]],null,null,null,null,null)),(l()(),e.qb(15,0,null,null,2,"h5",[["translate",""]],null,null,null,null,null)),e.pb(16,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi schedule control"])),(l()(),e.qb(18,0,null,null,8,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(19,0,null,null,7,"label",[["for","wifi-schedule-enable"]],null,null,null,null,null)),(l()(),e.qb(20,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","wifi-schedule-enable"],["name","globalEnabled"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,22).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.globalEnabled=u)&&t),"click"===n&&(a.markAsDirty(),t=!1!==a.resetOpenRows()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(22,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),e.pb(23,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(24,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(25,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.hb(16777216,null,null,1,null,Ft)),e.pb(28,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,$t)),e.pb(30,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Kt)),e.pb(32,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,sa)),e.pb(34,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,12,0,""),l(n,16,0,""),l(n,22,0,"1","0"),l(n,23,0),l(n,25,0,""),l(n,28,0,0!=u.globalEnabled),l(n,30,0,!u.addNew||!u.editSchedule),l(n,32,0,0!=u.globalEnabled),l(n,34,0,0!=u.globalEnabled)},function(l,n){var u=n.component;l(n,5,0,e.Ab(n,9).ngClassUntouched,e.Ab(n,9).ngClassTouched,e.Ab(n,9).ngClassPristine,e.Ab(n,9).ngClassDirty,e.Ab(n,9).ngClassValid,e.Ab(n,9).ngClassInvalid,e.Ab(n,9).ngClassPending),l(n,20,0,u.globalEnabled,1==u.globalEnabled)})}function ca(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"ng-component",[],null,null,null,ba,Tt)),e.Fb(512,null,Et.a,Et.a,[I.a,x.a]),e.pb(2,245760,null,0,jt.a,[Ol.a,I.a,Hl.a,Wl.a,Et.a],null,null)],function(l,n){l(n,2,0)},null)}var da=e.mb("ng-component",jt.a,ca,{},{},[]),pa=u("AEJi"),ga=function(){function l(){}return l.prototype.transform=function(l){if(null==l||""===l)return Object(wt.b)("N/A");switch(l){case"interval":return Object(wt.b)("Interval");case"quota":return Object(wt.b)("Quota");default:return Object(wt.b)(l)}},l}(),ha=u("9NBF"),fa=u("clF7"),ma=e.ob({encapsulation:0,styles:[[".timetable_container[_ngcontent-%COMP%]{margin-top:20px}.min-size-col[_ngcontent-%COMP%]{min-width:150px}.quota-status-icon[_ngcontent-%COMP%]{margin-right:6px}.quota-progress-text[_ngcontent-%COMP%]{margin-top:-15px;text-align:center}.quota-status-text[_ngcontent-%COMP%]{margin-bottom:10px}"]],data:{}});function va(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.saveGlobalSettings()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,e.Ab(n.parent.parent,10).pristine||e.Ab(n.parent.parent,10).invalid,"save")},null)}function Ca(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function Aa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,va)),e.pb(2,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ca)),e.pb(4,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,e.Ab(n.parent,10).dirty),l(n,4,0,e.Ab(n.parent,10).dirty)},null)}function ka(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,0,"span",[["class","glyphicon glyphicon-ban-circle text-danger quota-status-icon"]],[[8,"id",0]],null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"span",[["translate",""]],[[8,"id",0]],null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Quota has been depleted"]))],function(l,n){l(n,3,0,"")},function(l,n){l(n,1,0,e.sb(1,"quota-ban-icon-",n.parent.parent.context.$implicit,"")),l(n,2,0,e.sb(1,"quota-ban-text-",n.parent.parent.context.$implicit,""))})}function ya(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,0,"span",[["class","glyphicon glyphicon-play quota-status-icon"]],[[8,"id",0]],null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"span",[["translate",""]],[[8,"id",0]],null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Quota is currently depleting"]))],function(l,n){l(n,3,0,"")},function(l,n){l(n,1,0,e.sb(1,"quota-play-icon-",n.parent.parent.context.$implicit,"")),l(n,2,0,e.sb(1,"quota-play-text-",n.parent.parent.context.$implicit,""))})}function qa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,0,"span",[["class","glyphicon glyphicon-pause quota-status-icon"]],[[8,"id",0]],null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"span",[["translate",""]],[[8,"id",0]],null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Station is not connected"]))],function(l,n){l(n,3,0,"")},function(l,n){l(n,1,0,e.sb(1,"quota-pause-icon-",n.parent.parent.context.$implicit,"")),l(n,2,0,e.sb(1,"quota-pause-text-",n.parent.parent.context.$implicit,""))})}function Ia(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,5,"span",[["class","quota-progress-text center-block"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(1,null,[" "," "])),e.Eb(2,2),e.Cb(131072,pa.d,[e.h,e.z]),e.Db(4,{duration:0}),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){var u=n.component;l(n,0,0,e.sb(1,"quota-progress-bar-text-",n.parent.parent.context.$implicit,""));var t=e.Jb(n,1,0,e.Ab(n,5).transform("{duration} remaining",l(n,4,0,e.Jb(n,1,0,e.Ab(n,3).transform(e.Jb(n,1,0,l(n,2,0,e.Ab(n.parent.parent.parent.parent,0),u.quotaStatus.get(n.parent.parent.context.$implicit).depletionTime,u.translateService.currentLang)),!0)))));l(n,1,0,t)})}function xa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,14,"div",[["class","row"]],[[8,"id",0],[1,"remaining",0],[1,"quota",0],[1,"running",0]],null,null,null,null)),(l()(),e.qb(1,0,null,null,6,"div",[["class","col-md-4 quota-status-text"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,ka)),e.pb(3,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ya)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,qa)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(8,0,null,null,6,"div",[["class","col-md-8"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,3,"div",[["class","progress"]],null,null,null,null,null)),(l()(),e.qb(10,0,null,null,2,"div",[["class","progress-bar progress-bar-striped"],["role","progressbar"]],[[8,"id",0],[2,"active",null],[2,"progress-bar-danger",null]],null,null,null,null)),e.pb(11,278528,null,0,i.r,[e.t,e.k,e.E],{ngStyle:[0,"ngStyle"]},null),e.Db(12,{width:0}),(l()(),e.hb(16777216,null,null,1,null,Ia)),e.pb(14,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,u.quotaStatus.get(n.parent.context.$implicit).depleted),l(n,5,0,!u.quotaStatus.get(n.parent.context.$implicit).depleted&&u.quotaStatus.get(n.parent.context.$implicit).running),l(n,7,0,!u.quotaStatus.get(n.parent.context.$implicit).depleted&&!u.quotaStatus.get(n.parent.context.$implicit).running);var e=l(n,12,0,100*(1-u.quotaStatus.get(n.parent.context.$implicit).remaining/u.quotaStatus.get(n.parent.context.$implicit).quota)+"%");l(n,11,0,e),l(n,14,0,!u.quotaStatus.get(n.parent.context.$implicit).depleted)},function(l,n){var u=n.component;l(n,0,0,e.sb(1,"quota-status-",n.parent.context.$implicit,""),u.quotaStatus.get(n.parent.context.$implicit).remaining,u.quotaStatus.get(n.parent.context.$implicit).quota,u.quotaStatus.get(n.parent.context.$implicit).running),l(n,10,0,e.sb(1,"quota-progress-bar-",n.parent.context.$implicit,""),u.quotaStatus.get(n.parent.context.$implicit).running,u.quotaStatus.get(n.parent.context.$implicit).depleted)})}function wa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[],[[8,"className",0]],null,null,null,null)),e.pb(1,278528,null,0,i.r,[e.t,e.k,e.E],{ngStyle:[0,"ngStyle"]},null),e.Db(2,{left:0,right:1}),e.Eb(3,1)],function(l,n){var u=l(n,2,0,n.parent.context.$implicit.leftPos+"%",n.parent.context.$implicit.rightPos+"%");l(n,1,0,u)},function(l,n){var u=e.sb(1,"status_on ",e.Jb(n,0,0,l(n,3,0,e.Ab(n.parent.parent.parent.parent.parent.parent,2),n.parent.context.$implicit.duration)),"");l(n,0,0,u)})}function Pa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,wa)),e.pb(2,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,n.parent.parent.parent.context.$implicit==n.context.$implicit.stations)},null)}function Ma(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,"div",[["class","day"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,7,"p",[],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"span",[["class","day-label-full"]],null,null,null,null,null)),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(5,0,null,null,3,"span",[["class","day-label-short"]],null,null,null,null,null)),(l()(),e.Ib(6,null,["",""])),e.Eb(7,1),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(9,0,null,null,2,"div",[["class","status"]],[[8,"id",0]],null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Pa)),e.pb(11,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){l(n,11,0,n.component.schedules)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit)));var u=e.Jb(n,6,0,e.Ab(n,8).transform(e.Jb(n,6,0,l(n,7,0,e.Ab(n.parent.parent.parent.parent,1),n.context.$implicit))));l(n,6,0,u),l(n,9,0,e.sb(1,"day_",n.context.index,""))})}function Ea(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,12,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"div",[["class","timetable_container clearfix"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Ma)),e.pb(3,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(4,0,null,null,8,"div",[["class","timetable_legend clearfix"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,3,"div",[["class","wifi_on"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(7,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi enabled"])),(l()(),e.qb(9,0,null,null,3,"div",[["class","wifi_off"]],null,null,null,null,null)),(l()(),e.qb(10,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(11,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi disabled"]))],function(l,n){l(n,3,0,n.component.days),l(n,7,0,""),l(n,11,0,"")},null)}function ja(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"div",[["class","row"],["style","margin-top: 20px;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"h3",[],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(2,null,["",""])),(l()(),e.hb(16777216,null,null,1,null,xa)),e.pb(4,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ea)),e.pb(6,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,4,0,u.activeQuotas.includes(n.context.$implicit)),l(n,6,0,u.macAddressesList.includes(n.context.$implicit))},function(l,n){l(n,1,0,e.sb(1,"quota-station-",n.context.$implicit,"")),l(n,2,0,n.context.$implicit)})}function Ta(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,ja)),e.pb(2,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.makeUnique(u.macAddressesList.concat(u.activeQuotas)))},null)}function Fa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,12,null,null,null,null,null,null,null)),(l()(),e.qb(1,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","pc-newMacAddr"],["maxlength","17"],["name","newMacAddr"],["placeholder","00:00:00:00:00:00"],["required",""],["triggers","none"]],[[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"paste"],[null,"keyup"],[null,"click"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,2)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,2)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,2)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.stations=u)&&t),"paste"===n&&(t=!1!==a.formatMacAddress(a.newSchedule,u.clipboardData.getData("text/plain"),!1)&&t),"keyup"===n&&(t=!1!==a.formatMacAddress(a.newSchedule,e.Ab(l,8).value,!1)&&t),"click"===n&&(t=!1!==a.markAsDirty(e.Ab(l,8))&&t),t},null,null)),e.pb(2,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(3,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(4,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(5,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(8,671744,[["newMacAddr",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(11,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(0,null,null,0))],function(l,n){var u=n.component;l(n,3,0,""),l(n,4,0,"17"),l(n,5,0,u.macAddressPattern),l(n,8,0,"newMacAddr",u.newSchedule.stations),l(n,11,0,e.sb(1,"",e.Jb(n,11,0,e.Ab(n,12).transform("Invalid Mac address!")),""),"none","text-danger",e.Ab(n,8).invalid&&e.Ab(n,8).dirty)},function(l,n){l(n,1,0,e.Ab(n,3).required?"":null,e.Ab(n,4).maxlength?e.Ab(n,4).maxlength:null,e.Ab(n,5).pattern?e.Ab(n,5).pattern:null,e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending)})}function Sa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,12,null,null,null,null,null,null,null)),(l()(),e.qb(1,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","pc-newMacAddr"],["maxlength","17"],["name","newMacAddr"],["placeholder","00:00:00:00:00:00"],["required",""],["triggers","none"]],[[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"paste"],[null,"keyup"],[null,"click"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,2)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,2)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,2)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.station=u)&&t),"paste"===n&&(t=!1!==a.formatMacAddress(a.newSchedule,u.clipboardData.getData("text/plain"),!0)&&t),"keyup"===n&&(t=!1!==a.formatMacAddress(a.newSchedule,e.Ab(l,8).value,!0)&&t),"click"===n&&(t=!1!==a.markAsDirty(e.Ab(l,8))&&t),t},null,null)),e.pb(2,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(3,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(4,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(5,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(8,671744,[["newMacAddr",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(11,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(0,null,null,0))],function(l,n){var u=n.component;l(n,3,0,""),l(n,4,0,"17"),l(n,5,0,u.macAddressPattern),l(n,8,0,"newMacAddr",u.newSchedule.station),l(n,11,0,e.sb(1,"",e.Jb(n,11,0,e.Ab(n,12).transform("Invalid Mac address!")),""),"none","text-danger",e.Ab(n,8).invalid&&e.Ab(n,8).dirty)},function(l,n){l(n,1,0,e.Ab(n,3).required?"":null,e.Ab(n,4).maxlength?e.Ab(n,4).maxlength:null,e.Ab(n,5).pattern?e.Ab(n,5).pattern:null,e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending)})}function Va(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function $a(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit)))})}function Da(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,9,"select",[["class","form-control singleday"],["id","pc-weekday"],["name","newWeekday"]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,1).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.weekday=u)&&t),t},null,null)),e.pb(1,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(2,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(5,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(7,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,$a)),e.pb(9,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.newSchedule.showWeekdays),l(n,5,0,"newWeekday",u.newSchedule.weekday),l(n,9,0,u.days)},function(l,n){l(n,0,0,e.Ab(n,2).required?"":null,e.Ab(n,7).ngClassUntouched,e.Ab(n,7).ngClassTouched,e.Ab(n,7).ngClassPristine,e.Ab(n,7).ngClassDirty,e.Ab(n,7).ngClassValid,e.Ab(n,7).ngClassInvalid,e.Ab(n,7).ngClassPending)})}function Ba(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,23,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,21,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,20,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,19,"div",[["class","daysofweek_wrapper"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,16,"select",[["class","form-control"],["id","pc-interval"],["name","newDaysofweek"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,8).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,8).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.daysofweek=u)&&t),"change"===n&&(t=!1!==a.synchWeekday(a.newSchedule)&&t),t},null,null)),e.pb(6,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(7,{singleday:0,"":1}),e.pb(8,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(9,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(12,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(14,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(15,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(16,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(17,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(18,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["Select Interval"])),(l()(),e.hb(16777216,null,null,1,null,Va)),e.pb(21,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,Da)),e.pb(23,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,e=l(n,7,0,u.newSchedule.showWeekdays,!u.newSchedule.showWeekdays);l(n,6,0,"form-control",e),l(n,9,0,""),l(n,12,0,"newDaysofweek",u.newSchedule.daysofweek),l(n,16,0,""),l(n,17,0,""),l(n,18,0,""),l(n,21,0,u.ranges),l(n,23,0,u.newSchedule.showWeekdays)},function(l,n){l(n,0,0,e.Jb(n,0,0,e.Ab(n,1).transform("Interval"))),l(n,5,0,e.Ab(n,9).required?"":null,e.Ab(n,14).ngClassUntouched,e.Ab(n,14).ngClassTouched,e.Ab(n,14).ngClassPristine,e.Ab(n,14).ngClassDirty,e.Ab(n,14).ngClassValid,e.Ab(n,14).ngClassInvalid,e.Ab(n,14).ngClassPending)})}function Ka(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,70,"td",[["class","clearfix"],["colspan","4"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,68,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,67,"select",[["class","form-control edit-radio"],["id","wifiTimeout"],["name","wifiTimeout"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,4).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.quota=u)&&t),t},null,null)),e.pb(4,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(5,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(8,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(11,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(12,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(13,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(14,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["Select time limit"])),(l()(),e.qb(16,0,null,null,4,"option",[["translate",""],["value","00:05"]],null,null,null,null,null)),e.pb(17,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(18,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(19,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["5 min"])),(l()(),e.qb(21,0,null,null,4,"option",[["translate",""],["value","00:15"]],null,null,null,null,null)),e.pb(22,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(23,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(24,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["15 min"])),(l()(),e.qb(26,0,null,null,4,"option",[["translate",""],["value","00:30"]],null,null,null,null,null)),e.pb(27,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(28,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(29,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["30 min"])),(l()(),e.qb(31,0,null,null,4,"option",[["translate",""],["value","01:00"]],null,null,null,null,null)),e.pb(32,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(33,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(34,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["1 h"])),(l()(),e.qb(36,0,null,null,4,"option",[["translate",""],["value","02:00"]],null,null,null,null,null)),e.pb(37,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(38,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(39,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["2 h"])),(l()(),e.qb(41,0,null,null,4,"option",[["translate",""],["value","03:00"]],null,null,null,null,null)),e.pb(42,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(43,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(44,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["3 h"])),(l()(),e.qb(46,0,null,null,4,"option",[["translate",""],["value","04:00"]],null,null,null,null,null)),e.pb(47,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(48,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(49,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["4 h"])),(l()(),e.qb(51,0,null,null,4,"option",[["translate",""],["value","05:00"]],null,null,null,null,null)),e.pb(52,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(53,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(54,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["5 h"])),(l()(),e.qb(56,0,null,null,4,"option",[["translate",""],["value","06:00"]],null,null,null,null,null)),e.pb(57,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(58,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(59,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["6 h"])),(l()(),e.qb(61,0,null,null,4,"option",[["translate",""],["value","12:00"]],null,null,null,null,null)),e.pb(62,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(63,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(64,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["12 h"])),(l()(),e.qb(66,0,null,null,4,"option",[["translate",""],["value","18:00"]],null,null,null,null,null)),e.pb(67,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(68,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(69,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["18 h"]))],function(l,n){var u=n.component;l(n,5,0,""),l(n,8,0,"wifiTimeout",u.newSchedule.quota),l(n,12,0,""),l(n,13,0,""),l(n,14,0,""),l(n,17,0,""),l(n,18,0,"00:05"),l(n,19,0,"00:05"),l(n,22,0,""),l(n,23,0,"00:15"),l(n,24,0,"00:15"),l(n,27,0,""),l(n,28,0,"00:30"),l(n,29,0,"00:30"),l(n,32,0,""),l(n,33,0,"01:00"),l(n,34,0,"01:00"),l(n,37,0,""),l(n,38,0,"02:00"),l(n,39,0,"02:00"),l(n,42,0,""),l(n,43,0,"03:00"),l(n,44,0,"03:00"),l(n,47,0,""),l(n,48,0,"04:00"),l(n,49,0,"04:00"),l(n,52,0,""),l(n,53,0,"05:00"),l(n,54,0,"05:00"),l(n,57,0,""),l(n,58,0,"06:00"),l(n,59,0,"06:00"),l(n,62,0,""),l(n,63,0,"12:00"),l(n,64,0,"12:00"),l(n,67,0,""),l(n,68,0,"18:00"),l(n,69,0,"18:00")},function(l,n){l(n,0,0,e.Jb(n,0,0,e.Ab(n,1).transform("Interval"))),l(n,3,0,e.Ab(n,5).required?"":null,e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending)})}function _a(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.context.$implicit.value),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function Ra(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.component.newSchedule.starthour),l(n,3,0,n.context.$implicit.key)})}function Ja(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function Oa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,35,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,33,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,32,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,14,"select",[["class","form-control"],["id","pc-from-hh"],["name","newStarthour"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,5).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,5).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.starthour=u)&&t),"change"===n&&(t=!1!==a.synchMins(a.newSchedule,"starthour")&&t),t},null,null)),e.pb(5,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(6,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(9,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(11,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(12,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(14,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(15,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["HH"])),(l()(),e.hb(16777216,null,null,1,null,_a)),e.pb(18,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(19,0,null,null,16,"select",[["class","form-control"],["id","pc-from-mm"],["name","newStartmins"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,20).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,20).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.startmins=u)&&t),t},null,null)),e.pb(20,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(21,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(24,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(26,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(27,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(28,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(29,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(30,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["MM"])),(l()(),e.hb(16777216,null,null,1,null,Ra)),e.pb(33,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ja)),e.pb(35,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,6,0,""),l(n,9,0,"newStarthour",u.newSchedule.starthour),l(n,13,0,""),l(n,14,0,""),l(n,15,0,""),l(n,18,0,u.hours),l(n,21,0,""),l(n,24,0,"newStartmins",u.newSchedule.startmins),l(n,28,0,""),l(n,29,0,""),l(n,30,0,""),l(n,33,0,u.mins),l(n,35,0,24==u.newSchedule.starthour)},function(l,n){l(n,0,0,e.Jb(n,0,0,e.Ab(n,1).transform("From"))),l(n,4,0,e.Ab(n,6).required?"":null,e.Ab(n,11).ngClassUntouched,e.Ab(n,11).ngClassTouched,e.Ab(n,11).ngClassPristine,e.Ab(n,11).ngClassDirty,e.Ab(n,11).ngClassValid,e.Ab(n,11).ngClassInvalid,e.Ab(n,11).ngClassPending),l(n,19,0,e.Ab(n,21).required?"":null,e.Ab(n,26).ngClassUntouched,e.Ab(n,26).ngClassTouched,e.Ab(n,26).ngClassPristine,e.Ab(n,26).ngClassDirty,e.Ab(n,26).ngClassValid,e.Ab(n,26).ngClassInvalid,e.Ab(n,26).ngClassPending)})}function Na(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function Ua(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.component.newSchedule.endhour),l(n,3,0,n.context.$implicit.key)})}function Wa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function Ha(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,35,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(2,0,null,null,33,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,32,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,14,"select",[["class","form-control"],["id","pc-to-hh"],["name","newEndhour"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,5).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,5).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.endhour=u)&&t),"change"===n&&(t=!1!==a.synchMins(a.newSchedule,"endhour")&&t),t},null,null)),e.pb(5,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(6,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(9,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(11,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(12,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(14,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(15,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["HH"])),(l()(),e.hb(16777216,null,null,1,null,Na)),e.pb(18,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(19,0,null,null,16,"select",[["class","form-control"],["id","pc-to-mm"],["name","newEndmin"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,20).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,20).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newSchedule.endmins=u)&&t),t},null,null)),e.pb(20,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(21,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(24,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(26,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(27,0,null,null,4,"option",[["default",""],["translate",""],["value",""]],null,null,null,null,null)),e.pb(28,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(29,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(30,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["MM"])),(l()(),e.hb(16777216,null,null,1,null,Ua)),e.pb(33,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,Wa)),e.pb(35,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,6,0,""),l(n,9,0,"newEndhour",u.newSchedule.endhour),l(n,13,0,""),l(n,14,0,""),l(n,15,0,""),l(n,18,0,u.hours),l(n,21,0,""),l(n,24,0,"newEndmin",u.newSchedule.endmins),l(n,28,0,""),l(n,29,0,""),l(n,30,0,""),l(n,33,0,u.mins),l(n,35,0,24==u.newSchedule.endhour)},function(l,n){l(n,0,0,e.Jb(n,0,0,e.Ab(n,1).transform("To"))),l(n,4,0,e.Ab(n,6).required?"":null,e.Ab(n,11).ngClassUntouched,e.Ab(n,11).ngClassTouched,e.Ab(n,11).ngClassPristine,e.Ab(n,11).ngClassDirty,e.Ab(n,11).ngClassValid,e.Ab(n,11).ngClassInvalid,e.Ab(n,11).ngClassPending),l(n,19,0,e.Ab(n,21).required?"":null,e.Ab(n,26).ngClassUntouched,e.Ab(n,26).ngClassTouched,e.Ab(n,26).ngClassPristine,e.Ab(n,26).ngClassDirty,e.Ab(n,26).ngClassValid,e.Ab(n,26).ngClassInvalid,e.Ab(n,26).ngClassPending)})}function za(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"p",[],null,null,null,null,null)),(l()(),e.Ib(2,null,["",""]))],null,function(l,n){l(n,2,0,n.component.timeValidationErrorMsg)})}function La(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,48,"tbody",[["class","new_entry"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,37,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,6,"td",[["class","clearfix min-size-col"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(4,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Fa)),e.pb(6,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Sa)),e.pb(8,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(9,0,null,null,21,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(11,0,null,null,19,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,18,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(13,0,[["newConfigTypeEl",1]],null,17,"select",[["class","form-control"],["id","type-configuration"],["name","newConfigType"],["required",""]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,14).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,14).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.newConfigType=u)&&t),"change"===n&&(t=!1!==a.changeType(e.Ab(l,13).value)&&t),t},null,null)),e.pb(14,16384,null,0,m.r,[e.E,e.k],null,null),e.pb(15,16384,null,0,m.q,[],{required:[0,"required"]},null),e.Fb(1024,null,m.h,function(l){return[l]},[m.q]),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(18,671744,null,0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(20,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(21,0,null,null,4,"option",[["default",""],["translate",""],["value","interval"]],null,null,null,null,null)),e.pb(22,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(23,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(24,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["Interval"])),(l()(),e.qb(26,0,null,null,4,"option",[["translate",""],["value","quota"]],null,null,null,null,null)),e.pb(27,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(28,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(29,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["Quota"])),(l()(),e.hb(16777216,null,null,1,null,Ba)),e.pb(32,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ka)),e.pb(34,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Oa)),e.pb(36,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ha)),e.pb(38,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(39,0,null,null,9,"tr",[["class","noHighlight controls"]],null,null,null,null,null)),(l()(),e.qb(40,0,null,null,8,"td",[["colspan","9"]],null,null,null,null,null)),(l()(),e.qb(41,0,null,null,2,"div",[["class","error_messages"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,za)),e.pb(43,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(44,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),e.qb(45,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.saveNew()&&e),e},Kl.b,Kl.a)),e.pb(46,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),e.qb(47,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(48,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,6,0,"interval"==u.newConfigType),l(n,8,0,"interval"!=u.newConfigType),l(n,15,0,""),l(n,18,0,"newConfigType",u.newConfigType),l(n,22,0,""),l(n,23,0,"interval"),l(n,24,0,"interval"),l(n,27,0,""),l(n,28,0,"quota"),l(n,29,0,"quota"),l(n,32,0,"interval"==u.newConfigType||"quota"==u.newConfigType),l(n,34,0,"interval"!=u.newConfigType),l(n,36,0,"interval"==u.newConfigType),l(n,38,0,"interval"==u.newConfigType),l(n,43,0,u.timeValidationError),l(n,46,0,e.Ab(n.parent.parent,10).pristine||e.Ab(n.parent.parent,10).invalid,"save"),l(n,48,0,"cancel")},function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("MAC address"))),l(n,9,0,e.Jb(n,9,0,e.Ab(n,10).transform("Type"))),l(n,13,0,e.Ab(n,15).required?"":null,e.Ab(n,20).ngClassUntouched,e.Ab(n,20).ngClassTouched,e.Ab(n,20).ngClassPristine,e.Ab(n,20).ngClassDirty,e.Ab(n,20).ngClassValid,e.Ab(n,20).ngClassInvalid,e.Ab(n,20).ngClassPending)})}function Ga(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,null,null,null,null,null,null,null)),(l()(),e.qb(1,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,4,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.qb(4,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),e.Ib(5,null,["",""])),e.Eb(6,1),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("Days"))),l(n,3,0,e.sb(1,"schedule-days-",n.parent.context.index,""));var u=e.Jb(n,5,0,e.Ab(n,7).transform(e.Jb(n,5,0,l(n,6,0,e.Ab(n.parent.parent.parent,5),n.parent.context.$implicit.duration))));l(n,5,0,u)})}function Ya(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,8,null,null,null,null,null,null,null)),(l()(),e.qb(1,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(4,null,[" "," "])),(l()(),e.qb(5,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(7,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(8,null,[" "," "]))],null,function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("From"))),l(n,3,0,e.sb(1,"schedule-from-",n.parent.context.index,"")),l(n,4,0,n.parent.context.$implicit.starttime),l(n,5,0,e.Jb(n,5,0,e.Ab(n,6).transform("To"))),l(n,7,0,e.sb(1,"schedule-to-",n.parent.context.index,"")),l(n,8,0,n.parent.context.$implicit.stoptime)})}function Qa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e.Ib(1,null,[""," h "]))],null,function(l,n){var u=n.parent.parent.context.$implicit.time.split(",")[0];l(n,1,0,u)})}function Za(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),e.Ib(1,null,[""," min "]))],null,function(l,n){var u=n.parent.parent.context.$implicit.time.split(",")[1];l(n,1,0,u)})}function Xa(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,9,null,null,null,null,null,null,null)),(l()(),e.qb(1,0,null,null,8,"td",[["class","clearfix"],["colspan","4"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,6,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.qb(4,0,null,null,5,"span",[["translate",""]],null,null,null,null,null)),e.pb(5,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.hb(16777216,null,null,1,null,Qa)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Za)),e.pb(9,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,5,0,"");var u=n.parent.context.$implicit.time.split(",")[0]-0;l(n,7,0,u);var e=n.parent.context.$implicit.time.split(",")[1]-0;l(n,9,0,e)},function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("Quota"))),l(n,3,0,e.sb(1,"schedule-quota-",n.parent.context.index,""))})}function li(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,null,null,null,null,null,null,null)),(l()(),e.qb(1,16777216,null,null,10,"input",[["class","form-control"],["containerClass","text-danger"],["id","pc-MacAddr"],["name","macAddr"],["required",""],["triggers","none"]],[[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"paste"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,2)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,2)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,2)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.stations=u)&&t),"keyup"===n&&(t=!1!==a.formatMacAddress(l.parent.parent.context.$implicit,e.Ab(l,7).value,!1)&&t),"paste"===n&&(t=!1!==a.formatMacAddress(l.parent.parent.context.$implicit,u.clipboardData.getData("text/plain"),!1)&&t),t},null,null)),e.pb(2,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(3,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(4,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n){return[l,n]},[m.q,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(7,671744,[["macAddr",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(9,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(10,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(0,null,null,0))],function(l,n){var u=n.component;l(n,3,0,""),l(n,4,0,u.macAddressPattern),l(n,7,0,"macAddr",n.parent.parent.context.$implicit.stations),l(n,10,0,e.sb(1,"",e.Jb(n,10,0,e.Ab(n,11).transform("Invalid Mac address!")),""),"none","text-danger",e.Ab(n,7).invalid&&e.Ab(n,7).dirty)},function(l,n){l(n,1,0,e.Ab(n,3).required?"":null,e.Ab(n,4).pattern?e.Ab(n,4).pattern:null,e.Ab(n,9).ngClassUntouched,e.Ab(n,9).ngClassTouched,e.Ab(n,9).ngClassPristine,e.Ab(n,9).ngClassDirty,e.Ab(n,9).ngClassValid,e.Ab(n,9).ngClassInvalid,e.Ab(n,9).ngClassPending)})}function ni(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,null,null,null,null,null,null,null)),(l()(),e.qb(1,16777216,null,null,10,"input",[["class","form-control"],["containerClass","text-danger"],["id","pc-MacAddr"],["name","macAddr"],["required",""],["triggers","none"]],[[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"paste"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,2)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,2).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,2)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,2)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.station=u)&&t),"keyup"===n&&(t=!1!==a.formatMacAddress(l.parent.parent.context.$implicit,e.Ab(l,7).value,!0)&&t),"paste"===n&&(t=!1!==a.formatMacAddress(l.parent.parent.context.$implicit,u.clipboardData.getData("text/plain"),!0)&&t),t},null,null)),e.pb(2,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(3,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(4,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n){return[l,n]},[m.q,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(7,671744,[["macAddr",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(9,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(10,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(0,null,null,0))],function(l,n){var u=n.component;l(n,3,0,""),l(n,4,0,u.macAddressPattern),l(n,7,0,"macAddr",n.parent.parent.context.$implicit.station),l(n,10,0,e.sb(1,"",e.Jb(n,10,0,e.Ab(n,11).transform("Invalid Mac address!")),""),"none","text-danger",e.Ab(n,7).invalid&&e.Ab(n,7).dirty)},function(l,n){l(n,1,0,e.Ab(n,3).required?"":null,e.Ab(n,4).pattern?e.Ab(n,4).pattern:null,e.Ab(n,9).ngClassUntouched,e.Ab(n,9).ngClassTouched,e.Ab(n,9).ngClassPristine,e.Ab(n,9).ngClassDirty,e.Ab(n,9).ngClassValid,e.Ab(n,9).ngClassInvalid,e.Ab(n,9).ngClassPending)})}function ui(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function ei(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit),l(n,2,0,n.context.$implicit)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit)))})}function ti(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"select",[["class","form-control singleday"],["name","editWeekday"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e.Ab(l,1).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,1).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.parent.context.$implicit.weekday=u)&&t),t},null,null)),e.pb(1,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(3,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(5,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ei)),e.pb(7,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,3,0,"editWeekday",n.parent.parent.parent.context.$implicit.weekday),l(n,7,0,u.days)},function(l,n){l(n,0,0,e.sb(1,"pc-weekday-",n.parent.parent.parent.context.$implicit[".index"],""),e.Ab(n,5).ngClassUntouched,e.Ab(n,5).ngClassTouched,e.Ab(n,5).ngClassPristine,e.Ab(n,5).ngClassDirty,e.Ab(n,5).ngClassValid,e.Ab(n,5).ngClassInvalid,e.Ab(n,5).ngClassPending)})}function ai(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,17,null,null,null,null,null,null,null)),(l()(),e.qb(1,0,null,null,16,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,14,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,13,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,12,"div",[["class","daysofweek_wrapper"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,9,"select",[["class","form-control"],["name","editDaysofweek"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,9).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,9).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.daysofweek=u)&&t),"change"===n&&(t=!1!==a.synchWeekday(l.parent.parent.context.$implicit)&&t),t},null,null)),e.pb(7,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(8,{singleday:0,"":1}),e.pb(9,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(11,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(13,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ui)),e.pb(15,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,ti)),e.pb(17,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,e=l(n,8,0,n.parent.parent.context.$implicit.showWeekdays,!n.parent.parent.context.$implicit.showWeekdays);l(n,7,0,"form-control",e),l(n,11,0,"editDaysofweek",n.parent.parent.context.$implicit.daysofweek),l(n,15,0,u.ranges),l(n,17,0,n.parent.parent.context.$implicit.showWeekdays)},function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("Interval"))),l(n,6,0,e.sb(1,"pc-interval-",n.parent.parent.context.$implicit[".index"],""),e.Ab(n,13).ngClassUntouched,e.Ab(n,13).ngClassTouched,e.Ab(n,13).ngClassPristine,e.Ab(n,13).ngClassDirty,e.Ab(n,13).ngClassValid,e.Ab(n,13).ngClassInvalid,e.Ab(n,13).ngClassPending)})}function ii(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.context.$implicit.value),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function ri(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,n.context.$implicit.key)})}function oi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function si(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(n.context.$implicit.key)))})}function bi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[],[[8,"hidden",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""]))],function(l,n){l(n,1,0,n.context.$implicit.value),l(n,2,0,n.context.$implicit.value)},function(l,n){l(n,0,0,24==n.parent.parent.parent.context.$implicit.endhour),l(n,3,0,n.context.$implicit.key)})}function ci(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"option",[["value","0"]],null,null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["00"]))],function(l,n){l(n,1,0,"0"),l(n,2,0,"0")},null)}function di(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,44,null,null,null,null,null,null,null)),(l()(),e.qb(1,0,null,null,21,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,19,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,18,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,7,"select",[["class","form-control"],["name","editStarthour"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,6).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,6).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.starthour=u)&&t),"change"===n&&(t=!1!==a.synchMins(l.parent.parent.context.$implicit,"starthour")&&t),t},null,null)),e.pb(6,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(8,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(10,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ii)),e.pb(12,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(13,0,null,null,9,"select",[["class","form-control"],["name","editStartmins"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e.Ab(l,14).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,14).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.startmins=u)&&t),t},null,null)),e.pb(14,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(16,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(18,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,ri)),e.pb(20,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,oi)),e.pb(22,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(23,0,null,null,21,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(25,0,null,null,19,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(26,0,null,null,18,"div",[["class","row time-control-group"]],null,null,null,null,null)),(l()(),e.qb(27,0,null,null,7,"select",[["class","form-control"],["name","editEndhour"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,28).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,28).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.endhour=u)&&t),"change"===n&&(t=!1!==a.synchMins(l.parent.parent.context.$implicit)&&t),t},null,null)),e.pb(28,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(30,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(32,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,si)),e.pb(34,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.qb(35,0,null,null,9,"select",[["class","form-control"],["name","editEndmins"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,36).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,36).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.endmins=u)&&t),"change"===n&&(t=!1!==a.synchMins(l.parent.parent.context.$implicit,"endhour")&&t),t},null,null)),e.pb(36,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(38,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(40,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,bi)),e.pb(42,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),(l()(),e.hb(16777216,null,null,1,null,ci)),e.pb(44,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,8,0,"editStarthour",n.parent.parent.context.$implicit.starthour),l(n,12,0,u.hours),l(n,16,0,"editStartmins",n.parent.parent.context.$implicit.startmins),l(n,20,0,u.mins),l(n,22,0,24==n.parent.parent.context.$implicit.starthour),l(n,30,0,"editEndhour",n.parent.parent.context.$implicit.endhour),l(n,34,0,u.hours),l(n,38,0,"editEndmins",n.parent.parent.context.$implicit.endmins),l(n,42,0,u.mins),l(n,44,0,24==n.parent.parent.context.$implicit.endhour)},function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("From"))),l(n,5,0,e.sb(1,"pc-from-hh-",n.parent.parent.context.$implicit[".index"],""),e.Ab(n,10).ngClassUntouched,e.Ab(n,10).ngClassTouched,e.Ab(n,10).ngClassPristine,e.Ab(n,10).ngClassDirty,e.Ab(n,10).ngClassValid,e.Ab(n,10).ngClassInvalid,e.Ab(n,10).ngClassPending),l(n,13,0,e.sb(1,"pc-from-mm-",n.parent.parent.context.$implicit[".index"],""),e.Ab(n,18).ngClassUntouched,e.Ab(n,18).ngClassTouched,e.Ab(n,18).ngClassPristine,e.Ab(n,18).ngClassDirty,e.Ab(n,18).ngClassValid,e.Ab(n,18).ngClassInvalid,e.Ab(n,18).ngClassPending),l(n,23,0,e.Jb(n,23,0,e.Ab(n,24).transform("To"))),l(n,27,0,e.sb(1,"pc-to-hh-",n.parent.parent.context.$implicit[".index"],""),e.Ab(n,32).ngClassUntouched,e.Ab(n,32).ngClassTouched,e.Ab(n,32).ngClassPristine,e.Ab(n,32).ngClassDirty,e.Ab(n,32).ngClassValid,e.Ab(n,32).ngClassInvalid,e.Ab(n,32).ngClassPending),l(n,35,0,e.sb(1,"pc-to-hh-",n.parent.parent.context.$implicit[".index"],""),e.Ab(n,40).ngClassUntouched,e.Ab(n,40).ngClassTouched,e.Ab(n,40).ngClassPristine,e.Ab(n,40).ngClassDirty,e.Ab(n,40).ngClassValid,e.Ab(n,40).ngClassInvalid,e.Ab(n,40).ngClassPending)})}function pi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,64,null,null,null,null,null,null,null)),(l()(),e.qb(1,0,null,null,63,"td",[["class","clearfix"],["colspan","4"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,61,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(4,0,null,null,60,"select",[["class","form-control edit-radio"],["id","wifiTimeout"],["name","wifiTimeout"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==e.Ab(l,5).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,5).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(l.parent.parent.context.$implicit.quota=u)&&t),t},null,null)),e.pb(5,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(7,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(9,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(10,0,null,null,4,"option",[["translate",""],["value","00:05"]],null,null,null,null,null)),e.pb(11,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(12,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(13,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["5 min"])),(l()(),e.qb(15,0,null,null,4,"option",[["translate",""],["value","00:15"]],null,null,null,null,null)),e.pb(16,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(17,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(18,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["15 min"])),(l()(),e.qb(20,0,null,null,4,"option",[["translate",""],["value","00:30"]],null,null,null,null,null)),e.pb(21,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(22,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(23,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["30 min"])),(l()(),e.qb(25,0,null,null,4,"option",[["translate",""],["value","01:00"]],null,null,null,null,null)),e.pb(26,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(27,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(28,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["1 h"])),(l()(),e.qb(30,0,null,null,4,"option",[["translate",""],["value","02:00"]],null,null,null,null,null)),e.pb(31,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(32,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(33,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["2 h"])),(l()(),e.qb(35,0,null,null,4,"option",[["translate",""],["value","03:00"]],null,null,null,null,null)),e.pb(36,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(37,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(38,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["3 h"])),(l()(),e.qb(40,0,null,null,4,"option",[["translate",""],["value","04:00"]],null,null,null,null,null)),e.pb(41,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(42,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(43,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["4 h"])),(l()(),e.qb(45,0,null,null,4,"option",[["translate",""],["value","05:00"]],null,null,null,null,null)),e.pb(46,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(47,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(48,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["5 h"])),(l()(),e.qb(50,0,null,null,4,"option",[["translate",""],["value","06:00"]],null,null,null,null,null)),e.pb(51,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(52,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(53,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["6 h"])),(l()(),e.qb(55,0,null,null,4,"option",[["translate",""],["value","12:00"]],null,null,null,null,null)),e.pb(56,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(57,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(58,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["12 h"])),(l()(),e.qb(60,0,null,null,4,"option",[["translate",""],["value","18:00"]],null,null,null,null,null)),e.pb(61,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(62,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(63,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["18 h"]))],function(l,n){l(n,7,0,"wifiTimeout",n.parent.parent.context.$implicit.quota),l(n,11,0,""),l(n,12,0,"00:05"),l(n,13,0,"00:05"),l(n,16,0,""),l(n,17,0,"00:15"),l(n,18,0,"00:15"),l(n,21,0,""),l(n,22,0,"00:30"),l(n,23,0,"00:30"),l(n,26,0,""),l(n,27,0,"01:00"),l(n,28,0,"01:00"),l(n,31,0,""),l(n,32,0,"02:00"),l(n,33,0,"02:00"),l(n,36,0,""),l(n,37,0,"03:00"),l(n,38,0,"03:00"),l(n,41,0,""),l(n,42,0,"04:00"),l(n,43,0,"04:00"),l(n,46,0,""),l(n,47,0,"05:00"),l(n,48,0,"05:00"),l(n,51,0,""),l(n,52,0,"06:00"),l(n,53,0,"06:00"),l(n,56,0,""),l(n,57,0,"12:00"),l(n,58,0,"12:00"),l(n,61,0,""),l(n,62,0,"18:00"),l(n,63,0,"18:00")},function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("Interval"))),l(n,4,0,e.Ab(n,9).ngClassUntouched,e.Ab(n,9).ngClassTouched,e.Ab(n,9).ngClassPristine,e.Ab(n,9).ngClassDirty,e.Ab(n,9).ngClassValid,e.Ab(n,9).ngClassInvalid,e.Ab(n,9).ngClassPending)})}function gi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,20,"tr",[["class","noHighlight edit_row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,6,"td",[["class","clearfix min-size-col"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,li)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ni)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(8,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(10,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(11,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),e.Ib(12,null,["",""])),e.Eb(13,1),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(16777216,null,null,1,null,ai)),e.pb(16,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,di)),e.pb(18,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,pi)),e.pb(20,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,5,0,"interval"==n.parent.context.$implicit.configType),l(n,7,0,"interval"!=n.parent.context.$implicit.configType),l(n,16,0,n.parent.context.$implicit.daysofweek),l(n,18,0,n.parent.context.$implicit.starttime),l(n,20,0,!n.parent.context.$implicit.starttime)},function(l,n){l(n,1,0,e.Jb(n,1,0,e.Ab(n,2).transform("MAC address"))),l(n,8,0,e.Jb(n,8,0,e.Ab(n,9).transform("Type")));var u=e.Jb(n,12,0,e.Ab(n,14).transform(e.Jb(n,12,0,l(n,13,0,e.Ab(n.parent.parent.parent,4),n.parent.context.$implicit.configType))));l(n,12,0,u)})}function hi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,1,"p",[],null,null,null,null,null)),(l()(),e.Ib(2,null,["",""]))],null,function(l,n){l(n,2,0,n.component.timeValidationErrorMsg)})}function fi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","form-group text-right"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"button",[["class","btn btn-default remove-icon-button"],["id","pc-btn-remove"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.delete(l.parent.parent.context.$implicit)&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(3,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-trash"]],null,null,null,null,null))],null,function(l,n){l(n,1,0,e.sb(1,"",e.Jb(n,1,0,e.Ab(n,2).transform("Delete")),""))})}function mi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,"tr",[["class","noHighlight controls"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,10,"td",[["colspan","5"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,9,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,2,"div",[["class","error_messages"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,hi)),e.pb(5,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,fi)),e.pb(7,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(8,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.edit(l.parent.context.$implicit)&&e),e},Kl.b,Kl.a)),e.pb(9,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),e.qb(10,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(11,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,5,0,u.timeValidationError),l(n,7,0,!u.newQuota),l(n,9,0,e.Ab(n.parent.parent.parent,10).pristine||e.Ab(n.parent.parent.parent,10).invalid,"save"),l(n,11,0,"cancel")},null)}function vi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,24,"tbody",[],[[8,"id",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),(l()(),e.qb(1,0,null,null,19,"tr",[],[[8,"hidden",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.editRow(l.context.index)&&e),e},null,null)),e.pb(2,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{ngClass:[0,"ngClass"]},null),e.Db(3,{disabled_row:0}),(l()(),e.qb(4,0,null,null,3,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(6,0,null,null,1,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.Ib(7,null,[" "," "])),(l()(),e.qb(8,0,null,null,6,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(10,0,null,null,4,"div",[["class","td-content"]],[[8,"id",0]],null,null,null,null)),(l()(),e.qb(11,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),e.Ib(12,null,["",""])),e.Eb(13,1),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.hb(16777216,null,null,1,null,Ga)),e.pb(16,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ya)),e.pb(18,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Xa)),e.pb(20,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,gi)),e.pb(22,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,mi)),e.pb(24,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,e=l(n,3,0,n.context.index!==u.currentRow&&!1!==u.currentRow||u.addNew);l(n,2,0,e),l(n,16,0,n.context.$implicit.daysofweek),l(n,18,0,n.context.$implicit.starttime),l(n,20,0,!n.context.$implicit.starttime),l(n,22,0,n.context.index==u.currentRow&&!1!==u.currentRow),l(n,24,0,n.context.index==u.currentRow&&!1!==u.currentRow)},function(l,n){var u=n.component;l(n,0,0,e.sb(1,"pc-schedule-",n.context.index,""),n.context.odd,n.context.even),l(n,1,0,n.context.index===u.currentRow&&!1!==u.currentRow),l(n,4,0,e.Jb(n,4,0,e.Ab(n,5).transform("MAC address"))),l(n,6,0,e.sb(1,"schedule-mac-",n.context.index,"")),l(n,7,0,n.context.$implicit.stations?n.context.$implicit.stations:n.context.$implicit.station),l(n,8,0,e.Jb(n,8,0,e.Ab(n,9).transform("Type"))),l(n,10,0,e.sb(1,"schedule-type-",n.context.index,""));var t=e.Jb(n,12,0,e.Ab(n,14).transform(e.Jb(n,12,0,l(n,13,0,e.Ab(n.parent.parent,4),n.context.$implicit.configType))));l(n,12,0,t)})}function Ci(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,35,"div",[["class","row"],["style","margin-top: 40px;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Configuration"])),(l()(),e.qb(4,0,null,null,31,"div",[["class","vendor-tables"]],null,null,null,null,null)),(l()(),e.qb(5,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),e.pb(6,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Please note that WiFi schedule Settings have precedence over these settings!"])),(l()(),e.qb(8,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),e.pb(9,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["You can limit access to certain Wi-Fi devices by the MAC address. Please define the time periods during which Wi-Fi access is allowed."])),(l()(),e.qb(11,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),e.qb(12,0,null,null,3,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(13,0,null,null,2,"div",[["class","text-right"],["style","float: right;"]],null,null,null,null,null)),(l()(),e.qb(14,0,null,null,1,"button",[["class","btn btn-default small"],["id","pc-add-interval"]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.addNewSchedule()&&e),e},null,null)),(l()(),e.qb(15,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-plus"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,19,"table",[["class","dataTable dataTableHighlight vendorTable-responsive time_control"]],null,null,null,null,null)),(l()(),e.qb(17,0,null,null,7,"thead",[],null,null,null,null,null)),(l()(),e.qb(18,0,null,null,6,"tr",[],null,null,null,null,null)),(l()(),e.qb(19,0,null,null,2,"th",[["translate",""]],null,null,null,null,null)),e.pb(20,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["MAC address"])),(l()(),e.qb(22,0,null,null,2,"th",[["colspan","4"],["translate",""]],null,null,null,null,null)),e.pb(23,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Type"])),(l()(),e.qb(25,0,null,null,5,"tbody",[],[[8,"hidden",0]],null,null,null,null)),(l()(),e.qb(26,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),e.qb(27,0,null,null,3,"td",[["class","text-center empty-vaps-list"],["colspan","9"]],null,null,null,null,null)),(l()(),e.qb(28,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),e.pb(29,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Please click the + button to add a new schedule."])),(l()(),e.hb(16777216,null,null,1,null,La)),e.pb(32,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,2,null,vi)),e.pb(34,278528,null,0,i.n,[e.P,e.M,e.s],{ngForOf:[0,"ngForOf"]},null),e.Eb(35,2)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,""),l(n,9,0,""),l(n,20,0,""),l(n,23,0,""),l(n,29,0,""),l(n,32,0,u.addNew);var t=e.Jb(n,34,0,l(n,35,0,e.Ab(n.parent,3),u.schedules.concat(u.quotas),u.stations));l(n,34,0,t)},function(l,n){var u=n.component;l(n,14,0,u.addNew||u.editSchedule),l(n,25,0,u.schedules.length||u.quotas.length||u.addNew)})}function Ai(l){return e.Kb(0,[e.Cb(0,pa.b,[]),e.Cb(0,Pt,[]),e.Cb(0,i.l,[]),e.Cb(0,v.a,[]),e.Cb(0,ga,[]),e.Cb(0,Mt,[]),e.Gb(402653184,1,{delos:0}),(l()(),e.qb(7,0,null,null,24,"div",[["class","vendor-dialogs"]],null,null,null,null,null)),(l()(),e.qb(8,0,null,null,23,"form",[["autocomplete","off"],["class","form-horizontal"],["id","parental-control-form"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,10).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,10).onReset()&&t),t},null,null)),e.pb(9,16384,null,0,m.w,[],null,null),e.pb(10,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(12,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(13,0,null,null,14,"div",[],null,null,null,null,null)),(l()(),e.qb(14,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),e.pb(15,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Parental Control"])),(l()(),e.qb(17,0,null,null,8,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(18,0,null,null,7,"label",[["for","pc-enable"]],null,null,null,null,null)),(l()(),e.qb(19,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","pc-enable"],["name","globalEnabled"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,21).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.globalEnabled=u)&&t),"click"===n&&(a.markAsDirty(),t=!1!==a.resetOpenRows()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(21,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),e.pb(22,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(23,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(24,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.hb(16777216,null,null,1,null,Aa)),e.pb(27,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ta)),e.pb(29,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ci)),e.pb(31,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,15,0,""),l(n,21,0,"1","0"),l(n,22,0),l(n,24,0,""),l(n,27,0,!u.addNew&&!u.editSchedule),l(n,29,0,0!=u.globalEnabled),l(n,31,0,0!=u.globalEnabled)},function(l,n){var u=n.component;l(n,8,0,e.Ab(n,12).ngClassUntouched,e.Ab(n,12).ngClassTouched,e.Ab(n,12).ngClassPristine,e.Ab(n,12).ngClassDirty,e.Ab(n,12).ngClassValid,e.Ab(n,12).ngClassInvalid,e.Ab(n,12).ngClassPending),l(n,19,0,u.globalEnabled,1==u.globalEnabled)})}function ki(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"app-parental-control",[],null,null,null,Ai,ma)),e.Fb(512,null,ha.a,ha.a,[I.a,x.a]),e.pb(2,245760,null,0,fa.a,[Ol.a,Hl.a,ha.a,r.j],null,null)],function(l,n){l(n,2,0)},null)}var yi=e.mb("app-parental-control",fa.a,ki,{},{},[]),qi=u("5dpn"),Ii=u("1ZPt"),xi=e.ob({encapsulation:2,styles:[],data:{}});function wi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,26,"div",[],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,6,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","atf"],["name","atf"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,4).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.atf=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(4,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(5,0,null,null,2,"label",[["for","atf"],["translate",""]],null,null,null,null,null)),e.pb(6,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Airtime Fairness"])),(l()(),e.qb(8,0,null,null,6,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(9,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","bsteer"],["name","bsteer"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,11).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.bsteer=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(11,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(12,0,null,null,2,"label",[["for","bsteer"],["translate",""]],null,null,null,null,null)),e.pb(13,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Band Steering"])),(l()(),e.qb(15,0,null,null,5,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","ieee80211k"],["name","ieee80211k"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,18).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.ieee80211k=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(18,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(19,0,null,null,1,"label",[["for","ieee80211k"]],null,null,null,null,null)),(l()(),e.Ib(-1,null,["IEEE 802.11k"])),(l()(),e.qb(21,0,null,null,5,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(22,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","ieee80211v"],["name","ieee80211v"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,24).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.ieee80211v=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(24,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(25,0,null,null,1,"label",[["for","ieee80211v"]],null,null,null,null,null)),(l()(),e.Ib(-1,null,["IEEE 802.11v"]))],function(l,n){l(n,4,0,"1","0"),l(n,6,0,""),l(n,11,0,"1","0"),l(n,13,0,""),l(n,18,0,"1","0"),l(n,24,0,"1","0")},function(l,n){var u=n.component;l(n,2,0,u.atf,1==u.atf),l(n,9,0,u.bsteer,1==u.bsteer),l(n,16,0,u.ieee80211k,1==u.ieee80211k),l(n,22,0,u.ieee80211v,1==u.ieee80211v)})}function Pi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,11,"div",[["class","form-group clearfix"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(2,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi Clone"])),(l()(),e.qb(4,0,null,null,2,"p",[["class","form-group"],["translate",""]],null,null,null,null,null)),e.pb(5,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi Clone allows you to apply the WiFi access data (network name and WiFi password) of another WiFi access point to this device automatically. This requires that you start the configuration process and then press the WPS button on the device containing the WiFi access data (SSID and WiFi password) to be applied."])),(l()(),e.qb(7,0,null,null,4,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(8,0,null,null,3,"button",[["class","btn btn-default small"],["id","clone-ssid"],["translate",""]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.wpsClone()&&e),e},null,null)),e.pb(9,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.Ib(-1,null,["Start Configuration"]))],function(l,n){l(n,2,0,""),l(n,5,0,""),l(n,9,0,"")},function(l,n){var u=n.component;l(n,8,0,e.sb(1,"",e.Jb(n,8,0,e.Ab(n,10).transform(u.cloneSsidButtonTitle)),""),u.radiosDisabled||"running"===u.wpsCloneState)})}function Mi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,12,"div",[["style","margin: 40px 0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,8,"div",[["class","progress"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,7,"div",[["attr.aria-valuemax","120"],["attr.aria-valuemin","0"],["attr.aria-valuenow","elapsed || 0"],["class","progress-bar"],["role","progressbar"]],null,null,null,null,null)),e.pb(3,278528,null,0,i.r,[e.t,e.k,e.E],{ngStyle:[0,"ngStyle"]},null),e.Db(4,{width:0}),(l()(),e.Ib(5,null,[" "," "])),e.Eb(6,2),(l()(),e.qb(7,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),e.pb(8,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["s"])),(l()(),e.qb(10,0,null,null,2,"p",[["class","hint-text"],["translate",""]],null,null,null,null,null)),e.pb(11,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["WiFi Clone is active..."]))],function(l,n){var u=n.component,e=l(n,4,0,(u.elapsed/u.wpsCloneDuration*100||0)+"%");l(n,3,0,e),l(n,8,0,""),l(n,11,0,"")},function(l,n){var u=n.component,t=e.Jb(n,5,0,l(n,6,0,e.Ab(n.parent,0),u.elapsed||0,"1.0-0"));l(n,5,0,t)})}function Ei(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,e.Ab(n.parent,5).form.invalid,"save")},null)}function ji(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cancel()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function Ti(l){return e.Kb(0,[e.Cb(0,i.f,[e.u]),e.Gb(402653184,1,{delos:0}),(l()(),e.qb(2,0,null,null,44,"div",[["class","vendor-dialogs"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,43,"form",[["autocomplete","off"],["class","form-horizontal"],["id","sonConfig"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0;return"submit"===n&&(t=!1!==e.Ab(l,5).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,5).onReset()&&t),t},null,null)),e.pb(4,16384,null,0,m.w,[],null,null),e.pb(5,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(7,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(8,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),e.pb(9,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Mesh WiFi"])),(l()(),e.qb(11,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),e.pb(12,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enabling the Mesh functionality features will optimize your inhome WiFi network experience while using your mobile devices. Inhome roaming solves your sticky client problem, Band Steering and Dynamic Frequency Selection provides WiFi access even with many clients and Airtime Fairness optimizes your bandwidth."])),(l()(),e.qb(14,0,null,null,7,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(15,0,null,null,3,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","enable"],["name","enable"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,17).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.enable=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(17,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),e.pb(18,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(19,0,null,null,2,"label",[["for","enable"],["translate",""]],null,null,null,null,null)),e.pb(20,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.qb(22,0,null,null,16,"div",[["class","form-group clearfix"]],[[8,"hidden",0]],null,null,null,null)),(l()(),e.qb(23,0,null,null,15,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),e.qb(24,0,null,null,2,"h4",[["class","not-first-child"],["translate",""]],null,null,null,null,null)),e.pb(25,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Features"])),(l()(),e.hb(16777216,null,null,1,null,wi)),e.pb(28,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(29,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(30,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),e.pb(31,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,['IEEE 802.11r (also called "Fast Roaming") accelerates the login of a WiFi device to this WiFi access point. Requirement: The device was already connected to another WiFi access point with 802.11r enabled, identical network name (SSID), and identical encryption. Unfortunately, 802.11r is not compatible with every WiFi device. If you experience problems with any of your devices, please disable this option.'])),(l()(),e.qb(33,0,null,null,5,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(34,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","ieee80211r"],["name","ieee80211r"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,36).onInput(u)&&t),"valueChange"===n&&(t=!1!==(a.ieee80211r=u)&&t),"click"===n&&(t=!1!==a.markAsDirty()&&t),t},null,null)),e.Fb(135680,null,m.n,m.n,[[2,m.c],[8,null],[8,null],[8,null]]),e.pb(36,16384,null,0,Rl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),e.qb(37,0,null,null,1,"label",[["for","ieee80211r"]],null,null,null,null,null)),(l()(),e.Ib(-1,null,["IEEE 802.11r"])),(l()(),e.hb(16777216,null,null,1,null,Pi)),e.pb(40,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,Mi)),e.pb(42,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Ei)),e.pb(44,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,ji)),e.pb(46,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,9,0,""),l(n,12,0,""),l(n,17,0,"1","0"),l(n,18,0),l(n,20,0,""),l(n,25,0,""),l(n,28,0,null),l(n,31,0,""),l(n,36,0,"1","0"),l(n,40,0,null),l(n,42,0,"running"===u.wpsCloneState||"pending"===u.wpsCloneState),l(n,44,0,e.Ab(n,5).form.dirty),l(n,46,0,e.Ab(n,5).form.dirty)},function(l,n){var u=n.component;l(n,3,0,e.Ab(n,7).ngClassUntouched,e.Ab(n,7).ngClassTouched,e.Ab(n,7).ngClassPristine,e.Ab(n,7).ngClassDirty,e.Ab(n,7).ngClassValid,e.Ab(n,7).ngClassInvalid,e.Ab(n,7).ngClassPending),l(n,15,0,u.enable,1==u.enable),l(n,22,0,1!=u.enable),l(n,34,0,u.ieee80211r,1==u.ieee80211r)})}function Fi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"app-son",[],null,null,null,Ti,xi)),e.Fb(512,null,qi.a,qi.a,[I.a,x.a]),e.Fb(512,null,Fn.a,Fn.a,[I.a,x.a]),e.pb(3,245760,null,0,Ii.a,[qi.a,I.a,Fn.a,Hl.a,k.a,E.a],null,null)],function(l,n){l(n,3,0)},null)}var Si=e.mb("app-son",Ii.a,Fi,{},{},[]),Vi=u("0FX9"),$i=function(){function l(l){this.renderer=l,this.value=""}return l.prototype.ngOnChanges=function(){this.createQRCode()},l.prototype.createQRCode=function(){var l=this;if(this.value){var n=this.renderer.createElement("canvas");this.toCanvas(n).then(function(u){l.renderElement(n)}).catch(function(l){console.error(l)})}},l.prototype.renderElement=function(l){for(var n=0,u=this.qrcElement.nativeElement.childNodes;n<u.length;n++)this.renderer.removeChild(this.qrcElement.nativeElement,u[n]);this.renderer.appendChild(this.qrcElement.nativeElement,l)},l.prototype.toCanvas=function(l){var n=this;return new Promise(function(u,e){Vi.toCanvas(l,n.value,{errorCorrectionLevel:"M"},function(l){l?e(l):u("success")})})},l}(),Di=e.ob({encapsulation:2,styles:[],data:{}});function Bi(l){return e.Kb(0,[e.Gb(402653184,1,{qrcElement:0}),(l()(),e.qb(1,0,[[1,0],["qrcElement",1]],null,0,"div",[],null,null,null,null,null))],null,null)}var Ki=u("CMBB"),_i=u("gOaY"),Ri=e.ob({encapsulation:0,styles:[[".tiny-padding-top[_ngcontent-%COMP%]{padding-top:10px}.no-margin-top[_ngcontent-%COMP%]{margin-top:0}"]],data:{}});function Ji(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,6,"div",[["class","alert alert-warning alert-dismissible"],["role","alert"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"button",[["aria-label","Close"],["class","close"],["data-dismiss","alert"],["id","guest-network-warning-close"],["type","button"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(l()(),e.Ib(-1,null,["\xd7"])),(l()(),e.qb(4,0,null,null,2,"strong",[["translate",""]],null,null,null,null,null)),e.pb(5,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Switch your WiFi network on first so that your guest network can be used."]))],function(l,n){l(n,5,0,"")},null)}function Oi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"label",[["class","col-md-2 control-label text-right"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Frequency band:"]))],function(l,n){l(n,1,0,"")},null)}function Ni(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"label",[["class","col-md-2 control-label text-right"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Radio:"]))],function(l,n){l(n,1,0,"")},null)}function Ui(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["value","radio1"]],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,"radio1"),l(n,2,0,"radio1")},function(l,n){var u=n.component;l(n,0,0,!u.radio1Enabled),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(u.radio1Band)))})}function Wi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["value","radio0"]],[[8,"disabled",0]],null,null,null,null)),e.pb(1,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(2,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(3,null,["",""])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){l(n,1,0,"radio0"),l(n,2,0,"radio0")},function(l,n){var u=n.component;l(n,0,0,!u.radio0Enabled),l(n,3,0,e.Jb(n,3,0,e.Ab(n,4).transform(u.radio0Band)))})}function Hi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,4,"option",[["translate",""],["value","radio1+radio0"]],[[8,"disabled",0]],null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(2,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(3,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["2.4 GHz + 5 GHz"]))],function(l,n){l(n,1,0,""),l(n,2,0,"radio1+radio0"),l(n,3,0,"radio1+radio0")},function(l,n){var u=n.component;l(n,0,0,!u.radio1Enabled||!u.radio0Enabled)})}function zi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,17,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Oi)),e.pb(2,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,Ni)),e.pb(4,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(5,0,null,null,12,"div",[["class","col-md-10"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,11,"select",[["class","form-control edit-radio"],["id","guest_device"],["name","device"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,7).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,7).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.guest_device=u)&&t),t},null,null)),e.pb(7,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(9,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(11,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.hb(16777216,null,null,1,null,Ui)),e.pb(13,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Wi)),e.pb(15,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Hi)),e.pb(17,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,null),l(n,4,0,null),l(n,9,0,"device",!u.radio1Enabled&&!u.radio0Enabled,u.guest_device),l(n,13,0,u.hasRadio1),l(n,15,0,u.hasRadio0),l(n,17,0,u.hasRadio1&&u.hasRadio0)},function(l,n){l(n,6,0,e.Ab(n,11).ngClassUntouched,e.Ab(n,11).ngClassTouched,e.Ab(n,11).ngClassPristine,e.Ab(n,11).ngClassDirty,e.Ab(n,11).ngClassValid,e.Ab(n,11).ngClassInvalid,e.Ab(n,11).ngClassPending)})}function Li(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"label",[["class","col-md-2 control-label text-right"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Network name:"]))],function(l,n){l(n,1,0,"")},null)}function Gi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"label",[["class","col-md-2 control-label text-right"],["translate",""]],null,null,null,null,null)),e.pb(1,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["SSID:"]))],function(l,n){l(n,1,0,"")},null)}function Yi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,24,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),e.qb(3,16777216,null,null,11,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["containerClass","text-danger"],["id","guest_key"],["maxlength","64"],["name","guest_key"],["placement","bottom"],["triggers","none"]],[[8,"type",0],[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,4)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,4).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,4)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,4)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.guest_key=u)&&t),"keyup"===n&&(t=!1!==a.keySsidCheck(a.guest_key)&&t),"focus"===n&&(t=!1!==a.keySsidCheck(a.guest_key)&&t),t},null,null)),e.pb(4,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(5,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(6,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(7,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(10,671744,[["keySsid",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(12,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(13,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],placement:[1,"placement"],triggers:[2,"triggers"],containerClass:[3,"containerClass"],isOpen:[4,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(15,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),e.qb(16,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleKeyVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==l.component.toggleKeyVisibility()&&e),e},null,null)),e.Cb(131072,r.i,[r.j,e.h]),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(19,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),e.pb(20,278528,null,0,i.m,[e.s,e.t,e.k,e.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),e.Db(21,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),e.qb(22,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(23,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],function(l,n){var u=n.component;l(n,5,0,u.guest_key_required),l(n,6,0,"64"),l(n,7,0,u.regExPass),l(n,10,0,"guest_key",u.guest_key),l(n,13,0,e.sb(1,"",e.Jb(n,13,0,e.Ab(n,14).transform(u.key_ssid_error)),""),"bottom","none","text-danger",e.sb(1,"",e.Ab(n,10).invalid&&u.key_ssid_error||"",""));var t=l(n,21,0,"text"==u.keyInputType,"password"==u.keyInputType);l(n,20,0,"glyphicon ",t)},function(l,n){var u=n.component;l(n,3,1,[e.sb(1,"",u.keyInputType,""),e.Ab(n,5).required?"":null,e.Ab(n,6).maxlength?e.Ab(n,6).maxlength:null,e.Ab(n,7).pattern?e.Ab(n,7).pattern:null,e.Ab(n,12).ngClassUntouched,e.Ab(n,12).ngClassTouched,e.Ab(n,12).ngClassPristine,e.Ab(n,12).ngClassDirty,e.Ab(n,12).ngClassValid,e.Ab(n,12).ngClassInvalid,e.Ab(n,12).ngClassPending]),l(n,16,0,e.Jb(n,16,0,"text"==u.keyInputType?e.Ab(n,17).transform("Hide password"):e.Ab(n,18).transform("Show password"))),l(n,23,0,e.Jb(n,23,0,e.Ab(n,24).transform("A passphrase (8-63 characters) or a pre-shared key (64 characters) is required")))})}function Qi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,3,"div",[["class","col-xs-12"],["style","margin: 0; padding:0;"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,2,"span",[["class","hint-text text-right"]],null,null,null,null,null)),(l()(),e.Ib(2,null,[" "," "])),e.Cb(131072,r.i,[r.j,e.h])],null,function(l,n){l(n,2,0,e.Jb(n,2,0,e.Ab(n,3).transform("Your WiFi is not encrypted. Please activate the encryption.")))})}function Zi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,7,"div",[["class","row"]],null,null,null,null,null)),(l()(),e.qb(1,0,null,null,3,"div",[["class","col-md-offset-2 col-md-7 col-sm-6 col-sm-offset-2"]],null,null,null,null,null)),(l()(),e.qb(2,0,null,null,2,"p",[["class","pull-left"],["translate",""]],null,null,null,null,null)),e.pb(3,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["The QR-Code gives you easy access to the guest network using mobile devices such as smartphones or tablets. While scanning the QR-code the credentials for the guest network will be transferred to your mobile device."])),(l()(),e.qb(5,0,null,null,2,"div",[["class","col-md-2"]],null,null,null,null,null)),(l()(),e.qb(6,0,null,null,1,"app-qr-code",[],null,null,null,Bi,Di)),e.pb(7,573440,null,0,$i,[e.E],{value:[0,"value"]},null)],function(l,n){var u=n.component;l(n,3,0,""),l(n,7,0,u.qr)},null)}function Xi(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.save()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,e.Ab(n.parent,5).invalid,"save")},null)}function lr(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var e=!0;return"floatBtnClick"===n&&(e=!1!==l.component.cleanupForm()&&e),e},Kl.b,Kl.a)),e.pb(1,114688,null,0,_l.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function nr(l){return e.Kb(0,[e.Gb(402653184,1,{delos:0}),e.Gb(402653184,2,{timeoutHint:0}),(l()(),e.qb(2,0,null,null,175,"div",[["class","vendor-dialogs buttons-dialog"],["id","wifi-guest"]],null,null,null,null,null)),(l()(),e.qb(3,0,null,null,174,"form",[["autocomplete","off"],["class","form-horizontal"],["id","guest"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var t=!0,a=l.component;return"submit"===n&&(t=!1!==e.Ab(l,5).onSubmit(u)&&t),"reset"===n&&(t=!1!==e.Ab(l,5).onReset()&&t),"submit"===n&&(t=!1!==a.save()&&t),t},null,null)),e.pb(4,16384,null,0,m.w,[],null,null),e.pb(5,4210688,[[1,4],["delos",4]],0,m.m,[[8,null],[8,null]],null,null),e.Fb(2048,null,m.c,null,[m.m]),e.pb(7,16384,null,0,m.l,[[4,m.c]],null,null),(l()(),e.qb(8,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),e.pb(9,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Configuration"])),(l()(),e.hb(16777216,null,null,1,null,Ji)),e.pb(12,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(13,0,null,null,10,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(14,0,null,null,6,"input",[["id","enable"],["name","enable"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,15).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,15).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.enable=u)&&t),"click"===n&&(t=!1!==e.Ab(l,5).form.markAsDirty()&&t),"change"===n&&(a.setRequiredSsidKey(),t=!1!==a.synchRadio()&&t),t},null,null)),e.pb(15,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(17,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(19,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(20,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(21,0,null,null,2,"label",[["for","enable"],["translate",""]],null,null,null,null,null)),e.pb(22,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.qb(24,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(25,0,null,null,2,"span",[["class","pull-left"],["translate",""]],null,null,null,null,null)),e.pb(26,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["The guest network does only allow access to the internet."])),(l()(),e.hb(16777216,null,null,1,null,zi)),e.pb(29,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(30,0,null,null,17,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.hb(16777216,null,null,1,null,Li)),e.pb(32,212992,null,0,y.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.hb(16777216,null,null,1,null,Gi)),e.pb(34,212992,null,0,A.a,[e.M,e.P,k.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),e.qb(35,0,null,null,12,"div",[["class","col-md-10"]],null,null,null,null,null)),(l()(),e.qb(36,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","guest_ssid"],["maxlength","32"],["name","guest_ssid"],["required",""],["triggers","none"],["type","text"]],[[1,"required",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"focus"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var t=!0,a=l.component;return"input"===n&&(t=!1!==e.Ab(l,37)._handleInput(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,37).onTouched()&&t),"compositionstart"===n&&(t=!1!==e.Ab(l,37)._compositionStart()&&t),"compositionend"===n&&(t=!1!==e.Ab(l,37)._compositionEnd(u.target.value)&&t),"ngModelChange"===n&&(t=!1!==(a.guest_ssid=u)&&t),"keyup"===n&&(t=!1!==a.ssidCheck(a.guest_ssid)&&t),"focus"===n&&(t=!1!==a.ssidCheck(a.guest_ssid)&&t),t},null,null)),e.pb(37,16384,null,0,m.d,[e.E,e.k,[2,m.a]],null,null),e.pb(38,16384,null,0,m.q,[],{required:[0,"required"]},null),e.pb(39,540672,null,0,m.f,[],{maxlength:[0,"maxlength"]},null),e.pb(40,540672,null,0,m.p,[],{pattern:[0,"pattern"]},null),e.Fb(1024,null,m.h,function(l,n,u){return[l,n,u]},[m.q,m.f,m.p]),e.Fb(1024,null,m.i,function(l){return[l]},[m.d]),e.pb(43,671744,[["nameSsid",4]],0,m.n,[[2,m.c],[6,m.h],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(45,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(46,212992,null,0,Dl.a,[e.k,e.E,e.P,Bl.a,s.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),e.Cb(131072,r.i,[r.j,e.h]),(l()(),e.qb(48,0,null,null,34,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(49,0,null,null,2,"label",[["class","control-label col-md-2 text-right key-label tiny-padding-top"],["translate",""]],null,null,null,null,null)),e.pb(50,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Encryption:"])),(l()(),e.qb(52,0,null,null,30,"div",[["class","col-md-10"]],null,null,null,null,null)),(l()(),e.qb(53,0,null,null,25,"div",[["class","form-group no-margin-top"]],null,null,null,null,null)),(l()(),e.qb(54,0,null,null,24,"div",[["class","btn-group "]],null,null,null,null,null)),(l()(),e.qb(55,0,null,null,7,"button",[["btnRadio","psk2"],["class","btn btn-primary"],["id","encryption-guestWifi-wpa"],["name","encryptionGuestWifi"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,57).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.guestEncription=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.guest_ssid)&&t),t},null,null)),e.pb(56,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(57,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(59,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(61,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA2"])),(l()(),e.qb(63,0,null,null,7,"button",[["btnRadio","psk-mixed+tkip+ccmp"],["class","btn btn-primary"],["id","encryption-guestWifi-wpa-wpa2"],["name","encryptionGuestWifi"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,65).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.guestEncription=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.guest_ssid)&&t),t},null,null)),e.pb(64,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(65,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(67,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(69,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["WPA/WPA2"])),(l()(),e.qb(71,0,null,null,7,"button",[["btnRadio","none"],["class","btn btn-primary"],["id","encryption-guestWifi-none"],["name","encryptionGuestWifi"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var t=!0,a=l.component;return"click"===n&&(t=!1!==e.Ab(l,73).onClick()&&t),"ngModelChange"===n&&(t=!1!==(a.guestEncription=u)&&t),"click"===n&&(t=!1!==a.onEncryptionChange(a.guest_ssid)&&t),t},null,null)),e.pb(72,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(73,81920,null,0,jn.a,[e.k,e.h,[2,Tn.a],e.E],{btnRadio:[0,"btnRadio"]},null),e.Fb(1024,null,m.i,function(l){return[l]},[jn.a]),e.pb(75,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(77,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.Ib(-1,null,["none"])),(l()(),e.hb(16777216,null,null,1,null,Yi)),e.pb(80,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Qi)),e.pb(82,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,Zi)),e.pb(84,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.qb(85,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),e.pb(86,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Automatic shutoff"])),(l()(),e.qb(88,0,null,null,14,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(89,0,null,null,10,"div",[["class","col-md-6 no-padding-left"]],null,null,null,null,null)),(l()(),e.qb(90,0,null,null,6,"input",[["id","enableWifiTimeout"],["name","enableWifiTimeout"],["type","checkbox"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,91).onChange(u.target.checked)&&t),"blur"===n&&(t=!1!==e.Ab(l,91).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.enableWifiTimeout=u)&&t),"click"===n&&(t=!1!==e.Ab(l,5).form.markAsDirty()&&t),t},null,null)),e.pb(91,16384,null,0,m.b,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.b]),e.pb(93,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(95,16384,null,0,m.k,[[4,m.j]],null,null),e.pb(96,81920,null,0,Jl.a,[e.k,Ol.a,e.z],null,null),(l()(),e.qb(97,0,null,null,2,"label",[["for","enableWifiTimeout"],["translate",""]],null,null,null,null,null)),e.pb(98,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Enable"])),(l()(),e.qb(100,0,null,null,2,"div",[["class","col-md-6 text-right"]],null,null,null,null,null)),(l()(),e.qb(101,0,null,null,1,"app-guest-wifi-timeout",[],null,null,null,d.b,d.a)),e.pb(102,114688,[[2,4],["timeoutHint",4]],0,p.a,[g.a,r.j],null,null),(l()(),e.qb(103,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),e.qb(104,0,null,null,2,"span",[["class","pull-left"],["translate",""]],null,null,null,null,null)),e.pb(105,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Select a time period. The guest WiFi network is automatically switched off after this period has elapsed."])),(l()(),e.qb(107,0,null,null,70,"div",[["class","form-group"]],[[8,"hidden",0]],null,null,null,null)),(l()(),e.qb(108,0,null,null,2,"label",[["class","col-md-4 control-label text-left"],["translate",""]],null,null,null,null,null)),e.pb(109,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),(l()(),e.Ib(-1,null,["Selected time period:"])),(l()(),e.qb(111,0,null,null,66,"div",[["class","col-md-8"]],null,null,null,null,null)),(l()(),e.qb(112,0,null,null,65,"select",[["class","form-control edit-radio"],["id","wifiTimeout"],["name","wifiTimeout"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var t=!0,a=l.component;return"change"===n&&(t=!1!==e.Ab(l,113).onChange(u.target.value)&&t),"blur"===n&&(t=!1!==e.Ab(l,113).onTouched()&&t),"ngModelChange"===n&&(t=!1!==(a.wifiTimeout=u)&&t),t},null,null)),e.pb(113,16384,null,0,m.r,[e.E,e.k],null,null),e.Fb(1024,null,m.i,function(l){return[l]},[m.r]),e.pb(115,671744,null,0,m.n,[[2,m.c],[8,null],[8,null],[6,m.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),e.Fb(2048,null,m.j,null,[m.n]),e.pb(117,16384,null,0,m.k,[[4,m.j]],null,null),(l()(),e.qb(118,0,null,null,4,"option",[["translate",""],["value","00:30"]],null,null,null,null,null)),e.pb(119,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(120,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(121,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["30 min"])),(l()(),e.qb(123,0,null,null,4,"option",[["translate",""],["value","01:00"]],null,null,null,null,null)),e.pb(124,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(125,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(126,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["1 h"])),(l()(),e.qb(128,0,null,null,4,"option",[["translate",""],["value","02:00"]],null,null,null,null,null)),e.pb(129,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(130,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(131,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["2 h"])),(l()(),e.qb(133,0,null,null,4,"option",[["translate",""],["value","03:00"]],null,null,null,null,null)),e.pb(134,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(135,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(136,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["3 h"])),(l()(),e.qb(138,0,null,null,4,"option",[["translate",""],["value","04:00"]],null,null,null,null,null)),e.pb(139,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(140,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(141,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["4 h"])),(l()(),e.qb(143,0,null,null,4,"option",[["translate",""],["value","05:00"]],null,null,null,null,null)),e.pb(144,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(145,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(146,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["5 h"])),(l()(),e.qb(148,0,null,null,4,"option",[["translate",""],["value","06:00"]],null,null,null,null,null)),e.pb(149,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(150,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(151,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["6 h"])),(l()(),e.qb(153,0,null,null,4,"option",[["translate",""],["value","12:00"]],null,null,null,null,null)),e.pb(154,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(155,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(156,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["12 h"])),(l()(),e.qb(158,0,null,null,4,"option",[["translate",""],["value","18:00"]],null,null,null,null,null)),e.pb(159,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(160,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(161,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["18 h"])),(l()(),e.qb(163,0,null,null,4,"option",[["translate",""],["value","24:00"]],null,null,null,null,null)),e.pb(164,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(165,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(166,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["24 h"])),(l()(),e.qb(168,0,null,null,4,"option",[["translate",""],["value","36:00"]],null,null,null,null,null)),e.pb(169,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(170,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(171,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["36 h"])),(l()(),e.qb(173,0,null,null,4,"option",[["translate",""],["value","48:00"]],null,null,null,null,null)),e.pb(174,8536064,null,0,r.d,[r.j,e.k,e.h],{translate:[0,"translate"]},null),e.pb(175,147456,null,0,m.o,[e.k,e.E,[2,m.r]],{value:[0,"value"]},null),e.pb(176,147456,null,0,m.y,[e.k,e.E,[8,null]],{value:[0,"value"]},null),(l()(),e.Ib(-1,null,["48 h"])),(l()(),e.hb(16777216,null,null,1,null,Xi)),e.pb(179,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null),(l()(),e.hb(16777216,null,null,1,null,lr)),e.pb(181,16384,null,0,i.o,[e.P,e.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,9,0,""),l(n,12,0,!u.wifiEnabled),l(n,17,0,"enable",u.enable),l(n,20,0),l(n,22,0,""),l(n,26,0,""),l(n,29,0,u.hasRadio1),l(n,32,0,null),l(n,34,0,null),l(n,38,0,""),l(n,39,0,"32"),l(n,40,0,u.regExSsid),l(n,43,0,"guest_ssid",u.guest_ssid),l(n,46,0,e.sb(1,"",e.Jb(n,46,0,e.Ab(n,47).transform(u.ssid_error)),""),"none","text-danger",e.sb(1,"",e.Ab(n,43).invalid&&u.ssid_error||"","")),l(n,50,0,""),l(n,56,0,""),l(n,57,0,"psk2"),l(n,59,0,"encryptionGuestWifi",u.guestEncription),l(n,64,0,""),l(n,65,0,"psk-mixed+tkip+ccmp"),l(n,67,0,"encryptionGuestWifi",u.guestEncription),l(n,72,0,""),l(n,73,0,"none"),l(n,75,0,"encryptionGuestWifi",u.guestEncription),l(n,80,0,"none"!==u.guestEncription),l(n,82,0,"none"===u.guestEncription),l(n,84,0,u.enable),l(n,86,0,""),l(n,93,0,"enableWifiTimeout",u.enableWifiTimeout),l(n,96,0),l(n,98,0,""),l(n,102,0),l(n,105,0,""),l(n,109,0,""),l(n,115,0,"wifiTimeout",u.wifiTimeout),l(n,119,0,""),l(n,120,0,"00:30"),l(n,121,0,"00:30"),l(n,124,0,""),l(n,125,0,"01:00"),l(n,126,0,"01:00"),l(n,129,0,""),l(n,130,0,"02:00"),l(n,131,0,"02:00"),l(n,134,0,""),l(n,135,0,"03:00"),l(n,136,0,"03:00"),l(n,139,0,""),l(n,140,0,"04:00"),l(n,141,0,"04:00"),l(n,144,0,""),l(n,145,0,"05:00"),l(n,146,0,"05:00"),l(n,149,0,""),l(n,150,0,"06:00"),l(n,151,0,"06:00"),l(n,154,0,""),l(n,155,0,"12:00"),l(n,156,0,"12:00"),l(n,159,0,""),l(n,160,0,"18:00"),l(n,161,0,"18:00"),l(n,164,0,""),l(n,165,0,"24:00"),l(n,166,0,"24:00"),l(n,169,0,""),l(n,170,0,"36:00"),l(n,171,0,"36:00"),l(n,174,0,""),l(n,175,0,"48:00"),l(n,176,0,"48:00"),l(n,179,0,e.Ab(n,5).dirty),l(n,181,0,e.Ab(n,5).dirty)},function(l,n){var u=n.component;l(n,3,0,e.Ab(n,7).ngClassUntouched,e.Ab(n,7).ngClassTouched,e.Ab(n,7).ngClassPristine,e.Ab(n,7).ngClassDirty,e.Ab(n,7).ngClassValid,e.Ab(n,7).ngClassInvalid,e.Ab(n,7).ngClassPending),l(n,14,0,e.Ab(n,19).ngClassUntouched,e.Ab(n,19).ngClassTouched,e.Ab(n,19).ngClassPristine,e.Ab(n,19).ngClassDirty,e.Ab(n,19).ngClassValid,e.Ab(n,19).ngClassInvalid,e.Ab(n,19).ngClassPending),l(n,36,0,e.Ab(n,38).required?"":null,e.Ab(n,39).maxlength?e.Ab(n,39).maxlength:null,e.Ab(n,40).pattern?e.Ab(n,40).pattern:null,e.Ab(n,45).ngClassUntouched,e.Ab(n,45).ngClassTouched,e.Ab(n,45).ngClassPristine,e.Ab(n,45).ngClassDirty,e.Ab(n,45).ngClassValid,e.Ab(n,45).ngClassInvalid,e.Ab(n,45).ngClassPending),l(n,55,0,e.Ab(n,57).isActive,e.Ab(n,57).isActive,e.Ab(n,61).ngClassUntouched,e.Ab(n,61).ngClassTouched,e.Ab(n,61).ngClassPristine,e.Ab(n,61).ngClassDirty,e.Ab(n,61).ngClassValid,e.Ab(n,61).ngClassInvalid,e.Ab(n,61).ngClassPending),l(n,63,0,e.Ab(n,65).isActive,e.Ab(n,65).isActive,e.Ab(n,69).ngClassUntouched,e.Ab(n,69).ngClassTouched,e.Ab(n,69).ngClassPristine,e.Ab(n,69).ngClassDirty,e.Ab(n,69).ngClassValid,e.Ab(n,69).ngClassInvalid,e.Ab(n,69).ngClassPending),l(n,71,0,e.Ab(n,73).isActive,e.Ab(n,73).isActive,e.Ab(n,77).ngClassUntouched,e.Ab(n,77).ngClassTouched,e.Ab(n,77).ngClassPristine,e.Ab(n,77).ngClassDirty,e.Ab(n,77).ngClassValid,e.Ab(n,77).ngClassInvalid,e.Ab(n,77).ngClassPending),l(n,90,0,e.Ab(n,95).ngClassUntouched,e.Ab(n,95).ngClassTouched,e.Ab(n,95).ngClassPristine,e.Ab(n,95).ngClassDirty,e.Ab(n,95).ngClassValid,e.Ab(n,95).ngClassInvalid,e.Ab(n,95).ngClassPending),l(n,107,0,!u.enableWifiTimeout),l(n,112,0,e.Ab(n,117).ngClassUntouched,e.Ab(n,117).ngClassTouched,e.Ab(n,117).ngClassPristine,e.Ab(n,117).ngClassDirty,e.Ab(n,117).ngClassValid,e.Ab(n,117).ngClassInvalid,e.Ab(n,117).ngClassPending)})}function ur(l){return e.Kb(0,[(l()(),e.qb(0,0,null,null,2,"ng-component",[],null,null,null,nr,Ri)),e.Fb(512,null,Ki.a,Ki.a,[I.a,x.a]),e.pb(2,245760,null,0,_i.a,[Ki.a,Vn.a,Ol.a],null,null)],function(l,n){l(n,2,0)},null)}var er=e.mb("ng-component",_i.a,ur,{},{},[]),tr=u("mGS5"),ar=u("RChO"),ir=u("ueff"),rr=u("lOTE"),or=u("KXou"),sr=u("S7LP"),br=u("m2M5"),cr=u("ZLSo"),dr=u("9Xeq"),pr=u("yGOH"),gr=u("AW84"),hr=u("zCE2"),fr=u("Jg5P"),mr=u("Fq6B"),vr=u("Aivk"),Cr=u("rSzr"),Ar=u("LLTo"),kr=function(){return function(){}}(),yr=u("Vl9L"),qr=u("ub4/");u.d(n,"WifiModuleNgFactory",function(){return Ir});var Ir=e.nb(t,[],function(l){return e.xb([e.yb(512,e.j,e.cb,[[8,[a.a,$l,En,qu,fe,Te,_e,at,xt,da,yi,Si,er,tr.a,ar.a,ir.a,rr.a,or.a]],[3,e.j],e.x]),e.yb(4608,i.q,i.p,[e.u,[2,i.B]]),e.yb(4608,Ol.a,Ol.a,[[3,Ol.a]]),e.yb(4608,m.x,m.x,[]),e.yb(4608,sr.a,sr.a,[]),e.yb(4608,s.a,s.a,[e.j,e.z,e.q,sr.a,e.g]),e.yb(4608,Wl.a,Wl.a,[e.F,s.a]),e.yb(4608,b.a,b.a,[]),e.yb(4608,g.a,g.a,[I.a,x.a]),e.yb(4608,Bl.a,Bl.a,[]),e.yb(4608,M.a,M.a,[]),e.yb(1073742336,i.c,i.c,[]),e.yb(1073742336,zl.p,zl.p,[[2,zl.v],[2,zl.m]]),e.yb(1073742336,br.a,br.a,[]),e.yb(1073742336,r.g,r.g,[]),e.yb(1073742336,cr.a,cr.a,[]),e.yb(1073742336,m.t,m.t,[]),e.yb(1073742336,m.e,m.e,[]),e.yb(1073742336,dr.a,dr.a,[]),e.yb(1073742336,pr.a,pr.a,[]),e.yb(1073742336,gr.a,gr.a,[]),e.yb(1073742336,hr.a,hr.a,[]),e.yb(1073742336,fr.a,fr.a,[]),e.yb(1073742336,mr.a,mr.a,[]),e.yb(1073742336,vr.a,vr.a,[]),e.yb(1073742336,Cr.a,Cr.a,[]),e.yb(1073742336,Ar.a,Ar.a,[]),e.yb(1073742336,kr,kr,[]),e.yb(1073742336,pa.c,pa.c,[]),e.yb(1073742336,yr.a,yr.a,[]),e.yb(1073742336,t,t,[]),e.yb(1024,zl.j,function(){return[[{path:"status",component:w.a,data:{displayName:"Status",retailOrder:0}},{path:"radio0",component:Ul.a,data:{displayName:"2.4 GHz Radio",appHideForRetail:!0},canDeactivate:[qr.a]},{path:"radio1",component:Ul.a,data:{displayName:"5 GHz Radio",appHideForRetail:!0,hideForSingleRadio:!0},canDeactivate:[qr.a]},{path:"radios",component:Sn.a,data:{displayName:"WiFi networks",appHideForPro:!0,retailOrder:10},canDeactivate:[qr.a]},{path:"vaps",component:xu.a,data:{displayName:"SSIDs",appHideForRetail:!0},canDeactivate:[qr.a]},{path:"bridge",component:ve.a,data:{displayName:"Bridge",appHideForRetail:!0},canDeactivate:[qr.a]},{path:"radius",component:Se.a,data:{displayName:"RADIUS",appHideForRetail:!0},canDeactivate:[qr.a]},{path:"scanner",component:Je.a,data:{displayName:"Neighbour network",retailOrder:70}},{path:"wps",component:rt.a,data:{displayName:"WPS",retailOrder:60},canDeactivate:[qr.a]},{path:"wifiSchedule",component:jt.a,data:{displayName:"Schedule",retailOrder:40},canDeactivate:[qr.a]},{path:"ParentalControl",component:fa.a,data:{displayName:"Parental Control",retailOrder:50},canDeactivate:[qr.a]},{path:"son",component:Ii.a,data:{displayName:"Mesh WiFi",retailOrder:30},canDeactivate:[qr.a]},{path:"guest",component:_i.a,data:{displayName:"Guest network",retailOrder:20},canDeactivate:[qr.a]}]]},[])])})},QUaw:function(l,n,u){var e=u("Rb7d");n.render=function(l,n,u){var t=u,a=n;void 0!==t||n&&n.getContext||(t=n,n=void 0),n||(a=function(){try{return document.createElement("canvas")}catch(l){throw new Error("You need to specify a canvas element")}}()),t=e.getOptions(t);var i=e.getImageWidth(l.modules.size,t),r=a.getContext("2d"),o=r.createImageData(i,i);return e.qrToImageData(o.data,l,t),function(l,n,u){l.clearRect(0,0,n.width,n.height),n.style||(n.style={}),n.height=u,n.width=u,n.style.height=u+"px",n.style.width=u+"px"}(r,a,i),r.putImageData(o,0,0),a},n.renderToDataURL=function(l,u,e){var t=e;return void 0!==t||u&&u.getContext||(t=u,u=void 0),t||(t={}),n.render(l,u,t).toDataURL(t.type||"image/png",(t.rendererOpts||{}).quality)}},Rb7d:function(l,n){function u(l){if("string"!=typeof l)throw new Error("Color should be defined as hex string");var n=l.slice().replace("#","").split("");if(n.length<3||5===n.length||n.length>8)throw new Error("Invalid hex color: "+l);3!==n.length&&4!==n.length||(n=Array.prototype.concat.apply([],n.map(function(l){return[l,l]}))),6===n.length&&n.push("F","F");var u=parseInt(n.join(""),16);return{r:u>>24&255,g:u>>16&255,b:u>>8&255,a:255&u,hex:"#"+n.slice(0,6).join("")}}n.getOptions=function(l){l||(l={}),l.color||(l.color={});var n=l.width&&l.width>=21?l.width:void 0;return{width:n,scale:n?4:l.scale||4,margin:null==l.margin||l.margin<0?4:l.margin,color:{dark:u(l.color.dark||"#000000ff"),light:u(l.color.light||"#ffffffff")},type:l.type,rendererOpts:l.rendererOpts||{}}},n.getScale=function(l,n){return n.width&&n.width>=l+2*n.margin?n.width/(l+2*n.margin):n.scale},n.getImageWidth=function(l,u){var e=n.getScale(l,u);return Math.floor((l+2*u.margin)*e)},n.qrToImageData=function(l,u,e){for(var t=u.modules.size,a=u.modules.data,i=n.getScale(t,e),r=Math.floor((t+2*e.margin)*i),o=e.margin*i,s=[e.color.light,e.color.dark],b=0;b<r;b++)for(var c=0;c<r;c++){var d=4*(b*r+c),p=e.color.light;b>=o&&c>=o&&b<r-o&&c<r-o&&(p=s[a[Math.floor((b-o)/i)*t+Math.floor((c-o)/i)]?1:0]),l[d++]=p.r,l[d++]=p.g,l[d++]=p.b,l[d]=p.a}}},V35J:function(l,n,u){var e=u("Wogr");function t(l){if(!l||l<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=l,this.data=new e(l*l),this.data.fill(0),this.reservedBit=new e(l*l),this.reservedBit.fill(0)}t.prototype.set=function(l,n,u,e){var t=l*this.size+n;this.data[t]=u,e&&(this.reservedBit[t]=!0)},t.prototype.get=function(l,n){return this.data[l*this.size+n]},t.prototype.xor=function(l,n,u){this.data[l*this.size+n]^=u},t.prototype.isReserved=function(l,n){return this.reservedBit[l*this.size+n]},l.exports=t},Wogr:function(l,n,u){"use strict";var e=u("49sm"),t=(a.TYPED_ARRAY_SUPPORT=function(){try{var l=new Uint8Array(1);return l.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===l.foo()}catch(n){return!1}}())?2147483647:1073741823;function a(l,n,u){return a.TYPED_ARRAY_SUPPORT||this instanceof a?"number"==typeof l?o(this,l):function(l,n,u,e){if("number"==typeof n)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&n instanceof ArrayBuffer?function(l,n,u,e){if(u<0||n.byteLength<u)throw new RangeError("'offset' is out of bounds");if(n.byteLength<u+(e||0))throw new RangeError("'length' is out of bounds");var t;return t=void 0===u&&void 0===e?new Uint8Array(n):void 0===e?new Uint8Array(n,u):new Uint8Array(n,u,e),a.TYPED_ARRAY_SUPPORT?t.__proto__=a.prototype:t=s(l,t),t}(l,n,u,e):"string"==typeof n?function(l,n){var u=0|c(n),e=r(l,u),t=e.write(n);return t!==u&&(e=e.slice(0,t)),e}(l,n):function(l,n){if(a.isBuffer(n)){var u=0|i(n.length),e=r(l,u);return 0===e.length?e:(n.copy(e,0,0,u),e)}if(n){if("undefined"!=typeof ArrayBuffer&&n.buffer instanceof ArrayBuffer||"length"in n)return"number"!=typeof n.length||(t=n.length)!=t?r(l,0):s(l,n);if("Buffer"===n.type&&Array.isArray(n.data))return s(l,n.data)}var t;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(l,n)}(this,l,n,u):new a(l,n,u)}function i(l){if(l>=t)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+t.toString(16)+" bytes");return 0|l}function r(l,n){var u;return a.TYPED_ARRAY_SUPPORT?(u=new Uint8Array(n)).__proto__=a.prototype:(null===(u=l)&&(u=new a(n)),u.length=n),u}function o(l,n){var u=r(l,n<0?0:0|i(n));if(!a.TYPED_ARRAY_SUPPORT)for(var e=0;e<n;++e)u[e]=0;return u}function s(l,n){for(var u=n.length<0?0:0|i(n.length),e=r(l,u),t=0;t<u;t+=1)e[t]=255&n[t];return e}function b(l,n){var u;n=n||1/0;for(var e=l.length,t=null,a=[],i=0;i<e;++i){if((u=l.charCodeAt(i))>55295&&u<57344){if(!t){if(u>56319){(n-=3)>-1&&a.push(239,191,189);continue}if(i+1===e){(n-=3)>-1&&a.push(239,191,189);continue}t=u;continue}if(u<56320){(n-=3)>-1&&a.push(239,191,189),t=u;continue}u=65536+(t-55296<<10|u-56320)}else t&&(n-=3)>-1&&a.push(239,191,189);if(t=null,u<128){if((n-=1)<0)break;a.push(u)}else if(u<2048){if((n-=2)<0)break;a.push(u>>6|192,63&u|128)}else if(u<65536){if((n-=3)<0)break;a.push(u>>12|224,u>>6&63|128,63&u|128)}else{if(!(u<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;a.push(u>>18|240,u>>12&63|128,u>>6&63|128,63&u|128)}}return a}function c(l){return a.isBuffer(l)?l.length:"undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(l)||l instanceof ArrayBuffer)?l.byteLength:("string"!=typeof l&&(l=""+l),0===l.length?0:b(l).length)}a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1})),a.prototype.write=function(l,n,u){void 0===n?(u=this.length,n=0):void 0===u&&"string"==typeof n?(u=this.length,n=0):isFinite(n)&&(n|=0,isFinite(u)?u|=0:u=void 0);var e=this.length-n;if((void 0===u||u>e)&&(u=e),l.length>0&&(u<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");return function(l,n,u,e){return function(l,n,u,e){for(var t=0;t<e&&!(t+u>=n.length||t>=l.length);++t)n[t+u]=l[t];return t}(b(n,l.length-u),l,u,e)}(this,l,n,u)},a.prototype.slice=function(l,n){var u,e=this.length;if((l=~~l)<0?(l+=e)<0&&(l=0):l>e&&(l=e),(n=void 0===n?e:~~n)<0?(n+=e)<0&&(n=0):n>e&&(n=e),n<l&&(n=l),a.TYPED_ARRAY_SUPPORT)(u=this.subarray(l,n)).__proto__=a.prototype;else{var t=n-l;u=new a(t,void 0);for(var i=0;i<t;++i)u[i]=this[i+l]}return u},a.prototype.copy=function(l,n,u,e){if(u||(u=0),e||0===e||(e=this.length),n>=l.length&&(n=l.length),n||(n=0),e>0&&e<u&&(e=u),e===u)return 0;if(0===l.length||0===this.length)return 0;if(n<0)throw new RangeError("targetStart out of bounds");if(u<0||u>=this.length)throw new RangeError("sourceStart out of bounds");if(e<0)throw new RangeError("sourceEnd out of bounds");e>this.length&&(e=this.length),l.length-n<e-u&&(e=l.length-n+u);var t,i=e-u;if(this===l&&u<n&&n<e)for(t=i-1;t>=0;--t)l[t+n]=this[t+u];else if(i<1e3||!a.TYPED_ARRAY_SUPPORT)for(t=0;t<i;++t)l[t+n]=this[t+u];else Uint8Array.prototype.set.call(l,this.subarray(u,u+i),n);return i},a.prototype.fill=function(l,n,u){if("string"==typeof l){if("string"==typeof n?(n=0,u=this.length):"string"==typeof u&&(u=this.length),1===l.length){var e=l.charCodeAt(0);e<256&&(l=e)}}else"number"==typeof l&&(l&=255);if(n<0||this.length<n||this.length<u)throw new RangeError("Out of range index");if(u<=n)return this;var t;if(n>>>=0,u=void 0===u?this.length:u>>>0,l||(l=0),"number"==typeof l)for(t=n;t<u;++t)this[t]=l;else{var i=a.isBuffer(l)?l:new a(l),r=i.length;for(t=0;t<u-n;++t)this[t+n]=i[t%r]}return this},a.concat=function(l,n){if(!e(l))throw new TypeError('"list" argument must be an Array of Buffers');if(0===l.length)return r(null,0);var u;if(void 0===n)for(n=0,u=0;u<l.length;++u)n+=l[u].length;var t=o(null,n),i=0;for(u=0;u<l.length;++u){var s=l[u];if(!a.isBuffer(s))throw new TypeError('"list" argument must be an Array of Buffers');s.copy(t,i),i+=s.length}return t},a.byteLength=c,a.prototype._isBuffer=!0,a.isBuffer=function(l){return!(null==l||!l._isBuffer)},l.exports=a},aZ40:function(l,n,u){var e=u("Wogr"),t=new e(512),a=new e(256);!function(){for(var l=1,n=0;n<255;n++)t[n]=l,a[l]=n,256&(l<<=1)&&(l^=285);for(n=255;n<512;n++)t[n]=t[n-255]}(),n.log=function(l){if(l<1)throw new Error("log("+l+")");return a[l]},n.exp=function(l){return t[l]},n.mul=function(l,n){return 0===l||0===n?0:t[a[l]+a[n]]}},"e/Dd":function(l,n){var u,e=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];n.getSymbolSize=function(l){if(!l)throw new Error('"version" cannot be null or undefined');if(l<1||l>40)throw new Error('"version" should be in range from 1 to 40');return 4*l+17},n.getSymbolTotalCodewords=function(l){return e[l]},n.getBCHDigit=function(l){for(var n=0;0!==l;)n++,l>>>=1;return n},n.setToSJISFunction=function(l){if("function"!=typeof l)throw new Error('"toSJISFunc" is not a valid function.');u=l},n.isKanjiModeEnabled=function(){return void 0!==u},n.toSJIS=function(l){return u(l)}},e6BP:function(l,n){function u(){this.buffer=[],this.length=0}u.prototype={get:function(l){var n=Math.floor(l/8);return 1==(this.buffer[n]>>>7-l%8&1)},put:function(l,n){for(var u=0;u<n;u++)this.putBit(1==(l>>>n-u-1&1))},getLengthInBits:function(){return this.length},putBit:function(l){var n=Math.floor(this.length/8);this.buffer.length<=n&&this.buffer.push(0),l&&(this.buffer[n]|=128>>>this.length%8),this.length++}},l.exports=u},eQOe:function(l,n){function u(l,u,e){switch(l){case n.Patterns.PATTERN000:return(u+e)%2==0;case n.Patterns.PATTERN001:return u%2==0;case n.Patterns.PATTERN010:return e%3==0;case n.Patterns.PATTERN011:return(u+e)%3==0;case n.Patterns.PATTERN100:return(Math.floor(u/2)+Math.floor(e/3))%2==0;case n.Patterns.PATTERN101:return u*e%2+u*e%3==0;case n.Patterns.PATTERN110:return(u*e%2+u*e%3)%2==0;case n.Patterns.PATTERN111:return(u*e%3+(u+e)%2)%2==0;default:throw new Error("bad maskPattern:"+l)}}n.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},n.isValid=function(l){return null!=l&&""!==l&&!isNaN(l)&&l>=0&&l<=7},n.from=function(l){return n.isValid(l)?parseInt(l,10):void 0},n.getPenaltyN1=function(l){for(var n=l.size,u=0,e=0,t=0,a=null,i=null,r=0;r<n;r++){e=t=0,a=i=null;for(var o=0;o<n;o++){var s=l.get(r,o);s===a?e++:(e>=5&&(u+=e-5+3),a=s,e=1),(s=l.get(o,r))===i?t++:(t>=5&&(u+=t-5+3),i=s,t=1)}e>=5&&(u+=e-5+3),t>=5&&(u+=t-5+3)}return u},n.getPenaltyN2=function(l){for(var n=l.size,u=0,e=0;e<n-1;e++)for(var t=0;t<n-1;t++){var a=l.get(e,t)+l.get(e,t+1)+l.get(e+1,t)+l.get(e+1,t+1);4!==a&&0!==a||u++}return 3*u},n.getPenaltyN3=function(l){for(var n=l.size,u=0,e=0,t=0,a=0;a<n;a++){e=t=0;for(var i=0;i<n;i++)e=e<<1&2047|l.get(a,i),i>=10&&(1488===e||93===e)&&u++,t=t<<1&2047|l.get(i,a),i>=10&&(1488===t||93===t)&&u++}return 40*u},n.getPenaltyN4=function(l){for(var n=0,u=l.data.length,e=0;e<u;e++)n+=l.data[e];return 10*Math.abs(Math.ceil(100*n/u/5)-10)},n.applyMask=function(l,n){for(var e=n.size,t=0;t<e;t++)for(var a=0;a<e;a++)n.isReserved(a,t)||n.xor(a,t,u(l,a,t))},n.getBestMask=function(l,u){for(var e=Object.keys(n.Patterns).length,t=0,a=1/0,i=0;i<e;i++){u(i),n.applyMask(i,l);var r=n.getPenaltyN1(l)+n.getPenaltyN2(l)+n.getPenaltyN3(l)+n.getPenaltyN4(l);n.applyMask(i,l),r<a&&(a=r,t=i)}return t}},ekOh:function(l,n){n.L={bit:1},n.M={bit:0},n.Q={bit:3},n.H={bit:2},n.isValid=function(l){return l&&void 0!==l.bit&&l.bit>=0&&l.bit<4},n.from=function(l,u){if(n.isValid(l))return l;try{return function(l){if("string"!=typeof l)throw new Error("Param is not a string");switch(l.toLowerCase()){case"l":case"low":return n.L;case"m":case"medium":return n.M;case"q":case"quartile":return n.Q;case"h":case"high":return n.H;default:throw new Error("Unknown EC Level: "+l)}}(l)}catch(e){return u}}},jSPq:function(l,n,u){var e=u("Wogr"),t=u("JzKC");function a(l){this.genPoly=void 0,this.degree=l,this.degree&&this.initialize(this.degree)}a.prototype.initialize=function(l){this.degree=l,this.genPoly=t.generateECPolynomial(this.degree)},a.prototype.encode=function(l){if(!this.genPoly)throw new Error("Encoder not initialized");var n=new e(this.degree);n.fill(0);var u=e.concat([l,n],l.length+this.degree),a=t.mod(u,this.genPoly),i=this.degree-a.length;if(i>0){var r=new e(this.degree);return r.fill(0),a.copy(r,i),r}return a},l.exports=a},"kk9/":function(l,n,u){var e=u("e/Dd").getSymbolSize;n.getPositions=function(l){var n=e(l);return[[0,0],[n-7,0],[0,n-7]]}},lYJp:function(l,n,u){var e=u("e/Dd"),t=e.getBCHDigit(1335);n.getEncodedBits=function(l,n){for(var u=l.bit<<3|n,a=u<<10;e.getBCHDigit(a)-t>=0;)a^=1335<<e.getBCHDigit(a)-t;return 21522^(u<<10|a)}},nZSm:function(l,n,u){var e=u("u/Db"),t=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function a(l){this.mode=e.ALPHANUMERIC,this.data=l}a.getBitsLength=function(l){return 11*Math.floor(l/2)+l%2*6},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(l){var n;for(n=0;n+2<=this.data.length;n+=2){var u=45*t.indexOf(this.data[n]);u+=t.indexOf(this.data[n+1]),l.put(u,11)}this.data.length%2&&l.put(t.indexOf(this.data[n]),6)},l.exports=a},qmMu:function(l,n,u){var e=u("Wogr"),t=u("e/Dd"),a=u("ekOh"),i=u("e6BP"),r=u("V35J"),o=u("1sBl"),s=u("kk9/"),b=u("eQOe"),c=u("NPxG"),d=u("jSPq"),p=u("yKow"),g=u("lYJp"),h=u("u/Db"),f=u("vvrf"),m=u("49sm");function v(l,n,u){var e,t,a=l.size,i=g.getEncodedBits(n,u);for(e=0;e<15;e++)l.set(e<6?e:e<8?e+1:a-15+e,8,t=1==(i>>e&1),!0),l.set(8,e<8?a-e-1:e<9?15-e-1+1:15-e-1,t,!0);l.set(a-8,8,1,!0)}n.create=function(l,n){if(void 0===l||""===l)throw new Error("No input text");var u,g,C=a.M;return void 0!==n&&(C=a.from(n.errorCorrectionLevel,a.M),u=p.from(n.version),g=b.from(n.maskPattern),n.toSJISFunc&&t.setToSJISFunction(n.toSJISFunc)),function(l,n,u,a){var g;if(m(l))g=f.fromArray(l);else{if("string"!=typeof l)throw new Error("Invalid data");var C=n;if(!C){var A=f.rawSplit(l);C=p.getBestVersionForData(A,u)}g=f.fromString(l,C||40)}var k=p.getBestVersionForData(g,u);if(!k)throw new Error("The amount of data is too big to be stored in a QR Code");if(n){if(n<k)throw new Error("\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: "+k+".\n")}else n=k;var y=function(l,n,u){var a=new i;u.forEach(function(n){a.put(n.mode.bit,4),a.put(n.getLength(),h.getCharCountIndicator(n.mode,l)),n.write(a)});var r=8*(t.getSymbolTotalCodewords(l)-c.getTotalCodewordsCount(l,n));for(a.getLengthInBits()+4<=r&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);for(var o=(r-a.getLengthInBits())/8,s=0;s<o;s++)a.put(s%2?17:236,8);return function(l,n,u){for(var a=t.getSymbolTotalCodewords(n),i=a-c.getTotalCodewordsCount(n,u),r=c.getBlocksCount(n,u),o=r-a%r,s=Math.floor(a/r),b=Math.floor(i/r),p=b+1,g=s-b,h=new d(g),f=0,m=new Array(r),v=new Array(r),C=0,A=new e(l.buffer),k=0;k<r;k++){var y=k<o?b:p;m[k]=A.slice(f,f+y),v[k]=h.encode(m[k]),f+=y,C=Math.max(C,y)}var q,I,x=new e(a),w=0;for(q=0;q<C;q++)for(I=0;I<r;I++)q<m[I].length&&(x[w++]=m[I][q]);for(q=0;q<g;q++)for(I=0;I<r;I++)x[w++]=v[I][q];return x}(a,l,n)}(n,u,g),q=t.getSymbolSize(n),I=new r(q);return function(l,n){for(var u=l.size,e=s.getPositions(n),t=0;t<e.length;t++)for(var a=e[t][0],i=e[t][1],r=-1;r<=7;r++)if(!(a+r<=-1||u<=a+r))for(var o=-1;o<=7;o++)i+o<=-1||u<=i+o||l.set(a+r,i+o,r>=0&&r<=6&&(0===o||6===o)||o>=0&&o<=6&&(0===r||6===r)||r>=2&&r<=4&&o>=2&&o<=4,!0)}(I,n),function(l){for(var n=l.size,u=8;u<n-8;u++){var e=u%2==0;l.set(u,6,e,!0),l.set(6,u,e,!0)}}(I),function(l,n){for(var u=o.getPositions(n),e=0;e<u.length;e++)for(var t=u[e][0],a=u[e][1],i=-2;i<=2;i++)for(var r=-2;r<=2;r++)l.set(t+i,a+r,-2===i||2===i||-2===r||2===r||0===i&&0===r,!0)}(I,n),v(I,u,0),n>=7&&function(l,n){for(var u,e,t,a=l.size,i=p.getEncodedBits(n),r=0;r<18;r++)u=Math.floor(r/3),l.set(u,e=r%3+a-8-3,t=1==(i>>r&1),!0),l.set(e,u,t,!0)}(I,n),function(l,n){for(var u=l.size,e=-1,t=u-1,a=7,i=0,r=u-1;r>0;r-=2)for(6===r&&r--;;){for(var o=0;o<2;o++)if(!l.isReserved(t,r-o)){var s=!1;i<n.length&&(s=1==(n[i]>>>a&1)),l.set(t,r-o,s),-1==--a&&(i++,a=7)}if((t+=e)<0||u<=t){t-=e,e=-e;break}}}(I,y),isNaN(a)&&(a=b.getBestMask(I,v.bind(null,I,u))),b.applyMask(a,I),v(I,u,a),{modules:I,version:n,errorCorrectionLevel:u,maskPattern:a,segments:g}}(l,u,C,g)}},"u/Db":function(l,n,u){var e=u("J6Nv"),t=u("BCVQ");n.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},n.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},n.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},n.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},n.MIXED={bit:-1},n.getCharCountIndicator=function(l,n){if(!l.ccBits)throw new Error("Invalid mode: "+l);if(!e.isValid(n))throw new Error("Invalid version: "+n);return n>=1&&n<10?l.ccBits[0]:n<27?l.ccBits[1]:l.ccBits[2]},n.getBestModeForData=function(l){return t.testNumeric(l)?n.NUMERIC:t.testAlphanumeric(l)?n.ALPHANUMERIC:t.testKanji(l)?n.KANJI:n.BYTE},n.toString=function(l){if(l&&l.id)return l.id;throw new Error("Invalid mode")},n.isValid=function(l){return l&&l.bit&&l.ccBits},n.from=function(l,u){if(n.isValid(l))return l;try{return function(l){if("string"!=typeof l)throw new Error("Param is not a string");switch(l.toLowerCase()){case"numeric":return n.NUMERIC;case"alphanumeric":return n.ALPHANUMERIC;case"kanji":return n.KANJI;case"byte":return n.BYTE;default:throw new Error("Unknown mode: "+l)}}(l)}catch(e){return u}}},vvrf:function(l,n,u){var e=u("u/Db"),t=u("3X7Y"),a=u("nZSm"),i=u("AZa5"),r=u("Lzq4"),o=u("BCVQ"),s=u("e/Dd"),b=u("ELBg");function c(l){return unescape(encodeURIComponent(l)).length}function d(l,n,u){for(var e,t=[];null!==(e=l.exec(u));)t.push({data:e[0],index:e.index,mode:n,length:e[0].length});return t}function p(l){var n,u,t=d(o.NUMERIC,e.NUMERIC,l),a=d(o.ALPHANUMERIC,e.ALPHANUMERIC,l);return s.isKanjiModeEnabled()?(n=d(o.BYTE,e.BYTE,l),u=d(o.KANJI,e.KANJI,l)):(n=d(o.BYTE_KANJI,e.BYTE,l),u=[]),t.concat(a,n,u).sort(function(l,n){return l.index-n.index}).map(function(l){return{data:l.data,mode:l.mode,length:l.length}})}function g(l,n){switch(n){case e.NUMERIC:return t.getBitsLength(l);case e.ALPHANUMERIC:return a.getBitsLength(l);case e.KANJI:return r.getBitsLength(l);case e.BYTE:return i.getBitsLength(l)}}function h(l,n){var u,o=e.getBestModeForData(l);if((u=e.from(n,o))!==e.BYTE&&u.bit<o.bit)throw new Error('"'+l+'" cannot be encoded with mode '+e.toString(u)+".\n Suggested mode is: "+e.toString(o));switch(u!==e.KANJI||s.isKanjiModeEnabled()||(u=e.BYTE),u){case e.NUMERIC:return new t(l);case e.ALPHANUMERIC:return new a(l);case e.KANJI:return new r(l);case e.BYTE:return new i(l)}}n.fromArray=function(l){return l.reduce(function(l,n){return"string"==typeof n?l.push(h(n,null)):n.data&&l.push(h(n.data,n.mode)),l},[])},n.fromString=function(l,u){for(var t=function(l,n){for(var u={},t={start:{}},a=["start"],i=0;i<l.length;i++){for(var r=l[i],o=[],s=0;s<r.length;s++){var b=r[s],c=""+i+s;o.push(c),u[c]={node:b,lastCount:0},t[c]={};for(var d=0;d<a.length;d++){var p=a[d];u[p]&&u[p].node.mode===b.mode?(t[p][c]=g(u[p].lastCount+b.length,b.mode)-g(u[p].lastCount,b.mode),u[p].lastCount+=b.length):(u[p]&&(u[p].lastCount=b.length),t[p][c]=g(b.length,b.mode)+4+e.getCharCountIndicator(b.mode,n))}}a=o}for(d=0;d<a.length;d++)t[a[d]].end=0;return{map:t,table:u}}(function(l){for(var n=[],u=0;u<l.length;u++){var t=l[u];switch(t.mode){case e.NUMERIC:n.push([t,{data:t.data,mode:e.ALPHANUMERIC,length:t.length},{data:t.data,mode:e.BYTE,length:t.length}]);break;case e.ALPHANUMERIC:n.push([t,{data:t.data,mode:e.BYTE,length:t.length}]);break;case e.KANJI:n.push([t,{data:t.data,mode:e.BYTE,length:c(t.data)}]);break;case e.BYTE:n.push([{data:t.data,mode:e.BYTE,length:c(t.data)}])}}return n}(p(l,s.isKanjiModeEnabled())),u),a=b.find_path(t.map,"start","end"),i=[],r=1;r<a.length-1;r++)i.push(t.table[a[r]].node);return n.fromArray(i.reduce(function(l,n){var u=l.length-1>=0?l[l.length-1]:null;return u&&u.mode===n.mode?(l[l.length-1].data+=n.data,l):(l.push(n),l)},[]))},n.rawSplit=function(l){return n.fromArray(p(l,s.isKanjiModeEnabled()))}},yKow:function(l,n,u){var e=u("e/Dd"),t=u("NPxG"),a=u("ekOh"),i=u("u/Db"),r=u("J6Nv"),o=u("49sm"),s=e.getBCHDigit(7973);function b(l,n){return i.getCharCountIndicator(l,n)+4}function c(l,n){var u=0;return l.forEach(function(l){var e=b(l.mode,n);u+=e+l.getBitsLength()}),u}n.from=function(l,n){return r.isValid(l)?parseInt(l,10):n},n.getCapacity=function(l,n,u){if(!r.isValid(l))throw new Error("Invalid QR Code version");void 0===u&&(u=i.BYTE);var a=8*(e.getSymbolTotalCodewords(l)-t.getTotalCodewordsCount(l,n));if(u===i.MIXED)return a;var o=a-b(u,l);switch(u){case i.NUMERIC:return Math.floor(o/10*3);case i.ALPHANUMERIC:return Math.floor(o/11*2);case i.KANJI:return Math.floor(o/13);case i.BYTE:default:return Math.floor(o/8)}},n.getBestVersionForData=function(l,u){var e,t=a.from(u,a.M);if(o(l)){if(l.length>1)return function(l,u){for(var e=1;e<=40;e++)if(c(l,e)<=n.getCapacity(e,u,i.MIXED))return e}(l,t);if(0===l.length)return 1;e=l[0]}else e=l;return function(l,u,e){for(var t=1;t<=40;t++)if(u<=n.getCapacity(t,e,l))return t}(e.mode,e.getLength(),t)},n.getEncodedBits=function(l){if(!r.isValid(l)||l<7)throw new Error("Invalid QR Code version");for(var n=l<<12;e.getBCHDigit(n)-s>=0;)n^=7973<<e.getBCHDigit(n)-s;return l<<12|n}}}]);
\ No newline at end of file
diff --git a/www/8.7b17af014a628b3d9ae1.js b/www/8.7b17af014a628b3d9ae1.js
new file mode 100644
index 0000000..6340c37
--- /dev/null
+++ b/www/8.7b17af014a628b3d9ae1.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{"5SxG":function(l,n,u){"use strict";u.d(n,"a",function(){return a});var t=u("CcnG"),e=u("+3se"),a=function(){function l(){this.floatBtnClick=new t.m,this.floatBtn={className:"",icon:"",type:"",id:""}}return l.prototype.customFn=function(){this.floatBtnClick.emit()},l.prototype.ngOnInit=function(){"cancel"==this.floatBtnType?(this.floatBtn.className="delos-float-cancel",this.floatBtn.icon="remove",this.floatBtn.type="button"):(this.floatBtn.className="delos-float-save",this.floatBtn.icon="floppy-disk",this.floatBtn.type="submit"),this.floatBtn.id=this.floatBtn.type+e.a.newGuid()},l}()},"6dTq":function(l,n,u){"use strict";u.d(n,"a",function(){return e}),u("chmc");var t=u("yZXx"),e=function(){function l(l){Object.assign(this,l)}return Object.defineProperty(l.prototype,"isBs3",{get:function(){return Object(t.a)()},enumerable:!0,configurable:!0}),l}()},"8b39":function(l,n,u){"use strict";u.d(n,"a",function(){return a});var t=u("chmc"),e=(u("FfxL"),u("6dTq")),a=function(){function l(l,n,u,e,a){this.outsideClick=!1,this.containerClass="",this._isInited=!1,this._popover=a.createLoader(l,u,n).provide({provide:t.a,useValue:e}),Object.assign(this,e),this.onShown=this._popover.onShown,this.onHidden=this._popover.onHidden,"undefined"!=typeof window&&l.nativeElement.addEventListener("click",function(){try{l.nativeElement.focus()}catch(n){return}})}return Object.defineProperty(l.prototype,"isOpen",{get:function(){return this._popover.isShown},set:function(l){l?this.show():this.hide()},enumerable:!0,configurable:!0}),l.prototype.show=function(){!this._popover.isShown&&this.popover&&(this._popover.attach(e.a).to(this.container).position({attachment:this.placement}).show({content:this.popover,context:this.popoverContext,placement:this.placement,title:this.popoverTitle,containerClass:this.containerClass}),this.isOpen=!0)},l.prototype.hide=function(){this.isOpen&&(this._popover.hide(),this.isOpen=!1)},l.prototype.toggle=function(){if(this.isOpen)return this.hide();this.show()},l.prototype.ngOnInit=function(){var l=this;this._isInited||(this._isInited=!0,this._popover.listen({triggers:this.triggers,outsideClick:this.outsideClick,show:function(){return l.show()}}))},l.prototype.ngOnDestroy=function(){this._popover.dispose()},l}()},AW84:function(l,n,u){"use strict";u.d(n,"a",function(){return s});var t=u("FfxL"),e=u("XD9u"),a=u("chmc"),s=(u("8b39"),u("6dTq"),function(){function l(){}return l.forRoot=function(){return{ngModule:l,providers:[a.a,t.a,e.a]}},l}())},Eidh:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){function l(){this.shouldShowForRetail=!1}return l.prototype.ngOnInit=function(){},l}()},"Hiu+":function(l,n,u){"use strict";u.r(n);var t=u("CcnG"),e=function(){return function(){}}(),a=u("ueff"),s=u("lOTE"),i=u("KXou"),o=u("mGS5"),r=u("pMnS"),b=u("A7o+"),c=u("Ip0R"),d=u("K9Ia"),p=u("ny24"),g=u("jGGy"),m=u("+NEN"),f=u("Vx+w"),h=function(){function l(l,n){this.ubusService=l,this.authService=n}return l.prototype.getSysInfo=function(){return this.ubusService.call({data:[[this.authService.getSid(),"system.management","version",{}],[this.authService.getSid(),"system","info",{}],[this.authService.getSid(),"uci","get",{config:"system",section:"@system[0]"}],[this.authService.getSid(),"system.date","get",{}],[this.authService.getSid(),"uci","get",{config:"system",section:"ntp"}],[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"SerialNumber"}]]})},l.prototype.getSystemStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"system","info",{}]})},l.prototype.listServices=function(){return this.ubusService.call({data:[this.authService.getSid(),"system.init","list",{}]})},l.prototype.getServiceUrl=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"easycwmp",section:"@acs[0]",option:"url"}]})},l.prototype.getMacAddresses=function(l){var n=[[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"MacAddress0"}]];return l>1&&n.push([this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"MacAddress1"}]),this.ubusService.call({data:n})},l.prototype.getButtons=function(){var l=[[this.authService.getSid(),"uci","get",{config:"system",type:"led"}],[this.authService.getSid(),"uci","get",{config:"system",type:"button"}]];return f.a.plc&&l.push([this.authService.getSid(),"uci","get",{config:"plc",section:"plc",option:"led_scheme"}]),this.ubusService.call({data:l})},l}(),v=function(){function l(l){this.statusService=l,this.ngUnsubscribe=new d.a,this.enableService=!1,this.updatingServiceInfoDisplay=!1,this.services=[]}return l.prototype.ngOnInit=function(){this.displayServiceInfo()},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.displayServiceInfo=function(){var l=this;this.updatingServiceInfoDisplay||(this.updatingServiceInfoDisplay=!0,this.statusService.listServices().pipe(Object(p.a)(this.ngUnsubscribe)).subscribe(function(n){n.result[1].initscripts.forEach(function(n){if("easycwmpd"==n.name)if(n.enabled){var u={disabled:!n.enabled,label:n.name,url:null};l.statusService.getServiceUrl().subscribe(function(n){u.url=n.result[1].value,l.enableService=!0,l.services.push(u)})}else l.enableService=!1})}),this.updatingServiceInfoDisplay=!1)},l}(),C=t.ob({encapsulation:2,styles:[],data:{}});function A(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-danger"],["translate",""]],[[8,"id",0]],null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Disabled"]))],function(l,n){l(n,1,0,"")},function(l,n){l(n,0,0,t.sb(1,"service-disabled-",n.parent.context.index,""))})}function y(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"span",[["class","text-success"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(1,null,[" "," "])),t.Db(2,{url:0}),t.Cb(131072,b.i,[b.j,t.h])],null,function(l,n){l(n,0,0,t.sb(1,"service-enabled-",n.parent.context.index,""));var u=t.Jb(n,1,0,t.Ab(n,3).transform("Enabled ({url})",l(n,2,0,n.parent.context.$implicit.url)));l(n,1,0,u)})}function q(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"dt",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(2,null,["",":"])),(l()(),t.qb(3,0,null,null,4,"dd",[["ng-model","service.disabled"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,A)),t.pb(5,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,y)),t.pb(7,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,5,0,"1"==n.context.$implicit.disabled),l(n,7,0,"0"==n.context.$implicit.disabled)},function(l,n){l(n,1,0,t.sb(1,"service-label-",n.context.index,"")),l(n,2,0,n.context.$implicit.label)})}function I(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[["class","row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Services"])),(l()(),t.qb(4,0,null,null,2,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,q)),t.pb(6,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,u.services)},null)}function k(l){return t.Kb(0,[(l()(),t.hb(16777216,null,null,1,null,I)),t.pb(1,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,1,0,n.component.enableService)},null)}var w=u("xR9I"),P=u("Sxbm"),x=u("ilcq"),S=u("gI3B"),j=u("CPDd"),M=u("t2rx"),F=u("iIpO"),E=function(){function l(l,n,u,t){this.statusService=l,this.formatTimeService=n,this.addressCheckService=u,this.pageLoadingService=t,this.statusInfo={sysName:null,sysLocation:null,sysContact:null,remoteSysLog:null,sysLogIpPort:null},this.updatingSysInfoDisplay=!1,this.ngUnsubscribe=new d.a,this.Config=f.a,this.refresh=1e3,this.updatingSysInfo=!1,this.pageLoadingService.register(["updateSysInfo","displayStatusInfo"])}return l.prototype.ngOnInit=function(){var l=this;this.displayStatusInfo(),Object(S.a)(0,this.refresh).pipe(Object(p.a)(this.ngUnsubscribe)).subscribe(function(){l.updateSysInfo()})},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.displayStatusInfo=function(){var l=this;this.updatingSysInfoDisplay||(this.updatingSysInfoDisplay=!0,this.statusService.getSysInfo().pipe(Object(p.a)(this.ngUnsubscribe)).subscribe(function(n){l.pageLoadingService.ready("displayStatusInfo");var u=n.result[2][1].values,t=u.log_ip||"",e=u.log_port||"";l.statusInfo.sysName=u.hostname,l.statusInfo.sysLocation=u.location||"",l.statusInfo.sysContact=u.contact||"",l.statusInfo.remoteSysLog=u.log_remote||"0",l.statusInfo.sysLogIpPort=t+":"+e,l.timeZone=u.zonename||"UTC";var a=n.result[3][1].value.split("-");l.localtime=new Date(a[0],a[1]-1,a[2],a[3],a[4],a[5]),l.statusInfoTotalMemory=(n.result[1][1].memory.total/1048576).toFixed(2),l.statusInfoFreeMemory=(n.result[1][1].memory.free/1048576).toFixed(2);var s=n.result[1][1].load;l.loadOneMin=(s[0]/65535).toFixed(2),l.loadFiveMin=(s[1]/65535).toFixed(2),l.loadFifteenMin=(s[2]/65535).toFixed(2),l.servers=(n.result[4][1].values.server||[]).map(l.addressCheckService.toUnicode),l.serialNumber=n.result[5][1].value,l.updatingSysInfoDisplay=!1},function(n){console.log(n),l.pageLoadingService.ready("displayStatusInfo")}))},l.prototype.updateSysInfo=function(){var l=this;if(++this.uptime,this.formatTimeService.toDays(this.uptime).subscribe(function(n){l.statusInfoUptime=n,l.pageLoadingService.ready("updateSysInfo")}),this.refresh-=1e3,this.refresh<=0){if(this.updatingSysInfo)return;this.updatingSysInfo=!0,this.refresh=f.a.system.status.sysinfo.refresh,this.statusService.getSystemStatus().pipe(Object(p.a)(this.ngUnsubscribe)).subscribe(function(n){l.uptime=n.result[1].uptime,l.updatingSysInfo=!1,l.displayStatusInfo()})}},l}(),T=t.ob({encapsulation:2,styles:[],data:{}});function D(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Location:"]))],function(l,n){l(n,1,0,"")},null)}function K(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","syslocation"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.statusInfo.sysLocation)})}function O(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Contact:"]))],function(l,n){l(n,1,0,"")},null)}function B(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","syscontact"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.statusInfo.sysContact)})}function V(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Remote syslog server:"]))],function(l,n){l(n,1,0,"")},null)}function _(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[["id","remote-syslog"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.statusInfo.sysLogIpPort)})}function U(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,75,"div",[["class","row"],["id","status-information"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Information"])),(l()(),t.qb(4,0,null,null,71,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Name:"])),(l()(),t.qb(8,0,null,null,1,"dd",[["id","sysname"]],null,null,null,null,null)),(l()(),t.Ib(9,null,["",""])),(l()(),t.hb(16777216,null,null,1,null,D)),t.pb(11,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,K)),t.pb(13,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,O)),t.pb(15,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,B)),t.pb(17,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(18,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(19,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Serial number:"])),(l()(),t.qb(21,0,null,null,1,"dd",[["id","snumber"]],null,null,null,null,null)),(l()(),t.Ib(22,null,["",""])),(l()(),t.qb(23,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(24,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Firmware version:"])),(l()(),t.qb(26,0,null,null,1,"dd",[["id","firmware"]],null,null,null,null,null)),(l()(),t.Ib(27,null,[" "," (",") "])),(l()(),t.qb(28,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(29,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Uptime:"])),(l()(),t.qb(31,0,null,null,1,"dd",[["id","uptime"]],null,null,null,null,null)),(l()(),t.Ib(32,null,[" "," "])),(l()(),t.qb(33,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(34,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Total memory:"])),(l()(),t.qb(36,0,null,null,6,"dd",[["id","memory"]],null,null,null,null,null)),(l()(),t.qb(37,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t.Ib(38,null,[""," "])),t.Eb(39,1),(l()(),t.qb(40,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(41,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MBytes"])),(l()(),t.qb(43,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(44,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Free memory:"])),(l()(),t.qb(46,0,null,null,6,"dd",[["id","free-memory"]],null,null,null,null,null)),(l()(),t.qb(47,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t.Ib(48,null,[""," "])),t.Eb(49,1),(l()(),t.qb(50,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(51,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MBytes"])),(l()(),t.qb(53,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(54,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["CPU load:"])),(l()(),t.qb(56,0,null,null,15,"dd",[],null,null,null,null,null)),(l()(),t.qb(57,0,null,null,4,"span",[["id","load-1-min"]],null,null,null,null,null)),t.pb(58,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(59,{"text-success":0,"text-warning":1,"text-danger":2}),(l()(),t.Ib(60,null,[""," / "])),t.Eb(61,1),(l()(),t.qb(62,0,null,null,4,"span",[["id","load-5-min"]],null,null,null,null,null)),t.pb(63,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(64,{"text-success":0,"text-warning":1,"text-danger":2}),(l()(),t.Ib(65,null,[""," / "])),t.Eb(66,1),(l()(),t.qb(67,0,null,null,4,"span",[["id","load-15-min"]],null,null,null,null,null)),t.pb(68,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(69,{"text-success":0,"text-warning":1,"text-danger":2}),(l()(),t.Ib(70,null,["",""])),t.Eb(71,1),(l()(),t.hb(16777216,null,null,1,null,V)),t.pb(73,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,_)),t.pb(75,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,""),l(n,11,0,u.statusInfo.sysLocation),l(n,13,0,u.statusInfo.sysLocation),l(n,15,0,u.statusInfo.sysContact),l(n,17,0,u.statusInfo.sysContact),l(n,19,0,""),l(n,24,0,""),l(n,29,0,""),l(n,34,0,""),l(n,41,0,""),l(n,44,0,""),l(n,51,0,""),l(n,54,0,"");var t=l(n,59,0,u.loadOneMin<=.7,u.loadOneMin<=1&&u.loadOneMin>.7,u.loadOneMin>=1&&u.loadOneMin>1);l(n,58,0,t);var e=l(n,64,0,u.loadFiveMin<=.7,u.loadFiveMin<=1&&u.loadFiveMin>.7,u.loadFiveMin>=1&&u.loadFiveMin>1);l(n,63,0,e);var a=l(n,69,0,u.loadFifteenMin<=.7,u.loadFifteenMin<=1&&u.loadFifteenMin>.7,u.loadFiveMin>=1&&u.loadFiveMin>1);l(n,68,0,a),l(n,73,0,"1"==u.statusInfo.remoteSysLog),l(n,75,0,"1"==u.statusInfo.remoteSysLog)},function(l,n){var u=n.component;l(n,9,0,u.statusInfo.sysName),l(n,22,0,u.serialNumber),l(n,27,0,u.Config.firmwareVersion,u.Config.firmwareBuildDate),l(n,32,0,u.statusInfoUptime);var e=t.Jb(n,38,0,l(n,39,0,t.Ab(n.parent,0),u.statusInfoTotalMemory));l(n,38,0,e);var a=t.Jb(n,48,0,l(n,49,0,t.Ab(n.parent,0),u.statusInfoFreeMemory));l(n,48,0,a);var s=t.Jb(n,60,0,l(n,61,0,t.Ab(n.parent,0),u.loadOneMin));l(n,60,0,s);var i=t.Jb(n,65,0,l(n,66,0,t.Ab(n.parent,0),u.loadFiveMin));l(n,65,0,i);var o=t.Jb(n,70,0,l(n,71,0,t.Ab(n.parent,0),u.loadFifteenMin));l(n,70,0,o)})}function $(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time Server"]))],function(l,n){l(n,1,0,"")},null)}function N(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Date and Time"]))],function(l,n){l(n,1,0,"")},null)}function R(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time Server:"]))],function(l,n){l(n,1,0,"")},null)}function z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"dd",[["class","hint-text"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["There are no configured time servers."]))],function(l,n){l(n,1,0,"")},null)}function L(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"dt",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time server"])),(l()(),t.Ib(4,null,[" ",":"]))],function(l,n){l(n,2,0,"")},function(l,n){l(n,4,0,n.parent.context.index+1)})}function J(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,0,0,t.sb(1,"time-server-",n.parent.context.index,"")),l(n,1,0,n.parent.context.$implicit)})}function G(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,L)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,J)),t.pb(4,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.servers.length),l(n,4,0,u.servers.length)},null)}function W(l){return t.Kb(0,[t.Cb(0,c.f,[t.u]),t.Cb(0,c.e,[t.u]),(l()(),t.hb(16777216,null,null,1,null,U)),t.pb(3,212992,null,0,w.a,[t.M,t.P,P.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(4,0,null,null,23,"div",[["class","row"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,$)),t.pb(6,212992,null,0,w.a,[t.M,t.P,P.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,N)),t.pb(8,212992,null,0,x.a,[t.M,t.P,P.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(9,0,null,null,18,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Local time:"])),(l()(),t.qb(13,0,null,null,2,"dd",[["id","localtime"]],null,null,null,null,null)),(l()(),t.Ib(14,null,[" "," "])),t.Eb(15,2),(l()(),t.qb(16,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(17,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time zone:"])),(l()(),t.qb(19,0,null,null,2,"dd",[["id","timezone"]],null,null,null,null,null)),(l()(),t.Ib(20,null,[" "," "])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.hb(16777216,null,null,1,null,R)),t.pb(23,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,z)),t.pb(25,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,G)),t.pb(27,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,3,0,null),l(n,6,0,null),l(n,8,0,null),l(n,11,0,""),l(n,17,0,""),l(n,23,0,u.servers&&!u.servers.length),l(n,25,0,u.servers&&!u.servers.length),l(n,27,0,u.servers)},function(l,n){var u=n.component,e=t.Jb(n,14,0,l(n,15,0,t.Ab(n,1),u.localtime,"dd.MM.yyyy HH:mm"));l(n,14,0,e),l(n,20,0,t.Jb(n,20,0,t.Ab(n,21).transform(u.timeZone)))})}var H=function(){function l(l){this.statusService=l,this.ngUnsubscribe=new d.a,this.updatingMACAddress=!1,this.interfaces=[]}return l.prototype.ngOnInit=function(){var l=this;Object(S.a)(0,6e4).pipe(Object(p.a)(this.ngUnsubscribe)).subscribe(function(){l.getMACAddress()})},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.getMACAddress=function(){var l=this;if(!this.updatingMACAddress){this.updatingMACAddress=!0;var n=f.a.network.interfaces;this.numberOfInterfaces=Object.keys(n).length,this.statusService.getMacAddresses(this.numberOfInterfaces).pipe(Object(p.a)(this.ngUnsubscribe)).subscribe(function(u){l.interfaces=Object.values(n);for(var t=0;t<u.result.length;t++){if(!u.result[t][1])return;l.interfaces[t].macaddr=u.result[t][1].value}l.updatingMACAddress=!1})}},l}(),X=t.ob({encapsulation:2,styles:[],data:{}});function Q(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"dt",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(2,null,["",":"])),(l()(),t.qb(3,0,null,null,1,"dd",[["class","macaddr"]],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(4,null,["",""]))],null,function(l,n){l(n,1,0,t.sb(1,"iface-",n.context.index,"-desc")),l(n,2,0,n.context.$implicit.description),l(n,3,0,t.sb(1,"iface-",n.context.index,"-macaddr")),l(n,4,0,n.context.$implicit.macaddr)})}function Z(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[["class","row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MAC Addresses"])),(l()(),t.qb(4,0,null,null,2,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Q)),t.pb(6,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,u.interfaces)},null)}var Y=u("+3se"),ll=Object.assign||function(l){for(var n,u=1,t=arguments.length;u<t;u++)for(var e in n=arguments[u])Object.prototype.hasOwnProperty.call(n,e)&&(l[e]=n[e]);return l},nl=function(){function l(l,n){this.statusService=l,this.isRetailService=n,this.ngUnsubscribe=new d.a,this.updatingButtonLEDInfoDisplay=!1,this.leds=[],this.buttons=[],this.useScheme=Object(Y.e)(f.a,"button.leds.schemes")}return l.prototype.ngOnInit=function(){this.displayButtonLEDInfo()},l.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},l.prototype.displayButtonLEDInfo=function(){var l=this;this.updatingButtonLEDInfoDisplay||(this.updatingButtonLEDInfoDisplay=!0,this.statusService.getButtons().pipe(Object(p.a)(this.ngUnsubscribe)).subscribe(function(n){var u=n.result[0][1].values;l.useScheme?(l.leds=Object(Y.e)(f.a,"button.leds.schemes")?f.a.button.leds.schemes:null,l.leds&&l.leds.forEach(function(l){l.scheme="uninitialized",l.ledDependencies.forEach(function(t){switch(1==u[t].disabled&&(l.scheme="off"),l.type){case"wifitrigger":l.label=Object(Y.b)("WiFi LED"),"uninitialized"===l.scheme&&(l.scheme=parseInt(u[l.led].disableLeds,10)?"reduced":"default");break;case"ghnscheme":l.label=Object(Y.b)("Powerline LED"),"uninitialized"===l.scheme&&(l.scheme="default");break;case"plcscheme":if(l.label=Object(Y.b)("Powerline LED"),"uninitialized"===l.scheme){var e=Object(Y.g)(n.result[2][1])&&"off"==n.result[2][1].value?1:0;l.scheme=e?"reduced":"default"}}})})):(l.leds=Object.values(u),l.leds.forEach(function(l){switch(l.disabled=parseInt(u[l[".name"]].disabled,10)||0,l.type=-1!=l.sysfs.indexOf("error")?Object(Y.b)("Type error"):Object(Y.b)("Type status"),l.name){case"WLAN":l.label=Object(Y.b)("2.4 GHz WiFi LED");break;case"dLAN":l.label=Object(Y.b)("Powerline LED");break;case"WLAN2G":l.label=Object(Y.b)("2.4 GHz WiFi LED");break;case"WLAN5G":l.label=Object(Y.b)("5 GHz WiFi LED");break;default:l.label=Object(Y.b)("unknown LED")+" '"+l.name+"'"}}));var t=n.result[1][1].values;l.buttons=Object.values(t).map(function(l){return ll({},l)}),l.isRetailService.isDeviceLicenseRetail()&&(l.buttons=l.buttons.filter(function(l){return"button_reset"!==l[".name"]})),l.buttons.forEach(function(l){switch(l.disabled=parseInt(t[l[".name"]].disabled,10)||0,l.name){case"WiFi button":l.label=Object(Y.b)("WiFi button");break;case"dLAN button":l.label=Object(Y.b)("Powerline button");break;case"Reset button":l.label=Object(Y.b)("Reset button");break;default:l.label=Object(Y.b)("unknown button")+" '"+l.name+"'"}})}),this.updatingButtonLEDInfoDisplay=!1)},l.prototype.isLedEnabled=function(l){return"default"===l?1:"reduced"===l?.5:0},l}(),ul=t.ob({encapsulation:2,styles:[],data:{}});function tl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"dt",[],[[8,"id",0]],null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t.Ib(2,null,["",""])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.Ib(-1,null,[" ( "])),(l()(),t.qb(5,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t.Ib(6,null,["",""])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.Ib(-1,null,["):"]))],null,function(l,n){l(n,0,0,t.sb(1,"led-no-scheme-label-",n.parent.context.index,"")),l(n,2,0,t.Jb(n,2,0,t.Ab(n,3).transform(n.parent.context.$implicit.label))),l(n,6,0,t.Jb(n,6,0,t.Ab(n,7).transform(n.parent.context.$implicit.type)))})}function el(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"dt",[],[[8,"id",0]],null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"span",[],null,null,null,null,null)),(l()(),t.Ib(2,null,["",""])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.Ib(-1,null,[":"]))],null,function(l,n){l(n,0,0,t.sb(1,"led-scheme-label-",n.parent.context.index,"")),l(n,2,0,t.Jb(n,2,0,t.Ab(n,3).transform(n.parent.context.$implicit.label)))})}function al(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-danger"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Disabled"]))],function(l,n){l(n,1,0,"")},null)}function sl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-success"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enabled"]))],function(l,n){l(n,1,0,"")},null)}function il(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"dd",[],[[8,"id",0],[1,"led-enabled",0]],null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,al)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,sl)),t.pb(4,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,"1"==n.parent.context.$implicit.disabled),l(n,4,0,"0"==n.parent.context.$implicit.disabled)},function(l,n){l(n,0,0,t.sb(1,"wifi-led-no-scheme-value-",n.parent.context.index,""),"0"==n.parent.context.$implicit.disabled?1:0)})}function ol(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-success"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enabled"]))],function(l,n){l(n,1,0,"")},null)}function rl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-success"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Reduced"]))],function(l,n){l(n,1,0,"")},null)}function bl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-danger"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Disabled"]))],function(l,n){l(n,1,0,"")},null)}function cl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"dd",[],[[8,"id",0],[1,"led-enabled",0]],null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,ol)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,rl)),t.pb(4,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,bl)),t.pb(6,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,"default"==n.parent.context.$implicit.scheme),l(n,4,0,"reduced"==n.parent.context.$implicit.scheme),l(n,6,0,"off"==n.parent.context.$implicit.scheme)},function(l,n){var u=n.component;l(n,0,0,t.sb(1,"wifi-led-scheme-value-",n.parent.context.index,""),u.isLedEnabled(n.parent.context.$implicit.scheme))})}function dl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"div",[],[[8,"id",0]],null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,tl)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,el)),t.pb(4,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,il)),t.pb(6,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,cl)),t.pb(8,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,0==u.useScheme),l(n,4,0,1==u.useScheme),l(n,6,0,0==u.useScheme),l(n,8,0,1==u.useScheme)},function(l,n){l(n,0,0,t.sb(1,"led-",n.context.index,""))})}function pl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-danger"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Disabled"]))],function(l,n){l(n,1,0,"")},null)}function gl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","text-success"],["translate",""]],null,null,null,null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enabled"]))],function(l,n){l(n,1,0,"")},null)}function ml(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"div",[],[[8,"id",0]],null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"dt",[],null,null,null,null,null)),(l()(),t.Ib(2,null,["",":"])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(4,0,null,null,4,"dd",[],[[8,"id",0]],null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,pl)),t.pb(6,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,gl)),t.pb(8,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,6,0,"1"==n.context.$implicit.disabled),l(n,8,0,"0"==n.context.$implicit.disabled)},function(l,n){l(n,0,0,t.sb(1,"buttons-",n.context.index,"")),l(n,2,0,t.Jb(n,2,0,t.Ab(n,3).transform(n.context.$implicit.label))),l(n,4,0,t.sb(1,"button-enabled-",n.context.index,""))})}function fl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[["class","row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["LEDs"])),(l()(),t.qb(4,0,null,null,2,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,dl)),t.pb(6,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),(l()(),t.qb(7,0,null,null,6,"div",[["class","row"]],null,null,null,null,null)),(l()(),t.qb(8,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(9,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Buttons"])),(l()(),t.qb(11,0,null,null,2,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,ml)),t.pb(13,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,u.leds),l(n,9,0,""),l(n,13,0,u.buttons)},null)}var hl=u("EAhB"),vl=t.ob({encapsulation:2,styles:[],data:{}});function Cl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-status-services",[],null,null,null,k,C)),t.pb(1,245760,null,0,v,[h],null,null)],function(l,n){l(n,1,0)},null)}function Al(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"div",[["class","vendor-dialogs main-system-status"],["id","system-status"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-status-info",[],null,null,null,W,T)),t.pb(2,245760,null,0,E,[h,F.a,j.a,M.a],null,null),(l()(),t.hb(16777216,null,null,1,null,Cl)),t.pb(4,212992,null,0,w.a,[t.M,t.P,P.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(5,0,null,null,1,"app-status-mac",[],null,null,null,Z,X)),t.pb(6,245760,null,0,H,[h],null,null),(l()(),t.qb(7,0,null,null,1,"app-status-buttons",[],null,null,null,fl,ul)),t.pb(8,245760,null,0,nl,[h,P.a],null,null)],function(l,n){l(n,2,0),l(n,4,0,null),l(n,6,0),l(n,8,0)},null)}function yl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-status",[],null,null,null,Al,vl)),t.pb(1,114688,null,0,hl.a,[],null,null)],function(l,n){l(n,1,0)},null)}var ql=t.mb("app-status",hl.a,yl,{},{},[]),Il=u("gIcY"),kl=function(){function l(l){this.addressCheckService=l,this.validator=this.hostnameValidator()}return l.prototype.validate=function(l){return this.validator(l)},l.prototype.hostnameValidator=function(){var l=this;return function(n){var u,t=null,e=!0;return u=l.addressCheckService.hostShort(n.value),n.value&&n.value.length>32?(t=Object(Y.b)("The host name is too long. Max. 32 characters allowed."),e=!1):null===n.value||n.value.length?u||(t=Object(Y.b)("Invalid hostname! Allowed are the digits 0-9, upper- and lowercase letters a-z, A-Z and the hyphen.The hostname cannot start or end with a hyphen."),e=!1):(t=Object(Y.b)("The host name is too short. Please enter at least 1 character."),e=!1),e?null:(n.setErrors(null),{hostname:{valid:!1,error:t}})}},l}(),wl=u("IZUe"),Pl=u("UVPe"),xl=u("8b39"),Sl=u("chmc"),jl=u("6aHO"),Ml=u("Xpm8"),Fl=u("dcxs"),El=u("Obbf"),Tl=t.ob({encapsulation:2,styles:[],data:{}});function Dl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,10,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"label",[["class","control-label col-md-4"],["for","contact"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["System contact:"])),(l()(),t.qb(4,0,null,null,6,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,5,"input",[["class","form-control"],["id","contact"],["name","sysContact"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,6)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,6).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,6)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,6)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.sysConf.contact=u)&&e),e},null,null)),t.pb(6,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(8,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(10,16384,null,0,Il.k,[[4,Il.j]],null,null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,8,0,"sysContact",u.sysConf.contact)},function(l,n){l(n,5,0,t.sb(1,"",n.component.sysConf.contact||" ",""),t.Ab(n,10).ngClassUntouched,t.Ab(n,10).ngClassTouched,t.Ab(n,10).ngClassPristine,t.Ab(n,10).ngClassDirty,t.Ab(n,10).ngClassValid,t.Ab(n,10).ngClassInvalid,t.Ab(n,10).ngClassPending)})}function Kl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,36,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,2).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,2).onReset()&&e),e},null,null)),t.pb(1,16384,null,0,Il.w,[],null,null),t.pb(2,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(4,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(5,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["System Information"])),(l()(),t.qb(8,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(9,0,null,null,2,"label",[["class","control-label col-md-4"],["for","hostname"],["translate",""]],null,null,null,null,null)),t.pb(10,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["System name (hostname):"])),(l()(),t.qb(12,0,null,null,11,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(13,16777216,null,null,10,"input",[["appDelosHostname",""],["class","form-control"],["containerClass","text-danger"],["id","hostname"],["name","sysName"],["triggers","none"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,14)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,14).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,14)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,14)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.sysConf.hostname=u)&&e),e},null,null)),t.pb(14,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(15,16384,null,0,kl,[j.a],null,null),t.Fb(1024,null,Il.h,function(l){return[l]},[kl]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(18,671744,[["sysName",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(20,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(21,81920,null,0,wl.a,[t.k,Pl.a,t.z],null,null),t.pb(22,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(24,0,null,null,10,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,2,"label",[["class","control-label col-md-4"],["for","location"],["translate",""]],null,null,null,null,null)),t.pb(26,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["System location:"])),(l()(),t.qb(28,0,null,null,6,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(29,0,null,null,5,"input",[["class","form-control"],["id","location"],["name","sysLocation"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,30)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,30).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,30)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,30)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.sysConf.location=u)&&e),e},null,null)),t.pb(30,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(32,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(34,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.hb(16777216,null,null,1,null,Dl)),t.pb(36,212992,null,0,w.a,[t.M,t.P,P.a],{renderTemplate:[0,"renderTemplate"]},null)],function(l,n){var u=n.component;l(n,6,0,""),l(n,10,0,""),l(n,18,0,"sysName",u.sysConf.hostname),l(n,21,0),l(n,22,0,t.sb(1,"",t.Jb(n,22,0,t.Ab(n,23).transform(null==t.Ab(n,18).errors?null:null==t.Ab(n,18).errors.hostname?null:t.Ab(n,18).errors.hostname.error)),""),"none","text-danger",t.sb(1,"",null==t.Ab(n,18).errors?null:null==t.Ab(n,18).errors.hostname?null:t.Ab(n,18).errors.hostname.error,"")),l(n,26,0,""),l(n,32,0,"sysLocation",u.sysConf.location),l(n,36,0,null)},function(l,n){var u=n.component;l(n,0,0,t.Ab(n,4).ngClassUntouched,t.Ab(n,4).ngClassTouched,t.Ab(n,4).ngClassPristine,t.Ab(n,4).ngClassDirty,t.Ab(n,4).ngClassValid,t.Ab(n,4).ngClassInvalid,t.Ab(n,4).ngClassPending),l(n,13,0,t.sb(1,"",u.sysConf.hostname||" ",""),t.Ab(n,20).ngClassUntouched,t.Ab(n,20).ngClassTouched,t.Ab(n,20).ngClassPristine,t.Ab(n,20).ngClassDirty,t.Ab(n,20).ngClassValid,t.Ab(n,20).ngClassInvalid,t.Ab(n,20).ngClassPending),l(n,29,0,t.sb(1,"",u.sysConf.location,""),t.Ab(n,34).ngClassUntouched,t.Ab(n,34).ngClassTouched,t.Ab(n,34).ngClassPristine,t.Ab(n,34).ngClassDirty,t.Ab(n,34).ngClassValid,t.Ab(n,34).ngClassInvalid,t.Ab(n,34).ngClassPending)})}function Ol(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[["class","vendor-dialogs management"],["id","system-management"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Kl)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,!n.component.rebooting)},null)}function Bl(l){return t.Kb(0,[t.Gb(671088640,1,{delos:0}),(l()(),t.hb(16777216,null,null,1,null,Ol)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,n.component.sysConf)},null)}var Vl=u("k1Yr"),_l=u("tP3N"),Ul=t.ob({encapsulation:0,styles:[["h4[_ngcontent-%COMP%]{margin-top:0}"]],data:{}});function $l(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,16,null,null,null,null,null,null,null)),(l()(),t.qb(1,0,null,null,15,"div",[["class","form-group clearfix"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,14,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,2,"h4",[["translate",""]],null,null,null,null,null)),t.pb(4,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Powersave mode"])),(l()(),t.qb(6,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Allow the device to switch to power save mode when reduced traffic over ethernet is detected. Warning: Latency may suffer when very slow traffic is detected."])),(l()(),t.qb(9,0,null,null,7,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,6,"label",[],null,null,null,null,null)),(l()(),t.qb(11,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","dlan-network-powersave"],["name","powersave"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,13).onInput(u)&&e),"valueChange"===n&&(e=!1!==(a.powersave.enabled=u)&&e),"click"===n&&(e=!1!==a.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(13,16384,null,0,Vl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),t.qb(14,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(15,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable"]))],function(l,n){l(n,4,0,""),l(n,7,0,""),l(n,13,0,"1","0"),l(n,15,0,"")},function(l,n){var u=n.component;l(n,11,0,u.powersave.enabled,1==u.powersave.enabled)})}function Nl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,16,null,null,null,null,null,null,null)),(l()(),t.qb(1,0,null,null,15,"div",[["class","form-group clearfix"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,14,"div",[["class","col-md-12"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,2,"h4",[["translate",""]],null,null,null,null,null)),t.pb(4,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Standby"])),(l()(),t.qb(6,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Your device's Powerline module can be automatically set to a power-saving mode if no cable connections are active and WiFi is switched off."])),(l()(),t.qb(9,0,null,null,7,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,6,"label",[],null,null,null,null,null)),(l()(),t.qb(11,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","dlan-network-standby"],["name","enableStandby"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,13).onInput(u)&&e),"valueChange"===n&&(e=!1!==(a.standby.enabled=u)&&e),"click"===n&&(e=!1!==a.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(13,16384,null,0,Vl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),t.qb(14,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(15,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable"]))],function(l,n){l(n,4,0,""),l(n,7,0,""),l(n,13,0,"1","0"),l(n,15,0,"")},function(l,n){var u=n.component;l(n,11,0,u.standby.enabled,1==u.standby.enabled)})}function Rl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,12,"div",[["class","vendor-dialogs"],["id","power-save"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,11,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,3).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,3).onReset()&&e),e},null,null)),t.pb(2,16384,null,0,Il.w,[],null,null),t.pb(3,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(5,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(6,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Power Management"])),(l()(),t.hb(16777216,null,null,1,null,$l)),t.pb(10,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Nl)),t.pb(12,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,7,0,""),l(n,10,0,u.powersave),l(n,12,0,u.standby)},function(l,n){l(n,1,0,t.Ab(n,5).ngClassUntouched,t.Ab(n,5).ngClassTouched,t.Ab(n,5).ngClassPristine,t.Ab(n,5).ngClassDirty,t.Ab(n,5).ngClassValid,t.Ab(n,5).ngClassInvalid,t.Ab(n,5).ngClassPending)})}function zl(l){return t.Kb(0,[t.Gb(671088640,1,{delos:0}),(l()(),t.hb(16777216,null,null,1,null,Rl)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.powersave||u.standby)},null)}var Ll=u("CkFY"),Jl=u("uAiS"),Gl=u("MLAN"),Wl=t.ob({encapsulation:2,styles:[],data:{}});function Hl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,28,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"label",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Powerline LED"])),(l()(),t.qb(4,0,null,null,24,"div",[["class","btn-group"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,7,"button",[["btnRadio","default"],["class","btn btn-primary"],["id","dlan-button-def"],["name","defPlcScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,6).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.plcScheme=u)&&e),"click"===n&&(e=!1!==a.updatePlcScope("default")&&e),e},null,null)),t.pb(6,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(8,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(10,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["on"])),(l()(),t.qb(13,0,null,null,7,"button",[["btnRadio","reduced"],["class","btn btn-primary"],["id","dlan-button-reduced"],["name","redPlcScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,14).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.plcScheme=u)&&e),"click"===n&&(e=!1!==a.updatePlcScope("reduced")&&e),e},null,null)),t.pb(14,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(16,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(18,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(19,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["reduced"])),(l()(),t.qb(21,0,null,null,7,"button",[["btnRadio","off"],["class","btn btn-primary"],["id","dlan-button-off"],["name","offPlcScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,22).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.plcScheme=u)&&e),"click"===n&&(e=!1!==a.updatePlcScope("off")&&e),e},null,null)),t.pb(22,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(24,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(26,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(27,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["off"]))],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,"default"),l(n,8,0,"defPlcScheme",u.plcScheme),l(n,11,0,""),l(n,14,0,"reduced"),l(n,16,0,"redPlcScheme",u.plcScheme),l(n,19,0,""),l(n,22,0,"off"),l(n,24,0,"offPlcScheme",u.plcScheme),l(n,27,0,"")},function(l,n){l(n,5,0,t.Ab(n,6).isActive,t.Ab(n,6).isActive,t.Ab(n,10).ngClassUntouched,t.Ab(n,10).ngClassTouched,t.Ab(n,10).ngClassPristine,t.Ab(n,10).ngClassDirty,t.Ab(n,10).ngClassValid,t.Ab(n,10).ngClassInvalid,t.Ab(n,10).ngClassPending),l(n,13,0,t.Ab(n,14).isActive,t.Ab(n,14).isActive,t.Ab(n,18).ngClassUntouched,t.Ab(n,18).ngClassTouched,t.Ab(n,18).ngClassPristine,t.Ab(n,18).ngClassDirty,t.Ab(n,18).ngClassValid,t.Ab(n,18).ngClassInvalid,t.Ab(n,18).ngClassPending),l(n,21,0,t.Ab(n,22).isActive,t.Ab(n,22).isActive,t.Ab(n,26).ngClassUntouched,t.Ab(n,26).ngClassTouched,t.Ab(n,26).ngClassPristine,t.Ab(n,26).ngClassDirty,t.Ab(n,26).ngClassValid,t.Ab(n,26).ngClassInvalid,t.Ab(n,26).ngClassPending)})}function Xl(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,20,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"label",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Powerline LED"])),(l()(),t.qb(4,0,null,null,16,"div",[["class","btn-group"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,7,"button",[["btnRadio","default"],["class","btn btn-primary"],["id","dlan-button-def"],["name","defGhnScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,6).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.ghnScheme=u)&&e),"click"===n&&(e=!1!==a.updatePlcScope("default")&&e),e},null,null)),t.pb(6,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(8,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(10,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["on"])),(l()(),t.qb(13,0,null,null,7,"button",[["btnRadio","off"],["class","btn btn-primary"],["id","dlan-button-off"],["name","offGhnScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,14).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.ghnScheme=u)&&e),"click"===n&&(e=!1!==a.updatePlcScope("off")&&e),e},null,null)),t.pb(14,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(16,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(18,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(19,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["off"]))],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,"default"),l(n,8,0,"defGhnScheme",u.ghnScheme),l(n,11,0,""),l(n,14,0,"off"),l(n,16,0,"offGhnScheme",u.ghnScheme),l(n,19,0,"")},function(l,n){l(n,5,0,t.Ab(n,6).isActive,t.Ab(n,6).isActive,t.Ab(n,10).ngClassUntouched,t.Ab(n,10).ngClassTouched,t.Ab(n,10).ngClassPristine,t.Ab(n,10).ngClassDirty,t.Ab(n,10).ngClassValid,t.Ab(n,10).ngClassInvalid,t.Ab(n,10).ngClassPending),l(n,13,0,t.Ab(n,14).isActive,t.Ab(n,14).isActive,t.Ab(n,18).ngClassUntouched,t.Ab(n,18).ngClassTouched,t.Ab(n,18).ngClassPristine,t.Ab(n,18).ngClassDirty,t.Ab(n,18).ngClassValid,t.Ab(n,18).ngClassInvalid,t.Ab(n,18).ngClassPending)})}function Ql(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,44,"div",[["class","vendor-dialogs leds-dialog"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["LED Settings"])),(l()(),t.qb(5,0,null,null,40,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,7).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,7).onReset()&&e),e},null,null)),t.pb(6,16384,null,0,Il.w,[],null,null),t.pb(7,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(9,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(10,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Choose between different LED notification levels."])),(l()(),t.qb(13,0,null,null,28,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,2,"label",[["translate",""]],null,null,null,null,null)),t.pb(15,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["WiFi LED"])),(l()(),t.qb(17,0,null,null,24,"div",[["class","btn-group "]],null,null,null,null,null)),(l()(),t.qb(18,0,null,null,7,"button",[["btnRadio","default"],["class","btn btn-primary"],["id","wifi-button-def"],["name","defWifiScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,19).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.wifiScheme=u)&&e),"click"===n&&(e=!1!==a.updateWiFiScope("default")&&e),e},null,null)),t.pb(19,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(21,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(23,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(24,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["on"])),(l()(),t.qb(26,0,null,null,7,"button",[["btnRadio","reduced"],["class","btn btn-primary"],["id","wifi-button-reduced"],["name","redWifiScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,27).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.wifiScheme=u)&&e),"click"===n&&(e=!1!==a.updateWiFiScope("reduced")&&e),e},null,null)),t.pb(27,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(29,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(31,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(32,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["reduced"])),(l()(),t.qb(34,0,null,null,7,"button",[["btnRadio","off"],["class","btn btn-primary"],["id","wifi-button-off"],["name","offWifiScheme"],["translate",""],["type","button"]],[[2,"active",null],[1,"aria-pressed",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,35).onClick()&&e),"ngModelChange"===n&&(e=!1!==(a.wifiScheme=u)&&e),"click"===n&&(e=!1!==a.updateWiFiScope("off")&&e),e},null,null)),t.pb(35,81920,null,0,Ll.a,[t.k,t.h,[2,Jl.a],t.E],{btnRadio:[0,"btnRadio"]},null),t.Fb(1024,null,Il.i,function(l){return[l]},[Ll.a]),t.pb(37,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(39,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(40,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["off"])),(l()(),t.hb(16777216,null,null,1,null,Hl)),t.pb(43,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Xl)),t.pb(45,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,3,0,""),l(n,11,0,""),l(n,15,0,""),l(n,19,0,"default"),l(n,21,0,"defWifiScheme",u.wifiScheme),l(n,24,0,""),l(n,27,0,"reduced"),l(n,29,0,"redWifiScheme",u.wifiScheme),l(n,32,0,""),l(n,35,0,"off"),l(n,37,0,"offWifiScheme",u.wifiScheme),l(n,40,0,""),l(n,43,0,u.hasPlc),l(n,45,0,u.hasGhn)},function(l,n){l(n,5,0,t.Ab(n,9).ngClassUntouched,t.Ab(n,9).ngClassTouched,t.Ab(n,9).ngClassPristine,t.Ab(n,9).ngClassDirty,t.Ab(n,9).ngClassValid,t.Ab(n,9).ngClassInvalid,t.Ab(n,9).ngClassPending),l(n,18,0,t.Ab(n,19).isActive,t.Ab(n,19).isActive,t.Ab(n,23).ngClassUntouched,t.Ab(n,23).ngClassTouched,t.Ab(n,23).ngClassPristine,t.Ab(n,23).ngClassDirty,t.Ab(n,23).ngClassValid,t.Ab(n,23).ngClassInvalid,t.Ab(n,23).ngClassPending),l(n,26,0,t.Ab(n,27).isActive,t.Ab(n,27).isActive,t.Ab(n,31).ngClassUntouched,t.Ab(n,31).ngClassTouched,t.Ab(n,31).ngClassPristine,t.Ab(n,31).ngClassDirty,t.Ab(n,31).ngClassValid,t.Ab(n,31).ngClassInvalid,t.Ab(n,31).ngClassPending),l(n,34,0,t.Ab(n,35).isActive,t.Ab(n,35).isActive,t.Ab(n,39).ngClassUntouched,t.Ab(n,39).ngClassTouched,t.Ab(n,39).ngClassPristine,t.Ab(n,39).ngClassDirty,t.Ab(n,39).ngClassValid,t.Ab(n,39).ngClassInvalid,t.Ab(n,39).ngClassPending)})}var Zl=u("wEt0"),Yl=t.ob({encapsulation:2,styles:[],data:{}});function ln(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,9,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,8,"label",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["trueValue","0"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,4).onInput(u)&&e),"valueChange"===n&&(e=!1!==(l.context.$implicit.disabled=u)&&e),"click"===n&&(e=!1!==a.ledClick()&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(4,16384,null,0,Vl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),t.qb(5,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable"])),(l()(),t.qb(8,0,null,null,1,"span",[],null,null,null,null,null)),(l()(),t.Ib(9,null,[" "," (",")"]))],function(l,n){l(n,4,0,"0","1"),l(n,6,0,"")},function(l,n){l(n,2,0,t.sb(1,"btn-led-",n.context.index,""),t.sb(1,"led",n.context.index,""),n.context.$implicit.disabled,0==n.context.$implicit.disabled),l(n,9,0,n.context.$implicit.label,n.context.$implicit.type)})}function nn(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,13,"div",[["class","vendor-dialogs leds-dialog"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["LED Settings"])),(l()(),t.qb(5,0,null,null,9,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,7).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,7).onReset()&&e),e},null,null)),t.pb(6,16384,null,0,Il.w,[],null,null),t.pb(7,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(9,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(10,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable or completely disable the LEDs of your device."])),(l()(),t.hb(16777216,null,null,1,null,ln)),t.pb(14,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,3,0,""),l(n,11,0,""),l(n,14,0,u.leds)},function(l,n){l(n,5,0,t.Ab(n,9).ngClassUntouched,t.Ab(n,9).ngClassTouched,t.Ab(n,9).ngClassPristine,t.Ab(n,9).ngClassDirty,t.Ab(n,9).ngClassValid,t.Ab(n,9).ngClassInvalid,t.Ab(n,9).ngClassPending)})}var un=u("Qtq/"),tn=t.ob({encapsulation:2,styles:[],data:{}});function en(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,10,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,9,"label",[],null,null,null,null,null)),(l()(),t.qb(2,16777216,null,null,4,"input",[["appDelosCheckboxValue",""],["containerClass","text-danger"],["falseValue","1"],["placement","bottom"],["triggers","none"],["trueValue","0"],["type","checkbox"]],[[8,"id",0],[8,"name",0],[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,4).onInput(u)&&e),"valueChange"===n&&(e=!1!==(l.context.$implicit.disabled=u)&&e),"click"===n&&(e=!1!==a.btnCheckClick(l.context.$implicit)&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(4,16384,null,0,Vl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),t.pb(5,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],placement:[1,"placement"],triggers:[2,"triggers"],containerClass:[3,"containerClass"],isOpen:[4,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(7,0,null,null,3,"span",[],null,null,null,null,null)),(l()(),t.Ib(8,null,[" "," "," "])),t.Cb(131072,b.i,[b.j,t.h]),t.Cb(131072,b.i,[b.j,t.h])],function(l,n){var u=n.component;l(n,4,0,"0","1"),l(n,5,0,t.sb(1,"",t.Jb(n,5,0,t.Ab(n,6).transform("Disabling the reset button also forbids resetting the configuration to factory defaults.")),""),"bottom","none","text-danger",t.sb(1,"",n.context.$implicit.popoverWarning&&u.click,""))},function(l,n){l(n,2,0,t.sb(1,"button-",n.context.$implicit.name,""),t.sb(1,"button",n.context.index,""),n.context.$implicit.disabled,0==n.context.$implicit.disabled),l(n,8,0,t.Jb(n,8,0,t.Ab(n,9).transform("Enable")),t.Jb(n,8,1,t.Ab(n,10).transform(n.context.$implicit.label)))})}function an(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,13,"div",[["class","vendor-dialogs"],["id","buttons-view"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Button Settings"])),(l()(),t.qb(5,0,null,null,9,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,7).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,7).onReset()&&e),e},null,null)),t.pb(6,16384,null,0,Il.w,[],null,null),t.pb(7,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(9,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(10,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable or disable the buttons of your devices."])),(l()(),t.hb(16777216,null,null,1,null,en)),t.pb(14,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,3,0,""),l(n,11,0,""),l(n,14,0,u.buttons)},function(l,n){l(n,5,0,t.Ab(n,9).ngClassUntouched,t.Ab(n,9).ngClassTouched,t.Ab(n,9).ngClassPristine,t.Ab(n,9).ngClassDirty,t.Ab(n,9).ngClassValid,t.Ab(n,9).ngClassInvalid,t.Ab(n,9).ngClassPending)})}var sn=u("61DS"),on=t.ob({encapsulation:2,styles:[],data:{}});function rn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"option",[],null,null,null,null,null)),t.pb(1,147456,null,0,Il.o,[t.k,t.E,[2,Il.r]],{value:[0,"value"]},null),t.pb(2,147456,null,0,Il.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),(l()(),t.Ib(3,null,["",""])),t.Cb(131072,b.i,[b.j,t.h])],function(l,n){l(n,1,0,t.sb(1,"",n.context.$implicit.id,"")),l(n,2,0,t.sb(1,"",n.context.$implicit.id,""))},function(l,n){l(n,3,0,t.Jb(n,3,0,t.Ab(n,4).transform(n.context.$implicit.name)))})}function bn(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,17,"div",[["class","vendor-dialogs"],["id","time-zone"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,16,"form",[["class","form-horizontal timeView"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,4).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,4).onReset()&&e),e},null,null)),t.pb(3,16384,null,0,Il.w,[],null,null),t.pb(4,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(6,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(7,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(8,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time Zone"])),(l()(),t.qb(10,0,null,null,8,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(11,0,null,null,7,"select",[["class","form-control"],["id","timezone"],["name","timezone"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var e=!0,a=l.component;return"change"===n&&(e=!1!==t.Ab(l,12).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,12).onTouched()&&e),"ngModelChange"===n&&(e=!1!==(a.zonename=u)&&e),e},null,null)),t.pb(12,16384,null,0,Il.r,[t.E,t.k],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.r]),t.pb(14,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(16,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.hb(16777216,null,null,1,null,rn)),t.pb(18,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){var u=n.component;l(n,8,0,""),l(n,14,0,"timezone",u.zonename),l(n,18,0,u.zones)},function(l,n){l(n,2,0,t.Ab(n,6).ngClassUntouched,t.Ab(n,6).ngClassTouched,t.Ab(n,6).ngClassPristine,t.Ab(n,6).ngClassDirty,t.Ab(n,6).ngClassValid,t.Ab(n,6).ngClassInvalid,t.Ab(n,6).ngClassPending),l(n,11,0,t.Ab(n,16).ngClassUntouched,t.Ab(n,16).ngClassTouched,t.Ab(n,16).ngClassPristine,t.Ab(n,16).ngClassDirty,t.Ab(n,16).ngClassValid,t.Ab(n,16).ngClassInvalid,t.Ab(n,16).ngClassPending)})}var cn=u("4PzE"),dn=u("1dzw"),pn=u("weCn"),gn=u("tl7y"),mn=u("Eidh"),fn=u("UhSo"),hn=u("qDEp"),vn=t.ob({encapsulation:2,styles:[],data:{}});function Cn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"td",[["class","text-center empty-vaps-list"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Please click the + button to add a time server"]))],function(l,n){l(n,3,0,"")},null)}function An(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,15,"tr",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,14,"td",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,13,"div",[["class","server-edit"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,12,"div",[["class","server-edit-settings form-group"]],null,null,null,null,null)),(l()(),t.qb(4,16777216,[["addNewServer",1]],null,11,"input",[["appDelosHostOrIp",""],["class","form-control"],["containerClass","text-danger"],["id","add-new-server"],["name","new_server"],["triggers","none"],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keydown"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,5)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,5).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,5)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,5)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.newServer=u)&&e),"keydown"===n&&(e=!1!==a.checkKey(u)&&e),e},null,null)),t.pb(5,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(6,16384,null,0,cn.a,[j.a],null,null),t.Fb(1024,null,Il.h,function(l){return[l]},[cn.a]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(9,671744,[["newservername",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(11,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(12,540672,null,0,dn.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),t.pb(13,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),t.Cb(131072,b.i,[b.j,t.h])],function(l,n){l(n,9,0,"new_server",n.component.newServer),l(n,12,0,!0),l(n,13,0,t.sb(1,"",t.Jb(n,13,0,t.Ab(n,14).transform("Invalid hostname or IP address!")),""),"none","text-danger",t.sb(1,"",t.Ab(n,9).invalid||"",""))},function(l,n){l(n,4,0,t.sb(1,"",t.Jb(n,4,0,t.Ab(n,15).transform("Add new server")),""),t.Ab(n,11).ngClassUntouched,t.Ab(n,11).ngClassTouched,t.Ab(n,11).ngClassPristine,t.Ab(n,11).ngClassDirty,t.Ab(n,11).ngClassValid,t.Ab(n,11).ngClassInvalid,t.Ab(n,11).ngClassPending)})}function yn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","server-view"]],null,[[null,"click"]],function(l,n,u){var t=!0,e=l.component;return"click"===n&&(l.parent.context.$implicit.showRow=!l.parent.context.$implicit.showRow,t=!1!==e.editRow(l.parent.context.index)&&t),t},null,null)),(l()(),t.Ib(1,null,[" "," "]))],null,function(l,n){l(n,1,0,n.parent.context.$implicit.name)})}function qn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,16,"div",[["class","server-edit"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,11,"div",[["class","server-edit-settings form-group"]],null,null,null,null,null)),(l()(),t.qb(2,16777216,null,null,10,"input",[["appDelosHostOrIp",""],["class","form-control"],["containerClass","text-danger"],["name","edit_server"],["triggers","none"],["type","text"]],[[8,"id",0],[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keydown"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,3)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,3).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,3)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,3)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.name=u)&&e),"keydown"===n&&(e=!1!==a.checkKey(u)&&e),e},null,null)),t.pb(3,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(4,16384,null,0,cn.a,[j.a],null,null),t.Fb(1024,null,Il.h,function(l){return[l]},[cn.a]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(7,671744,[["servername",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(9,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(10,540672,null,0,dn.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),t.pb(11,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(13,0,null,null,3,"div",[["class","server-edit-buttons form-group text-right"]],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,2,"button",[["class","btn btn-default remove-icon-button"],["id","btn-remove"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.delete(l.parent.context.$implicit.id)&&t),t},null,null)),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(16,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-trash"]],null,null,null,null,null))],function(l,n){l(n,7,0,t.sb(1,"server",n.parent.context.index,""),n.parent.context.$implicit.name),l(n,10,0,!0),l(n,11,0,t.sb(1,"",t.Jb(n,11,0,t.Ab(n,12).transform("Invalid hostname or IP address!")),""),"none","text-danger",t.sb(1,"",t.Ab(n,7).invalid||"",""))},function(l,n){l(n,2,0,t.sb(1,"server-",n.parent.context.index,"-name"),t.sb(1,"server",n.parent.context.index,""),t.Ab(n,9).ngClassUntouched,t.Ab(n,9).ngClassTouched,t.Ab(n,9).ngClassPristine,t.Ab(n,9).ngClassDirty,t.Ab(n,9).ngClassValid,t.Ab(n,9).ngClassInvalid,t.Ab(n,9).ngClassPending),l(n,14,0,t.sb(1,"",t.Jb(n,14,0,t.Ab(n,15).transform("Delete")),""))})}function In(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"tr",[],[[8,"id",0],[8,"title",0],[2,"odd",null],[2,"even",null]],null,null,null,null)),t.pb(1,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{ngClass:[0,"ngClass"]},null),t.Db(2,{"disabled-row":0}),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(4,0,null,null,4,"td",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,yn)),t.pb(6,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,qn)),t.pb(8,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,t=l(n,2,0,!n.context.$implicit.showRow&&u.editServerMode||u.addNewServerMode);l(n,1,0,t),l(n,6,0,!n.context.$implicit.showRow),l(n,8,0,n.context.$implicit.showRow)},function(l,n){l(n,0,0,t.sb(1,"server-",n.context.index,""),t.sb(1,"",t.Jb(n,0,1,t.Ab(n,3).transform("Click to edit")),""),n.context.odd,n.context.even)})}function kn(l){return t.Kb(0,[t.Cb(0,pn.a,[]),t.Gb(402653184,1,{delos:0}),(l()(),t.qb(2,0,null,null,46,"div",[["class","vendor-dialogs"],["id","time-server"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,45,"form",[["class","form-horizontal timeView"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,5).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,5).onReset()&&e),e},null,null)),t.pb(4,16384,null,0,Il.w,[],null,null),t.pb(5,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(7,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(8,0,null,null,0,"div",[],null,null,null,null,null)),(l()(),t.qb(9,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(10,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time Server (NTP)"])),(l()(),t.qb(12,0,null,null,2,"p",[["style","margin-bottom: 20px;"],["translate",""]],null,null,null,null,null)),t.pb(13,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["The switch between summer and winter time is done automatically by the time server. No manual settings are needed."])),(l()(),t.qb(15,0,null,null,33,"div",[["class","table-responsive vendor-tables"]],null,null,null,null,null)),(l()(),t.qb(16,0,null,null,17,"app-search-box",[],null,null,null,gn.b,gn.a)),t.pb(17,114688,null,0,mn.a,[],null,null),(l()(),t.qb(18,0,null,0,6,"input",[["class","col-md-8"],["id","search"],["name","searchTime"],["ng-readonly",""],["no-dirty-check",""],["type","text"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"keyup"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,19)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,19).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,19)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,19)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.searchTime=u)&&e),"keyup"===n&&(e=!1!==a.markAsPristine()&&e),e},null,null)),t.pb(19,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(21,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(23,16384,null,0,Il.k,[[4,Il.j]],null,null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(25,0,null,1,4,"div",[],null,null,null,null,null)),(l()(),t.Ib(26,null,[" "," "])),t.Cb(0,fn.a,[]),t.Db(28,{num:0,all:1}),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(30,0,null,2,3,"div",[["class","buttons"]],null,null,null,null,null)),(l()(),t.qb(31,0,null,null,2,"button",[["class","btn btn-default small"],["id","add-server"]],[[8,"title",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.addNewServer()&&t),t},null,null)),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(33,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-plus"]],null,null,null,null,null)),(l()(),t.qb(34,0,null,null,14,"table",[["class","dataTable dataTableHighlight timetable"],["id","time-servers"]],null,null,null,null,null)),(l()(),t.qb(35,0,null,null,4,"thead",[],null,null,null,null,null)),(l()(),t.qb(36,0,null,null,3,"tr",[],null,null,null,null,null)),(l()(),t.qb(37,0,null,null,2,"th",[["translate",""]],null,null,null,null,null)),t.pb(38,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Time Server"])),(l()(),t.qb(40,0,null,null,8,"tbody",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Cn)),t.pb(42,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,An)),t.pb(44,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,3,null,In)),t.pb(46,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Cb(0,fn.a,[]),t.Eb(48,2)],function(l,n){var u=n.component;l(n,10,0,""),l(n,13,0,""),l(n,17,0),l(n,21,0,"searchTime",u.searchTime),l(n,38,0,""),l(n,42,0,!u.servers.length&&!u.addNewServerMode),l(n,44,0,u.addNewServerMode);var e=t.Jb(n,46,0,l(n,48,0,t.Ab(n,0),t.Jb(n,46,0,t.Ab(n,47).transform(u.servers,u.searchTime)),"id"));l(n,46,0,e)},function(l,n){var u=n.component;l(n,3,0,t.Ab(n,7).ngClassUntouched,t.Ab(n,7).ngClassTouched,t.Ab(n,7).ngClassPristine,t.Ab(n,7).ngClassDirty,t.Ab(n,7).ngClassValid,t.Ab(n,7).ngClassInvalid,t.Ab(n,7).ngClassPending),l(n,18,0,t.sb(1,"",t.Jb(n,18,0,t.Ab(n,24).transform("Search ...")),""),t.Ab(n,23).ngClassUntouched,t.Ab(n,23).ngClassTouched,t.Ab(n,23).ngClassPristine,t.Ab(n,23).ngClassDirty,t.Ab(n,23).ngClassValid,t.Ab(n,23).ngClassInvalid,t.Ab(n,23).ngClassPending);var e=t.Jb(n,26,0,t.Ab(n,29).transform("display {num} of {all}",l(n,28,0,t.Jb(n,26,0,t.Ab(n,27).transform(u.servers,u.searchTime)).length,u.servers.length)));l(n,26,0,e),l(n,31,0,t.sb(1,"",t.Jb(n,31,0,t.Ab(n,32).transform("Add new Time Server")),""),u.addNewServerMode||u.editServerMode)})}var wn=u("nQCY"),Pn=u("5SxG"),xn=u("mGPz"),Sn=u("7z7v"),jn=u("qEVT"),Mn=u("ZYCi"),Fn=t.ob({encapsulation:2,styles:[],data:{}});function En(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,0,"span",[["class","glyphicon glyphicon-alert text-warning"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint-text"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Caps Lock is on!"]))],function(l,n){l(n,3,0,"")},null)}function Tn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,15,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"label",[["class","control-label col-md-4"],["for","oldpassword"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enter old password:"])),(l()(),t.qb(4,0,null,null,11,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,8,"input",[["class","form-control"],["id","oldpassword"],["name","oldpassword"],["route-focus","!sid"],["tabindex","1"],["type","password"]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"focus"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,6)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,6).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,6)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,6)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.oldPassword=u)&&e),"focus"===n&&(e=0!=(a.focusOld=!0)&&e),"blur"===n&&(e=0!=(a.focusOld=!1)&&e),e},null,null)),t.pb(6,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(7,16384,null,0,Il.q,[],{required:[0,"required"]},null),t.Fb(1024,null,Il.h,function(l){return[l]},[Il.q]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(10,671744,[["oldpassword",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(12,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(13,540672,null,0,dn.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),(l()(),t.hb(16777216,null,null,1,null,En)),t.pb(15,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,7,0,!(!u.newPassword&&!u.confirmNewPassword)),l(n,10,0,"oldpassword",u.oldPassword),l(n,13,0,!u.sid),l(n,15,0,u.capslockOn&&u.focusOld&&u.oldPassword)},function(l,n){l(n,5,0,t.Ab(n,7).required?"":null,t.Ab(n,12).ngClassUntouched,t.Ab(n,12).ngClassTouched,t.Ab(n,12).ngClassPristine,t.Ab(n,12).ngClassDirty,t.Ab(n,12).ngClassValid,t.Ab(n,12).ngClassInvalid,t.Ab(n,12).ngClassPending)})}function Dn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Tn)),t.pb(2,212992,null,0,xn.a,[t.M,t.P,t.h,g.a],{renderTemplate:[0,"renderTemplate"]},null)],function(l,n){l(n,2,0,!0)},null)}function Kn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,0,"span",[["class","glyphicon glyphicon-alert text-warning"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint-text"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Caps Lock is on!"]))],function(l,n){l(n,3,0,"")},null)}function On(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"div",[["class","hint-text"]],null,null,null,null,null)),(l()(),t.Ib(1,null,[" "," "])),t.Db(2,{minlength:0}),t.Cb(131072,b.i,[b.j,t.h])],null,function(l,n){var u=n.component,e=t.Jb(n,1,0,t.Ab(n,3).transform(" The minimum password length is {minlength} character(s).",l(n,2,0,u.pwMinLength)));l(n,1,0,e)})}function Bn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[["class","text-danger"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["The password contains an invalid character:"])),(l()(),t.Ib(4,null,[' ("','") ']))],function(l,n){l(n,2,0,"")},function(l,n){l(n,4,0,null==t.Ab(n.parent,30)?null:null==t.Ab(n.parent,30).errors?null:t.Ab(n.parent,30).errors.invalidChar)})}function Vn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[["class","hint-text"]],null,null,null,null,null)),(l()(),t.Ib(1,null,[" "," "])),t.Cb(131072,b.i,[b.j,t.h])],null,function(l,n){l(n,1,0,t.Jb(n,1,0,t.Ab(n,2).transform("You have to mix more character classes (uppercase, lowercase, digits, and special characters).")))})}function _n(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,0,"span",[["class","glyphicon glyphicon-alert text-warning"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["class","hint-text"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Caps Lock is on!"]))],function(l,n){l(n,3,0,"")},null)}function Un(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){var u=n.component;l(n,1,0,t.Ab(n.parent.parent,4).invalid||!t.Ab(n.parent.parent,4).dirty||u.newPassword!==u.confirmNewPassword,"save")},null)}function $n(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancel()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,!t.Ab(n.parent.parent,4).dirty,"cancel")},null)}function Nn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,5,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"div",[["class","form-group col-md-10 text-right"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Un)),t.pb(3,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,$n)),t.pb(5,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,3,0,t.Ab(n.parent,4).dirty),l(n,5,0,t.Ab(n.parent,4).dirty)},null)}function Rn(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,60,"div",[["class","vendor-dialogs management"],["id","change-password"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,59,"form",[["autocomplete","new-password"],["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,4).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,4).onReset()&&e),e},null,null)),t.pb(3,16384,null,0,Il.w,[],null,null),t.pb(4,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(6,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(7,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(8,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Change Password"])),(l()(),t.qb(10,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Please enter a password to secure the access to your device."])),(l()(),t.qb(13,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,2,null,Dn)),t.pb(15,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),t.Cb(131072,c.b,[t.h]),(l()(),t.qb(17,0,null,null,24,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(18,0,null,null,2,"label",[["class","control-label col-md-4"],["for","newpassword"],["translate",""]],null,null,null,null,null)),t.pb(19,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enter new password:"])),(l()(),t.qb(21,0,null,null,20,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(22,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),t.qb(23,0,null,null,10,"input",[["appValidateEqual","confirmpassword"],["class","form-control"],["id","newpassword"],["minLength","pwMinLength"],["name","newpassword"],["password",""],["reverse","true"],["route-focus","sid"],["strength","pwStrength"],["tabindex","2"],["type","password"]],[[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"focus"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,24)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,24).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,24)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,24)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.newPassword=u)&&e),"focus"===n&&(e=0!=(a.focusNew=!0)&&e),"blur"===n&&(e=0!=(a.focusNew=!1)&&e),e},null,null)),t.pb(24,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(25,16384,null,0,Il.q,[],{required:[0,"required"]},null),t.Cb(131072,c.b,[t.h]),t.pb(27,16384,null,0,Sn.a,[[8,"confirmpassword"],[8,"true"]],null,null),t.Fb(1024,null,Il.h,function(l,n){return[l,n]},[Il.q,Sn.a]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(30,671744,[["newpassword",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(32,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(33,540672,null,0,dn.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),(l()(),t.hb(16777216,null,null,1,null,Kn)),t.pb(35,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,On)),t.pb(37,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Bn)),t.pb(39,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Vn)),t.pb(41,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(42,0,null,null,17,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(43,0,null,null,2,"label",[["class","control-label col-md-4"],["for","confirmpassword"],["translate",""]],null,null,null,null,null)),t.pb(44,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Confirm new password:"])),(l()(),t.qb(46,0,null,null,13,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(47,0,null,null,7,"input",[["appValidateEqual","newpassword"],["class","form-control"],["id","confirmpassword"],["name","confirmpassword"],["tabindex","3"],["type","password"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"focus"],[null,"blur"],[null,"keyup"],[null,"input"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,48)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,48).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,48)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,48)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.confirmNewPassword=u)&&e),"focus"===n&&(e=0!=(a.focusConfirm=!0)&&e),"blur"===n&&(e=0!=(a.focusConfirm=!1)&&e),"keyup"===n&&(e=!1!==(13==u.keyCode&&!t.Ab(l,4).invalid&&a.newPassword==a.confirmNewPassword&&a.save())&&e),e},null,null)),t.pb(48,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(49,16384,null,0,Sn.a,[[8,"newpassword"],[8,null]],null,null),t.Fb(1024,null,Il.h,function(l){return[l]},[Sn.a]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(52,671744,[["confirmpassword",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(54,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.hb(16777216,null,null,1,null,_n)),t.pb(56,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(57,0,null,null,2,"span",[["class","text-danger"]],[[8,"hidden",0]],null,null,null,null)),(l()(),t.Ib(58,null,[" "," "])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.hb(16777216,null,null,1,null,Nn)),t.pb(61,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,8,0,""),l(n,11,0,""),l(n,15,0,!t.Jb(n,15,0,t.Ab(n,16).transform(u.noForcedPassword$))),l(n,19,0,""),l(n,25,0,!(!t.Jb(n,25,0,t.Ab(n,26).transform(u.noForcedPassword$))&&u.noForcedPassword||!u.oldPassword&&!u.sid)),l(n,30,0,"newpassword",u.newPassword),l(n,33,0,u.sid),l(n,35,0,u.capslockOn&&u.focusNew&&u.newPassword),l(n,37,0,null==t.Ab(n,30)?null:null==t.Ab(n,30).errors?null:t.Ab(n,30).errors.minLength),l(n,39,0,null==t.Ab(n,30)?null:null==t.Ab(n,30).errors?null:t.Ab(n,30).errors.pwInvalid),l(n,41,0,null==t.Ab(n,30)?null:null==t.Ab(n,30).errors?null:t.Ab(n,30).errors.pwVariant),l(n,44,0,""),l(n,52,0,"confirmpassword",u.confirmNewPassword),l(n,56,0,u.capslockOn&&u.focusConfirm&&u.newPassword),l(n,61,0,u.sid)},function(l,n){l(n,2,0,t.Ab(n,6).ngClassUntouched,t.Ab(n,6).ngClassTouched,t.Ab(n,6).ngClassPristine,t.Ab(n,6).ngClassDirty,t.Ab(n,6).ngClassValid,t.Ab(n,6).ngClassInvalid,t.Ab(n,6).ngClassPending),l(n,23,0,t.Ab(n,25).required?"":null,t.Ab(n,32).ngClassUntouched,t.Ab(n,32).ngClassTouched,t.Ab(n,32).ngClassPristine,t.Ab(n,32).ngClassDirty,t.Ab(n,32).ngClassValid,t.Ab(n,32).ngClassInvalid,t.Ab(n,32).ngClassPending),l(n,47,0,t.Ab(n,54).ngClassUntouched,t.Ab(n,54).ngClassTouched,t.Ab(n,54).ngClassPristine,t.Ab(n,54).ngClassDirty,t.Ab(n,54).ngClassValid,t.Ab(n,54).ngClassInvalid,t.Ab(n,54).ngClassPending),l(n,57,0,t.Ab(n,30).valid&&t.Ab(n,52).valid||t.Ab(n,52).pristine),l(n,58,0,t.Jb(n,58,0,t.Ab(n,59).transform("Passwords do not match!")))})}var zn=u("4+XQ"),Ln=t.ob({encapsulation:2,styles:[],data:{}});function Jn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-system-information",[],null,null,null,Bl,Tl)),t.pb(2,4308992,[[2,4]],0,Ml.a,[Fl.a,m.a,El.a,g.a,M.a],null,null)],function(l,n){l(n,2,0)},null)}function Gn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-power-save",[],null,null,null,zl,Ul)),t.pb(1,245760,[[7,4]],0,_l.a,[M.a,Fl.a,El.a],null,null)],function(l,n){l(n,1,0)},null)}function Wn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-leds-scheme",[],null,null,null,Ql,Wl)),t.pb(2,4308992,[[4,4]],0,Gl.a,[Fl.a,g.a,M.a,El.a],null,null)],function(l,n){l(n,2,0)},null)}function Hn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-standart-scheme",[],null,null,null,nn,Yl)),t.pb(2,4308992,[[5,4]],0,Zl.a,[Fl.a,g.a,El.a,M.a],null,null)],function(l,n){l(n,2,0)},null)}function Xn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,12,"div",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Gn)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Wn)),t.pb(4,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Hn)),t.pb(6,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(7,0,null,null,1,"app-buttons",[],null,null,null,an,tn)),t.pb(8,4308992,[[3,4]],0,un.a,[Fl.a,El.a,P.a,M.a,g.a],null,null),(l()(),t.qb(9,0,null,null,1,"app-time-zone",[],null,null,null,bn,on)),t.pb(10,4440064,[[9,4]],0,sn.a,[Fl.a,El.a,M.a],null,null),(l()(),t.qb(11,0,null,null,1,"app-time-server",[],null,null,null,kn,vn)),t.pb(12,4440064,[[8,4]],0,hn.a,[Fl.a,M.a,j.a,El.a,b.j],null,null)],function(l,n){var u=n.component;l(n,2,0,u.standyAvilable),l(n,4,0,u.ledWithScheme),l(n,6,0,!u.ledWithScheme),l(n,8,0),l(n,10,0),l(n,12,0)},null)}function Qn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,n.component.invalid,"save")},null)}function Zn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancel()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function Yn(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Qn)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Zn)),t.pb(4,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,u.dirty),l(n,4,0,u.dirty)},null)}function lu(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),t.Gb(671088640,2,{sysInfoComponent:0}),t.Gb(671088640,3,{buttonsComponent:0}),t.Gb(671088640,4,{ledsComponent:0}),t.Gb(671088640,5,{ledsStandartComponent:0}),t.Gb(402653184,6,{changePasswordComponent:0}),t.Gb(671088640,7,{powerSaveComponent:0}),t.Gb(671088640,8,{timeServerComponent:0}),t.Gb(671088640,9,{timeZoneComponent:0}),(l()(),t.qb(9,0,null,null,12,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,11).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,11).onReset()&&e),e},null,null)),t.pb(10,16384,null,0,Il.w,[],null,null),t.pb(11,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(13,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.hb(16777216,null,null,1,null,Jn)),t.pb(15,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(16,0,null,null,1,"app-change-password",[],null,[["document","keypress"]],function(l,n,u){var e=!0;return"document:keypress"===n&&(e=!1!==t.Ab(l,17).handleKeyboardEvent(u)&&e),e},Rn,Fn)),t.pb(17,4308992,[[6,4]],0,jn.a,[El.a,g.a,Fl.a,Mn.a,M.a,Mn.m],null,null),(l()(),t.hb(16777216,null,null,1,null,Xn)),t.pb(19,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Yn)),t.pb(21,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,15,0,!u.sid),l(n,17,0),l(n,19,0,!u.sid),l(n,21,0,!u.sid)},function(l,n){l(n,9,0,t.Ab(n,13).ngClassUntouched,t.Ab(n,13).ngClassTouched,t.Ab(n,13).ngClassPristine,t.Ab(n,13).ngClassDirty,t.Ab(n,13).ngClassValid,t.Ab(n,13).ngClassInvalid,t.Ab(n,13).ngClassPending)})}function nu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-management",[],null,null,null,lu,Ln)),t.Fb(4608,null,Fl.a,Fl.a,[m.a,g.a]),t.pb(2,12828672,null,0,zn.a,[Pl.a,t.h,Mn.a],null,null)],function(l,n){l(n,2,0)},null)}var uu=t.mb("app-management",zn.a,nu,{},{},[]),tu=u("XzGN"),eu=u("BVCH"),au=t.ob({encapsulation:2,styles:[],data:{}});function su(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function iu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function ou(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","caret"]],null,null,null,null,null)),t.pb(1,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"caret-reverse":0})],function(l,n){var u=l(n,2,0,!n.component.reverse);l(n,1,0,"caret",u)},null)}function ru(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"span",[["class","glyphicon"],["style","font-size: 18px;"]],[[8,"id",0],[1,"data-value",0]],null,null,null,null)),t.pb(1,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(2,{"glyphicon-ok-circle":0,"glyphicon-ban-circle":1})],function(l,n){var u=l(n,2,0,!n.parent.context.$implicit.disabled,n.parent.context.$implicit.disabled);l(n,1,0,"glyphicon",u)},function(l,n){l(n,0,0,t.sb(1,"enable-service-icon-",n.parent.context.index,""),!n.parent.context.$implicit.disabled)})}function bu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["trueValue","0"],["type","checkbox"]],[[8,"id",0],[8,"value",0],[8,"checked",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0;return"click"===n&&(e=!1!==t.Ab(l,2).onInput(u)&&e),"valueChange"===n&&(e=!1!==(l.parent.context.$implicit.disabled=u)&&e),"click"===n&&(e=!1!==t.Ab(l.parent.parent,21).form.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(2,16384,null,0,Vl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"})],function(l,n){l(n,2,0,"0","1")},function(l,n){l(n,0,0,t.sb(1,"enable-service-editmode-",n.parent.context.index,""),n.parent.context.$implicit.disabled,0==n.parent.context.$implicit.disabled)})}function cu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,0,0,t.sb(1,"service-port-",n.parent.context.index,"")),l(n,1,0,n.parent.context.$implicit.port)})}function du(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,5,"input",[["class","form-control"],["disabled",""],["name","service_port"],["type","text"]],[[8,"id",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,1)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,1).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,1)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,1)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.port=u)&&e),e},null,null)),t.pb(1,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(3,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(5,16384,null,0,Il.k,[[4,Il.j]],null,null)],function(l,n){l(n,3,0,"service_port","",n.parent.context.$implicit.port)},function(l,n){l(n,0,0,t.sb(1,"service-port-editmode-",n.parent.context.index,"-noedit"),t.Ab(n,5).ngClassUntouched,t.Ab(n,5).ngClassTouched,t.Ab(n,5).ngClassPristine,t.Ab(n,5).ngClassDirty,t.Ab(n,5).ngClassValid,t.Ab(n,5).ngClassInvalid,t.Ab(n,5).ngClassPending)})}function pu(l){return t.Kb(0,[(l()(),t.qb(0,16777216,null,null,10,"input",[["class","form-control"],["containerClass","text-danger"],["name","serviceport"],["triggers","none"],["type","text"]],[[8,"id",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,1)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,1).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,1)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,1)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.port=u)&&e),e},null,null)),t.pb(1,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(2,540672,null,0,Il.p,[],{pattern:[0,"pattern"]},null),t.Fb(1024,null,Il.h,function(l){return[l]},[Il.p]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(5,671744,[["serviceport",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(7,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(8,540672,null,0,dn.a,[t.k,t.z],{appFocus:[0,"appFocus"]},null),t.pb(9,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.hb(0,null,null,0))],function(l,n){l(n,2,0,n.component.portRegEx),l(n,5,0,"serviceport",n.parent.context.$implicit.port),l(n,8,0,!0),l(n,9,0,t.sb(1,"",t.Jb(n,9,0,t.Ab(n,10).transform("Invalid port! Please enter a value between 1 and 65535.")),""),"none","text-danger",t.sb(1,"",t.Ab(n,5).invalid||"",""))},function(l,n){l(n,0,0,t.sb(1,"service-port-editmode-",n.parent.context.index,""),t.Ab(n,2).pattern?t.Ab(n,2).pattern:null,t.Ab(n,7).ngClassUntouched,t.Ab(n,7).ngClassTouched,t.Ab(n,7).ngClassPristine,t.Ab(n,7).ngClassDirty,t.Ab(n,7).ngClassValid,t.Ab(n,7).ngClassInvalid,t.Ab(n,7).ngClassPending)})}function gu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,15,"td",[["colspan","3"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,14,"div",[["class","form-group col-md-10 services-edit-buttons"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"label",[["class","control-label text-right col-md-2"],["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Server:"])),(l()(),t.qb(5,0,null,null,10,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(6,16777216,null,null,9,"input",[["class","form-control"],["containerClass","text-danger"],["delosHostOrIp",""],["name","syslogServerName"],["required",""],["triggers","none"],["type","text"]],[[8,"id",0],[1,"required",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,7)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,7).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,7)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,7)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.parent.context.$implicit.log_ip=u)&&e),e},null,null)),t.pb(7,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(8,16384,null,0,Il.q,[],{required:[0,"required"]},null),t.Fb(1024,null,Il.h,function(l){return[l]},[Il.q]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(11,671744,[["syslogServerName",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(13,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(14,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h])],function(l,n){var u=n.component;l(n,3,0,""),l(n,8,0,""),l(n,11,0,"syslogServerName",n.parent.parent.context.$implicit.log_ip),l(n,14,0,t.sb(1,"",t.Jb(n,14,0,t.Ab(n,15).transform("Invalid hostname or IP address!")),""),"none","text-danger",t.sb(1,"",t.Ab(n,11).invalid&&u.editRowName===n.parent.parent.context.$implicit.name||"",""))},function(l,n){l(n,6,0,t.sb(1,"service-server-",n.parent.parent.context.index,""),t.Ab(n,8).required?"":null,t.Ab(n,13).ngClassUntouched,t.Ab(n,13).ngClassTouched,t.Ab(n,13).ngClassPristine,t.Ab(n,13).ngClassDirty,t.Ab(n,13).ngClassValid,t.Ab(n,13).ngClassInvalid,t.Ab(n,13).ngClassPending)})}function mu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"tr",[["class","noHighlight"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,gu)),t.pb(2,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){l(n,2,0,n.component.remoteSyslog)},null)}function fu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,163,"tr",[["class","noHighlight snmp"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,162,"td",[["colspan","3"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,161,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),t.qb(3,0,null,null,20,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(4,0,null,null,2,"label",[["class","control-label col-md-4"],["for","version"],["translate",""]],null,null,null,null,null)),t.pb(5,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["SNMP version:"])),(l()(),t.qb(7,0,null,null,16,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(8,0,null,null,15,"select",[["class","form-control"],["id","version"],["name","SNMPversion"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var e=!0,a=l.component;return"change"===n&&(e=!1!==t.Ab(l,9).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,9).onTouched()&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.version=u)&&e),"ngModelChange"===n&&(e=!1!==a.onSNMPVersionChange()&&e),e},null,null)),t.pb(9,16384,null,0,Il.r,[t.E,t.k],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.r]),t.pb(11,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(13,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.qb(14,0,null,null,4,"option",[["translate",""],["value","any"]],null,null,null,null,null)),t.pb(15,147456,null,0,Il.o,[t.k,t.E,[2,Il.r]],{value:[0,"value"]},null),t.pb(16,147456,null,0,Il.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(17,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["v1 + v2c"])),(l()(),t.qb(19,0,null,null,4,"option",[["translate",""],["value","usm"]],null,null,null,null,null)),t.pb(20,147456,null,0,Il.o,[t.k,t.E,[2,Il.r]],{value:[0,"value"]},null),t.pb(21,147456,null,0,Il.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(22,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["v3"])),(l()(),t.qb(24,0,null,null,12,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,2,"label",[["class","control-label col-md-4"],["for","source"],["translate",""]],null,null,null,null,null)),t.pb(26,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Public source:"])),(l()(),t.qb(28,0,null,null,8,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(29,16777216,null,null,7,"input",[["class","form-control"],["containerClass","text-danger"],["delosHostIpSubnet",""],["id","source"],["name","SNMPpubSrc"],["triggers","none"],["type","text"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,30)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,30).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,30)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,30)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.source=u)&&e),e},null,null)),t.pb(30,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(32,671744,[["SNMPpubSrc",4]],0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(34,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(35,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(37,0,null,null,14,"div",[["class","form-group"]],[[8,"hidden",0]],null,null,null,null)),(l()(),t.qb(38,0,null,null,2,"label",[["class","control-label col-md-4"],["for","community"],["translate",""]],null,null,null,null,null)),t.pb(39,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Public community (read only):"])),(l()(),t.qb(41,0,null,null,10,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(42,16777216,null,null,9,"input",[["class","form-control"],["containerClass","text-danger"],["id","community"],["name","SNMPpubCommunity"],["triggers","none"],["type","text"]],[[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,43)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,43).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,43)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,43)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.community=u)&&e),e},null,null)),t.pb(43,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(44,540672,null,0,Il.p,[],{pattern:[0,"pattern"]},null),t.Fb(1024,null,Il.h,function(l){return[l]},[Il.p]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(47,671744,[["SNMPpubCommunity",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(49,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(50,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(52,0,null,null,111,"div",[],[[8,"hidden",0]],null,null,null,null)),(l()(),t.qb(53,0,null,null,0,"input",[["style","display:none;"],["type","password"]],null,null,null,null,null)),(l()(),t.qb(54,0,null,null,16,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(55,0,null,null,2,"label",[["class","control-label col-md-4"],["for","username"],["translate",""]],null,null,null,null,null)),t.pb(56,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Username:"])),(l()(),t.qb(58,0,null,null,12,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(59,16777216,null,null,11,"input",[["class","form-control"],["containerClass","text-danger"],["id","username"],["name","SNMPuser"],["triggers","none"],["type","text"]],[[8,"placeholder",0],[1,"required",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"focus"],[null,"blur"],[null,"input"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,60)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,60).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,60)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,60)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.username=u)&&e),"focus"===n&&(e=0!=(a.focusUsername=!0)&&e),"blur"===n&&(e=0!=(a.focusUsername=!1)&&e),e},null,null)),t.pb(60,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(61,16384,null,0,Il.q,[],{required:[0,"required"]},null),t.pb(62,540672,null,0,Il.p,[],{pattern:[0,"pattern"]},null),t.Fb(1024,null,Il.h,function(l,n){return[l,n]},[Il.q,Il.p]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(65,671744,[["SNMPuser",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(67,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(68,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(71,0,null,null,20,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(72,0,null,null,2,"label",[["class","control-label col-md-4"],["for","authtype"],["translate",""]],null,null,null,null,null)),t.pb(73,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Authentication type:"])),(l()(),t.qb(75,0,null,null,16,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(76,0,null,null,15,"select",[["class","form-control"],["id","authtype"],["name","SNMPauthType"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var e=!0;return"change"===n&&(e=!1!==t.Ab(l,77).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,77).onTouched()&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.authtype=u)&&e),e},null,null)),t.pb(77,16384,null,0,Il.r,[t.E,t.k],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.r]),t.pb(79,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(81,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.qb(82,0,null,null,4,"option",[["translate",""],["value","MD5"]],null,null,null,null,null)),t.pb(83,147456,null,0,Il.o,[t.k,t.E,[2,Il.r]],{value:[0,"value"]},null),t.pb(84,147456,null,0,Il.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(85,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["MD5"])),(l()(),t.qb(87,0,null,null,4,"option",[["translate",""],["value","SHA"]],null,null,null,null,null)),t.pb(88,147456,null,0,Il.o,[t.k,t.E,[2,Il.r]],{value:[0,"value"]},null),t.pb(89,147456,null,0,Il.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(90,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["SHA"])),(l()(),t.qb(92,0,null,null,25,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(93,0,null,null,2,"label",[["class","control-label col-md-4"],["for","authpass"],["translate",""]],null,null,null,null,null)),t.pb(94,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Authentication passphrase:"])),(l()(),t.qb(96,0,null,null,21,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(97,0,null,null,20,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t.qb(98,16777216,null,null,12,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["containerClass","text-danger"],["id","authpass"],["maxlength","130"],["minlength","8"],["name","authPass"],["triggers","none"]],[[8,"type",0],[1,"required",0],[1,"minlength",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,99)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,99).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,99)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,99)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.authpass=u)&&e),e},null,null)),t.pb(99,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(100,16384,null,0,Il.q,[],{required:[0,"required"]},null),t.pb(101,540672,null,0,Il.g,[],{minlength:[0,"minlength"]},null),t.pb(102,540672,null,0,Il.f,[],{maxlength:[0,"maxlength"]},null),t.pb(103,540672,null,0,Il.p,[],{pattern:[0,"pattern"]},null),t.Fb(1024,null,Il.h,function(l,n,u,t){return[l,n,u,t]},[Il.q,Il.g,Il.f,Il.p]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(106,671744,[["authPass",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(108,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(109,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(111,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),t.qb(112,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleAuthPassVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.toggleAuthPassVisibility()&&t),t},null,null)),t.Cb(131072,b.i,[b.j,t.h]),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(115,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),t.pb(116,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(117,{"glyphicon-eye-close":0,"glyphicon-eye-open":1}),(l()(),t.qb(118,0,null,null,20,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(119,0,null,null,2,"label",[["class","control-label col-md-4"],["for","sectype"],["translate",""]],null,null,null,null,null)),t.pb(120,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Security type:"])),(l()(),t.qb(122,0,null,null,16,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(123,0,null,null,15,"select",[["class","form-control"],["id","sectype"],["name","SNMPsecType"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"blur"]],function(l,n,u){var e=!0;return"change"===n&&(e=!1!==t.Ab(l,124).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,124).onTouched()&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.sectype=u)&&e),e},null,null)),t.pb(124,16384,null,0,Il.r,[t.E,t.k],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.r]),t.pb(126,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(128,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.qb(129,0,null,null,4,"option",[["translate",""],["value","DES"]],null,null,null,null,null)),t.pb(130,147456,null,0,Il.o,[t.k,t.E,[2,Il.r]],{value:[0,"value"]},null),t.pb(131,147456,null,0,Il.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(132,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["DES"])),(l()(),t.qb(134,0,null,null,4,"option",[["translate",""],["value","AES"]],null,null,null,null,null)),t.pb(135,147456,null,0,Il.o,[t.k,t.E,[2,Il.r]],{value:[0,"value"]},null),t.pb(136,147456,null,0,Il.y,[t.k,t.E,[8,null]],{value:[0,"value"]},null),t.pb(137,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["AES"])),(l()(),t.qb(139,0,null,null,24,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(140,0,null,null,2,"label",[["class","control-label col-md-4"],["for","secpass"],["translate",""]],null,null,null,null,null)),t.pb(141,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Security passphrase:"])),(l()(),t.qb(143,0,null,null,20,"div",[["class","col-md-6"]],null,null,null,null,null)),(l()(),t.qb(144,0,null,null,19,"div",[["class","input-group"]],null,null,null,null,null)),(l()(),t.qb(145,16777216,null,null,11,"input",[["aria-describedby","basic-addon1"],["autocomplete","new-password"],["class","form-control"],["containerClass","text-danger"],["id","secpass"],["maxlength","64"],["minlength","8"],["name","securityPass"],["triggers","none"]],[[8,"type",0],[1,"minlength",0],[1,"maxlength",0],[1,"pattern",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0;return"input"===n&&(e=!1!==t.Ab(l,146)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,146).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,146)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,146)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(l.parent.context.$implicit.secpass=u)&&e),e},null,null)),t.pb(146,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(147,540672,null,0,Il.g,[],{minlength:[0,"minlength"]},null),t.pb(148,540672,null,0,Il.f,[],{maxlength:[0,"maxlength"]},null),t.pb(149,540672,null,0,Il.p,[],{pattern:[0,"pattern"]},null),t.Fb(1024,null,Il.h,function(l,n,u){return[l,n,u]},[Il.g,Il.f,Il.p]),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(152,671744,[["securityPass",4]],0,Il.n,[[2,Il.c],[6,Il.h],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(154,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(155,212992,null,0,xl.a,[t.k,t.E,t.P,Sl.a,jl.a],{popover:[0,"popover"],triggers:[1,"triggers"],containerClass:[2,"containerClass"],isOpen:[3,"isOpen"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(157,0,null,null,6,"span",[["class","input-group-btn"]],null,null,null,null,null)),(l()(),t.qb(158,0,null,null,5,"button",[["class","btn btn-default"],["id","toggleSecurityPassVisibility"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.toggleSecurityPassVisibility()&&t),t},null,null)),t.Cb(131072,b.i,[b.j,t.h]),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(161,0,null,null,2,"span",[["class","glyphicon "]],null,null,null,null,null)),t.pb(162,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(163,{"glyphicon-eye-close":0,"glyphicon-eye-open":1})],function(l,n){var u=n.component;l(n,5,0,""),l(n,11,0,"SNMPversion",n.parent.context.$implicit.version),l(n,15,0,"any"),l(n,16,0,"any"),l(n,17,0,""),l(n,20,0,"usm"),l(n,21,0,"usm"),l(n,22,0,""),l(n,26,0,""),l(n,32,0,"SNMPpubSrc",n.parent.context.$implicit.source),l(n,35,0,t.sb(1,"",t.Jb(n,35,0,t.Ab(n,36).transform("Invalid hostname or IP/Subnet!")),""),"none","text-danger",t.sb(1,"",t.Ab(n,32).invalid||"","")),l(n,39,0,""),l(n,44,0,u.alphanumericRegEx),l(n,47,0,"SNMPpubCommunity",n.parent.context.$implicit.community),l(n,50,0,t.sb(1,"",t.Jb(n,50,0,t.Ab(n,51).transform("Enter an alphanumeric community name (max 24 characters)")),""),"none","text-danger",t.sb(1,"",t.Ab(n,47).invalid||"","")),l(n,56,0,""),l(n,61,0,"usm"===n.parent.context.$implicit.version),l(n,62,0,u.alphanumericRegEx),l(n,65,0,"SNMPuser",n.parent.context.$implicit.username),l(n,68,0,t.sb(1,"",t.Jb(n,68,0,t.Ab(n,69).transform("Enter an alphanumeric username (max 24 characters)")),""),"none","text-danger",t.sb(1,"",t.Ab(n,65).invalid&&n.parent.context.$implicit.focusUsername||"","")),l(n,73,0,""),l(n,79,0,"SNMPauthType",n.parent.context.$implicit.authtype),l(n,83,0,"MD5"),l(n,84,0,"MD5"),l(n,85,0,""),l(n,88,0,"SHA"),l(n,89,0,"SHA"),l(n,90,0,""),l(n,94,0,""),l(n,100,0,"usm"===n.parent.context.$implicit.version&&n.parent.context.$implicit.secpass&&t.Ab(n,152).valid),l(n,101,0,"8"),l(n,102,0,"130"),l(n,103,0,u.passwordPattern),l(n,106,0,"authPass",n.parent.context.$implicit.authpass),l(n,109,0,t.sb(1,"",t.Jb(n,109,0,t.Ab(n,110).transform("Enter between 8 and 130 of these characters:"))," a-z A-Z 0-9 , . / $ = + - ^ @ ! % ~ #"),"none","text-danger",t.sb(1,"",t.Ab(n,106).invalid||"",""));var e=l(n,117,0,"text"==u.authPassType,"password"==u.authPassType);l(n,116,0,"glyphicon ",e),l(n,120,0,""),l(n,126,0,"SNMPsecType",n.parent.context.$implicit.sectype),l(n,130,0,"DES"),l(n,131,0,"DES"),l(n,132,0,""),l(n,135,0,"AES"),l(n,136,0,"AES"),l(n,137,0,""),l(n,141,0,""),l(n,147,0,"8"),l(n,148,0,"64"),l(n,149,0,u.secPasswordPattern),l(n,152,0,"securityPass",n.parent.context.$implicit.secpass),l(n,155,0,t.sb(1,"",t.Jb(n,155,0,t.Ab(n,156).transform("Enter between 8 and 64 of these characters:"))," a-z A-Z 0-9 , . / $ = + - ^ @ ! % ~ #"),"none","text-danger",t.sb(1,"",t.Ab(n,152).invalid||"",""));var a=l(n,163,0,"text"==u.securityPassType,"password"==u.securityPassType);l(n,162,0,"glyphicon ",a)},function(l,n){var u=n.component;l(n,2,0,1==n.parent.context.$implicit.disabled),l(n,8,0,t.Ab(n,13).ngClassUntouched,t.Ab(n,13).ngClassTouched,t.Ab(n,13).ngClassPristine,t.Ab(n,13).ngClassDirty,t.Ab(n,13).ngClassValid,t.Ab(n,13).ngClassInvalid,t.Ab(n,13).ngClassPending),l(n,29,0,t.Ab(n,34).ngClassUntouched,t.Ab(n,34).ngClassTouched,t.Ab(n,34).ngClassPristine,t.Ab(n,34).ngClassDirty,t.Ab(n,34).ngClassValid,t.Ab(n,34).ngClassInvalid,t.Ab(n,34).ngClassPending),l(n,37,0,"usm"==n.parent.context.$implicit.version),l(n,42,0,t.Ab(n,44).pattern?t.Ab(n,44).pattern:null,t.Ab(n,49).ngClassUntouched,t.Ab(n,49).ngClassTouched,t.Ab(n,49).ngClassPristine,t.Ab(n,49).ngClassDirty,t.Ab(n,49).ngClassValid,t.Ab(n,49).ngClassInvalid,t.Ab(n,49).ngClassPending),l(n,52,0,"usm"!==n.parent.context.$implicit.version),l(n,59,0,t.sb(1,"",t.Jb(n,59,0,t.Ab(n,70).transform("Username")),""),t.Ab(n,61).required?"":null,t.Ab(n,62).pattern?t.Ab(n,62).pattern:null,t.Ab(n,67).ngClassUntouched,t.Ab(n,67).ngClassTouched,t.Ab(n,67).ngClassPristine,t.Ab(n,67).ngClassDirty,t.Ab(n,67).ngClassValid,t.Ab(n,67).ngClassInvalid,t.Ab(n,67).ngClassPending),l(n,76,0,t.Ab(n,81).ngClassUntouched,t.Ab(n,81).ngClassTouched,t.Ab(n,81).ngClassPristine,t.Ab(n,81).ngClassDirty,t.Ab(n,81).ngClassValid,t.Ab(n,81).ngClassInvalid,t.Ab(n,81).ngClassPending),l(n,98,1,[t.sb(1,"",u.authPassType,""),t.Ab(n,100).required?"":null,t.Ab(n,101).minlength?t.Ab(n,101).minlength:null,t.Ab(n,102).maxlength?t.Ab(n,102).maxlength:null,t.Ab(n,103).pattern?t.Ab(n,103).pattern:null,t.Ab(n,108).ngClassUntouched,t.Ab(n,108).ngClassTouched,t.Ab(n,108).ngClassPristine,t.Ab(n,108).ngClassDirty,t.Ab(n,108).ngClassValid,t.Ab(n,108).ngClassInvalid,t.Ab(n,108).ngClassPending]),l(n,112,0,t.Jb(n,112,0,"text"==u.authPassType?t.Ab(n,113).transform("Hide password"):t.Ab(n,114).transform("Show password"))),l(n,123,0,t.Ab(n,128).ngClassUntouched,t.Ab(n,128).ngClassTouched,t.Ab(n,128).ngClassPristine,t.Ab(n,128).ngClassDirty,t.Ab(n,128).ngClassValid,t.Ab(n,128).ngClassInvalid,t.Ab(n,128).ngClassPending),l(n,145,1,[t.sb(1,"",u.securityPassType,""),t.Ab(n,147).minlength?t.Ab(n,147).minlength:null,t.Ab(n,148).maxlength?t.Ab(n,148).maxlength:null,t.Ab(n,149).pattern?t.Ab(n,149).pattern:null,t.Ab(n,154).ngClassUntouched,t.Ab(n,154).ngClassTouched,t.Ab(n,154).ngClassPristine,t.Ab(n,154).ngClassDirty,t.Ab(n,154).ngClassValid,t.Ab(n,154).ngClassInvalid,t.Ab(n,154).ngClassPending]),l(n,158,0,t.Jb(n,158,0,"text"==u.securityPassType?t.Ab(n,159).transform("Hide password"):t.Ab(n,160).transform("Show password")))})}function hu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,4,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save(l.parent.context.$implicit)&&t),t},wn.b,wn.a)),t.pb(2,114688,null,0,Pn.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"}),(l()(),t.qb(3,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancel(l.parent.context.$implicit)&&t),t},wn.b,wn.a)),t.pb(4,114688,null,0,Pn.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,2,0,!t.Ab(n.parent.parent,21).dirty||t.Ab(n.parent.parent,21).invalid,"save"),l(n,4,0,"cancel")},null)}function vu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,31,"tbody",[["class","vap-rows-wrapper"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,24,"tr",[["class","doedit"],["role","row"]],[[8,"id",0],[1,"data-pkey",0],[8,"title",0],[2,"odd",null],[2,"even",null]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.editRow(l.context.$implicit)&&t),t},null,null)),t.pb(2,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(3,{disabled:0,editedRow:1,noEditRow:2}),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(5,0,null,null,6,"td",[["class","clearfix text-center"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(7,0,null,null,4,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,ru)),t.pb(9,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,bu)),t.pb(11,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(12,0,null,null,4,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(14,0,null,null,2,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.qb(15,0,null,null,1,"span",[],[[8,"id",0]],null,null,null,null)),(l()(),t.Ib(16,null,["",""])),(l()(),t.qb(17,0,null,null,8,"td",[["class","clearfix"]],[[1,"data-label",0]],null,null,null,null)),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(19,0,null,null,6,"div",[["class","td-content"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,cu)),t.pb(21,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,du)),t.pb(23,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,pu)),t.pb(25,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,mu)),t.pb(27,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,fu)),t.pb(29,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,hu)),t.pb(31,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component,t=l(n,3,0,n.context.$implicit.disabled||u.editRowName&&u.editRowName!==n.context.$implicit.name,u.editRowName===n.context.$implicit.name,u.editRowName&&u.editRowName!==n.context.$implicit.name);l(n,2,0,"doedit",t),l(n,9,0,u.editRowName!==n.context.$implicit.name),l(n,11,0,u.editRowName===n.context.$implicit.name),l(n,21,0,u.editRowName!==n.context.$implicit.name),l(n,23,0,n.context.$implicit.noteditable&&u.editRowName===n.context.$implicit.name),l(n,25,0,!n.context.$implicit.noteditable&&u.editRowName===n.context.$implicit.name),l(n,27,0,u.editRowName===n.context.$implicit.name&&n.context.$implicit.hasadditional&&!n.context.$implicit.isSnmp),l(n,29,0,u.editRowName===n.context.$implicit.name&&n.context.$implicit.isSnmp),l(n,31,0,u.editRowName===n.context.$implicit.name)},function(l,n){l(n,1,0,t.sb(1,"service-",n.context.$implicit.name,""),n.context.$implicit.name,t.sb(1,"",t.Jb(n,1,2,t.Ab(n,4).transform("Click to edit")),""),n.context.odd,n.context.even),l(n,5,0,t.Jb(n,5,0,t.Ab(n,6).transform("Enable"))),l(n,12,0,t.Jb(n,12,0,t.Ab(n,13).transform("Service Name"))),l(n,15,0,t.sb(1,"service-",n.context.index,"")),l(n,16,0,n.context.$implicit.name),l(n,17,0,t.Jb(n,17,0,t.Ab(n,18).transform("Port")))})}function Cu(l){return t.Kb(0,[t.Cb(0,pn.a,[]),t.Gb(402653184,1,{delos:0}),(l()(),t.qb(2,0,null,null,48,"div",[["class","vendor-tables"],["id","system-services"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,47,"div",[["class","row filter-row"]],null,null,null,null,null)),(l()(),t.qb(4,0,null,null,14,"app-search-box",[],null,null,null,gn.b,gn.a)),t.pb(5,114688,null,0,mn.a,[],null,null),(l()(),t.qb(6,0,null,0,7,"input",[["class","col-md-8 search-box"],["id","search"],["type","text"]],[[8,"placeholder",0],[8,"readOnly",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,7)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,7).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,7)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,7)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.searchServices=u)&&e),e},null,null)),t.pb(7,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(9,671744,null,0,Il.n,[[8,null],[8,null],[8,null],[6,Il.i]],{model:[0,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(11,16384,null,0,Il.k,[[4,Il.j]],null,null),t.pb(12,81920,null,0,wl.a,[t.k,Pl.a,t.z],null,null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(14,0,null,1,4,"div",[],null,null,null,null,null)),(l()(),t.Ib(15,null,[" "," "])),t.Cb(0,fn.a,[]),t.Db(17,{num:0,all:1}),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(19,0,null,null,31,"form",[["class","form"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,21).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,21).onReset()&&e),e},null,null)),t.pb(20,16384,null,0,Il.w,[],null,null),t.pb(21,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(23,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(24,0,null,null,26,"div",[["class","table-responsive-disabled"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,25,"table",[["class","dataTable dataTableHighlight vendorTable-responsive"],["id","foundServices"]],null,null,null,null,null)),(l()(),t.qb(26,0,null,null,19,"thead",[],null,null,null,null,null)),(l()(),t.qb(27,0,null,null,18,"tr",[],null,null,null,null,null)),(l()(),t.qb(28,0,null,null,5,"th",[["style","width: 90px;"]],null,null,null,null,null)),(l()(),t.qb(29,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("disabled")&&t),t},null,null)),t.pb(30,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable"])),(l()(),t.hb(16777216,null,null,1,null,su)),t.pb(33,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(34,0,null,null,5,"th",[["style","width: auto;"]],null,null,null,null,null)),(l()(),t.qb(35,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("name")&&t),t},null,null)),t.pb(36,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Service"])),(l()(),t.hb(16777216,null,null,1,null,iu)),t.pb(39,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(40,0,null,null,5,"th",[["style","width: 130px;"]],null,null,null,null,null)),(l()(),t.qb(41,0,null,null,2,"a",[["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.order("port*1")&&t),t},null,null)),t.pb(42,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Port number"])),(l()(),t.hb(16777216,null,null,1,null,ou)),t.pb(45,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,4,null,vu)),t.pb(47,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null),t.Bb(48,2),t.Cb(0,fn.a,[]),t.Eb(50,4)],function(l,n){var u=n.component;l(n,5,0),l(n,9,0,u.searchServices),l(n,12,0),l(n,30,0,""),l(n,33,0,"disabled"===u.orderby),l(n,36,0,""),l(n,39,0,"name"===u.orderby),l(n,42,0,""),l(n,45,0,"port*1"===u.orderby);var e=t.Jb(n,47,0,l(n,50,0,t.Ab(n,0),t.Jb(n,47,0,t.Ab(n,49).transform(u.services,u.searchServices,l(n,48,0,"name","port"))),u.orderby,u.reverse,u.reverse));l(n,47,0,e)},function(l,n){var u=n.component;l(n,6,0,t.sb(1,"",t.Jb(n,6,0,t.Ab(n,13).transform("Search ...")),""),u.editRowName,t.Ab(n,11).ngClassUntouched,t.Ab(n,11).ngClassTouched,t.Ab(n,11).ngClassPristine,t.Ab(n,11).ngClassDirty,t.Ab(n,11).ngClassValid,t.Ab(n,11).ngClassInvalid,t.Ab(n,11).ngClassPending);var e,a=t.Jb(n,15,0,t.Ab(n,18).transform("display {num} of {all}",l(n,17,0,null==(e=t.Jb(n,15,0,t.Ab(n,16).transform(u.services,u.searchServices)))?null:e.length,u.services.length)));l(n,15,0,a),l(n,19,0,t.Ab(n,23).ngClassUntouched,t.Ab(n,23).ngClassTouched,t.Ab(n,23).ngClassPristine,t.Ab(n,23).ngClassDirty,t.Ab(n,23).ngClassValid,t.Ab(n,23).ngClassInvalid,t.Ab(n,23).ngClassPending)})}function Au(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-services",[],null,null,null,Cu,au)),t.Fb(512,null,tu.a,tu.a,[g.a,m.a]),t.pb(2,114688,null,0,eu.a,[tu.a,Pl.a,g.a,m.a,b.j,El.a,j.a],null,null)],function(l,n){l(n,2,0)},null)}var yu=t.mb("app-services",eu.a,Au,{},{},[]),qu=u("qKjf"),Iu=u("1b+T"),ku=t.ob({encapsulation:2,styles:[],data:{}});function wu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"button",[["class","btn btn-default"],["id","find-me-stop"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.stop()&&t),t},null,null)),t.pb(1,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Stop"]))],function(l,n){l(n,1,0,"")},null)}function Pu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"div",[["class","buzzer-progress progress"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,7,"div",[["attr.aria-valuemin","0"],["class","progress-bar"],["role","progressbar"]],[[1,"aria-valuenow",0],[1,"aria-valuemax",0]],null,null,null,null)),t.pb(2,278528,null,0,c.r,[t.t,t.k,t.E],{ngStyle:[0,"ngStyle"]},null),t.Db(3,{width:0}),(l()(),t.Ib(4,null,[" "," "])),t.Eb(5,2),(l()(),t.qb(6,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["s"]))],function(l,n){var u=n.component,t=l(n,3,0,(u.elapsed/u.duration*100||0)+"%");l(n,2,0,t),l(n,7,0,"")},function(l,n){var u=n.component;l(n,1,0,t.sb(1,"",u.elapsed||0,""),t.sb(1,"",u.duration,""));var e=t.Jb(n,4,0,l(n,5,0,t.Ab(n.parent,0),u.elapsed||0,"1.0-0"));l(n,4,0,e)})}function xu(l){return t.Kb(0,[t.Cb(0,c.f,[t.u]),(l()(),t.qb(1,0,null,null,49,"div",[["class","vendor-dialogs"],["id","find-me"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,48,"form",[["class","form"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,4).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,4).onReset()&&e),e},null,null)),t.pb(3,16384,null,0,Il.w,[],null,null),t.pb(4,4210688,[["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(6,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(7,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(8,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Buzzer"])),(l()(),t.qb(10,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,['Set a duration and click "Start" to activate the buzzer for this time.'])),(l()(),t.qb(13,0,null,null,3,"p",[],null,null,null,null,null)),(l()(),t.Ib(14,null,["",""])),t.Db(15,{dur:0}),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(17,0,null,null,24,"div",[["class","range-wrapper"]],null,null,null,null,null)),(l()(),t.qb(18,0,null,null,6,"input",[["id","find-me-range"],["max","120"],["min","1"],["name","duration"],["step","1"],["type","range"],["value","10"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"],[null,"change"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,19)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,19).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,19)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,19)._compositionEnd(u.target.value)&&e),"change"===n&&(e=!1!==t.Ab(l,20).onChange(u.target.value)&&e),"input"===n&&(e=!1!==t.Ab(l,20).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,20).onTouched()&&e),"ngModelChange"===n&&(e=!1!==(a.duration=u)&&e),e},null,null)),t.pb(19,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(20,16384,null,0,Il.v,[t.E,t.k],null,null),t.Fb(1024,null,Il.i,function(l,n){return[l,n]},[Il.d,Il.v]),t.pb(22,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],isDisabled:[1,"isDisabled"],model:[2,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(24,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.qb(25,0,null,null,16,"div",[["class","range-scala clearfix"]],null,null,null,null,null)),(l()(),t.qb(26,0,null,null,3,"p",[["translate",""]],[[1,"data-label",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==(l.component.duration=1)&&t),t},null,null)),t.pb(27,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.Ib(-1,null,["1"])),(l()(),t.qb(30,0,null,null,3,"p",[["translate",""]],[[1,"data-label",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==(l.component.duration=10)&&t),t},null,null)),t.pb(31,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.Ib(-1,null,["10"])),(l()(),t.qb(34,0,null,null,3,"p",[["translate",""]],[[1,"data-label",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==(l.component.duration=60)&&t),t},null,null)),t.pb(35,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.Ib(-1,null,["60"])),(l()(),t.qb(38,0,null,null,3,"p",[["translate",""]],[[1,"data-label",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==(l.component.duration=120)&&t),t},null,null)),t.pb(39,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.Ib(-1,null,["120"])),(l()(),t.qb(42,0,null,null,6,"div",[["class","buzzer-btns"]],null,null,null,null,null)),(l()(),t.qb(43,0,null,null,5,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(44,0,null,null,2,"button",[["class","btn btn-default"],["id","find-me-start"],["translate",""]],[[8,"hidden",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.start()&&t),t},null,null)),t.pb(45,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Start"])),(l()(),t.hb(16777216,null,null,1,null,wu)),t.pb(48,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Pu)),t.pb(50,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,8,0,""),l(n,11,0,""),l(n,22,0,"duration","buzzing"===u.state||"pending"===u.state,u.duration),l(n,27,0,""),l(n,31,0,""),l(n,35,0,""),l(n,39,0,""),l(n,45,0,""),l(n,48,0,"buzzing"===u.state),l(n,50,0,"buzzing"===u.state||"pending"===u.state)},function(l,n){var u=n.component;l(n,2,0,t.Ab(n,6).ngClassUntouched,t.Ab(n,6).ngClassTouched,t.Ab(n,6).ngClassPristine,t.Ab(n,6).ngClassDirty,t.Ab(n,6).ngClassValid,t.Ab(n,6).ngClassInvalid,t.Ab(n,6).ngClassPending);var e=t.Jb(n,14,0,t.Ab(n,16).transform("Buzzer duration: {dur} s",l(n,15,0,u.duration)));l(n,14,0,e),l(n,18,0,t.Ab(n,24).ngClassUntouched,t.Ab(n,24).ngClassTouched,t.Ab(n,24).ngClassPristine,t.Ab(n,24).ngClassDirty,t.Ab(n,24).ngClassValid,t.Ab(n,24).ngClassInvalid,t.Ab(n,24).ngClassPending),l(n,26,0,t.Jb(n,26,0,t.Ab(n,28).transform("s"))),l(n,30,0,t.Jb(n,30,0,t.Ab(n,32).transform("s"))),l(n,34,0,t.Jb(n,34,0,t.Ab(n,36).transform("s"))),l(n,38,0,t.Jb(n,38,0,t.Ab(n,40).transform("s"))),l(n,44,0,"buzzing"===u.state,"pending"===u.state)})}function Su(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-find-me",[],null,null,null,xu,ku)),t.Fb(512,null,qu.a,qu.a,[m.a,g.a]),t.pb(2,114688,null,0,Iu.a,[qu.a,Pl.a],null,null)],function(l,n){l(n,2,0)},null)}var ju=t.mb("app-find-me",Iu.a,Su,{},{},[]),Mu=u("bJ/p"),Fu=u("yeMH"),Eu=u("nbXG"),Tu=u("3GWt"),Du=u("mAR0"),Ku=u("t/Na"),Ou=u("st5l"),Bu=u("008C"),Vu=t.ob({encapsulation:2,styles:[],data:{}});function _u(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,63,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Save Configuration to File"])),(l()(),t.qb(4,0,null,null,8,"form",[["action","/cgi-bin/config-backup"],["method","post"],["name","download"],["ngNoForm",""]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["You can backup the device configuration as a file on your computer and restore it later or transfer it to another device."])),(l()(),t.qb(8,0,null,null,0,"input",[["name","sessionid"],["type","hidden"]],[[8,"value",0]],null,null,null,null)),(l()(),t.qb(9,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-save-config"],["translate",""],["type","submit"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.setSession()&&t),t},null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Save"])),(l()(),t.qb(13,0,null,null,2,"h3",[["class","not-first-child"],["translate",""]],null,null,null,null,null)),t.pb(14,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Restore Device Configuration From File"])),(l()(),t.qb(16,0,null,null,30,"form",[["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,18).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,18).onReset()&&e),e},null,null)),t.pb(17,16384,null,0,Il.w,[],null,null),t.pb(18,4210688,[[2,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(20,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(21,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(22,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Please select the configuration file to be restored to this device."])),(l()(),t.qb(24,0,null,null,8,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,7,"div",[["class","file-upload-group clearfix"]],null,null,null,null,null)),(l()(),t.qb(26,0,null,null,2,"label",[["class","control-label"],["for","upload-file"],["translate",""]],null,null,null,null,null)),t.pb(27,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Browse ..."])),(l()(),t.qb(29,0,null,null,0,"input",[["id","upload-file"],["name","uploadedFile"],["type","file"]],null,[[null,"change"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==l.component.onFileSelected(u)&&t),t},null,null)),(l()(),t.qb(30,0,null,null,2,"div",[["class","uploaded-file"]],null,null,null,null,null)),(l()(),t.Ib(31,null,["",""])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(33,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(34,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-restore-config"],["translate",""],["type","button"]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.uploadFile()&&t),t},null,null)),t.pb(35,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Restore"])),(l()(),t.qb(37,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(38,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Reset Configuration"])),(l()(),t.qb(40,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(41,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["If you continue, all device settings will be deleted and the configuration will be resetted to factory defaults."])),(l()(),t.qb(43,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(44,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-reset-config"],["translate",""],["type","button"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.reset()&&t),t},null,null)),t.pb(45,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Reset"])),(l()(),t.qb(47,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t.qb(48,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t.qb(49,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(50,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Reboot Device"])),(l()(),t.qb(52,0,null,null,2,"p",[["class","no-margin"],["translate",""]],null,null,null,null,null)),t.pb(53,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Clicking the button below will restart your device."])),(l()(),t.qb(55,0,null,null,8,"form",[["class","form"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0,a=l.component;return"submit"===n&&(e=!1!==t.Ab(l,57).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,57).onReset()&&e),"submit"===n&&(e=!1!==a.reboot()&&e),e},null,null)),t.pb(56,16384,null,0,Il.w,[],null,null),t.pb(57,4210688,[["delosReboot",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(59,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(60,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(61,0,null,null,2,"button",[["class","btn btn-default"],["id","reboot"],["translate",""],["type","button"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.reboot()&&t),t},null,null)),t.pb(62,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Reboot"]))],function(l,n){l(n,2,0,""),l(n,6,0,""),l(n,11,0,""),l(n,14,0,""),l(n,22,0,""),l(n,27,0,""),l(n,35,0,""),l(n,38,0,""),l(n,41,0,""),l(n,45,0,""),l(n,50,0,""),l(n,53,0,""),l(n,62,0,"")},function(l,n){var u=n.component;l(n,8,0,t.sb(1,"",u.sessionid,"")),l(n,16,0,t.Ab(n,20).ngClassUntouched,t.Ab(n,20).ngClassTouched,t.Ab(n,20).ngClassPristine,t.Ab(n,20).ngClassDirty,t.Ab(n,20).ngClassValid,t.Ab(n,20).ngClassInvalid,t.Ab(n,20).ngClassPending),l(n,31,0,t.Jb(n,31,0,t.Ab(n,32).transform(u.confFile))),l(n,34,0,null==u.files),l(n,55,0,t.Ab(n,59).ngClassUntouched,t.Ab(n,59).ngClassTouched,t.Ab(n,59).ngClassPristine,t.Ab(n,59).ngClassDirty,t.Ab(n,59).ngClassValid,t.Ab(n,59).ngClassInvalid,t.Ab(n,59).ngClassPending)})}function Uu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Checking session ID ..."])),(l()(),t.qb(4,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-cancel"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.cancel()&&t),t},null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Cancel"]))],function(l,n){l(n,2,0,""),l(n,6,0,"")},null)}function $u(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,12,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"div",[["class","progress"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,3,"div",[["attr.aria-valuemax","100"],["attr.aria-valuemin","0"],["class","progress-bar"],["role","progressbar"]],[[1,"aria-valuenow",0]],null,null,null,null)),t.pb(3,278528,null,0,c.r,[t.t,t.k,t.E],{ngStyle:[0,"ngStyle"]},null),t.Db(4,{width:0}),(l()(),t.Ib(5,null,[" ","% "])),(l()(),t.qb(6,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Uploading ..."])),(l()(),t.qb(9,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-cancel-upload"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.cancel()&&t),t},null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Cancel"]))],function(l,n){var u=l(n,4,0,(n.component.progress||0)+"%");l(n,3,0,u),l(n,7,0,""),l(n,11,0,"")},function(l,n){var u=n.component;l(n,2,0,t.sb(1,"",u.progress||0,"")),l(n,5,0,u.progress||0)})}function Nu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-wait-ping",[],null,null,null,Mu.b,Mu.a)),t.pb(2,245760,[[1,4]],0,Fu.a,[Eu.a,Tu.a,g.a,El.a],null,null)],function(l,n){l(n,2,0)},null)}function Ru(l){return t.Kb(0,[t.Gb(671088640,1,{waitPingComponent:0}),t.Gb(671088640,2,{delos:0}),(l()(),t.qb(2,0,null,null,8,"div",[["class","vendor-dialogs"],["id","system-configuration"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,_u)),t.pb(4,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Uu)),t.pb(6,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,$u)),t.pb(8,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,Nu)),t.pb(10,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,4,0,"init"==u.step),l(n,6,0,"session-check"==u.step),l(n,8,0,"upload"==u.step),l(n,10,0,"wait"===u.step)},null)}function zu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-configuration",[],null,null,null,Ru,Vu)),t.Fb(512,null,Du.a,Du.a,[g.a,m.a,Ku.c]),t.pb(2,245760,null,0,Ou.a,[Pl.a,g.a,Bu.a,b.j,Mn.m,t.h,El.a,Du.a],null,null)],function(l,n){l(n,2,0)},null)}var Lu=t.mb("app-configuration",Ou.a,zu,{},{},[]),Ju=u("GMPP"),Gu=u("fS8q"),Wu=u("0KIB"),Hu=u("Gci6"),Xu=t.ob({encapsulation:2,styles:[],data:{}});function Qu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,13,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Download Firmware Version for Update"])),(l()(),t.qb(4,0,null,null,9,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Download Firmware:"])),(l()(),t.qb(8,0,null,null,5,"dd",[],null,null,null,null,null)),(l()(),t.Ib(9,null,[" "," "])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(11,0,null,null,2,"a",[["target","_blank"]],[[8,"href",4]],null,null,null,null)),(l()(),t.Ib(12,null,["",""])),t.Cb(131072,b.i,[b.j,t.h])],function(l,n){l(n,2,0,""),l(n,6,0,"")},function(l,n){var u=n.component;l(n,9,0,t.Jb(n,9,0,t.Ab(n,10).transform("You can find the latest firmware"))),l(n,11,0,t.sb(1,"",u.firmwareLink,"")),l(n,12,0,t.Jb(n,12,0,t.Ab(n,13).transform(u.hereText)))})}function Zu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"dt",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"label",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["There is newer version:"])),(l()(),t.qb(5,0,null,null,3,"dd",[],null,null,null,null,null)),(l()(),t.qb(6,0,null,null,2,"button",[["class","btn btn-default"],["id","accept-deployment"],["translate",""],["type","submit"]],[[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.updateFirmwareToLatest()&&t),t},null,null)),t.pb(7,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Update firmware to latest version"]))],function(l,n){l(n,3,0,""),l(n,7,0,"")},function(l,n){l(n,6,0,n.component.updatingFirmware)})}function Yu(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,8,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,3,"dt",[],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"label",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Automatic Update:"])),(l()(),t.qb(5,0,null,null,3,"dd",[],null,null,null,null,null)),(l()(),t.qb(6,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","0"],["id","auto-fwupdate-enable"],["name","autoUpdatesEnabled"],["trueValue","1"],["type","checkbox"]],[[8,"value",0],[8,"checked",0],[8,"disabled",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,8).onInput(u)&&e),"valueChange"===n&&(e=!1!==(a.autoUpdatesEnabled=u)&&e),"click"===n&&(e=!1!==a.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(8,16384,null,0,Vl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"})],function(l,n){l(n,3,0,""),l(n,8,0,"1","0")},function(l,n){var u=n.component;l(n,6,0,u.autoUpdatesEnabled,1==u.autoUpdatesEnabled,u.updatingFirmware)})}function lt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,24,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"p",[["style","margin-bottom: 15px;"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Please select the firmware file to be loaded onto this device."])),(l()(),t.qb(4,0,null,null,20,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Firmware file:"])),(l()(),t.qb(8,0,null,null,10,"dd",[],null,null,null,null,null)),(l()(),t.qb(9,0,null,null,9,"div",[["class"," clearfix"]],null,null,null,null,null)),t.pb(10,278528,null,0,c.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(11,{"file-upload-group":0}),(l()(),t.qb(12,0,null,null,2,"label",[["class","control-label"],["for","firmware-browse"],["translate",""]],null,null,null,null,null)),t.pb(13,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Browse ..."])),(l()(),t.qb(15,0,null,null,0,"input",[["id","firmware-browse"],["name","file"],["type","file"]],null,[[null,"change"]],function(l,n,u){var t=!0;return"change"===n&&(t=!1!==l.component.onFileSelected(u)&&t),t},null,null)),(l()(),t.qb(16,0,null,null,2,"div",[["class","uploaded-file"]],null,null,null,null,null)),(l()(),t.Ib(17,null,["",""])),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(19,0,null,null,1,"dt",[],null,null,null,null,null)),(l()(),t.Ib(-1,null,["\xa0"])),(l()(),t.qb(21,0,null,null,3,"dd",[["style","padding-top: 15px;"]],null,null,null,null,null)),(l()(),t.qb(22,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-update"],["translate",""],["type","submit"]],[[8,"disabled",0]],null,null,null,null)),t.pb(23,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Update firmware"]))],function(l,n){var u=n.component;l(n,2,0,""),l(n,6,0,"");var t=l(n,11,0,!u.showFileUploadInput);l(n,10,0," clearfix",t),l(n,13,0,""),l(n,23,0,"")},function(l,n){var u=n.component;l(n,17,0,t.Jb(n,17,0,t.Ab(n,18).transform(u.firmwareFile))),l(n,22,0,null==u.files)})}function nt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Checking session ID ..."])),(l()(),t.qb(4,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(5,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-cancel"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.cancel()&&t),t},null,null)),t.pb(6,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Cancel"]))],function(l,n){l(n,2,0,""),l(n,6,0,"")},null)}function ut(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,12,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,4,"div",[["class","progress"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,3,"div",[["attr.aria-valuemax","100"],["attr.aria-valuemin","0"],["class","progress-bar"],["role","progressbar"]],[[1,"aria-valuenow",0]],null,null,null,null)),t.pb(3,278528,null,0,c.r,[t.t,t.k,t.E],{ngStyle:[0,"ngStyle"]},null),t.Db(4,{width:0}),(l()(),t.Ib(5,null,[" ","% "])),(l()(),t.qb(6,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(7,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Uploading firmware image ..."])),(l()(),t.qb(9,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-update-cancel"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.cancel()&&t),t},null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Cancel"]))],function(l,n){var u=l(n,4,0,(n.component.progress||0)+"%");l(n,3,0,u),l(n,7,0,""),l(n,11,0,"")},function(l,n){var u=n.component;l(n,2,0,t.sb(1,"",u.progress||0,"")),l(n,5,0,u.progress||0)})}function tt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,9,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"div",[["class","progress"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,0,"div",[["attr.aria-valuemax","100"],["attr.aria-valuemin","0"],["attr.aria-valuenow","100"],["class","progress-bar progress-bar-striped active"],["role","progressbar"],["style","width: 100%;"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(4,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Checking firmware image ..."])),(l()(),t.qb(6,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(7,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-update-cancel-test"],["translate",""]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.cancel()&&t),t},null,null)),t.pb(8,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Cancel"]))],function(l,n){l(n,4,0,""),l(n,8,0,"")},null)}function et(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"app-wait-ping",[],null,null,null,Mu.b,Mu.a)),t.pb(2,245760,[[2,4]],0,Fu.a,[Eu.a,Tu.a,g.a,El.a],null,null)],function(l,n){l(n,2,0)},null)}function at(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,3,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Please login again."]))],function(l,n){l(n,2,0,"")},null)}function st(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,0,"div",[],null,null,null,null,null))],null,null)}function it(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,t.Ab(n.parent,5).form.invalid,"save")},null)}function ot(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancelSave()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function rt(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),t.Gb(671088640,2,{waitPingComponent:0}),(l()(),t.qb(2,0,null,null,51,"div",[["class","vendor-dialogs main-system-firmware"],["id","firmware"]],null,null,null,null,null)),(l()(),t.qb(3,0,null,null,50,"form",[["class","form"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0,a=l.component;return"submit"===n&&(e=!1!==t.Ab(l,5).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,5).onReset()&&e),"submit"===n&&(e=!1!==a.uploadFile()&&e),e},null,null)),t.pb(4,16384,null,0,Il.w,[],null,null),t.pb(5,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(7,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(8,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(9,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Current Firmware"])),(l()(),t.qb(11,0,null,null,5,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(12,0,null,null,2,"dt",[["translate",""]],null,null,null,null,null)),t.pb(13,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Firmware version:"])),(l()(),t.qb(15,0,null,null,1,"dd",[["id","firmware-version"]],null,null,null,null,null)),(l()(),t.Ib(16,null,[""," (",")"])),(l()(),t.hb(16777216,null,null,2,null,Qu)),t.pb(18,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),t.Cb(131072,c.b,[t.h]),(l()(),t.qb(20,0,null,null,2,"h3",[["translate",""],["translate-context","title-case"]],null,null,null,null,null)),t.pb(21,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Update firmware"])),(l()(),t.hb(16777216,null,null,1,null,Zu)),t.pb(24,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(25,0,null,null,8,"dl",[["class","dl-horizontal"]],null,null,null,null,null)),(l()(),t.qb(26,0,null,null,3,"dt",[],null,null,null,null,null)),(l()(),t.qb(27,0,null,null,2,"label",[["translate",""]],null,null,null,null,null)),t.pb(28,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Automatically search for updates:"])),(l()(),t.qb(30,0,null,null,3,"dd",[],null,null,null,null,null)),(l()(),t.qb(31,0,null,null,2,"input",[["appDelosCheckboxValue",""],["falseValue","1"],["id","fwupdate-enable"],["name","autoFWUdisabled"],["trueValue","0"],["type","checkbox"]],[[8,"value",0],[8,"checked",0],[8,"disabled",0]],[[null,"valueChange"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,33).onInput(u)&&e),"valueChange"===n&&(e=!1!==(a.autoFWUdisabled=u)&&e),"click"===n&&(e=!1!==a.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(33,16384,null,0,Vl.a,[],{trueValue:[0,"trueValue"],falseValue:[1,"falseValue"]},{valueChange:"valueChange"}),(l()(),t.hb(16777216,null,null,1,null,Yu)),t.pb(35,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,lt)),t.pb(37,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,nt)),t.pb(39,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,ut)),t.pb(41,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,tt)),t.pb(43,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,et)),t.pb(45,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,at)),t.pb(47,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,st)),t.pb(49,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,it)),t.pb(51,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,ot)),t.pb(53,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,9,0,""),l(n,13,0,""),l(n,18,0,!t.Jb(n,18,0,t.Ab(n,19).transform(u.customizationService.hideUpdateLink))),l(n,21,0,""),l(n,24,0,u.newVersionOfFirmware),l(n,28,0,""),l(n,33,0,"0","1"),l(n,35,0,"1"!==u.autoFWUdisabled),l(n,37,0,"select"==u.step||"failure"==u.step),l(n,39,0,"session-check"==u.step),l(n,41,0,"upload"==u.step),l(n,43,0,"test"==u.step),l(n,45,0,"wait"===u.step),l(n,47,0,"success"===u.step),l(n,49,0,"failure"===u.step),l(n,51,0,u.showButtons),l(n,53,0,u.showButtons)},function(l,n){var u=n.component;l(n,3,0,t.Ab(n,7).ngClassUntouched,t.Ab(n,7).ngClassTouched,t.Ab(n,7).ngClassPristine,t.Ab(n,7).ngClassDirty,t.Ab(n,7).ngClassValid,t.Ab(n,7).ngClassInvalid,t.Ab(n,7).ngClassPending),l(n,16,0,u.firmwareVersion,u.firmwareBuildDate),l(n,31,0,u.autoFWUdisabled,0==u.autoFWUdisabled,u.updatingFirmware)})}function bt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-firmware",[],null,null,null,rt,Xu)),t.Fb(512,null,Ju.a,Ju.a,[g.a,m.a,Ku.c]),t.pb(2,245760,null,0,Gu.a,[t.h,m.a,Ju.a,Pl.a,Mn.m,b.j,g.a,El.a,Wu.a,Hu.a],null,null)],function(l,n){l(n,2,0)},null)}var ct=t.mb("app-firmware",Gu.a,bt,{},{},[]),dt=u("Cf0Y"),pt=u("ZNe7"),gt=t.ob({encapsulation:2,styles:[],data:{}});function mt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,9,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"label",[["for","configsyncDomain"]],null,null,null,null,null)),(l()(),t.Ib(-1,null,["Domain"])),(l()(),t.qb(3,0,null,null,6,"input",[["class","small-margin-left"],["id","configsyncDomain"],["name","configsyncDomain"],["type","number"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"change"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,4)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,4).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,4)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,4)._compositionEnd(u.target.value)&&e),"change"===n&&(e=!1!==t.Ab(l,5).onChange(u.target.value)&&e),"input"===n&&(e=!1!==t.Ab(l,5).onChange(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,5).onTouched()&&e),"ngModelChange"===n&&(e=!1!==(a.settings.domain=u)&&e),"change"===n&&(e=!1!==a.markAsDirty()&&e),e},null,null)),t.pb(4,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.pb(5,16384,null,0,Il.u,[t.E,t.k],null,null),t.Fb(1024,null,Il.i,function(l,n){return[l,n]},[Il.d,Il.u]),t.pb(7,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(9,16384,null,0,Il.k,[[4,Il.j]],null,null)],function(l,n){l(n,7,0,"configsyncDomain",n.component.settings.domain)},function(l,n){l(n,3,0,t.Ab(n,9).ngClassUntouched,t.Ab(n,9).ngClassTouched,t.Ab(n,9).ngClassPristine,t.Ab(n,9).ngClassDirty,t.Ab(n,9).ngClassValid,t.Ab(n,9).ngClassInvalid,t.Ab(n,9).ngClassPending)})}function ft(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","save"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.save()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{disableFloatBtn:[0,"disableFloatBtn"],floatBtnType:[1,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,t.Ab(n.parent,4).invalid,"save")},null)}function ht(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"app-float-btn",[["floatBtnType","cancel"]],null,[[null,"floatBtnClick"]],function(l,n,u){var t=!0;return"floatBtnClick"===n&&(t=!1!==l.component.cancel()&&t),t},wn.b,wn.a)),t.pb(1,114688,null,0,Pn.a,[],{floatBtnType:[0,"floatBtnType"]},{floatBtnClick:"floatBtnClick"})],function(l,n){l(n,1,0,"cancel")},null)}function vt(l){return t.Kb(0,[t.Gb(402653184,1,{delos:0}),(l()(),t.qb(1,0,null,null,38,"div",[["class","vendor-dialogs"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,37,"form",[["autocomplete","off"],["class","form-horizontal"],["id","sonConfig"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0;return"submit"===n&&(e=!1!==t.Ab(l,4).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,4).onReset()&&e),e},null,null)),t.pb(3,16384,null,0,Il.w,[],null,null),t.pb(4,4210688,[[1,4],["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(6,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(7,0,null,null,2,"h3",[["class","no_margin"],["translate",""]],null,null,null,null,null)),t.pb(8,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Config Sync"])),(l()(),t.qb(10,0,null,null,13,"p",[],null,null,null,null,null)),(l()(),t.qb(11,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(12,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["The entire WiFi configuration is transferred to all Config Sync compatible devices in your network."])),(l()(),t.qb(14,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t.qb(15,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t.qb(16,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(17,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["This includes the following settings: WiFi network, guest network, Mesh functionality, WiFi schedule control and time server settings."])),(l()(),t.qb(19,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t.qb(20,0,null,null,0,"br",[],null,null,null,null,null)),(l()(),t.qb(21,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(22,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Please note that the WiFi is always switched on and off throughout the network. First, exit Config Sync on the device, that you want to configure or switch separately."])),(l()(),t.qb(24,0,null,null,11,"div",[["class","row"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,7,"div",[["class","col-sm-6"]],null,null,null,null,null)),(l()(),t.qb(26,0,null,null,6,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(27,0,null,null,2,"input",[["appDelosCheckboxValue",""],["id","configsyncEnable"],["name","configsyncEnable"],["type","checkbox"]],[[8,"checked",0]],[[null,"change"],[null,"click"]],function(l,n,u){var e=!0,a=l.component;return"click"===n&&(e=!1!==t.Ab(l,29).onInput(u)&&e),"change"===n&&(e=0!=(a.settings.enabled=!a.settings.enabled)&&e),"click"===n&&(e=!1!==a.markAsDirty()&&e),e},null,null)),t.Fb(135680,null,Il.n,Il.n,[[2,Il.c],[8,null],[8,null],[8,null]]),t.pb(29,16384,null,0,Vl.a,[],null,null),(l()(),t.qb(30,0,null,null,2,"label",[["for","configsyncEnable"],["translate",""]],null,null,null,null,null)),t.pb(31,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Enable"])),(l()(),t.qb(33,0,null,null,2,"div",[["class","col-sm-6"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,mt)),t.pb(35,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,ft)),t.pb(37,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,ht)),t.pb(39,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,8,0,""),l(n,12,0,""),l(n,17,0,""),l(n,22,0,""),l(n,31,0,""),l(n,35,0,u.isDomainConfigurable()),l(n,37,0,t.Ab(n,4).dirty),l(n,39,0,t.Ab(n,4).dirty)},function(l,n){var u=n.component;l(n,2,0,t.Ab(n,6).ngClassUntouched,t.Ab(n,6).ngClassTouched,t.Ab(n,6).ngClassPristine,t.Ab(n,6).ngClassDirty,t.Ab(n,6).ngClassValid,t.Ab(n,6).ngClassInvalid,t.Ab(n,6).ngClassPending),l(n,27,0,u.settings.enabled)})}function Ct(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-config-sync",[],null,null,null,vt,gt)),t.Fb(512,null,dt.a,dt.a,[g.a,m.a]),t.pb(2,245760,null,0,pt.a,[Pl.a,dt.a,El.a],null,null)],function(l,n){l(n,2,0)},null)}var At=t.mb("app-config-sync",pt.a,Ct,{},{},[]),yt=u("P62w"),qt=u("U4A+"),It=t.ob({encapsulation:2,styles:[],data:{}});function kt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[["class","col-md-offset-7 col-md-2 col-xs-6"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,1,"button",[["class","btn btn-default"],["id","btn-remove"],["type","button"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.ubusClearQueue()&&t),t},null,null)),(l()(),t.qb(2,0,null,null,0,"span",[["class","glyphicon glyphicon-trash"]],null,null,null,null,null))],null,null)}function wt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"label",[["class","control-label"],["for","ubusQueue"],["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["current ubus request queue"])),(l()(),t.qb(4,0,null,null,2,"pre",[["id","ubusQueue"]],null,null,null,null,null)),(l()(),t.Ib(5,null,["",""])),t.Cb(0,c.h,[])],function(l,n){l(n,2,0,"")},function(l,n){var u=n.component;l(n,5,0,t.Jb(n,5,0,t.Ab(n,6).transform(u.ubusQueue)))})}function Pt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,9,"div",[],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,5,"label",[["class","control-label"]],null,null,null,null,null)),(l()(),t.qb(2,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),t.pb(3,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Answer of"])),(l()(),t.Ib(5,null,[" ",""])),t.Cb(0,c.h,[]),(l()(),t.qb(7,0,null,null,2,"pre",[],null,null,null,null,null)),(l()(),t.Ib(8,null,["",""])),t.Cb(0,c.h,[])],function(l,n){l(n,3,0,"")},function(l,n){l(n,5,0,t.Jb(n,5,0,t.Ab(n,6).transform(n.context.$implicit.request))),l(n,8,0,t.Jb(n,8,0,t.Ab(n,9).transform(n.context.$implicit.response)))})}function xt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"div",[],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,Pt)),t.pb(2,278528,null,0,c.n,[t.P,t.M,t.s],{ngForOf:[0,"ngForOf"]},null)],function(l,n){l(n,2,0,n.component.ubusData)},null)}function St(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,67,"div",[["class","vendor-dialogs"],["id","ubus-test"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"h3",[["translate",""]],null,null,null,null,null)),t.pb(2,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["Only for development"])),(l()(),t.qb(4,0,null,null,59,"form",[["class","form-horizontal"],["name","delos"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(l,n,u){var e=!0,a=l.component;return"submit"===n&&(e=!1!==t.Ab(l,6).onSubmit(u)&&e),"reset"===n&&(e=!1!==t.Ab(l,6).onReset()&&e),"submit"===n&&(e=!1!==a.ubusCall()&&e),e},null,null)),t.pb(5,16384,null,0,Il.w,[],null,null),t.pb(6,4210688,[["delos",4]],0,Il.m,[[8,null],[8,null]],null,null),t.Fb(2048,null,Il.c,null,[Il.m]),t.pb(8,16384,null,0,Il.l,[[4,Il.c]],null,null),(l()(),t.qb(9,0,null,null,10,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(10,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","session"],["translate",""]],null,null,null,null,null)),t.pb(11,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" current session "])),(l()(),t.qb(13,0,null,null,6,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(14,0,null,null,5,"input",[["class","form-control"],["id","session"],["name","session"],["route-focus",""]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,15)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,15).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,15)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,15)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.sessionid=u)&&e),e},null,null)),t.pb(15,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(17,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(19,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.qb(20,0,null,null,11,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(21,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","ubusSection"],["translate",""]],null,null,null,null,null)),t.pb(22,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" ubus section "])),(l()(),t.qb(24,0,null,null,7,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(25,0,null,null,6,"input",[["class","form-control"],["id","ubusSection"],["name","ubusSection"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,26)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,26).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,26)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,26)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.ubusSection=u)&&e),e},null,null)),t.pb(26,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(28,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(30,16384,null,0,Il.k,[[4,Il.j]],null,null),t.Cb(131072,b.i,[b.j,t.h]),(l()(),t.qb(32,0,null,null,10,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(33,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","ubusCallee"],["translate",""]],null,null,null,null,null)),t.pb(34,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" ubus callee "])),(l()(),t.qb(36,0,null,null,6,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(37,0,null,null,5,"input",[["class","form-control"],["id","ubusCallee"],["name","ubusCallee"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,38)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,38).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,38)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,38)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.ubusCallee=u)&&e),e},null,null)),t.pb(38,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(40,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(42,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.qb(43,0,null,null,13,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(44,0,null,null,2,"label",[["class","col-md-3 control-label"],["for","ubusParameter"],["translate",""]],null,null,null,null,null)),t.pb(45,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" ubus data "])),(l()(),t.qb(47,0,null,null,6,"div",[["class","col-md-7"]],null,null,null,null,null)),(l()(),t.qb(48,0,null,null,5,"input",[["class","form-control"],["id","ubusParameter"],["name","ubusParameter"],["style","margin-bottom:7px;"]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(l,n,u){var e=!0,a=l.component;return"input"===n&&(e=!1!==t.Ab(l,49)._handleInput(u.target.value)&&e),"blur"===n&&(e=!1!==t.Ab(l,49).onTouched()&&e),"compositionstart"===n&&(e=!1!==t.Ab(l,49)._compositionStart()&&e),"compositionend"===n&&(e=!1!==t.Ab(l,49)._compositionEnd(u.target.value)&&e),"ngModelChange"===n&&(e=!1!==(a.ubusParameter=u)&&e),e},null,null)),t.pb(49,16384,null,0,Il.d,[t.E,t.k,[2,Il.a]],null,null),t.Fb(1024,null,Il.i,function(l){return[l]},[Il.d]),t.pb(51,671744,null,0,Il.n,[[2,Il.c],[8,null],[8,null],[6,Il.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),t.Fb(2048,null,Il.j,null,[Il.n]),t.pb(53,16384,null,0,Il.k,[[4,Il.j]],null,null),(l()(),t.qb(54,0,null,null,2,"div",[["class","col-md-2"]],null,null,null,null,null)),(l()(),t.qb(55,0,null,null,1,"button",[["class","btn btn-default"],["type","button"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.addToUbusQueue()&&t),t},null,null)),(l()(),t.qb(56,0,null,null,0,"span",[["class","glyphicon glyphicon-plus"]],null,null,null,null,null)),(l()(),t.qb(57,0,null,null,6,"div",[["class","form-group"]],null,null,null,null,null)),(l()(),t.qb(58,0,null,null,3,"div",[["class","col-md-3 col-xs-6"]],null,null,null,null,null)),(l()(),t.qb(59,0,null,null,2,"button",[["class","btn btn-default"],["translate",""],["type","button"]],null,[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.ubusCall()&&t),t},null,null)),t.pb(60,8536064,null,0,b.d,[b.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,["call ubus"])),(l()(),t.hb(16777216,null,null,1,null,kt)),t.pb(63,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,wt)),t.pb(65,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.hb(16777216,null,null,1,null,xt)),t.pb(67,16384,null,0,c.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null)],function(l,n){var u=n.component;l(n,2,0,""),l(n,11,0,""),l(n,17,0,"session",u.sessionid),l(n,22,0,""),l(n,28,0,"ubusSection",u.ubusSection),l(n,34,0,""),l(n,40,0,"ubusCallee",u.ubusCallee),l(n,45,0,""),l(n,51,0,"ubusParameter",u.ubusParameter),l(n,60,0,""),l(n,63,0,u.showUbusQueue),l(n,65,0,u.showUbusQueue),l(n,67,0,u.showUbusData)},function(l,n){var u=n.component;l(n,4,0,t.Ab(n,8).ngClassUntouched,t.Ab(n,8).ngClassTouched,t.Ab(n,8).ngClassPristine,t.Ab(n,8).ngClassDirty,t.Ab(n,8).ngClassValid,t.Ab(n,8).ngClassInvalid,t.Ab(n,8).ngClassPending),l(n,14,0,t.sb(1,"",u.sessionid,""),t.Ab(n,19).ngClassUntouched,t.Ab(n,19).ngClassTouched,t.Ab(n,19).ngClassPristine,t.Ab(n,19).ngClassDirty,t.Ab(n,19).ngClassValid,t.Ab(n,19).ngClassInvalid,t.Ab(n,19).ngClassPending),l(n,25,0,t.sb(1,"",t.Jb(n,25,0,t.Ab(n,31).transform("Network interface")),""),t.Ab(n,30).ngClassUntouched,t.Ab(n,30).ngClassTouched,t.Ab(n,30).ngClassPristine,t.Ab(n,30).ngClassDirty,t.Ab(n,30).ngClassValid,t.Ab(n,30).ngClassInvalid,t.Ab(n,30).ngClassPending),l(n,37,0,t.Ab(n,42).ngClassUntouched,t.Ab(n,42).ngClassTouched,t.Ab(n,42).ngClassPristine,t.Ab(n,42).ngClassDirty,t.Ab(n,42).ngClassValid,t.Ab(n,42).ngClassInvalid,t.Ab(n,42).ngClassPending),l(n,48,0,t.Ab(n,53).ngClassUntouched,t.Ab(n,53).ngClassTouched,t.Ab(n,53).ngClassPristine,t.Ab(n,53).ngClassDirty,t.Ab(n,53).ngClassValid,t.Ab(n,53).ngClassInvalid,t.Ab(n,53).ngClassPending)})}function jt(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"app-ubus-test",[],null,null,null,St,It)),t.Fb(512,null,yt.a,yt.a,[m.a]),t.pb(2,114688,null,0,qt.a,[yt.a,g.a,Pl.a],null,null)],function(l,n){l(n,2,0)},null)}var Mt=t.mb("app-ubus-test",qt.a,jt,{},{},[]),Ft=u("S7LP"),Et=u("zCE2"),Tt=u("yGOH"),Dt=u("LLTo"),Kt=u("Fq6B"),Ot=u("Aivk"),Bt=u("9Xeq"),Vt=u("AW84"),_t=u("rSzr"),Ut=u("ZLSo"),$t=u("H4wX"),Nt=u("bKdQ"),Rt=u("ub4/");u.d(n,"SystemModuleNgFactory",function(){return zt});var zt=t.nb(e,[],function(l){return t.xb([t.yb(512,t.j,t.cb,[[8,[a.a,s.a,i.a,o.a,r.a,ql,uu,yu,ju,Lu,ct,At,Mt]],[3,t.j],t.x]),t.yb(4608,c.q,c.p,[t.u,[2,c.B]]),t.yb(4608,Il.x,Il.x,[]),t.yb(4608,Ft.a,Ft.a,[]),t.yb(4608,jl.a,jl.a,[t.j,t.z,t.q,Ft.a,t.g]),t.yb(4608,Bu.a,Bu.a,[t.F,jl.a]),t.yb(4608,Pl.a,Pl.a,[[3,Pl.a]]),t.yb(4608,Ku.k,Ku.q,[c.d,t.B,Ku.o]),t.yb(4608,Ku.r,Ku.r,[Ku.k,Ku.p]),t.yb(5120,Ku.a,function(l){return[l]},[Ku.r]),t.yb(4608,Ku.n,Ku.n,[]),t.yb(6144,Ku.l,null,[Ku.n]),t.yb(4608,Ku.j,Ku.j,[Ku.l]),t.yb(6144,Ku.b,null,[Ku.j]),t.yb(4608,Ku.g,Ku.m,[Ku.b,t.q]),t.yb(4608,Ku.c,Ku.c,[Ku.g]),t.yb(4608,Tu.a,Tu.a,[Ku.c]),t.yb(4608,Sl.a,Sl.a,[]),t.yb(4608,h,h,[m.a,g.a]),t.yb(1073742336,Et.a,Et.a,[]),t.yb(1073742336,c.c,c.c,[]),t.yb(1073742336,Il.t,Il.t,[]),t.yb(1073742336,Il.e,Il.e,[]),t.yb(1073742336,b.g,b.g,[]),t.yb(1073742336,Tt.a,Tt.a,[]),t.yb(1073742336,Dt.a,Dt.a,[]),t.yb(1073742336,Kt.a,Kt.a,[]),t.yb(1073742336,Ot.a,Ot.a,[]),t.yb(1073742336,Bt.a,Bt.a,[]),t.yb(1073742336,Vt.a,Vt.a,[]),t.yb(1073742336,_t.a,_t.a,[]),t.yb(1073742336,Ut.a,Ut.a,[]),t.yb(1073742336,Mn.p,Mn.p,[[2,Mn.v],[2,Mn.m]]),t.yb(1073742336,$t.a,$t.a,[]),t.yb(1073742336,Ku.e,Ku.e,[]),t.yb(1073742336,Ku.d,Ku.d,[]),t.yb(1073742336,Nt.a,Nt.a,[]),t.yb(1073742336,e,e,[]),t.yb(1024,Mn.j,function(){return[[{path:"status",component:hl.a,data:{displayName:"Status",retailOrder:0}},{path:"management",component:zn.a,data:{displayName:"Management",retailOrder:10},canDeactivate:[Rt.a]},{path:"services",component:eu.a,data:{displayName:"Services",appHideForRetail:!0},canDeactivate:[Rt.a]},{path:"findme",component:Iu.a,data:{displayName:"Find Me",retailOrder:40,supportBuzzerDevices:["1750c","1750c-qsdk"]},canDeactivate:[Rt.a]},{path:"configuration",component:Ou.a,data:{displayName:"Configuration",retailOrder:20},canDeactivate:[Rt.a]},{path:"firmware",component:Gu.a,data:{displayName:"Firmware",retailOrder:30},canDeactivate:[Rt.a]},{path:"configsync",component:pt.a,data:{displayName:"Config Sync",retailOrder:50},canDeactivate:[Rt.a]},{path:"ubustest",component:qt.a,data:{displayName:"ubus Test",hideForProduction:!0,retailOrder:60}}]]},[]),t.yb(256,Ku.o,"XSRF-TOKEN",[]),t.yb(256,Ku.p,"X-XSRF-TOKEN",[])])})},LLTo:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){}}()},UhSo:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){function l(){}return l.prototype.transform=function(l,n,u){return l&&l.length?n?(n=n.toLowerCase(),l.filter(function(t){return u?Array.isArray(u)?u.map(function(l){return t[l].toString().toLowerCase().includes(n)}).includes(!0):t[u].toString().toLowerCase().includes(n):"object"==typeof l[0]?JSON.stringify(Object.values(t)).toLowerCase().includes(n):t.toLowerCase().includes(n)})):l:[]},l}()},"bJ/p":function(l,n,u){"use strict";var t=u("CcnG"),e=u("A7o+"),a=u("Ip0R");u("yeMH"),u("nbXG"),u("3GWt"),u("jGGy"),u("Obbf"),u.d(n,"a",function(){return s}),u.d(n,"b",function(){return o});var s=t.ob({encapsulation:0,styles:[[""]],data:{}});function i(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"p",[],null,null,null,null,null)),(l()(),t.Ib(1,null,[" ","\n"])),t.Cb(131072,e.i,[e.j,t.h])],null,function(l,n){var u=n.component;l(n,1,0,t.Jb(n,1,0,t.Ab(n,2).transform(u.waitPingDescription)))})}function o(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,6,"div",[["class","progress"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,5,"div",[["attr.aria-valuemax","100"],["attr.aria-valuemin","0"],["class","progress-bar changed"],["role","progressbar"]],[[1,"aria-valuenow",0]],null,null,null,null)),t.pb(2,278528,null,0,a.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),t.Db(3,{"progress-bar-striped":0,active:1}),t.pb(4,278528,null,0,a.r,[t.t,t.k,t.E],{ngStyle:[0,"ngStyle"]},null),t.Db(5,{width:0}),(l()(),t.Ib(6,null,[" "," % "])),(l()(),t.hb(16777216,null,null,1,null,i)),t.pb(8,16384,null,0,a.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(9,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(10,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" This page will be reloaded automatically, when the action has finished.\n"])),(l()(),t.qb(12,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),t.pb(13,8536064,null,0,e.d,[e.j,t.k,t.h],{translate:[0,"translate"]},null),(l()(),t.Ib(-1,null,[" Should the device no longer be accessible with changed settings, you have to reload the page manually, after having re-established the connection.\n"]))],function(l,n){var u=n.component,t=l(n,3,0,99===u.iprogress,99===u.iprogress);l(n,2,0,"progress-bar changed",t);var e=l(n,5,0,(u.progress||0)+"%");l(n,4,0,e),l(n,8,0,void 0!==u.waitPingDescription),l(n,10,0,""),l(n,13,0,"")},function(l,n){var u=n.component;l(n,1,0,t.sb(1,"",u.iprogress||0,"")),l(n,6,0,u.iprogress)})}},chmc:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){this.placement="top",this.triggers="click",this.outsideClick=!1}}()},mGS5:function(l,n,u){"use strict";u.d(n,"a",function(){return c});var t=u("CcnG"),e=u("Ip0R"),a=u("6dTq"),s=u("chmc"),i=t.ob({encapsulation:0,styles:[".bs-popover-top[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-popover-bottom[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      left: 50%;\n      margin-left: -8px;\n    }\n    .bs-popover-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-popover-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      top: 50%;\n      margin-top: -8px;\n    }"],data:{}});function o(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"h3",[["class","popover-title popover-header"]],null,null,null,null,null)),(l()(),t.Ib(1,null,["",""]))],null,function(l,n){l(n,1,0,n.component.title)})}function r(l){return t.Kb(2,[(l()(),t.qb(0,0,null,null,0,"div",[["class","popover-arrow arrow"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,o)),t.pb(2,16384,null,0,e.o,[t.P,t.M],{ngIf:[0,"ngIf"]},null),(l()(),t.qb(3,0,null,null,1,"div",[["class","popover-content popover-body"]],null,null,null,null,null)),t.zb(null,0)],function(l,n){l(n,2,0,n.component.title)},null)}function b(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"popover-container",[["role","tooltip"],["style","display:block;"]],[[8,"className",0],[2,"show",null]],null,null,r,i)),t.pb(1,49152,null,0,a.a,[s.a],null,null)],null,function(l,n){l(n,0,0,"popover in popover-"+t.Ab(n,1).placement+" bs-popover-"+t.Ab(n,1).placement+" "+t.Ab(n,1).placement+" "+t.Ab(n,1).containerClass,!t.Ab(n,1).isBs3)})}var c=t.mb("popover-container",a.a,b,{placement:"placement",title:"title"},{},["*"])},nQCY:function(l,n,u){"use strict";u.d(n,"a",function(){return a}),u.d(n,"b",function(){return s});var t=u("CcnG"),e=u("Ip0R"),a=(u("5SxG"),t.ob({encapsulation:2,styles:[],data:{}}));function s(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,2,"button",[["class","delos-float-action"],["type","button"]],[[8,"id",0],[8,"disabled",0]],[[null,"click"]],function(l,n,u){var t=!0;return"click"===n&&(t=!1!==l.component.customFn()&&t),t},null,null)),t.pb(1,278528,null,0,e.m,[t.s,t.t,t.k,t.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(l()(),t.qb(2,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],function(l,n){l(n,1,0,"delos-float-action",n.component.floatBtn.className)},function(l,n){var u=n.component;l(n,0,0,t.sb(1,"",u.floatBtn.className,"-btn"),u.disableFloatBtn),l(n,2,0,t.sb(1,"glyphicon glyphicon-",u.floatBtn.icon,""))})}},rSzr:function(l,n,u){"use strict";u.d(n,"a",function(){return t});var t=function(){return function(){}}()},tl7y:function(l,n,u){"use strict";u.d(n,"a",function(){return s}),u.d(n,"b",function(){return r});var t=u("CcnG"),e=u("xR9I"),a=u("Sxbm"),s=(u("Eidh"),t.ob({encapsulation:2,styles:[],data:{}}));function i(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","dataTables_filter"]],null,null,null,null,null)),t.zb(null,0)],null,null)}function o(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,1,"div",[["class","col-md-5 hint-text displayed-entires"]],null,null,null,null,null)),t.zb(null,1)],null,null)}function r(l){return t.Kb(0,[(l()(),t.qb(0,0,null,null,7,"div",[["class","row filter-row"]],null,null,null,null,null)),(l()(),t.qb(1,0,null,null,2,"div",[["class","col-md-4"]],null,null,null,null,null)),(l()(),t.hb(16777216,null,null,1,null,i)),t.pb(3,212992,null,0,e.a,[t.M,t.P,a.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.hb(16777216,null,null,1,null,o)),t.pb(5,212992,null,0,e.a,[t.M,t.P,a.a],{renderTemplate:[0,"renderTemplate"]},null),(l()(),t.qb(6,0,null,null,1,"div",[["class","col-xs-6 col-md-3 text-right pull-right"]],null,null,null,null,null)),t.zb(null,2)],function(l,n){var u=n.component;l(n,3,0,u.shouldShowForRetail),l(n,5,0,u.shouldShowForRetail)},null)}}}]);
\ No newline at end of file
diff --git a/www/9.2b074387f6e011719c48.js b/www/9.2b074387f6e011719c48.js
new file mode 100644
index 0000000..a9826c0
--- /dev/null
+++ b/www/9.2b074387f6e011719c48.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{"5SxG":function(n,t,l){"use strict";l.d(t,"a",function(){return i});var o=l("CcnG"),e=l("+3se"),i=function(){function n(){this.floatBtnClick=new o.m,this.floatBtn={className:"",icon:"",type:"",id:""}}return n.prototype.customFn=function(){this.floatBtnClick.emit()},n.prototype.ngOnInit=function(){"cancel"==this.floatBtnType?(this.floatBtn.className="delos-float-cancel",this.floatBtn.icon="remove",this.floatBtn.type="button"):(this.floatBtn.className="delos-float-save",this.floatBtn.icon="floppy-disk",this.floatBtn.type="submit"),this.floatBtn.id=this.floatBtn.type+e.a.newGuid()},n}()},"6dTq":function(n,t,l){"use strict";l.d(t,"a",function(){return e}),l("chmc");var o=l("yZXx"),e=function(){function n(n){Object.assign(this,n)}return Object.defineProperty(n.prototype,"isBs3",{get:function(){return Object(o.a)()},enumerable:!0,configurable:!0}),n}()},"8b39":function(n,t,l){"use strict";l.d(t,"a",function(){return i});var o=l("chmc"),e=(l("FfxL"),l("6dTq")),i=function(){function n(n,t,l,e,i){this.outsideClick=!1,this.containerClass="",this._isInited=!1,this._popover=i.createLoader(n,l,t).provide({provide:o.a,useValue:e}),Object.assign(this,e),this.onShown=this._popover.onShown,this.onHidden=this._popover.onHidden,"undefined"!=typeof window&&n.nativeElement.addEventListener("click",function(){try{n.nativeElement.focus()}catch(t){return}})}return Object.defineProperty(n.prototype,"isOpen",{get:function(){return this._popover.isShown},set:function(n){n?this.show():this.hide()},enumerable:!0,configurable:!0}),n.prototype.show=function(){!this._popover.isShown&&this.popover&&(this._popover.attach(e.a).to(this.container).position({attachment:this.placement}).show({content:this.popover,context:this.popoverContext,placement:this.placement,title:this.popoverTitle,containerClass:this.containerClass}),this.isOpen=!0)},n.prototype.hide=function(){this.isOpen&&(this._popover.hide(),this.isOpen=!1)},n.prototype.toggle=function(){if(this.isOpen)return this.hide();this.show()},n.prototype.ngOnInit=function(){var n=this;this._isInited||(this._isInited=!0,this._popover.listen({triggers:this.triggers,outsideClick:this.outsideClick,show:function(){return n.show()}}))},n.prototype.ngOnDestroy=function(){this._popover.dispose()},n}()},AW84:function(n,t,l){"use strict";l.d(t,"a",function(){return u});var o=l("FfxL"),e=l("XD9u"),i=l("chmc"),u=(l("8b39"),l("6dTq"),function(){function n(){}return n.forRoot=function(){return{ngModule:n,providers:[i.a,o.a,e.a]}},n}())},Eidh:function(n,t,l){"use strict";l.d(t,"a",function(){return o});var o=function(){function n(){this.shouldShowForRetail=!1}return n.prototype.ngOnInit=function(){},n}()},LLTo:function(n,t,l){"use strict";l.d(t,"a",function(){return o});var o=function(){return function(){}}()},UhSo:function(n,t,l){"use strict";l.d(t,"a",function(){return o});var o=function(){function n(){}return n.prototype.transform=function(n,t,l){return n&&n.length?t?(t=t.toLowerCase(),n.filter(function(o){return l?Array.isArray(l)?l.map(function(n){return o[n].toString().toLowerCase().includes(t)}).includes(!0):o[l].toString().toLowerCase().includes(t):"object"==typeof n[0]?JSON.stringify(Object.values(o)).toLowerCase().includes(t):o.toLowerCase().includes(t)})):n:[]},n}()},chmc:function(n,t,l){"use strict";l.d(t,"a",function(){return o});var o=function(){return function(){this.placement="top",this.triggers="click",this.outsideClick=!1}}()},mGS5:function(n,t,l){"use strict";l.d(t,"a",function(){return p});var o=l("CcnG"),e=l("Ip0R"),i=l("6dTq"),u=l("chmc"),a=o.ob({encapsulation:0,styles:[".bs-popover-top[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-popover-bottom[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      left: 50%;\n      margin-left: -8px;\n    }\n    .bs-popover-left[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%], .bs-popover-right[_nghost-%COMP%]   .arrow[_ngcontent-%COMP%] {\n      top: 50%;\n      margin-top: -8px;\n    }"],data:{}});function r(n){return o.Kb(0,[(n()(),o.qb(0,0,null,null,1,"h3",[["class","popover-title popover-header"]],null,null,null,null,null)),(n()(),o.Ib(1,null,["",""]))],null,function(n,t){n(t,1,0,t.component.title)})}function s(n){return o.Kb(2,[(n()(),o.qb(0,0,null,null,0,"div",[["class","popover-arrow arrow"]],null,null,null,null,null)),(n()(),o.hb(16777216,null,null,1,null,r)),o.pb(2,16384,null,0,e.o,[o.P,o.M],{ngIf:[0,"ngIf"]},null),(n()(),o.qb(3,0,null,null,1,"div",[["class","popover-content popover-body"]],null,null,null,null,null)),o.zb(null,0)],function(n,t){n(t,2,0,t.component.title)},null)}function c(n){return o.Kb(0,[(n()(),o.qb(0,0,null,null,1,"popover-container",[["role","tooltip"],["style","display:block;"]],[[8,"className",0],[2,"show",null]],null,null,s,a)),o.pb(1,49152,null,0,i.a,[u.a],null,null)],null,function(n,t){n(t,0,0,"popover in popover-"+o.Ab(t,1).placement+" bs-popover-"+o.Ab(t,1).placement+" "+o.Ab(t,1).placement+" "+o.Ab(t,1).containerClass,!o.Ab(t,1).isBs3)})}var p=o.mb("popover-container",i.a,c,{placement:"placement",title:"title"},{},["*"])},nQCY:function(n,t,l){"use strict";l.d(t,"a",function(){return i}),l.d(t,"b",function(){return u});var o=l("CcnG"),e=l("Ip0R"),i=(l("5SxG"),o.ob({encapsulation:2,styles:[],data:{}}));function u(n){return o.Kb(0,[(n()(),o.qb(0,0,null,null,2,"button",[["class","delos-float-action"],["type","button"]],[[8,"id",0],[8,"disabled",0]],[[null,"click"]],function(n,t,l){var o=!0;return"click"===t&&(o=!1!==n.component.customFn()&&o),o},null,null)),o.pb(1,278528,null,0,e.m,[o.s,o.t,o.k,o.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(n()(),o.qb(2,0,null,null,0,"span",[],[[8,"className",0]],null,null,null,null))],function(n,t){n(t,1,0,"delos-float-action",t.component.floatBtn.className)},function(n,t){var l=t.component;n(t,0,0,o.sb(1,"",l.floatBtn.className,"-btn"),l.disableFloatBtn),n(t,2,0,o.sb(1,"glyphicon glyphicon-",l.floatBtn.icon,""))})}},npmK:function(n,t,l){"use strict";l.r(t),l.d(t,"LanModuleNgFactory",function(){return G});var o=l("CcnG"),e=l("qDsZ"),i=l("pMnS"),u=l("NU/u"),a=l("MQte"),r=l("Q5BN"),s=l("mGS5"),c=l("Ip0R"),p=l("UVPe"),f=l("gIcY"),b=l("t/Na"),d=l("3GWt"),h=l("chmc"),y=l("S7LP"),v=l("6aHO"),m=l("nMVA"),g=l("jGGy"),w=l("+NEN"),C=l("+I7i"),O=l("ZYCi"),S=l("x5KT"),B=l("A7o+"),q=l("ZLSo"),_=l("9Xeq"),N=l("yGOH"),k=l("bKdQ"),x=l("rSzr"),I=l("LLTo"),L=l("AW84"),P=l("9nVo"),M=l("RYmd"),T=l("ub4/"),j=l("VEEB"),G=o.nb(e.a,[],function(n){return o.xb([o.yb(512,o.j,o.cb,[[8,[i.a,u.a,a.a,r.a,s.a]],[3,o.j],o.x]),o.yb(4608,c.q,c.p,[o.u,[2,c.B]]),o.yb(4608,p.a,p.a,[[3,p.a]]),o.yb(4608,f.x,f.x,[]),o.yb(4608,b.k,b.q,[c.d,o.B,b.o]),o.yb(4608,b.r,b.r,[b.k,b.p]),o.yb(5120,b.a,function(n){return[n]},[b.r]),o.yb(4608,b.n,b.n,[]),o.yb(6144,b.l,null,[b.n]),o.yb(4608,b.j,b.j,[b.l]),o.yb(6144,b.b,null,[b.j]),o.yb(4608,b.g,b.m,[b.b,o.q]),o.yb(4608,b.c,b.c,[b.g]),o.yb(4608,d.a,d.a,[b.c]),o.yb(4608,h.a,h.a,[]),o.yb(4608,y.a,y.a,[]),o.yb(4608,v.a,v.a,[o.j,o.z,o.q,y.a,o.g]),o.yb(4608,m.a,m.a,[g.a,w.a]),o.yb(4608,C.a,C.a,[g.a,w.a]),o.yb(1073742336,c.c,c.c,[]),o.yb(1073742336,O.p,O.p,[[2,O.v],[2,O.m]]),o.yb(1073742336,S.a,S.a,[]),o.yb(1073742336,B.g,B.g,[]),o.yb(1073742336,q.a,q.a,[]),o.yb(1073742336,_.a,_.a,[]),o.yb(1073742336,f.t,f.t,[]),o.yb(1073742336,f.e,f.e,[]),o.yb(1073742336,N.a,N.a,[]),o.yb(1073742336,b.e,b.e,[]),o.yb(1073742336,b.d,b.d,[]),o.yb(1073742336,k.a,k.a,[]),o.yb(1073742336,x.a,x.a,[]),o.yb(1073742336,I.a,I.a,[]),o.yb(1073742336,L.a,L.a,[]),o.yb(1073742336,e.a,e.a,[]),o.yb(1024,O.j,function(){return[[{path:"status",component:P.a,data:{displayName:"Status",retailOrder:0}},{path:"ip",component:M.a,data:{displayName:"IPv4/IPv6",retailOrder:10},canDeactivate:[T.a]},{path:"vlan",component:j.a,data:{displayName:"VLANs",appHideForRetail:!0},canDeactivate:[T.a]}]]},[]),o.yb(256,b.o,"XSRF-TOKEN",[]),o.yb(256,b.p,"X-XSRF-TOKEN",[])])})},rSzr:function(n,t,l){"use strict";l.d(t,"a",function(){return o});var o=function(){return function(){}}()},tl7y:function(n,t,l){"use strict";l.d(t,"a",function(){return u}),l.d(t,"b",function(){return s});var o=l("CcnG"),e=l("xR9I"),i=l("Sxbm"),u=(l("Eidh"),o.ob({encapsulation:2,styles:[],data:{}}));function a(n){return o.Kb(0,[(n()(),o.qb(0,0,null,null,1,"div",[["class","dataTables_filter"]],null,null,null,null,null)),o.zb(null,0)],null,null)}function r(n){return o.Kb(0,[(n()(),o.qb(0,0,null,null,1,"div",[["class","col-md-5 hint-text displayed-entires"]],null,null,null,null,null)),o.zb(null,1)],null,null)}function s(n){return o.Kb(0,[(n()(),o.qb(0,0,null,null,7,"div",[["class","row filter-row"]],null,null,null,null,null)),(n()(),o.qb(1,0,null,null,2,"div",[["class","col-md-4"]],null,null,null,null,null)),(n()(),o.hb(16777216,null,null,1,null,a)),o.pb(3,212992,null,0,e.a,[o.M,o.P,i.a],{renderTemplate:[0,"renderTemplate"]},null),(n()(),o.hb(16777216,null,null,1,null,r)),o.pb(5,212992,null,0,e.a,[o.M,o.P,i.a],{renderTemplate:[0,"renderTemplate"]},null),(n()(),o.qb(6,0,null,null,1,"div",[["class","col-xs-6 col-md-3 text-right pull-right"]],null,null,null,null,null)),o.zb(null,2)],function(n,t){var l=t.component;n(t,3,0,l.shouldShowForRetail),n(t,5,0,l.shouldShowForRetail)},null)}}}]);
\ No newline at end of file
diff --git a/www/assets/fonts/OpenSans-Bold-webfont.eot b/www/assets/fonts/OpenSans-Bold-webfont.eot
new file mode 100644
index 0000000..a78a2a9
Binary files /dev/null and b/www/assets/fonts/OpenSans-Bold-webfont.eot differ
diff --git a/www/assets/fonts/OpenSans-Bold-webfont.ttf b/www/assets/fonts/OpenSans-Bold-webfont.ttf
new file mode 100644
index 0000000..1460061
Binary files /dev/null and b/www/assets/fonts/OpenSans-Bold-webfont.ttf differ
diff --git a/www/assets/fonts/OpenSans-Bold-webfont.woff b/www/assets/fonts/OpenSans-Bold-webfont.woff
new file mode 100644
index 0000000..1205787
Binary files /dev/null and b/www/assets/fonts/OpenSans-Bold-webfont.woff differ
diff --git a/www/assets/fonts/OpenSans-Bold-webfont.woff2 b/www/assets/fonts/OpenSans-Bold-webfont.woff2
new file mode 100644
index 0000000..51c75ca
Binary files /dev/null and b/www/assets/fonts/OpenSans-Bold-webfont.woff2 differ
diff --git a/www/assets/fonts/OpenSans-BoldItalic-webfont.eot b/www/assets/fonts/OpenSans-BoldItalic-webfont.eot
new file mode 100644
index 0000000..81efc8c
Binary files /dev/null and b/www/assets/fonts/OpenSans-BoldItalic-webfont.eot differ
diff --git a/www/assets/fonts/OpenSans-BoldItalic-webfont.ttf b/www/assets/fonts/OpenSans-BoldItalic-webfont.ttf
new file mode 100644
index 0000000..7526768
Binary files /dev/null and b/www/assets/fonts/OpenSans-BoldItalic-webfont.ttf differ
diff --git a/www/assets/fonts/OpenSans-BoldItalic-webfont.woff b/www/assets/fonts/OpenSans-BoldItalic-webfont.woff
new file mode 100644
index 0000000..ed760c0
Binary files /dev/null and b/www/assets/fonts/OpenSans-BoldItalic-webfont.woff differ
diff --git a/www/assets/fonts/OpenSans-BoldItalic-webfont.woff2 b/www/assets/fonts/OpenSans-BoldItalic-webfont.woff2
new file mode 100644
index 0000000..646a4f7
Binary files /dev/null and b/www/assets/fonts/OpenSans-BoldItalic-webfont.woff2 differ
diff --git a/www/assets/fonts/OpenSans-Italic-webfont.eot b/www/assets/fonts/OpenSans-Italic-webfont.eot
new file mode 100644
index 0000000..a2e2c9f
Binary files /dev/null and b/www/assets/fonts/OpenSans-Italic-webfont.eot differ
diff --git a/www/assets/fonts/OpenSans-Italic-webfont.ttf b/www/assets/fonts/OpenSans-Italic-webfont.ttf
new file mode 100644
index 0000000..23a26f0
Binary files /dev/null and b/www/assets/fonts/OpenSans-Italic-webfont.ttf differ
diff --git a/www/assets/fonts/OpenSans-Italic-webfont.woff b/www/assets/fonts/OpenSans-Italic-webfont.woff
new file mode 100644
index 0000000..ff652e6
Binary files /dev/null and b/www/assets/fonts/OpenSans-Italic-webfont.woff differ
diff --git a/www/assets/fonts/OpenSans-Italic-webfont.woff2 b/www/assets/fonts/OpenSans-Italic-webfont.woff2
new file mode 100644
index 0000000..005b450
Binary files /dev/null and b/www/assets/fonts/OpenSans-Italic-webfont.woff2 differ
diff --git a/www/assets/fonts/OpenSans-Regular-webfont.eot b/www/assets/fonts/OpenSans-Regular-webfont.eot
new file mode 100644
index 0000000..1d98e6e
Binary files /dev/null and b/www/assets/fonts/OpenSans-Regular-webfont.eot differ
diff --git a/www/assets/fonts/OpenSans-Regular-webfont.ttf b/www/assets/fonts/OpenSans-Regular-webfont.ttf
new file mode 100644
index 0000000..c122ce4
Binary files /dev/null and b/www/assets/fonts/OpenSans-Regular-webfont.ttf differ
diff --git a/www/assets/fonts/OpenSans-Regular-webfont.woff b/www/assets/fonts/OpenSans-Regular-webfont.woff
new file mode 100644
index 0000000..e231183
Binary files /dev/null and b/www/assets/fonts/OpenSans-Regular-webfont.woff differ
diff --git a/www/assets/fonts/OpenSans-Regular-webfont.woff2 b/www/assets/fonts/OpenSans-Regular-webfont.woff2
new file mode 100644
index 0000000..402dfd7
Binary files /dev/null and b/www/assets/fonts/OpenSans-Regular-webfont.woff2 differ
diff --git a/www/assets/fonts/OpenSans-Semibold-webfont.eot b/www/assets/fonts/OpenSans-Semibold-webfont.eot
new file mode 100644
index 0000000..a78a2a9
Binary files /dev/null and b/www/assets/fonts/OpenSans-Semibold-webfont.eot differ
diff --git a/www/assets/fonts/OpenSans-Semibold-webfont.ttf b/www/assets/fonts/OpenSans-Semibold-webfont.ttf
new file mode 100644
index 0000000..47d538a
Binary files /dev/null and b/www/assets/fonts/OpenSans-Semibold-webfont.ttf differ
diff --git a/www/assets/fonts/OpenSans-Semibold-webfont.woff b/www/assets/fonts/OpenSans-Semibold-webfont.woff
new file mode 100644
index 0000000..28d6ade
Binary files /dev/null and b/www/assets/fonts/OpenSans-Semibold-webfont.woff differ
diff --git a/www/assets/fonts/OpenSans-Semibold-webfont.woff2 b/www/assets/fonts/OpenSans-Semibold-webfont.woff2
new file mode 100644
index 0000000..4001c52
Binary files /dev/null and b/www/assets/fonts/OpenSans-Semibold-webfont.woff2 differ
diff --git a/www/assets/fonts/delos-iconmoon-license b/www/assets/fonts/delos-iconmoon-license
new file mode 100644
index 0000000..dc8853a
--- /dev/null
+++ b/www/assets/fonts/delos-iconmoon-license
@@ -0,0 +1,393 @@
+Attribution 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+     Considerations for licensors: Our public licenses are
+     intended for use by those authorized to give the public
+     permission to use material in ways otherwise restricted by
+     copyright and certain other rights. Our licenses are
+     irrevocable. Licensors should read and understand the terms
+     and conditions of the license they choose before applying it.
+     Licensors should also secure all rights necessary before
+     applying our licenses so that the public can reuse the
+     material as expected. Licensors should clearly mark any
+     material not subject to the license. This includes other CC-
+     licensed material, or material used under an exception or
+     limitation to copyright. More considerations for licensors:
+	wiki.creativecommons.org/Considerations_for_licensors
+
+     Considerations for the public: By using one of our public
+     licenses, a licensor grants the public permission to use the
+     licensed material under specified terms and conditions. If
+     the licensor's permission is not necessary for any reason--for
+     example, because of any applicable exception or limitation to
+     copyright--then that use is not regulated by the license. Our
+     licenses grant only permissions under copyright and certain
+     other rights that a licensor has authority to grant. Use of
+     the licensed material may still be restricted for other
+     reasons, including because others have copyright or other
+     rights in the material. A licensor may make special requests,
+     such as asking that all changes be marked or described.
+     Although not required by our licenses, you are encouraged to
+     respect those requests where reasonable. More_considerations
+     for the public: 
+	wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution 4.0 International Public License ("Public License"). To the
+extent this Public License may be interpreted as a contract, You are
+granted the Licensed Rights in consideration of Your acceptance of
+these terms and conditions, and the Licensor grants You such rights in
+consideration of benefits the Licensor receives from making the
+Licensed Material available under these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+  a. Adapted Material means material subject to Copyright and Similar
+     Rights that is derived from or based upon the Licensed Material
+     and in which the Licensed Material is translated, altered,
+     arranged, transformed, or otherwise modified in a manner requiring
+     permission under the Copyright and Similar Rights held by the
+     Licensor. For purposes of this Public License, where the Licensed
+     Material is a musical work, performance, or sound recording,
+     Adapted Material is always produced where the Licensed Material is
+     synched in timed relation with a moving image.
+
+  b. Adapter's License means the license You apply to Your Copyright
+     and Similar Rights in Your contributions to Adapted Material in
+     accordance with the terms and conditions of this Public License.
+
+  c. Copyright and Similar Rights means copyright and/or similar rights
+     closely related to copyright including, without limitation,
+     performance, broadcast, sound recording, and Sui Generis Database
+     Rights, without regard to how the rights are labeled or
+     categorized. For purposes of this Public License, the rights
+     specified in Section 2(b)(1)-(2) are not Copyright and Similar
+     Rights.
+
+  d. Effective Technological Measures means those measures that, in the
+     absence of proper authority, may not be circumvented under laws
+     fulfilling obligations under Article 11 of the WIPO Copyright
+     Treaty adopted on December 20, 1996, and/or similar international
+     agreements.
+
+  e. Exceptions and Limitations means fair use, fair dealing, and/or
+     any other exception or limitation to Copyright and Similar Rights
+     that applies to Your use of the Licensed Material.
+
+  f. Licensed Material means the artistic or literary work, database,
+     or other material to which the Licensor applied this Public
+     License.
+
+  g. Licensed Rights means the rights granted to You subject to the
+     terms and conditions of this Public License, which are limited to
+     all Copyright and Similar Rights that apply to Your use of the
+     Licensed Material and that the Licensor has authority to license.
+
+  h. Licensor means the individual(s) or entity(ies) granting rights
+     under this Public License.
+
+  i. Share means to provide material to the public by any means or
+     process that requires permission under the Licensed Rights, such
+     as reproduction, public display, public performance, distribution,
+     dissemination, communication, or importation, and to make material
+     available to the public including in ways that members of the
+     public may access the material from a place and at a time
+     individually chosen by them.
+
+  j. Sui Generis Database Rights means rights other than copyright
+     resulting from Directive 96/9/EC of the European Parliament and of
+     the Council of 11 March 1996 on the legal protection of databases,
+     as amended and/or succeeded, as well as other essentially
+     equivalent rights anywhere in the world.
+
+  k. You means the individual or entity exercising the Licensed Rights
+     under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+  a. License grant.
+
+       1. Subject to the terms and conditions of this Public License,
+          the Licensor hereby grants You a worldwide, royalty-free,
+          non-sublicensable, non-exclusive, irrevocable license to
+          exercise the Licensed Rights in the Licensed Material to:
+
+            a. reproduce and Share the Licensed Material, in whole or
+               in part; and
+
+            b. produce, reproduce, and Share Adapted Material.
+
+       2. Exceptions and Limitations. For the avoidance of doubt, where
+          Exceptions and Limitations apply to Your use, this Public
+          License does not apply, and You do not need to comply with
+          its terms and conditions.
+
+       3. Term. The term of this Public License is specified in Section
+          6(a).
+
+       4. Media and formats; technical modifications allowed. The
+          Licensor authorizes You to exercise the Licensed Rights in
+          all media and formats whether now known or hereafter created,
+          and to make technical modifications necessary to do so. The
+          Licensor waives and/or agrees not to assert any right or
+          authority to forbid You from making technical modifications
+          necessary to exercise the Licensed Rights, including
+          technical modifications necessary to circumvent Effective
+          Technological Measures. For purposes of this Public License,
+          simply making modifications authorized by this Section 2(a)
+          (4) never produces Adapted Material.
+
+       5. Downstream recipients.
+
+            a. Offer from the Licensor -- Licensed Material. Every
+               recipient of the Licensed Material automatically
+               receives an offer from the Licensor to exercise the
+               Licensed Rights under the terms and conditions of this
+               Public License.
+
+            b. No downstream restrictions. You may not offer or impose
+               any additional or different terms or conditions on, or
+               apply any Effective Technological Measures to, the
+               Licensed Material if doing so restricts exercise of the
+               Licensed Rights by any recipient of the Licensed
+               Material.
+
+       6. No endorsement. Nothing in this Public License constitutes or
+          may be construed as permission to assert or imply that You
+          are, or that Your use of the Licensed Material is, connected
+          with, or sponsored, endorsed, or granted official status by,
+          the Licensor or others designated to receive attribution as
+          provided in Section 3(a)(1)(A)(i).
+
+  b. Other rights.
+
+       1. Moral rights, such as the right of integrity, are not
+          licensed under this Public License, nor are publicity,
+          privacy, and/or other similar personality rights; however, to
+          the extent possible, the Licensor waives and/or agrees not to
+          assert any such rights held by the Licensor to the limited
+          extent necessary to allow You to exercise the Licensed
+          Rights, but not otherwise.
+
+       2. Patent and trademark rights are not licensed under this
+          Public License.
+
+       3. To the extent possible, the Licensor waives any right to
+          collect royalties from You for the exercise of the Licensed
+          Rights, whether directly or through a collecting society
+          under any voluntary or waivable statutory or compulsory
+          licensing scheme. In all other cases the Licensor expressly
+          reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+  a. Attribution.
+
+       1. If You Share the Licensed Material (including in modified
+          form), You must:
+
+            a. retain the following if it is supplied by the Licensor
+               with the Licensed Material:
+
+                 i. identification of the creator(s) of the Licensed
+                    Material and any others designated to receive
+                    attribution, in any reasonable manner requested by
+                    the Licensor (including by pseudonym if
+                    designated);
+
+                ii. a copyright notice;
+
+               iii. a notice that refers to this Public License;
+
+                iv. a notice that refers to the disclaimer of
+                    warranties;
+
+                 v. a URI or hyperlink to the Licensed Material to the
+                    extent reasonably practicable;
+
+            b. indicate if You modified the Licensed Material and
+               retain an indication of any previous modifications; and
+
+            c. indicate the Licensed Material is licensed under this
+               Public License, and include the text of, or the URI or
+               hyperlink to, this Public License.
+
+       2. You may satisfy the conditions in Section 3(a)(1) in any
+          reasonable manner based on the medium, means, and context in
+          which You Share the Licensed Material. For example, it may be
+          reasonable to satisfy the conditions by providing a URI or
+          hyperlink to a resource that includes the required
+          information.
+
+       3. If requested by the Licensor, You must remove any of the
+          information required by Section 3(a)(1)(A) to the extent
+          reasonably practicable.
+
+       4. If You Share Adapted Material You produce, the Adapter's
+          License You apply must not prevent recipients of the Adapted
+          Material from complying with this Public License.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+  a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+     to extract, reuse, reproduce, and Share all or a substantial
+     portion of the contents of the database;
+
+  b. if You include all or a substantial portion of the database
+     contents in a database in which You have Sui Generis Database
+     Rights, then the database in which You have Sui Generis Database
+     Rights (but not its individual contents) is Adapted Material; and
+
+  c. You must comply with the conditions in Section 3(a) if You Share
+     all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+  c. The disclaimer of warranties and limitation of liability provided
+     above shall be interpreted in a manner that, to the extent
+     possible, most closely approximates an absolute disclaimer and
+     waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+  a. This Public License applies for the term of the Copyright and
+     Similar Rights licensed here. However, if You fail to comply with
+     this Public License, then Your rights under this Public License
+     terminate automatically.
+
+  b. Where Your right to use the Licensed Material has terminated under
+     Section 6(a), it reinstates:
+
+       1. automatically as of the date the violation is cured, provided
+          it is cured within 30 days of Your discovery of the
+          violation; or
+
+       2. upon express reinstatement by the Licensor.
+
+     For the avoidance of doubt, this Section 6(b) does not affect any
+     right the Licensor may have to seek remedies for Your violations
+     of this Public License.
+
+  c. For the avoidance of doubt, the Licensor may also offer the
+     Licensed Material under separate terms or conditions or stop
+     distributing the Licensed Material at any time; however, doing so
+     will not terminate this Public License.
+
+  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+     License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+  a. The Licensor shall not be bound by any additional or different
+     terms or conditions communicated by You unless expressly agreed.
+
+  b. Any arrangements, understandings, or agreements regarding the
+     Licensed Material not stated herein are separate from and
+     independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+  a. For the avoidance of doubt, this Public License does not, and
+     shall not be interpreted to, reduce, limit, restrict, or impose
+     conditions on any use of the Licensed Material that could lawfully
+     be made without permission under this Public License.
+
+  b. To the extent possible, if any provision of this Public License is
+     deemed unenforceable, it shall be automatically reformed to the
+     minimum extent necessary to make it enforceable. If the provision
+     cannot be reformed, it shall be severed from this Public License
+     without affecting the enforceability of the remaining terms and
+     conditions.
+
+  c. No term or condition of this Public License will be waived and no
+     failure to comply consented to unless expressly agreed to by the
+     Licensor.
+
+  d. Nothing in this Public License constitutes or may be interpreted
+     as a limitation upon, or waiver of, any privileges and immunities
+     that apply to the Licensor or You, including from the legal
+     processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public licenses.
+Notwithstanding, Creative Commons may elect to apply one of its public
+licenses to material it publishes and in those instances will be
+considered the "Licensor." Except for the limited purpose of indicating
+that material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the public
+licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/www/assets/fonts/delos.eot b/www/assets/fonts/delos.eot
new file mode 100644
index 0000000..6144e4c
Binary files /dev/null and b/www/assets/fonts/delos.eot differ
diff --git a/www/assets/fonts/delos.svg b/www/assets/fonts/delos.svg
new file mode 100644
index 0000000..f166ad8
--- /dev/null
+++ b/www/assets/fonts/delos.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+<json>
+<![CDATA[
+{
+	"fontFamily": "delos",
+	"majorVersion": 1,
+	"minorVersion": 0,
+	"version": "Version 1.0",
+	"fontId": "delos",
+	"psName": "delos",
+	"subFamily": "Regular",
+	"fullName": "delos",
+	"description": "Font generated by IcoMoon."
+}
+]]>
+</json>
+</metadata>
+<defs>
+<font id="delos" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe600;" glyph-name="home" data-tags="home, house" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />
+<glyph unicode="&#xe601;" glyph-name="connection" data-tags="connection, wifi, wave" horiz-adv-x="1280" d="M640 384c105.87 0 201.87-43.066 271.402-112.598l-90.468-90.468c-46.354 46.356-110.356 75.066-180.934 75.066s-134.578-28.71-180.934-75.066l-90.468 90.468c69.532 69.532 165.532 112.598 271.402 112.598zM187.452 452.548c120.88 120.88 281.598 187.452 452.548 187.452s331.668-66.572 452.55-187.452l-90.51-90.508c-96.706 96.704-225.28 149.96-362.040 149.96-136.762 0-265.334-53.256-362.038-149.962l-90.51 90.51zM988.784 825.562c106.702-45.132 202.516-109.728 284.782-191.996v0l-90.508-90.508c-145.056 145.056-337.92 224.942-543.058 224.942-205.14 0-398-79.886-543.058-224.942l-90.51 90.51c82.268 82.266 178.082 146.862 284.784 191.994 110.504 46.738 227.852 70.438 348.784 70.438s238.278-23.7 348.784-70.438zM576 64c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64z" />
+<glyph unicode="&#xe602;" glyph-name="cogs" data-tags="cogs, gears, preferences, settings, generate, control, options" d="M363.722 237.948l41.298 57.816-45.254 45.256-57.818-41.296c-10.722 5.994-22.204 10.774-34.266 14.192l-11.682 70.084h-64l-11.68-70.086c-12.062-3.418-23.544-8.198-34.266-14.192l-57.818 41.298-45.256-45.256 41.298-57.816c-5.994-10.72-10.774-22.206-14.192-34.266l-70.086-11.682v-64l70.086-11.682c3.418-12.060 8.198-23.544 14.192-34.266l-41.298-57.816 45.254-45.256 57.818 41.296c10.722-5.994 22.204-10.774 34.266-14.192l11.682-70.084h64l11.68 70.086c12.062 3.418 23.544 8.198 34.266 14.192l57.818-41.296 45.254 45.256-41.298 57.816c5.994 10.72 10.774 22.206 14.192 34.266l70.088 11.68v64l-70.086 11.682c-3.418 12.060-8.198 23.544-14.192 34.266zM224 96c-35.348 0-64 28.654-64 64s28.652 64 64 64 64-28.654 64-64-28.652-64-64-64zM1024 576v64l-67.382 12.25c-1.242 8.046-2.832 15.978-4.724 23.79l57.558 37.1-24.492 59.128-66.944-14.468c-4.214 6.91-8.726 13.62-13.492 20.13l39.006 56.342-45.256 45.254-56.342-39.006c-6.512 4.766-13.22 9.276-20.13 13.494l14.468 66.944-59.128 24.494-37.1-57.558c-7.812 1.892-15.744 3.482-23.79 4.724l-12.252 67.382h-64l-12.252-67.382c-8.046-1.242-15.976-2.832-23.79-4.724l-37.098 57.558-59.128-24.492 14.468-66.944c-6.91-4.216-13.62-8.728-20.13-13.494l-56.342 39.006-45.254-45.254 39.006-56.342c-4.766-6.51-9.278-13.22-13.494-20.13l-66.944 14.468-24.492-59.128 57.558-37.1c-1.892-7.812-3.482-15.742-4.724-23.79l-67.384-12.252v-64l67.382-12.25c1.242-8.046 2.832-15.978 4.724-23.79l-57.558-37.1 24.492-59.128 66.944 14.468c4.216-6.91 8.728-13.618 13.494-20.13l-39.006-56.342 45.254-45.256 56.342 39.006c6.51-4.766 13.22-9.276 20.13-13.492l-14.468-66.944 59.128-24.492 37.102 57.558c7.81-1.892 15.742-3.482 23.788-4.724l12.252-67.384h64l12.252 67.382c8.044 1.242 15.976 2.832 23.79 4.724l37.1-57.558 59.128 24.492-14.468 66.944c6.91 4.216 13.62 8.726 20.13 13.492l56.342-39.006 45.256 45.256-39.006 56.342c4.766 6.512 9.276 13.22 13.492 20.13l66.944-14.468 24.492 59.13-57.558 37.1c1.892 7.812 3.482 15.742 4.724 23.79l67.382 12.25zM672 468.8c-76.878 0-139.2 62.322-139.2 139.2s62.32 139.2 139.2 139.2 139.2-62.322 139.2-139.2c0-76.878-62.32-139.2-139.2-139.2z" />
+<glyph unicode="&#xe603;" glyph-name="tree" data-tags="tree, branches, inheritance" d="M976 192h-16v208c0 61.756-50.242 112-112 112h-272v128h16c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h16v-128h-272c-61.756 0-112-50.244-112-112v-208h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-16v192h256v-192h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-16v192h256v-192h-16c-26.4 0-48-21.6-48-48v-160c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48zM192 0h-128v128h128v-128zM576 0h-128v128h128v-128zM448 704v128h128v-128h-128zM960 0h-128v128h128v-128z" />
+<glyph unicode="&#xe604;" glyph-name="info" data-tags="info, information" d="M448 656c0 26.4 21.6 48 48 48h32c26.4 0 48-21.6 48-48v-32c0-26.4-21.6-48-48-48h-32c-26.4 0-48 21.6-48 48v32zM640 192h-256v64h64v192h-64v64h192v-256h64zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416z" />
+<glyph unicode="&#xe609;" glyph-name="pencil" data-tags="pencil, write, edit" d="M864 960c88.364 0 160-71.634 160-160 0-36.020-11.91-69.258-32-96l-64-64-224 224 64 64c26.742 20.090 59.978 32 96 32zM64 224l-64-288 288 64 592 592-224 224-592-592zM715.578 596.422l-448-448-55.156 55.156 448 448 55.156-55.156z" />
+<glyph unicode="&#xe6ae;" glyph-name="bin" data-tags="bin, trashcan, remove, delete, recycle, dispose" d="M128 640v-640c0-35.2 28.8-64 64-64h576c35.2 0 64 28.8 64 64v640h-704zM320 64h-64v448h64v-448zM448 64h-64v448h64v-448zM576 64h-64v448h64v-448zM704 64h-64v448h64v-448zM848 832h-208v80c0 26.4-21.6 48-48 48h-224c-26.4 0-48-21.6-48-48v-80h-208c-26.4 0-48-21.6-48-48v-80h832v80c0 26.4-21.6 48-48 48zM576 832h-192v63.198h192v-63.198z" />
+<glyph unicode="&#xe6cb;" glyph-name="earth" data-tags="earth, globe, language, web, internet, sphere, planet" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
+<glyph unicode="&#xe70f;" glyph-name="cross" data-tags="cross, cancel, close, quit, remove" d="M1014.662 137.34c-0.004 0.004-0.008 0.008-0.012 0.010l-310.644 310.65 310.644 310.65c0.004 0.004 0.008 0.006 0.012 0.010 3.344 3.346 5.762 7.254 7.312 11.416 4.246 11.376 1.824 24.682-7.324 33.83l-146.746 146.746c-9.148 9.146-22.45 11.566-33.828 7.32-4.16-1.55-8.070-3.968-11.418-7.31 0-0.004-0.004-0.006-0.008-0.010l-310.648-310.652-310.648 310.65c-0.004 0.004-0.006 0.006-0.010 0.010-3.346 3.342-7.254 5.76-11.414 7.31-11.38 4.248-24.682 1.826-33.83-7.32l-146.748-146.748c-9.148-9.148-11.568-22.452-7.322-33.828 1.552-4.16 3.97-8.072 7.312-11.416 0.004-0.002 0.006-0.006 0.010-0.010l310.65-310.648-310.65-310.652c-0.002-0.004-0.006-0.006-0.008-0.010-3.342-3.346-5.76-7.254-7.314-11.414-4.248-11.376-1.826-24.682 7.322-33.83l146.748-146.746c9.15-9.148 22.452-11.568 33.83-7.322 4.16 1.552 8.070 3.97 11.416 7.312 0.002 0.004 0.006 0.006 0.010 0.010l310.648 310.65 310.648-310.65c0.004-0.002 0.008-0.006 0.012-0.008 3.348-3.344 7.254-5.762 11.414-7.314 11.378-4.246 24.684-1.826 33.828 7.322l146.746 146.748c9.148 9.148 11.57 22.454 7.324 33.83-1.552 4.16-3.97 8.068-7.314 11.414z" />
+<glyph unicode="&#xe710;" glyph-name="checkmark" data-tags="checkmark, tick, correct, accept, ok" d="M864 832l-480-480-224 224-160-160 384-384 640 640z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/www/assets/fonts/delos.ttf b/www/assets/fonts/delos.ttf
new file mode 100644
index 0000000..f8ed9ec
Binary files /dev/null and b/www/assets/fonts/delos.ttf differ
diff --git a/www/assets/fonts/delos.woff b/www/assets/fonts/delos.woff
new file mode 100644
index 0000000..0a04fff
Binary files /dev/null and b/www/assets/fonts/delos.woff differ
diff --git a/www/assets/fonts/delos.woff2 b/www/assets/fonts/delos.woff2
new file mode 100644
index 0000000..6c129b2
Binary files /dev/null and b/www/assets/fonts/delos.woff2 differ
diff --git a/www/assets/fonts/glyphicons-halflings-regular.eot b/www/assets/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000..b93a495
Binary files /dev/null and b/www/assets/fonts/glyphicons-halflings-regular.eot differ
diff --git a/www/assets/fonts/glyphicons-halflings-regular.svg b/www/assets/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/www/assets/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/www/assets/fonts/glyphicons-halflings-regular.ttf b/www/assets/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..1413fc6
Binary files /dev/null and b/www/assets/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/www/assets/fonts/glyphicons-halflings-regular.woff b/www/assets/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..9e61285
Binary files /dev/null and b/www/assets/fonts/glyphicons-halflings-regular.woff differ
diff --git a/www/assets/fonts/glyphicons-halflings-regular.woff2 b/www/assets/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000..64539b5
Binary files /dev/null and b/www/assets/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/www/assets/i18n/de.po b/www/assets/i18n/de.po
new file mode 100644
index 0000000..3b9efaf
--- /dev/null
+++ b/www/assets/i18n/de.po
@@ -0,0 +1,2758 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "1"
+msgstr "1"
+
+msgid "10"
+msgstr "10"
+
+msgid "60"
+msgstr "60"
+
+msgid "120"
+msgstr "120"
+
+msgid " Device is not enabled,"
+msgstr "Das Gerät ist nicht eingeschaltet,"
+
+msgid " Encryption disabled,"
+msgstr "Verschlüsselung ausgeschaltet,"
+
+msgid " SSID is hidden,"
+msgstr "Das WiFi-Netzwerk ist versteckt."
+
+msgid " The minimum password length is {minlength} character(s)."
+msgstr "Die Mindestlänge des Kennworts beträgt {minlength} Zeichen."
+
+msgid "(2.4 GHz)"
+msgstr "(2,4 GHz)"
+
+msgid "(5 GHz)"
+msgstr "(5 GHz)"
+
+msgid "(Radar detected on {channel})"
+msgstr "(Radar erkannt auf {channel})"
+
+msgid "(dynamic)"
+msgstr "(dynamisch)"
+
+msgid ")\n"
+msgstr ""
+
+msgid "* indicates default option"
+msgstr "* Standardeinstellung"
+
+msgid "* marks this device."
+msgstr "* dieses Gerät"
+
+msgid "* offers best performance"
+msgstr "* bietet die beste Leistung"
+
+msgid "00PM"
+msgstr "24"
+
+msgid "01AM"
+msgstr "01"
+
+msgid "01PM"
+msgstr "13"
+
+msgid "02AM"
+msgstr "02"
+
+msgid "02PM"
+msgstr "14"
+
+msgid "03AM"
+msgstr "03"
+
+msgid "03PM"
+msgstr "15"
+
+msgid "04AM"
+msgstr "04"
+
+msgid "04PM"
+msgstr "16"
+
+msgid "05AM"
+msgstr "05"
+
+msgid "05PM"
+msgstr "17"
+
+msgid "06AM"
+msgstr "06"
+
+msgid "06PM"
+msgstr "18"
+
+msgid "07AM"
+msgstr "07"
+
+msgid "07PM"
+msgstr "19"
+
+msgid "08AM"
+msgstr "08"
+
+msgid "08PM"
+msgstr "20"
+
+msgid "09AM"
+msgstr "09"
+
+msgid "09PM"
+msgstr "21"
+
+msgid "1 h"
+msgstr "1 h"
+
+msgid "10AM"
+msgstr "10"
+
+msgid "10PM"
+msgstr "22"
+
+msgid "11AM"
+msgstr "11"
+
+msgid "11PM"
+msgstr "23"
+
+msgid "12 h"
+msgstr "12 h"
+
+msgid "12AM"
+msgstr "00"
+
+msgid "12PM"
+msgstr "12"
+
+msgid "15 min"
+msgstr "15 Min."
+
+msgid "18 h"
+msgstr "18 h"
+
+msgid "2 h"
+msgstr "2 h"
+
+msgid "2.4 + 5 GHz network name"
+msgstr "2,4 + 5-GHz-Netzwerkname"
+
+msgid "2.4 GHz"
+msgstr "2,4 GHz"
+
+msgid "2.4 GHz + 5 GHz"
+msgstr "2,4 GHz + 5 GHz"
+
+msgid "2.4 GHz Radio"
+msgstr "2,4-GHz-Frequenzband"
+
+msgid "2.4 GHz WiFi LED"
+msgstr "2,4-GHz-WiFi-LED"
+
+msgid "2.4 GHz network name"
+msgstr "2,4-GHz-Netzwerkname"
+
+msgid "2.4 GHz network name:"
+msgstr "2,4-GHz-Netzwerkname:"
+
+msgid "20 MHz"
+msgstr "20 MHz"
+
+msgid "20/40 MHz"
+msgstr "20/40 MHz"
+
+msgid "24 h"
+msgstr "24 h"
+
+msgid "3 h"
+msgstr "3 h"
+
+msgid "30 min"
+msgstr "30 Min."
+
+msgid "36 h"
+msgstr "36 h"
+
+msgid "4 h"
+msgstr "4 h"
+
+msgid "40 MHz"
+msgstr "40 MHz"
+
+msgid "48 h"
+msgstr "48 h"
+
+msgid "5 GHz"
+msgstr "5 GHz"
+
+msgid "5 GHz Radio"
+msgstr "5-GHz-Frequenzband"
+
+msgid "5 GHz WiFi LED"
+msgstr "5 GHz WiFi-LED"
+
+msgid "5 GHz network name"
+msgstr "5-GHz-Netzwerkname"
+
+msgid "5 GHz network name:"
+msgstr "5-GHz-Netzwerkname:"
+
+msgid "5 h"
+msgstr "5 h"
+
+msgid "5 min"
+msgstr "5 Min."
+
+msgid "6 h"
+msgstr "6 h"
+
+msgid "80 MHz"
+msgstr "80 MHz"
+
+msgid "802.11a/n/ac"
+msgstr "802.11 a/n/ac"
+
+msgid "802.11ac"
+msgstr "802.11 ac"
+
+msgid "802.11b/g/n"
+msgstr "802.11 b/g/n"
+
+msgid "802.11g/n"
+msgstr "802.11 g/n"
+
+msgid "802.11n"
+msgstr "802.11 n"
+
+msgid "802.11n/ac"
+msgstr "802.11 n/ac"
+
+msgid "A RADIUS password is required!"
+msgstr "RADIUS-Kennwort nicht angegeben!"
+
+msgid "A RADIUS username is required!"
+msgstr "RADIUS-Benutzername nicht angegeben!"
+
+msgid "A new firmware version is available."
+msgstr ""
+
+msgid ""
+"A passphrase (8-63 characters) or a pre-shared key (64 characters) is "
+"required"
+msgstr ""
+"Ein Schlüssel ist erforderlich: entweder eine \"Passphrase\" mit einer "
+"Länge von 8 bis 63 Zeichen oder einen \"Preshared-Key\" mit einer Länge von "
+"64 Zeichen."
+
+msgid "A pre-shared key is required (8-64 characters)!"
+msgstr "Schlüssel erforderlich (64 Zeichen, Preshared-Key)!"
+
+msgid "AES"
+msgstr "AES"
+
+msgid "AVLN"
+msgstr "AVLN"
+
+msgid "Accounting Server"
+msgstr "Abrechnungsserver"
+
+msgid "Accounting Server:"
+msgstr "Abrechnungsserver:"
+
+msgid "Active"
+msgstr "Aktiv"
+
+msgid "Add Devices"
+msgstr "Geräte hinzufügen"
+
+msgid "Add devices to the WiFi network using the soft push button."
+msgstr "Gerät mit WPS-Pushbutton in das WiFi-Netzwerk aufnehmen."
+
+msgid "Add devices to the WiFi network using your PIN."
+msgstr "Gerät mittels PIN in das WiFi-Netzwerk aufnehmen"
+
+msgid "Add new SSID"
+msgstr "Neue SSID hinzufügen"
+
+msgid "Add new Time Server"
+msgstr "Neuen Zeitserver hinzufügen"
+
+msgid "Add new VLAN"
+msgstr "Neues VLAN hinzufügen"
+
+msgid "Add new server"
+msgstr "Neuen Server hinzufügen"
+
+msgid "Address/Subnet:"
+msgstr "Adresse/Subnetz:"
+
+msgid "Address:"
+msgstr "Adresse:"
+
+msgid "Advanced Settings"
+msgstr "Erweiterte Einstellungen"
+
+msgid "Airtime Fairness"
+msgstr "Airtime Fairness"
+
+msgid "All changes will have effect after system boot."
+msgstr ""
+
+msgid "Allow power saving mode"
+msgstr "Stromsparmodus erlauben"
+
+msgid ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+msgstr ""
+"Gestatten Sie dem Gerät in den Stromsparmodus zu wechseln, wenn ein "
+"reduzierter Datenverkehr über Ethernet erkannt wird. Warnung: Die "
+"Latenzzeit kann leiden, wenn sehr langsamer Datenverkehr erkannt wird."
+
+msgid "Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio."
+msgstr "Erlaubte Anzahl an SSIDs: {allowedRadioVapNumber} für {radioBand}-Radio."
+
+msgid ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+msgstr ""
+"Erlaubte Anzahl an SSIDs: {num1} für {radio1} Radio und {num2} für {radio2} "
+"Radio"
+
+msgid "Always"
+msgstr "Immer"
+
+msgid "An error has occurred. Please click the arrow to reload the page!"
+msgstr ""
+"Es ist ein Fehler aufgetreten.  Klicken Sie bitte auf den Pfeil, um die "
+"Seite neu zu laden!"
+
+msgid "An error occurred during device configuration:"
+msgstr "Bei der Konfiguration des Gerätes ist ein Fehler aufgetreten:"
+
+msgid "Answer of"
+msgstr "Antwort von"
+
+msgid "Authentication Server"
+msgstr "Authentifizierungsserver"
+
+msgid "Authentication Server:"
+msgstr "Authentifizierungsserver:"
+
+msgid "Authentication passphrase:"
+msgstr "Authentifizierungsschlüssel:"
+
+msgid "Authentication type:"
+msgstr "Authentifizierungsart:"
+
+msgid "Auto"
+msgstr "Automatisch"
+
+msgid "Auto *"
+msgstr "Automatisch *"
+
+msgid "Automatic *"
+msgstr "Automatisch *"
+
+msgid "Automatic Update:"
+msgstr "Automatische Firmware-Aktualisierung"
+
+msgid "Automatic shutoff"
+msgstr "Abschaltautomatik"
+
+msgid "Automatically search for updates:"
+msgstr "Automatisch nach Aktualisierungen suchen:"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Band Steering"
+msgstr "Band Steering"
+
+msgid "Basic"
+msgstr "Basis"
+
+msgid "Basic Settings"
+msgstr "Standardeinstellungen"
+
+msgid "Bridge"
+msgstr "Bridge"
+
+msgid "Bridge to Remote Access Point (WDS)"
+msgstr "Bridge zu entferntem Access-Point (WDS)"
+
+msgid "Browse ..."
+msgstr "Datei auswählen ..."
+
+msgid "Button Settings"
+msgstr "Einstellungen für die Bedientaster"
+
+msgid "Buttons"
+msgstr "Bedientaster"
+
+msgid "Buzzer"
+msgstr "Summer"
+
+msgid "Buzzer duration: {dur} s"
+msgstr "Signaldauer: {dur} Sek."
+
+msgid "CPU load:"
+msgstr "CPU-Auslastung:"
+
+msgid "Cancel"
+msgstr "Abbruch"
+
+msgid "Cancelled!"
+msgstr "Vorgang abgebrochen!"
+
+msgid "Cannot retrieve current network information."
+msgstr "Aktuelle Netzwerkinformationen können nicht ermittelt werden."
+
+msgid "Caps Lock is on!"
+msgstr "Die Feststelltaste ist gedrückt!"
+
+msgid "Central Coordinator"
+msgstr "Zentraler Koordinator"
+
+msgid "Change Password"
+msgstr "Zugriffskennwort ändern"
+
+msgid "Change Password?"
+msgstr "Kennwort ändern?"
+
+msgid "Change language"
+msgstr "Sprache ändern"
+
+msgid "Changing"
+msgstr "Ändern"
+
+msgid "Channel"
+msgstr "Kanal"
+
+msgid "Channel 2.4 GHz:"
+msgstr "2,4-GHz-Kanal"
+
+msgid "Channel 5 GHz:"
+msgstr "5-GHz-Kanal"
+
+msgid "Channel bandwidth:"
+msgstr "Kanalbreite:"
+
+msgid "Channel:"
+msgstr "Kanal:"
+
+msgid "Checking firmware image ..."
+msgstr "Firmware-Datei wird überprüft..."
+
+msgid "Checking session ID ..."
+msgstr "Session-ID wird überprüft..."
+
+msgid "Choose between different LED notification levels."
+msgstr "Wählen Sie das LED-Verhalten aus."
+
+msgid "Choose the CCo setting of your device in P2P mode."
+msgstr "Wählen Sie die CCo-Einstellung Ihres Gerätes für den P2P-Modus."
+
+msgid ""
+"Choose the compatibility mode of your device. This setting can help "
+"increase performance with technologies such as VDSL."
+msgstr ""
+"Wählen Sie den Kompatibilitätsmodus. Dies ist ein spezieller Modus, der "
+"selten auftretende Verbindungsprobleme, die durch Wechselwirkung mit "
+"anderen Techniken wie z. B. VDSL entstehen können, behebt."
+
+msgid "Choose the network mode of your device."
+msgstr "Wählen Sie den Netzwerkmodus Ihres Gerätes."
+
+msgid "Click here to update."
+msgstr "Zum Aktualisieren klicken Sie bitte hier."
+
+msgid "Click to edit"
+msgstr "Hier klicken, um den Eintrag zu bearbeiten"
+
+msgid "Clicking the button below will restart your device."
+msgstr "Durch Klicken auf \"Neu starten\" wird das Gerät neu gestartet."
+
+msgid "Clone SSID"
+msgstr "SSID klonen"
+
+msgid "Clone SSID via WPS"
+msgstr "SSID via WPS klonen"
+
+msgid "Compatibility Mode"
+msgstr "Kompatibilitätsmodus"
+
+msgid "Compatibility Mode:"
+msgstr "Kompatibilitätsmodus:"
+
+msgid "Compatibility mode"
+msgstr "Kompatibilitätsmodus"
+
+msgid "Config Sync"
+msgstr "Config Sync"
+
+msgid "Configuration"
+msgstr "Konfiguration"
+
+msgid "Configuration file too large (maximum {maxSize} bytes)!"
+msgstr "Die Konfigurationsdatei ist zu groß (maximal {maxSize} Byte)!"
+
+msgid "Configuration of time quotas"
+msgstr "Konfiguration"
+
+msgid "Configuration successfully restored!"
+msgstr "Konfiguration erfolgreich wiederhergestellt!"
+
+msgid "Configured VLANs:"
+msgstr "Konfigurierte VLANs:"
+
+msgid "Confirm"
+msgstr "Bestätigen"
+
+msgid "Confirm new password:"
+msgstr "Neues Kennwort bestätigen:"
+
+msgid "Connected AVLNs:"
+msgstr "Verbundene AVLNs:"
+
+msgid "Connected WiFi Clients"
+msgstr "Verbundene WiFi-Geräte"
+
+msgid "Connected WiFi clients:"
+msgstr "Verbundene WiFi-Geräte:"
+
+msgid "Connected clients"
+msgstr "Verbundene Geräte"
+
+msgid "Connected devices:"
+msgstr "Verbundene Geräte:"
+
+msgid "Connected powerline devices"
+msgstr "Verbundene Powerline-Geräte"
+
+msgid "Connected since"
+msgstr "Verbunden seit"
+
+msgid "Connection"
+msgstr "Verbindung"
+
+msgid "Connection lost!"
+msgstr "Verbindung unterbrochen!"
+
+msgid "Connection status:"
+msgstr "Verbindungsstatus:"
+
+msgid "Contact:"
+msgstr "Kontakt:"
+
+msgid "Current Firmware"
+msgstr "Aktuelle Firmware"
+
+msgid "Current channel"
+msgstr "Aktueller Kanal"
+
+msgid "Current channel:"
+msgstr "Aktueller Kanal:"
+
+msgid "DES"
+msgstr "DES"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DHCP Server"
+msgstr "DHCP-Server"
+
+msgid "Data rates:"
+msgstr "Datenraten:"
+
+msgid "Date"
+msgstr "Datum"
+
+msgid "Date and Time"
+msgstr "Datum und Zeit"
+
+msgid "Days"
+msgstr "Tage"
+
+msgid "Default"
+msgstr "Standard"
+
+msgid "Default VLAN"
+msgstr "Standard-VLAN"
+
+msgid "Default gateway:"
+msgstr "Standard-Gateway:"
+
+msgid "Default mode *"
+msgstr "Standardeinstellung *"
+
+msgid "Delete"
+msgstr "Löschen"
+
+msgid "Delete SSID?"
+msgstr "SSID löschen?"
+
+msgid "Device ID"
+msgstr "Geräte-ID"
+
+msgid "Device MAC"
+msgstr "Geräte-MAC-Adresse"
+
+msgid "Device Name"
+msgstr "Gerätename"
+
+msgid "Device rebooted.  Please login again!"
+msgstr "Gerät wurde neu gestartet. Melden Sie sich bitte erneut an!"
+
+msgid "Disable Radio?"
+msgstr "Radio ausgeschaltet?"
+
+msgid "Disable guest network {duration}"
+msgstr "Gastnetzwerk {duration} abschalten"
+
+msgid "Disabled"
+msgstr "Ausgeschaltet"
+
+msgid ""
+"Disabling the reset button also forbids resetting the configuration to "
+"factory defaults."
+msgstr ""
+"Durch das Deaktivieren des Resettasters entfällt die Möglichkeit das Gerät "
+"neu zu starten oder in den Auslieferungszustand zurück zu setzen."
+
+msgid ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+msgstr ""
+"Möchten Sie wirklich das PLC-Kennwort ändern? Die Verbindung zu diesem "
+"Gerät kann verloren gehen."
+
+msgid ""
+"Do you really want to enable the WiFi Schedule without adding time quotas? "
+"The Wifi will be turned off permanently."
+msgstr ""
+"Wenn Sie keine Regel konfigurieren, ist das WiFi dauerhaft nicht nutzbar "
+"bis Sie eine Regel hinzufügen oder die Zeitsteuerung deaktivieren."
+
+msgid "Do you really want to remove this SSID?"
+msgstr "Möchten Sie die SSID wirklich löschen?"
+
+msgid ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+msgstr ""
+"Möchten Sie das Gerät wirklich in den Auslieferungszustand zurücksetzen? "
+"Das Gerät startet anschließend neu."
+
+msgid "Do you really want to restart the device?"
+msgstr "Möchten Sie das Gerät wirklich neu starten?"
+
+msgid "Domain Master"
+msgstr "Domain Master"
+
+msgid "Download Firmware Version for Update"
+msgstr "Aktualisierte Firmware herunterladen"
+
+msgid "Download Firmware:"
+msgstr "Firmware herunterladen:"
+
+msgid "Dynamic VLAN"
+msgstr "Dynamisches VLAN"
+
+msgid "Enable"
+msgstr "Einschalten"
+
+msgid "Enable or completely disable the LEDs of your device."
+msgstr "LEDs dieses Gerätes einschalten oder komplett ausschalten"
+
+msgid "Enable or disable the buttons of your devices."
+msgstr "Aktivieren oder deaktivieren Sie die Funktion der Bedientaster am Gerät."
+
+msgid "Enabled"
+msgstr "Eingeschaltet"
+
+msgid "Enabled ({url})"
+msgstr "Eingeschaltet ({url})"
+
+msgid "Enabled SSIDs"
+msgstr "Eingeschaltete SSIDs"
+
+msgid "Enabled SSIDs:"
+msgstr "Eingeschaltete SSIDs:"
+
+msgid ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+msgstr ""
+"Mesh-Funktionalität optimiert Ihr WiFi-Netzwerk und macht es besser nutzbar "
+"für mobile WiFi-Geräte. Roaming behebt das Problem mit fest hängenden "
+"WiFi-Geräten. Band Steering und Dynamic Frequency Selection ermöglichen "
+"problemlosen WiFi-Zugang auch für viele WiFi-Geräte. Airtime Fairness "
+"optimiert die Bandbreite in Netzwerken mit vielen WiFi-Geräten."
+
+msgid "Encryption:"
+msgstr "Verschlüsselung:"
+
+msgid "End IP Address:"
+msgstr "End-IP-Adresse:"
+
+msgid "End Point"
+msgstr "Endpunkt"
+
+msgid "End address equals start address!"
+msgstr "Endadresse ist gleich Startadresse!"
+
+msgid "End address must be larger than start address!"
+msgstr "Endadresse muss größer als Startadresse sein!"
+
+msgid "End node"
+msgstr "End node"
+
+msgid "Enter WPS PIN"
+msgstr "WPS-PIN eingeben"
+
+msgid "Enter an alphanumeric community name (max 24 characters)"
+msgstr "Geben Sie einen alphanumerischen Community-Namen ein (max. 24 Zeichen)."
+
+msgid "Enter an alphanumeric username (max 24 characters)"
+msgstr "Geben Sie einen alphanumerischen Benutzernamen ein (max. 24 Zeichen)."
+
+msgid "Enter between 1 and 64 of these characters:"
+msgstr "Zwischen 1 und 64 dieser Zeichen eingeben:"
+
+msgid "Enter between 8 and 130 of these characters:"
+msgstr "Zwischen 8 und 130 dieser Zeichen eingeben:"
+
+msgid "Enter between 8 and 64 of these characters:"
+msgstr "Zwischen 8 und 64 dieser Zeichen eingeben:"
+
+msgid "Enter new password:"
+msgstr "Neues Kennwort eingeben:"
+
+msgid "Enter old password:"
+msgstr "Bisheriges Kennwort eingeben:"
+
+msgid "Enter the PIN of the device to be added to your WiFi network."
+msgstr ""
+"Geben Sie bitte die PIN des Gerätes ein, welches Ihrem WiFi-Netzwerk "
+"hinzugefügt soll."
+
+msgid ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+msgstr ""
+"Geben Sie bitte das PLC-Kennwort ein, welches das Gerät für den Zugriff auf "
+"Ihr Powerline-Netzwerk verwenden soll. Alle Geräte in einem "
+"Powerline-Netzwerk müssen dasselbe PLC-Kennwort verwenden."
+
+msgid "Error code:"
+msgstr "Fehler-Code:"
+
+msgid "Error occured! Please try again!"
+msgstr "Ein Fehler ist aufgetreten! Bitte versuchen Sie es erneut!"
+
+msgid "Error while processing WPS!  ->  ("
+msgstr "Es ist ein Fehler während des WPS-Vorgangs aufgetreten! -> ("
+
+msgid "Ethernet"
+msgstr "Ethernet"
+
+msgid "Europe/Aachen"
+msgstr "Europa/Aachen"
+
+msgid "Europe/Amsterdam"
+msgstr "Europa/Amsterdam"
+
+msgid "Europe/Andorra"
+msgstr "Europa/Andorra"
+
+msgid "Europe/Athens"
+msgstr "Europa/Athen"
+
+msgid "Europe/Belgrade"
+msgstr "Europa/Belgrad"
+
+msgid "Europe/Berlin"
+msgstr "Europa/Berlin"
+
+msgid "Europe/Bratislava"
+msgstr "Europa/Bratislava"
+
+msgid "Europe/Brussels"
+msgstr "Europa/Brüssel"
+
+msgid "Europe/Bucharest"
+msgstr "Europa/Bukarest"
+
+msgid "Europe/Budapest"
+msgstr "Europa/Budapest"
+
+msgid "Europe/Busingen"
+msgstr "Europa/Busingen"
+
+msgid "Europe/Chisinau"
+msgstr "Europa/Chisinau"
+
+msgid "Europe/Copenhagen"
+msgstr "Europa/Kopenhagen"
+
+msgid "Europe/Dublin"
+msgstr "Europa/Dublin"
+
+msgid "Europe/Gibraltar"
+msgstr "Europa/Gibraltar"
+
+msgid "Europe/Guernsey"
+msgstr "Europa/Guernsey"
+
+msgid "Europe/Helsinki"
+msgstr "Europa/Helsinki"
+
+msgid "Europe/Isle of Man"
+msgstr "Europa/Isle of Man"
+
+msgid "Europe/Istanbul"
+msgstr "Europa/Istanbul"
+
+msgid "Europe/Jersey"
+msgstr "Europa/Jersey"
+
+msgid "Europe/Kaliningrad"
+msgstr "Europa/Kaliningrad"
+
+msgid "Europe/Kiev"
+msgstr "Europa/Kiew"
+
+msgid "Europe/Lisbon"
+msgstr "Europa/Lissabon"
+
+msgid "Europe/Ljubljana"
+msgstr "Europa/Ljubljana"
+
+msgid "Europe/London"
+msgstr "Europa/London"
+
+msgid "Europe/Luxembourg"
+msgstr "Europa/Luxemburg"
+
+msgid "Europe/Madrid"
+msgstr "Europa/Madrid"
+
+msgid "Europe/Malta"
+msgstr "Europa/Malta"
+
+msgid "Europe/Mariehamn"
+msgstr "Europa/Mariehamn"
+
+msgid "Europe/Minsk"
+msgstr "Europa/Minsk"
+
+msgid "Europe/Monaco"
+msgstr "Europa/Monaco"
+
+msgid "Europe/Moscow"
+msgstr "Europa/Moskau"
+
+msgid "Europe/Oslo"
+msgstr "Europa/Oslo"
+
+msgid "Europe/Paris"
+msgstr "Europa/Paris"
+
+msgid "Europe/Podgorica"
+msgstr "Europa/Podgorica"
+
+msgid "Europe/Prague"
+msgstr "Europa/Prag"
+
+msgid "Europe/Riga"
+msgstr "Europa/Riga"
+
+msgid "Europe/Rome"
+msgstr "Europa/Rom"
+
+msgid "Europe/Samara"
+msgstr "Europa/Samara"
+
+msgid "Europe/San Marino"
+msgstr "Europa/San Marino"
+
+msgid "Europe/Sarajevo"
+msgstr "Europa/Sarajewo"
+
+msgid "Europe/Simferopol"
+msgstr "Europa/Simferopol"
+
+msgid "Europe/Skopje"
+msgstr "Europa/Skopje"
+
+msgid "Europe/Sofia"
+msgstr "Europa/Sofia"
+
+msgid "Europe/Stockholm"
+msgstr "Europa/Stockholm"
+
+msgid "Europe/Tallinn"
+msgstr "Europa/Tallinn"
+
+msgid "Europe/Tirane"
+msgstr "Europa/Tirana"
+
+msgid "Europe/Uzhgorod"
+msgstr "Europa/Uschhorod"
+
+msgid "Europe/Vaduz"
+msgstr "Europa/Vaduz"
+
+msgid "Europe/Vatican"
+msgstr "Europa/Vatikan"
+
+msgid "Europe/Vienna"
+msgstr "Europa/Wien"
+
+msgid "Europe/Vilnius"
+msgstr "Europa/Vilnius"
+
+msgid "Europe/Volgograd"
+msgstr "Europa/Wolgograd"
+
+msgid "Europe/Warsaw"
+msgstr "Europa/Warschau"
+
+msgid "Europe/Zagreb"
+msgstr "Europa/Zagreb"
+
+msgid "Europe/Zaporozhye"
+msgstr "Europa/Saporischschja"
+
+msgid "Europe/Zurich"
+msgstr "Europa/Zürich"
+
+msgid "Fast transition (802.11r)"
+msgstr "Fast transition (802.11r)"
+
+msgid "Features"
+msgstr "Funktionen"
+
+msgid "Find Me"
+msgstr "Finde Mich!"
+
+msgid "Firmware"
+msgstr "Firmware"
+
+msgid "Firmware file:"
+msgstr "Firmware-Datei:"
+
+msgid "Firmware image too large (maximum {maxSize} bytes)!"
+msgstr "Firmware-Datei ist zu groß (maximum {maxSize} Byte)!"
+
+msgid "Firmware updated successfully."
+msgstr "Die Aktualisierung der Firmware war erfolgreich."
+
+msgid "Firmware version:"
+msgstr "Firmware-Version:"
+
+msgid "Force Node Type"
+msgstr "Node Type erzwingen"
+
+msgid "Force node type"
+msgstr "Node Type erzwingen"
+
+msgid "Free memory:"
+msgstr "Freier Arbeitsspeicher:"
+
+msgid "Frequency band"
+msgstr "Frequenzband"
+
+msgid "Frequency band:"
+msgstr "Frequenzband:"
+
+msgid "Fri"
+msgstr "Fr"
+
+msgid "Friday"
+msgstr "Freitag"
+
+msgid "From"
+msgstr "von"
+
+msgid "Get IP configuration from a DHCP server"
+msgstr "Netzwerkeinstellungen von einem DHCP-Server beziehen"
+
+msgid "Guest network"
+msgstr "Gastnetzwerk"
+
+msgid "Guest network configuration"
+msgstr "Konfiguration "
+
+msgid "HH"
+msgstr "HH"
+
+msgid "Here"
+msgstr "Hier"
+
+msgid ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking Start configuration."
+msgstr ""
+"Hier können Sie ein neues Powerline-Gerät Ihrem Netzwerk hinzufügen. Geben "
+"Sie zuerst die auf der Rückseite aufgedruckte Security-ID ein, stecken Sie "
+"das Gerät anschließend in eine Steckdose und bestätigen per Klick auf "
+"\"Konfiguration starten\"."
+
+msgid ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+msgstr ""
+"Hier weisen Sie Ihrem Netzwerk ein individuelles PLC-Kennwort zu (anstatt "
+"des automatisch generierten PLC-Kennwortes)."
+
+msgid ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+msgstr ""
+"Hier können Sie die Zeitintervalle definieren, wann Ihr WiFi eingeschaltet "
+"werden soll."
+
+msgid "Hide SSID:"
+msgstr "SSID verbergen"
+
+msgid "Hide password"
+msgstr "Kennwort verstecken"
+
+msgid "High ({power} dBm)"
+msgstr "Hoch ({power} dBm)"
+
+msgid ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+msgstr ""
+"IEEE 802.11r (auch \"Fast Roaming\" genannt) beschleunigt die Anmeldung "
+"eines WiFi-Gerätes an diesem WiFi-Zugangspunkt. Voraussetzung: Das Gerät "
+"war bereits mit einem anderen WiFi-Zugangspunkt mit aktiviertem 802.11r, "
+"identischem Netzwerknamen (SSID) sowie identischer Verschlüsselung "
+"verbunden. 802.11r ist leider nicht mit jedem WiFi-Gerät kompatibel. Sollte "
+"es bei einem Ihrer Geräte zu Problemen kommen, dann deaktivieren Sie bitte "
+"diese Option."
+
+msgid "IP Configuration"
+msgstr "IP-Konfiguration"
+
+msgid "IP address is inside the loopback network!"
+msgstr "IP-Adresse liegt innerhalb des Loopback-Adressbereichs!"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv4 address"
+msgstr "IPv4-Adresse"
+
+msgid "IPv4 address of DNS server"
+msgstr "IPv4-Adresse des DNS-Servers"
+
+msgid "IPv4 address of default gateway"
+msgstr "IPv4-Adresse des Standard-Gateways"
+
+msgid "IPv4 configuration successfully updated."
+msgstr "IPv4-Konfiguration erfolgreich aktualisiert."
+
+msgid "IPv4 netmask"
+msgstr "IPv4-Subnetzmaske"
+
+msgid "IPv4/IPv6"
+msgstr "IPv4/IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "IPv6 Address"
+msgstr "IPv6-Adresse"
+
+msgid ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be resetted to factory defaults."
+msgstr ""
+"Wenn Sie fortfahren, werden alle Geräteeinstellungen gelöscht und der "
+"Auslieferungszustand wiederhergestellt."
+
+msgid ""
+"In this case, instead of the automatically generated PLC password, assign a "
+"separate PLC password to your network manually."
+msgstr ""
+"Anstatt des automatisch generierten PLC-Kennwortes weisen Sie Ihrem "
+"Netzwerk hier ein individuelles PLC-Kennwort zu."
+
+msgid "Incorrect password!"
+msgstr "Ungültiges Kennwort"
+
+msgid "Individual ({power} dBm)"
+msgstr "Individuell ({power} dBm)"
+
+msgid "Individual transmit power:"
+msgstr "Individuelle Sendeleistung:"
+
+msgid "Indoor use only:"
+msgstr "Nur Innennutzung:"
+
+msgid "Information"
+msgstr "Informationen"
+
+msgid "Interfaces"
+msgstr "Netzwerkschnittstellen"
+
+msgid "Interval"
+msgstr "Bereich"
+
+msgid "Invalid IP address!"
+msgstr "Ungültige IP-Adresse"
+
+msgid ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Ungültiger Schlüssel! Geben Sie bitte mindestens 8 und maximal 63 Zeichen "
+"ein. Erlaubte Sonderzeichen: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ "
+"+ = . _ / ?  < >"
+
+msgid "Invalid Mac address!"
+msgstr "Ungültige MAC-Adresse!"
+
+msgid "Invalid SSID!  Please enter between 1 and 32 characters)."
+msgstr "Ungültige SSID! Geben Sie bitte mindestens 1 und maximal 32 Zeichen ein."
+
+msgid ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Ungültige SSID! Geben Sie bitte mindestens 1 und maximal 32 Zeichen ein. "
+"Erlaubte Sonderzeichen: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \" ` ~ + = . "
+"_ / ? \\ < >"
+
+msgid "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+msgstr "Ungültige VLAN-ID! Geben Sie bitte einen Wert zwischen 1 und 4094 ein!"
+
+msgid "Invalid hostname or IP address!"
+msgstr "Ungültiger Hostname oder ungültige IP-Adresse"
+
+msgid "Invalid hostname or IP/Subnet!"
+msgstr "Ungültiger Hostname oder ungültige IP-/Netzwerkmaske"
+
+msgid ""
+"Invalid hostname! Allowed are the digits 0-9, upper- and lowercase letters "
+"a-z, A-Z and the hyphen. The hostname cannot start or end with a hyphen."
+msgstr ""
+"Ungültiger Hostname! Erlaubte Zeichen sind 0-9, a-z, A-Z und Bindestrich "
+"„-“. Der Hostname darf nicht mit einem Bindestrich beginnen oder enden."
+
+msgid ""
+"Invalid key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ?  < >"
+msgstr ""
+"Ungültiger Schlüssel! Geben Sie bitte mindestens 8 und maximal 63 Zeichen "
+"ein. Erlaubte Sonderzeichen: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ "
+"+ = . _ / ?  < >"
+
+msgid "Invalid name!"
+msgstr "Ungültiger Name!"
+
+msgid "Invalid netmask!"
+msgstr "Ungültige Subnetzmaske"
+
+msgid "Invalid port! Please enter a value between 1 and 65535."
+msgstr "Ungültiger Port! Geben Sie bitte einen Wert zwischen 1 und 65535 ein!"
+
+msgid ""
+"Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed "
+"characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+msgstr ""
+"Ungültiger Schlüssel (Preshared-Key)! Geben Sie bitte 64 Zeichen ein. "
+"Erlaubte Zeichen: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 123."
+msgstr ""
+"Ungültiger Bereich für 2,4 GHz, bitte geben Sie einen Wert zwischen 0 und "
+"123 an. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Ungültiger Bereich für 2,4 GHz, bitte geben Sie einen Wert zwischen 0 und "
+"123 an. \n"
+"Ungültiger Bereich für 5 GHz, bitte geben Sie einen Wert zwischen 0 und 200 "
+"an. "
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 127."
+msgstr ""
+"Ungültiger Bereich für 2,4 GHz, bitte geben Sie einen Wert zwischen 0 und "
+"127 an. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Ungültiger Bereich für 2,4 GHz, bitte geben Sie einen Wert zwischen 0 und "
+"127 an. \n"
+"Ungültiger Bereich für 5 GHz, bitte geben Sie einen Wert zwischen 0 und 200 "
+"an. "
+
+msgid "Invalid range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Ungültiger Bereich für 5 GHz, bitte geben Sie einen Wert zwischen 0 und 200 "
+"an. "
+
+msgid "Key:"
+msgstr "Schlüssel:"
+
+msgid "LAN"
+msgstr "LAN"
+
+msgid "LED Settings"
+msgstr "LED-Einstellungen"
+
+msgid "LEDs"
+msgstr "LEDs"
+
+msgid "Lease Time:"
+msgstr "Lease-Dauer:"
+
+msgid "Leasetime"
+msgstr "Lease-Dauer"
+
+msgid "Licenses"
+msgstr "Lizenzen"
+
+msgid "Loading ..."
+msgstr "Lädt ..."
+
+msgid "Local Device"
+msgstr "Lokales Gerät"
+
+msgid "Local time:"
+msgstr "Atuelles Datum und Uhrzeit:"
+
+msgid "Location:"
+msgstr "Standort:"
+
+msgid "Log Level"
+msgstr "Stufe"
+
+msgid "Login"
+msgstr "Anmelden"
+
+msgid "Logout"
+msgstr "Abmelden"
+
+msgid "Logs"
+msgstr "Ereignisse"
+
+msgid "Low ({power} dBm)"
+msgstr "Niedrig ({power} dBm)"
+
+msgid "MAC Address"
+msgstr "MAC-Adresse"
+
+msgid "MAC Addresses"
+msgstr "MAC-Adressen"
+
+msgid "MAC address"
+msgstr "MAC-Adresse"
+
+msgid "MBytes"
+msgstr "MByte"
+
+msgid "MD5"
+msgstr "MD5"
+
+msgid "MHz"
+msgstr "MHz"
+
+msgid "MM"
+msgstr "mm"
+
+msgid "Management"
+msgstr "Verwaltung"
+
+msgid "Management VLAN"
+msgstr "Management-VLAN"
+
+msgid "Management VLAN:"
+msgstr "Management-VLAN:"
+
+msgid "Manual"
+msgstr "Handbuch"
+
+msgid "Manufacturer"
+msgstr "Hersteller"
+
+msgid "Mask:"
+msgstr "Prefix:"
+
+msgid "Max. clients:"
+msgstr "Max. Anzahl Geräte:"
+
+msgid "Max. transmit power:"
+msgstr "Max. Sendeleistung:"
+
+msgid "Mbit/s"
+msgstr "Mbit/s"
+
+msgid "Medium ({power} dBm)"
+msgstr "Mittel ({power} dBm)"
+
+msgid "Members"
+msgstr "Mitglieder"
+
+msgid "Mesh WiFi"
+msgstr "Mesh-WLAN"
+
+msgid "Message"
+msgstr "Meldung"
+
+msgid "Minimum lease time is two minutes!"
+msgstr "Minimale Lease-Dauer ist zwei Minuten!"
+
+msgid "Mode:"
+msgstr "Modus:"
+
+msgid "Mon"
+msgstr "Mo"
+
+msgid "Mon-Fri"
+msgstr "Mo-Fr"
+
+msgid "Monday"
+msgstr "Montag"
+
+msgid "N/A"
+msgstr "N/A"
+
+msgid "NTP configuration successfully saved."
+msgstr "Zeitserver-Konfiguration wurde erfolgreich gespeichert."
+
+msgid "Name server:"
+msgstr "DNS-Server:"
+
+msgid "Name:"
+msgstr "Name:"
+
+msgid ""
+"Navigating away from this page will discard all your changes. Really "
+"proceed?"
+msgstr ""
+"Wenn Sie diese Seite verlassen, gehen Ihre Änderungen verloren. Möchten Sie "
+"trotzdem fortfahren?"
+
+msgid "Neighbour network"
+msgstr "Nachbarnetzwerke"
+
+msgid "Network"
+msgstr "Netzwerk"
+
+msgid "Network Mode:"
+msgstr "Netzwerkmodus:"
+
+msgid "Network interface"
+msgstr "Netzwerkadapter"
+
+msgid "Network name"
+msgstr "Netzwerkname"
+
+msgid "Network name 2.4 + 5 GHz"
+msgstr "Netzwerkname 2,4 + 5 GHz"
+
+msgid "Network name:"
+msgstr "Netzwerkname:"
+
+msgid "Never"
+msgstr "Niemals"
+
+msgid ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+msgstr ""
+"Es wurde ein neues Powerline-Gerät gefunden. Warten Sie bitte bis der "
+"Vorgang abgeschlossen ist, dies kann bis zu 20 Sek. dauern."
+
+msgid "No Log Information"
+msgstr "Keine Ereignisse vorhanden."
+
+msgid ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"companions security ID."
+msgstr ""
+"Es wurde kein neues Powerline-Gerät gefunden. Überprüfen Sie bitte, ob die "
+"Security-ID richtig eingegeben wurde."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button.\n"
+"              Please wait until the process has been finished."
+msgstr ""
+"Es wurde kein Powerline-Gerät gefunden. Überprüfen Sie bitte, ob die "
+"entsprechenden PLC-Taster korrekt gedrückt wurden.\n"
+" Bitte warten Sie bis der Vorgang abgeschlossen ist.\n"
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button. Please wait until the process has been finished."
+msgstr ""
+"Es wurde kein Powerline-Gerät gefunden. Drücken Sie bitte den PLC-Taster "
+"und warten bis der Vorgang abgeschlossen ist."
+
+msgid "No RADIUS server configured"
+msgstr "Es ist kein RADIUS-Server konfiguriert!"
+
+msgid "No VLAN"
+msgstr "Kein VLAN"
+
+msgid "No WiFi radio enabled. Please enable a radio."
+msgstr ""
+"Alle WiFi-Access-Points sind ausgeschaltet. Schalten Sie bitte mindestens "
+"einen WiFi-Access-Point ein."
+
+msgid "No clients are connected"
+msgstr "Keine Geräte verbunden."
+
+msgid "No encryption (not recommended)"
+msgstr "\"Keine Verschlüsselung\" ist eine nicht empfohlene Einstellung."
+
+msgid "No file selected."
+msgstr "Keine Datei ausgewählt."
+
+msgid "Not a valid input such as \"1d 12h 30m\"!"
+msgstr "Keine gültige Eingabe wie z. B. \"1d 12h 30m\"!"
+
+msgid "Not configured"
+msgstr "Nicht konfiguriert."
+
+msgid "Not connected"
+msgstr "Nicht verbunden"
+
+msgid "Now press the WPS button on the device being added to your WiFi network."
+msgstr ""
+"Drücken Sie jetzt den WiFi-Taster an dem Gerät, welches Sie zum "
+"WiFi-Netzwerk hinzufügen möchten."
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Off"
+msgstr "Aus"
+
+msgid "Old password was incorrect!"
+msgstr "Das aktuelle Kennwort ist nicht korrekt!"
+
+msgid "Only for development"
+msgstr "Nur für Entwicklungszwecke"
+
+msgid "Open"
+msgstr "Offen"
+
+msgid "Open (OWE)"
+msgstr "Open (OWE)"
+
+msgid "Operate as DHCP server"
+msgstr "Als DHCP-Server betreiben"
+
+msgid "Origin"
+msgstr "Quelle"
+
+msgid "Outside of the address range!"
+msgstr "Außerhalb des Adressbereichs!"
+
+msgid "Overview"
+msgstr "Übersicht"
+
+msgid "Overview of the wifi schedule settings"
+msgstr "Übersicht"
+
+msgid "PAIR"
+msgstr "PLC-Verbindung aufbauen"
+
+msgid "PLC Connections"
+msgstr "PLC-Verbindungen"
+
+msgid "PLC Name"
+msgstr "PLC-Name"
+
+msgid "PLC domain name"
+msgstr "PLC-Domain-Name"
+
+msgid "PLC firmware version:"
+msgstr "PLC Firmware-Version:"
+
+msgid "PLC password"
+msgstr "PLC-Kennwort"
+
+msgid "PLC role"
+msgstr "PLC-Rolle"
+
+msgid "Pairing"
+msgstr "Pairing - PLC-Verbindung aufbauen"
+
+msgid "Parental Control"
+msgstr "Kindersicherung"
+
+msgid "Password"
+msgstr "Kennwort"
+
+msgid "Password:"
+msgstr "Kennwort:"
+
+msgid "Passwords do not match!"
+msgstr "Die Kennwörter stimmen nicht überein!"
+
+msgid "Peer isolation"
+msgstr "Kommunikation zwischen WiFi-Geräten verbieten"
+
+msgid "Please activate the WiFi network to enable Clone SSID via WPS"
+msgstr ""
+"Schalten Sie bitte das WiFi-Netzwerk ein, um den WiFi Clone-Modus zu "
+"starten."
+
+msgid "Please click the + button to add a SSID."
+msgstr "Klicken Sie bitte auf die Schaltfläche +, um eine neue SSID hinzuzufügen."
+
+msgid "Please click the + button to add a VLAN"
+msgstr "Klicken Sie bitte auf die Schaltfläche +, um ein neues VLAN hinzuzufügen"
+
+msgid "Please click the + button to add a new schedule."
+msgstr "Klicken Sie bitte auf die Schaltfläche +, um eine neue Regel hinzuzufügen."
+
+msgid "Please click the + button to add a time server"
+msgstr ""
+"Klicken Sie bitte auf die Schaltfläche +, um einen neuen Zeitserver "
+"hinzuzufügen."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+msgstr ""
+"Konfigurieren Sie bitte {here} einen statischen WiFi-Kanal. Beachten Sie, "
+"dass die anderen Access-Points in Ihrem Netzwerk entsprechend konfiguriert "
+"werden."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+msgstr ""
+"Konfigurieren Sie bitte {here} einen statischen WiFi-Kanal. Beachten Sie, "
+"dass die anderen Access-Points in Ihrem Netzwerk entsprechend konfiguriert "
+"werden. Empfehlung: Wählen Sie einen Kanal zwischen 36 und 48, um "
+"Kanaländerungen aufgrund von DFS zu vermeiden."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+msgstr ""
+"Konfigurieren Sie bitte {here} einen statischen WiFi-Kanal. Beachten Sie, "
+"dass andere Access-Points in der Bridge den gleichen WiFi-Kanal eingestellt "
+"haben sollten. Empfehlung: Kanal 100."
+
+msgid ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+msgstr ""
+"Vergeben Sie einen Netzwerknamen und bestätigen Ihre Einträge mit einem "
+"Klick auf das Disketten-Symbol."
+
+msgid "Please enter a password to secure the access to your device."
+msgstr ""
+"Geben Sie bitte ein Kennwort ein, um den Zugriff auf die Konfiguration des "
+"Gerätes zu beschränken."
+
+msgid ""
+"Please enter a value of at least 15 minutes or 0 to disable the "
+"functionality!"
+msgstr ""
+"Geben Sie bitte einen Zeitraum größer 15 Minuten ein. Zum Deaktivieren der "
+"Funktion geben Sie 0 ein."
+
+msgid "Please log in with your password!"
+msgstr "Melden Sie sich bitte mit Ihrem Kennwort an!"
+
+msgid "Please login again."
+msgstr "Melden Sie sich bitte erneut an:"
+
+msgid "Please note that WiFi schedule Settings have precedence over these settings!"
+msgstr ""
+"Bitte beachten Sie, dass die Einstellungen in der Zeitsteuerung Vorrang vor "
+"diesen Einstellungen haben!"
+
+msgid ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+msgstr ""
+"Beachten Sie bitte, dass viele Tablets/Smartphones Ihre WiFi-Verbindung "
+"permanent aufrechterhalten!"
+
+msgid ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, exit Config Sync on the device, that you want to configure "
+"or switch separately."
+msgstr ""
+"Beachten Sie bitte, dass immer im ganzen Netzwerk das WiFi ein- bzw. "
+"ausgeschaltet wird. Deaktivieren Sie daher zuerst Config Sync auf dem "
+"Gerät, welches Sie separat konfigurieren oder schalten möchten."
+
+msgid "Please select the configuration file to be restored to this device."
+msgstr "Wählen Sie die Konfigurationsdatei aus, die Sie wiederherstellen wollen."
+
+msgid "Please select the firmware file to be loaded onto this device."
+msgstr "Wählen Sie die Firmware-Datei aus, die auf das Gerät geladen werden soll."
+
+msgid "Port"
+msgstr "Anschluss"
+
+msgid "Port number"
+msgstr "Portnummer"
+
+msgid "Port:"
+msgstr "Port:"
+
+msgid "Power Management"
+msgstr "Energieverwaltung"
+
+msgid "Powerline"
+msgstr "Powerline"
+
+msgid "Powerline LED"
+msgstr "Powerline-LED"
+
+msgid "Powerline Network Mode"
+msgstr "Powerline-Netzwerkmodus"
+
+msgid "Powerline Password"
+msgstr "Powerline-Kennwort"
+
+msgid "Powerline Settings"
+msgstr "Powerline-Standby-Einstellungen"
+
+msgid "Powerline button"
+msgstr "PLC-Taster"
+
+msgid "Powerline encryption already in progress by external or previous request."
+msgstr "Das Powerline-Netzwerk wird noch aufgebaut."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+msgstr ""
+"Das Powerline-Netzwerk wird noch aufgebaut. Warten Sie bitte bis der "
+"Vorgang abgeschlossen ist. Noch 120 Sekunden."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+msgstr ""
+"Das Powerline-Netzwerk wird noch aufgebaut. Warten Sie bitte bis der "
+"Vorgang abgeschlossen ist. Noch {time} Sekunden."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished.\n"
+"              This can take up to 1 minute."
+msgstr ""
+"Das Einbinden in ein Powerline-Netzwerk mittels Security-ID wurde "
+"gestartet. Bitte warten Sie bis der Vorgang abgeschlossen ist, dies kann "
+"bis zu 60 Sek. dauern."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished. This can take up to 1 minute."
+msgstr ""
+"Das Einbinden in ein Powerline pro-Netzwerk mittels Security-ID wurde "
+"gestartet. Warten Sie bitte bis der Vorgang abgeschlossen ist, dies kann "
+"bis zu 60 Sek. dauern."
+
+msgid "Powerline encryption was stopped by external event."
+msgstr "Der Aufbau des Powerline-Netzwerks wurde gestoppt."
+
+msgid "Powerline encryption was successfully stopped."
+msgstr "Das Powerline-Netzwerk wurde erfolgreich eingerichtet."
+
+msgid ""
+"Powerline standby is enabled! Disabling all radios will interrupt the "
+"connection to this website if the device can only be reached via Powerline "
+"and it enters standby mode. Do you really want to disable this radio?"
+msgstr ""
+"Der Powerline-Standby-Modus ist eingeschaltet! Das Ausschalten aller "
+"Frequenzbänder unterbricht die Verbindung mit dieser Webseite, falls dieses "
+"Gerät über Powerline mit dem Netzwerk verbunden ist und in den "
+"Standby-Modus wechselt. Möchten Sie dieses Frequenzband wirklich "
+"ausschalten?"
+
+msgid "Powersave mode"
+msgstr "Stromsparmodus"
+
+msgid "Preferred:"
+msgstr "Bevorzugt:"
+
+msgid "Profile"
+msgstr "Profil"
+
+msgid "Programming firmware image..."
+msgstr "Schreibe Firmware-Datei ..."
+
+msgid "Protocol:"
+msgstr "Protokoll:"
+
+msgid "Public community (read only):"
+msgstr "Public community (lesend):"
+
+msgid "Public source:"
+msgstr "Public source:"
+
+msgid "Quota"
+msgstr "Zeitkontingent"
+
+msgid "Quota has been depleted"
+msgstr "Das Zeitkontingent ist abgelaufen."
+
+msgid "Quota is currently depleting"
+msgstr "Das Zeitkontingent läuft ab."
+
+msgid "RADIUS"
+msgstr "RADIUS"
+
+msgid "RADIUS configuration applied successfully"
+msgstr "RADIUS-Konfiguration erfolgreich gespeichert."
+
+msgid "RADIUS configuration is incomplete"
+msgstr "RADIUS-Konfiguration ist nicht vollständig!"
+
+msgid "RADIUS password:"
+msgstr "RADIUS-Kennwort:"
+
+msgid "RADIUS username:"
+msgstr "RADIUS-Benutzername:"
+
+msgid "Radio"
+msgstr "Radio"
+
+msgid "Radio channel:"
+msgstr "WiFi-Kanal:"
+
+msgid "Radio:"
+msgstr "Radio:"
+
+msgid "Radios"
+msgstr "Radios"
+
+msgid "Rate (Mbit/s)"
+msgstr "Rate (Mbit/s)"
+
+msgid "Reboot"
+msgstr "Neu starten"
+
+msgid "Reboot Device"
+msgstr "Gerät neu starten"
+
+msgid "Reboot device?"
+msgstr "Gerät neu starten?"
+
+msgid "Receive (Mbps)"
+msgstr "Empfangen (Mbit/s)"
+
+msgid "Recommended: 20 MHz"
+msgstr "Empfohlener Wert: 20 MHz"
+
+msgid "Recommended: 802.11g/n"
+msgstr "Empfohlener Wert: 802.11g/n"
+
+msgid "Recommended: 802.11n/ac"
+msgstr "Empfohlener Wert: 802.11n/ac"
+
+msgid "Recommended: Auto"
+msgstr "Empfohlener Wert: Auto"
+
+msgid "Recommended: Auto, 1, 6, 11"
+msgstr "Empfohlene Werte: Auto, 1, 6, 11"
+
+msgid "Reduced"
+msgstr "Reduziert"
+
+msgid "Remote syslog server:"
+msgstr "Remote-Syslog-Server:"
+
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+msgid "Reset Configuration"
+msgstr "Gerätekonfiguration zurücksetzen"
+
+msgid "Reset button"
+msgstr "Reset-Taster"
+
+msgid "Reset device to factory defaults?"
+msgstr "Gerät in den Auslieferungszustand zurücksetzen?"
+
+msgid "Reset/Restart button"
+msgstr "Reset-Taster"
+
+msgid "Restore"
+msgstr "Wiederherstellen"
+
+msgid "Restore Device Configuration From File"
+msgstr "Gerätekonfiguration aus Datei wiederherstellen"
+
+msgid "Role"
+msgstr "Rolle"
+
+msgid "Run Mode"
+msgstr "Run Mode"
+
+msgid "Rx rate (Mbit/s)"
+msgstr "Empfangsrate (Mbit/s)"
+
+msgid "SHA"
+msgstr "SHA"
+
+msgid "SNMP version:"
+msgstr "SNMP-Version:"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID already exists"
+msgstr "SSID existiert bereits!"
+
+msgid "SSID broadcast"
+msgstr "SSID sichtbar"
+
+msgid "SSID:"
+msgstr "SSID:"
+
+msgid "SSIDs"
+msgstr "SSIDs"
+
+msgid "Sat"
+msgstr "Sa"
+
+msgid "Sat+Sun"
+msgstr "Sa+So"
+
+msgid "Saturday"
+msgstr "Samstag"
+
+msgid "Save"
+msgstr "Speichern"
+
+msgid "Save Configuration to File"
+msgstr "Gerätekonfiguration als Datei speichern"
+
+msgid "Scan"
+msgstr "Scannen"
+
+msgid "Scan interval (min.):"
+msgstr "Prüfintervall (Min.):"
+
+msgid "Scan interval in minutes"
+msgstr "Scan-Intervall in Minuten"
+
+msgid "Schedule"
+msgstr "Zeitsteuerung"
+
+msgid "Schedule configuration successfully saved."
+msgstr "Die Änderung wurde erfolgreich gespeichert."
+
+msgid "Search ..."
+msgstr "Suchen ..."
+
+msgid "Secret:"
+msgstr "Geheimnis"
+
+msgid "Secured"
+msgstr "Gesichert"
+
+msgid "Security"
+msgstr "Verschlüsselung"
+
+msgid "Security ID:"
+msgstr "Security-ID:"
+
+msgid "Security passphrase:"
+msgstr "Sicherheitsschlüssel:"
+
+msgid "Security status:"
+msgstr "Verschlüsselungsstatus:"
+
+msgid "Security type:"
+msgstr "Verschlüsselungsart:"
+
+msgid "Security:"
+msgstr "Verschlüsselung:"
+
+msgid "Select Interval"
+msgstr "Intervall auswählen"
+
+msgid ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+msgstr ""
+"Wählen Sie einen Zeitraum aus. Nach Ablauf wird das Gastnetzwerk "
+"automatisch abgeschaltet."
+
+msgid "Select day"
+msgstr "Tag auswählen"
+
+msgid "Select time limit"
+msgstr "Zeitlimit auswählen"
+
+msgid "Selected time period:"
+msgstr "Ausgewählter Zeitraum:"
+
+msgid "Serial number:"
+msgstr "Seriennummer:"
+
+msgid "Server is outside of the network and unreachable!"
+msgstr "Die Adresse liegt außerhalb des Subnetzes und ist somit nicht erreichbar!"
+
+msgid "Server-side NAS key"
+msgstr "Serverseitiger NAS-Schlüssel"
+
+msgid "Server:"
+msgstr "Server:"
+
+msgid "Service"
+msgstr "Dienst"
+
+msgid "Service Name"
+msgstr "Dienstname"
+
+msgid "Services"
+msgstr "Dienste"
+
+msgid "Set a duration and click \"Start\" to activate the buzzer for this time."
+msgstr ""
+"Stellen Sie die Dauer des Summers ein, um Ihr Gerät zu finden und klicken "
+"Sie \"Starten\"."
+
+msgid "Setting 0 prevents any clients from connecting to the SSID!"
+msgstr "Die Einstellung 0 verhindert das Anmelden jeglicher Geräte an dieser SSID!"
+
+msgid "Settings"
+msgstr "Einstellungen"
+
+msgid ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually, after having re-established the connection."
+msgstr ""
+"Sollte das Gerät mit den geänderten Einstellungen nicht mehr erreichbar "
+"sein, laden Sie die Seite bitte neu, nachdem Sie die Verbindung "
+"wiederhergestellt haben."
+
+msgid "Show password"
+msgstr "Kennwort anzeigen"
+
+msgid "Signal (dBm)"
+msgstr "Signal (dBm)"
+
+msgid "Signal quality (%)"
+msgstr "Signalqualität (%)"
+
+msgid "Since"
+msgstr "Seit"
+
+msgid ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+msgstr ""
+"Einige SSIDs wurden ausgeschaltet, weil die RADIUS-Konfiguration ungültig "
+"geworden ist."
+
+msgid "Some SSIDs are updated to new RADIUS configuration"
+msgstr ""
+"Einige SSIDs wurden geändert, weil die RADIUS-Konfiguration sich geändert "
+"hat."
+
+msgid ""
+"Some event has been occoured. Determining reason, this can take up to 1 "
+"minute."
+msgstr ""
+"Es ist ein Problem aufgetreten. Es kann bis zu 1 Minute dauern bis die "
+"Ursache gefunden wird."
+
+msgid "Standby"
+msgstr "Standby"
+
+msgid "Start"
+msgstr "Starten"
+
+msgid "Start Configuration"
+msgstr "Konfiguration starten"
+
+msgid "Start IP Address:"
+msgstr "Start-IP-Adresse:"
+
+msgid "Start address equals end address!"
+msgstr "Startadresse ist gleich Endadresse"
+
+msgid "Start address must be smaller than end address!"
+msgstr "Startadresse muss kleiner als Endadresse sein!"
+
+msgid "Start pairing"
+msgstr "PLC-Verbindungsaufbau starten"
+
+msgid ""
+"Start the pairing process by pressing the PLC button on an adapter in your "
+"existing network first. Then, click on \"PAIR\"."
+msgstr ""
+"Drücken Sie zuerst den PLC-Taster eines Adapters Ihres bestehenden "
+"Netzwerks und starten anschließend den Pairing-Vorgang per\n"
+"Klick auf \"PAIR\"."
+
+msgid "Start time and end time cannot be equal! Please correct your time quotas!"
+msgstr "Start- und Endzeit können nicht gleich sein! Ändern Sie bitte die Zeiten!"
+
+msgid "Static IPv4 Address"
+msgstr "Statische IPv4-Adresse"
+
+msgid "Station is not connected"
+msgstr "Endgerät ist nicht verbunden."
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Status:"
+msgstr "Status:"
+
+msgid "Stop"
+msgstr "Anhalten"
+
+msgid "Stop Configuration"
+msgstr "Konfiguration stoppen"
+
+msgid "Stop time must be after start time! Please correct your time quotas!"
+msgstr "Die Endzeit muss vor der Startzeit liegen! Ändern Sie bitte die Zeiten!"
+
+msgid "Subnet mask:"
+msgstr "Subnetzmaske:"
+
+msgid "Subnet:"
+msgstr "Subnetzmaske:"
+
+msgid "Successfully deleted."
+msgstr "Erfolgreich gelöscht."
+
+msgid "Sun"
+msgstr "So"
+
+msgid "Sunday"
+msgstr "Sonntag"
+
+msgid "Support"
+msgstr "Support"
+
+msgid "Supported"
+msgstr "Unterstützt"
+
+msgid "Switch your WiFi network on first so that your guest network can be used."
+msgstr ""
+"Schalten Sie zuerst Ihr WiFi-Netzwerk ein, um Ihr Gastnetzwerk nutzen zu "
+"können."
+
+msgid "System"
+msgstr "System"
+
+msgid "System Information"
+msgstr "Systeminformationen"
+
+msgid "System contact:"
+msgstr "Kontaktperson:"
+
+msgid "System location:"
+msgstr "Gerätestandort:"
+
+msgid "System name (hostname):"
+msgstr "Gerätename (Hostname):"
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using a mobile "
+"devices such as smartphones or tablets. While scanning the QR code the "
+"credentials for the guestnetwork will be transfered to your mobile device."
+msgstr ""
+"Mit dem QR‐Code können Sie die Verbindung zum Gastnetzwerk\n"
+"bequem für Mobilgeräte (z. B.: Smartphone oder Tablet)\n"
+"einrichten. Beim Scannen des Codes werden die Verschlüsselungseinstellungen "
+"des Gastnetzwerks\n"
+"automatisch auf das jeweilige Mobilgerät übertragen."
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+msgstr ""
+"Mit dem QR‐Code können Sie die Verbindung zum Gastnetzwerk\n"
+"bequem für Mobilgeräte (z. B.: Smartphone oder Tablet)\n"
+"einrichten. Beim Scannen des Codes werden die Verschlüsselungseinstellungen "
+"des Gastnetzwerks\n"
+"automatisch auf das jeweilige Mobilgerät übertragen."
+
+msgid ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+msgstr "Schalten Sie das WiFi an, damit Sie die Nachbarnetzwerke sehen können."
+
+msgid "The device has a new IP address. Please login at the new URL:"
+msgstr "Das Gerät hat eine neue IP-Adresse. Melden Sie sich bitte erneut an:"
+
+msgid ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+msgstr ""
+"Die gesamte WLAN-Konfiguration wird auf alle Config Sync-fähigen Geräte "
+"Ihres Netzwerks übertragen."
+
+msgid "The guest network does only allow access to the internet."
+msgstr "Das Gastnetzwerk lässt nur den Zugriff auf das Internet zu."
+
+msgid "The guestnetwork does only allow access to the internet."
+msgstr "Das Gastnetzwerk lässt nur den Zugriff auf das Internet zu."
+
+msgid "The host name is too long. Max. 32 characters allowed."
+msgstr "Der Hostname muss aus 1 bis 32 Zeichen bestehen."
+
+msgid "The host name is too short. Please enter at least 1 character."
+msgstr "Der Host-Name ist zu kurz. Geben Sie bitte mindestens 1 Zeichen ein."
+
+msgid "The maximum number ({maxVLANs}) of VLANs has been configured."
+msgstr "Die maximale Anzahl ({maxVLANs}) an VLANs wurde erreicht."
+
+msgid "The password contains an invalid character:"
+msgstr "Das Kennwort enthält ein ungültiges Zeichen:"
+
+msgid ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+msgstr ""
+"Die Security-ID besteht aus vier durch Bindestriche getrennte Gruppen mit "
+"jeweils vier Großbuchstaben."
+
+msgid ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+msgstr ""
+"Die ausgewählte Konfigurationsdatei ist ungültig, bitte wählen Sie eine "
+"passende Datei für dieses Gerät."
+
+msgid ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+msgstr ""
+"Die ausgewählte Firmware-Datei ist ungültig, bitte wählen Sie eine passende "
+"Firmware-Datei für dieses Gerät."
+
+msgid ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+msgstr ""
+"Die Umstellung zwischen Sommer- und Winterzeit geschieht automatisch durch "
+"den Zeitserver. Sie brauchen daher keine manuellen Einstellungen "
+"vorzunehmen."
+
+msgid "There are no configured time servers."
+msgstr "Es sind keine Zeitserver konfiguriert."
+
+msgid "There is a newer version."
+msgstr "Aktuelle Version"
+
+msgid "There is newer version:"
+msgstr "Aktuelle Version:"
+
+msgid ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+msgstr ""
+"Dazu gehören die folgenden Einstellungen: WiFi-Netzwerk, Gastnetzwerk, "
+"Mesh-Funktionalität, Zeitsteuerung- und Zeitservereinstellungen."
+
+msgid "This is the broadcast address!"
+msgstr "Dies ist die Broadcast-Adresse!"
+
+msgid "This is the device's IP address!"
+msgstr "Dies ist die IP-Adresse des Gerätes!"
+
+msgid "This is the network address!"
+msgstr "Dies ist die Subnetzadresse!"
+
+msgid "This page will be reloaded automatically, when the action has finished."
+msgstr "Diese Seite wird nach Abschluss der Aktion automatisch neu geladen."
+
+msgid "This server already exists."
+msgstr "Dieser Server existiert bereists!"
+
+msgid "Thu"
+msgstr "Do"
+
+msgid "Thursday"
+msgstr "Donnerstag"
+
+msgid "Time Server"
+msgstr "Zeitserver"
+
+msgid "Time Server (NTP)"
+msgstr "Zeitserver (NTP)"
+
+msgid "Time Server:"
+msgstr "Zeitserver:"
+
+msgid "Time Zone"
+msgstr "Zeitzone"
+
+msgid "Time server"
+msgstr "Zeitserver "
+
+msgid "Time zone configuration successfully saved."
+msgstr "Die Zeitzonen-Konfiguration wurde erfolgreich gespeichert."
+
+msgid "Time zone:"
+msgstr "Zeitzone:"
+
+msgid "To"
+msgstr "bis"
+
+msgid "Total memory:"
+msgstr "Gesamter Arbeitsspeicher:"
+
+msgid "Transmit (Mbps)"
+msgstr "Senden (Mbit/s)"
+
+msgid "Tue"
+msgstr "Di"
+
+msgid "Tuesday"
+msgstr "Dienstag"
+
+msgid "Turn off the WiFi"
+msgstr "WiFi ausschalten"
+
+msgid "Tx rate (Mbit/s)"
+msgstr "Senderate (Mbit/s)"
+
+msgid "Tx-Power"
+msgstr "Sendeleistung"
+
+msgid "Type"
+msgstr "Art"
+
+msgid "Type error"
+msgstr "Fehler-Typ"
+
+msgid "Type status"
+msgstr "Status-Typ"
+
+msgid "UNPAIR"
+msgstr "PLC-Verbindung trennen"
+
+msgid "UTC"
+msgstr "UTC"
+
+msgid "Unpair device"
+msgstr "PLC-Verbindung des Gerätes trennen"
+
+msgid "Unpairing"
+msgstr "Unpairing - PLC-Verbindung trennen"
+
+msgid "Unsecured"
+msgstr "Ungesichert"
+
+msgid "Untagged"
+msgstr "Untagged"
+
+msgid "Update firmware"
+msgstr "Update durchführen"
+
+msgid "Update firmware to latest version"
+msgstr "Firmware auf aktuelle Version aktualisieren"
+
+msgid "Update table"
+msgstr "Tabelle aktualisieren"
+
+msgid "Uploading ..."
+msgstr "Übertragung läuft ..."
+
+msgid "Uploading firmware image ..."
+msgstr "Firmware-Datei wird übertragen ..."
+
+msgid "Uptime:"
+msgstr "Gerätelaufzeit:"
+
+msgid "Use common settings"
+msgstr "gleiche Einstellungen"
+
+msgid ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button on the device which you want to join "
+"your Powerline network! Afterwards, click the \"Start configuration\" "
+"button."
+msgstr ""
+"Geräte mittels PLC-Taster in das Powerline-Netzwerk aufnehmen. Drücken Sie "
+"bitte innerhalb von 2 Minuten den PLC-Taster des Geräts, das Ihrem "
+"Powerline-Netzwerk hinzugefügt soll. Klicken Sie anschließend auf die "
+"Schaltfläche \"Konfiguration starten\"."
+
+msgid "Username"
+msgstr "Benutzername"
+
+msgid "Username:"
+msgstr "Benutzername:"
+
+msgid "Using the encryption button"
+msgstr "Mittels PLC-Taster"
+
+msgid "VLAN ID"
+msgstr "VLAN-ID"
+
+msgid "VLAN ID must be unique!"
+msgstr "VLAN-ID existiert bereits!"
+
+msgid "VLAN ID out of range (1-4094)!"
+msgstr "Ungültige VLAN-ID! Geben Sie bitte einen Wert zwischen 1 und 4094 ein."
+
+msgid "VLAN Name"
+msgstr "VLAN-Name"
+
+msgid "VLAN name must be unique!"
+msgstr "VLAN-Name muss eindeutig sein!"
+
+msgid "VLAN {id}"
+msgstr "VLAN {id}"
+
+msgid "VLAN:"
+msgstr "VLAN:"
+
+msgid "VLANs"
+msgstr "VLANs"
+
+msgid "Valid:"
+msgstr "Gültig:"
+
+msgid "Very High ({power} dBm)"
+msgstr "Sehr Hoch ({power} dBm)"
+
+msgid "Via security ID"
+msgstr "Mittels Security-ID"
+
+msgid "WDS bridge configuration updated."
+msgstr "Konfiguration der WiFi-Bridge erfolgreich gespeichert."
+
+msgid "WMM Power-Save (U-APSD)"
+msgstr "WMM Power-Save (U-APSD)"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA/WPA2 Personal"
+msgstr "WPA/WPA2-Personal"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WPA2 Enterprise"
+msgstr "WPA2-Enterprise"
+
+msgid "WPA2 Personal"
+msgstr "WPA2-Personal"
+
+msgid "WPA2 Personal *"
+msgstr "WPA2-Personal *"
+
+msgid "WPA2 pre-shared key:"
+msgstr "WPA2-Schlüssel:"
+
+msgid "WPA3/WPA2 Personal"
+msgstr "WPA3/WPA2 Personal"
+
+msgid "WPS"
+msgstr "WPS"
+
+msgid "WPS Clone Mode failed: "
+msgstr "Der WPS-Clone-Modus ist fehlgeschlagen:"
+
+msgid "WPS Clone Mode succeeded!"
+msgstr "Der WPS-Clone-Modus war erfolgreich!"
+
+msgid "WPS Mode:"
+msgstr "WPS-Modus:"
+
+msgid "WPS PIN"
+msgstr "WPS-PIN"
+
+msgid "WPS PIN connect applied successfully"
+msgstr "Die Verbindung über WPS-PIN war erfolgreich!"
+
+msgid "WPS PIN connect failed"
+msgstr "Die Verbindung über WPS-PIN ist fehlgeschlagen!"
+
+msgid "WPS PIN is active..."
+msgstr "WPS-PIN ist aktiv..."
+
+msgid "WPS PIN is not valid. Use a 4- or 8-digit number."
+msgstr ""
+"Die WPS-PIN ist nicht korrekt. Geben Sie bitte die richtige Zahl mit 4 oder "
+"8 Zeichen ein."
+
+msgid "WPS Pushbutton"
+msgstr "WPS-Pushbutton"
+
+msgid "WPS Pushbutton is active..."
+msgstr "WPS-Pushbutton ist aktiv..."
+
+msgid "WPS connect applied successfully"
+msgstr "Die Verbindung über WPS war erfolgreich!"
+
+msgid "WPS connect failed"
+msgstr "Die Verbindung über WPS ist fehlgeschlagen!"
+
+msgid "WPS is active..."
+msgstr "WPS ist aktiv..."
+
+msgid "Warning"
+msgstr "Warnung"
+
+msgid "Wed"
+msgstr "Mi"
+
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+msgid "Welcome to your {product}"
+msgstr "Willkommen bei Ihrem {product}"
+
+msgid ""
+"When scan interval is set to 0 this function is disabled. Recommended: 240 "
+"minutes"
+msgstr "Zum Deaktivieren der Funktion geben Sie 0 ein. Empfehlung: 240 Minuten"
+
+msgid ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+msgstr ""
+"Ist die die Funktion \"Automatische Verbindungstrennung\" aktiviert, wird "
+"das Funknetzwerk erst abgeschaltet, nachdem das letzte WLAN-Gerät sich von "
+"Ihrem Access-Point abgemeldet hat. "
+
+msgid "WiFi"
+msgstr "WiFi"
+
+msgid "WiFi Clients"
+msgstr "WLAN-Endgeräte"
+
+msgid "WiFi Clone"
+msgstr "WiFi Clone"
+
+msgid ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+msgstr ""
+"Mittels WiFi Clone können Sie die WiFi-Zugangsdaten (Netzwerkname und "
+"WiFi-Kennwort) eines anderen WiFi-Access-Points für dieses Gerät "
+"automatisch übernehmen. Dazu starten Sie den Konfigurationsvorgang und "
+"drücken anschließend den WPS-Taster des Geräts, dessen WiFi-Zugangsdaten "
+"(SSID und WiFi-Kennwort) übernommen werden sollen."
+
+msgid "WiFi Clone is active..."
+msgstr "WiFi Clone ist aktiviert..."
+
+msgid "WiFi LED"
+msgstr "WiFi-LED"
+
+msgid "WiFi Network"
+msgstr "WiFi-Netzwerk"
+
+msgid "WiFi Protected Setup (WPS) - Configuration"
+msgstr "WiFi Protected Setup (WPS) - Konfiguration"
+
+msgid "WiFi button"
+msgstr "WiFi-Taster"
+
+msgid "WiFi convenience function"
+msgstr "Automatische Verbindungstrennung"
+
+msgid "WiFi disabled"
+msgstr "WiFi ausgeschaltet"
+
+msgid "WiFi enabled"
+msgstr "WiFi eingeschaltet"
+
+msgid "WiFi network"
+msgstr "WiFi-Netzwerk"
+
+msgid "WiFi network mode:"
+msgstr "WiFi-Netzwerkmodus:"
+
+msgid "WiFi networks"
+msgstr "WiFi-Netzwerke"
+
+msgid "WiFi schedule control"
+msgstr "WiFi-Zeitsteuerung"
+
+msgid "WiFi schedule settings"
+msgstr "Einstellungen"
+
+msgid "Wifi Status"
+msgstr "WiFi-Status"
+
+msgid ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+msgstr ""
+"Sie können die Gerätekonfiguration auf Ihrem Computer als Datei speichern "
+"und später wiederherstellen oder die gespeicherte Konfigurationsdatei auf "
+"ein anderes Gerät übertragen."
+
+msgid "You can find the latest firmware"
+msgstr "Die aktuelle Firmware finden Sie "
+
+msgid ""
+"You can limit access to certain Wi-Fi devices by the MAC address. Please "
+"define the time periods during which Wi-Fi access is allowed."
+msgstr ""
+"Hier können Sie Zugangsbeschränkungen für bestimmte WiFi-Geräte anhand der "
+"MAC-Adresse definieren. Geben Sie dazu die Zeitintervalle an, in denen die "
+"Geräte WLAN-Zugang erhalten sollen."
+
+msgid "You can no longer create SSIDs for the {radioBand} radio"
+msgstr "Sie können keine weiteren SSIDs für das {radioBand}-Frequenzband hinzufügen!"
+
+msgid "You can't have 2 quotas for same mac address! Please correct your quota!"
+msgstr ""
+"Ein WLAN-Gerät kann nicht mehrere Zeitkontingente gleichzeitig nutzen. "
+"Bitte korrigieren Sie die Zeiten."
+
+msgid "You can't have overlapping quotas for the same station!"
+msgstr ""
+"Überschneidungen mehrerer Zeitkontingente für das gleiche WLAN-Gerät sind "
+"nicht möglich!"
+
+msgid "You cannot combine the time period and time limit for a WiFi device!"
+msgstr ""
+"Sie können Zeitraum und Zeitlimit für ein WiFi-Gerät nicht miteinander "
+"kombinieren!"
+
+msgid ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+msgstr ""
+"Sie wurden aus Sicherheitsgründen automatisch vom System abgemeldet. Bitte "
+"melden Sie Sich erneut an!"
+
+msgid "You have successfully changed the Configuration for your device's LEDs."
+msgstr "Sie haben das Verhalten der LED erfolgreich geändert."
+
+msgid "You have successfully changed the configuration for your device's buttons."
+msgstr "Sie haben das Verhalten der Bedientaster erfolgreich geändert."
+
+msgid "You have successfully configured an SSID"
+msgstr "Die Konfiguration der SSID wurde erfolgreich gespeichert."
+
+msgid "You have successfully deleted an SSID"
+msgstr "Die SSID wurde erfolgreich gelöscht."
+
+msgid "You have successfully updated the compatibility mode setting."
+msgstr "Sie haben den Kompatibilitätsmodus erfolgreich aktualisiert."
+
+msgid "You have successfully updated your Config sync settings"
+msgstr "Die Config Sync-Einstellungen wurden erfolgreich gespeichert."
+
+msgid "You have successfully updated your PLC network settings."
+msgstr "Die PLC-Netzwerkeinstellungen wurden erfolgreich aktualisiert."
+
+msgid "You have successfully updated your PLC password."
+msgstr "Das PLC-Kennwort wurde erfolgreich aktualisiert."
+
+msgid "You have successfully updated your Powerline encryption password"
+msgstr "Ihr PLC-Kennwort wurde erfolgreich aktualisiert."
+
+msgid "You have successfully updated your Powerline network mode"
+msgstr "Sie haben den Powerline-Netzwerkmodus erfolgreich aktualisiert."
+
+msgid "You have successfully updated your Powerline pro network."
+msgstr "Ihr Powerline pro-Netzwerk wurde erfolgreich erweitert."
+
+msgid "You have successfully updated your system management configuration"
+msgstr "Verwaltungseinstellungen wurden erfolgreich gespeichert."
+
+msgid "You have successfully {enableOrDisableTerm} {name} service."
+msgstr "{name} wurde erfolgreich {enableOrDisableTerm}."
+
+msgid ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+msgstr ""
+"Sie müssen mehr unterschiedliche Zeichenklassen verwenden (Großbuchstaben, "
+"Kleinbuchstaben, Ziffern und Sonderzeichen)."
+
+msgid "You've successfully changed your password."
+msgstr "Kennwort erfolgreich geändert."
+
+msgid "You've successfully configured the WiFi network."
+msgstr "Ihr WiFi-Netzwerk wurde erfolgreich konfiguriert."
+
+msgid "You've successfully configured the radio."
+msgstr "Die Konfiguration des WiFi-Frequenzbandes wurde erfolgreich gespeichert."
+
+msgid "Your Powerline pro network is disabled."
+msgstr "Ihr Powerline pro-Netzwerk ist ausgeschaltet."
+
+msgid "Your WiFi is not encrypted. Please activate the encryption."
+msgstr ""
+"Ihr WiFi-Netzwerk ist nicht verschlüsselt. Aktivieren Sie bitte die "
+"Verschlüsselung."
+
+msgid ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+msgstr ""
+"Das Powerline-Gerät wird automatisch in den Stromsparmodus versetzt, wenn "
+"keine Ethernetverbindungen aktiv sind (d.h. keine eingeschalteten "
+"Netzwerkgeräte an den Netzwerkschnittstellen angeschlossen sind) und WiFi "
+"ausgeschaltet ist."
+
+msgid "call ubus"
+msgstr "ubus aufrufen"
+
+msgid "connected"
+msgstr "verbunden"
+
+msgid "current session"
+msgstr "Aktuelle Session:"
+
+msgid "current ubus request queue"
+msgstr "Aktuelle ubus-Request-Warteschlange"
+
+msgid "d, "
+msgstr "T, "
+
+msgid "dLAN button"
+msgstr "Powerline-Pairing-Taster"
+
+msgid "daily"
+msgstr "täglich"
+
+msgid "devolo"
+msgstr "devolo"
+
+msgid "disabled"
+msgstr "deaktiviert"
+
+msgid "display {num} of {all}"
+msgstr "zeige {num} von {all}"
+
+msgid "enabled"
+msgstr "aktiviert"
+
+msgid "mimo_full"
+msgstr "Full power"
+
+msgid "mimo_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "mimo_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "n/a"
+msgstr "n/a"
+
+msgid "no PLC connections"
+msgstr "keine PLC-Verbindungen"
+
+msgid "none"
+msgstr "keine"
+
+msgid "not configured"
+msgstr "nicht konfiguriert"
+
+msgid "off"
+msgstr "aus"
+
+msgid "on"
+msgstr "an"
+
+msgid "one day, {hours}:{minutes}:{seconds}"
+msgstr "Ein Tag, {hours}:{minutes}:{seconds}"
+
+msgid "pending"
+msgstr "Verbinde..."
+
+msgid "reduced"
+msgstr "reduziert"
+
+msgid "s"
+msgstr "Sek."
+
+msgid "siso_full"
+msgstr "Full power"
+
+msgid "siso_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "siso_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "static"
+msgstr "statisch"
+
+msgid "ubus Test"
+msgstr "ubus-Test"
+
+msgid "ubus callee"
+msgstr "ubus-Aufgerufener:"
+
+msgid "ubus data"
+msgstr "ubus-Daten:"
+
+msgid "ubus section"
+msgstr "ubus-Sektion:"
+
+msgid "unknown"
+msgstr "Unbekannt"
+
+msgid "unknown LED"
+msgstr "unbekannte LED"
+
+msgid "unknown button"
+msgstr "unbekannter Taster"
+
+msgid "v1 + v2c"
+msgstr "v1 + v2c"
+
+msgid "v3"
+msgstr "v3"
+
+msgid "{days} days, {hours}:{minutes}:{seconds}"
+msgstr "{days} Tage, {hours}:{minutes}:{seconds}"
+
+msgid "{duration} remaining"
+msgstr "{duration} verbleibend"
+
+msgid "{frequency} GHz Radio"
+msgstr "{frequency}-GHz-Frequenzband"
\ No newline at end of file
diff --git a/www/assets/i18n/en.po b/www/assets/i18n/en.po
new file mode 100644
index 0000000..636889a
--- /dev/null
+++ b/www/assets/i18n/en.po
@@ -0,0 +1,2551 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "1"
+msgstr "1"
+
+msgid "10"
+msgstr "10"
+
+msgid "60"
+msgstr "60"
+
+msgid "120"
+msgstr "120"
+
+msgid " Device is not enabled,"
+msgstr "Device is not enabled,"
+
+msgid " Encryption disabled,"
+msgstr "Encryption disabled,"
+
+msgid " SSID is hidden,"
+msgstr "SSID is hidden,"
+
+msgid " The minimum password length is {minlength} character(s)."
+msgstr "The minimum password length is {minlength} character(s)."
+
+msgid "(2.4 GHz)"
+msgstr "(2.4 GHz)"
+
+msgid "(5 GHz)"
+msgstr "(5 GHz)"
+
+msgid "(Radar detected on {channel})"
+msgstr "(Radar detected on {channel})"
+
+msgid "(dynamic)"
+msgstr "(dynamic)"
+
+msgid ")\n"
+msgstr ""
+
+msgid "* marks this device."
+msgstr "* marks this device."
+
+msgid "00PM"
+msgstr "24"
+
+msgid "01AM"
+msgstr "01"
+
+msgid "01PM"
+msgstr "13"
+
+msgid "02AM"
+msgstr "02"
+
+msgid "02PM"
+msgstr "14"
+
+msgid "03AM"
+msgstr "03"
+
+msgid "03PM"
+msgstr "15"
+
+msgid "04AM"
+msgstr "04"
+
+msgid "04PM"
+msgstr "16"
+
+msgid "05AM"
+msgstr "05"
+
+msgid "05PM"
+msgstr "17"
+
+msgid "06AM"
+msgstr "06"
+
+msgid "06PM"
+msgstr "18"
+
+msgid "07AM"
+msgstr "07"
+
+msgid "07PM"
+msgstr "19"
+
+msgid "08AM"
+msgstr "08"
+
+msgid "08PM"
+msgstr "20"
+
+msgid "09AM"
+msgstr "09"
+
+msgid "09PM"
+msgstr "21"
+
+msgid "1 h"
+msgstr "1 h"
+
+msgid "10AM"
+msgstr "10"
+
+msgid "10PM"
+msgstr "22"
+
+msgid "11AM"
+msgstr "11"
+
+msgid "11PM"
+msgstr "23"
+
+msgid "12 h"
+msgstr "12 h"
+
+msgid "12AM"
+msgstr "00"
+
+msgid "12PM"
+msgstr "12"
+
+msgid "15 min"
+msgstr "15 min."
+
+msgid "18 h"
+msgstr "18 h"
+
+msgid "2 h"
+msgstr "2 h"
+
+msgid "2.4 + 5 GHz network name"
+msgstr "2.4 + 5 GHz network name"
+
+msgid "2.4 GHz"
+msgstr "2.4 GHz"
+
+msgid "2.4 GHz + 5 GHz"
+msgstr "2.4 GHz + 5 GHz"
+
+msgid "2.4 GHz Radio"
+msgstr "2.4 GHz frequency band"
+
+msgid "2.4 GHz WiFi LED"
+msgstr "2.4 GHz WiFi LED"
+
+msgid "2.4 GHz network name"
+msgstr "2.4 GHz network name"
+
+msgid "2.4 GHz network name:"
+msgstr "2.4 GHz network name:"
+
+msgid "20 MHz"
+msgstr "20 MHz"
+
+msgid "20/40 MHz"
+msgstr "20/40 MHz"
+
+msgid "24 h"
+msgstr "24 h"
+
+msgid "3 h"
+msgstr "3 h"
+
+msgid "30 min"
+msgstr "30 min."
+
+msgid "36 h"
+msgstr "36 h"
+
+msgid "4 h"
+msgstr "4 h"
+
+msgid "40 MHz"
+msgstr "40 MHz"
+
+msgid "48 h"
+msgstr "48 h"
+
+msgid "5 GHz"
+msgstr "5 GHz"
+
+msgid "5 GHz Radio"
+msgstr "5 GHz frequency band"
+
+msgid "5 GHz WiFi LED"
+msgstr "5 GHz WiFi LED"
+
+msgid "5 GHz network name"
+msgstr "5 GHz network name"
+
+msgid "5 GHz network name:"
+msgstr "5 GHz network name:"
+
+msgid "5 h"
+msgstr "5 h"
+
+msgid "5 min"
+msgstr "5 min."
+
+msgid "6 h"
+msgstr "6 h"
+
+msgid "80 MHz"
+msgstr "80 MHz"
+
+msgid "802.11a/n/ac"
+msgstr "802.11a/n/ac"
+
+msgid "802.11ac"
+msgstr "802.11ac"
+
+msgid "802.11b/g/n"
+msgstr "802.11b/g/n"
+
+msgid "802.11g/n"
+msgstr "802.11g/n"
+
+msgid "802.11n"
+msgstr "802.11n"
+
+msgid "802.11n/ac"
+msgstr "802.11n/ac"
+
+msgid "A RADIUS password is required!"
+msgstr "A RADIUS password is required!"
+
+msgid "A RADIUS username is required!"
+msgstr "A RADIUS username is required!"
+
+msgid "A new firmware version is available."
+msgstr ""
+
+msgid ""
+"A passphrase (8-63 characters) or a pre-shared key (64 characters) is "
+"required"
+msgstr ""
+"One of the following key is required: a passphrase with a length of 8 to 63 "
+"characters or a pre-shared key with a length of 64 characters."
+
+msgid "A pre-shared key is required (8-64 characters)!"
+msgstr "A pre-shared key is required (64 characters)!"
+
+msgid "AES"
+msgstr "AES"
+
+msgid "AVLN"
+msgstr "AVLN"
+
+msgid "Accounting Server"
+msgstr "Accounting Server"
+
+msgid "Accounting Server:"
+msgstr "Accounting Server:"
+
+msgid "Active"
+msgstr "Active"
+
+msgid "Add Devices"
+msgstr "Add Devices"
+
+msgid "Add devices to the WiFi network using the soft push button."
+msgstr "Add devices to the WiFi network using the soft pushbutton."
+
+msgid "Add devices to the WiFi network using your PIN."
+msgstr "Add devices to the WiFi network using your PIN."
+
+msgid "Add new SSID"
+msgstr "Add a new SSID"
+
+msgid "Add new Time Server"
+msgstr "Add a new Time Server"
+
+msgid "Add new VLAN"
+msgstr "Add a new VLAN"
+
+msgid "Add new server"
+msgstr "Add a new server"
+
+msgid "Address/Subnet:"
+msgstr "Address/Subnet:"
+
+msgid "Address:"
+msgstr "Address:"
+
+msgid "Advanced Settings"
+msgstr "Advanced Settings"
+
+msgid "Airtime Fairness"
+msgstr "Airtime Fairness"
+
+msgid "All changes will have effect after system boot."
+msgstr ""
+
+msgid ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+msgstr ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+
+msgid "Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio."
+msgstr "Allowed number of SSIDs: {radioBand} for {allowedRadioVapNumber} radio."
+
+msgid ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+msgstr ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+
+msgid "Always"
+msgstr "Always"
+
+msgid "An error has occurred. Please click the arrow to reload the page!"
+msgstr "An error has occurred. Please click the arrow to reload the page!"
+
+msgid "An error occurred during device configuration:"
+msgstr "An error occurred during device configuration:"
+
+msgid "Answer of"
+msgstr "Answer of"
+
+msgid "Authentication Server"
+msgstr "Authentication Server"
+
+msgid "Authentication Server:"
+msgstr "Authentication Server:"
+
+msgid "Authentication passphrase:"
+msgstr "Authentication key:"
+
+msgid "Authentication type:"
+msgstr "Authentication type:"
+
+msgid "Auto"
+msgstr "Auto"
+
+msgid "Auto *"
+msgstr "Auto *"
+
+msgid "Automatic *"
+msgstr "Automatic *"
+
+msgid "Automatic Update:"
+msgstr "Automatic Update:"
+
+msgid "Automatic shutoff"
+msgstr "Automatic Shutoff"
+
+msgid "Automatically search for updates:"
+msgstr "Automatically search for updates:"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Band Steering"
+msgstr "Band Steering"
+
+msgid "Basic"
+msgstr "Basic"
+
+msgid "Basic Settings"
+msgstr "Basic Settings"
+
+msgid "Bridge"
+msgstr "Bridge"
+
+msgid "Bridge to Remote Access Point (WDS)"
+msgstr "Bridge to Remote Access Point (WDS)"
+
+msgid "Browse ..."
+msgstr "Browse ..."
+
+msgid "Button Settings"
+msgstr "Button Settings"
+
+msgid "Buttons"
+msgstr "Buttons"
+
+msgid "Buzzer"
+msgstr "Buzzer"
+
+msgid "Buzzer duration: {dur} s"
+msgstr "Buzzer duration: {dur} s"
+
+msgid "CPU load:"
+msgstr "CPU load:"
+
+msgid "Cancel"
+msgstr "Cancel"
+
+msgid "Cancelled!"
+msgstr "Cancelled!"
+
+msgid "Cannot retrieve current network information."
+msgstr "Cannot retrieve current network information."
+
+msgid "Caps Lock is on!"
+msgstr "Caps Lock is on!"
+
+msgid "Central Coordinator"
+msgstr "Central Coordinator"
+
+msgid "Change Password"
+msgstr "Change Password"
+
+msgid "Change Password?"
+msgstr "Change Password?"
+
+msgid "Change language"
+msgstr "Change language"
+
+msgid "Channel"
+msgstr "Channel"
+
+msgid "Channel 2.4 GHz:"
+msgstr "Channel 2.4 GHz:"
+
+msgid "Channel 5 GHz:"
+msgstr "Channel 5 GHz:"
+
+msgid "Channel bandwidth:"
+msgstr "Channel bandwidth:"
+
+msgid "Channel:"
+msgstr "Channel:"
+
+msgid "Checking firmware image ..."
+msgstr "Checking firmware image ..."
+
+msgid "Checking session ID ..."
+msgstr "Checking session ID ..."
+
+msgid "Choose between different LED notification levels."
+msgstr "Choose between different LED behaviours."
+
+msgid ""
+"Choose the compatibility mode of your device. This setting can help "
+"increase performance with technologies such as VDSL."
+msgstr ""
+"Select the compatibility mode. This mode is a special mode, which resolves "
+"rare connection issues which can result from interaction with other "
+"technologies such as VDSL."
+
+msgid "Choose the network mode of your device."
+msgstr "Choose the network mode of your device."
+
+msgid "Click here to update."
+msgstr "Please click here to update."
+
+msgid "Click to edit"
+msgstr "Click to edit"
+
+msgid "Clicking the button below will restart your device."
+msgstr "Clicking the \"reboot\" button below will restart your device."
+
+msgid "Clone SSID"
+msgstr "Clone SSID"
+
+msgid "Clone SSID via WPS"
+msgstr "Clone SSID via WPS"
+
+msgid "Compatibility Mode"
+msgstr "Compatibility Mode"
+
+msgid "Config Sync"
+msgstr "Config Sync"
+
+msgid "Configuration"
+msgstr "Configuration"
+
+msgid "Configuration file too large (maximum {maxSize} bytes)!"
+msgstr "Configuration file too large (maximum {maxSize} bytes)!"
+
+msgid "Configuration of time quotas"
+msgstr "Configuration"
+
+msgid "Configuration successfully restored!"
+msgstr "Configuration successfully restored!"
+
+msgid "Configured VLANs:"
+msgstr "Configured VLANs:"
+
+msgid "Confirm"
+msgstr "Confirm"
+
+msgid "Confirm new password:"
+msgstr "Confirm new password:"
+
+msgid "Connected AVLNs:"
+msgstr "Connected AVLNs:"
+
+msgid "Connected WiFi clients:"
+msgstr "Connected WiFi clients:"
+
+msgid "Connected clients"
+msgstr "Connected clients"
+
+msgid "Connected devices:"
+msgstr "Connected clients:"
+
+msgid "Connected powerline devices"
+msgstr "Connected Powerline devices"
+
+msgid "Connection"
+msgstr "Connection"
+
+msgid "Connection lost!"
+msgstr "Connection lost!"
+
+msgid "Connection status:"
+msgstr "Connection status:"
+
+msgid "Contact:"
+msgstr "Contact:"
+
+msgid "Current Firmware"
+msgstr "Current Firmware"
+
+msgid "Current channel"
+msgstr "Current channel"
+
+msgid "Current channel:"
+msgstr "Current channel:"
+
+msgid "DES"
+msgstr "DES"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DHCP Server"
+msgstr "DHCP Server"
+
+msgid "Data rates:"
+msgstr "Data rates:"
+
+msgid "Date"
+msgstr "Date"
+
+msgid "Date and Time"
+msgstr "Date and Time"
+
+msgid "Days"
+msgstr "Days"
+
+msgid "Default VLAN"
+msgstr "Default VLAN"
+
+msgid "Default gateway:"
+msgstr "Default gateway:"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Delete SSID?"
+msgstr "Delete SSID?"
+
+msgid "Device ID"
+msgstr "Device ID"
+
+msgid "Device MAC"
+msgstr "Device MAC address"
+
+msgid "Device Name"
+msgstr "Device Name"
+
+msgid "Device rebooted.  Please login again!"
+msgstr "Device rebooted.  Please login again!"
+
+msgid "Disable Radio?"
+msgstr "Radio disabled?"
+
+msgid "Disable guest network {duration}"
+msgstr "Disable guest network {duration}"
+
+msgid "Disabled"
+msgstr "Disabled"
+
+msgid ""
+"Disabling the reset button also forbids resetting the configuration to "
+"factory defaults."
+msgstr ""
+"Disabling the reset button also prohibits resetting the configuration to "
+"factory defaults."
+
+msgid ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+msgstr ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+
+msgid "Do you really want to remove this SSID?"
+msgstr "Do you really want to remove this SSID?"
+
+msgid ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+msgstr ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+
+msgid "Do you really want to restart the device?"
+msgstr "Do you really want to restart the device?"
+
+msgid "Domain Master"
+msgstr "Domain Master"
+
+msgid "Download Firmware Version for Update"
+msgstr "Download Updated Firmware Version"
+
+msgid "Download Firmware:"
+msgstr "Download Firmware:"
+
+msgid "Dynamic VLAN"
+msgstr "Dynamic VLAN"
+
+msgid "Enable"
+msgstr "Enable"
+
+msgid "Enable or completely disable the LEDs of your device."
+msgstr "Enable or completely disable the LEDs of your device."
+
+msgid "Enable or disable the buttons of your devices."
+msgstr "Enable or disable the buttons of your devices."
+
+msgid "Enabled"
+msgstr "Enabled"
+
+msgid "Enabled ({url})"
+msgstr "Enabled ({url})"
+
+msgid "Enabled SSIDs"
+msgstr "Enabled SSIDs"
+
+msgid "Enabled SSIDs:"
+msgstr "Enabled SSIDs:"
+
+msgid ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+msgstr ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+
+msgid "Encryption:"
+msgstr "Encryption:"
+
+msgid "End IP Address:"
+msgstr "End IP address:"
+
+msgid "End Point"
+msgstr "End Point"
+
+msgid "End address equals start address!"
+msgstr "End address is the same as start address!"
+
+msgid "End address must be larger than start address!"
+msgstr "End address must be larger than start address!"
+
+msgid "Enter WPS PIN"
+msgstr "Enter WPS PIN"
+
+msgid "Enter an alphanumeric community name (max 24 characters)"
+msgstr "Enter an alphanumeric community name (max. 24 characters)"
+
+msgid "Enter an alphanumeric username (max 24 characters)"
+msgstr "Enter an alphanumeric username (max. 24 characters)"
+
+msgid "Enter between 1 and 64 of these characters:"
+msgstr "Enter between 1 and 64 of these characters:"
+
+msgid "Enter between 8 and 130 of these characters:"
+msgstr "Enter between 8 and 130 of these characters:"
+
+msgid "Enter between 8 and 64 of these characters:"
+msgstr "Enter between 8 and 64 of these characters:"
+
+msgid "Enter new password:"
+msgstr "Enter new password:"
+
+msgid "Enter old password:"
+msgstr "Enter old password:"
+
+msgid "Enter the PIN of the device to be added to your WiFi network."
+msgstr "Enter the PIN of the device to be added to your WiFi network."
+
+msgid ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+msgstr ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+
+msgid "Error code:"
+msgstr "Error code:"
+
+msgid "Error occured! Please try again!"
+msgstr "Error occurred! Please try again!"
+
+msgid "Error while processing WPS!  ->  ("
+msgstr "Error while processing WPS!  ->  ("
+
+msgid "Ethernet"
+msgstr "Ethernet"
+
+msgid "Europe/Aachen"
+msgstr "Europe/Aachen"
+
+msgid "Europe/Amsterdam"
+msgstr "Europe/Amsterdam"
+
+msgid "Europe/Andorra"
+msgstr "Europe/Andorra"
+
+msgid "Europe/Athens"
+msgstr "Europe/Athens"
+
+msgid "Europe/Belgrade"
+msgstr "Europe/Belgrade"
+
+msgid "Europe/Berlin"
+msgstr "Europe/Berlin"
+
+msgid "Europe/Bratislava"
+msgstr "Europe/Bratislava"
+
+msgid "Europe/Brussels"
+msgstr "Europe/Brussels"
+
+msgid "Europe/Bucharest"
+msgstr "Europe/Bucharest"
+
+msgid "Europe/Budapest"
+msgstr "Europe/Budapest"
+
+msgid "Europe/Busingen"
+msgstr "Europe/Busingen"
+
+msgid "Europe/Chisinau"
+msgstr "Europe/Chisinau"
+
+msgid "Europe/Copenhagen"
+msgstr "Europe/Copenhagen"
+
+msgid "Europe/Dublin"
+msgstr "Europe/Dublin"
+
+msgid "Europe/Gibraltar"
+msgstr "Europe/Gibraltar"
+
+msgid "Europe/Guernsey"
+msgstr "Europe/Guernsey"
+
+msgid "Europe/Helsinki"
+msgstr "Europe/Helsinki"
+
+msgid "Europe/Isle of Man"
+msgstr "Europe/Isle of Man"
+
+msgid "Europe/Istanbul"
+msgstr "Europe/Istanbul"
+
+msgid "Europe/Jersey"
+msgstr "Europe/Jersey"
+
+msgid "Europe/Kaliningrad"
+msgstr "Europe/Kaliningrad"
+
+msgid "Europe/Kiev"
+msgstr "Europe/Kiev"
+
+msgid "Europe/Lisbon"
+msgstr "Europe/Lisbon"
+
+msgid "Europe/Ljubljana"
+msgstr "Europe/Ljubljana"
+
+msgid "Europe/London"
+msgstr "Europe/London"
+
+msgid "Europe/Luxembourg"
+msgstr "Europe/Luxembourg"
+
+msgid "Europe/Madrid"
+msgstr "Europe/Madrid"
+
+msgid "Europe/Malta"
+msgstr "Europe/Malta"
+
+msgid "Europe/Mariehamn"
+msgstr "Europe/Mariehamn"
+
+msgid "Europe/Minsk"
+msgstr "Europe/Minsk"
+
+msgid "Europe/Monaco"
+msgstr "Europe/Monaco"
+
+msgid "Europe/Moscow"
+msgstr "Europe/Moscow"
+
+msgid "Europe/Oslo"
+msgstr "Europe/Oslo"
+
+msgid "Europe/Paris"
+msgstr "Europe/Paris"
+
+msgid "Europe/Podgorica"
+msgstr "Europe/Podgorica"
+
+msgid "Europe/Prague"
+msgstr "Europe/Prague"
+
+msgid "Europe/Riga"
+msgstr "Europe/Riga"
+
+msgid "Europe/Rome"
+msgstr "Europe/Rome"
+
+msgid "Europe/Samara"
+msgstr "Europe/Samara"
+
+msgid "Europe/San Marino"
+msgstr "Europe/San Marino"
+
+msgid "Europe/Sarajevo"
+msgstr "Europe/Sarajevo"
+
+msgid "Europe/Simferopol"
+msgstr "Europe/Simferopol"
+
+msgid "Europe/Skopje"
+msgstr "Europe/Skopje"
+
+msgid "Europe/Sofia"
+msgstr "Europe/Sofia"
+
+msgid "Europe/Stockholm"
+msgstr "Europe/Stockholm"
+
+msgid "Europe/Tallinn"
+msgstr "Europe/Tallinn"
+
+msgid "Europe/Tirane"
+msgstr "Europe/Tirane"
+
+msgid "Europe/Uzhgorod"
+msgstr "Europe/Uzhgorod"
+
+msgid "Europe/Vaduz"
+msgstr "Europe/Vaduz"
+
+msgid "Europe/Vatican"
+msgstr "Europe/Vatican"
+
+msgid "Europe/Vienna"
+msgstr "Europe/Vienna"
+
+msgid "Europe/Vilnius"
+msgstr "Europe/Vilnius"
+
+msgid "Europe/Volgograd"
+msgstr "Europe/Volgograd"
+
+msgid "Europe/Warsaw"
+msgstr "Europe/Warsaw"
+
+msgid "Europe/Zagreb"
+msgstr "Europe/Zagreb"
+
+msgid "Europe/Zaporozhye"
+msgstr "Europe/Zaporozhye"
+
+msgid "Europe/Zurich"
+msgstr "Europe/Zurich"
+
+msgid "Fast transition (802.11r)"
+msgstr "Fast transition (802.11r)"
+
+msgid "Features"
+msgstr "Features"
+
+msgid "Find Me"
+msgstr "Find Me"
+
+msgid "Firmware"
+msgstr "Firmware"
+
+msgid "Firmware file:"
+msgstr "Firmware file:"
+
+msgid "Firmware image too large (maximum {maxSize} bytes)!"
+msgstr "Firmware image too large (maximum {maxSize} bytes)!"
+
+msgid "Firmware updated successfully."
+msgstr "Firmware updated successfully."
+
+msgid "Firmware version:"
+msgstr "Firmware version:"
+
+msgid "Force Node Type"
+msgstr "Force Node Type"
+
+msgid "Free memory:"
+msgstr "Free memory:"
+
+msgid "Frequency band"
+msgstr "Frequency band"
+
+msgid "Frequency band:"
+msgstr "Frequency band:"
+
+msgid "Fri"
+msgstr "Fri"
+
+msgid "Friday"
+msgstr "Friday"
+
+msgid "From"
+msgstr "From"
+
+msgid "Get IP configuration from a DHCP server"
+msgstr "Get IP configuration from a DHCP server"
+
+msgid "Guest network"
+msgstr "Guest network"
+
+msgid "HH"
+msgstr "HH"
+
+msgid "Here"
+msgstr "Here"
+
+msgid ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking Start configuration."
+msgstr ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking\"Start configuration\"."
+
+msgid ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+msgstr ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+
+msgid ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+msgstr ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+
+msgid "Hide SSID:"
+msgstr "Hide SSID:"
+
+msgid "Hide password"
+msgstr "Hide password"
+
+msgid "High ({power} dBm)"
+msgstr "High ({power} dBm)"
+
+msgid ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+msgstr ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+
+msgid "IP Configuration"
+msgstr "IP Configuration"
+
+msgid "IP address is inside the loopback network!"
+msgstr "IP address is inside the loopback network!"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv4 address"
+msgstr "IPv4 address"
+
+msgid "IPv4 address of DNS server"
+msgstr "IPv4 address of DNS server"
+
+msgid "IPv4 address of default gateway"
+msgstr "IPv4 address of default gateway"
+
+msgid "IPv4 configuration successfully updated."
+msgstr "IPv4 configuration successfully updated."
+
+msgid "IPv4 netmask"
+msgstr "IPv4 subnet mask"
+
+msgid "IPv4/IPv6"
+msgstr "IPv4/IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "IPv6 Address"
+msgstr "IPv6 address"
+
+msgid ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be resetted to factory defaults."
+msgstr ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be reset to factory defaults."
+
+msgid "Incorrect password!"
+msgstr "Incorrect password!"
+
+msgid "Individual ({power} dBm)"
+msgstr "Individual ({power} dBm)"
+
+msgid "Individual transmit power:"
+msgstr "Individual transmit power:"
+
+msgid "Indoor use only:"
+msgstr "Indoor use only:"
+
+msgid "Information"
+msgstr "Information"
+
+msgid "Interfaces"
+msgstr "Interfaces"
+
+msgid "Interval"
+msgstr "Interval"
+
+msgid "Invalid IP address!"
+msgstr "Invalid IP address!"
+
+msgid ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+
+msgid "Invalid Mac address!"
+msgstr "Invalid MAC address"
+
+msgid "Invalid SSID!  Please enter between 1 and 32 characters)."
+msgstr "Invalid SSID!  Please enter between 1 and 32 characters)."
+
+msgid ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+
+msgid "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+msgstr "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+
+msgid "Invalid hostname or IP address!"
+msgstr "Invalid host name or IP address!"
+
+msgid "Invalid hostname or IP/Subnet!"
+msgstr "Invalid host name or IP/Subnet!"
+
+msgid "Invalid name!"
+msgstr "Invalid name!"
+
+msgid "Invalid netmask!"
+msgstr "Invalid subnet mask!"
+
+msgid "Invalid port! Please enter a value between 1 and 65535."
+msgstr "Invalid port! Please enter a value between 1 and 65535."
+
+msgid ""
+"Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed "
+"characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+msgstr ""
+"Invalid pre-shared key! Please enter 64 characters. Allowed characters: 0 1 "
+"2 3 4 5 6 7 8 9 a b c d e f"
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 123."
+msgstr "Invalid range for 2.4 GHz, please enter a value between 0 and 123. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200. "
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 127."
+msgstr "Invalid range for 2.4 GHz, please enter a value between 0 and 127. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200. "
+
+msgid "Invalid range for 5 GHz, please enter a value between 0 and 200."
+msgstr "Invalid range for 5 GHz, please enter a value between 0 and 200. "
+
+msgid "Key:"
+msgstr "Key:"
+
+msgid "LAN"
+msgstr "LAN"
+
+msgid "LED Settings"
+msgstr "LED Settings"
+
+msgid "LEDs"
+msgstr "LEDs"
+
+msgid "Lease Time:"
+msgstr "Lease Time:"
+
+msgid "Leasetime"
+msgstr "Lease Time"
+
+msgid "Licenses"
+msgstr "Licenses"
+
+msgid "Loading ..."
+msgstr "Loading ..."
+
+msgid "Local Device"
+msgstr "Local Device"
+
+msgid "Local time:"
+msgstr "Local time:"
+
+msgid "Location:"
+msgstr "Location:"
+
+msgid "Log Level"
+msgstr "Log Level"
+
+msgid "Login"
+msgstr "Login"
+
+msgid "Logout"
+msgstr "Logout"
+
+msgid "Logs"
+msgstr "Logs"
+
+msgid "Low ({power} dBm)"
+msgstr "Low ({power} dBm)"
+
+msgid "MAC Address"
+msgstr "MAC address"
+
+msgid "MAC Addresses"
+msgstr "MAC addresses"
+
+msgid "MAC address"
+msgstr "MAC address"
+
+msgid "MBytes"
+msgstr "MBytes"
+
+msgid "MD5"
+msgstr "MD5"
+
+msgid "MHz"
+msgstr "MHz"
+
+msgid "MM"
+msgstr "mm"
+
+msgid "Management"
+msgstr "Management"
+
+msgid "Management VLAN"
+msgstr "Management VLAN"
+
+msgid "Management VLAN:"
+msgstr "Management VLAN:"
+
+msgid "Manual"
+msgstr "Manual"
+
+msgid "Manufacturer"
+msgstr "Manufacturer"
+
+msgid "Mask:"
+msgstr "Mask:"
+
+msgid "Max. clients:"
+msgstr "Max. clients:"
+
+msgid "Max. transmit power:"
+msgstr "Max. transmit power:"
+
+msgid "Mbit/s"
+msgstr "Mbps"
+
+msgid "Medium ({power} dBm)"
+msgstr "Medium ({power} dBm)"
+
+msgid "Members"
+msgstr "Members"
+
+msgid "Mesh WiFi"
+msgstr "Mesh WiFi"
+
+msgid "Message"
+msgstr "Message"
+
+msgid "Minimum lease time is two minutes!"
+msgstr "Minimum lease time is two minutes!"
+
+msgid "Mode:"
+msgstr "Mode:"
+
+msgid "Mon"
+msgstr "Mon"
+
+msgid "Mon-Fri"
+msgstr "Mon-Fri"
+
+msgid "Monday"
+msgstr "Monday"
+
+msgid "N/A"
+msgstr "N/A"
+
+msgid "NTP configuration successfully saved."
+msgstr "NTP configuration successfully saved."
+
+msgid "Name server:"
+msgstr "DNS server:"
+
+msgid "Name:"
+msgstr "Name:"
+
+msgid ""
+"Navigating away from this page will discard all your changes. Really "
+"proceed?"
+msgstr ""
+"Navigating away from this page will discard all your changes. Proceed "
+"anyway?"
+
+msgid "Neighbour network"
+msgstr "Neighbour network"
+
+msgid "Network"
+msgstr "Network"
+
+msgid "Network Mode:"
+msgstr "Network Mode:"
+
+msgid "Network interface"
+msgstr "Network adapter"
+
+msgid "Network name"
+msgstr "Network name"
+
+msgid "Network name 2.4 + 5 GHz"
+msgstr "Network name 2.4 + 5 GHz"
+
+msgid "Network name:"
+msgstr "Network name:"
+
+msgid "Never"
+msgstr "Never"
+
+msgid ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+msgstr ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+
+msgid "No Log Information"
+msgstr "No Log Information."
+
+msgid ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"companions security ID."
+msgstr ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"security ID."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button.\n"
+"              Please wait until the process has been finished."
+msgstr ""
+"No Powerline device was found. Ensure you have correctly pressed the "
+"appropriate PLC buttons.\n"
+"Please wait until the process has been finished."
+
+msgid "No RADIUS server configured"
+msgstr "No RADIUS server configured"
+
+msgid "No VLAN"
+msgstr "No VLAN"
+
+msgid "No WiFi radio enabled. Please enable a radio."
+msgstr "No WiFi radio enabled. Please enable a radio."
+
+msgid "No clients are connected"
+msgstr "No clients are connected"
+
+msgid "No encryption (not recommended)"
+msgstr "\"No encryption\" is not a recommended setting."
+
+msgid "No file selected."
+msgstr "No file selected."
+
+msgid "Not a valid input such as \"1d 12h 30m\"!"
+msgstr "Not a valid input such as \"1d 12h 30m\"!"
+
+msgid "Not configured"
+msgstr "Not configured."
+
+msgid "Not connected"
+msgstr "Not connected"
+
+msgid "Now press the WPS button on the device being added to your WiFi network."
+msgstr "Now press the WPS button on the device being added to your WiFi network."
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Old password was incorrect!"
+msgstr "Current password is incorrect!"
+
+msgid "Only for development"
+msgstr "Only for development"
+
+msgid "Open"
+msgstr "Open"
+
+msgid "Open (OWE)"
+msgstr "Open (OWE)"
+
+msgid "Operate as DHCP server"
+msgstr "Operate as DHCP server"
+
+msgid "Origin"
+msgstr "Origin"
+
+msgid "Outside of the address range!"
+msgstr "Outside of the address range!"
+
+msgid "Overview"
+msgstr "Overview"
+
+msgid "Overview of the wifi schedule settings"
+msgstr "Overview of the WiFi Schedule Settings"
+
+msgid "PAIR"
+msgstr "PAIR"
+
+msgid "PLC Connections"
+msgstr "PLC Connections"
+
+msgid "PLC domain name"
+msgstr "PLC domain name"
+
+msgid "PLC firmware version:"
+msgstr "PLC firmware version:"
+
+msgid "PLC password"
+msgstr "PLC Password"
+
+msgid "Pairing"
+msgstr "Pairing"
+
+msgid "Parental Control"
+msgstr "Parental Control"
+
+msgid "Password"
+msgstr "Password"
+
+msgid "Password:"
+msgstr "Password:"
+
+msgid "Passwords do not match!"
+msgstr "Passwords do not match!"
+
+msgid "Peer isolation"
+msgstr "Peer isolation"
+
+msgid "Please activate the WiFi network to enable Clone SSID via WPS"
+msgstr "Please activate the WiFi network to enable Clone SSID via WPS"
+
+msgid "Please click the + button to add a SSID."
+msgstr "Please click the + button to add a SSID."
+
+msgid "Please click the + button to add a VLAN"
+msgstr "Please click the + button to add a VLAN"
+
+msgid "Please click the + button to add a new schedule."
+msgstr "Please click the + button to add a new rule."
+
+msgid "Please click the + button to add a time server"
+msgstr "Please click the + button to add a time server "
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+msgstr ""
+"Please configure a static WiFi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+msgstr ""
+"Please configure a static WiFi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+msgstr ""
+"Please configure a static WiFi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+
+msgid ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+msgstr ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+
+msgid "Please enter a password to secure the access to your device."
+msgstr "Please enter a password to secure the access to your device."
+
+msgid ""
+"Please enter a value of at least 15 minutes or 0 to disable the "
+"functionality!"
+msgstr ""
+"Please enter a value of at least 15 minutes or enter 0 to disable the "
+"functionality!"
+
+msgid "Please log in with your password!"
+msgstr "Please log in with your password!"
+
+msgid "Please login again."
+msgstr "Please log in again."
+
+msgid "Please note that WiFi schedule Settings have precedence over these settings!"
+msgstr "Please note that WiFi schedule settings have precedence over these settings!"
+
+msgid ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+msgstr ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+
+msgid ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, exit Config Sync on the device, that you want to configure "
+"or switch separately."
+msgstr ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, disable Config Sync on the device that you want to "
+"configure or switch separately."
+
+msgid "Please select the configuration file to be restored to this device."
+msgstr "Please select the configuration file to be restored to this device."
+
+msgid "Please select the firmware file to be loaded onto this device."
+msgstr "Please select the firmware file to be loaded onto this device."
+
+msgid "Port"
+msgstr "Connection"
+
+msgid "Port number"
+msgstr "Port number"
+
+msgid "Port:"
+msgstr "Port:"
+
+msgid "Power Management"
+msgstr "Power Management"
+
+msgid "Powerline"
+msgstr "Powerline"
+
+msgid "Powerline LED"
+msgstr "Powerline LED"
+
+msgid "Powerline Network Mode"
+msgstr "Powerline Network Mode"
+
+msgid "Powerline Password"
+msgstr "Powerline Password"
+
+msgid "Powerline button"
+msgstr "PLC button"
+
+msgid "Powerline encryption already in progress by external or previous request."
+msgstr "Powerline network connection encryption in progress."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+msgstr ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+msgstr ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished.\n"
+"              This can take up to 1 minute."
+msgstr ""
+"Powerline encryption via security ID has been successfully started. Please "
+"wait until this process has been finished.\n"
+"This can take up to 60 seconds."
+
+msgid "Powerline encryption was stopped by external event."
+msgstr "Powerline encryption was stopped."
+
+msgid "Powerline encryption was successfully stopped."
+msgstr "Powerline encryption was successfully established."
+
+msgid ""
+"Powerline standby is enabled! Disabling all radios will interrupt the "
+"connection to this website if the device can only be reached via Powerline "
+"and it enters standby mode. Do you really want to disable this radio?"
+msgstr ""
+"Powerline standby is enabled! Disabling all frequency bands will interrupt "
+"the connection to this website if the device can only be reached via "
+"Powerline and it enters standby mode. Do you really want to disable this "
+"frequency band?"
+
+msgid "Powersave mode"
+msgstr "Powersave mode"
+
+msgid "Preferred:"
+msgstr "Preferred:"
+
+msgid "Programming firmware image..."
+msgstr "Programming firmware image..."
+
+msgid "Protocol:"
+msgstr "Protocol:"
+
+msgid "Public community (read only):"
+msgstr "Public community (read only):"
+
+msgid "Public source:"
+msgstr "Public source:"
+
+msgid "Quota"
+msgstr "Time quota"
+
+msgid "Quota has been depleted"
+msgstr "The time quota has been depleted."
+
+msgid "Quota is currently depleting"
+msgstr "The time quota is depleting."
+
+msgid "RADIUS"
+msgstr "RADIUS"
+
+msgid "RADIUS configuration applied successfully"
+msgstr "RADIUS configuration applied successfully"
+
+msgid "RADIUS configuration is incomplete"
+msgstr "RADIUS configuration is incomplete"
+
+msgid "RADIUS password:"
+msgstr "RADIUS password:"
+
+msgid "RADIUS username:"
+msgstr "RADIUS username:"
+
+msgid "Radio"
+msgstr "Radio"
+
+msgid "Radio channel:"
+msgstr "WiFi channel:"
+
+msgid "Radio:"
+msgstr "Radio:"
+
+msgid "Radios"
+msgstr "Radios"
+
+msgid "Rate (Mbit/s)"
+msgstr "Rate (Mbps)"
+
+msgid "Reboot"
+msgstr "Reboot"
+
+msgid "Reboot Device"
+msgstr "Reboot Device"
+
+msgid "Reboot device?"
+msgstr "Reboot device?"
+
+msgid "Receive (Mbps)"
+msgstr "Receive (Mbps)"
+
+msgid "Recommended: 20 MHz"
+msgstr "Recommended: 20 MHz"
+
+msgid "Recommended: 802.11g/n"
+msgstr "Recommended: 802.11g/n"
+
+msgid "Recommended: 802.11n/ac"
+msgstr "Recommended: 802.11n/ac"
+
+msgid "Recommended: Auto"
+msgstr "Recommended: Auto"
+
+msgid "Recommended: Auto, 1, 6, 11"
+msgstr "Recommended: Auto, 1, 6, 11"
+
+msgid "Reduced"
+msgstr "Reduced"
+
+msgid "Remote syslog server:"
+msgstr "Remote syslog server:"
+
+msgid "Reset"
+msgstr "Reset"
+
+msgid "Reset Configuration"
+msgstr "Reset Configuration"
+
+msgid "Reset button"
+msgstr "Reset button"
+
+msgid "Reset device to factory defaults?"
+msgstr "Reset device to factory defaults?"
+
+msgid "Reset/Restart button"
+msgstr "Reset button"
+
+msgid "Restore"
+msgstr "Restore"
+
+msgid "Restore Device Configuration From File"
+msgstr "Restore Device Configuration from File"
+
+msgid "Rx rate (Mbit/s)"
+msgstr "Rx rate (Mbps)"
+
+msgid "SHA"
+msgstr "SHA"
+
+msgid "SNMP version:"
+msgstr "SNMP version:"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID already exists"
+msgstr "SSID already exists"
+
+msgid "SSID broadcast"
+msgstr "SSID broadcast"
+
+msgid "SSID:"
+msgstr "SSID:"
+
+msgid "SSIDs"
+msgstr "SSIDs"
+
+msgid "Sat"
+msgstr "Sat"
+
+msgid "Sat+Sun"
+msgstr "Sat+Sun"
+
+msgid "Saturday"
+msgstr "Saturday"
+
+msgid "Save"
+msgstr "Save"
+
+msgid "Save Configuration to File"
+msgstr "Save Configuration to File"
+
+msgid "Scan"
+msgstr "Scan"
+
+msgid "Scan interval (min.):"
+msgstr "Scan interval (min.):"
+
+msgid "Scan interval in minutes"
+msgstr "Scan interval in minutes"
+
+msgid "Schedule"
+msgstr "Schedule"
+
+msgid "Schedule configuration successfully saved."
+msgstr "Change configuration successfully saved."
+
+msgid "Search ..."
+msgstr "Search ..."
+
+msgid "Secret:"
+msgstr "Secret"
+
+msgid "Secured"
+msgstr "Secured"
+
+msgid "Security"
+msgstr "Encryption"
+
+msgid "Security ID:"
+msgstr "Security ID:"
+
+msgid "Security passphrase:"
+msgstr "Security ID:"
+
+msgid "Security status:"
+msgstr "Encryption status:"
+
+msgid "Security type:"
+msgstr "Encryption type:"
+
+msgid "Security:"
+msgstr "Encryption:"
+
+msgid "Select Interval"
+msgstr "Select Interval"
+
+msgid ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+msgstr ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+
+msgid "Select day"
+msgstr "Select day"
+
+msgid "Select time limit"
+msgstr "Select time limit"
+
+msgid "Selected time period:"
+msgstr "Selected time period:"
+
+msgid "Serial number:"
+msgstr "Serial number:"
+
+msgid "Server is outside of the network and unreachable!"
+msgstr "Server is outside of the network and unreachable!"
+
+msgid "Server-side NAS key"
+msgstr "Server-side NAS key"
+
+msgid "Server:"
+msgstr "Server:"
+
+msgid "Service"
+msgstr "Service"
+
+msgid "Service Name"
+msgstr "Service Name"
+
+msgid "Services"
+msgstr "Services"
+
+msgid "Set a duration and click \"Start\" to activate the buzzer for this time."
+msgstr "Set a duration and click \"Start\" to activate the buzzer for this time."
+
+msgid "Settings"
+msgstr "Settings"
+
+msgid ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually, after having re-established the connection."
+msgstr ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually after re-establishing the connection."
+
+msgid "Show password"
+msgstr "Show password"
+
+msgid "Signal (dBm)"
+msgstr "Signal (dBm)"
+
+msgid "Signal quality (%)"
+msgstr "Signal quality (%)"
+
+msgid "Since"
+msgstr "Since"
+
+msgid ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+msgstr ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+
+msgid "Some SSIDs are updated to new RADIUS configuration"
+msgstr "Some SSIDs are updated to new RADIUS configuration"
+
+msgid ""
+"Some event has been occoured. Determining reason, this can take up to 1 "
+"minute."
+msgstr "Some event has occurred. Determining the cause may take up to 1 minute."
+
+msgid "Standby"
+msgstr "Standby"
+
+msgid "Start"
+msgstr "Start"
+
+msgid "Start Configuration"
+msgstr "Start Configuration"
+
+msgid "Start IP Address:"
+msgstr "Start IP address:"
+
+msgid "Start address equals end address!"
+msgstr "Start address is the same as end address!"
+
+msgid "Start address must be smaller than end address!"
+msgstr "Start address must be smaller than end address!"
+
+msgid ""
+"Start the pairing process by pressing the PLC button on an adapter in your "
+"existing network first. Then, click on \"PAIR\"."
+msgstr ""
+"First, press the PLC button on an adapter on your existing network, then "
+"click \"PAIR\" to run the pairing process. "
+
+msgid "Start time and end time cannot be equal! Please correct your time quotas!"
+msgstr "Start time and end time cannot be the same! Please change the times!"
+
+msgid "Static IPv4 Address"
+msgstr "Static IPv4 address"
+
+msgid "Station is not connected"
+msgstr "Client is not connected."
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Status:"
+msgstr "Status:"
+
+msgid "Stop"
+msgstr "Stop"
+
+msgid "Stop Configuration"
+msgstr "Stop Configuration"
+
+msgid "Stop time must be after start time! Please correct your time quotas!"
+msgstr "Stop time must be after start time! Please change the times!"
+
+msgid "Subnet mask:"
+msgstr "Subnet mask:"
+
+msgid "Subnet:"
+msgstr "Subnet mask:"
+
+msgid "Successfully deleted."
+msgstr "Successfully deleted."
+
+msgid "Sun"
+msgstr "Sun"
+
+msgid "Sunday"
+msgstr "Sunday"
+
+msgid "Support"
+msgstr "Support"
+
+msgid "Supported"
+msgstr "Supported"
+
+msgid "Switch your WiFi network on first so that your guest network can be used."
+msgstr "Switch your WiFi network on first so that your guest network can be used."
+
+msgid "System"
+msgstr "System"
+
+msgid "System Information"
+msgstr "System Information"
+
+msgid "System contact:"
+msgstr "System contact:"
+
+msgid "System location:"
+msgstr "System location:"
+
+msgid "System name (hostname):"
+msgstr "System name (host name):"
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+msgstr ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+
+msgid ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+msgstr ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+
+msgid "The device has a new IP address. Please login at the new URL:"
+msgstr "The device has a new IP address. Please login at the new URL:"
+
+msgid ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+msgstr ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+
+msgid "The guest network does only allow access to the internet."
+msgstr "The guest network does only allow access to the internet."
+
+msgid "The host name is too long. Max. 32 characters allowed."
+msgstr "The host name is too long. Max. 32 characters allowed."
+
+msgid "The host name is too short. Please enter at least 1 character."
+msgstr "The host name is too short. Please enter at least 1 character."
+
+msgid "The maximum number ({maxVLANs}) of VLANs has been configured."
+msgstr "The maximum number ({maxVLANs}) of VLANs has been configured."
+
+msgid "The password contains an invalid character:"
+msgstr "The password contains an invalid character:"
+
+msgid ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+msgstr ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+
+msgid ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+msgstr ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+
+msgid ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+msgstr ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+
+msgid ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+msgstr ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+
+msgid "There are no configured time servers."
+msgstr "There are no configured time servers."
+
+msgid "There is newer version:"
+msgstr "Current version:"
+
+msgid ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+msgstr ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+
+msgid "This is the broadcast address!"
+msgstr "This is the broadcast address!"
+
+msgid "This is the device's IP address!"
+msgstr "This is the device's IP address!"
+
+msgid "This is the network address!"
+msgstr "This is the sub network address!"
+
+msgid "This page will be reloaded automatically, when the action has finished."
+msgstr "This page will be reloaded automatically once the action is complete."
+
+msgid "This server already exists."
+msgstr "This server already exists."
+
+msgid "Thu"
+msgstr "Thu"
+
+msgid "Thursday"
+msgstr "Thursday"
+
+msgid "Time Server"
+msgstr "Time Server"
+
+msgid "Time Server (NTP)"
+msgstr "Time Server (NTP)"
+
+msgid "Time Server:"
+msgstr "Time Server:"
+
+msgid "Time Zone"
+msgstr "Time Zone"
+
+msgid "Time server"
+msgstr "Time server"
+
+msgid "Time zone configuration successfully saved."
+msgstr "Time zone configuration successfully saved."
+
+msgid "Time zone:"
+msgstr "Time zone:"
+
+msgid "To"
+msgstr "to"
+
+msgid "Total memory:"
+msgstr "Total memory:"
+
+msgid "Transmit (Mbps)"
+msgstr "Transmit (Mbps)"
+
+msgid "Tue"
+msgstr "Tue"
+
+msgid "Tuesday"
+msgstr "Tuesday"
+
+msgid "Turn off the WiFi"
+msgstr "Turn off the WiFi"
+
+msgid "Tx rate (Mbit/s)"
+msgstr "Tx rate (Mbps)"
+
+msgid "Tx-Power"
+msgstr "Tx-Power"
+
+msgid "Type"
+msgstr "Type"
+
+msgid "Type error"
+msgstr "Type error"
+
+msgid "Type status"
+msgstr "Type status"
+
+msgid "UNPAIR"
+msgstr "UNPAIR"
+
+msgid "Unsecured"
+msgstr "Unsecured"
+
+msgid "Untagged"
+msgstr "Untagged"
+
+msgid "Update firmware"
+msgstr "Update firmware"
+
+msgid "Update firmware to latest version"
+msgstr "Update firmware to current version"
+
+msgid "Update table"
+msgstr "Update table"
+
+msgid "Uploading ..."
+msgstr "Uploading ..."
+
+msgid "Uploading firmware image ..."
+msgstr "Uploading firmware image ..."
+
+msgid "Uptime:"
+msgstr "Uptime:"
+
+msgid "Use common settings"
+msgstr "Use common settings"
+
+msgid ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button on the device which you want to join "
+"your Powerline network! Afterwards, click the \"Start configuration\" "
+"button."
+msgstr ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button within 2 minutes on the device which "
+"you want to join your Powerline network! Afterwards, click the\"Start "
+"configuration\" button."
+
+msgid "Username"
+msgstr "Username"
+
+msgid "Username:"
+msgstr "Username:"
+
+msgid "Using the encryption button"
+msgstr "Using the encryption button"
+
+msgid "VLAN ID"
+msgstr "VLAN ID"
+
+msgid "VLAN ID must be unique!"
+msgstr "VLAN ID must be unique!"
+
+msgid "VLAN ID out of range (1-4094)!"
+msgstr "Invalid VLAN ID! Please enter a value between 1 and 4094."
+
+msgid "VLAN Name"
+msgstr "VLAN Name"
+
+msgid "VLAN name must be unique!"
+msgstr "VLAN name must be unique!"
+
+msgid "VLAN {id}"
+msgstr "VLAN {id}"
+
+msgid "VLAN:"
+msgstr "VLAN:"
+
+msgid "VLANs"
+msgstr "VLANs"
+
+msgid "Valid:"
+msgstr "Valid:"
+
+msgid "Very High ({power} dBm)"
+msgstr "Very High ({power} dBm)"
+
+msgid "Via security ID"
+msgstr "Via security ID"
+
+msgid "WDS bridge configuration updated."
+msgstr "WDS bridge configuration updated."
+
+msgid "WMM Power-Save (U-APSD)"
+msgstr "WMM Power-Save (U-APSD)"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA/WPA2 Personal"
+msgstr "WPA/WPA2 Personal"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WPA2 Enterprise"
+msgstr "WPA2 Enterprise"
+
+msgid "WPA2 Personal"
+msgstr "WPA2 Personal"
+
+msgid "WPA2 Personal *"
+msgstr "WPA2 Personal *"
+
+msgid "WPA2 pre-shared key:"
+msgstr "WPA2 pre-shared key:"
+
+msgid "WPA3/WPA2 Personal"
+msgstr "WPA3/WPA2 Personal"
+
+msgid "WPS"
+msgstr "WPS"
+
+msgid "WPS Clone Mode failed: "
+msgstr "WPS Clone mode failed:"
+
+msgid "WPS Clone Mode succeeded!"
+msgstr "WPS Clone Mode succeeded!"
+
+msgid "WPS Mode:"
+msgstr "WPS Mode:"
+
+msgid "WPS PIN"
+msgstr "WPS PIN"
+
+msgid "WPS PIN connect applied successfully"
+msgstr "WPS PIN connect applied successfully"
+
+msgid "WPS PIN connect failed"
+msgstr "WPS PIN connect failed"
+
+msgid "WPS PIN is active..."
+msgstr "WPS PIN is active..."
+
+msgid "WPS PIN is not valid. Use a 4- or 8-digit number."
+msgstr "WPS PIN is not valid. Use a 4- or 8-digit number."
+
+msgid "WPS Pushbutton"
+msgstr "WPS Pushbutton"
+
+msgid "WPS Pushbutton is active..."
+msgstr "WPS Pushbutton is active..."
+
+msgid "WPS connect applied successfully"
+msgstr "WPS connect applied successfully"
+
+msgid "WPS connect failed"
+msgstr "WPS connect failed"
+
+msgid "WPS is active..."
+msgstr "WPS is active..."
+
+msgid "Warning"
+msgstr "Warning"
+
+msgid "Wed"
+msgstr "Wed"
+
+msgid "Wednesday"
+msgstr "Wednesday"
+
+msgid "Welcome to your {product}"
+msgstr "Welcome to your {product}"
+
+msgid ""
+"When scan interval is set to 0 this function is disabled. Recommended: 240 "
+"minutes"
+msgstr ""
+"When the scan interval is set to 0, this function is disabled. Recommended: "
+"240 minutes"
+
+msgid ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+msgstr ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+
+msgid "WiFi"
+msgstr "WiFi"
+
+msgid "WiFi Clients"
+msgstr "WiFi Clients"
+
+msgid "WiFi Clone"
+msgstr "WiFi Clone"
+
+msgid ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+msgstr ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+
+msgid "WiFi Clone is active..."
+msgstr "WiFi Clone is active..."
+
+msgid "WiFi LED"
+msgstr "WiFi LED"
+
+msgid "WiFi Network"
+msgstr "WiFi Network"
+
+msgid "WiFi Protected Setup (WPS) - Configuration"
+msgstr "WiFi Protected Setup (WPS) - Configuration"
+
+msgid "WiFi button"
+msgstr "WiFi button"
+
+msgid "WiFi convenience function"
+msgstr "WiFi convenience function"
+
+msgid "WiFi disabled"
+msgstr "WiFi disabled"
+
+msgid "WiFi enabled"
+msgstr "WiFi enabled"
+
+msgid "WiFi network mode:"
+msgstr "WiFi Network Mode"
+
+msgid "WiFi networks"
+msgstr "WiFi networks"
+
+msgid "WiFi schedule control"
+msgstr "WiFi schedule control"
+
+msgid "WiFi schedule settings"
+msgstr "WiFi Schedule Settings"
+
+msgid "Wifi Status"
+msgstr "WiFi Status"
+
+msgid ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+msgstr ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+
+msgid "You can find the latest firmware"
+msgstr "You can find the latest firmware "
+
+msgid ""
+"You can limit access to certain Wi-Fi devices by the MAC address. Please "
+"define the time periods during which Wi-Fi access is allowed."
+msgstr ""
+"You can limit access to certain WiFi devices by the MAC address. Please "
+"define the time periods during which WiFi access is allowed."
+
+msgid "You can no longer create SSIDs for the {radioBand} radio"
+msgstr "You can no longer create SSIDs for the {radioBand} frequency band"
+
+msgid "You can't have overlapping quotas for the same station!"
+msgstr "Overlapping of several time quotas for the same WiFi device is not possible!"
+
+msgid "You cannot combine the time period and time limit for a WiFi device!"
+msgstr "You cannot combine the time period and time limit for a WiFi device!"
+
+msgid ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+msgstr ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+
+msgid "You have successfully changed the Configuration for your device's LEDs."
+msgstr "You have successfully changed the configuration for your device's LEDs."
+
+msgid "You have successfully changed the configuration for your device's buttons."
+msgstr "You have successfully changed the configuration for your device's buttons."
+
+msgid "You have successfully configured an SSID"
+msgstr "You have successfully saved the SSID configuration"
+
+msgid "You have successfully deleted an SSID"
+msgstr "You have successfully deleted an SSID"
+
+msgid "You have successfully updated the compatibility mode setting."
+msgstr "You have successfully updated the compatibility mode."
+
+msgid "You have successfully updated your Config sync settings"
+msgstr "You have successfully saved the Config sync settings"
+
+msgid "You have successfully updated your PLC network settings."
+msgstr "You have successfully updated your PLC network settings."
+
+msgid "You have successfully updated your PLC password."
+msgstr "You have successfully updated your PLC password."
+
+msgid "You have successfully updated your Powerline encryption password"
+msgstr "You have successfully updated your Powerline encryption password"
+
+msgid "You have successfully updated your Powerline network mode"
+msgstr "You have successfully updated your Powerline network mode"
+
+msgid "You have successfully updated your Powerline pro network."
+msgstr "You have successfully expanded your Powerline pro network."
+
+msgid "You have successfully updated your system management configuration"
+msgstr "You have successfully saved your system management configuration"
+
+msgid "You have successfully {enableOrDisableTerm} {name} service."
+msgstr "You have successfully {name} {enableOrDisableTerm} service."
+
+msgid ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+msgstr ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+
+msgid "You've successfully changed your password."
+msgstr "You've successfully changed your password."
+
+msgid "You've successfully configured the WiFi network."
+msgstr "You've successfully configured the WiFi network."
+
+msgid "You've successfully configured the radio."
+msgstr "You've successfully saved the frequency band."
+
+msgid "Your Powerline pro network is disabled."
+msgstr "Your Powerline pro network has been disabled."
+
+msgid "Your WiFi is not encrypted. Please activate the encryption."
+msgstr "Your WiFi is not encrypted. Please activate the encryption."
+
+msgid ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+msgstr ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+
+msgid "call ubus"
+msgstr "call ubus"
+
+msgid "connected"
+msgstr "connected"
+
+msgid "current session"
+msgstr "Current session:"
+
+msgid "current ubus request queue"
+msgstr "Current ubus request queue"
+
+msgid "d, "
+msgstr "d, "
+
+msgid "daily"
+msgstr "daily"
+
+msgid "disabled"
+msgstr "disabled"
+
+msgid "display {num} of {all}"
+msgstr "display {num} of {all}"
+
+msgid "enabled"
+msgstr "enabled"
+
+msgid "mimo_full"
+msgstr "Full power"
+
+msgid "mimo_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "mimo_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "n/a"
+msgstr "n/a"
+
+msgid "no PLC connections"
+msgstr "No PLC connections"
+
+msgid "none"
+msgstr "none"
+
+msgid "not configured"
+msgstr "not configured"
+
+msgid "off"
+msgstr "off"
+
+msgid "on"
+msgstr "on"
+
+msgid "one day, {hours}:{minutes}:{seconds}"
+msgstr "One day, {hours}:{minutes}:{seconds}"
+
+msgid "pending"
+msgstr "pending"
+
+msgid "reduced"
+msgstr "reduced"
+
+msgid "s"
+msgstr "s"
+
+msgid "siso_full"
+msgstr "Full power"
+
+msgid "siso_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "siso_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "static"
+msgstr "static"
+
+msgid "ubus Test"
+msgstr "ubus Test"
+
+msgid "ubus callee"
+msgstr "ubus callee"
+
+msgid "ubus data"
+msgstr "ubus data"
+
+msgid "ubus section"
+msgstr "ubus section"
+
+msgid "unknown"
+msgstr "unknown"
+
+msgid "unknown LED"
+msgstr "unknown LED"
+
+msgid "unknown button"
+msgstr "unknown button"
+
+msgid "v1 + v2c"
+msgstr "v1 + v2c"
+
+msgid "v3"
+msgstr "v3"
+
+msgid "{days} days, {hours}:{minutes}:{seconds}"
+msgstr "{days} days, {hours}:{minutes}:{seconds}"
+
+msgid "{duration} remaining"
+msgstr "{duration} remaining"
+
+msgid "{frequency} GHz Radio"
+msgstr "{frequency} GHz frequency band"
\ No newline at end of file
diff --git a/www/assets/i18n/es.po b/www/assets/i18n/es.po
new file mode 100644
index 0000000..36387d7
--- /dev/null
+++ b/www/assets/i18n/es.po
@@ -0,0 +1,2748 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "1"
+msgstr "1"
+
+msgid "10"
+msgstr "10"
+
+msgid "60"
+msgstr "60"
+
+msgid "120"
+msgstr "120"
+
+msgid " Device is not enabled,"
+msgstr "El dispositivo no está encendido,"
+
+msgid " Encryption disabled,"
+msgstr "Codificación desactivada,"
+
+msgid " SSID is hidden,"
+msgstr "La red WiFi está oculta"
+
+msgid " The minimum password length is {minlength} character(s)."
+msgstr "La contraseña debe tener como mínimo {minlength} caracteres."
+
+msgid "(2.4 GHz)"
+msgstr "(2,4 GHz)"
+
+msgid "(5 GHz)"
+msgstr "(5 GHz)"
+
+msgid "(Radar detected on {channel})"
+msgstr "(Radar identificado en {channel})"
+
+msgid "(dynamic)"
+msgstr "(dinámico)"
+
+msgid ")\n"
+msgstr ""
+
+msgid ")<br/>"
+msgstr ")<br/>"
+
+msgid "* Automatic"
+msgstr "* automático"
+
+msgid "* indicates default option"
+msgstr "* Configuración estándar"
+
+msgid "* marks this device."
+msgstr "* este dispositivo"
+
+msgid "* offers best performance"
+msgstr "* mejor rendimiento"
+
+msgid "00PM"
+msgstr "24"
+
+msgid "01AM"
+msgstr "01"
+
+msgid "01PM"
+msgstr "13"
+
+msgid "02AM"
+msgstr "02"
+
+msgid "02PM"
+msgstr "14"
+
+msgid "03AM"
+msgstr "03"
+
+msgid "03PM"
+msgstr "15"
+
+msgid "04AM"
+msgstr "04"
+
+msgid "04PM"
+msgstr "16"
+
+msgid "05AM"
+msgstr "05"
+
+msgid "05PM"
+msgstr "17"
+
+msgid "06AM"
+msgstr "06"
+
+msgid "06PM"
+msgstr "18"
+
+msgid "07AM"
+msgstr "07"
+
+msgid "07PM"
+msgstr "19"
+
+msgid "08AM"
+msgstr "08"
+
+msgid "08PM"
+msgstr "20"
+
+msgid "09AM"
+msgstr "09"
+
+msgid "09PM"
+msgstr "21"
+
+msgid "1 h"
+msgstr "1 h"
+
+msgid "10AM"
+msgstr "10"
+
+msgid "10PM"
+msgstr "22"
+
+msgid "11AM"
+msgstr "11"
+
+msgid "11PM"
+msgstr "23"
+
+msgid "12 h"
+msgstr "12 h"
+
+msgid "12AM"
+msgstr "00"
+
+msgid "12PM"
+msgstr "12"
+
+msgid "15 min"
+msgstr "15 min"
+
+msgid "18 h"
+msgstr "18 h"
+
+msgid "2 h"
+msgstr "2 h"
+
+msgid "2.4 + 5 GHz network name"
+msgstr "Nombre de la red 2,4 + 5 GHz"
+
+msgid "2.4 GHz"
+msgstr "2,4 GHz"
+
+msgid "2.4 GHz + 5 GHz"
+msgstr "2,4 GHz + 5 GHz"
+
+msgid "2.4 GHz Radio"
+msgstr "Banda de frecuencia de 2,4 GHz"
+
+msgid "2.4 GHz WiFi LED"
+msgstr "LED de WiFi de 2,4 GHz"
+
+msgid "2.4 GHz network name"
+msgstr "Nombre de la red 2,4 GHz"
+
+msgid "2.4 GHz network name:"
+msgstr "Nombre de la red 2,4 GHz:"
+
+msgid "20 MHz"
+msgstr "20 MHz"
+
+msgid "20/40 MHz"
+msgstr "20/40 MHz"
+
+msgid "24 h"
+msgstr "24 h"
+
+msgid "3 h"
+msgstr "3 h"
+
+msgid "30 min"
+msgstr "30 min."
+
+msgid "36 h"
+msgstr "36 h"
+
+msgid "4 h"
+msgstr "4 h"
+
+msgid "40 MHz"
+msgstr "40 MHz"
+
+msgid "48 h"
+msgstr "48 h"
+
+msgid "5 GHz"
+msgstr "5 GHz"
+
+msgid "5 GHz Radio"
+msgstr "Banda de frecuencia de 5 GHz"
+
+msgid "5 GHz WiFi LED"
+msgstr "LED de WiFi de 5 GHz"
+
+msgid "5 GHz network name"
+msgstr "Nombre de la red 5 GHz"
+
+msgid "5 GHz network name:"
+msgstr "Nombre de la red 5 GHz:"
+
+msgid "5 h"
+msgstr "5 h"
+
+msgid "5 min"
+msgstr "5 min."
+
+msgid "6 h"
+msgstr "6 h"
+
+msgid "80 MHz"
+msgstr "80 MHz"
+
+msgid "802.11a/n/ac"
+msgstr "802.11 a/n/ac"
+
+msgid "802.11ac"
+msgstr "802.11 ac"
+
+msgid "802.11b/g/n"
+msgstr "802.11 b/g/n"
+
+msgid "802.11g/n"
+msgstr "802.11 g/n"
+
+msgid "802.11n"
+msgstr "802.11 n"
+
+msgid "802.11n/ac"
+msgstr "802.11 n/ac"
+
+msgid "A RADIUS password is required!"
+msgstr "No se ha especificado la contraseña RADIUS."
+
+msgid "A RADIUS username is required!"
+msgstr "No se ha especificado el nombre de usuario RADIUS."
+
+msgid "A new firmware version is available."
+msgstr ""
+
+msgid ""
+"A passphrase (8-63 characters) or a pre-shared key (64 characters) is "
+"required"
+msgstr ""
+"Se requiere una clave: de 8 a 63 caracteres (passphrase) o de 64 caracteres "
+"(pre-shared key)"
+
+msgid "A pre-shared key is required (8-64 characters)!"
+msgstr "Se requiere clave (64 caracteres, pre-shared key)."
+
+msgid "AES"
+msgstr "AES"
+
+msgid "AVLN"
+msgstr "AVLN"
+
+msgid "Accounting Server"
+msgstr "Servidor de contabilización"
+
+msgid "Accounting Server:"
+msgstr "Servidor de contabilización:"
+
+msgid "Active"
+msgstr "Activo"
+
+msgid "Add Devices"
+msgstr "Añadir dispositivos"
+
+msgid "Add devices to the WiFi network using the soft push button."
+msgstr "Incluir el dispositivo en la red WiFi con el pulsador WPS."
+
+msgid "Add devices to the WiFi network using your PIN."
+msgstr "Incluir el dispositivo en la red WiFi mediante el PIN"
+
+msgid "Add new SSID"
+msgstr "Añadir SSID nuevo"
+
+msgid "Add new Time Server"
+msgstr "Añadir servidor de tiempo nuevo"
+
+msgid "Add new VLAN"
+msgstr "Añadir VLAN nueva"
+
+msgid "Add new server"
+msgstr "Añadir servidor nuevo"
+
+msgid "Address/Subnet:"
+msgstr "Dirección/subred:"
+
+msgid "Address:"
+msgstr "Dirección:"
+
+msgid "Advanced Settings"
+msgstr "Configuración extendida"
+
+msgid "Airtime Fairness"
+msgstr "Airtime Fairness"
+
+msgid "All changes will have effect after system boot."
+msgstr ""
+
+msgid "Allow power saving mode"
+msgstr "Permitir el modo de ahorro de corriente"
+
+msgid ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+msgstr ""
+"Permita que el dispositivo cambie al modo de ahorro de corriente cuando se "
+"detecte un tráfico reducido a través de ethernet. Advertencia: El tiempo de "
+"latencia puede verse afectado si se detecta un tráfico de datos muy lento."
+
+msgid "Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio."
+msgstr "Número permitido de SSID: {allowedRadioVapNumber} para radio de {radioBand}."
+
+msgid ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+msgstr ""
+"Número permitido de SSID: {num1} para radio {radio1} y {num2} para radio "
+"{radio2} "
+
+msgid "Always"
+msgstr "Siempre"
+
+msgid "An error has occurred. Please click the arrow to reload the page!"
+msgstr ""
+"Se ha producido un error.  Haga clic en la flecha para volver a cargar la "
+"página."
+
+msgid "An error occurred during device configuration:"
+msgstr "En la configuración del dispositivo se ha producido un fallo:"
+
+msgid "Answer of"
+msgstr "Respuesta de"
+
+msgid "Authentication Server"
+msgstr "Servidor de autenticación"
+
+msgid "Authentication Server:"
+msgstr "Servidor de autenticación:"
+
+msgid "Authentication passphrase:"
+msgstr "Clave de autenticación:"
+
+msgid "Authentication type:"
+msgstr "Tipo de autenticación:"
+
+msgid "Auto"
+msgstr "Automático"
+
+msgid "Auto *"
+msgstr "Automático *"
+
+msgid "Automatic *"
+msgstr "Automático *"
+
+msgid "Automatic Update:"
+msgstr "Actualización de firmware automática:"
+
+msgid "Automatic shutoff"
+msgstr "Desconexión automática"
+
+msgid "Automatically search for updates:"
+msgstr "Buscar automáticamente actualizaciones:"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Band Steering"
+msgstr "Band Steering"
+
+msgid "Basic"
+msgstr "Base"
+
+msgid "Basic Settings"
+msgstr "Configuración estándar"
+
+msgid "Bridge"
+msgstr "Puente"
+
+msgid "Bridge to Remote Access Point (WDS)"
+msgstr "Puente a punto de acceso alejado (WDS)"
+
+msgid "Browse ..."
+msgstr "Seleccionar archivo..."
+
+msgid "Button Settings"
+msgstr "Configuración de los botones de control"
+
+msgid "Buttons"
+msgstr "Botones de control"
+
+msgid "Buzzer"
+msgstr "Vibrador"
+
+msgid "Buzzer duration: {dur} s"
+msgstr "Duración de la señal: {dur} seg."
+
+msgid "CPU load:"
+msgstr "Carga de la CPU:"
+
+msgid "Cancel"
+msgstr "Interrupción abortiva"
+
+msgid "Cancelled!"
+msgstr "Operación cancelada"
+
+msgid "Cannot retrieve current network information."
+msgstr "No se puede obtener información actualizada de la red."
+
+msgid "Caps Lock is on!"
+msgstr "Está pulsada la tecla de bloqueo de mayúsculas."
+
+msgid "Central Coordinator"
+msgstr "Coordinador central"
+
+msgid "Change Password"
+msgstr "Modificar la contraseña de acceso"
+
+msgid "Change Password?"
+msgstr "¿Modificar contraseña?"
+
+msgid "Change language"
+msgstr "Modificar el idioma"
+
+msgid "Changing"
+msgstr "Modificar"
+
+msgid "Channel"
+msgstr "Canal"
+
+msgid "Channel 2.4 GHz:"
+msgstr "Canal de 2,4 GHz"
+
+msgid "Channel 5 GHz:"
+msgstr "Canal de 5 GHz"
+
+msgid "Channel bandwidth:"
+msgstr "Ancho de canal:"
+
+msgid "Channel:"
+msgstr "Canal:"
+
+msgid "Checking firmware image ..."
+msgstr "Comprobando archivo de firmware..."
+
+msgid "Checking session ID ..."
+msgstr "Comprobando ID de sesión..."
+
+msgid "Choose between different LED notification levels."
+msgstr "Seleccione el comportamiento de los LED."
+
+msgid "Choose the CCo setting of your device in P2P mode."
+msgstr "Seleccione la configuración CCo de su dispositivo para el modo p2p."
+
+msgid ""
+"Choose the compatibility mode of your device. This setting can help "
+"increase performance with technologies such as VDSL."
+msgstr ""
+"Seleccionar el modo de compatibilidad; es un modo especial que corrige los "
+"fallos de conexión esporádicos que pueden producirse debido a la "
+"interacción con otras tecnologías, como por ejemplo VDSL."
+
+msgid "Choose the network mode of your device."
+msgstr "Seleccione el modo de red de su dispositivo."
+
+msgid "Click here to update."
+msgstr "Haga clic aquí para actualizar."
+
+msgid "Click to edit"
+msgstr "Haga clic aquí para editar la entrada"
+
+msgid "Clicking the button below will restart your device."
+msgstr "El dispositivo se reinicia haciendo clic en \"Reiniciar\"."
+
+msgid "Clone SSID"
+msgstr "Clonar SSID"
+
+msgid "Clone SSID via WPS"
+msgstr "Clonar SSID a través de WPS"
+
+msgid "Compatibility Mode"
+msgstr "Modo de compatibilidad"
+
+msgid "Compatibility Mode:"
+msgstr "Modo de compatibilidad:"
+
+msgid "Compatibility mode"
+msgstr "Modo de compatibilidad"
+
+msgid "Config Sync"
+msgstr "Config Sync"
+
+msgid "Configuration"
+msgstr "Configuración"
+
+msgid "Configuration file too large (maximum {maxSize} bytes)!"
+msgstr ""
+"El archivo de configuración es demasiado grande ({maxSize} bytes como "
+"máximo)."
+
+msgid "Configuration of time quotas"
+msgstr "Configuración"
+
+msgid "Configuration successfully restored!"
+msgstr "La configuración se ha restaurado correctamente."
+
+msgid "Configured VLANs:"
+msgstr "Redes VLAN configuradas:"
+
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgid "Confirm new password:"
+msgstr "Confirmar contraseña nueva:"
+
+msgid "Connected AVLNs:"
+msgstr "Redes AVLN conectadas:"
+
+msgid "Connected WiFi Clients"
+msgstr "Dispositivos WiFi conectados"
+
+msgid "Connected WiFi clients:"
+msgstr "Dispositivos WiFi conectados:"
+
+msgid "Connected clients"
+msgstr "Dispositivos conectados"
+
+msgid "Connected devices:"
+msgstr "Dispositivos conectados:"
+
+msgid "Connected powerline devices"
+msgstr "Dispositivos Powerline conectados"
+
+msgid "Connected since"
+msgstr "Conectados desde"
+
+msgid "Connection"
+msgstr "Conexión"
+
+msgid "Connection lost!"
+msgstr "Conexión interrumpida"
+
+msgid "Connection status:"
+msgstr "Estado de la conexión:"
+
+msgid "Contact:"
+msgstr "Contacto:"
+
+msgid "Current Firmware"
+msgstr "Firmware actual"
+
+msgid "Current channel"
+msgstr "Canal actual"
+
+msgid "Current channel:"
+msgstr "Canal actual:"
+
+msgid "DES"
+msgstr "DES"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DHCP Server"
+msgstr "Servidor DHCP"
+
+msgid "Data rates:"
+msgstr "Velocidades de transmisión:"
+
+msgid "Date"
+msgstr "Fecha"
+
+msgid "Date and Time"
+msgstr "Fecha y hora"
+
+msgid "Days"
+msgstr "Días"
+
+msgid "Default"
+msgstr "Estándar"
+
+msgid "Default VLAN"
+msgstr "VLAN estándar"
+
+msgid "Default gateway:"
+msgstr "Vía de acceso estándar:"
+
+msgid "Default mode *"
+msgstr "Configuración estándar *"
+
+msgid "Delete"
+msgstr "Borrar"
+
+msgid "Delete SSID?"
+msgstr "¿Borrar SSID?"
+
+msgid "Device ID"
+msgstr "ID del dispositivo"
+
+msgid "Device MAC"
+msgstr "Dirección MAC del dispositivo"
+
+msgid "Device Name"
+msgstr "Nombre de los dispositivos"
+
+msgid "Device rebooted.  Please login again!"
+msgstr "Se ha reiniciado el dispositivo. Vuelva a iniciar sesión."
+
+msgid "Disable Radio?"
+msgstr "¿Radio apagada?"
+
+msgid "Disable guest network {duration}"
+msgstr "Desactivar la red de invitado {duration}"
+
+msgid "Disabled"
+msgstr "Apagada"
+
+msgid ""
+"Disabling the reset button also forbids resetting the configuration to "
+"factory defaults."
+msgstr ""
+"Al desactivar el botón de reset no existe la posibilidad de reiniciar el "
+"dispositivo ni de restablecer los valores de suministro."
+
+msgid ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+msgstr ""
+"¿Seguro que desea modificar la contraseña PLC? Puede perderse la conexión "
+"con este dispositivo."
+
+msgid ""
+"Do you really want to enable the WiFi Schedule without adding time quotas? "
+"The Wifi will be turned off permanently."
+msgstr ""
+"Si no configura ninguna regla, el WiFi no podrá utilizarse hasta que añada "
+"una regla o desactive el control horario."
+
+msgid "Do you really want to remove this SSID?"
+msgstr "¿Seguro que desea borrar el SSID?"
+
+msgid ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+msgstr ""
+"¿Seguro que desea restablecer los valores de suministro del dispositivo? A "
+"continuación, el dispositivo se reiniciará."
+
+msgid "Do you really want to restart the device?"
+msgstr "¿Seguro que desea reiniciar el dispositivo?"
+
+msgid "Domain Master"
+msgstr "Domain Master"
+
+msgid "Download Firmware Version for Update"
+msgstr "Descargar firmware actualizado"
+
+msgid "Download Firmware:"
+msgstr "Descargar firmware:"
+
+msgid "Dynamic VLAN"
+msgstr "VLAN dinámica"
+
+msgid "Enable"
+msgstr "Activar"
+
+msgid "Enable or completely disable the LEDs of your device."
+msgstr "Activar o desactivar por completo los LED de este dispositivo"
+
+msgid "Enable or disable the buttons of your devices."
+msgstr "Active o desactive la función de los botones de control en el dispositivo."
+
+msgid "Enabled"
+msgstr "Activados"
+
+msgid "Enabled ({url})"
+msgstr "Activados ({url})"
+
+msgid "Enabled SSIDs"
+msgstr "SSID activados"
+
+msgid "Enabled SSIDs:"
+msgstr "SSID activados:"
+
+msgid ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+msgstr ""
+"Mesh functionality optimiza su red WiFi y facilita el uso de esta para "
+"dispositivos WiFi móviles. El roaming soluciona el problema de los "
+"dispositivos WiFi atascados. El Band Steering y la Dynamic Frequency "
+"Selection permiten un acceso WiFi sin problemas incluso para múltiples "
+"dispositivos WiFi. La opción Airtime Fairness optimiza el ancho de banda de "
+"las redes que tienen muchos dispositivos WiFi."
+
+msgid "Encryption:"
+msgstr "Codificación:"
+
+msgid "End IP Address:"
+msgstr "Dirección IP final:"
+
+msgid "End Point"
+msgstr "Dispositivo"
+
+msgid "End address equals start address!"
+msgstr "La dirección final es la misma que la dirección inicial."
+
+msgid "End address must be larger than start address!"
+msgstr "La dirección final debe ser mayor que la dirección inicial."
+
+msgid "End node"
+msgstr "End node"
+
+msgid "Enter WPS PIN"
+msgstr "Introducir el PIN WPS"
+
+msgid "Enter an alphanumeric community name (max 24 characters)"
+msgstr "Introduzca un nombre de comunidad alfanumérico (máx. 24 caracteres)."
+
+msgid "Enter an alphanumeric username (max 24 characters)"
+msgstr "Introduzca un nombre de usuario alfanumérico (máx. 24 caracteres)."
+
+msgid "Enter between 1 and 64 of these characters:"
+msgstr "Introducir entre 1 y 64 de los caracteres siguientes:"
+
+msgid "Enter between 8 and 130 of these characters:"
+msgstr "Introducir entre 8 y 130 de los caracteres siguientes:"
+
+msgid "Enter between 8 and 64 of these characters:"
+msgstr "Introducir entre 8 y 64 de los caracteres siguientes:"
+
+msgid "Enter new password:"
+msgstr "Introducir la contraseña nueva:"
+
+msgid "Enter old password:"
+msgstr "Introducir la contraseña antigua:"
+
+msgid "Enter the PIN of the device to be added to your WiFi network."
+msgstr "Introduzca el PIN del dispositivo que debe añadirse a su red WiFi."
+
+msgid ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+msgstr ""
+"Introduzca la contraseña PLC que debe utilizar el dispositivo para acceder "
+"a su red Powerline. Todos los dispositivos de una red Powerline deben "
+"utilizar la misma contraseña PLC."
+
+msgid "Error code:"
+msgstr "Código de error:"
+
+msgid "Error occured! Please try again!"
+msgstr "Se ha producido un error. Por favor, inténtelo de nuevo."
+
+msgid "Error while processing WPS!  ->  ("
+msgstr "Se ha producido un error durante el proceso de WPS. -&gt; ("
+
+msgid "Ethernet"
+msgstr "Ethernet"
+
+msgid "Europe/Aachen"
+msgstr "Europa/Aquisgrán"
+
+msgid "Europe/Amsterdam"
+msgstr "Europa/Ámsterdam"
+
+msgid "Europe/Andorra"
+msgstr "Europa/Andorra"
+
+msgid "Europe/Athens"
+msgstr "Europa/Atenas"
+
+msgid "Europe/Belgrade"
+msgstr "Europa/Belgrado"
+
+msgid "Europe/Berlin"
+msgstr "Europa/Berlín"
+
+msgid "Europe/Bratislava"
+msgstr "Europa/Bratislava"
+
+msgid "Europe/Brussels"
+msgstr "Europa/Bruselas"
+
+msgid "Europe/Bucharest"
+msgstr "Europa/Bucarest"
+
+msgid "Europe/Budapest"
+msgstr "Europa/Budapest"
+
+msgid "Europe/Busingen"
+msgstr "Europa/Busingen"
+
+msgid "Europe/Chisinau"
+msgstr "Europa/Chisináu"
+
+msgid "Europe/Copenhagen"
+msgstr "Europa/Copenhague"
+
+msgid "Europe/Dublin"
+msgstr "Europa/Dublín"
+
+msgid "Europe/Gibraltar"
+msgstr "Europa/Gibraltar"
+
+msgid "Europe/Guernsey"
+msgstr "Europa/Guernsey"
+
+msgid "Europe/Helsinki"
+msgstr "Europa/Helsinki"
+
+msgid "Europe/Isle of Man"
+msgstr "Europa/Isla de Man"
+
+msgid "Europe/Istanbul"
+msgstr "Europa/Estambul"
+
+msgid "Europe/Jersey"
+msgstr "Europa/Jersey"
+
+msgid "Europe/Kaliningrad"
+msgstr "Europa/Kaliningrado"
+
+msgid "Europe/Kiev"
+msgstr "Europa/Kiev"
+
+msgid "Europe/Lisbon"
+msgstr "Europa/Lisboa"
+
+msgid "Europe/Ljubljana"
+msgstr "Europa/Liubliana"
+
+msgid "Europe/London"
+msgstr "Europa/Londres"
+
+msgid "Europe/Luxembourg"
+msgstr "Europa/Luxemburgo"
+
+msgid "Europe/Madrid"
+msgstr "Europa/Madrid"
+
+msgid "Europe/Malta"
+msgstr "Europa/Malta"
+
+msgid "Europe/Mariehamn"
+msgstr "Europa/Mariehamn"
+
+msgid "Europe/Minsk"
+msgstr "Europa/Minsk"
+
+msgid "Europe/Monaco"
+msgstr "Europa/Mónaco"
+
+msgid "Europe/Moscow"
+msgstr "Europa/Moscú"
+
+msgid "Europe/Oslo"
+msgstr "Europa/Oslo"
+
+msgid "Europe/Paris"
+msgstr "Europa/París"
+
+msgid "Europe/Podgorica"
+msgstr "Europa/Podgorica"
+
+msgid "Europe/Prague"
+msgstr "Europa/Praga"
+
+msgid "Europe/Riga"
+msgstr "Europa/Riga"
+
+msgid "Europe/Rome"
+msgstr "Europa/Roma"
+
+msgid "Europe/Samara"
+msgstr "Europa/Samara"
+
+msgid "Europe/San Marino"
+msgstr "Europa/San Marino"
+
+msgid "Europe/Sarajevo"
+msgstr "Europa/Sarajevo"
+
+msgid "Europe/Simferopol"
+msgstr "Europa/Simferópol"
+
+msgid "Europe/Skopje"
+msgstr "Europa/Skopie"
+
+msgid "Europe/Sofia"
+msgstr "Europa/Sofía"
+
+msgid "Europe/Stockholm"
+msgstr "Europa/Estocolmo"
+
+msgid "Europe/Tallinn"
+msgstr "Europa/Tallin"
+
+msgid "Europe/Tirane"
+msgstr "Europa/Tirana"
+
+msgid "Europe/Uzhgorod"
+msgstr "Europa/Uzhgorod"
+
+msgid "Europe/Vaduz"
+msgstr "Europa/Vaduz"
+
+msgid "Europe/Vatican"
+msgstr "Europa/Vaticano"
+
+msgid "Europe/Vienna"
+msgstr "Europa/Viena"
+
+msgid "Europe/Vilnius"
+msgstr "Europa/Vilna"
+
+msgid "Europe/Volgograd"
+msgstr "Europa/Volgogrado"
+
+msgid "Europe/Warsaw"
+msgstr "Europa/Varsovia"
+
+msgid "Europe/Zagreb"
+msgstr "Europa/Zagreb"
+
+msgid "Europe/Zaporozhye"
+msgstr "Europa/Zaporiyia"
+
+msgid "Europe/Zurich"
+msgstr "Europa/Zúrich"
+
+msgid "Fast transition (802.11r)"
+msgstr "Fast transition (802.11r)"
+
+msgid "Features"
+msgstr "Funciones"
+
+msgid "Find Me"
+msgstr "¡Encuéntrame!"
+
+msgid "Firmware"
+msgstr "Firmware"
+
+msgid "Firmware file:"
+msgstr "Archivo de firmware:"
+
+msgid "Firmware image too large (maximum {maxSize} bytes)!"
+msgstr "El archivo de firmware es demasiado grande ({maxSize} bytes como máximo)."
+
+msgid "Firmware updated successfully."
+msgstr "El firmware se ha actualizado correctamente."
+
+msgid "Firmware version:"
+msgstr "Versión de firmware:"
+
+msgid "Force Node Type"
+msgstr "Force Node Type"
+
+msgid "Force node type"
+msgstr "Force Node Type"
+
+msgid "Free memory:"
+msgstr "Memoria de trabajo libre:"
+
+msgid "Frequency band"
+msgstr "Banda de frecuencia"
+
+msgid "Frequency band:"
+msgstr "Banda de frecuencia:"
+
+msgid "Fri"
+msgstr "Vi"
+
+msgid "Friday"
+msgstr "Viernes"
+
+msgid "From"
+msgstr "desde"
+
+msgid "Get IP configuration from a DHCP server"
+msgstr "Obtener la configuración de red de un servidor DHCP"
+
+msgid "Guest network"
+msgstr "Red de invitado"
+
+msgid "Guest network configuration"
+msgstr "Configuración "
+
+msgid "HH"
+msgstr "HH"
+
+msgid "Here"
+msgstr "Aquí"
+
+msgid ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking Start configuration."
+msgstr ""
+"Aquí puede añadir a su red un nuevo dispositivo Powerline. En primer lugar "
+"introduzca el identificador de seguridad que aparece impreso en el reverso, "
+"a continuación conecte el dispositivo en una toma de corriente y para "
+"terminar haga clic en \"Iniciar configuración\"."
+
+msgid ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+msgstr ""
+"Asigne aquí una contraseña PLC personal a su red (en lugar de la contraseña "
+"PLC generada automáticamente)."
+
+msgid ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+msgstr ""
+"Aquí se pueden definir los intervalos horarios en los que desea activar el "
+"WiFi."
+
+msgid "Hide SSID:"
+msgstr "Ocultar SSID"
+
+msgid "Hide password"
+msgstr "Ocultar contraseña"
+
+msgid "High ({power} dBm)"
+msgstr "Alto ({power} dBm)"
+
+msgid ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+msgstr ""
+"IEEE 802.11r (también llamado \"Fast Roaming\") acelera el inicio de sesión "
+"de un dispositivo WiFi en este punto de acceso WiFi. Requisito previo: El "
+"dispositivo ya estaba conectado a otro punto de acceso WiFi con 802.11r "
+"habilitado, nombre de red idéntico (SSID) y cifrado idéntico. Por "
+"desgracia, 802.11r no es compatible con todos los dispositivos WiFi. Si "
+"tiene problemas con uno de sus dispositivos, desactive esta opción."
+
+msgid "IP Configuration"
+msgstr "Configuración IP"
+
+msgid "IP address is inside the loopback network!"
+msgstr "La dirección IP se encuentra dentro del rango de dirección de loopback."
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv4 address"
+msgstr "Dirección IPv4"
+
+msgid "IPv4 address of DNS server"
+msgstr "Dirección IPv4 del servidor DNS"
+
+msgid "IPv4 address of default gateway"
+msgstr "Dirección IPv4 de la vía de acceso estándar"
+
+msgid "IPv4 configuration successfully updated."
+msgstr "La configuración IPv4 se ha actualizado correctamente."
+
+msgid "IPv4 netmask"
+msgstr "Máscara de subred IPv4"
+
+msgid "IPv4/IPv6"
+msgstr "IPv4/IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "IPv6 Address"
+msgstr "Dirección IPv6"
+
+msgid ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be resetted to factory defaults."
+msgstr ""
+"Si continúa, se borrarán todos los ajustes del dispositivo y se "
+"restablecerán los valores de suministro."
+
+msgid ""
+"In this case, instead of the automatically generated PLC password, assign a "
+"separate PLC password to your network manually."
+msgstr ""
+"En lugar de la contraseña PLC generada automáticamente, asigne aquí una "
+"contraseña PLC personal a su red."
+
+msgid "Incorrect password!"
+msgstr "Contraseña no válida"
+
+msgid "Individual ({power} dBm)"
+msgstr "Individual ({power} dBm)"
+
+msgid "Individual transmit power:"
+msgstr "Rendimiento de envío individual:"
+
+msgid "Indoor use only:"
+msgstr "Uso solo en interiores:"
+
+msgid "Information"
+msgstr "Información"
+
+msgid "Interfaces"
+msgstr "Interfaces de red"
+
+msgid "Interval"
+msgstr "Rango"
+
+msgid "Invalid IP address!"
+msgstr "Dirección IP no válida"
+
+msgid ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Clave no válida Introduzca como mínimo 8 y como máximo 63 caracteres. "
+"Caracteres especiales permitidos: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  "
+"` ~ + = . _ / ?  < >"
+
+msgid "Invalid Mac address!"
+msgstr "Dirección MAC no válida"
+
+msgid "Invalid SSID!  Please enter between 1 and 32 characters)."
+msgstr ""
+"SSID no válido Introduzca como mínimo 1 carácter y como máximo 32 "
+"caracteres."
+
+msgid ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"SSID no válido Introduzca como mínimo 1 carácter y como máximo 32 "
+"caracteres. Caracteres especiales permitidos: ! @ # $ % ^ & * ) ( [ ] { } | "
+", : ; ' \"  ` ~ + = . _ / ?  < >"
+
+msgid "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+msgstr "ID de VLAN no válido Introduzca un valor entre 1 y 4094."
+
+msgid "Invalid hostname or IP address!"
+msgstr "Nombre de host no válido o dirección IP no válida"
+
+msgid "Invalid hostname or IP/Subnet!"
+msgstr "Nombre de host no válido o IP/máscara de red no válida"
+
+msgid ""
+"Invalid hostname! Allowed are the digits 0-9, upper- and lowercase letters "
+"a-z, A-Z and the hyphen. The hostname cannot start or end with a hyphen."
+msgstr ""
+"Nombre de host no válido Están permitidos los caracteres 0-9, a-z, A-Z y el "
+"guión «-». El nombre de host no puede empezar ni terminar con un guión."
+
+msgid ""
+"Invalid key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ?  < >"
+msgstr ""
+"Clave no válida Introduzca como mínimo 8 y como máximo 63 caracteres. "
+"Caracteres especiales permitidos: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  "
+"` ~ + = . _ / ?  < >"
+
+msgid "Invalid name!"
+msgstr "Nombre no válido"
+
+msgid "Invalid netmask!"
+msgstr "Máscara de subred no válida"
+
+msgid "Invalid port! Please enter a value between 1 and 65535."
+msgstr "Puerto no válido Introduzca un valor entre 1 y 65535."
+
+msgid ""
+"Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed "
+"characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+msgstr ""
+"Clave (pre-shared key) no válida! Introduzca 64 caracteres. Caracteres "
+"ermitidos: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 123."
+msgstr "Rango no válido para 2,4 GHz, introduzca un valor entre 0 y 123. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Rango no válido para 2,4 GHz, introduzca un valor entre 0 y 123. Rango no "
+"válido para 5 GHz, introduzca un valor entre 0 y 200. "
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 127."
+msgstr "Rango no válido para 2,4 GHz, introduzca un valor entre 0 y 127. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Rango no válido para 2,4 GHz, introduzca un valor entre 0 y 127. Rango no "
+"válido para 5 GHz, introduzca un valor entre 0 y 200. "
+
+msgid "Invalid range for 5 GHz, please enter a value between 0 and 200."
+msgstr "Rango no válido para 5 GHz, introduzca un valor entre 0 y 200. "
+
+msgid "Key:"
+msgstr "Clave:"
+
+msgid "LAN"
+msgstr "LAN"
+
+msgid "LED Settings"
+msgstr "Configuración de los LED"
+
+msgid "LEDs"
+msgstr "LED"
+
+msgid "Lease Time:"
+msgstr "Tiempo de concesión:"
+
+msgid "Leasetime"
+msgstr "Tiempo de concesión"
+
+msgid "Licenses"
+msgstr "Licencias"
+
+msgid "Loading ..."
+msgstr "Cargando..."
+
+msgid "Local Device"
+msgstr "Dispositivo local"
+
+msgid "Local time:"
+msgstr "Fecha y hora actuales:"
+
+msgid "Location:"
+msgstr "Ubicación:"
+
+msgid "Log Level"
+msgstr "Nivel"
+
+msgid "Login"
+msgstr "Iniciar sesión"
+
+msgid "Logout"
+msgstr "Cerrar sesión"
+
+msgid "Logs"
+msgstr "Eventos"
+
+msgid "Low ({power} dBm)"
+msgstr "Bajo ({power} dBm)"
+
+msgid "MAC Address"
+msgstr "Dirección MAC"
+
+msgid "MAC Addresses"
+msgstr "Direcciones MAC"
+
+msgid "MAC address"
+msgstr "Dirección MAC"
+
+msgid "MBytes"
+msgstr "MBytes"
+
+msgid "MD5"
+msgstr "MD5"
+
+msgid "MHz"
+msgstr "MHz"
+
+msgid "MM"
+msgstr "mm"
+
+msgid "Management"
+msgstr "Administración"
+
+msgid "Management VLAN"
+msgstr "VLAN de gestión"
+
+msgid "Management VLAN:"
+msgstr "VLAN de gestión:"
+
+msgid "Manual"
+msgstr "Manual"
+
+msgid "Manufacturer"
+msgstr "Fabricante"
+
+msgid "Mask:"
+msgstr "Prefijo:"
+
+msgid "Max. clients:"
+msgstr "Número máximo de dispositivos:"
+
+msgid "Max. transmit power:"
+msgstr "Rendimiento máximo de envío:"
+
+msgid "Mbit/s"
+msgstr "Mbps"
+
+msgid "Medium ({power} dBm)"
+msgstr "Medio ({power} dBm)"
+
+msgid "Members"
+msgstr "Miembros"
+
+msgid "Mesh WiFi"
+msgstr "Mesh WiFi"
+
+msgid "Message"
+msgstr "Mensaje"
+
+msgid "Minimum lease time is two minutes!"
+msgstr "El tiempo de concesión mínimo es de dos minutos."
+
+msgid "Mode:"
+msgstr "Modo:"
+
+msgid "Mon"
+msgstr "Lu"
+
+msgid "Mon-Fri"
+msgstr "Lu-Vi"
+
+msgid "Monday"
+msgstr "Lunes"
+
+msgid "N/A"
+msgstr "N/A"
+
+msgid "NTP configuration successfully saved."
+msgstr "La configuración del servidor de tiempo se ha guardado correctamente."
+
+msgid "Name server:"
+msgstr "Servidor DNS:"
+
+msgid "Name:"
+msgstr "Nombre:"
+
+msgid ""
+"Navigating away from this page will discard all your changes. Really "
+"proceed?"
+msgstr "Si abandona esta página, perderá los cambios. ¿Desea continuar igualmente?"
+
+msgid "Neighbour network"
+msgstr "Redes vecinas"
+
+msgid "Network"
+msgstr "Red"
+
+msgid "Network Mode:"
+msgstr "Modo de red:"
+
+msgid "Network interface"
+msgstr "Adaptador de red"
+
+msgid "Network name"
+msgstr "Nombre de la red"
+
+msgid "Network name 2.4 + 5 GHz"
+msgstr "Nombre de la red 2,4 + 5 GHz"
+
+msgid "Network name:"
+msgstr "Nombre de la red:"
+
+msgid "Never"
+msgstr "Nunca"
+
+msgid ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+msgstr ""
+"Se ha encontrado un dispositivo Powerline nuevo. Espere a que la operación "
+"haya terminado, puede tardar hasta 20 segundos."
+
+msgid "No Log Information"
+msgstr "No hay eventos disponibles."
+
+msgid ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"companions security ID."
+msgstr ""
+"No se ha encontrado ningún dispositivo Powerline nuevo. Compruebe si se ha "
+"introducido correctamente el identificador de seguridad."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button.\n"
+"              Please wait until the process has been finished."
+msgstr ""
+"No se ha encontrado ningún dispositivo Powerline. Compruebe si los botones "
+"PLC correspondientes se han pulsado correctamente.\n"
+"Espere a que la operación haya terminado."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button. Please wait until the process has been finished."
+msgstr ""
+"No se ha encontrado ningún dispositivo Powerline. Pulse el botón PLC y "
+"espere a que la operación haya terminado."
+
+msgid "No RADIUS server configured"
+msgstr "No hay ningún servidor RADIUS configurado."
+
+msgid "No VLAN"
+msgstr "Ninguna VLAN"
+
+msgid "No WiFi radio enabled. Please enable a radio."
+msgstr ""
+"Todos los puntos de acceso WiFi están desactivados. Active como mínimo un "
+"punto de acceso WiFi."
+
+msgid "No clients are connected"
+msgstr "Ningún dispositivo conectado."
+
+msgid "No encryption (not recommended)"
+msgstr "No se recomienda la configuración \"Ninguna codificación\"."
+
+msgid "No file selected."
+msgstr "No hay ningún archivo seleccionado."
+
+msgid "No valid input such as \"1d 12h 30m\"!"
+msgstr "Ninguna entrada valida p. ej. \"1d 12h 30m\"!"
+
+msgid "Not a valid input such as \"1d 12h 30m\"!"
+msgstr "Ninguna entrada valida p. ej. \"1d 12h 30m\"!"
+
+msgid "Not configured"
+msgstr "Sin configurar."
+
+msgid "Not connected"
+msgstr "No conectado"
+
+msgid "Now press the WPS button on the device being added to your WiFi network."
+msgstr "Pulse ahora el botón WiFi del dispositivo que desea añadir a la red WiFi."
+
+msgid "OK"
+msgstr "Aceptar"
+
+msgid "Off"
+msgstr "desactivado"
+
+msgid "Old password was incorrect!"
+msgstr "La contraseña actual no es correcta."
+
+msgid "Only for development"
+msgstr "Solo para fines de desarrollo"
+
+msgid "Open"
+msgstr "Abierta"
+
+msgid "Open (OWE)"
+msgstr "Open (OWE)"
+
+msgid "Operate as DHCP server"
+msgstr "Operar como servidor DHCP"
+
+msgid "Origin"
+msgstr "Fuente"
+
+msgid "Outside of the address range!"
+msgstr "Fuera del rango de dirección"
+
+msgid "Overview"
+msgstr "Resumen"
+
+msgid "Overview of the wifi schedule settings"
+msgstr "Resumen"
+
+msgid "PAIR"
+msgstr "Establecer conexión PLC"
+
+msgid "PLC Connections"
+msgstr "Conexiones PLC"
+
+msgid "PLC Name"
+msgstr "Nombre PLC"
+
+msgid "PLC domain name"
+msgstr "Nombre Domain PLC"
+
+msgid "PLC firmware version:"
+msgstr "Versión de firmware del PLC:"
+
+msgid "PLC password"
+msgstr "Contraseña PLC"
+
+msgid "PLC role"
+msgstr "Papel PLC"
+
+msgid "Pairing"
+msgstr "Emparejamiento: establecer conexión PLC"
+
+msgid "Parental Control"
+msgstr "Seguro para niños"
+
+msgid "Password"
+msgstr "Contraseña"
+
+msgid "Password:"
+msgstr "Contraseña:"
+
+msgid "Passwords do not match!"
+msgstr "Las contraseñas no coinciden."
+
+msgid "Peer isolation"
+msgstr "Prohibir la comunicación entre los dispositivos WiFi"
+
+msgid "Please activate the WiFi network to enable Clone SSID via WPS"
+msgstr "Active la red WiFi para iniciar el modo WiFi Clone."
+
+msgid "Please click the + button to add a SSID."
+msgstr "Haga clic en la tecla + para añadir un SSID nuevo."
+
+msgid "Please click the + button to add a VLAN"
+msgstr "Haga clic en la tecla + para añadir una VLAN nueva"
+
+msgid "Please click the + button to add a new schedule."
+msgstr "Haga clic en la tecla + para añadir una regla nueva."
+
+msgid "Please click the + button to add a time server"
+msgstr "Haga clic en la tecla + para añadir un servidor de tiempo nuevo."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+msgstr ""
+"Configure {here} un canal WiFi estático. Tenga en cuenta que los demás "
+"puntos de acceso de su red se deben configurar de forma correspondiente."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+msgstr ""
+"Configure {here} un canal WiFi estático. Tenga en cuenta que los demás "
+"puntos de acceso de su red se deben configurar de forma correspondiente. "
+"Recomendación: seleccione un canal entre 36 y 48 para evitar cambios de "
+"canal debido a la DFS."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+msgstr ""
+"Configure {here} un canal WiFi estático. Tenga en cuenta que los demás "
+"puntos de acceso del puente deben tener configurado el mismo canal WiFi. "
+"Recomendación: canal 100."
+
+msgid ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+msgstr ""
+"Establezca el nombre para la red y confirme la configuración haciendo clic "
+"en el icono del disco."
+
+msgid "Please enter a password to secure the access to your device."
+msgstr ""
+"Introduzca una contraseña para restringir el acceso a la configuración del "
+"dispositivo."
+
+msgid ""
+"Please enter a value of at least 15 minutes or 0 to disable the "
+"functionality!"
+msgstr ""
+"Introduzca un intervalo de tiempo superior a 15 minutos. Para desactivar la "
+"función introduzca un 0."
+
+msgid "Please log in with your password!"
+msgstr "Inicie sesión con su contraseña."
+
+msgid "Please login again."
+msgstr "Vuelva a iniciar sesión:"
+
+msgid "Please note that WiFi schedule Settings have precedence over these settings!"
+msgstr ""
+"Tenga en cuenta que la configuración scheduler tiene prioridad sobre esta "
+"confguración."
+
+msgid ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+msgstr ""
+"Tenga en cuenta que muchos teléfonos inteligentes y tabletas mantienen la "
+"conexión WiFi constantemente."
+
+msgid ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, exit Config Sync on the device, that you want to configure "
+"or switch separately."
+msgstr ""
+"Tenga en cuenta que el WiFi siempre se activa y se desactiva en toda la "
+"red.  Por lo tanto, primero debe finalizar Config Sync en el dispositivo "
+"que quiera configurar o conmutar por separado."
+
+msgid "Please select the configuration file to be restored to this device."
+msgstr "Seleccione el archivo de configuración que desea restaurar."
+
+msgid "Please select the firmware file to be loaded onto this device."
+msgstr "Seleccione el archivo de firmware que se debe cargar en el dispositivo."
+
+msgid "Port"
+msgstr "Conexión"
+
+msgid "Port number"
+msgstr "Número de puerto"
+
+msgid "Port:"
+msgstr "Puerto:"
+
+msgid "Power Management"
+msgstr "Gestión de la energía"
+
+msgid "Powerline"
+msgstr "Powerline"
+
+msgid "Powerline LED"
+msgstr "LED de Powerline"
+
+msgid "Powerline Network Mode"
+msgstr "Modo de red Powerline"
+
+msgid "Powerline Password"
+msgstr "Contraseña PLC"
+
+msgid "Powerline Settings"
+msgstr "Configuración del modo de espera de Powerline"
+
+msgid "Powerline button"
+msgstr "Botón PLC"
+
+msgid "Powerline encryption already in progress by external or previous request."
+msgstr "Todavía se está creando la red Powerline."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+msgstr ""
+"Todavía se está creando la red Powerline. Espere a que la operación haya "
+"terminado. Faltan todavía 120 segundos."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+msgstr ""
+"Todavía se está creando la red Powerline. Espere a que la operación haya "
+"terminado. Faltan todavía {time} segundos."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished.\n"
+"              This can take up to 1 minute."
+msgstr ""
+"Se ha iniciado la integración en una red Powerline mediante un "
+"identificador de seguridad. Espere a que la operación haya terminado, puede "
+"tardar hasta 60 segundos. "
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished. This can take up to 1 minute."
+msgstr ""
+"Se ha iniciado la integración en una red Powerline pro mediante un "
+"identificador de seguridad. Espere a que la operación haya terminado, puede "
+"tardar hasta 60 segundos."
+
+msgid "Powerline encryption was stopped by external event."
+msgstr "Se ha detenido la creación de la red Powerline."
+
+msgid "Powerline encryption was successfully stopped."
+msgstr "La red Powerline se ha creado correctamente."
+
+msgid ""
+"Powerline standby is enabled! Disabling all radios will interrupt the "
+"connection to this website if the device can only be reached via Powerline "
+"and it enters standby mode. Do you really want to disable this radio?"
+msgstr ""
+"Está activado el modo de espera de Powerline. Desactivar todas las bandas "
+"de frecuencia interrumpe la conexión con este sitio web si este dispositivo "
+"está conectado con la red a través de Powerline y cambia al modo de espera. "
+"¿Seguro que desea desactivar esta banda de frecuencia?"
+
+msgid "Powersave mode"
+msgstr "Modo de ahorro de corriente"
+
+msgid "Preferred:"
+msgstr "Preferido:"
+
+msgid "Profile"
+msgstr "Perfil"
+
+msgid "Programming firmware image..."
+msgstr "Escribiendo archivo de firmware..."
+
+msgid "Protocol:"
+msgstr "Protocolo:"
+
+msgid "Public community (read only):"
+msgstr "Comunidad pública (lectura):"
+
+msgid "Public source:"
+msgstr "Fuente pública:"
+
+msgid "Quota"
+msgstr "Contingente de tiempo"
+
+msgid "Quota has been depleted"
+msgstr "El contingente de tiempo se agotò."
+
+msgid "Quota is currently depleting"
+msgstr "El contingente de tiempo se sta esaurendo."
+
+msgid "RADIUS"
+msgstr "RADIUS"
+
+msgid "RADIUS configuration applied successfully"
+msgstr "La configuración de RADIUS se ha guardado correctamente."
+
+msgid "RADIUS configuration is incomplete"
+msgstr "La configuración de RADIUS no está completa."
+
+msgid "RADIUS password:"
+msgstr "Contraseña de RADIUS:"
+
+msgid "RADIUS username:"
+msgstr "Nombre de usuario de RADIUS:"
+
+msgid "Radio"
+msgstr "Radio"
+
+msgid "Radio channel:"
+msgstr "Canal WiFi:"
+
+msgid "Radio:"
+msgstr "Radio:"
+
+msgid "Radios"
+msgstr "Radios"
+
+msgid "Rate (Mbit/s)"
+msgstr "Velocidad (Mbps)"
+
+msgid "Reboot"
+msgstr "Reiniciar"
+
+msgid "Reboot Device"
+msgstr "Reiniciar dispositivo"
+
+msgid "Reboot device?"
+msgstr "¿Reiniciar dispositivo?"
+
+msgid "Receive (Mbps)"
+msgstr "Recibir Mbps)"
+
+msgid "Recommended: 20 MHz"
+msgstr "Valor recomendado: 20 MHz"
+
+msgid "Recommended: 802.11g/n"
+msgstr "Valor recomendado: 802.11g/n"
+
+msgid "Recommended: 802.11n/ac"
+msgstr "Valor recomendado: 802.11n/ac"
+
+msgid "Recommended: Auto"
+msgstr "Valor recomendado: Auto"
+
+msgid "Recommended: Auto, 1, 6, 11"
+msgstr "Valores recomendados: Auto, 1, 6, 11"
+
+msgid "Reduced"
+msgstr "Reducido"
+
+msgid "Remote syslog server:"
+msgstr "Servidor de syslog remoto:"
+
+msgid "Reset"
+msgstr "Restablecer"
+
+msgid "Reset Configuration"
+msgstr "Restablecer la configuración del aparato"
+
+msgid "Reset button"
+msgstr "Botón de reset"
+
+msgid "Reset device to factory defaults?"
+msgstr "¿Restablecer los valores de suministro del dispositivo?"
+
+msgid "Reset/Restart button"
+msgstr "Botón de reset"
+
+msgid "Restore"
+msgstr "Restaurar"
+
+msgid "Restore Device Configuration From File"
+msgstr "Restaurar la configuración del dispositivo a partir del archivo"
+
+msgid "Role"
+msgstr "Papel"
+
+msgid "Run Mode"
+msgstr "Modo de ejecución"
+
+msgid "Rx rate (Mbit/s)"
+msgstr "Velocidad de recepción (Mbps)"
+
+msgid "SHA"
+msgstr "SHA"
+
+msgid "SNMP version:"
+msgstr "Versión de SNMP:"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID already exists"
+msgstr "Ya existe el SSID."
+
+msgid "SSID broadcast"
+msgstr "SSID visible"
+
+msgid "SSID:"
+msgstr "SSID:"
+
+msgid "SSIDs"
+msgstr "SSID"
+
+msgid "Sat"
+msgstr "Sa"
+
+msgid "Sat+Sun"
+msgstr "Sa+Do"
+
+msgid "Saturday"
+msgstr "Sábado"
+
+msgid "Save"
+msgstr "Guardar"
+
+msgid "Save Configuration to File"
+msgstr "Guardar la configuración del dispositivo en forma de archivo"
+
+msgid "Scan"
+msgstr "Escanear"
+
+msgid "Scan interval (min.):"
+msgstr "Intervalo de comprobación (min):"
+
+msgid "Scan interval in minutes"
+msgstr "Intervalo de escaneo en minutos"
+
+msgid "Schedule"
+msgstr "Control horario"
+
+msgid "Schedule configuration successfully saved."
+msgstr "El cambio se ha guardado correctamente."
+
+msgid "Search ..."
+msgstr "Buscando..."
+
+msgid "Secret:"
+msgstr "Secreto"
+
+msgid "Secured"
+msgstr "Asegurado"
+
+msgid "Security"
+msgstr "Codificación"
+
+msgid "Security ID:"
+msgstr "Identificador de seguridad:"
+
+msgid "Security passphrase:"
+msgstr "Identificador de seguridad:"
+
+msgid "Security status:"
+msgstr "Estado de codificación:"
+
+msgid "Security type:"
+msgstr "Tipo de codificación:"
+
+msgid "Security:"
+msgstr "Codificación:"
+
+msgid "Select Interval"
+msgstr "Seleccionar intervalo"
+
+msgid ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+msgstr ""
+"Seleccione un espacio de tiempo. Después de la expiración, la red de "
+"invitados se desconecta automáticamente."
+
+msgid "Select day"
+msgstr "Seleccionar día"
+
+msgid "Select time limit"
+msgstr "Seleccione el límite de tiempo"
+
+msgid "Selected time period:"
+msgstr "Espacio de tiempo seleccionado:"
+
+msgid "Serial number:"
+msgstr "Número de serie:"
+
+msgid "Server is outside of the network and unreachable!"
+msgstr ""
+"La dirección se encuentra fuera de la subred y, por lo tanto, no se puede "
+"acceder a ella."
+
+msgid "Server-side NAS key"
+msgstr "Clave NAS en el servidor"
+
+msgid "Server:"
+msgstr "Servidor:"
+
+msgid "Service"
+msgstr "Servicio"
+
+msgid "Service Name"
+msgstr "Nombre del servicio"
+
+msgid "Services"
+msgstr "Servicios"
+
+msgid "Set a duration and click \"Start\" to activate the buzzer for this time."
+msgstr ""
+"Defina a duração do aviso sonoro para encontrar o seu dispositivo e clique "
+"em \"Iniciar\"."
+
+msgid "Setting 0 prevents any clients from connecting to the SSID!"
+msgstr "La configuración 0 impide que todo dispositivo inicie sesión en este SSID."
+
+msgid "Settings"
+msgstr "Configuración"
+
+msgid ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually, after having re-established the connection."
+msgstr ""
+"Si después de cambiar la configuración ya no se puede acceder al "
+"dispositivo, vuelva a cargar la página una vez que haya restaurado la "
+"conexión."
+
+msgid "Show password"
+msgstr "Mostrar la contraseña"
+
+msgid "Signal (dBm)"
+msgstr "Señal (dBm)"
+
+msgid "Signal quality (%)"
+msgstr "Calidad de la señal (%)"
+
+msgid "Since"
+msgstr "Desde que"
+
+msgid ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+msgstr ""
+"Se han desactivado algunos SSID porque la configuración de RADIUS ha dejado "
+"de ser válida."
+
+msgid "Some SSIDs are updated to new RADIUS configuration"
+msgstr ""
+"Se han modificado algunos SSID porque la configuración de RADIUS ha "
+"cambiado."
+
+msgid ""
+"Some event has been occoured. Determining reason, this can take up to 1 "
+"minute."
+msgstr ""
+"Se ha producido un problema. Puede tardarse hasta 1 minuto en localizar la "
+"causa."
+
+msgid "Standby"
+msgstr "Modo de espera"
+
+msgid "Start"
+msgstr "Iniciar"
+
+msgid "Start Configuration"
+msgstr "Iniciar la configuración"
+
+msgid "Start IP Address:"
+msgstr "Dirección IP inicial:"
+
+msgid "Start address equals end address!"
+msgstr "La dirección inicial es la misma que la dirección final"
+
+msgid "Start address must be smaller than end address!"
+msgstr "La dirección inicial debe ser menor que la dirección final."
+
+msgid "Start pairing"
+msgstr "Iniciar establecimiento de la conexión PLC"
+
+msgid ""
+"Start the pairing process by pressing the PLC button on an adapter in your "
+"existing network first. Then, click on \"PAIR\"."
+msgstr ""
+"Pulse primero el botón PLC de un\n"
+"adaptador de su red existente y, a continuación, ejecute el proceso de "
+"emparejamiento\n"
+"clicando en \"PAIR\". \""
+
+msgid "Start time and end time cannot be equal! Please correct your time quotas!"
+msgstr "Las horas de inicio y de fin no pueden ser iguales. Cambie las horas."
+
+msgid "Static IPv4 Address"
+msgstr "Dirección IPv4 estática"
+
+msgid "Station is not connected"
+msgstr "Dispositivo no connectado"
+
+msgid "Status"
+msgstr "Estado"
+
+msgid "Status:"
+msgstr "Estado:"
+
+msgid "Stop"
+msgstr "Parar"
+
+msgid "Stop Configuration"
+msgstr "Detener la configuración"
+
+msgid "Stop time must be after start time! Please correct your time quotas!"
+msgstr "La hora de fin debe ser posterior a la hora de inicio. Cambie las horas."
+
+msgid "Subnet mask:"
+msgstr "Máscara de subred:"
+
+msgid "Subnet:"
+msgstr "Máscara de subred:"
+
+msgid "Successfully deleted."
+msgstr "Se ha borrado correctamente."
+
+msgid "Sun"
+msgstr "Do"
+
+msgid "Sunday"
+msgstr "Domingo"
+
+msgid "Support"
+msgstr "Soporte"
+
+msgid "Supported"
+msgstr "Compatible con"
+
+msgid "Switch your WiFi network on first so that your guest network can be used."
+msgstr "Conecte en primer lugar su red WiFi para poder utilizar la red de invitado."
+
+msgid "System"
+msgstr "Sistema"
+
+msgid "System Information"
+msgstr "Datos del sistema"
+
+msgid "System contact:"
+msgstr "Persona de contacto:"
+
+msgid "System location:"
+msgstr "Ubicación del dispositivo:"
+
+msgid "System name (hostname):"
+msgstr "Nombre del dispositivo (nombre de host):"
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using a mobile "
+"devices such as smartphones or tablets. While scanning the QR code the "
+"credentials for the guestnetwork will be transfered to your mobile device."
+msgstr ""
+"Con el código QR puede establecer cómodamente la conexión con la red de "
+"invitado para dispositivos móviles (p. ej., teléfonos inteligentes o "
+"tabletas). Al escanear el código, la configuración de codificación de la "
+"red de invitado se transmite automáticamente al dispositivo móvil en "
+"cuestión."
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+msgstr ""
+"Con el código QR puede establecer cómodamente la conexión con la red de "
+"invitado para dispositivos móviles (p. ej., teléfonos inteligentes o "
+"tabletas). Al escanear el código, la configuración de codificación de la "
+"red de invitado se transmite automáticamente al dispositivo móvil en "
+"cuestión."
+
+msgid ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+msgstr "Active el WiFi para poder ver las redes vecinas."
+
+msgid "The device has a new IP address. Please login at the new URL:"
+msgstr "El dispositivo tiene una dirección IP nueva. Vuelva a iniciar sesión:"
+
+msgid ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+msgstr ""
+"El conjunto de la configuración WiFi se transmite a todos los dispositivos "
+"compatibles con Config Sync de su red."
+
+msgid "The guest network does only allow access to the internet."
+msgstr "La red de invitado solo permite acceder a internet."
+
+msgid "The guestnetwork does only allow access to the internet."
+msgstr "La red de invitado solo permite acceder a internet."
+
+msgid "The host name is too long. Max. 32 characters allowed."
+msgstr "El nombre de host debe tener entre 1 y 32 caracteres."
+
+msgid "The host name is too short. Please enter at least 1 character."
+msgstr "El nombre de host es demasiado corta. Introduzca como mínimo 1 símbolo. "
+
+msgid "The maximum number ({maxVLANs}) of VLANs has been configured."
+msgstr "Se ha alcanzado el número máximo ({maxVLANs}) de redes VLAN."
+
+msgid "The password contains an invalid character:"
+msgstr "La contraseña contiene un carácter no válido:"
+
+msgid ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+msgstr ""
+"El identificador de seguridad se compone de cuatro grupos con cuatro letras "
+"mayúsculas cada uno y separados por guiones."
+
+msgid ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+msgstr ""
+"El archivo de configuración seleccionado no es válido, seleccione un "
+"archivo adecuado para este dispositivo."
+
+msgid ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+msgstr ""
+"El archivo de firmware seleccionado no es válido, seleccione un archivo de "
+"firmware adecuado para este dispositivo."
+
+msgid ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+msgstr ""
+"El servidor de tiempo realiza automáticamente el cambio de horario de "
+"verano a horario de inverno y viceversa. Por lo tanto, no necesita "
+"configurarlo manualmente."
+
+msgid "There are no configured time servers."
+msgstr "No hay ningún servidor de tiempo configurado."
+
+msgid "There is a newer version."
+msgstr "Versión actualizada"
+
+msgid "There is newer version:"
+msgstr "Versión actualizada"
+
+msgid ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+msgstr ""
+"Se transmiten, por ejemplo, los ajustes de:red WiFi, red de invitado, Mesh "
+"functionality, control horario y servidor de tiempo."
+
+msgid "This is the broadcast address!"
+msgstr "Esta es la dirección de difusión."
+
+msgid "This is the device's IP address!"
+msgstr "Esta es la dirección IP del dispositivo."
+
+msgid "This is the network address!"
+msgstr "Esta es la dirección de subred."
+
+msgid "This page will be reloaded automatically, when the action has finished."
+msgstr "Esta página volverá a cargarse automáticamente una vez finalizada la acción."
+
+msgid "This server already exists."
+msgstr "Este servidor ya existe."
+
+msgid "Thu"
+msgstr "Ju"
+
+msgid "Thursday"
+msgstr "Jueves"
+
+msgid "Time Server"
+msgstr "Servidor de tiempo"
+
+msgid "Time Server (NTP)"
+msgstr "Servidor de tiempo (NTP)"
+
+msgid "Time Server:"
+msgstr "Servidor de tiempo:"
+
+msgid "Time Zone"
+msgstr "Zona horaria"
+
+msgid "Time server"
+msgstr "Servidor de tiempo "
+
+msgid "Time zone configuration successfully saved."
+msgstr "La configuración de las zonas horarias se ha guardado correctamente."
+
+msgid "Time zone:"
+msgstr "Zona horaria:"
+
+msgid "To"
+msgstr "hasta"
+
+msgid "Total memory:"
+msgstr "Memoria de trabajo total:"
+
+msgid "Transmit (Mbps)"
+msgstr "Enviar (Mbps)"
+
+msgid "Tue"
+msgstr "Ma"
+
+msgid "Tuesday"
+msgstr "Martes"
+
+msgid "Turn off the WiFi"
+msgstr "Desactivar WiFi"
+
+msgid "Tx rate (Mbit/s)"
+msgstr "Velocidad de envío (Mbps)"
+
+msgid "Tx-Power"
+msgstr "Rendimiento de envío"
+
+msgid "Type"
+msgstr "Tipo"
+
+msgid "Type error"
+msgstr "Tipo de error"
+
+msgid "Type status"
+msgstr "Tipo de estado"
+
+msgid "UNPAIR"
+msgstr "Interrumpir conexión PLC"
+
+msgid "UTC"
+msgstr "UTC"
+
+msgid "Unpair device"
+msgstr "Interrumpir conexión PLC del dispositivo"
+
+msgid "Unpairing"
+msgstr "Desemparejamiento: interrumpir conexión PLC"
+
+msgid "Unsecured"
+msgstr "No asegurado"
+
+msgid "Untagged"
+msgstr "No etiquetado"
+
+msgid "Update firmware"
+msgstr "Ejecutar actualización"
+
+msgid "Update firmware to latest version"
+msgstr "Ejecutar actualización a la última versión"
+
+msgid "Update table"
+msgstr "Actualizar tabla"
+
+msgid "Uploading ..."
+msgstr "Realizando transmisión..."
+
+msgid "Uploading firmware image ..."
+msgstr "Transmitiendo archivo de firmware..."
+
+msgid "Uptime:"
+msgstr "Tiempo de funcionamiento del dispositivo:"
+
+msgid "Use common settings"
+msgstr "Misma configuración"
+
+msgid ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button on the device which you want to join "
+"your Powerline network! Afterwards, click the \"Start configuration\" "
+"button."
+msgstr ""
+"Assumir dispositivos na rede Powerline por meio do botão PLC. Dentro de 2 "
+"minutos, pressione o botão PLC do dispositivo ao qual pretende adicionar a "
+"sua rede Powerline. Em seguida, clique no botão \"Iniciar configuração\"."
+
+msgid "Username"
+msgstr "Nombre de usuario"
+
+msgid "Username:"
+msgstr "Nombre de usuario:"
+
+msgid "Using the encryption button"
+msgstr "Mediante botón PLC"
+
+msgid "VLAN ID"
+msgstr "ID de VLAN"
+
+msgid "VLAN ID must be unique!"
+msgstr "Ya existe el ID de VLAN."
+
+msgid "VLAN ID out of range (1-4094)!"
+msgstr "ID de VLAN no válido Introduzca un valor entre 1 y 4094."
+
+msgid "VLAN Name"
+msgstr "Nombre de la VLAN"
+
+msgid "VLAN name must be unique!"
+msgstr "El nombre de la VLAN debe ser inequívoco."
+
+msgid "VLAN {id}"
+msgstr "VLAN {id}"
+
+msgid "VLAN:"
+msgstr "VLAN:"
+
+msgid "VLANs"
+msgstr "Redes VLAN"
+
+msgid "Valid:"
+msgstr "Válido:"
+
+msgid "Very High ({power} dBm)"
+msgstr "Muy alto ({power} dBm)"
+
+msgid "Via security ID"
+msgstr "Mediante identificador de seguridad"
+
+msgid "WDS bridge configuration updated."
+msgstr "La configuración del puente WiFi se ha guardado correctamente."
+
+msgid "WMM Power-Save (U-APSD)"
+msgstr "WMM Power-Save (U-APSD)"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA/WPA2 Personal"
+msgstr "WPA/WPA2-Personal"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WPA2 Enterprise"
+msgstr "WPA2-Enterprise"
+
+msgid "WPA2 Personal"
+msgstr "WPA2-Personal"
+
+msgid "WPA2 Personal *"
+msgstr "WPA2-Personal *"
+
+msgid "WPA2 pre-shared key:"
+msgstr "Clave WPA2:"
+
+msgid "WPA3/WPA2 Personal"
+msgstr "WPA3/WPA2 Personal"
+
+msgid "WPS"
+msgstr "WPS"
+
+msgid "WPS Clone Mode failed: "
+msgstr "Ha fallado el modo WPS Clone:"
+
+msgid "WPS Clone Mode succeeded!"
+msgstr "El modo WPS Clone ha funcionado correctamente."
+
+msgid "WPS Mode:"
+msgstr "Modo WPS:"
+
+msgid "WPS PIN"
+msgstr "PIN WPS"
+
+msgid "WPS PIN connect applied successfully"
+msgstr "La conexión mediante PIN WPS se ha realizado correctamente."
+
+msgid "WPS PIN connect failed"
+msgstr "Ha fallado la conexión mediante PIN WPS."
+
+msgid "WPS PIN is active..."
+msgstr "El PIN WPS está activo..."
+
+msgid "WPS PIN is not valid. Use a 4- or 8-digit number."
+msgstr ""
+"El PIN WPS no es correcto. Introduzca la cifra correcta, formada por 4 o "
+"por 8 caracteres."
+
+msgid "WPS Pushbutton"
+msgstr "Pulsador WPS"
+
+msgid "WPS Pushbutton is active..."
+msgstr "El pulsador WPS está activo..."
+
+msgid "WPS connect applied successfully"
+msgstr "La conexión mediante WPS se ha realizado correctamente."
+
+msgid "WPS connect failed"
+msgstr "Ha fallado la conexión mediante WPS."
+
+msgid "WPS is active..."
+msgstr "El WPS está activo..."
+
+msgid "Warning"
+msgstr "Advertencia"
+
+msgid "Wed"
+msgstr "Mi"
+
+msgid "Wednesday"
+msgstr "Miércoles"
+
+msgid "Welcome to your {product}"
+msgstr "Bienvenido a su {product}"
+
+msgid ""
+"When scan interval is set to 0 this function is disabled. Recommended: 240 "
+"minutes"
+msgstr "Para desactivar la función introduzca un 0. Recomendación: 240 minutos"
+
+msgid ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+msgstr ""
+"Si la función \"Desconexión automática\" está activada, la red inalámbrica "
+"no se apagará hasta que el último dispositivo WiFi haya cerrado sesión en "
+"su punto de acceso."
+
+msgid "WiFi"
+msgstr "WiFi"
+
+msgid "WiFi Clients"
+msgstr "Dispositivos WiFi"
+
+msgid "WiFi Clone"
+msgstr "WiFi Clone"
+
+msgid ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+msgstr ""
+"Mediante WiFi Clone, este dispositivo puede acceder automáticamente a los "
+"datos de acceso de WiFi (nombre de red y contraseña del WiFi) de otro punto "
+"de acceso WiFi. Para ello, inicie el proceso de configuración y, a "
+"continuación, pulse el botón WPS del dispositivo del que se vayan a obtener "
+"los datos de acceso WiFi (SSID y contraseña del WiFi)."
+
+msgid "WiFi Clone is active..."
+msgstr "WiFi Clone está activada ..."
+
+msgid "WiFi LED"
+msgstr "LED de WiFi"
+
+msgid "WiFi Network"
+msgstr "Red WiFi"
+
+msgid "WiFi Protected Setup (WPS) - Configuration"
+msgstr "WiFi Protected Setup (WPS) - configuración"
+
+msgid "WiFi button"
+msgstr "Botón WiFi"
+
+msgid "WiFi convenience function"
+msgstr "Desconexión automática"
+
+msgid "WiFi disabled"
+msgstr "WiFi desactivado"
+
+msgid "WiFi enabled"
+msgstr "WiFi activado"
+
+msgid "WiFi network"
+msgstr "Red WiFi"
+
+msgid "WiFi network mode:"
+msgstr "Modo de red WiFi:"
+
+msgid "WiFi networks"
+msgstr "Redes WiFi"
+
+msgid "WiFi schedule control"
+msgstr "Control horario de WiFi"
+
+msgid "WiFi schedule settings"
+msgstr "Configuración"
+
+msgid "Wifi Status"
+msgstr "Estado del WiFi"
+
+msgid ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+msgstr ""
+"Puede guardar la configuración del dispositivo en su ordenador en forma de "
+"archivo y luego restaurarla o transmitir el archivo de configuración "
+"guardado a otro dispositivo."
+
+msgid "You can find the latest firmware"
+msgstr "Encontrará el firmware más actual "
+
+msgid ""
+"You can limit access to certain Wi-Fi devices by the MAC address. Please "
+"define the time periods during which Wi-Fi access is allowed."
+msgstr ""
+"Puede limitar el acceso a ciertos dispositivos WiFi por medio de la "
+"dirección MAC. Puede definir los espacios de tiempo en los que se permite "
+"el acceso a WiFi."
+
+msgid "You can no longer create SSIDs for the {radioBand} radio"
+msgstr "No puede añadir más SSID para la banda de frecuencia {radioBand}."
+
+msgid "You can't have 2 quotas for same mac address! Please correct your quota!"
+msgstr ""
+"Un dispositivo no puede utilizar varios contingentes de tiempo al mismo "
+"tiempo. Cambie las horas."
+
+msgid "You can't have overlapping quotas for the same station!"
+msgstr ""
+"No es posible solapar varios contingentes de tiempo para el mismo "
+"dispositivo!"
+
+msgid "You cannot combine the time period and time limit for a WiFi device!"
+msgstr ""
+"No puedes combinar el espacio de tiempo y el límite de tiempo para un "
+"dispositivo WiFi!"
+
+msgid ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+msgstr ""
+"Ha sido desconectado automáticamente del sistema por motivos de seguridad. "
+"Vuelva a iniciar sesión."
+
+msgid "You have successfully changed the Configuration for your device's LEDs."
+msgstr "Ha modificado correctamente el comportamiento de los LED."
+
+msgid "You have successfully changed the configuration for your device's buttons."
+msgstr "Ha modificado correctamente el comportamiento de los botones de control."
+
+msgid "You have successfully configured an SSID"
+msgstr "La configuración del SSID se ha guardado correctamente."
+
+msgid "You have successfully deleted an SSID"
+msgstr "El SSID se ha borrado correctamente."
+
+msgid "You have successfully updated the compatibility mode setting."
+msgstr "La configuración de modo de compatibilidad se ha guardado correctamente."
+
+msgid "You have successfully updated your Config sync settings"
+msgstr "La configuración de Config Sync se ha guardado correctamente."
+
+msgid "You have successfully updated your PLC network settings."
+msgstr "La configuración PLC se ha actualizada correctamente."
+
+msgid "You have successfully updated your PLC password."
+msgstr "Su contraseña PLC se ha actualizado correctamente."
+
+msgid "You have successfully updated your Powerline encryption password"
+msgstr "Su contraseña PLC se ha actualizado correctamente."
+
+msgid "You have successfully updated your Powerline network mode"
+msgstr "Ha actualizado correctamente el modo de red Powerline."
+
+msgid "You have successfully updated your Powerline pro network."
+msgstr "Su red Powerline pro se ha ampliado correctamente."
+
+msgid "You have successfully updated your system management configuration"
+msgstr "La configuración de administración se ha guardado correctamente."
+
+msgid "You have successfully {enableOrDisableTerm} {name} service."
+msgstr "{name} se ha {enableOrDisableTerm} correctamente."
+
+msgid ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+msgstr ""
+"Debe utilizar más categorías de caracteres diferentes (mayúsculas, "
+"minúsculas, cifras y caracteres especiales)."
+
+msgid "You've successfully changed your password."
+msgstr "La contraseña se ha modificado correctamente."
+
+msgid "You've successfully configured the WiFi network."
+msgstr "Su red WiFi se ha configurado correctamente."
+
+msgid "You've successfully configured the radio."
+msgstr ""
+"La configuración de la banda de frecuencia WiFi se ha guardado "
+"correctamente."
+
+msgid "Your Powerline pro network is disabled."
+msgstr "Su red Powerline pro está desactivada."
+
+msgid "Your WiFi is not encrypted. Please activate the encryption."
+msgstr "Su red WiFi no está codificada. Active la codificación."
+
+msgid ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+msgstr ""
+"El dispositivo Powerline se pone automáticamente en el modo de ahorro de "
+"corriente si no hay ninguna conexión Ethernet activa (es decir, no hay "
+"ningún dispositivo de red encendido conectado a las interfaces de red) y el "
+"WiFi está desactivado."
+
+msgid "call ubus"
+msgstr "ejecutar ubus"
+
+msgid "connected"
+msgstr "conectado"
+
+msgid "current session"
+msgstr "Sesión actual:"
+
+msgid "current ubus request queue"
+msgstr "Cola de solicitud actual de ubus"
+
+msgid "d, "
+msgstr "T, "
+
+msgid "dLAN button"
+msgstr "Botón de emparejamiento Powerline"
+
+msgid "daily"
+msgstr "todos los días"
+
+msgid "devolo"
+msgstr "devolo"
+
+msgid "disabled"
+msgstr "desactivado"
+
+msgid "display {num} of {all}"
+msgstr "mostrando {num} de {all}"
+
+msgid "enabled"
+msgstr "activado"
+
+msgid "mimo_full"
+msgstr "Full power"
+
+msgid "mimo_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "mimo_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "n/a"
+msgstr "n/a"
+
+msgid "no PLC connections"
+msgstr "no conexiones PLC"
+
+msgid "none"
+msgstr "ninguna"
+
+msgid "not configured"
+msgstr "sin configurar"
+
+msgid "off"
+msgstr "desactivado"
+
+msgid "on"
+msgstr "activado"
+
+msgid "one day, {hours}:{minutes}:{seconds}"
+msgstr "Un día, {hours}:{minutes}:{seconds}"
+
+msgid "pending"
+msgstr "Conectando..."
+
+msgid "reduced"
+msgstr "reducido"
+
+msgid "s"
+msgstr "seg."
+
+msgid "siso_full"
+msgstr "Full power"
+
+msgid "siso_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "siso_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "static"
+msgstr "estática"
+
+msgid "ubus Test"
+msgstr "Prueba de ubus"
+
+msgid "ubus callee"
+msgstr "Ejecutado de ubus:"
+
+msgid "ubus data"
+msgstr "Datos de ubus:"
+
+msgid "ubus section"
+msgstr "Sección de ubus:"
+
+msgid "unknown"
+msgstr "Desconocido"
+
+msgid "unknown LED"
+msgstr "LED desconocido"
+
+msgid "unknown button"
+msgstr "Botón desconocido"
+
+msgid "v1 + v2c"
+msgstr "v1 + v2c"
+
+msgid "v3"
+msgstr "v3"
+
+msgid "{days} days, {hours}:{minutes}:{seconds}"
+msgstr "{days} días, {hours}:{minutes}:{seconds}"
+
+msgid "{duration} remaining"
+msgstr "{duration} restante"
+
+msgid "{frequency} GHz Radio"
+msgstr "Banda de frecuencia de {frequency} GHz"
\ No newline at end of file
diff --git a/www/assets/i18n/fr.po b/www/assets/i18n/fr.po
new file mode 100644
index 0000000..ebb3088
--- /dev/null
+++ b/www/assets/i18n/fr.po
@@ -0,0 +1,2722 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "1"
+msgstr "1"
+
+msgid "10"
+msgstr "10"
+
+msgid "60"
+msgstr "60"
+
+msgid "120"
+msgstr "120"
+
+msgid " Device is not enabled,"
+msgstr "L'appareil n'est pas allumé,"
+
+msgid " Encryption disabled,"
+msgstr "Cryptage désactivé,"
+
+msgid " SSID is hidden,"
+msgstr "Le réseau WiFi est caché"
+
+msgid " The minimum password length is {minlength} character(s)."
+msgstr "La longueur minimale du mot de passe est de {minlength} caractères."
+
+msgid "(2.4 GHz)"
+msgstr "(2,4 GHz)"
+
+msgid "(5 GHz)"
+msgstr "(5 GHz)"
+
+msgid "(Radar detected on {channel})"
+msgstr "(radar détecté sur {channel})"
+
+msgid "(dynamic)"
+msgstr "(dynamique)"
+
+msgid ")\n"
+msgstr ""
+
+msgid ")<br/>"
+msgstr ")<br/>"
+
+msgid "* indicates default option"
+msgstr "* Paramétrage par défaut"
+
+msgid "* marks this device."
+msgstr "* cet appareil"
+
+msgid "* offers best performance"
+msgstr "* meilleure performance"
+
+msgid "00PM"
+msgstr "24"
+
+msgid "01AM"
+msgstr "01"
+
+msgid "01PM"
+msgstr "13"
+
+msgid "02AM"
+msgstr "02"
+
+msgid "02PM"
+msgstr "14"
+
+msgid "03AM"
+msgstr "03"
+
+msgid "03PM"
+msgstr "15"
+
+msgid "04AM"
+msgstr "04"
+
+msgid "04PM"
+msgstr "16"
+
+msgid "05AM"
+msgstr "05"
+
+msgid "05PM"
+msgstr "17"
+
+msgid "06AM"
+msgstr "06"
+
+msgid "06PM"
+msgstr "18"
+
+msgid "07AM"
+msgstr "07"
+
+msgid "07PM"
+msgstr "19"
+
+msgid "08AM"
+msgstr "08"
+
+msgid "08PM"
+msgstr "20"
+
+msgid "09AM"
+msgstr "09"
+
+msgid "09PM"
+msgstr "21"
+
+msgid "1 h"
+msgstr "1 h"
+
+msgid "10AM"
+msgstr "10"
+
+msgid "10PM"
+msgstr "22"
+
+msgid "11AM"
+msgstr "11"
+
+msgid "11PM"
+msgstr "23"
+
+msgid "12 h"
+msgstr "12 h"
+
+msgid "12AM"
+msgstr "00"
+
+msgid "12PM"
+msgstr "12"
+
+msgid "15 min"
+msgstr "15 min."
+
+msgid "18 h"
+msgstr "18 h"
+
+msgid "2 h"
+msgstr "2 h"
+
+msgid "2.4 + 5 GHz network name"
+msgstr "Nom du réseau 2,4 + 5 GHz"
+
+msgid "2.4 GHz"
+msgstr "2,4 GHz"
+
+msgid "2.4 GHz + 5 GHz"
+msgstr "2,4 GHz + 5 GHz"
+
+msgid "2.4 GHz Radio"
+msgstr "Bande de fréquence 2,4 GHz"
+
+msgid "2.4 GHz WiFi LED"
+msgstr "DEL WiFi 2,4 GHz"
+
+msgid "2.4 GHz network name"
+msgstr "Nom du réseau 2,4 GHz"
+
+msgid "2.4 GHz network name:"
+msgstr "Nom du réseau 2,4 GHz :"
+
+msgid "20 MHz"
+msgstr "20 MHz"
+
+msgid "20/40 MHz"
+msgstr "20/40 MHz"
+
+msgid "24 h"
+msgstr "24 h"
+
+msgid "3 h"
+msgstr "3 h"
+
+msgid "30 min"
+msgstr "30 min."
+
+msgid "36 h"
+msgstr "36 h"
+
+msgid "4 h"
+msgstr "4 h"
+
+msgid "40 MHz"
+msgstr "40 MHz"
+
+msgid "48 h"
+msgstr "48 h"
+
+msgid "5 GHz"
+msgstr "5 GHz"
+
+msgid "5 GHz Radio"
+msgstr "Bande de fréquence 5 GHz"
+
+msgid "5 GHz WiFi LED"
+msgstr "5 GHz DEL WiFi"
+
+msgid "5 GHz network name"
+msgstr "Nom du réseau 5 GHz"
+
+msgid "5 GHz network name:"
+msgstr "Nom du réseau 5 GHz :"
+
+msgid "5 h"
+msgstr "5 h"
+
+msgid "5 min"
+msgstr "5 min"
+
+msgid "6 h"
+msgstr "6 h"
+
+msgid "80 MHz"
+msgstr "80 MHz"
+
+msgid "802.11a/n/ac"
+msgstr "802.11 a/n/ac"
+
+msgid "802.11ac"
+msgstr "802.11 ac"
+
+msgid "802.11b/g/n"
+msgstr "802.11 b/g/n"
+
+msgid "802.11g/n"
+msgstr "802.11 g/n"
+
+msgid "802.11n"
+msgstr "802.11 n"
+
+msgid "802.11n/ac"
+msgstr "802.11 n/ac"
+
+msgid "A RADIUS password is required!"
+msgstr "Mot de passe RADIUS non indiqué !"
+
+msgid "A RADIUS username is required!"
+msgstr "Nom d'utilisateur RADIUS non indiqué !"
+
+msgid "A new firmware version is available."
+msgstr ""
+
+msgid ""
+"A passphrase (8-63 characters) or a pre-shared key (64 characters) is "
+"required"
+msgstr ""
+"Un code est requis : de 8 à 63 caractères (passphrase) ou 64 caractères "
+"(pre-shared key) !"
+
+msgid "A pre-shared key is required (8-64 characters)!"
+msgstr "Code requis (64 caractères, pre-shared key) !"
+
+msgid "AES"
+msgstr "AES"
+
+msgid "AVLN"
+msgstr "AVLN"
+
+msgid "Accounting Server"
+msgstr "Serveur de facturation"
+
+msgid "Accounting Server:"
+msgstr "Serveur de facturation :"
+
+msgid "Active"
+msgstr "Actif"
+
+msgid "Add Devices"
+msgstr "Ajouter des appareils"
+
+msgid "Add devices to the WiFi network using the soft push button."
+msgstr "Ajouter un appareil au réseau WiFi avec le bouton de commande WPS."
+
+msgid "Add devices to the WiFi network using your PIN."
+msgstr "A l'aide du code PIN, ajouter l'appareil au réseau WiFi"
+
+msgid "Add new SSID"
+msgstr "Ajouter un nouveau SSID"
+
+msgid "Add new Time Server"
+msgstr "Ajouter un nouveau serveur de temps"
+
+msgid "Add new VLAN"
+msgstr "Ajouter un nouveau VLAN"
+
+msgid "Add new server"
+msgstr "Ajouter un nouveau serveur"
+
+msgid "Address/Subnet:"
+msgstr "Adresse/sous-réseau :"
+
+msgid "Address:"
+msgstr "Adresse :"
+
+msgid "Advanced Settings"
+msgstr "Paramètres avancés"
+
+msgid "Airtime Fairness"
+msgstr "Airtime Fairness (égalité du temps d'émission)"
+
+msgid "All changes will have effect after system boot."
+msgstr ""
+
+msgid "Allow power saving mode"
+msgstr "Autoriser le mode économiseur d'énergie"
+
+msgid ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+msgstr ""
+"Permettez à l'appareil de passer en mode d'économie d'énergie lorsqu'une "
+"réduction du trafic sur ethernet est détectée. Avertissement: Le temps de "
+"latence peut souffrir si un trafic de données très lent est détecté."
+
+msgid "Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio."
+msgstr "Nombre de SSID autorisé : {allowedRadioVapNumber} pour radio{radioBand}."
+
+msgid ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+msgstr ""
+"Nombre de SSID autorisé : {num1}pour radio {radio1} et {num2} pour radio "
+"{radio2} "
+
+msgid "Always"
+msgstr "Toujours"
+
+msgid "An error has occurred. Please click the arrow to reload the page!"
+msgstr ""
+"Une erreur s'est produite.  Veuillez cliquer sur la flèche pour recharger "
+"la page !"
+
+msgid "An error occurred during device configuration:"
+msgstr "Une erreur est survenue lors de la configuration de l’appareil :"
+
+msgid "Answer of"
+msgstr "Réponse de"
+
+msgid "Authentication Server"
+msgstr "Serveur d'authentification"
+
+msgid "Authentication Server:"
+msgstr "Serveur d'authentification :"
+
+msgid "Authentication passphrase:"
+msgstr "Clé d'authentification :"
+
+msgid "Authentication type:"
+msgstr "Type d'authentification :"
+
+msgid "Auto"
+msgstr "Automatique"
+
+msgid "Auto *"
+msgstr "Automatique *"
+
+msgid "Automatic *"
+msgstr "Automatique *"
+
+msgid "Automatic Update:"
+msgstr "Mise à jour automatique du microprogramme :"
+
+msgid "Automatic shutoff"
+msgstr "Déconnexion automatique"
+
+msgid "Automatically search for updates:"
+msgstr "Rechercher automatiquement les mises à jour:"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Band Steering"
+msgstr "Orientation de bande"
+
+msgid "Basic"
+msgstr "Basique"
+
+msgid "Basic Settings"
+msgstr "Paramètres par défaut"
+
+msgid "Bridge"
+msgstr "Pont"
+
+msgid "Bridge to Remote Access Point (WDS)"
+msgstr "Pont vers le point d'accès (WDS) distant"
+
+msgid "Browse ..."
+msgstr "Choisir un fichier ..."
+
+msgid "Button Settings"
+msgstr "Paramètres pour le bouton de commande"
+
+msgid "Buttons"
+msgstr "Bouton de commande"
+
+msgid "Buzzer"
+msgstr "Vibrateur"
+
+msgid "Buzzer duration: {dur} s"
+msgstr "Durée du signal : {dur} s"
+
+msgid "CPU load:"
+msgstr "Utilisation CPU :"
+
+msgid "Cancel"
+msgstr "Annuler"
+
+msgid "Cancelled!"
+msgstr "Processus interrompu !"
+
+msgid "Cannot retrieve current network information."
+msgstr "Impossible de trouver des informations actuelles sur le réseau."
+
+msgid "Caps Lock is on!"
+msgstr "La touche de verrouillage est activée !"
+
+msgid "Central Coordinator"
+msgstr "Coordinateur central"
+
+msgid "Change Password"
+msgstr "Modifier le mot de passe d'accès"
+
+msgid "Change Password?"
+msgstr "Modifier le mot de passe ?"
+
+msgid "Change language"
+msgstr "Changer la langue"
+
+msgid "Channel"
+msgstr "Canal"
+
+msgid "Channel 2.4 GHz:"
+msgstr "Canal 2,4 GHz"
+
+msgid "Channel 5 GHz:"
+msgstr "Canal 5 GHz"
+
+msgid "Channel bandwidth:"
+msgstr "Largeur de canal :"
+
+msgid "Channel:"
+msgstr "Canal :"
+
+msgid "Checking firmware image ..."
+msgstr "Contrôle du fichier de microprogramme en cours..."
+
+msgid "Checking session ID ..."
+msgstr "Contrôle de l'ID session en cours..."
+
+msgid "Choose between different LED notification levels."
+msgstr "Choisissez le comportement des DEL."
+
+msgid "Choose the CCo setting of your device in P2P mode."
+msgstr "Choisissez le paramètre CCo de votre appareil pour le mode P2P."
+
+msgid ""
+"Choose the compatibility mode of your device. This setting can help "
+"increase performance with technologies such as VDSL."
+msgstr ""
+"Sélectionnez le mode compatibilité. C'est un mode spécial qui permet "
+"d'éliminer certains problèmes de connexion rares dus à des interférences "
+"avec d'autres techniques, par exemple VDSL. "
+
+msgid "Choose the network mode of your device."
+msgstr "Choisissez le mode réseau de votre appareil."
+
+msgid "Click here to update."
+msgstr "Veuillez cliquer ici pour une mise á jour."
+
+msgid "Click to edit"
+msgstr "Cliquez ici pour éditer l'entrée"
+
+msgid "Clicking the button below will restart your device."
+msgstr "L'appareil est redémarré en cliquant sur \"Redémarrer\""
+
+msgid "Clone SSID"
+msgstr "Clonage SSID"
+
+msgid "Clone SSID via WPS"
+msgstr "Clonage SSID via WPS"
+
+msgid "Compatibility Mode"
+msgstr "Mode de compatibilité"
+
+msgid "Compatibility Mode:"
+msgstr "Mode de compatibilité :"
+
+msgid "Compatibility mode"
+msgstr "Mode de compatibilité"
+
+msgid "Config Sync"
+msgstr "Config Sync"
+
+msgid "Configuration"
+msgstr "Configuration"
+
+msgid "Configuration file too large (maximum {maxSize} bytes)!"
+msgstr "Le fichier de configuration est trop gros ({maxSize} octets au maximum) !"
+
+msgid "Configuration of time quotas"
+msgstr "Configuration"
+
+msgid "Configuration successfully restored!"
+msgstr "Restauration de la configuration réussie !"
+
+msgid "Configured VLANs:"
+msgstr "VLAN configurés :"
+
+msgid "Confirm"
+msgstr "Confirmez"
+
+msgid "Confirm new password:"
+msgstr "Confirmer le nouveau mot de passe :"
+
+msgid "Connected AVLNs:"
+msgstr "Réseaux logiques AV (AVLN) connectés :"
+
+msgid "Connected WiFi Clients"
+msgstr "Appareils WiFi connectés"
+
+msgid "Connected WiFi clients:"
+msgstr "Appareils WiFi connectés :"
+
+msgid "Connected clients"
+msgstr "Appareils connectés"
+
+msgid "Connected devices:"
+msgstr "Appareils connectés :"
+
+msgid "Connected powerline devices"
+msgstr "Appareils Powerline connectés"
+
+msgid "Connected since"
+msgstr "Connecté depuis"
+
+msgid "Connection"
+msgstr "Connexion"
+
+msgid "Connection lost!"
+msgstr "Connexion interrompue !"
+
+msgid "Connection status:"
+msgstr "État de la connexion :"
+
+msgid "Contact:"
+msgstr "Contact :"
+
+msgid "Current Firmware"
+msgstr "Microprogramme à jour"
+
+msgid "Current channel"
+msgstr "Canal actuel"
+
+msgid "Current channel:"
+msgstr "Canal actuel :"
+
+msgid "DES"
+msgstr "DES"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DHCP Server"
+msgstr "Serveur DHCP"
+
+msgid "Data rates:"
+msgstr "Taux de transmission :"
+
+msgid "Date"
+msgstr "Date"
+
+msgid "Date and Time"
+msgstr "Date et heure"
+
+msgid "Days"
+msgstr "Jours"
+
+msgid "Default"
+msgstr "Standard"
+
+msgid "Default VLAN"
+msgstr "VLAN standard"
+
+msgid "Default gateway:"
+msgstr "Passerelle standard :"
+
+msgid "Default mode *"
+msgstr "Paramétrage par défaut *"
+
+msgid "Delete"
+msgstr "Supprimer"
+
+msgid "Delete SSID?"
+msgstr "Supprimer SSID ?"
+
+msgid "Device ID"
+msgstr "ID appareil"
+
+msgid "Device MAC"
+msgstr "Adresse MAC de l'appareil"
+
+msgid "Device Name"
+msgstr "Nom de l'appareil"
+
+msgid "Device rebooted.  Please login again!"
+msgstr "L'appareil a été redémarré. Veuillez vous reconnecter !"
+
+msgid "Disable Radio?"
+msgstr "Radio éteinte ?"
+
+msgid "Disable guest network {duration}"
+msgstr "Désactiver le réseau invité {duration}"
+
+msgid "Disabled"
+msgstr "Désactivé"
+
+msgid ""
+"Disabling the reset button also forbids resetting the configuration to "
+"factory defaults."
+msgstr ""
+"Si le bouton de réinitialisation est désactivé, il n'est plus possible de "
+"redémarrer l'appareil ou de rétablir les valeurs usine par défaut."
+
+msgid ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+msgstr ""
+"Voulez-vous vraiment changer le mot de passe PLC ? La connexion avec cet "
+"appareil risque d'être perdue."
+
+msgid ""
+"Do you really want to enable the WiFi Schedule without adding time quotas? "
+"The Wifi will be turned off permanently."
+msgstr ""
+"Si vous ne configurez aucune règle, le WiFi est inutilisable en permanence "
+"jusqu'à ce que vous ajoutiez une règle ou désactiviez le planificateur."
+
+msgid "Do you really want to remove this SSID?"
+msgstr "Voulez-vous vraiment supprimer le SSID ?"
+
+msgid ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+msgstr ""
+"Voulez-vous vraiment rétablir les valeurs usine par défaut de l'appareil ? "
+"L'appareil redémarre ensuite."
+
+msgid "Do you really want to restart the device?"
+msgstr "Voulez-vous vraiment redémarrer l'appareil ?"
+
+msgid "Domain Master"
+msgstr "Maître du domaine"
+
+msgid "Download Firmware Version for Update"
+msgstr "Télécharger le microprogramme à jour"
+
+msgid "Download Firmware:"
+msgstr "Télécharger le microprogramme :"
+
+msgid "Dynamic VLAN"
+msgstr "VLAN dynamique"
+
+msgid "Enable"
+msgstr "Activer"
+
+msgid "Enable or completely disable the LEDs of your device."
+msgstr "Activer les DEL de cet appareil ou désactiver complètement"
+
+msgid "Enable or disable the buttons of your devices."
+msgstr "Activez ou désactivez la fonction des boutons de commande sur l'appareil."
+
+msgid "Enabled"
+msgstr "Activé"
+
+msgid "Enabled ({url})"
+msgstr "Activé ({url})"
+
+msgid "Enabled SSIDs"
+msgstr "SSID activés"
+
+msgid "Enabled SSIDs:"
+msgstr "SSID activés :"
+
+msgid ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+msgstr ""
+"Mesh functionality optimise votre réseau WiFi et le rend mieux utilisable "
+"pour les appareils WiFi mobiles. Le roaming élimine le problème avec des "
+"appareils WiFi fixes. Band Steering et Dynamic Frequency Selection "
+"permettent un accès WiFi sans problème pour de nombreux appareils WiFi. "
+"Airtime Fairness optimise la largeur de bande dans les réseaux avec de "
+"nombreux appareils WiFi."
+
+msgid "Encryption:"
+msgstr "Cryptage :"
+
+msgid "End IP Address:"
+msgstr "Adresse IP de fin :"
+
+msgid "End Point"
+msgstr "Appareil"
+
+msgid "End address equals start address!"
+msgstr "L'adresse de fin est identique à l'adresse de début !"
+
+msgid "End address must be larger than start address!"
+msgstr "L'adresse de fin doit être supérieure à l'adresse de début !"
+
+msgid "End node"
+msgstr "End node"
+
+msgid "Enter WPS PIN"
+msgstr "Entrer le code WPS"
+
+msgid "Enter an alphanumeric community name (max 24 characters)"
+msgstr "Entrez un nom de communauté alphanumérique (24 caractères max.)."
+
+msgid "Enter an alphanumeric username (max 24 characters)"
+msgstr "Entrez un nom d'utilisateur alphanumérique (24 caractères max.)."
+
+msgid "Enter between 1 and 64 of these characters:"
+msgstr "Entrez entre 1 et 64 de ces caractères :"
+
+msgid "Enter between 8 and 130 of these characters:"
+msgstr "Entrez entre 8 et 130 de ces caractères :"
+
+msgid "Enter between 8 and 64 of these characters:"
+msgstr "Entrez entre 8 et 64 de ces caractères :"
+
+msgid "Enter new password:"
+msgstr "Entrer un nouveau mot de passe :"
+
+msgid "Enter old password:"
+msgstr "Entrer l'ancien mot de passe :"
+
+msgid "Enter the PIN of the device to be added to your WiFi network."
+msgstr ""
+"Veuillez entrer le code PIN de l'appareil qui doit être ajouté au réseau "
+"WiFi."
+
+msgid ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+msgstr ""
+"Veuillez entrer le mot de passe PLC que doit utiliser l'appareil pour "
+"l'accès à votre réseau Powerline. Tous les appareils dans un réseau "
+"Powerline doivent utiliser le même mot de passe PLC."
+
+msgid "Error code:"
+msgstr "Code d'erreur :"
+
+msgid "Error occured! Please try again!"
+msgstr "Une erreur s'est produite ! Veuillez essayer une nouvelle fois !"
+
+msgid "Error while processing WPS!  ->  ("
+msgstr "Une erreur s'est produite pendant la procédure WPS ! -&gt; ("
+
+msgid "Ethernet"
+msgstr "Ethernet"
+
+msgid "Europe/Aachen"
+msgstr "Europe/Aix-la-Chapelle"
+
+msgid "Europe/Amsterdam"
+msgstr "Europe/Amsterdam"
+
+msgid "Europe/Andorra"
+msgstr "Europe/Andorre"
+
+msgid "Europe/Athens"
+msgstr "Europe/Athènes"
+
+msgid "Europe/Belgrade"
+msgstr "Europe/Belgrade"
+
+msgid "Europe/Berlin"
+msgstr "Europe/Berlin"
+
+msgid "Europe/Bratislava"
+msgstr "Europe/Bratislava"
+
+msgid "Europe/Brussels"
+msgstr "Europe/Bruxelles"
+
+msgid "Europe/Bucharest"
+msgstr "Europe/Bucarest"
+
+msgid "Europe/Budapest"
+msgstr "Europe/Budapest"
+
+msgid "Europe/Busingen"
+msgstr "Europe/Busingen"
+
+msgid "Europe/Chisinau"
+msgstr "Europe/Chisinau"
+
+msgid "Europe/Copenhagen"
+msgstr "Europe/Copenhague"
+
+msgid "Europe/Dublin"
+msgstr "Europe/Dublin"
+
+msgid "Europe/Gibraltar"
+msgstr "Europe/Gibraltar"
+
+msgid "Europe/Guernsey"
+msgstr "Europe/Guernesey"
+
+msgid "Europe/Helsinki"
+msgstr "Europe/Helsinki"
+
+msgid "Europe/Isle of Man"
+msgstr "Europe/Île de Man"
+
+msgid "Europe/Istanbul"
+msgstr "Europe/Istanbul"
+
+msgid "Europe/Jersey"
+msgstr "Europe/Jersey"
+
+msgid "Europe/Kaliningrad"
+msgstr "Europe/Kaliningrad"
+
+msgid "Europe/Kiev"
+msgstr "Europe/Kiev"
+
+msgid "Europe/Lisbon"
+msgstr "Europe/Lisbonne"
+
+msgid "Europe/Ljubljana"
+msgstr "Europe/Ljubljana"
+
+msgid "Europe/London"
+msgstr "Europe/Londres"
+
+msgid "Europe/Luxembourg"
+msgstr "Europe/Luxembourg"
+
+msgid "Europe/Madrid"
+msgstr "Europe/Madrid"
+
+msgid "Europe/Malta"
+msgstr "Europe/Malta"
+
+msgid "Europe/Mariehamn"
+msgstr "Europe/Mariehamn"
+
+msgid "Europe/Minsk"
+msgstr "Europe/Minsk"
+
+msgid "Europe/Monaco"
+msgstr "Europe/Monaco"
+
+msgid "Europe/Moscow"
+msgstr "Europe/Moscou"
+
+msgid "Europe/Oslo"
+msgstr "Europe/Oslo"
+
+msgid "Europe/Paris"
+msgstr "Europe/Paris"
+
+msgid "Europe/Podgorica"
+msgstr "Europe/Podgorica"
+
+msgid "Europe/Prague"
+msgstr "Europe/Prague"
+
+msgid "Europe/Riga"
+msgstr "Europe/Riga"
+
+msgid "Europe/Rome"
+msgstr "Europe/Rome"
+
+msgid "Europe/Samara"
+msgstr "Europe/Samara"
+
+msgid "Europe/San Marino"
+msgstr "Europe/Saint Marin"
+
+msgid "Europe/Sarajevo"
+msgstr "Europe/Sarajevo"
+
+msgid "Europe/Simferopol"
+msgstr "Europe/Simferopol"
+
+msgid "Europe/Skopje"
+msgstr "Europe/Skopje"
+
+msgid "Europe/Sofia"
+msgstr "Europe/Sofia"
+
+msgid "Europe/Stockholm"
+msgstr "Europe/Stockholm"
+
+msgid "Europe/Tallinn"
+msgstr "Europe/Tallinn"
+
+msgid "Europe/Tirane"
+msgstr "Europe/Tirana"
+
+msgid "Europe/Uzhgorod"
+msgstr "Europe/Oujhorod"
+
+msgid "Europe/Vaduz"
+msgstr "Europe/Vaduz"
+
+msgid "Europe/Vatican"
+msgstr "Europe/Vatican"
+
+msgid "Europe/Vienna"
+msgstr "Europe/Vienne"
+
+msgid "Europe/Vilnius"
+msgstr "Europe/Vilnius"
+
+msgid "Europe/Volgograd"
+msgstr "Europe/Volgograd"
+
+msgid "Europe/Warsaw"
+msgstr "Europe/Varsovie"
+
+msgid "Europe/Zagreb"
+msgstr "Europe/Zagreb"
+
+msgid "Europe/Zaporozhye"
+msgstr "Europe/Zaporijia"
+
+msgid "Europe/Zurich"
+msgstr "Europe/Zurich"
+
+msgid "Fast transition (802.11r)"
+msgstr "Transition rapide FT (802.11r)"
+
+msgid "Features"
+msgstr "Fonctions"
+
+msgid "Find Me"
+msgstr "Trouvez-moi !"
+
+msgid "Firmware"
+msgstr "Microprogramme"
+
+msgid "Firmware file:"
+msgstr "Fichier de microprogramme :"
+
+msgid "Firmware image too large (maximum {maxSize} bytes)!"
+msgstr "Le fichier de microprogramme est trop gros ({maxSize} octets maximum) !"
+
+msgid "Firmware updated successfully."
+msgstr "L'actualisation du microprogramme a réussi."
+
+msgid "Firmware version:"
+msgstr "Version du microprogramme :"
+
+msgid "Force Node Type"
+msgstr "Imposer le type de nœud"
+
+msgid "Free memory:"
+msgstr "Mémoire vive libre :"
+
+msgid "Frequency band"
+msgstr "Bande de fréquence"
+
+msgid "Frequency band:"
+msgstr "Bande de fréquence :"
+
+msgid "Fri"
+msgstr "Ven"
+
+msgid "Friday"
+msgstr "Vendredi"
+
+msgid "From"
+msgstr "de"
+
+msgid "Get IP configuration from a DHCP server"
+msgstr "Obtenir la configuration réseau d'un serveur DHCP"
+
+msgid "Guest network"
+msgstr "Réseau invités"
+
+msgid "Guest network configuration"
+msgstr "Configuration "
+
+msgid "HH"
+msgstr "HH"
+
+msgid "Here"
+msgstr "Ici"
+
+msgid ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking Start configuration."
+msgstr ""
+"Vous pouvez ajouter ici un nouvel appareil Powerline à votre réseau. Entrez "
+"d'abord le code de sécurité imprimé au dos, branchez ensuite l'appareil "
+"dans une prise de courant et confirmez par un clic sur \"Démarrer la "
+"configuration\""
+
+msgid ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+msgstr ""
+"Vous affectez ici un mot de passe PLC individuel à votre réseau (à la place "
+"du mot de passe PLC généré automatiquement)."
+
+msgid ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+msgstr ""
+"Vous pouvez définir ici les intervalles de temps où votre WiFi doit être "
+"activé."
+
+msgid "Hide SSID:"
+msgstr "Masquer le SSID"
+
+msgid "Hide password"
+msgstr "Cacher le mot de passe"
+
+msgid "High ({power} dBm)"
+msgstr "Haut ({power} dBm)"
+
+msgid ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+msgstr ""
+"IEEE 802.11r (aussi appelé \"Fast Roaming\") accélère la connexion d'un "
+"appareil WiFi à ce point d'accès WiFi. Condition préalable: L'appareil "
+"était déjà connecté à un autre point d'accès WiFi avec la fonction 802.11r "
+"activée, nom de réseau identique (SSID) et cryptage identique. 802.11r "
+"n'est malheureusement pas compatible avec tous les appareils WiFi. Si vous "
+"rencontrez des problèmes avec l'un de vos appareils, veuillez désactiver "
+"cette option."
+
+msgid "IP Configuration"
+msgstr "Configuration IP"
+
+msgid "IP address is inside the loopback network!"
+msgstr "L'adresse IP se trouve dans la plage d'adresses Loopback !"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv4 address"
+msgstr "Adresse IPv4"
+
+msgid "IPv4 address of DNS server"
+msgstr "Adresse IPv4 du serveur DNS"
+
+msgid "IPv4 address of default gateway"
+msgstr "Adresse IPv4 de la passerelle standard"
+
+msgid "IPv4 configuration successfully updated."
+msgstr "La mise à jour de la configuration IPv4 a réussi."
+
+msgid "IPv4 netmask"
+msgstr "Masque de sous-réseau IPv4"
+
+msgid "IPv4/IPv6"
+msgstr "IPv4/IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "IPv6 Address"
+msgstr "Adresse IPv6"
+
+msgid ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be resetted to factory defaults."
+msgstr ""
+"Si vous poursuivez, tous les paramètres de l'appareil seront effacés et les "
+"valeurs par défaut rétablies."
+
+msgid "Incorrect password!"
+msgstr "Mot de passe incorrect"
+
+msgid "Individual ({power} dBm)"
+msgstr "Individuel ({power} dBm)"
+
+msgid "Individual transmit power:"
+msgstr "Puissance d'émission individuelle :"
+
+msgid "Indoor use only:"
+msgstr "Utilisation intérieure uniquement :"
+
+msgid "Information"
+msgstr "Informations"
+
+msgid "Interfaces"
+msgstr "Interfaces réseau"
+
+msgid "Interval"
+msgstr "Plage"
+
+msgid "Invalid IP address!"
+msgstr "Adresse IP incorrecte"
+
+msgid ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Code incorrect ! Entrez au moins 8 caractères et au maximum 63 caractères. "
+"Caractères spéciaux autorisés : ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` "
+"~ + = . _ / ? \\ < >"
+
+msgid "Invalid Mac address!"
+msgstr "Adresse MAC invalide"
+
+msgid "Invalid SSID!  Please enter between 1 and 32 characters)."
+msgstr ""
+"SSID incorrect ! Entrez au moins 1 caractère et au maximum 32 caractères. "
+"Caractères spéciaux autorisés : ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` "
+"~ + = . _ / ? \\ < >"
+
+msgid ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr "SSID incorrect ! Entrez au moins 1 caractère et au maximum 32 caractères."
+
+msgid "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+msgstr "ID VLAN incorrect ! Veuillez entrer une valeur comprise entre 1 et 4094 !"
+
+msgid "Invalid hostname or IP address!"
+msgstr "Nom d'hôte incorrect ou adresse IP incorrecte"
+
+msgid "Invalid hostname or IP/Subnet!"
+msgstr "Nom d'hôte incorrect ou masque IP/réseau incorrect"
+
+msgid ""
+"Invalid hostname! Allowed are the digits 0-9, upper- and lowercase letters "
+"a-z, A-Z and the hyphen. The hostname cannot start or end with a hyphen."
+msgstr ""
+"Nom d'hôte incorrect ! Les caractères autorisés sont 0-9, a-z, A-Z et le "
+"trait d'union „-&ldquo;. Le nom d'hôte ne doit ni commencer ni se terminer "
+"par un trait d'union."
+
+msgid "Invalid name!"
+msgstr "Nom incorrect !"
+
+msgid "Invalid netmask!"
+msgstr "Masque de sous-réseau incorrect"
+
+msgid "Invalid port! Please enter a value between 1 and 65535."
+msgstr "Port incorrect ! Veuillez entrer une valeur comprise entre 1 et 65535 !"
+
+msgid ""
+"Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed "
+"characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+msgstr ""
+"Code incorrect (pre-shared key) ! Entrez 64 caractères. Caractères "
+"autorisés : 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 123."
+msgstr "Plage incorrecte pour 2,4 GHz, veuillez entrer une valeur entre 0 et 123. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Plage incorrecte pour 2,4 GHz, veuillez entrer une valeur entre 0 et 123. "
+"Plage incorrecte pour 5 GHz, veuillez entrer une valeur entre 0 et 200. "
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 127."
+msgstr "Plage incorrecte pour 2,4 GHz, veuillez entrer une valeur entre 0 et 127. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Plage incorrecte pour 2,4 GHz, veuillez entrer une valeur entre 0 et 127. "
+"Plage incorrecte pour 5 GHz, veuillez entrer une valeur entre 0 et 200. "
+
+msgid "Invalid range for 5 GHz, please enter a value between 0 and 200."
+msgstr "Plage incorrecte pour 5 GHz, veuillez entrer une valeur entre 0 et 200. "
+
+msgid "Key:"
+msgstr "Code :"
+
+msgid "LAN"
+msgstr "LAN"
+
+msgid "LED Settings"
+msgstr "Paramètres des DEL"
+
+msgid "LEDs"
+msgstr "DEL"
+
+msgid "Lease Time:"
+msgstr "Durée du bail :"
+
+msgid "Leasetime"
+msgstr "Durée du bail"
+
+msgid "Licenses"
+msgstr "Licences"
+
+msgid "Loading ..."
+msgstr "Chargement en cours..."
+
+msgid "Local Device"
+msgstr "Périphérique local"
+
+msgid "Local time:"
+msgstr "Date actuelle et heure :"
+
+msgid "Location:"
+msgstr "Emplacement :"
+
+msgid "Log Level"
+msgstr "Niveau"
+
+msgid "Login"
+msgstr "Connecter"
+
+msgid "Logout"
+msgstr "Déconnecter"
+
+msgid "Logs"
+msgstr "Événements"
+
+msgid "Low ({power} dBm)"
+msgstr "Faible ({power} dBm)"
+
+msgid "MAC Address"
+msgstr "Adresse MAC"
+
+msgid "MAC Addresses"
+msgstr "Adresses MAC"
+
+msgid "MAC address"
+msgstr "Adresse MAC"
+
+msgid "MBytes"
+msgstr "Moctets"
+
+msgid "MD5"
+msgstr "MD5"
+
+msgid "MHz"
+msgstr "MHz"
+
+msgid "MM"
+msgstr "mm"
+
+msgid "Management"
+msgstr "Gestion"
+
+msgid "Management VLAN"
+msgstr "VLAN Gestion"
+
+msgid "Management VLAN:"
+msgstr "VLAN Gestion :"
+
+msgid "Manual"
+msgstr "Manuel"
+
+msgid "Manufacturer"
+msgstr "Fabricant"
+
+msgid "Mask:"
+msgstr "Préfixe :"
+
+msgid "Max. clients:"
+msgstr "Nombre max. d'appareils :"
+
+msgid "Max. transmit power:"
+msgstr "Puissance d'émission maximale :"
+
+msgid "Mbit/s"
+msgstr "Mbits/s"
+
+msgid "Medium ({power} dBm)"
+msgstr "Moyen ({power} dBm)"
+
+msgid "Members"
+msgstr "Membres"
+
+msgid "Mesh WiFi"
+msgstr "WiFi Mesh"
+
+msgid "Message"
+msgstr "Message"
+
+msgid "Minimum lease time is two minutes!"
+msgstr "La durée minimale du bail est de deux minutes !"
+
+msgid "Mode:"
+msgstr "Mode :"
+
+msgid "Mon"
+msgstr "Lun"
+
+msgid "Mon-Fri"
+msgstr "Lun-Ven"
+
+msgid "Monday"
+msgstr "Lundi"
+
+msgid "N/A"
+msgstr "N/A"
+
+msgid "NTP configuration successfully saved."
+msgstr "La configuration du serveur de temps a été enregistrée avec succès."
+
+msgid "Name server:"
+msgstr "Serveur DNS :"
+
+msgid "Name:"
+msgstr "Nom :"
+
+msgid ""
+"Navigating away from this page will discard all your changes. Really "
+"proceed?"
+msgstr ""
+"Si vous quittez cette page, vos modifications seront perdues. Voulez-vous "
+"continuer quand même ?"
+
+msgid "Neighbour network"
+msgstr "Réseaux voisins"
+
+msgid "Network"
+msgstr "Réseau"
+
+msgid "Network Mode:"
+msgstr "Mode de réseau :"
+
+msgid "Network interface"
+msgstr "Adaptateur réseau"
+
+msgid "Network name"
+msgstr "Nom du réseau"
+
+msgid "Network name 2.4 + 5 GHz"
+msgstr "Nom du réseau 2,4 + 5 GHz"
+
+msgid "Network name:"
+msgstr "Nom du réseau :"
+
+msgid "Never"
+msgstr "Jamais"
+
+msgid ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+msgstr ""
+"Un nouvel appareil Powerline a été détecté. Veuillez attendre la fin de "
+"l'opération, cela peut prendre jusqu'à 20 s."
+
+msgid "No Log Information"
+msgstr "Aucun événement présent."
+
+msgid ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"companions security ID."
+msgstr ""
+"Aucun autre appareil Powerline n'a été détecté. Veuillez vérifier que le "
+"numéro de sécurité a été correctement entré."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button.\n"
+"              Please wait until the process has been finished."
+msgstr ""
+"Aucun appareil Powerline n'a été détecté. Veuillez vérifier que les buttons "
+"PLC sont été correctement appyués.\n"
+"Veuillez attendre que l'opération soit terminée.\n"
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button. Please wait until the process has been finished."
+msgstr ""
+"Aucun appareil Powerline n'a été détecté. Veuillez appuyer sur le bouton "
+"PLC et attendre que l'opération soit terminée."
+
+msgid "No RADIUS server configured"
+msgstr "Aucun serveur RADIUS configuré !"
+
+msgid "No VLAN"
+msgstr "Aucun VLAN"
+
+msgid "No WiFi radio enabled. Please enable a radio."
+msgstr ""
+"Tous les points d'accès WiFi sont désactivés. Activez au moins un point "
+"d'accès WiFi."
+
+msgid "No clients are connected"
+msgstr "Aucun appareil connecté."
+
+msgid "No encryption (not recommended)"
+msgstr "Pas de cryptage n'est pas un paramètre recommandé."
+
+msgid "No file selected."
+msgstr "Aucun fichier sélectionné."
+
+msgid "Not a valid input such as \"1d 12h 30m\"!"
+msgstr "N'est pas une donnée valide comme par exemple \"1d 12h 30m\" !"
+
+msgid "Not configured"
+msgstr "Non configuré."
+
+msgid "Not connected"
+msgstr "Déconnecté"
+
+msgid "Now press the WPS button on the device being added to your WiFi network."
+msgstr ""
+"Appuyez maintenant sur le bouton WiFi de l'appareil que vous désirez "
+"ajouter à votre réseau WiFi."
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Off"
+msgstr "Inactif"
+
+msgid "Old password was incorrect!"
+msgstr "Le mot de passe actuel est incorrect !"
+
+msgid "Only for development"
+msgstr "Seulement à des fins de développement"
+
+msgid "Open"
+msgstr "Ouvert"
+
+msgid "Open (OWE)"
+msgstr "Open (OWE)"
+
+msgid "Operate as DHCP server"
+msgstr "Exploiter en tant que serveur DHCP"
+
+msgid "Origin"
+msgstr "Source"
+
+msgid "Outside of the address range!"
+msgstr "En dehors de la plage d'adresses !"
+
+msgid "Overview"
+msgstr "Vue d'ensemble"
+
+msgid "Overview of the wifi schedule settings"
+msgstr "Vue d'ensemble"
+
+msgid "PAIR"
+msgstr "Établir la connexion PLC"
+
+msgid "PLC Connections"
+msgstr "Connexions PLC"
+
+msgid "PLC Name"
+msgstr "Nom PLC"
+
+msgid "PLC domain name"
+msgstr "Nom domain PLC"
+
+msgid "PLC firmware version:"
+msgstr "Version du microprogramme CPL:"
+
+msgid "PLC password"
+msgstr "Mot de passe PLC"
+
+msgid "PLC role"
+msgstr "Rôle PLC"
+
+msgid "Pairing"
+msgstr "Appariement – établir la connexion PLC"
+
+msgid "Parental Control"
+msgstr "Contrôle parental"
+
+msgid "Password"
+msgstr "Mot de passe"
+
+msgid "Password:"
+msgstr "Mot de passe :"
+
+msgid "Passwords do not match!"
+msgstr "Les mots de passe ne sont pas identiques !"
+
+msgid "Peer isolation"
+msgstr "Interdire la communication entre les appareils WiFi"
+
+msgid "Please activate the WiFi network to enable Clone SSID via WPS"
+msgstr "Veuillez activer le réseau WiFi pour démarrer le mode WiFi Clone."
+
+msgid "Please click the + button to add a SSID."
+msgstr "Veuillez cliquer sur le bouton + pour ajouter un nouveau SSID."
+
+msgid "Please click the + button to add a VLAN"
+msgstr "Veuillez cliquer sur le bouton + pour ajouter un nouveau VLAN"
+
+msgid "Please click the + button to add a new schedule."
+msgstr "Veuillez cliquer sur le bouton + pour ajouter une nouvelle règle."
+
+msgid "Please click the + button to add a time server"
+msgstr "Veuillez cliquer sur le bouton + pour ajouter un nouveau serveur de temps."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+msgstr ""
+"Veuillez configurer {here} un canal WiFi statique. Notez que les autres "
+"points d'accès sont configurés de manière correspondante dans votre réseau."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+msgstr ""
+"Veuillez configurer {here} un canal WiFi statique. Notez que les autres "
+"points d'accès sont configurés de manière correspondante dans votre réseau. "
+"Recommandation : sélectionnez un canal entre 36 et 48 afin d'éviter les "
+"modifications de canal en raison de DFS."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+msgstr ""
+"Veuillez configurer {here} un canal WiFi statique. Notez que d'autres "
+"points d'accès dans le pont doivent avoir réglé le même canal WiFi. "
+"Recommandation : canal 100."
+
+msgid ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+msgstr ""
+"Definissez le nom du réseau et confirmez vos paramètres en cliquant sur le "
+"symbole de disquette."
+
+msgid "Please enter a password to secure the access to your device."
+msgstr ""
+"Veuillez entrer un mot de passe pour limiter l'accès à la configuration de "
+"l'appareil."
+
+msgid ""
+"Please enter a value of at least 15 minutes or 0 to disable the "
+"functionality!"
+msgstr ""
+"Veuillez entrer un laps de temps supérieur à 15 minutes. Entrez 0 pour "
+"désactiver la fonction."
+
+msgid "Please log in with your password!"
+msgstr "Veuillez vous connecter avec votre mot de passe !"
+
+msgid "Please login again."
+msgstr "Veuillez vous reconnecter :"
+
+msgid "Please note that WiFi schedule Settings have precedence over these settings!"
+msgstr ""
+"Veuillez noter que les paramètres du contrôle du temps ont priorité sur ces "
+"paramètres!"
+
+msgid ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+msgstr ""
+"Veuillez noter que de nombreux smartphones/tablettes maintiennent en "
+"permanence leur connexion WiFi !"
+
+msgid ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, exit Config Sync on the device, that you want to configure "
+"or switch separately."
+msgstr ""
+"Veuillez noter que le WiFi est toujours activé et désactivé dans l'ensemble "
+"du réseau.  Terminez donc d'abord Config Sync sur l'appareil, que vous "
+"voulez configurer ou activer séparément."
+
+msgid "Please select the configuration file to be restored to this device."
+msgstr "Sélectionnez le fichier de configuration que vous voulez restaurer."
+
+msgid "Please select the firmware file to be loaded onto this device."
+msgstr ""
+"Sélectionner le fichier de microprogramme qui doit être charge sur "
+"l'appareil."
+
+msgid "Port"
+msgstr "Connexion"
+
+msgid "Port number"
+msgstr "Numéro de port"
+
+msgid "Port:"
+msgstr "Port :"
+
+msgid "Power Management"
+msgstr "Gestion de l'énergie"
+
+msgid "Powerline"
+msgstr "Powerline"
+
+msgid "Powerline LED"
+msgstr "DEL Powerline"
+
+msgid "Powerline Network Mode"
+msgstr "Mode réseau Powerline"
+
+msgid "Powerline Password"
+msgstr "Mot de passe PLC"
+
+msgid "Powerline Settings"
+msgstr "Paramètres de veille Powerline"
+
+msgid "Powerline button"
+msgstr "Bouton PLC"
+
+msgid "Powerline encryption already in progress by external or previous request."
+msgstr "Le réseau Powerline est encore en cours de constitution."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+msgstr ""
+"Le réseau Powerline est encore en cours de constitution. Veuillez attendre "
+"que l'opération soit terminée. Encore 120 secondes."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+msgstr ""
+"Le réseau Powerline est encore en cours de constitution. Veuillez attendre "
+"que l'opération soit terminée. Encore {time} secondes."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished.\n"
+"              This can take up to 1 minute."
+msgstr ""
+"L'intégration dans un réseau Powerline à l'aide du code de sécurité a été "
+"démarrée. Veuillez attendre la fin de l'opération, cela peut prendre "
+"jusqu'à 60 s. "
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished. This can take up to 1 minute."
+msgstr ""
+"L'intégration dans un réseau Powerline pro à l'aide du code de sécurité a "
+"été démarrée. Veuillez attendre la fin de l'opération, cela peut prendre "
+"jusqu'à 60 s."
+
+msgid "Powerline encryption was stopped by external event."
+msgstr "La constitution du réseau Powerline a été arrêtée."
+
+msgid "Powerline encryption was successfully stopped."
+msgstr "Le réseau Powerline a été créé avec succès."
+
+msgid ""
+"Powerline standby is enabled! Disabling all radios will interrupt the "
+"connection to this website if the device can only be reached via Powerline "
+"and it enters standby mode. Do you really want to disable this radio?"
+msgstr ""
+"Le mode veille Powerline est activé ! La désactivation de toutes les bandes "
+"de fréquence interrompt la connexion avec ce site Web au cas où cet "
+"appareil est relié via Powerline avec le réseau et passe au mode veille. "
+"Voulez-vous vraiment désactiver cette bande de fréquence ?"
+
+msgid "Powersave mode"
+msgstr "Mode d'économie d'énergie"
+
+msgid "Preferred:"
+msgstr "Privilégié :"
+
+msgid "Profile"
+msgstr "Profil"
+
+msgid "Programming firmware image..."
+msgstr "Écrire le fichier de microprogramme..."
+
+msgid "Protocol:"
+msgstr "Protocole :"
+
+msgid "Public community (read only):"
+msgstr "Communauté publique (lecture) :"
+
+msgid "Public source:"
+msgstr "Source publique :"
+
+msgid "Quota"
+msgstr "Contingent de temps"
+
+msgid "Quota has been depleted"
+msgstr "Le contingent de temps s'est épuisé."
+
+msgid "Quota is currently depleting"
+msgstr "Le contingent de temps s'épuise."
+
+msgid "RADIUS"
+msgstr "RADIUS"
+
+msgid "RADIUS configuration applied successfully"
+msgstr "La configuration RADIUS a été enregistrée avec succès."
+
+msgid "RADIUS configuration is incomplete"
+msgstr "La configuration RADIUS est incomplète !"
+
+msgid "RADIUS password:"
+msgstr "Mot de passe RADIUS :"
+
+msgid "RADIUS username:"
+msgstr "Nom d'utilisateur RADIUS :"
+
+msgid "Radio"
+msgstr "Radio"
+
+msgid "Radio channel:"
+msgstr "Canal WiFi :"
+
+msgid "Radio:"
+msgstr "Radio :"
+
+msgid "Radios"
+msgstr "Radios"
+
+msgid "Rate (Mbit/s)"
+msgstr "Taux (Mbits/s)"
+
+msgid "Reboot"
+msgstr "Redémarrer"
+
+msgid "Reboot Device"
+msgstr "Redémarrer l'appareil"
+
+msgid "Reboot device?"
+msgstr "Redémarrer l'appareil ?"
+
+msgid "Receive (Mbps)"
+msgstr "Réception (Mbits/s)"
+
+msgid "Recommended: 20 MHz"
+msgstr "Valeur recommandée : 20 MHz"
+
+msgid "Recommended: 802.11g/n"
+msgstr "Valeur recommandée : 802.11g/n"
+
+msgid "Recommended: 802.11n/ac"
+msgstr "Valeur recommandée : 802.11n/ac"
+
+msgid "Recommended: Auto"
+msgstr "Valeur recommandée : Auto"
+
+msgid "Recommended: Auto, 1, 6, 11"
+msgstr "Valeurs recommandées : Auto, 1, 6, 11"
+
+msgid "Reduced"
+msgstr "Réduit"
+
+msgid "Remote syslog server:"
+msgstr "Serveur Syslog distant :"
+
+msgid "Reset"
+msgstr "Réinitialiser"
+
+msgid "Reset Configuration"
+msgstr "Réinitialiser la configuration des appareils"
+
+msgid "Reset button"
+msgstr "Bouton de réinitialisation"
+
+msgid "Reset device to factory defaults?"
+msgstr "Réinitialiser l'appareil aux valeurs par défaut ?"
+
+msgid "Reset/Restart button"
+msgstr "Bouton de réinitialisation"
+
+msgid "Restore"
+msgstr "Restaurer"
+
+msgid "Restore Device Configuration From File"
+msgstr "Restaurer la configuration de l'appareil à partir du fichier"
+
+msgid "Role"
+msgstr "Rôle"
+
+msgid "Run Mode"
+msgstr "Mode exécution"
+
+msgid "Rx rate (Mbit/s)"
+msgstr "Taux de réception (Mbits/s)"
+
+msgid "SHA"
+msgstr "SHA"
+
+msgid "SNMP version:"
+msgstr "Version SNMP :"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID already exists"
+msgstr "Le SSID existe déjà !"
+
+msgid "SSID broadcast"
+msgstr "SSID visible"
+
+msgid "SSID:"
+msgstr "SSID :"
+
+msgid "SSIDs"
+msgstr "SSID"
+
+msgid "Sat"
+msgstr "Sam"
+
+msgid "Sat+Sun"
+msgstr "Sam+Dim"
+
+msgid "Saturday"
+msgstr "Samedi"
+
+msgid "Save"
+msgstr "Enregistrer"
+
+msgid "Save Configuration to File"
+msgstr "Enregistrer la configuration de l'appareil dans un fichier"
+
+msgid "Scan"
+msgstr "Balayer"
+
+msgid "Scan interval (min.):"
+msgstr "Intervalle de contrôle (min) :"
+
+msgid "Scan interval in minutes"
+msgstr "Intervalle de balayage en minutes"
+
+msgid "Schedule"
+msgstr "Planificateur"
+
+msgid "Schedule configuration successfully saved."
+msgstr "La modification a été enregistrée avec succès."
+
+msgid "Search ..."
+msgstr "Rechercher..."
+
+msgid "Secret:"
+msgstr "Secret"
+
+msgid "Secured"
+msgstr "Sécurisé"
+
+msgid "Security"
+msgstr "Cryptage"
+
+msgid "Security ID:"
+msgstr "N° de sécurité :"
+
+msgid "Security passphrase:"
+msgstr "Code de sécurité :"
+
+msgid "Security status:"
+msgstr "État de cryptage :"
+
+msgid "Security type:"
+msgstr "Type de cryptage :"
+
+msgid "Security:"
+msgstr "Cryptage :"
+
+msgid "Select Interval"
+msgstr "Sélectionner l'intervalle"
+
+msgid ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+msgstr ""
+"Sélectionnez une période. Après expiration, le réseau invité est "
+"automatiquement désactivé."
+
+msgid "Select day"
+msgstr "Sélectionner le jour"
+
+msgid "Select time limit"
+msgstr "Sélectionnez la limite de temps"
+
+msgid "Selected time period:"
+msgstr "Période sélectionnée:"
+
+msgid "Serial number:"
+msgstr "N° de série :"
+
+msgid "Server is outside of the network and unreachable!"
+msgstr "L'adresse est en dehors du sous-réseau et n'est donc pas accessible !"
+
+msgid "Server-side NAS key"
+msgstr "Code NAS côté serveur"
+
+msgid "Server:"
+msgstr "Serveur :"
+
+msgid "Service"
+msgstr "Service"
+
+msgid "Service Name"
+msgstr "Nom de service"
+
+msgid "Services"
+msgstr "Services"
+
+msgid "Set a duration and click \"Start\" to activate the buzzer for this time."
+msgstr ""
+"Fixez une durée et cliquez \"Exécuter\" pour activer l'avertisseur sonore "
+"cette fois"
+
+msgid "Setting 0 prevents any clients from connecting to the SSID!"
+msgstr "Le paramètre 0 empêche la connexion de tout appareil à ce SSID !"
+
+msgid "Settings"
+msgstr "Paramètres"
+
+msgid ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually, after having re-established the connection."
+msgstr ""
+"S'il n'est plus possible d'établir la connexion après la modification des "
+"appareils, veuillez recharger la page après avoir rétabli la connexion."
+
+msgid "Show password"
+msgstr "Afficher le mot de passe"
+
+msgid "Signal (dBm)"
+msgstr "Signal (dBm)"
+
+msgid "Signal quality (%)"
+msgstr "Qualité du signal (%)"
+
+msgid "Since"
+msgstr "Depuis"
+
+msgid ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+msgstr ""
+"Quelques SSID ont été désactivés car la configuration RADIUS est devenue "
+"invalide."
+
+msgid "Some SSIDs are updated to new RADIUS configuration"
+msgstr "Quelques SSID ont été modifiés car la configuration RADIUS a changé."
+
+msgid ""
+"Some event has been occoured. Determining reason, this can take up to 1 "
+"minute."
+msgstr ""
+"Un problème est apparu. La recherche de son origine et sa cause peut "
+"prendre jusqu'à 1 minute."
+
+msgid "Standby"
+msgstr "Mode veille"
+
+msgid "Start"
+msgstr "Exécuter"
+
+msgid "Start Configuration"
+msgstr "Démarrer la configuration"
+
+msgid "Start IP Address:"
+msgstr "Adresse IP de début :"
+
+msgid "Start address equals end address!"
+msgstr "L'adresse de début est identique à l'adresse de fin."
+
+msgid "Start address must be smaller than end address!"
+msgstr "L'adresse de début doit être inférieure à l'adresse de fin !"
+
+msgid "Start pairing"
+msgstr "Lancer l'établissement de la connexion PLC"
+
+msgid ""
+"Start the pairing process by pressing the PLC button on an adapter in your "
+"existing network first. Then, click on \"PAIR\"."
+msgstr ""
+"Commencez par appuyer sur la touche PLC d'un\n"
+"adaptateur de votre réseau existant, puis démarrez la procédure "
+"d'appariement en\n"
+"cliquant sur \"PAIR\". \""
+
+msgid "Start time and end time cannot be equal! Please correct your time quotas!"
+msgstr ""
+"Les heures de début et de fin ne peuvent pas être identiques ! Veuillez "
+"modifier les heures !"
+
+msgid "Static IPv4 Address"
+msgstr "Adresse IPv4 statique"
+
+msgid "Station is not connected"
+msgstr "Appareil n'est pas connecté."
+
+msgid "Status"
+msgstr "État"
+
+msgid "Status:"
+msgstr "État :"
+
+msgid "Stop"
+msgstr "Interrompre"
+
+msgid "Stop Configuration"
+msgstr "Arrêter la configuration"
+
+msgid "Stop time must be after start time! Please correct your time quotas!"
+msgstr ""
+"L'heure de fin doit être après l'heure de début ! Veuillez modifier les "
+"heures !"
+
+msgid "Subnet mask:"
+msgstr "Masque de sous-réseau :"
+
+msgid "Subnet:"
+msgstr "Masque de sous-réseau :"
+
+msgid "Successfully deleted."
+msgstr "Supprimé avec succès."
+
+msgid "Sun"
+msgstr "Dim"
+
+msgid "Sunday"
+msgstr "Dimanche"
+
+msgid "Support"
+msgstr "Assistance"
+
+msgid "Supported"
+msgstr "Supporte"
+
+msgid "Switch your WiFi network on first so that your guest network can be used."
+msgstr ""
+"Mettez d’abord en marche votre réseau WiFi pour pouvoir utiliser votre "
+"réseau hôte."
+
+msgid "System"
+msgstr "Système"
+
+msgid "System Information"
+msgstr "Informations système"
+
+msgid "System contact:"
+msgstr "Interlocuteur :"
+
+msgid "System location:"
+msgstr "Emplacement de l'appareil :"
+
+msgid "System name (hostname):"
+msgstr "Nom de l'appareil (Hostname) :"
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using a mobile "
+"devices such as smartphones or tablets. While scanning the QR code the "
+"credentials for the guestnetwork will be transfered to your mobile device."
+msgstr ""
+"Le code QR vous permet de configurer facilement le réseau d'invités pour "
+"les appareils mobiles (p. ex. : smartphone ou tablette). Lors du balayage "
+"du code, les paramètres de cryptage du réseau d'invités sont "
+"automatiquement transmis à l'appareil mobile respectif."
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+msgstr ""
+"Le code QR vous permet de configurer facilement le réseau d'invités pour "
+"les appareils mobiles (p. ex. : smartphone ou tablette). Lors du balayage "
+"du code, les paramètres de cryptage du réseau d'invités sont "
+"automatiquement transmis à l'appareil mobile respectif."
+
+msgid ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+msgstr "Activez le WiFi pour que vous puissiez voir les réseaux voisins."
+
+msgid "The device has a new IP address. Please login at the new URL:"
+msgstr "L'appareil a une nouvelle adresse IP. Veuillez vous reconnecter :"
+
+msgid ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+msgstr ""
+"La configuration WiFi intégrale est transmise à tous les appareils "
+"compatibles Config Sync de votre réseau."
+
+msgid "The guest network does only allow access to the internet."
+msgstr "Le réseau d'invités autorise simplement l'accès à Internet."
+
+msgid "The guestnetwork does only allow access to the internet."
+msgstr "Le réseau d'invités autorise simplement l'accès à Internet."
+
+msgid "The host name is too long. Max. 32 characters allowed."
+msgstr "Le nom d'hôte doit se composer de 1 à 32 caractères."
+
+msgid "The host name is too short. Please enter at least 1 character."
+msgstr "Le nom d'hôte est trop court. Entrez au moins 1 caractère."
+
+msgid "The maximum number ({maxVLANs}) of VLANs has been configured."
+msgstr "Le nombre maximal ({maxVLANs}) de VLAN a été atteint."
+
+msgid "The password contains an invalid character:"
+msgstr "Le mot de passe contient un caractère non valide :"
+
+msgid ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+msgstr ""
+"Le numéro de sécurité se compose de quatre groupes de quatre majuscules "
+"chacun, séparés par des traits d'union."
+
+msgid ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+msgstr ""
+"Le fichier de microprogramme sélectionné est invalide, veuillez "
+"sélectionner un fichier correspondant à cet appareil."
+
+msgid ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+msgstr ""
+"Le fichier de microprogramme sélectionné n'est pas valide, veuillez "
+"sélectionner un fichier de microprogramme adéquat pour cet appareil."
+
+msgid ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+msgstr ""
+"Le passage de l'heure d'été à l'heure d'hiver est effectué automatiquement "
+"par le serveur de temps. Vous ne devez donc procéder à aucun réglage manuel."
+
+msgid "There are no configured time servers."
+msgstr "Il n'y a pas de serveur de temps configuré."
+
+msgid "There is a newer version."
+msgstr "Version actuelle"
+
+msgid "There is newer version:"
+msgstr "Version actuelle :"
+
+msgid ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+msgstr ""
+"Les paramètres suivants en font partie:réseau WiFi, réseau invités, Mesh "
+"functionality, paramètres du planificateur et du serveur de temps."
+
+msgid "This is the broadcast address!"
+msgstr "Il s'agit de l'adresse de diffusion !"
+
+msgid "This is the device's IP address!"
+msgstr "Il s'agit de l'adresse IP de l'appareil !"
+
+msgid "This is the network address!"
+msgstr "C'est l'adresse du sous-réseau !"
+
+msgid "This page will be reloaded automatically, when the action has finished."
+msgstr "Cette page est rechargée automatiquement au terme de l'action."
+
+msgid "This server already exists."
+msgstr "Ce serveur existe déjà !"
+
+msgid "Thu"
+msgstr "Jeu"
+
+msgid "Thursday"
+msgstr "Jeudi"
+
+msgid "Time Server"
+msgstr "Serveur de temps"
+
+msgid "Time Server (NTP)"
+msgstr "Serveur de temps (NTP)"
+
+msgid "Time Server:"
+msgstr "Serveur de temps :"
+
+msgid "Time Zone"
+msgstr "Fuseau horaire"
+
+msgid "Time server"
+msgstr "Serveur de temps "
+
+msgid "Time zone configuration successfully saved."
+msgstr "La configuration des fuseaux horaires a été enregistrée avec succès."
+
+msgid "Time zone:"
+msgstr "Fuseau horaire :"
+
+msgid "To"
+msgstr "jusqu'à"
+
+msgid "Total memory:"
+msgstr "Mémoire vive totale :"
+
+msgid "Transmit (Mbps)"
+msgstr "Émission (Mbits/s)"
+
+msgid "Tue"
+msgstr "Mar"
+
+msgid "Tuesday"
+msgstr "Mardi"
+
+msgid "Turn off the WiFi"
+msgstr "Désactiver le WiFi"
+
+msgid "Tx rate (Mbit/s)"
+msgstr "Vitesse de transmission (Mbits/s)"
+
+msgid "Tx-Power"
+msgstr "Puissance d'émission"
+
+msgid "Type"
+msgstr "Sorte"
+
+msgid "Type error"
+msgstr "Type d'erreur"
+
+msgid "Type status"
+msgstr "Type d'état"
+
+msgid "UNPAIR"
+msgstr "Couper la connexion PLC"
+
+msgid "UTC"
+msgstr "UTC"
+
+msgid "Unpair device"
+msgstr "Couper la connexion PLC de l'appareil"
+
+msgid "Unpairing"
+msgstr "Désappariement – Couper la connexion PLC"
+
+msgid "Unsecured"
+msgstr "Non sécurisé"
+
+msgid "Untagged"
+msgstr "Non étiqueté"
+
+msgid "Update firmware"
+msgstr "Effectuer la mise à jour"
+
+msgid "Update firmware to latest version"
+msgstr "Effectuer la mise à jour à la version la plus récente"
+
+msgid "Update table"
+msgstr "Mettre à jour le tableau"
+
+msgid "Uploading ..."
+msgstr "Transmission en cours..."
+
+msgid "Uploading firmware image ..."
+msgstr "Le fichier de microprogramme est en cours de transmission..."
+
+msgid "Uptime:"
+msgstr "Durée de fonctionnement de l'appareil :"
+
+msgid "Use common settings"
+msgstr "Paramètres identiques"
+
+msgid ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button on the device which you want to join "
+"your Powerline network! Afterwards, click the \"Start configuration\" "
+"button."
+msgstr "Incluir dispositivos en la red dLAN mediante el botón de encriptación."
+
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+msgid "Username:"
+msgstr "Nom d'utilisateur :"
+
+msgid "Using the encryption button"
+msgstr "A l'aide du bouton PLC"
+
+msgid "VLAN ID"
+msgstr "ID VLAN"
+
+msgid "VLAN ID must be unique!"
+msgstr "L'ID VLAN existe déjà !"
+
+msgid "VLAN ID out of range (1-4094)!"
+msgstr "ID VLAN incorrect ! Veuillez entrer une valeur comprise entre 1 et 4094."
+
+msgid "VLAN Name"
+msgstr "Nom du VLAN"
+
+msgid "VLAN name must be unique!"
+msgstr "Le nom du VLAN doit être univoque !"
+
+msgid "VLAN {id}"
+msgstr "VLAN {id}"
+
+msgid "VLAN:"
+msgstr "VLAN :"
+
+msgid "VLANs"
+msgstr "VLAN"
+
+msgid "Valid:"
+msgstr "Valable :"
+
+msgid "Very High ({power} dBm)"
+msgstr "Très élevé ({power} dBm)"
+
+msgid "Via security ID"
+msgstr "A l'aide du numéro de sécurité"
+
+msgid "WDS bridge configuration updated."
+msgstr "La configuration du pont WiFi a été enregistrée avec succès."
+
+msgid "WMM Power-Save (U-APSD)"
+msgstr "WMM Power-Save (U-APSD)"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA/WPA2 Personal"
+msgstr "WPA/WPA2 Personnel"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WPA2 Enterprise"
+msgstr "WPA2 Entreprise"
+
+msgid "WPA2 Personal"
+msgstr "WPA2 Personnel"
+
+msgid "WPA2 Personal *"
+msgstr "WPA2 Personnel *"
+
+msgid "WPA2 pre-shared key:"
+msgstr "Code WPA2 :"
+
+msgid "WPA3/WPA2 Personal"
+msgstr "WPA3/WPA2 Personal"
+
+msgid "WPS"
+msgstr "WPS"
+
+msgid "WPS Clone Mode failed: "
+msgstr "Le mode clone WPS a échoué :"
+
+msgid "WPS Clone Mode succeeded!"
+msgstr "Le mode clone WPS a réussi !"
+
+msgid "WPS Mode:"
+msgstr "Mode WPS :"
+
+msgid "WPS PIN"
+msgstr "PIN WPS"
+
+msgid "WPS PIN connect applied successfully"
+msgstr "La connexion via le PIN WPS a réussi !"
+
+msgid "WPS PIN connect failed"
+msgstr "La connexion via le PIN WPS a échoué !"
+
+msgid "WPS PIN is active..."
+msgstr "Le PIN WPS est actif..."
+
+msgid "WPS PIN is not valid. Use a 4- or 8-digit number."
+msgstr ""
+"Le PIN WPS n'est pas correct. Entrez le nombre correct avec 4 ou 8 "
+"caractères."
+
+msgid "WPS Pushbutton"
+msgstr "Bouton de commande WPS"
+
+msgid "WPS Pushbutton is active..."
+msgstr "Le PIN WPS est actif..."
+
+msgid "WPS connect applied successfully"
+msgstr "La connexion via WPS a réussi !"
+
+msgid "WPS connect failed"
+msgstr "La connexion via WPS a échoué !"
+
+msgid "WPS is active..."
+msgstr "WPS actif..."
+
+msgid "Warning"
+msgstr "Avertissement"
+
+msgid "Wed"
+msgstr "Mer"
+
+msgid "Wednesday"
+msgstr "Mercredi"
+
+msgid "Welcome to your {product}"
+msgstr "Bienvenue dans votre {product}"
+
+msgid ""
+"When scan interval is set to 0 this function is disabled. Recommended: 240 "
+"minutes"
+msgstr "Entrez 0 pour désactiver la fonction. Recommandation : 240 minutes"
+
+msgid ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+msgstr ""
+"Si la fonction \"Déconnexion automatique\" est activée, le réseau sans fil "
+"n'est désactivé qu'au moment où la dernière station se déconnecte du point "
+"d'accès. "
+
+msgid "WiFi"
+msgstr "WiFi"
+
+msgid "WiFi Clients"
+msgstr "Appareils WiFi"
+
+msgid "WiFi Clone"
+msgstr "WiFi Clone"
+
+msgid ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+msgstr ""
+"WiFi Clone vous permet de reprendre automatiquement les données d'accès "
+"WiFi (nom de réseau et mot de passe WiFi) d'un autre point d'accès WiFi "
+"pour cet appareil. À cet effet, démarrez l'opération de configuration et "
+"appuyez ensuite sur le bouton WPS de l'appareil dont les données de "
+"connexion WiFi (SSID et mot de passe WiFi) doivent être reprises."
+
+msgid "WiFi Clone is active..."
+msgstr "WiFi Clone est activé ..."
+
+msgid "WiFi LED"
+msgstr "DEL WiFi"
+
+msgid "WiFi Network"
+msgstr "Réseau WiFi"
+
+msgid "WiFi Protected Setup (WPS) - Configuration"
+msgstr "WiFi Protected Setup (WPS) - configuration"
+
+msgid "WiFi button"
+msgstr "Bouton WiFi"
+
+msgid "WiFi convenience function"
+msgstr "Déconnexion automatique"
+
+msgid "WiFi disabled"
+msgstr "WiFi désactivé"
+
+msgid "WiFi enabled"
+msgstr "WiFi activé"
+
+msgid "WiFi network"
+msgstr "Réseau WiFi"
+
+msgid "WiFi network mode:"
+msgstr "Mode réseau WiFi :"
+
+msgid "WiFi networks"
+msgstr "Réseaux WiFi"
+
+msgid "WiFi schedule control"
+msgstr "Planificateur WiFi"
+
+msgid "WiFi schedule settings"
+msgstr "Paramètres"
+
+msgid "Wifi Status"
+msgstr "État WiFi"
+
+msgid ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+msgstr ""
+"Vous pouvez enregistrer la configuration de l'appareil dans un fichier sur "
+"votre ordinateur et le restaurer ultérieurement ou transmettre le fichier "
+"de configuration sur un autre appareil."
+
+msgid "You can find the latest firmware"
+msgstr "Vous trouverez le microprogramme actuel "
+
+msgid ""
+"You can limit access to certain Wi-Fi devices by the MAC address. Please "
+"define the time periods during which Wi-Fi access is allowed."
+msgstr ""
+"Vous pouvez limiter l'accès pour certains périphériques sur la base de "
+"l'adresse MAC. Veuillez définir les périodes dans lesquelles l'accès WiFi "
+"est permis."
+
+msgid "You can no longer create SSIDs for the {radioBand} radio"
+msgstr "Vous ne pouvez plus ajouter de SSID pour la bande de fréquence {radioBand} !"
+
+msgid "You can't have 2 quotas for same mac address! Please correct your quota!"
+msgstr ""
+"Un appareil WiFi ne peut pas utiliser plusieurs contingents de temps "
+"simultanément. Veuillez modifier les\n"
+"heures !\""
+
+msgid "You can't have overlapping quotas for the same station!"
+msgstr ""
+"Le chevauchement de plusieurs contingents de temps pour le même appareil "
+"WiFi n'est pas possible !"
+
+msgid "You cannot combine the time period and time limit for a WiFi device!"
+msgstr ""
+"Vous ne pouvez pas combiner les paramètres de période et de contingent de "
+"temps pour un appareil WiFi !"
+
+msgid ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+msgstr ""
+"Vous avez été automatiquement déconnecté du système pour des raisons de "
+"sécurité. Veuillez vous reconnecter !"
+
+msgid "You have successfully changed the Configuration for your device's LEDs."
+msgstr "Le comportement de la DEL a été modifié."
+
+msgid "You have successfully changed the configuration for your device's buttons."
+msgstr "Vous avez modifié avec succès la configuration des boutons de commande."
+
+msgid "You have successfully configured an SSID"
+msgstr "La configuration du SSID a été enregistrée avec succès."
+
+msgid "You have successfully deleted an SSID"
+msgstr "Le SSID a été supprimé avec succès."
+
+msgid "You have successfully updated the compatibility mode setting."
+msgstr "Vous avez actualisé avec succès le mode de compatibilité. "
+
+msgid "You have successfully updated your Config sync settings"
+msgstr "Les paramètres Config Sync ont été enregistrés avec succès."
+
+msgid "You have successfully updated your PLC network settings."
+msgstr "La mise à jour de la configuration PLC réseau a réussi."
+
+msgid "You have successfully updated your PLC password."
+msgstr "La mise à jour du mot de passe a réussi."
+
+msgid "You have successfully updated your Powerline encryption password"
+msgstr "Votre mot de passe PLC a été actualisé avec succès."
+
+msgid "You have successfully updated your Powerline network mode"
+msgstr "Vous avez actualisé avec succès le mode réseau Powerline."
+
+msgid "You have successfully updated your Powerline pro network."
+msgstr "Votre réseau Powerline pro a été étendu avec succès."
+
+msgid "You have successfully updated your system management configuration"
+msgstr "Les paramètres d'administration ont été enregistrés."
+
+msgid "You have successfully {enableOrDisableTerm} {name} service."
+msgstr "{name} a été {enableOrDisableTerm} avec succès."
+
+msgid ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+msgstr ""
+"Vous devez utiliser plus de classes de caractères différentes (majuscules, "
+"minuscules, chiffres et caractères spéciaux)."
+
+msgid "You've successfully changed your password."
+msgstr "Mot de passe modifié avec succès."
+
+msgid "You've successfully configured the WiFi network."
+msgstr "Votre réseau WiFi a été configuré avec succès."
+
+msgid "You've successfully configured the radio."
+msgstr ""
+"La configuration de la bande de fréquence WiFi a été enregistrée avec "
+"succès."
+
+msgid "Your Powerline pro network is disabled."
+msgstr "Votre réseau Powerline pro est désactivé."
+
+msgid "Your WiFi is not encrypted. Please activate the encryption."
+msgstr "Votre réseau WiFi n'est pas crypté. Veuillez activer le cryptage."
+
+msgid ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+msgstr ""
+"L'appareil Powerline est automatiquement mis en mode d'économie d'énergie "
+"quand aucune connexion Ethernet n'est active (c.à.d. qu'aucun appareil "
+"réseau n'est connecté aux interfaces réseau) et que le WiFi est désactivé."
+
+msgid "call ubus"
+msgstr "Appeler ubus"
+
+msgid "connected"
+msgstr "connecté"
+
+msgid "current session"
+msgstr "Session actuelle :"
+
+msgid "current ubus request queue"
+msgstr "File d&rsquo;attente actuelle de la requête ubus"
+
+msgid "d, "
+msgstr "T, "
+
+msgid "dLAN button"
+msgstr "Bouton d'appairage Powerline"
+
+msgid "daily"
+msgstr "tous les jours"
+
+msgid "devolo"
+msgstr "devolo"
+
+msgid "disabled"
+msgstr "désactivé"
+
+msgid "display {num} of {all}"
+msgstr "afficher {num} de {all}"
+
+msgid "enabled"
+msgstr "actif"
+
+msgid "mimo_full"
+msgstr "Full power"
+
+msgid "mimo_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "mimo_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "n/a"
+msgstr "n/a"
+
+msgid "no PLC connections"
+msgstr "pas de connexions PLC"
+
+msgid "none"
+msgstr "aucun"
+
+msgid "not configured"
+msgstr "non configuré"
+
+msgid "off"
+msgstr "inactif"
+
+msgid "on"
+msgstr "actif"
+
+msgid "one day, {hours}:{minutes}:{seconds}"
+msgstr "Un jour, {hours}:{minutes}:{seconds}"
+
+msgid "pending"
+msgstr "Connexion en cours..."
+
+msgid "reduced"
+msgstr "réduit"
+
+msgid "s"
+msgstr "s"
+
+msgid "siso_full"
+msgstr "Full power"
+
+msgid "siso_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "siso_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "static"
+msgstr "statique"
+
+msgid "ubus Test"
+msgstr "Test ubus"
+
+msgid "ubus callee"
+msgstr "ubus appelé :"
+
+msgid "ubus data"
+msgstr "données ubus :"
+
+msgid "ubus section"
+msgstr "Section ubus :"
+
+msgid "unknown"
+msgstr "Inconnu"
+
+msgid "unknown LED"
+msgstr "DEL inconnue"
+
+msgid "unknown button"
+msgstr "Bouton inconnu"
+
+msgid "v1 + v2c"
+msgstr "v1 + v2c"
+
+msgid "v3"
+msgstr "v3"
+
+msgid "{days} days, {hours}:{minutes}:{seconds}"
+msgstr "{days} jours, {hours}:{minutes}:{seconds}"
+
+msgid "{duration} remaining"
+msgstr "{duration} restant"
+
+msgid "{frequency} GHz Radio"
+msgstr "Bande de fréquence{frequency} GHz"
\ No newline at end of file
diff --git a/www/assets/i18n/it.po b/www/assets/i18n/it.po
new file mode 100644
index 0000000..34ce4de
--- /dev/null
+++ b/www/assets/i18n/it.po
@@ -0,0 +1,2734 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "1"
+msgstr "1"
+
+msgid "10"
+msgstr "10"
+
+msgid "60"
+msgstr "60"
+
+msgid "120"
+msgstr "120"
+
+msgid " Device is not enabled,"
+msgstr "Il dispositivo non è acceso,"
+
+msgid " Encryption disabled,"
+msgstr "Crittografia disinserita,"
+
+msgid " SSID is hidden,"
+msgstr "La rete WiFi è nascosta"
+
+msgid " The minimum password length is {minlength} character(s)."
+msgstr "La lunghezza minima della password è di {minlength} caratteri."
+
+msgid "(2.4 GHz)"
+msgstr "(2,4 GHz)"
+
+msgid "(5 GHz)"
+msgstr "(5 GHz)"
+
+msgid "(Radar detected on {channel})"
+msgstr "(Radar rilevato su {channel})"
+
+msgid "(dynamic)"
+msgstr "(dinamico)"
+
+msgid ")\n"
+msgstr ""
+
+msgid ")<br/>"
+msgstr ")<br/>"
+
+msgid "* Automatic"
+msgstr "* automatico"
+
+msgid "* indicates default option"
+msgstr "* Impostazione standard"
+
+msgid "* marks this device."
+msgstr "* questo dispositivo"
+
+msgid "* offers best performance"
+msgstr "* migliori prestazioni"
+
+msgid "00PM"
+msgstr "24"
+
+msgid "01AM"
+msgstr "01"
+
+msgid "01PM"
+msgstr "13"
+
+msgid "02AM"
+msgstr "02"
+
+msgid "02PM"
+msgstr "14"
+
+msgid "03AM"
+msgstr "03"
+
+msgid "03PM"
+msgstr "15"
+
+msgid "04AM"
+msgstr "04"
+
+msgid "04PM"
+msgstr "16"
+
+msgid "05AM"
+msgstr "05"
+
+msgid "05PM"
+msgstr "17"
+
+msgid "06AM"
+msgstr "06"
+
+msgid "06PM"
+msgstr "18"
+
+msgid "07AM"
+msgstr "07"
+
+msgid "07PM"
+msgstr "19"
+
+msgid "08AM"
+msgstr "08"
+
+msgid "08PM"
+msgstr "20"
+
+msgid "09AM"
+msgstr "09"
+
+msgid "09PM"
+msgstr "21"
+
+msgid "1 h"
+msgstr "1 h"
+
+msgid "10AM"
+msgstr "10"
+
+msgid "10PM"
+msgstr "22"
+
+msgid "11AM"
+msgstr "11"
+
+msgid "11PM"
+msgstr "23"
+
+msgid "12 h"
+msgstr "12 h"
+
+msgid "12AM"
+msgstr "00"
+
+msgid "12PM"
+msgstr "12"
+
+msgid "15 min"
+msgstr "15 min."
+
+msgid "18 h"
+msgstr "18 h"
+
+msgid "2 h"
+msgstr "2 h"
+
+msgid "2.4 + 5 GHz network name"
+msgstr "Nome rete 2,4 + 5 GHz"
+
+msgid "2.4 GHz"
+msgstr "2,4 GHz"
+
+msgid "2.4 GHz + 5 GHz"
+msgstr "2,4 GHz + 5 GHz"
+
+msgid "2.4 GHz Radio"
+msgstr "Banda di frequenza 2,4 GHz"
+
+msgid "2.4 GHz WiFi LED"
+msgstr "LED WiFi 2,4 GHz"
+
+msgid "2.4 GHz network name"
+msgstr "Nome rete 2,4 GHz"
+
+msgid "2.4 GHz network name:"
+msgstr "Nome rete 2,4 GHz:"
+
+msgid "20 MHz"
+msgstr "20 MHz"
+
+msgid "20/40 MHz"
+msgstr "20/40 MHz"
+
+msgid "24 h"
+msgstr "24 h"
+
+msgid "3 h"
+msgstr "3 h"
+
+msgid "30 min"
+msgstr "30 min."
+
+msgid "36 h"
+msgstr "36 h"
+
+msgid "4 h"
+msgstr "4 h"
+
+msgid "40 MHz"
+msgstr "40 MHz"
+
+msgid "48 h"
+msgstr "48 h"
+
+msgid "5 GHz"
+msgstr "5 GHz"
+
+msgid "5 GHz Radio"
+msgstr "Banda di frequenza 5 GHz"
+
+msgid "5 GHz WiFi LED"
+msgstr "LED WiFi 5 GHz"
+
+msgid "5 GHz network name"
+msgstr "Nome rete 5 GHz"
+
+msgid "5 GHz network name:"
+msgstr "Nome rete 5 GHz:"
+
+msgid "5 h"
+msgstr "5 h"
+
+msgid "5 min"
+msgstr "5 min."
+
+msgid "6 h"
+msgstr "6 h"
+
+msgid "80 MHz"
+msgstr "80 MHz"
+
+msgid "802.11a/n/ac"
+msgstr "802.11 a/n/ac"
+
+msgid "802.11ac"
+msgstr "802.11 ac"
+
+msgid "802.11b/g/n"
+msgstr "802.11 b/g/n"
+
+msgid "802.11g/n"
+msgstr "802.11 g/n"
+
+msgid "802.11n"
+msgstr "802.11 n"
+
+msgid "802.11n/ac"
+msgstr "802.11 n/ac"
+
+msgid "A RADIUS password is required!"
+msgstr "Password RADIUS non indicata!"
+
+msgid "A RADIUS username is required!"
+msgstr "Nome utente RADIUS non indicato!"
+
+msgid "A new firmware version is available."
+msgstr ""
+
+msgid ""
+"A passphrase (8-63 characters) or a pre-shared key (64 characters) is "
+"required"
+msgstr ""
+"Necessaria una chiave: 8 a 63 caratteri (passphrase) oppure 64 caratteri "
+"(pre-shared key)"
+
+msgid "A pre-shared key is required (8-64 characters)!"
+msgstr "Necessaria chiave (64 caratteri, pre-shared key)!"
+
+msgid "AES"
+msgstr "AES"
+
+msgid "AVLN"
+msgstr "AVLN"
+
+msgid "Accounting Server"
+msgstr "Server accounting"
+
+msgid "Accounting Server:"
+msgstr "Server accounting:"
+
+msgid "Active"
+msgstr "Attivo"
+
+msgid "Add Devices"
+msgstr "Aggiungi dispositivi"
+
+msgid "Add devices to the WiFi network using the soft push button."
+msgstr "Collegare il dispositivo alla rete WiFi con il pulsante WPS."
+
+msgid "Add devices to the WiFi network using your PIN."
+msgstr "Collegare il dispositivo alla rete WiFi digitando il PIN"
+
+msgid "Add new SSID"
+msgstr "Aggiungi nuovo SSID"
+
+msgid "Add new Time Server"
+msgstr "Aggiungi nuovo server orario"
+
+msgid "Add new VLAN"
+msgstr "Aggiungi nuovo VLAN"
+
+msgid "Add new server"
+msgstr "Aggiungi nuovo server"
+
+msgid "Address/Subnet:"
+msgstr "Indirizzo/sottorete:"
+
+msgid "Address:"
+msgstr "Indirizzo:"
+
+msgid "Advanced Settings"
+msgstr "Impostazioni avanzate"
+
+msgid "Airtime Fairness"
+msgstr "Airtime Fairness"
+
+msgid "All changes will have effect after system boot."
+msgstr ""
+
+msgid "Allow power saving mode"
+msgstr "Consenti modalità risparmio energetico"
+
+msgid ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+msgstr ""
+"Consentire al dispositivo di passare alla modalità di risparmio energetico "
+"quando viene rilevato un traffico ridotto su ethernet. Attenzione: Il tempo "
+"di latenza può soffrire se viene rilevato un traffico di dati molto lento."
+
+msgid "Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio."
+msgstr "Numero ammesso di SSID: {allowedRadioVapNumber} per radio {radioBand}."
+
+msgid ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+msgstr ""
+"Numero ammesso di SSID: {num1} per radio {radio1} e {num2} per radio "
+"{radio2} "
+
+msgid "Always"
+msgstr "Sempre"
+
+msgid "An error has occurred. Please click the arrow to reload the page!"
+msgstr ""
+"Si è verificato un errore. Fare clic sulla freccia per caricare nuovamente "
+"la pagina!"
+
+msgid "An error occurred during device configuration:"
+msgstr "Si è verificato un errore al momento della configurazione dell’apparecchio:"
+
+msgid "Answer of"
+msgstr "Risposta di"
+
+msgid "Authentication Server"
+msgstr "Server autenticazione"
+
+msgid "Authentication Server:"
+msgstr "Server autenticazione:"
+
+msgid "Authentication passphrase:"
+msgstr "Chiave autenticazione:"
+
+msgid "Authentication type:"
+msgstr "Tipo autenticazione:"
+
+msgid "Auto"
+msgstr "Automatico"
+
+msgid "Auto *"
+msgstr "Automatico *"
+
+msgid "Automatic *"
+msgstr "* automatico"
+
+msgid "Automatic Update:"
+msgstr "Aggiornamento del firmware automatico"
+
+msgid "Automatic shutoff"
+msgstr "Spegnimento automatico"
+
+msgid "Automatically search for updates:"
+msgstr "Cerca automaticamente gli aggiornamenti:"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Band Steering"
+msgstr "Band Steering"
+
+msgid "Basic"
+msgstr "Base"
+
+msgid "Basic Settings"
+msgstr "Impostazioni standard"
+
+msgid "Bridge"
+msgstr "Bridge"
+
+msgid "Bridge to Remote Access Point (WDS)"
+msgstr "Bridge alla stazione trasmittente remota (WDS)"
+
+msgid "Browse ..."
+msgstr "Selezione file in corso..."
+
+msgid "Button Settings"
+msgstr "Impostazioni per i tasti di comando"
+
+msgid "Buttons"
+msgstr "Tasti di comando"
+
+msgid "Buzzer"
+msgstr "Cicalino"
+
+msgid "Buzzer duration: {dur} s"
+msgstr "Durata segnale: {dur} sec."
+
+msgid "CPU load:"
+msgstr "Utilizzo processore:"
+
+msgid "Cancel"
+msgstr "Annulla"
+
+msgid "Cancelled!"
+msgstr "Procedura interrotta!"
+
+msgid "Cannot retrieve current network information."
+msgstr "Impossibile trasmettere le informazioni di rete attuali."
+
+msgid "Caps Lock is on!"
+msgstr "Il tasto Bloc Maiusc è premuto!"
+
+msgid "Central Coordinator"
+msgstr "Coordinatore centrale"
+
+msgid "Change Password"
+msgstr "Modifica password di accesso"
+
+msgid "Change Password?"
+msgstr "Modificare password?"
+
+msgid "Change language"
+msgstr "Modifica lingua"
+
+msgid "Changing"
+msgstr "Modificare"
+
+msgid "Channel"
+msgstr "Canale"
+
+msgid "Channel 2.4 GHz:"
+msgstr "Canale 2,4 GHz"
+
+msgid "Channel 5 GHz:"
+msgstr "Canale 5 GHz"
+
+msgid "Channel bandwidth:"
+msgstr "Larghezza di canale:"
+
+msgid "Channel:"
+msgstr "Canale:"
+
+msgid "Checking firmware image ..."
+msgstr "Verifica in corso del file firmware..."
+
+msgid "Checking session ID ..."
+msgstr "Verifica in corso dell'ID di sessione..."
+
+msgid "Choose between different LED notification levels."
+msgstr "Selezionare il comportamento del LED."
+
+msgid "Choose the CCo setting of your device in P2P mode."
+msgstr "Selezionare l'impostazione CCo del dispositivo per la modalità P2P."
+
+msgid ""
+"Choose the compatibility mode of your device. This setting can help "
+"increase performance with technologies such as VDSL."
+msgstr ""
+"Selezionare la modalità di compatibilità; e una modalità speciale, in grado "
+"di superare i problemi di connessione che possono verificarsi commutando "
+"tra le varie tecnologie, ad esempio VDSL."
+
+msgid "Choose the network mode of your device."
+msgstr "Selezionare la modalità di rete del vostro dispositivo."
+
+msgid "Click here to update."
+msgstr "Fare clic qui per aggiornare."
+
+msgid "Click to edit"
+msgstr "Clicca qui per elaborare la voce di menu"
+
+msgid "Clicking the button below will restart your device."
+msgstr "Facendo clic su \"Riavvia\" il dispositivo si riavvia."
+
+msgid "Clone SSID"
+msgstr "Clona SSID"
+
+msgid "Clone SSID via WPS"
+msgstr "Clona SSID tramite WPS"
+
+msgid "Compatibility Mode"
+msgstr "Modo di compatibilità"
+
+msgid "Compatibility Mode:"
+msgstr "Modo di compatibilità:"
+
+msgid "Compatibility mode"
+msgstr "Modo di compatibilità"
+
+msgid "Config Sync"
+msgstr "Config Sync"
+
+msgid "Configuration"
+msgstr "Configurazione"
+
+msgid "Configuration file too large (maximum {maxSize} bytes)!"
+msgstr "Il file di configurazione è troppo grande (massimo {maxSize} byte)!"
+
+msgid "Configuration of time quotas"
+msgstr "Configurazione"
+
+msgid "Configuration successfully restored!"
+msgstr "Configurazione ripristinata con successo!"
+
+msgid "Configured VLANs:"
+msgstr "VLAN configurati:"
+
+msgid "Confirm"
+msgstr "Conferma"
+
+msgid "Confirm new password:"
+msgstr "Conferma nuova password:"
+
+msgid "Connected AVLNs:"
+msgstr "AVLN collegati:"
+
+msgid "Connected WiFi Clients"
+msgstr "Dispositivi WiFi collegati"
+
+msgid "Connected WiFi clients:"
+msgstr "Dispositivi WiFi collegati:"
+
+msgid "Connected clients"
+msgstr "Dispositivi collegati"
+
+msgid "Connected devices:"
+msgstr "Dispositivi collegati:"
+
+msgid "Connected powerline devices"
+msgstr "Dispositivi Powerline collegati"
+
+msgid "Connected since"
+msgstr "Connesso da"
+
+msgid "Connection"
+msgstr "Connessione"
+
+msgid "Connection lost!"
+msgstr "Connessione interrotta!"
+
+msgid "Connection status:"
+msgstr "Stato della connessione:"
+
+msgid "Contact:"
+msgstr "Contatto:"
+
+msgid "Current Firmware"
+msgstr "Firmware attuale"
+
+msgid "Current channel"
+msgstr "Canale attuale"
+
+msgid "Current channel:"
+msgstr "Canale attuale:"
+
+msgid "DES"
+msgstr "DES"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DHCP Server"
+msgstr "Server DHCP"
+
+msgid "Data rates:"
+msgstr "Velocità di trasmissione dati:"
+
+msgid "Date"
+msgstr "Data"
+
+msgid "Date and Time"
+msgstr "Data e ora"
+
+msgid "Days"
+msgstr "Giorni"
+
+msgid "Default"
+msgstr "Standard"
+
+msgid "Default VLAN"
+msgstr "VLAN standard"
+
+msgid "Default gateway:"
+msgstr "Gateway standard:"
+
+msgid "Default mode *"
+msgstr "Impostazione standard *"
+
+msgid "Delete"
+msgstr "Cancella"
+
+msgid "Delete SSID?"
+msgstr "Cancellare SSID?"
+
+msgid "Device ID"
+msgstr "ID dispositivi"
+
+msgid "Device MAC"
+msgstr "Indirizzo MAC del dispositivo"
+
+msgid "Device Name"
+msgstr "Nome dispositivo"
+
+msgid "Device rebooted.  Please login again!"
+msgstr "Il dispositivo è stato riavviato. Effettuare un nuovo login!"
+
+msgid "Disable Radio?"
+msgstr "Radio spenta?"
+
+msgid "Disable guest network {duration}"
+msgstr "Disattivare la rete ospiti {duration}"
+
+msgid "Disabled"
+msgstr "Disattivato"
+
+msgid ""
+"Disabling the reset button also forbids resetting the configuration to "
+"factory defaults."
+msgstr ""
+"Disattivando il tasto di reset non è più possibile riavviare il dispositivo "
+"o riportarlo allo stato al momento della fornitura."
+
+msgid ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+msgstr ""
+"Sicuro di voler modificare la password PLC? La connessione a questo "
+"dispositivo può andare persa."
+
+msgid ""
+"Do you really want to enable the WiFi Schedule without adding time quotas? "
+"The Wifi will be turned off permanently."
+msgstr ""
+"Se non si configura alcuna regola, il WiFi è permanentemente inutilizzabile "
+"fino a quando non si aggiunge una regola o si disattiva la gestione "
+"temporizzata."
+
+msgid "Do you really want to remove this SSID?"
+msgstr "Sicuro di voler cancellare il SSID?"
+
+msgid ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+msgstr ""
+"Sicuro di voler resettare il dispositivo allo stato al momento della "
+"fornitura? Al termine il dispositivo si riavvia."
+
+msgid "Do you really want to restart the device?"
+msgstr "Sicuro di voler riavviare il dispositivo?"
+
+msgid "Domain Master"
+msgstr "Domain Master"
+
+msgid "Download Firmware Version for Update"
+msgstr "Scarica firmware aggiornato"
+
+msgid "Download Firmware:"
+msgstr "Scarica firmware:"
+
+msgid "Dynamic VLAN"
+msgstr "VLAN dinamico"
+
+msgid "Enable"
+msgstr "Attivazione"
+
+msgid "Enable or completely disable the LEDs of your device."
+msgstr "Accendere i LED di questo dispositivo o spegnerli completamente"
+
+msgid "Enable or disable the buttons of your devices."
+msgstr "Attivare o disattivare la funzione per i tasti di comando sul dispositivo."
+
+msgid "Enabled"
+msgstr "Attivato"
+
+msgid "Enabled ({url})"
+msgstr "Attivato ({url})"
+
+msgid "Enabled SSIDs"
+msgstr "SSID attivati"
+
+msgid "Enabled SSIDs:"
+msgstr "SSID attivati:"
+
+msgid ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+msgstr ""
+"Mesh functionality ottimizza la rete WiFi e la rende più utilizzabile per "
+"dispositivi WiFi mobili. Il roaming risolve il problema con dispositivi "
+"WiFi sempre agganciati. Band Steering e Dynamic Frequency Selection "
+"forniscono un facile accesso al WiFi anche per molti dispositivi WiFi. "
+"Airtime Fairness ottimizza la larghezza di banda in reti con molti "
+"dispositivi WiFi."
+
+msgid "Encryption:"
+msgstr "Crittografia:"
+
+msgid "End IP Address:"
+msgstr "Indirizzo IP finale:"
+
+msgid "End Point"
+msgstr "Dispositivo"
+
+msgid "End address equals start address!"
+msgstr "Indirizzo finale uguale a quello iniziale!"
+
+msgid "End address must be larger than start address!"
+msgstr "L'indirizzo finale deve essere più grande di quello iniziale!"
+
+msgid "End node"
+msgstr "End node"
+
+msgid "Enter WPS PIN"
+msgstr "Inserire il PIN WPS"
+
+msgid "Enter an alphanumeric community name (max 24 characters)"
+msgstr "Inserire un nome alfanumerico della community (max. 24 caratteri)."
+
+msgid "Enter an alphanumeric username (max 24 characters)"
+msgstr "Inserisci un nome utente alfanumerico (max. 24 caratteri)."
+
+msgid "Enter between 1 and 64 of these characters:"
+msgstr "Inserisci un numero dei seguenti caratteri compreso tra 1 e 64:"
+
+msgid "Enter between 8 and 130 of these characters:"
+msgstr "Inserisci un numero dei seguenti caratteri compreso tra 8 e 130:"
+
+msgid "Enter between 8 and 64 of these characters:"
+msgstr "Inserisci un numero dei seguenti caratteri compreso tra 8 e 64:"
+
+msgid "Enter new password:"
+msgstr "Digitare una nuova password:"
+
+msgid "Enter old password:"
+msgstr "Digitare la password utilizzata finora:"
+
+msgid "Enter the PIN of the device to be added to your WiFi network."
+msgstr "Digitare il PIN del dispositivo che deve essere aggiunto alla rete WiFi."
+
+msgid ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+msgstr ""
+"Digitare la password PLC che il dispositivo deve usare per accedere alla "
+"rete Powerline. Tutti i dispositivi in una rete Powerline devono utilizzare "
+"la stessa password PLC."
+
+msgid "Error code:"
+msgstr "Codice errore:"
+
+msgid "Error occured! Please try again!"
+msgstr "Si è verificato un errore! Ritentare!"
+
+msgid "Error while processing WPS!  ->  ("
+msgstr "Si è verificato un errore durante il processo WPS! -&gt; ("
+
+msgid "Ethernet"
+msgstr "Ethernet"
+
+msgid "Europe/Aachen"
+msgstr "Europa/Aquisgrana"
+
+msgid "Europe/Amsterdam"
+msgstr "Europa/Amsterdam"
+
+msgid "Europe/Andorra"
+msgstr "Europa/Andorra"
+
+msgid "Europe/Athens"
+msgstr "Europa/Atene"
+
+msgid "Europe/Belgrade"
+msgstr "Europa/Belgrado"
+
+msgid "Europe/Berlin"
+msgstr "Europa/Berlino"
+
+msgid "Europe/Bratislava"
+msgstr "Europa/Bratislava"
+
+msgid "Europe/Brussels"
+msgstr "Europa/Bruxelles"
+
+msgid "Europe/Bucharest"
+msgstr "Europa/Bucarest"
+
+msgid "Europe/Budapest"
+msgstr "Europa/Budapest"
+
+msgid "Europe/Busingen"
+msgstr "Europa/Busingen"
+
+msgid "Europe/Chisinau"
+msgstr "Europa/Chisinau"
+
+msgid "Europe/Copenhagen"
+msgstr "Europa/Copenhagen"
+
+msgid "Europe/Dublin"
+msgstr "Europa/Dublino"
+
+msgid "Europe/Gibraltar"
+msgstr "Europa/Gibilterra"
+
+msgid "Europe/Guernsey"
+msgstr "Europa/Guernsey"
+
+msgid "Europe/Helsinki"
+msgstr "Europa/Helsinki"
+
+msgid "Europe/Isle of Man"
+msgstr "Europa/Isola di Man"
+
+msgid "Europe/Istanbul"
+msgstr "Europa/Istanbul"
+
+msgid "Europe/Jersey"
+msgstr "Europa/Jersey"
+
+msgid "Europe/Kaliningrad"
+msgstr "Europa/Kaliningrad"
+
+msgid "Europe/Kiev"
+msgstr "Europa/Kiew"
+
+msgid "Europe/Lisbon"
+msgstr "Europa/Lisbona"
+
+msgid "Europe/Ljubljana"
+msgstr "Europa/Lubiana"
+
+msgid "Europe/London"
+msgstr "Europa/Londra"
+
+msgid "Europe/Luxembourg"
+msgstr "Europa/Lussemburgo"
+
+msgid "Europe/Madrid"
+msgstr "Europa/Madrid"
+
+msgid "Europe/Malta"
+msgstr "Europa/Malta"
+
+msgid "Europe/Mariehamn"
+msgstr "Europa/Mariehamn"
+
+msgid "Europe/Minsk"
+msgstr "Europa/Minsk"
+
+msgid "Europe/Monaco"
+msgstr "Europa/Monaco"
+
+msgid "Europe/Moscow"
+msgstr "Europa/Mosca"
+
+msgid "Europe/Oslo"
+msgstr "Europa/Oslo"
+
+msgid "Europe/Paris"
+msgstr "Europa/Parigi"
+
+msgid "Europe/Podgorica"
+msgstr "Europa/Podgorica"
+
+msgid "Europe/Prague"
+msgstr "Europa/Praga"
+
+msgid "Europe/Riga"
+msgstr "Europa/Riga"
+
+msgid "Europe/Rome"
+msgstr "Europa/Roma"
+
+msgid "Europe/Samara"
+msgstr "Europa/Samara"
+
+msgid "Europe/San Marino"
+msgstr "Europa/San Marino"
+
+msgid "Europe/Sarajevo"
+msgstr "Europa/Sarajevo"
+
+msgid "Europe/Simferopol"
+msgstr "Europa/Sinferopoli"
+
+msgid "Europe/Skopje"
+msgstr "Europa/Skopje"
+
+msgid "Europe/Sofia"
+msgstr "Europa/Sofia"
+
+msgid "Europe/Stockholm"
+msgstr "Europa/Stoccolma"
+
+msgid "Europe/Tallinn"
+msgstr "Europa/Tallinn"
+
+msgid "Europe/Tirane"
+msgstr "Europa/Tirana"
+
+msgid "Europe/Uzhgorod"
+msgstr "Europa/Uzhhorod"
+
+msgid "Europe/Vaduz"
+msgstr "Europa/Vaduz"
+
+msgid "Europe/Vatican"
+msgstr "Europa/Vaticano"
+
+msgid "Europe/Vienna"
+msgstr "Europa/Vienna"
+
+msgid "Europe/Vilnius"
+msgstr "Europa/Vilna"
+
+msgid "Europe/Volgograd"
+msgstr "Europa/Volgograd"
+
+msgid "Europe/Warsaw"
+msgstr "Europa/Varsavia"
+
+msgid "Europe/Zagreb"
+msgstr "Europa/Zagabria"
+
+msgid "Europe/Zaporozhye"
+msgstr "Europa/Saporischschja"
+
+msgid "Europe/Zurich"
+msgstr "Europa/Zurigo"
+
+msgid "Fast transition (802.11r)"
+msgstr "Fast transition (802.11r)"
+
+msgid "Features"
+msgstr "Funzioni"
+
+msgid "Find Me"
+msgstr "Trova!"
+
+msgid "Firmware"
+msgstr "Firmware"
+
+msgid "Firmware file:"
+msgstr "File firmware:"
+
+msgid "Firmware image too large (maximum {maxSize} bytes)!"
+msgstr "File firmware troppo grande (massimo {maxSize} byte)!"
+
+msgid "Firmware updated successfully."
+msgstr "L'aggiornamento del firmware è avvenuto con successo."
+
+msgid "Firmware version:"
+msgstr "Versione firmware:"
+
+msgid "Force Node Type"
+msgstr "Force Node Type"
+
+msgid "Force node type"
+msgstr "Force Node Type"
+
+msgid "Free memory:"
+msgstr "Memoria RAM libera:"
+
+msgid "Frequency band"
+msgstr "Banda di frequenza"
+
+msgid "Frequency band:"
+msgstr "Banda di frequenza:"
+
+msgid "Fri"
+msgstr "Ven"
+
+msgid "Friday"
+msgstr "Venerdì"
+
+msgid "From"
+msgstr "da"
+
+msgid "Get IP configuration from a DHCP server"
+msgstr "Prelevare le impostazioni di rete di un server DHCP"
+
+msgid "Guest network"
+msgstr "Rete ospiti"
+
+msgid "Guest network configuration"
+msgstr "Configurazione "
+
+msgid "HH"
+msgstr "HH"
+
+msgid "Here"
+msgstr "Qui"
+
+msgid ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking Start configuration."
+msgstr ""
+"Qui è possibile aggiungere alla propria rete un nuovo dispositivo "
+"Powerline. Inserire prima l'ID di protezione stampato sul retro, innestare "
+"quindi il dispositivo in una presa elettrica e confermare con un clic su "
+"\"Avvia configurazione\""
+
+msgid ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+msgstr ""
+"Qui è possibile assegnare alla rete una password PLC personalizzata (invece "
+"della password PLC generata automaticamente)."
+
+msgid ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+msgstr ""
+"Qui è possibile definire gli intervalli di tempo in cui si deve attivare il "
+"proprio WiFi."
+
+msgid "Hide SSID:"
+msgstr "Nascondi SSID"
+
+msgid "Hide password"
+msgstr "Nascondi password"
+
+msgid "High ({power} dBm)"
+msgstr "Elevato ({power} dBm)"
+
+msgid ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+msgstr ""
+"IEEE 802.11r (chiamato anche \"Fast Roaming\") accelera l'accesso di un "
+"dispositivo WiFi a questo punto di accesso WiFi. Prerequisito: il "
+"dispositivo era già collegato ad un altro punto di accesso WiFi con 802.11r "
+"abilitato, nome di rete identico (SSID) e crittografia identica. 802.11r "
+"non è purtroppo compatibile con tutti i dispositivi WiFi. In caso di "
+"problemi con uno dei dispositivi, disattivare questa opzione."
+
+msgid "IP Configuration"
+msgstr "Configurazione IP"
+
+msgid "IP address is inside the loopback network!"
+msgstr "L'indirizzo IP è compreso nell'area di indirizzo Loopback!"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv4 address"
+msgstr "Indirizzo IPv4"
+
+msgid "IPv4 address of DNS server"
+msgstr "Indirizzo IPv4 del server DNS"
+
+msgid "IPv4 address of default gateway"
+msgstr "Indirizzo IPv4 del gateway standard"
+
+msgid "IPv4 configuration successfully updated."
+msgstr "Configurazione IPv4 aggiornata con successo."
+
+msgid "IPv4 netmask"
+msgstr "Maschera di sottorete IPv4"
+
+msgid "IPv4/IPv6"
+msgstr "IPv4/IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "IPv6 Address"
+msgstr "Indirizzo IPv6"
+
+msgid ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be resetted to factory defaults."
+msgstr ""
+"In caso di prosecuzione, tutte le impostazioni del dispositivo verranno "
+"cancellate e sarà ripristinato lo stato al momento della fornitura."
+
+msgid ""
+"In this case, instead of the automatically generated PLC password, assign a "
+"separate PLC password to your network manually."
+msgstr ""
+"Invece della password PLC generata automaticamente assegnare alla rete una "
+"password PLC personalizzata."
+
+msgid "Incorrect password!"
+msgstr "Password non valida"
+
+msgid "Individual ({power} dBm)"
+msgstr "Individuale ({power} dBm)"
+
+msgid "Individual transmit power:"
+msgstr "Prestazioni di trasmissione individuali:"
+
+msgid "Indoor use only:"
+msgstr "Solo uso interno:"
+
+msgid "Information"
+msgstr "Informazioni"
+
+msgid "Interfaces"
+msgstr "Interfacce di rete"
+
+msgid "Interval"
+msgstr "Range"
+
+msgid "Invalid IP address!"
+msgstr "Indirizzo IP non valido"
+
+msgid ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Chiave non valida! Inserire minimo 8 e massimo 63 caratteri. Caratteri "
+"speciali consentiti: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ "
+"/ ?  < >"
+
+msgid "Invalid Mac address!"
+msgstr "Indirizzo MAC  non valido!"
+
+msgid "Invalid SSID!  Please enter between 1 and 32 characters)."
+msgstr "SSID non valido! Inserire almeno 1 carattere e massimo 32 caratteri."
+
+msgid ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"SSID non valido! Inserire almeno 1 carattere e massimo 32 caratteri. "
+"Caratteri speciali consentiti: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` "
+"~ + = . _ / ?  < >"
+
+msgid "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+msgstr "ID VLAN non valido! Inserire un valore compreso tra 1 e 4094!"
+
+msgid "Invalid hostname or IP address!"
+msgstr "Nome host o indirizzo IP non valido"
+
+msgid "Invalid hostname or IP/Subnet!"
+msgstr "Nome host non valido oppure maschera di rete/IP non valida"
+
+msgid ""
+"Invalid hostname! Allowed are the digits 0-9, upper- and lowercase letters "
+"a-z, A-Z and the hyphen. The hostname cannot start or end with a hyphen."
+msgstr ""
+"Nome host non valido! I caratteri consentiti sono 0-9, a-z, A-Z e trattino "
+"„-&ldquo;. Il nome host non può iniziare o terminare con un trattino."
+
+msgid ""
+"Invalid key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ?  < >"
+msgstr ""
+"Chiave non valida! Inserire minimo 8 e massimo 63 caratteri. Caratteri "
+"speciali consentiti: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ "
+"/ ?  < >"
+
+msgid "Invalid name!"
+msgstr "Nome non valido!"
+
+msgid "Invalid netmask!"
+msgstr "Maschera di sottorete non valida"
+
+msgid "Invalid port! Please enter a value between 1 and 65535."
+msgstr "Porta non valida! Inserire un valore compreso tra 1 e 65535!"
+
+msgid ""
+"Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed "
+"characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+msgstr ""
+"Chiave non valida! Inserire 64 caratteri. Caratteri consentiti: 0 1 2 3 4 5 "
+"6 7 8 9 a b c d e f"
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 123."
+msgstr "Range non valido per 2,4 GHz, indicare un valore compreso tra 0 e 123. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Range non valido per 2,4 GHz, indicare un valore compreso tra 0 e 123. "
+"Range non valido per 5 GHz, indicare un valore compreso tra 0 e 200. "
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 127."
+msgstr "Range non valido per 2,4 GHz, indicare un valore compreso tra 0 e 127. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Range non valido per 2,4 GHz, indicare un valore compreso tra 0 e 127. "
+"Range non valido per 5 GHz, indicare un valore compreso tra 0 e 200. "
+
+msgid "Invalid range for 5 GHz, please enter a value between 0 and 200."
+msgstr "Range non valido per 5 GHz, indicare un valore compreso tra 0 e 200. "
+
+msgid "Key:"
+msgstr "Chiave:"
+
+msgid "LAN"
+msgstr "LAN"
+
+msgid "LED Settings"
+msgstr "Impostazioni dei LED"
+
+msgid "LEDs"
+msgstr "LED"
+
+msgid "Lease Time:"
+msgstr "Durata lease:"
+
+msgid "Leasetime"
+msgstr "Durata lease"
+
+msgid "Licenses"
+msgstr "Licenze"
+
+msgid "Loading ..."
+msgstr "Caricamento in corso..."
+
+msgid "Local Device"
+msgstr "Dispositivo locale"
+
+msgid "Local time:"
+msgstr "Data e ora attuali:"
+
+msgid "Location:"
+msgstr "Sede:"
+
+msgid "Log Level"
+msgstr "Livello"
+
+msgid "Login"
+msgstr "Login"
+
+msgid "Logout"
+msgstr "Logout"
+
+msgid "Logs"
+msgstr "Eventi"
+
+msgid "Low ({power} dBm)"
+msgstr "Basso ({power} dBm)"
+
+msgid "MAC Address"
+msgstr "Indirizzo MAC"
+
+msgid "MAC Addresses"
+msgstr "Indirizzi MAC"
+
+msgid "MAC address"
+msgstr "Indirizzo MAC"
+
+msgid "MBytes"
+msgstr "MegaByte"
+
+msgid "MD5"
+msgstr "MD5"
+
+msgid "MHz"
+msgstr "MHz"
+
+msgid "MM"
+msgstr "mm"
+
+msgid "Management"
+msgstr "Gestione"
+
+msgid "Management VLAN"
+msgstr "VLAN di gestione"
+
+msgid "Management VLAN:"
+msgstr "VLAN di gestione:"
+
+msgid "Manual"
+msgstr "Manuale"
+
+msgid "Manufacturer"
+msgstr "Fabbricante"
+
+msgid "Mask:"
+msgstr "Prefix:"
+
+msgid "Max. clients:"
+msgstr "Max. numero di dispositivi:"
+
+msgid "Max. transmit power:"
+msgstr "Max. prestazioni di trasmissione:"
+
+msgid "Mbit/s"
+msgstr "Mbps"
+
+msgid "Medium ({power} dBm)"
+msgstr "Medio ({power} dBm)"
+
+msgid "Members"
+msgstr "Membri"
+
+msgid "Mesh WiFi"
+msgstr "WiFi Mesh"
+
+msgid "Message"
+msgstr "Messaggio"
+
+msgid "Minimum lease time is two minutes!"
+msgstr "Durata lease minima = due minuti!"
+
+msgid "Mode:"
+msgstr "Modalità:"
+
+msgid "Mon"
+msgstr "Lun"
+
+msgid "Mon-Fri"
+msgstr "Lun-Ven"
+
+msgid "Monday"
+msgstr "Lunedì"
+
+msgid "N/A"
+msgstr "N/A"
+
+msgid "NTP configuration successfully saved."
+msgstr "La configurazione del server orario è stata memorizzata con successo."
+
+msgid "Name server:"
+msgstr "Server DNS:"
+
+msgid "Name:"
+msgstr "Nome:"
+
+msgid ""
+"Navigating away from this page will discard all your changes. Really "
+"proceed?"
+msgstr ""
+"Abbandonando questa pagina le modifiche andranno perdute. Proseguire "
+"ugualmente?"
+
+msgid "Neighbour network"
+msgstr "Reti vicine"
+
+msgid "Network"
+msgstr "Rete"
+
+msgid "Network Mode:"
+msgstr "Modalità di rete:"
+
+msgid "Network interface"
+msgstr "Adattatore di rete"
+
+msgid "Network name"
+msgstr "Nome di rete"
+
+msgid "Network name 2.4 + 5 GHz"
+msgstr "Nome di rete 2,4 + 5 GHz"
+
+msgid "Network name:"
+msgstr "Nome rete:"
+
+msgid "Never"
+msgstr "Mai"
+
+msgid ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+msgstr ""
+"È stato trovato un nuovo dispositivo Powerline. Attendere fino a quando il "
+"processo non è terminato; può durare fino a max. 20 secondi."
+
+msgid "No Log Information"
+msgstr "Nessun evento disponibile."
+
+msgid ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"companions security ID."
+msgstr ""
+"Non è stato trovato alcun nuovo dispositivo Powerline. Verificare se l'ID "
+"di protezione è stato immesso correttamente."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button.\n"
+"              Please wait until the process has been finished."
+msgstr ""
+"Non è stato trovato alcun dispositivo Powerline. Verificare se i pulsanti "
+"PLC corrispondenti sono stati premuti correttamente. \n"
+"Attendere fino al termine del processo.\n"
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button. Please wait until the process has been finished."
+msgstr ""
+"Non è stato trovato alcun dispositivo Powerline. Premere il tasto PLC e "
+"attendere fino al termine del processo."
+
+msgid "No RADIUS server configured"
+msgstr "Nessun server RADIUS configurato!"
+
+msgid "No VLAN"
+msgstr "Nessun VLAN"
+
+msgid "No WiFi radio enabled. Please enable a radio."
+msgstr ""
+"Tutti i punti di accesso WiFi sono spenti. Accendere almeno un punto di "
+"accesso WiFi."
+
+msgid "No clients are connected"
+msgstr "Nessun dispositivo connesso."
+
+msgid "No encryption (not recommended)"
+msgstr "\"Nessuna crittografia\" non è un'impostazione consigliata."
+
+msgid "No file selected."
+msgstr "Nessun file selezionato."
+
+msgid "Not a valid input such as \"1d 12h 30m\"!"
+msgstr "Nessun input valido, ad es., \";1d 12h 30m\"!"
+
+msgid "Not configured"
+msgstr "Non configurato."
+
+msgid "Not connected"
+msgstr "Non connesso"
+
+msgid "Now press the WPS button on the device being added to your WiFi network."
+msgstr ""
+"Adesso premere il tasto WiFi sul dispositivo che si desidera aggiungere "
+"alla rete WiFi."
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Off"
+msgstr "Off"
+
+msgid "Old password was incorrect!"
+msgstr "La password attuale non è corretta!"
+
+msgid "Only for development"
+msgstr "Solo per finalità di sviluppo"
+
+msgid "Open"
+msgstr "Aperto"
+
+msgid "Open (OWE)"
+msgstr "Open (OWE)"
+
+msgid "Operate as DHCP server"
+msgstr "Utilizzare come server DHCP"
+
+msgid "Origin"
+msgstr "Fonte"
+
+msgid "Outside of the address range!"
+msgstr "Al di fuori dell'area indirizzo!"
+
+msgid "Overview"
+msgstr "Panoramica"
+
+msgid "Overview of the wifi schedule settings"
+msgstr "Panoramica"
+
+msgid "PAIR"
+msgstr "Creare connessione PLC"
+
+msgid "PLC Connections"
+msgstr "Connessione PLC"
+
+msgid "PLC Name"
+msgstr "Nome PLC"
+
+msgid "PLC domain name"
+msgstr "Nome Domain PLC"
+
+msgid "PLC firmware version:"
+msgstr "Versione firmware del PLC:"
+
+msgid "PLC password"
+msgstr "Password PLC"
+
+msgid "PLC role"
+msgstr "Ruole PLC"
+
+msgid "Pairing"
+msgstr "Pairing - creare connessione PLC"
+
+msgid "Parental Control"
+msgstr "Blocco di sicurezza bambini"
+
+msgid "Password"
+msgstr "Password"
+
+msgid "Password:"
+msgstr "Password:"
+
+msgid "Passwords do not match!"
+msgstr "Le password non coincidono!"
+
+msgid "Peer isolation"
+msgstr "Vietare la comunicazione tra i dispositivi WiFi"
+
+msgid "Please activate the WiFi network to enable Clone SSID via WPS"
+msgstr "Accendere la rete WiFi per avviare la modalità WiFi Clone."
+
+msgid "Please click the + button to add a SSID."
+msgstr "Fare clic sul tasto + per aggiungere un nuovo SSID."
+
+msgid "Please click the + button to add a VLAN"
+msgstr "Fare clic sul tasto + per aggiungere un nuovo VLAN"
+
+msgid "Please click the + button to add a new schedule."
+msgstr "Fare clic sul tasto + per aggiungere una nuova regola."
+
+msgid "Please click the + button to add a time server"
+msgstr "Fare clic sul tasto + per aggiungere un nuovo server orario."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+msgstr ""
+"Configurare {here} un canale WiFi statico. Ricordarsi di configurare "
+"conformemente gli altri punti di accesso nella rete."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+msgstr ""
+"Configurare {here} un canale WiFi statico. Ricordarsi di configurare "
+"conformemente gli altri punti di accesso nella rete. Consiglio: Selezionare "
+"un canale compreso tra 36 e 48, onde evitare modifiche al canale stesso a "
+"causa del DFS."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+msgstr ""
+"Configurare {here} un canale WiFi statico. Tenere presente che altri punti "
+"di accesso nel bridge dovrebbero avere impostato lo stesso canale WiFi. "
+"Consiglio: canale 100."
+
+msgid ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+msgstr ""
+"Inserisci il nome della rete e conferma le impostazioni facendo clic sul "
+"simbolo Dischetti."
+
+msgid "Please enter a password to secure the access to your device."
+msgstr ""
+"Digitare una password per limitare l'accesso alla configurazione del "
+"dispositivo."
+
+msgid ""
+"Please enter a value of at least 15 minutes or 0 to disable the "
+"functionality!"
+msgstr ""
+"Digitare un intervallo superiore a 15 minuti. Per disattivare la funzione "
+"inserire 0."
+
+msgid "Please log in with your password!"
+msgstr "Effettuare il login con la propria password!"
+
+msgid "Please login again."
+msgstr "Effettuare un nuovo login:"
+
+msgid "Please note that WiFi schedule Settings have precedence over these settings!"
+msgstr ""
+"Si noti che le impostazioni nel controllo del tempo hanno priorità su "
+"queste impostazioni!"
+
+msgid ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+msgstr ""
+"Tenere presente che molti tablet/smartphone mantengono in modo permanente "
+"la connessione WiFi!"
+
+msgid ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, exit Config Sync on the device, that you want to configure "
+"or switch separately."
+msgstr ""
+"Assicurarsi che il WiFi venga sempre acceso o spento nell'intera rete.  "
+"Pertanto, chiudere prima Config Sync sul dispositivo che si desidera "
+"configurare o inserire a parte."
+
+msgid "Please select the configuration file to be restored to this device."
+msgstr "Selezionare il file di configurazione che si desidera ripristinare."
+
+msgid "Please select the firmware file to be loaded onto this device."
+msgstr "Selezionare il file firmware che deve essere caricato sul dispositivo."
+
+msgid "Port"
+msgstr "Presa"
+
+msgid "Port number"
+msgstr "Numero porta"
+
+msgid "Port:"
+msgstr "Porta:"
+
+msgid "Power Management"
+msgstr "Gestione dell'energia"
+
+msgid "Powerline"
+msgstr "Powerline"
+
+msgid "Powerline LED"
+msgstr "LED Powerline"
+
+msgid "Powerline Network Mode"
+msgstr "Modalità di rete Powerline"
+
+msgid "Powerline Password"
+msgstr "Password PLC"
+
+msgid "Powerline Settings"
+msgstr "Impostazioni di standby Powerline"
+
+msgid "Powerline button"
+msgstr "Tasto PLC"
+
+msgid "Powerline encryption already in progress by external or previous request."
+msgstr "La rete Powerline è ancora in fase di costituzione."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+msgstr ""
+"La rete Powerline è ancora in fase di costituzione. Attendere fino a quando "
+"il processo non è terminato. Ancora 120 secondi."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+msgstr ""
+"La rete Powerline è ancora in fase di costituzione. Attendere fino a quando "
+"il processo non è terminato. Ancora {time} secondi."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished.\n"
+"              This can take up to 1 minute."
+msgstr ""
+"È stato avviato il collegamento a una rete Powerline tramite ID di "
+"protezione. Attendere fino a quando il processo non è terminato; può durare "
+"fino a max. 60 secondi."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished. This can take up to 1 minute."
+msgstr ""
+"È stato avviato il collegamento a una rete Powerline pro tramite ID di "
+"protezione. Attendere fino a quando il processo non è terminato; può durare "
+"fino a max. 60 secondi."
+
+msgid "Powerline encryption was stopped by external event."
+msgstr "La costituzione della rete Powerline è stata arrestata."
+
+msgid "Powerline encryption was successfully stopped."
+msgstr "La rete Powerline è stata configurata con successo."
+
+msgid ""
+"Powerline standby is enabled! Disabling all radios will interrupt the "
+"connection to this website if the device can only be reached via Powerline "
+"and it enters standby mode. Do you really want to disable this radio?"
+msgstr ""
+"La modalità standby Powerline è inserita! Spegnendo tutte le bande di "
+"frequenza s'interrompe la connessione con questa pagina web, se questo "
+"dispositivo è collegato alla rete tramite Powerline e commuta in modalità "
+"stand-by. Sicuro di voler disinserire questa banda di frequenza?"
+
+msgid "Powersave mode"
+msgstr "Modalità di risparmio energetico"
+
+msgid "Preferred:"
+msgstr "Preferito:"
+
+msgid "Profile"
+msgstr "Profilo"
+
+msgid "Programming firmware image..."
+msgstr "Scrivi file firmware..."
+
+msgid "Protocol:"
+msgstr "Protocollo:"
+
+msgid "Public community (read only):"
+msgstr "Public community (in lettura):"
+
+msgid "Public source:"
+msgstr "Public source:"
+
+msgid "Quota"
+msgstr "Contingente temporale"
+
+msgid "Quota has been depleted"
+msgstr "Il contingente di tempo è stata esaurita."
+
+msgid "Quota is currently depleting"
+msgstr "Il contingente di tempo si sta esaurendo."
+
+msgid "RADIUS"
+msgstr "RADIUS"
+
+msgid "RADIUS configuration applied successfully"
+msgstr "Configurazione RADIUS memorizzata con successo."
+
+msgid "RADIUS configuration is incomplete"
+msgstr "Configurazione RADIUS incompleta!"
+
+msgid "RADIUS password:"
+msgstr "Password RADIUS:"
+
+msgid "RADIUS username:"
+msgstr "Nome utente RADIUS:"
+
+msgid "Radio"
+msgstr "Radio"
+
+msgid "Radio channel:"
+msgstr "Canale WiFi:"
+
+msgid "Radio:"
+msgstr "Radio:"
+
+msgid "Radios"
+msgstr "Radio"
+
+msgid "Rate (Mbit/s)"
+msgstr "Rate (Mbps)"
+
+msgid "Reboot"
+msgstr "Riavvio"
+
+msgid "Reboot Device"
+msgstr "Riavviare il dispositivo"
+
+msgid "Reboot device?"
+msgstr "Riavviare il dispositivo?"
+
+msgid "Receive (Mbps)"
+msgstr "Ricevere (Mbps)"
+
+msgid "Recommended: 20 MHz"
+msgstr "Valore consigliato: 20 MHz"
+
+msgid "Recommended: 802.11g/n"
+msgstr "Valore consigliato: 802.11g/n"
+
+msgid "Recommended: 802.11n/ac"
+msgstr "Valore consigliato: 802.11g/ac"
+
+msgid "Recommended: Auto"
+msgstr "Valore consigliato: Auto"
+
+msgid "Recommended: Auto, 1, 6, 11"
+msgstr "Valori consigliati: Auto, 1, 6, 11"
+
+msgid "Reduced"
+msgstr "Ridotto"
+
+msgid "Remote syslog server:"
+msgstr "Server syslog remoto:"
+
+msgid "Reset"
+msgstr "Resettare"
+
+msgid "Reset Configuration"
+msgstr "Resetta configurazione dispositivo"
+
+msgid "Reset button"
+msgstr "Tasto reset"
+
+msgid "Reset device to factory defaults?"
+msgstr "Resettare il dispositivo sullo stato al momento della fornitura?"
+
+msgid "Reset/Restart button"
+msgstr "Tasto reset"
+
+msgid "Restore"
+msgstr "Ripristino"
+
+msgid "Restore Device Configuration From File"
+msgstr "Ripristinare la configurazione del dispositivo dal file"
+
+msgid "Role"
+msgstr "Ruole"
+
+msgid "Run Mode"
+msgstr "Run Mode"
+
+msgid "Rx rate (Mbit/s)"
+msgstr "Livello di ricezione (Mbps)"
+
+msgid "SHA"
+msgstr "SHA"
+
+msgid "SNMP version:"
+msgstr "Versione SNMP:"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID already exists"
+msgstr "SSID esiste già!"
+
+msgid "SSID broadcast"
+msgstr "SSID visibile"
+
+msgid "SSID:"
+msgstr "SSID:"
+
+msgid "SSIDs"
+msgstr "SSID"
+
+msgid "Sat"
+msgstr "Sab"
+
+msgid "Sat+Sun"
+msgstr "Sab+Dom"
+
+msgid "Saturday"
+msgstr "Sabato"
+
+msgid "Save"
+msgstr "Salva"
+
+msgid "Save Configuration to File"
+msgstr "Salvare la configurazione dispositivo come file"
+
+msgid "Scan"
+msgstr "Scansione"
+
+msgid "Scan interval (min.):"
+msgstr "Intervallo di controllo (min.):"
+
+msgid "Scan interval in minutes"
+msgstr "Intervallo di scansione in minuti"
+
+msgid "Schedule"
+msgstr "Gestione temporizzata"
+
+msgid "Schedule configuration successfully saved."
+msgstr "La modifica è stata salvata con successo."
+
+msgid "Search ..."
+msgstr "Ricerca in corso..."
+
+msgid "Secret:"
+msgstr "Segreto"
+
+msgid "Secured"
+msgstr "Protetto"
+
+msgid "Security"
+msgstr "Crittografia"
+
+msgid "Security ID:"
+msgstr "ID di protezione:"
+
+msgid "Security passphrase:"
+msgstr "ID di protezione:"
+
+msgid "Security status:"
+msgstr "Stato di crittografia:"
+
+msgid "Security type:"
+msgstr "Tipo di crittografia:"
+
+msgid "Security:"
+msgstr "Crittografia:"
+
+msgid "Select Interval"
+msgstr "Seleziona intervallo"
+
+msgid ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+msgstr ""
+"Selezionare un periodo di tempo. Dopo la scadenza, la rete degli ospiti si "
+"spegne automaticamente."
+
+msgid "Select day"
+msgstr "Seleziona giorno"
+
+msgid "Select time limit"
+msgstr "Seleziona limite di tempo"
+
+msgid "Selected time period:"
+msgstr "Intervalli selezionato:"
+
+msgid "Serial number:"
+msgstr "N° di serie:"
+
+msgid "Server is outside of the network and unreachable!"
+msgstr "L'indirizzo è esterno alla sottorete e quindi non è raggiungibile!"
+
+msgid "Server-side NAS key"
+msgstr "Chiave NAS del server"
+
+msgid "Server:"
+msgstr "Server:"
+
+msgid "Service"
+msgstr "Servizio"
+
+msgid "Service Name"
+msgstr "Nome servizio"
+
+msgid "Services"
+msgstr "Servizi"
+
+msgid "Set a duration and click \"Start\" to activate the buzzer for this time."
+msgstr ""
+"Fissare una durata e fare clic su \"Avvia\" per attivare il buzzer questa "
+"volta. "
+
+msgid "Setting 0 prevents any clients from connecting to the SSID!"
+msgstr "L'impostazione 0 impedisce il login di qualunque dispositivo a questo SSID!"
+
+msgid "Settings"
+msgstr "Impostazioni"
+
+msgid ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually, after having re-established the connection."
+msgstr ""
+"Qualora il dispositivo con impostazioni modificate non fosse più "
+"raggiungibile caricare nuovamente la pagina dopo aver ripristinato la "
+"connessione."
+
+msgid "Show password"
+msgstr "Mostrare la password"
+
+msgid "Signal (dBm)"
+msgstr "Segnale (dBm)"
+
+msgid "Signal quality (%)"
+msgstr "Qualità del segnale (%)"
+
+msgid "Since"
+msgstr "Da"
+
+msgid ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+msgstr ""
+"Alcuni SSID sono stati disattivati perché la configurazione RADIUS ha perso "
+"di validità."
+
+msgid "Some SSIDs are updated to new RADIUS configuration"
+msgstr ""
+"Alcuni SSID sono stati modificati perché la configurazione RADIUS è "
+"cambiata."
+
+msgid ""
+"Some event has been occoured. Determining reason, this can take up to 1 "
+"minute."
+msgstr "Si è verificato un problema. La ricerca della causa può durare un minuto."
+
+msgid "Standby"
+msgstr "Stand-by"
+
+msgid "Start"
+msgstr "Avvia"
+
+msgid "Start Configuration"
+msgstr "Avvia configurazione"
+
+msgid "Start IP Address:"
+msgstr "Indirizzo IP iniziale:"
+
+msgid "Start address equals end address!"
+msgstr "Indirizzo iniziale uguale a quello finale"
+
+msgid "Start address must be smaller than end address!"
+msgstr "L'indirizzo iniziale deve essere più piccolo di quello finale!"
+
+msgid "Start pairing"
+msgstr "Avviare connessione PLC"
+
+msgid ""
+"Start the pairing process by pressing the PLC button on an adapter in your "
+"existing network first. Then, click on \"PAIR\"."
+msgstr ""
+"Innanzitutto premere il tasto PLC di un adattatore della rete esistente e "
+"avviare la procedura di pairing facendo clic su \"PAIR\". "
+
+msgid "Start time and end time cannot be equal! Please correct your time quotas!"
+msgstr "Ora di inizio e di fine non possono essere uguali! Modificare gli orari!"
+
+msgid "Static IPv4 Address"
+msgstr "Indirizzo IPv4 statico"
+
+msgid "Station is not connected"
+msgstr "Dispositivo non collegato"
+
+msgid "Status"
+msgstr "Stato"
+
+msgid "Status:"
+msgstr "Stato:"
+
+msgid "Stop"
+msgstr "Arresto"
+
+msgid "Stop Configuration"
+msgstr "Arresta configurazione"
+
+msgid "Stop time must be after start time! Please correct your time quotas!"
+msgstr "L'ora di fine deve essere oltre l'ora di inizio! Modificare gli orari!"
+
+msgid "Subnet mask:"
+msgstr "Maschera di sottorete:"
+
+msgid "Subnet:"
+msgstr "Maschera di sottorete:"
+
+msgid "Successfully deleted."
+msgstr "Cancellato con successo."
+
+msgid "Sun"
+msgstr "Dom"
+
+msgid "Sunday"
+msgstr "Domenica"
+
+msgid "Support"
+msgstr "Assistenza"
+
+msgid "Supported"
+msgstr "Supportato"
+
+msgid "Switch your WiFi network on first so that your guest network can be used."
+msgstr "Innanzitutto accendere la rete WiFi per poter utilizzare la rete guest."
+
+msgid "System"
+msgstr "Sistema"
+
+msgid "System Information"
+msgstr "Informazioni di sistema"
+
+msgid "System contact:"
+msgstr "Contatto:"
+
+msgid "System location:"
+msgstr "Ubicazione dispositivo:"
+
+msgid "System name (hostname):"
+msgstr "Nome dispositivo (nome host):"
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using a mobile "
+"devices such as smartphones or tablets. While scanning the QR code the "
+"credentials for the guestnetwork will be transfered to your mobile device."
+msgstr ""
+"Con il codice QR si può facilmente configurare la connessione alla rete "
+"ospiti per dispositivi mobili (ad es.: smartphone o tablet). Scansionando "
+"il codice, le impostazioni di crittografia della rete ospiti vengono "
+"trasferite in automatico al rispettivo dispositivo mobile."
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+msgstr ""
+"Con il codice QR si può facilmente configurare la connessione alla rete "
+"ospiti per dispositivi mobili (ad es.: smartphone o tablet). Scansionando "
+"il codice, le impostazioni di crittografia della rete ospiti vengono "
+"trasferite in automatico al rispettivo dispositivo mobile."
+
+msgid ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+msgstr "Accendere il WiFi per poter vedere le reti vicine."
+
+msgid "The device has a new IP address. Please login at the new URL:"
+msgstr "Il dispositivo ha un nuovo indirizzo IP. Effettuare un nuovo login:"
+
+msgid ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+msgstr ""
+"L'intera configurazione WiFi viene trasmessa su tutti i dispositivi "
+"compatibili Config Sync della rete."
+
+msgid "The guest network does only allow access to the internet."
+msgstr "La rete ospiti consente solo l'accesso a internet."
+
+msgid "The guestnetwork does only allow access to the internet."
+msgstr "La rete ospiti consente solo l'accesso a internet."
+
+msgid "The host name is too long. Max. 32 characters allowed."
+msgstr "Il nome host deve essere composto da 1 a 32 caratteri."
+
+msgid "The host name is too short. Please enter at least 1 character."
+msgstr "Il nome host è troppo breve. Inserire almeno 1 carattere."
+
+msgid "The maximum number ({maxVLANs}) of VLANs has been configured."
+msgstr "È stato raggiungo il numero massimo ({maxVLANs}) di VLAN."
+
+msgid "The password contains an invalid character:"
+msgstr "La password contiene un carattere non valido:"
+
+msgid ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+msgstr ""
+"L'ID di protezione è composto da quattro gruppi di quattro lettere "
+"maiuscole separate da trattini."
+
+msgid ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+msgstr ""
+"Il file di configurazione selezionato non è valido, selezionare un file "
+"adeguato per il dispositivo."
+
+msgid ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+msgstr ""
+"Il firmware selezionato non è valido, selezionare un file firmware adeguato "
+"per questo dispositivo."
+
+msgid ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+msgstr ""
+"La passaggio tra ora legale e invernale avviene automaticamente tramite il "
+"server orario. Pertanto non serve alcuna impostazione manuale."
+
+msgid "There are no configured time servers."
+msgstr "Non è stato configurato alcun server orario."
+
+msgid "There is a newer version."
+msgstr "Versione attuale"
+
+msgid "There is newer version:"
+msgstr "Versione attuale:"
+
+msgid ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+msgstr ""
+"Ne fanno parte le seguenti impostazioni: rete WiFi, rete ospiti, "
+"funzionalità Mesh, impostazioni gestione temporizzata e server orario."
+
+msgid "This is the broadcast address!"
+msgstr "Questo è l'indirizzo di broadcast!"
+
+msgid "This is the device's IP address!"
+msgstr "Questo è l'indirizzo IP del dispositivo!"
+
+msgid "This is the network address!"
+msgstr "Questo è l'indirizzo di sottorete!"
+
+msgid "This page will be reloaded automatically, when the action has finished."
+msgstr "Questa pagina si ricaricherà automaticamente al temine dell'operazione."
+
+msgid "This server already exists."
+msgstr "Questo server esiste già!"
+
+msgid "Thu"
+msgstr "Gio"
+
+msgid "Thursday"
+msgstr "Giovedì"
+
+msgid "Time Server"
+msgstr "Server orario"
+
+msgid "Time Server (NTP)"
+msgstr "Server orario (NTP)"
+
+msgid "Time Server:"
+msgstr "Server orario:"
+
+msgid "Time Zone"
+msgstr "Fuso orario"
+
+msgid "Time server"
+msgstr "Server orario "
+
+msgid "Time zone configuration successfully saved."
+msgstr "La configurazione dei fusi orari è stata memorizzata con successo."
+
+msgid "Time zone:"
+msgstr "Fuso orario:"
+
+msgid "To"
+msgstr "a"
+
+msgid "Total memory:"
+msgstr "Memoria complessiva:"
+
+msgid "Transmit (Mbps)"
+msgstr "Inviare (Mbps)"
+
+msgid "Tue"
+msgstr "Mar"
+
+msgid "Tuesday"
+msgstr "Martedì"
+
+msgid "Turn off the WiFi"
+msgstr "Spegni WiFi"
+
+msgid "Tx rate (Mbit/s)"
+msgstr "Livello di trasmissione (Mbps)"
+
+msgid "Tx-Power"
+msgstr "Prestazioni di trasmissione"
+
+msgid "Type"
+msgstr "Tipo"
+
+msgid "Type error"
+msgstr "Tipo di errore"
+
+msgid "Type status"
+msgstr "Tipo di stato"
+
+msgid "UNPAIR"
+msgstr "Scollegare connessione PLC"
+
+msgid "UTC"
+msgstr "UTC"
+
+msgid "Unpair device"
+msgstr "Scollegare connessione PLC del dispositivo"
+
+msgid "Unpairing"
+msgstr "Unpairing - Scollegare connessione PLC"
+
+msgid "Unsecured"
+msgstr "Non protetto"
+
+msgid "Untagged"
+msgstr "&quot;untagged&quot;"
+
+msgid "Update firmware"
+msgstr "Esegui aggiornamento"
+
+msgid "Update firmware to latest version"
+msgstr "Esegui aggiornamento alla versione attuale"
+
+msgid "Update table"
+msgstr "Aggiorna tabella"
+
+msgid "Uploading ..."
+msgstr "Trasmissione in corso..."
+
+msgid "Uploading firmware image ..."
+msgstr "Trasmissione file firmware in corso..."
+
+msgid "Uptime:"
+msgstr "Durata dispositivo:"
+
+msgid "Use common settings"
+msgstr "Stesse impostazioni"
+
+msgid ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button on the device which you want to join "
+"your Powerline network! Afterwards, click the \"Start configuration\" "
+"button."
+msgstr ""
+"Integrare gli apparecchi nel rete dLAN utilizzando il pulsante di "
+"crittografia."
+
+msgid "Username"
+msgstr "Nome utente"
+
+msgid "Username:"
+msgstr "Nome utente:"
+
+msgid "Using the encryption button"
+msgstr "Mediante tasto PLC"
+
+msgid "VLAN ID"
+msgstr "ID VLAN"
+
+msgid "VLAN ID must be unique!"
+msgstr "ID VLAN esiste già!"
+
+msgid "VLAN ID out of range (1-4094)!"
+msgstr "ID VLAN non valido! Inserire un valore compreso tra 1 e 4094."
+
+msgid "VLAN Name"
+msgstr "Nome VLAN"
+
+msgid "VLAN name must be unique!"
+msgstr "Il nome VLAN deve essere univoco!"
+
+msgid "VLAN {id}"
+msgstr "VLAN {id}"
+
+msgid "VLAN:"
+msgstr "VLAN:"
+
+msgid "VLANs"
+msgstr "VLAN"
+
+msgid "Valid:"
+msgstr "Valido:"
+
+msgid "Very High ({power} dBm)"
+msgstr "Molto elevato ({power} dBm)"
+
+msgid "Via security ID"
+msgstr "Tramite ID di protezione"
+
+msgid "WDS bridge configuration updated."
+msgstr "Configurazione del ponte WiFi memorizzata con successo."
+
+msgid "WMM Power-Save (U-APSD)"
+msgstr "WMM Power-Save (U-APSD)"
+
+msgid "WPA/WPA2"
+msgstr "WPA / WPA2"
+
+msgid "WPA/WPA2 Personal"
+msgstr "WPA/WPA2 Personal"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WPA2 Enterprise"
+msgstr "WPA2-Enterprise"
+
+msgid "WPA2 Personal"
+msgstr "WPA2-Personal"
+
+msgid "WPA2 Personal *"
+msgstr "WPA2-Personal *"
+
+msgid "WPA2 pre-shared key:"
+msgstr "Chiave WPA2:"
+
+msgid "WPA3/WPA2 Personal"
+msgstr "WPA3/WPA2 Personal"
+
+msgid "WPS"
+msgstr "WPS"
+
+msgid "WPS Clone Mode failed: "
+msgstr "La modalità WPS Clone è fallita:"
+
+msgid "WPS Clone Mode succeeded!"
+msgstr "La modalità WPS Clone è riuscita!"
+
+msgid "WPS Mode:"
+msgstr "Modalità WPS:"
+
+msgid "WPS PIN"
+msgstr "PIN WPS"
+
+msgid "WPS PIN connect applied successfully"
+msgstr "La connessione tramite PIN WPS è riuscita!"
+
+msgid "WPS PIN connect failed"
+msgstr "La connessione tramite PIN WPS è fallita!"
+
+msgid "WPS PIN is active..."
+msgstr "Il PIN WPS è attivo..."
+
+msgid "WPS PIN is not valid. Use a 4- or 8-digit number."
+msgstr "Il PIN WPS non è corretto. Digitare il numero corretto con 4 o 8 caratteri."
+
+msgid "WPS Pushbutton"
+msgstr "Pulsante WPS"
+
+msgid "WPS Pushbutton is active..."
+msgstr "Il pulsante WPS è attivo..."
+
+msgid "WPS connect applied successfully"
+msgstr "La connessione tramite WPS è riuscita!"
+
+msgid "WPS connect failed"
+msgstr "La connessione tramite WPS è fallita!"
+
+msgid "WPS is active..."
+msgstr "Il WPS è attivo..."
+
+msgid "Warning"
+msgstr "Attenzione"
+
+msgid "Wed"
+msgstr "Mer"
+
+msgid "Wednesday"
+msgstr "Mercoledì"
+
+msgid "Welcome to your {product}"
+msgstr "Benvenuti dal vostro {product}"
+
+msgid ""
+"When scan interval is set to 0 this function is disabled. Recommended: 240 "
+"minutes"
+msgstr "Per disattivare la funzione inserire 0. Consiglio: 240 minuti"
+
+msgid ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+msgstr ""
+"Quando la funzione “Disconnessione automatica\" è attivata, la rete "
+"wireless non si disattiva finchè l’ultimo dispositivo WiFi non si è "
+"sconnesso dal tuo punto d’accesso."
+
+msgid "WiFi"
+msgstr "WiFi"
+
+msgid "WiFi Clients"
+msgstr "Dispositivi WiFi"
+
+msgid "WiFi Clone"
+msgstr "WiFi Clone"
+
+msgid ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+msgstr ""
+"Utilizzando WiFi Clone è possibile confermare automaticamente per questo "
+"dispositivo i dati di accesso WiFi (nome rete e password WiFi) di un altro "
+"punto di accesso WiFi. Avviare quindi la procedura di configurazione e "
+"premere il tasto WPS del dispositivo per il quale è necessario confermare i "
+"dati di accesso WiFi (SSID e password WiFi)."
+
+msgid "WiFi Clone is active..."
+msgstr "WiFi Clone è attivata ..."
+
+msgid "WiFi LED"
+msgstr "LED WiFi"
+
+msgid "WiFi Network"
+msgstr "Rete WiFi"
+
+msgid "WiFi Protected Setup (WPS) - Configuration"
+msgstr "WiFi Protected Setup (WPS) - Configurazione"
+
+msgid "WiFi button"
+msgstr "Tasto WiFi"
+
+msgid "WiFi convenience function"
+msgstr "Disconnessione automatica"
+
+msgid "WiFi disabled"
+msgstr "WiFi spento"
+
+msgid "WiFi enabled"
+msgstr "WiFi acceso"
+
+msgid "WiFi network"
+msgstr "Rete WiFi"
+
+msgid "WiFi network mode:"
+msgstr "Modalità di rete WiFi:"
+
+msgid "WiFi networks"
+msgstr "Reti WiFi"
+
+msgid "WiFi schedule control"
+msgstr "Gestione temporizzata WiFi"
+
+msgid "WiFi schedule settings"
+msgstr "Impostazioni"
+
+msgid "Wifi Status"
+msgstr "Stato WiFi"
+
+msgid ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+msgstr ""
+"È possibile memorizzare come file la configurazione del dispositivo sul "
+"proprio computer e ripristinarla successivamente oppure trasferire su un "
+"altro dispositivo il file di configurazione memorizzato."
+
+msgid "You can find the latest firmware"
+msgstr "L'attuale firmware si trova "
+
+msgid ""
+"You can limit access to certain Wi-Fi devices by the MAC address. Please "
+"define the time periods during which Wi-Fi access is allowed."
+msgstr ""
+"Puoi limitare l’accesso di alcuni dispositivi WiFi attraverso il loro "
+"indirizzo MAC. Puoi definire il periodo di tempo in cui l’accesso WiFi è "
+"permesso."
+
+msgid "You can no longer create SSIDs for the {radioBand} radio"
+msgstr "Non è possibile aggiungere altri SSID per la banda di frequenza {radioBand}!"
+
+msgid "You can't have 2 quotas for same mac address! Please correct your quota!"
+msgstr ""
+"Un dispositivo WiFi non può utilizzare più contingentes temporali "
+"contemporaneamente. Modificare gli orari!"
+
+msgid "You can't have overlapping quotas for the same station!"
+msgstr ""
+"Non è possibile sovrapporre più contingentes temporali per lo stesso "
+"dispositivo!"
+
+msgid "You cannot combine the time period and time limit for a WiFi device!"
+msgstr ""
+"Non è possibile combinare il intervalli e il limite di tempo di un "
+"dispositivo WiFi!"
+
+msgid ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+msgstr ""
+"Per motivi di sicurezza è avvenuto il logout automatico dal sistema. "
+"Effettuare un nuovo login!"
+
+msgid "You have successfully changed the Configuration for your device's LEDs."
+msgstr "Il comportamento dei LED è stato modificato con successo."
+
+msgid "You have successfully changed the configuration for your device's buttons."
+msgstr "Il comportamento dei tasti di comando è stato modificato con successo."
+
+msgid "You have successfully configured an SSID"
+msgstr "La configurazione del SSID è stata memorizzata con successo."
+
+msgid "You have successfully deleted an SSID"
+msgstr "Il SSID è stato cancellato con successo."
+
+msgid "You have successfully updated the compatibility mode setting."
+msgstr "La modalità di compatibilità è stata aggiornata con successo."
+
+msgid "You have successfully updated your Config sync settings"
+msgstr "Le impostazioni Config Sync sono state salvate con successo."
+
+msgid "You have successfully updated your PLC network settings."
+msgstr "La configurazione PLC aggiornata con successo."
+
+msgid "You have successfully updated your PLC password."
+msgstr "La password PLC è stata aggiornata con successo."
+
+msgid "You have successfully updated your Powerline encryption password"
+msgstr "La password PLC è stata aggiornata con successo."
+
+msgid "You have successfully updated your Powerline network mode"
+msgstr "La modalità di rete Powerline è stata aggiornata con successo."
+
+msgid "You have successfully updated your Powerline pro network."
+msgstr "La rete Powerline pro è stata ampliata con successo."
+
+msgid "You have successfully updated your system management configuration"
+msgstr "Impostazioni amministratore memorizzate con successo."
+
+msgid "You have successfully {enableOrDisableTerm} {name} service."
+msgstr "{name} avvenuto con successo {enableOrDisableTerm}."
+
+msgid ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+msgstr ""
+"Utilizzare diversi tipi di carattere (maiuscole, minuscole, cifre e "
+"caratteri speciali)."
+
+msgid "You've successfully changed your password."
+msgstr "Password modificata con successo."
+
+msgid "You've successfully configured the WiFi network."
+msgstr "La rete WiFi è stata configurata con successo."
+
+msgid "You've successfully configured the radio."
+msgstr ""
+"La configurazione della banda di frequenza WiFi è stata memorizzata con "
+"successo."
+
+msgid "Your Powerline pro network is disabled."
+msgstr "La rete Powerline pro è spenta."
+
+msgid "Your WiFi is not encrypted. Please activate the encryption."
+msgstr "La rete WiFi è crittografata. Attivare la crittografia."
+
+msgid ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+msgstr ""
+"Il dispositivo Powerline viene messo automaticamente in modalità di "
+"risparmio energetico se non è attiva alcuna connessione Ethernet (cioè "
+"nessun dispositivo di rete acceso è collegato alle interfacce di rete) e il "
+"WiFi è spento."
+
+msgid "call ubus"
+msgstr "Richiama ubus"
+
+msgid "connected"
+msgstr "connesso"
+
+msgid "current session"
+msgstr "Sessione attuale:"
+
+msgid "current ubus request queue"
+msgstr "Tempo di attesa attuale per la richiesta ubus"
+
+msgid "d, "
+msgstr "T, "
+
+msgid "dLAN button"
+msgstr "Tasto PLC"
+
+msgid "daily"
+msgstr "ogni giorno"
+
+msgid "devolo"
+msgstr "devolo"
+
+msgid "disabled"
+msgstr "disattivato"
+
+msgid "display {num} of {all}"
+msgstr "mostra {num} di {all}"
+
+msgid "enabled"
+msgstr "attivato"
+
+msgid "mimo_full"
+msgstr "Full power"
+
+msgid "mimo_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "mimo_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "n/a"
+msgstr "N/A"
+
+msgid "no PLC connections"
+msgstr "alcuna connessione PLC"
+
+msgid "none"
+msgstr "nessun"
+
+msgid "not configured"
+msgstr "non configurato"
+
+msgid "off"
+msgstr "off"
+
+msgid "on"
+msgstr "on"
+
+msgid "one day, {hours}:{minutes}:{seconds}"
+msgstr "Un giorno, {hours}:{minutes}:{seconds}"
+
+msgid "pending"
+msgstr "Connessione in corso..."
+
+msgid "reduced"
+msgstr "Ridotto"
+
+msgid "s"
+msgstr "Sec."
+
+msgid "siso_full"
+msgstr "Full power"
+
+msgid "siso_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "siso_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "static"
+msgstr "Statico"
+
+msgid "ubus Test"
+msgstr "Test ubus:"
+
+msgid "ubus callee"
+msgstr "Richiamato ubus:"
+
+msgid "ubus data"
+msgstr "Dati ubus:"
+
+msgid "ubus section"
+msgstr "Sezione ubus:"
+
+msgid "unknown"
+msgstr "Sconosciuto"
+
+msgid "unknown LED"
+msgstr "LED sconosciuto"
+
+msgid "unknown button"
+msgstr "tasto sconosciuto"
+
+msgid "v1 + v2c"
+msgstr "v1 + v2c"
+
+msgid "v3"
+msgstr "v3"
+
+msgid "{days} days, {hours}:{minutes}:{seconds}"
+msgstr "{days} Giorni, {hours}:{minutes}:{seconds}"
+
+msgid "{duration} remaining"
+msgstr "{duration} restante"
+
+msgid "{frequency} GHz Radio"
+msgstr "{frequency}Banda di frequenza GHz"
\ No newline at end of file
diff --git a/www/assets/i18n/nl.po b/www/assets/i18n/nl.po
new file mode 100644
index 0000000..7481b93
--- /dev/null
+++ b/www/assets/i18n/nl.po
@@ -0,0 +1,2727 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "1"
+msgstr "1"
+
+msgid "10"
+msgstr "10"
+
+msgid "60"
+msgstr "60"
+
+msgid "120"
+msgstr "120"
+
+msgid " Device is not enabled,"
+msgstr "Het apparaat is niet ingeschakeld,"
+
+msgid " Encryption disabled,"
+msgstr "Codering uitgeschakeld,"
+
+msgid " SSID is hidden,"
+msgstr "Het WiFi-netwerk is verstopt"
+
+msgid " The minimum password length is {minlength} character(s)."
+msgstr "De minimumlengte van het wachtwoord bedraagt {minlength} tekens."
+
+msgid "(2.4 GHz)"
+msgstr "(2,4 GHz)"
+
+msgid "(5 GHz)"
+msgstr "(5 GHz)"
+
+msgid "(Radar detected on {channel})"
+msgstr "(Radar herkend op {channel})"
+
+msgid "(dynamic)"
+msgstr "(dynamisch)"
+
+msgid ")\n"
+msgstr ""
+
+msgid ")<br/>"
+msgstr ")<br/>"
+
+msgid "* Automatic"
+msgstr "* automatisch"
+
+msgid "* indicates default option"
+msgstr "* Standaardinstelling"
+
+msgid "* marks this device."
+msgstr "* dit apparaat"
+
+msgid "* offers best performance"
+msgstr "* beste prestaties"
+
+msgid "00PM"
+msgstr "24"
+
+msgid "01AM"
+msgstr "01"
+
+msgid "01PM"
+msgstr "13"
+
+msgid "02AM"
+msgstr "02"
+
+msgid "02PM"
+msgstr "14"
+
+msgid "03AM"
+msgstr "03"
+
+msgid "03PM"
+msgstr "15"
+
+msgid "04AM"
+msgstr "04"
+
+msgid "04PM"
+msgstr "16"
+
+msgid "05AM"
+msgstr "05"
+
+msgid "05PM"
+msgstr "17"
+
+msgid "06AM"
+msgstr "06"
+
+msgid "06PM"
+msgstr "18"
+
+msgid "07AM"
+msgstr "07"
+
+msgid "07PM"
+msgstr "19"
+
+msgid "08AM"
+msgstr "08"
+
+msgid "08PM"
+msgstr "20"
+
+msgid "09AM"
+msgstr "09"
+
+msgid "09PM"
+msgstr "21"
+
+msgid "1 h"
+msgstr "1 ore"
+
+msgid "10AM"
+msgstr "10"
+
+msgid "10PM"
+msgstr "22"
+
+msgid "11AM"
+msgstr "11"
+
+msgid "11PM"
+msgstr "23"
+
+msgid "12 h"
+msgstr "12 h"
+
+msgid "12AM"
+msgstr "00"
+
+msgid "12PM"
+msgstr "12"
+
+msgid "15 min"
+msgstr "15 min."
+
+msgid "18 h"
+msgstr "18 ore"
+
+msgid "2 h"
+msgstr "2 ore"
+
+msgid "2.4 + 5 GHz network name"
+msgstr "2,4 + 5-GHz-netwerknaam"
+
+msgid "2.4 GHz"
+msgstr "2,4 GHz"
+
+msgid "2.4 GHz + 5 GHz"
+msgstr "2,4 GHz + 5 GHz"
+
+msgid "2.4 GHz Radio"
+msgstr "2,4-GHz-frequentieband"
+
+msgid "2.4 GHz WiFi LED"
+msgstr "2,4-GHz-WiFi-LED"
+
+msgid "2.4 GHz network name"
+msgstr "2,4-GHz-netwerknaam"
+
+msgid "2.4 GHz network name:"
+msgstr "2,4-GHz-netwerknaam:"
+
+msgid "20 MHz"
+msgstr "20 MHz"
+
+msgid "20/40 MHz"
+msgstr "20/40 MHz"
+
+msgid "24 h"
+msgstr "24 ore"
+
+msgid "3 h"
+msgstr "3 ore"
+
+msgid "30 min"
+msgstr "30 min."
+
+msgid "36 h"
+msgstr "36 ore"
+
+msgid "4 h"
+msgstr "4 ore"
+
+msgid "40 MHz"
+msgstr "40 MHz"
+
+msgid "48 h"
+msgstr "48 ore"
+
+msgid "5 GHz"
+msgstr "5 GHz"
+
+msgid "5 GHz Radio"
+msgstr "5-GHz-frequentieband"
+
+msgid "5 GHz WiFi LED"
+msgstr "5-GHz-WiFi-LED"
+
+msgid "5 GHz network name"
+msgstr "5-GHz-netwerknaam"
+
+msgid "5 GHz network name:"
+msgstr "5-GHz-netwerknaam:"
+
+msgid "5 h"
+msgstr "5 ore"
+
+msgid "5 min"
+msgstr "5 min."
+
+msgid "6 h"
+msgstr "6 ore"
+
+msgid "80 MHz"
+msgstr "80 MHz"
+
+msgid "802.11a/n/ac"
+msgstr "802.11 a/n/ac"
+
+msgid "802.11ac"
+msgstr "802.11 ac"
+
+msgid "802.11b/g/n"
+msgstr "802.11 b/g/n"
+
+msgid "802.11g/n"
+msgstr "802.11 g/n"
+
+msgid "802.11n"
+msgstr "802.11 n"
+
+msgid "802.11n/ac"
+msgstr "802.11 n/ac"
+
+msgid "A RADIUS password is required!"
+msgstr "RADIUS-wachtwoord niet aangegeven!"
+
+msgid "A RADIUS username is required!"
+msgstr "RADIUS-gebruikersnaam niet aangegeven!"
+
+msgid "A new firmware version is available."
+msgstr ""
+
+msgid ""
+"A passphrase (8-63 characters) or a pre-shared key (64 characters) is "
+"required"
+msgstr ""
+"Een code is vereist: 8 tot 63 tekens (passphrase) of 64 tekens (pre-shared "
+"key)."
+
+msgid "A pre-shared key is required (8-64 characters)!"
+msgstr "Code vereist (64 tekens, pre-shared key)!"
+
+msgid "AES"
+msgstr "AES"
+
+msgid "AVLN"
+msgstr "AVLN"
+
+msgid "Accounting Server"
+msgstr "Afrekeningsserver"
+
+msgid "Accounting Server:"
+msgstr "Afrekeningsserver:"
+
+msgid "Active"
+msgstr "Actief"
+
+msgid "Add Devices"
+msgstr "Apparaten toevoegen"
+
+msgid "Add devices to the WiFi network using the soft push button."
+msgstr "Apparaat met WPS-drukknop in het WiFi-netwerk opnemen."
+
+msgid "Add devices to the WiFi network using your PIN."
+msgstr "Apparaten via PIN in het WiFi-netwerk opnemen"
+
+msgid "Add new SSID"
+msgstr "Nieuwe SSID toevoegen"
+
+msgid "Add new Time Server"
+msgstr "Nieuwe tijdserver toevoegen"
+
+msgid "Add new VLAN"
+msgstr "Nieuwe VLAN toevoegen"
+
+msgid "Add new server"
+msgstr "Nieuwe server toevoegen"
+
+msgid "Address/Subnet:"
+msgstr "Adres/subnet:"
+
+msgid "Address:"
+msgstr "Adres:"
+
+msgid "Advanced Settings"
+msgstr "Geavanceerde instellingen"
+
+msgid "Airtime Fairness"
+msgstr "Airtime Fairness"
+
+msgid "All changes will have effect after system boot."
+msgstr ""
+
+msgid "Allow power saving mode"
+msgstr "Stroombesparingsmodus toestaan"
+
+msgid ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+msgstr ""
+"Laat het apparaat overschakelen naar de stroombesparingsmodus wanneer er "
+"minder verkeer over ethernet wordt gedetecteerd. Waarschuwing: De "
+"latentietijd kan lijden als er zeer langzaam dataverkeer wordt gedetecteerd."
+
+msgid "Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio."
+msgstr "Toegestane aantal SSID's: {allowedRadioVapNumber} voor {radioBand}-radio."
+
+msgid ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+msgstr ""
+"Toegestane aantal SSID's: {num1} voor {radio1} radio en {num2} voor "
+"{radio2}  radio"
+
+msgid "Always"
+msgstr "Altijd"
+
+msgid "An error has occurred. Please click the arrow to reload the page!"
+msgstr "Er is een fout opgetreden.  Klik op de pijl om de pagina opnieuw te laden!"
+
+msgid "An error occurred during device configuration:"
+msgstr "Bij de configuratie van het apparaat is een fout opgetreden:"
+
+msgid "Answer of"
+msgstr "Antwoord van"
+
+msgid "Authentication Server"
+msgstr "Authenticatieserver"
+
+msgid "Authentication Server:"
+msgstr "Authenticatieserver:"
+
+msgid "Authentication passphrase:"
+msgstr "Authenticatiecode:"
+
+msgid "Authentication type:"
+msgstr "Authenticatiesoort:"
+
+msgid "Auto"
+msgstr "Automatisch"
+
+msgid "Auto *"
+msgstr "Automatisch *"
+
+msgid "Automatic *"
+msgstr "Automatisch *"
+
+msgid "Automatic Update:"
+msgstr "Automatische firmwareactualisering:"
+
+msgid "Automatic shutoff"
+msgstr "Automatische uitschakeling"
+
+msgid "Automatically search for updates:"
+msgstr "Zoek automatisch naar updates:"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Band Steering"
+msgstr "Band Steering"
+
+msgid "Basic"
+msgstr "Basis"
+
+msgid "Basic Settings"
+msgstr "Standaardinstellingen"
+
+msgid "Bridge"
+msgstr "Brug"
+
+msgid "Bridge to Remote Access Point (WDS)"
+msgstr "Brug tot verwijderd zendstation (WDS)"
+
+msgid "Browse ..."
+msgstr "Bestand selecteren ..."
+
+msgid "Button Settings"
+msgstr "Instellingen voor de bedieningsknoppen"
+
+msgid "Buttons"
+msgstr "Bedieningsknoppen"
+
+msgid "Buzzer"
+msgstr "Zoemer"
+
+msgid "Buzzer duration: {dur} s"
+msgstr "Signaalduur: {dur} sec."
+
+msgid "CPU load:"
+msgstr "CPU-benutting:"
+
+msgid "Cancel"
+msgstr "Afbreking"
+
+msgid "Cancelled!"
+msgstr "Procedure afgebroken!"
+
+msgid "Cannot retrieve current network information."
+msgstr "Actuele netwerkinformatie kan niet worden bepaald."
+
+msgid "Caps Lock is on!"
+msgstr "De vastzetknop is ingedrukt!"
+
+msgid "Central Coordinator"
+msgstr "Centrale coördinator"
+
+msgid "Change Password"
+msgstr "Toegangswachtwoord wijzigen"
+
+msgid "Change Password?"
+msgstr "Wachtwoord wijzigen?"
+
+msgid "Change language"
+msgstr "Taal wijzigen"
+
+msgid "Changing"
+msgstr "Wijzigen"
+
+msgid "Channel"
+msgstr "Zendkanaal"
+
+msgid "Channel 2.4 GHz:"
+msgstr "2,4-GHz-zendkanaal"
+
+msgid "Channel 5 GHz:"
+msgstr "5-GHz-zendkanaal"
+
+msgid "Channel bandwidth:"
+msgstr "Zendkanaalbreedte:"
+
+msgid "Channel:"
+msgstr "Zendkanaal:"
+
+msgid "Checking firmware image ..."
+msgstr "Firmwarebestand wordt gecontroleerd..."
+
+msgid "Checking session ID ..."
+msgstr "Sessie-ID wordt gecontroleerd..."
+
+msgid "Choose between different LED notification levels."
+msgstr "Selecteer het LED-gedrag."
+
+msgid "Choose the CCo setting of your device in P2P mode."
+msgstr "Kies de CCo-instelling van uw apparaat voor de p2p-modus."
+
+msgid ""
+"Choose the compatibility mode of your device. This setting can help "
+"increase performance with technologies such as VDSL."
+msgstr ""
+"Selecteert de compatibiliteitsmodus. Het is een speciale modus voor het "
+"oplossen van zelden voorkomende verbindingsproblemen die kunnen optreden "
+"als gevolg van de wisselwerking met andere technieken zoals VDSL."
+
+msgid "Choose the network mode of your device."
+msgstr "Kies de netwerkmodus van uw apparaat."
+
+msgid "Click here to update."
+msgstr "Hier klikken om te bewerken"
+
+msgid "Click to edit"
+msgstr "Hier klikken om het gegeven te bewerken"
+
+msgid "Clicking the button below will restart your device."
+msgstr "Door klikken op \"Nieuw starten\" wordt het apparaat opnieuw gestart."
+
+msgid "Clone SSID"
+msgstr "SSID klonen"
+
+msgid "Clone SSID via WPS"
+msgstr "SSID via WPS klonen"
+
+msgid "Compatibility Mode"
+msgstr "Compatibiliteitsmodus"
+
+msgid "Compatibility Mode:"
+msgstr "Compatibiliteitsmodus:"
+
+msgid "Compatibility mode"
+msgstr "Compatibiliteitsmodus"
+
+msgid "Config Sync"
+msgstr "Config Sync"
+
+msgid "Configuration"
+msgstr "Configuratie"
+
+msgid "Configuration file too large (maximum {maxSize} bytes)!"
+msgstr "Het configuratiebestand is te groot (maximaal {maxSize} byte)!"
+
+msgid "Configuration of time quotas"
+msgstr "Configuratie"
+
+msgid "Configuration successfully restored!"
+msgstr "Configuratie met succes hersteld!"
+
+msgid "Configured VLANs:"
+msgstr "Geconfigureerde VLAN's:"
+
+msgid "Confirm"
+msgstr "Bevestigen"
+
+msgid "Confirm new password:"
+msgstr "Nieuw wachtwoord bevestigen:"
+
+msgid "Connected AVLNs:"
+msgstr "Verbonden AVLN's:"
+
+msgid "Connected WiFi Clients"
+msgstr "Verbonden WiFi-apparaten"
+
+msgid "Connected WiFi clients:"
+msgstr "Verbonden WiFi-apparaten:"
+
+msgid "Connected clients"
+msgstr "Verbonden apparaten"
+
+msgid "Connected devices:"
+msgstr "Verbonden apparaten:"
+
+msgid "Connected powerline devices"
+msgstr "Verbonden Powerline-apparaten"
+
+msgid "Connected since"
+msgstr "Verbonden sinds"
+
+msgid "Connection"
+msgstr "Verbinding"
+
+msgid "Connection lost!"
+msgstr "Verbinding onderbroken!"
+
+msgid "Connection status:"
+msgstr "Verbindingsstatus:"
+
+msgid "Contact:"
+msgstr "Contact:"
+
+msgid "Current Firmware"
+msgstr "Actuele firmware"
+
+msgid "Current channel"
+msgstr "Actueel zendkanaal"
+
+msgid "Current channel:"
+msgstr "Actueel zendkanaal:"
+
+msgid "DES"
+msgstr "DES"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DHCP Server"
+msgstr "DHCP-server"
+
+msgid "Data rates:"
+msgstr "Transmissiesnelheden:"
+
+msgid "Date"
+msgstr "Datum"
+
+msgid "Date and Time"
+msgstr "Datum en tijd"
+
+msgid "Days"
+msgstr "Dagen"
+
+msgid "Default"
+msgstr "Standaard"
+
+msgid "Default VLAN"
+msgstr "Standaard-VLAN"
+
+msgid "Default gateway:"
+msgstr "Standaard-Gateway:"
+
+msgid "Default mode *"
+msgstr "Standaardinstelling *"
+
+msgid "Delete"
+msgstr "Wissen"
+
+msgid "Delete SSID?"
+msgstr "SSID wissen?"
+
+msgid "Device ID"
+msgstr "Apparaat-ID"
+
+msgid "Device MAC"
+msgstr "MAC adres van het apparaat"
+
+msgid "Device Name"
+msgstr "Apparaatnaam"
+
+msgid "Device rebooted.  Please login again!"
+msgstr "Apparaat werd opnieuw gestart. Meld u opnieuw aan!"
+
+msgid "Disable Radio?"
+msgstr "Radio uitgeschakeld?"
+
+msgid "Disable guest network {duration}"
+msgstr "Gastennetwerk uitschakelen {duration}"
+
+msgid "Disabled"
+msgstr "Uitgeschakeld"
+
+msgid ""
+"Disabling the reset button also forbids resetting the configuration to "
+"factory defaults."
+msgstr ""
+"Door deactivering van de resetknop vervalt de mogelijkheid om het apparaat "
+"opnieuw te starten of de toestand bij levering te herstellen."
+
+msgid ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+msgstr ""
+"Wilt u werkelijk het PLC-wachtwoord wijzigen? De verbinding met dit "
+"apparaat kan verloren raken."
+
+msgid ""
+"Do you really want to enable the WiFi Schedule without adding time quotas? "
+"The Wifi will be turned off permanently."
+msgstr ""
+"Als u geen regel configureert, is WiFi langdurig niet te gebruiken tot u "
+"een regel toevoegt of de tijdbesturing deactiveert."
+
+msgid "Do you really want to remove this SSID?"
+msgstr "Wilt u de SSID werkelijk verwijderen?"
+
+msgid ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+msgstr ""
+"Wilt u werkelijk de toestand bij levering van het apparaat resetten? Het "
+"apparaat start vervolgens opnieuw."
+
+msgid "Do you really want to restart the device?"
+msgstr "Wilt u het apparaat werkelijk opnieuw starten?"
+
+msgid "Domain Master"
+msgstr "Domein master"
+
+msgid "Download Firmware Version for Update"
+msgstr "Geactualiseerde firmware downloaden"
+
+msgid "Download Firmware:"
+msgstr "Firmware downloaden:"
+
+msgid "Dynamic VLAN"
+msgstr "Dynamische VLAN"
+
+msgid "Enable"
+msgstr "Inschakelen"
+
+msgid "Enable or completely disable the LEDs of your device."
+msgstr "LED's van dit apparaat inschakelen of geheel uitschakelen"
+
+msgid "Enable or disable the buttons of your devices."
+msgstr "Activeer of deactiveer de functie van de bedieningsknop op het apparaat."
+
+msgid "Enabled"
+msgstr "Ingeschakeld"
+
+msgid "Enabled ({url})"
+msgstr "Ingeschakeld ({url})"
+
+msgid "Enabled SSIDs"
+msgstr "Ingeschakelde SSID's"
+
+msgid "Enabled SSIDs:"
+msgstr "Ingeschakelde SSID's:"
+
+msgid ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+msgstr ""
+"Mesh functionality optimaliseert uw WiFi-netwerk en maakt het beter "
+"bruikbaar voor mobiele WiFi-apparaten. Roaming lost het probleem op met "
+"vastgelopen WiFi-apparaten. Met Band Steering en Dynamic Frequency "
+"Selection is een probleemloze WiFi-toegang ook voor veel WiFi-apparaten "
+"mogelijk. Airtime Fairness optimaliseert de bandbreedte in netwerken met "
+"veel WiFi-apparaten."
+
+msgid "Encryption:"
+msgstr "Codering:"
+
+msgid "End IP Address:"
+msgstr "End-IP-adres:"
+
+msgid "End Point"
+msgstr "Apparaat"
+
+msgid "End address equals start address!"
+msgstr "Eindadres is hetzelfde als startadres!"
+
+msgid "End address must be larger than start address!"
+msgstr "Eindadres moet groter zijn dan startadres!"
+
+msgid "End node"
+msgstr "End node"
+
+msgid "Enter WPS PIN"
+msgstr "Voer de WPS PIN"
+
+msgid "Enter an alphanumeric community name (max 24 characters)"
+msgstr "Voer een alfanumerieke communitynaam in (max. 24 tekens)."
+
+msgid "Enter an alphanumeric username (max 24 characters)"
+msgstr "Voer een alfanumerieke gebruikersnaam in (max. 24 tekens)."
+
+msgid "Enter between 1 and 64 of these characters:"
+msgstr "Tussen 1 en 64 van deze tekens invoeren:"
+
+msgid "Enter between 8 and 130 of these characters:"
+msgstr "Tussen 8 en 130 van deze tekens invoeren:"
+
+msgid "Enter between 8 and 64 of these characters:"
+msgstr "Tussen 8 en 64 van deze tekens invoeren:"
+
+msgid "Enter new password:"
+msgstr "Nieuw wachtwoord invoeren:"
+
+msgid "Enter old password:"
+msgstr "Huidig wachtwoord invoeren:"
+
+msgid "Enter the PIN of the device to be added to your WiFi network."
+msgstr ""
+"Voer de PIN van het apparaat in dat aan uw WiFi-netwerk moet worden "
+"toegevoegd."
+
+msgid ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+msgstr ""
+"Voer het PLC-wachtwoord in dat het apparaat moet gebruiken voor toegang tot "
+"uw Powerline-netwerk. Alle apparaten in een Powerline-netwerk moeten "
+"hetzelfde PLC-wachtwoord gebruiken."
+
+msgid "Error code:"
+msgstr "Foutcode:"
+
+msgid "Error occured! Please try again!"
+msgstr "Er is een fout opgetreden! Probeer het opnieuw!"
+
+msgid "Error while processing WPS!  ->  ("
+msgstr "Er is een fout opgetreden tijdens de WPS-procedure! -&gt; ("
+
+msgid "Ethernet"
+msgstr "Ethernet"
+
+msgid "Europe/Aachen"
+msgstr "Europa/Aken"
+
+msgid "Europe/Amsterdam"
+msgstr "Europa/Amsterdam"
+
+msgid "Europe/Andorra"
+msgstr "Europa/Andorra"
+
+msgid "Europe/Athens"
+msgstr "Europa/Athene"
+
+msgid "Europe/Belgrade"
+msgstr "Europa/Belgrado"
+
+msgid "Europe/Berlin"
+msgstr "Europa/Berlijn"
+
+msgid "Europe/Bratislava"
+msgstr "Europa/Bratislava"
+
+msgid "Europe/Brussels"
+msgstr "Europa/Brussel"
+
+msgid "Europe/Bucharest"
+msgstr "Europa/Boekarest"
+
+msgid "Europe/Budapest"
+msgstr "Europa/Boedapest"
+
+msgid "Europe/Busingen"
+msgstr "Europa/Busingen"
+
+msgid "Europe/Chisinau"
+msgstr "Europa/Chisinau"
+
+msgid "Europe/Copenhagen"
+msgstr "Europa/Kopenhagen"
+
+msgid "Europe/Dublin"
+msgstr "Europa/Dublin"
+
+msgid "Europe/Gibraltar"
+msgstr "Europa/Gibraltar"
+
+msgid "Europe/Guernsey"
+msgstr "Europa/Guernsey"
+
+msgid "Europe/Helsinki"
+msgstr "Europa/Helsinki"
+
+msgid "Europe/Isle of Man"
+msgstr "Europa/Isle of Man"
+
+msgid "Europe/Istanbul"
+msgstr "Europa/Istanboel"
+
+msgid "Europe/Jersey"
+msgstr "Europa/Jersey"
+
+msgid "Europe/Kaliningrad"
+msgstr "Europa/Kaliningrad"
+
+msgid "Europe/Kiev"
+msgstr "Europa/Kiev"
+
+msgid "Europe/Lisbon"
+msgstr "Europa/Lissabon"
+
+msgid "Europe/Ljubljana"
+msgstr "Europa/Ljubljana"
+
+msgid "Europe/London"
+msgstr "Europa/Londen"
+
+msgid "Europe/Luxembourg"
+msgstr "Europa/Luxemburg"
+
+msgid "Europe/Madrid"
+msgstr "Europa/Madrid"
+
+msgid "Europe/Malta"
+msgstr "Europa/Malta"
+
+msgid "Europe/Mariehamn"
+msgstr "Europa/Mariehamn"
+
+msgid "Europe/Minsk"
+msgstr "Europa/Minsk"
+
+msgid "Europe/Monaco"
+msgstr "Europa/Monaco"
+
+msgid "Europe/Moscow"
+msgstr "Europa/Moskou"
+
+msgid "Europe/Oslo"
+msgstr "Europa/Oslo"
+
+msgid "Europe/Paris"
+msgstr "Europa/Parijs"
+
+msgid "Europe/Podgorica"
+msgstr "Europa/Podgorica"
+
+msgid "Europe/Prague"
+msgstr "Europa/Praag"
+
+msgid "Europe/Riga"
+msgstr "Europa/Riga"
+
+msgid "Europe/Rome"
+msgstr "Europa/Rome"
+
+msgid "Europe/Samara"
+msgstr "Europa/Samara"
+
+msgid "Europe/San Marino"
+msgstr "Europa/San Marino"
+
+msgid "Europe/Sarajevo"
+msgstr "Europa/Sarajevo"
+
+msgid "Europe/Simferopol"
+msgstr "Europa/Simferopol"
+
+msgid "Europe/Skopje"
+msgstr "Europa/Skopje"
+
+msgid "Europe/Sofia"
+msgstr "Europa/Sofia"
+
+msgid "Europe/Stockholm"
+msgstr "Europa/Stockholm"
+
+msgid "Europe/Tallinn"
+msgstr "Europa/Tallinn"
+
+msgid "Europe/Tirane"
+msgstr "Europa/Tirana"
+
+msgid "Europe/Uzhgorod"
+msgstr "Europa/Uzhhorod"
+
+msgid "Europe/Vaduz"
+msgstr "Europa/Vaduz"
+
+msgid "Europe/Vatican"
+msgstr "Europa/Vaticaanstad"
+
+msgid "Europe/Vienna"
+msgstr "Europa/Wenen"
+
+msgid "Europe/Vilnius"
+msgstr "Europa/Vilnius"
+
+msgid "Europe/Volgograd"
+msgstr "Europa/Wolgograd"
+
+msgid "Europe/Warsaw"
+msgstr "Europa/Warschau"
+
+msgid "Europe/Zagreb"
+msgstr "Europa/Zagreb"
+
+msgid "Europe/Zaporozhye"
+msgstr "Europa/Saporoshje"
+
+msgid "Europe/Zurich"
+msgstr "Europa/Zürich"
+
+msgid "Fast transition (802.11r)"
+msgstr "Fast transition (802.11r)"
+
+msgid "Features"
+msgstr "Functies"
+
+msgid "Find Me"
+msgstr "Vind mij!"
+
+msgid "Firmware"
+msgstr "Firmware"
+
+msgid "Firmware file:"
+msgstr "Firmwarebestand:"
+
+msgid "Firmware image too large (maximum {maxSize} bytes)!"
+msgstr "Firmwarebestand is te groot (maximum {maxSize} byte)!"
+
+msgid "Firmware updated successfully."
+msgstr "De actualisering van de firmware is gelukt."
+
+msgid "Firmware version:"
+msgstr "Firmwareversie:"
+
+msgid "Force Node Type"
+msgstr "Force Node-type"
+
+msgid "Force node type"
+msgstr "Force Node-type"
+
+msgid "Free memory:"
+msgstr "Vrij werkgeheugen:"
+
+msgid "Frequency band"
+msgstr "Frequentieband"
+
+msgid "Frequency band:"
+msgstr "Frequentieband:"
+
+msgid "Fri"
+msgstr "Vr."
+
+msgid "Friday"
+msgstr "Vrijdag"
+
+msgid "From"
+msgstr "van"
+
+msgid "Get IP configuration from a DHCP server"
+msgstr "Netwerkinstellingen van een DHCP-server overnemen"
+
+msgid "Guest network"
+msgstr "Gastnetwerk"
+
+msgid "Guest network configuration"
+msgstr "Configuratie "
+
+msgid "HH"
+msgstr "HH"
+
+msgid "Here"
+msgstr "Hier"
+
+msgid ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking Start configuration."
+msgstr ""
+"Hier kunt u een nieuw Powerline-apparaat aan uw netwerk toevoegen. Voer "
+"eerst de op de achterzijde afgedrukte beveiligings-ID in, steek het "
+"apparaat vervolgens in een stopcontact en bevestig daarna door te klikken "
+"op \"Configuratie starten\"."
+
+msgid ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+msgstr ""
+"Hier kent u aan uw netwerk een persoonlijk PLC-wachtwoord toe (in plaats "
+"van het automatisch gegenereerde PLC-wachtwoord)."
+
+msgid ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+msgstr ""
+"Hier kunt u de tijdsperiodes definiëren wanneer uw WiFi ingeschakeld moet "
+"worden."
+
+msgid "Hide SSID:"
+msgstr "SSID verbergen"
+
+msgid "Hide password"
+msgstr "Wachtwoord verbergen"
+
+msgid "High ({power} dBm)"
+msgstr "Hoog ({power} dBm)"
+
+msgid ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+msgstr ""
+"IEEE 802.11r (ook wel \"Fast Roaming\" genoemd) versnelt het inloggen van "
+"een WiFi-apparaat op dit WiFi zendstation. Voorwaarde: Het apparaat was al "
+"verbonden met een ander WiFi zendstation met 802.11r ingeschakeld, "
+"identieke netwerknaam (SSID) en identieke encryptie. 802.11r is helaas niet "
+"compatibel met elk WiFi-apparaat. Als u problemen ondervindt met een van uw "
+"apparaten, deactiveer dan deze optie."
+
+msgid "IP Configuration"
+msgstr "IP-configuratie"
+
+msgid "IP address is inside the loopback network!"
+msgstr "IP-adres ligt binnen het loopback-adresgebied!"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv4 address"
+msgstr "IPv4-adres"
+
+msgid "IPv4 address of DNS server"
+msgstr "IPv4-adres van de DNS-server"
+
+msgid "IPv4 address of default gateway"
+msgstr "IPv4-adres van de standaard-Gateway"
+
+msgid "IPv4 configuration successfully updated."
+msgstr "IPv4-configuratie met succes geactualiseerd."
+
+msgid "IPv4 netmask"
+msgstr "IPv4-subnetmasker"
+
+msgid "IPv4/IPv6"
+msgstr "IPv4/IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "IPv6 Address"
+msgstr "IPv6-adres"
+
+msgid ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be resetted to factory defaults."
+msgstr ""
+"Als u doorgaat worden alle instellingen van het toestel gewist en de "
+"toestand bij levering wordt hersteld."
+
+msgid ""
+"In this case, instead of the automatically generated PLC password, assign a "
+"separate PLC password to your network manually."
+msgstr ""
+"In plaats van het automatisch gegenereerde PLC-wachtwoord wijst u aan uw "
+"netwerk hier een individueel PLC-wachtwoord toe."
+
+msgid "Incorrect password!"
+msgstr "Ongeldig wachtwoord"
+
+msgid "Individual ({power} dBm)"
+msgstr "Individueel ({power} dBm)"
+
+msgid "Individual transmit power:"
+msgstr "Individueel zendvermogen:"
+
+msgid "Indoor use only:"
+msgstr "Alleen voor binnengebruik:"
+
+msgid "Information"
+msgstr "Informatie"
+
+msgid "Interfaces"
+msgstr "Netwerkinterfaces"
+
+msgid "Interval"
+msgstr "Gebied"
+
+msgid "Invalid IP address!"
+msgstr "Ongeldig IP-adres"
+
+msgid ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Ongeldige sleutel! Voer minimaal 8 en maximaal 63 tekens in. Toegestane "
+"speciale tekens: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ?  "
+"< >"
+
+msgid "Invalid Mac address!"
+msgstr "Ongeldig MAC-adres"
+
+msgid "Invalid SSID!  Please enter between 1 and 32 characters)."
+msgstr "Ongeldige SSID! Voer minimaal 1 en maximaal 32 tekens in."
+
+msgid ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"Ongeldige SSID! Voer minimaal 1 en maximaal 32 tekens in. Toegestane "
+"speciale tekens: ! @ # $ % ^ &amp; * ) ( [ ] { } | , : ; ' \" ` ~ + = . "
+
+msgid "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+msgstr "Ongeldige VLAN-ID! Voer een waarde tussen 1 en 4094 in!"
+
+msgid "Invalid hostname or IP address!"
+msgstr "Ongeldige hostnaam of ongeldig IP-adres"
+
+msgid "Invalid hostname or IP/Subnet!"
+msgstr "Ongeldige hostnaam of ongeldig IP-/netwerkmasker"
+
+msgid ""
+"Invalid hostname! Allowed are the digits 0-9, upper- and lowercase letters "
+"a-z, A-Z and the hyphen. The hostname cannot start or end with a hyphen."
+msgstr ""
+"Ongeldige hostnaam! Toegestane tekens zijn 0-9, a-z, A-Z en koppelteken "
+"„-&ldquo;. De hostnaam mag niet met een koppelteken beginnen of eindigen."
+
+msgid ""
+"Invalid key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ?  < >"
+msgstr ""
+"Ongeldige sleutel! Voer minimaal 8 en maximaal 63 tekens in. Toegestane "
+"speciale tekens: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ?  "
+"< >"
+
+msgid "Invalid name!"
+msgstr "Ongeldige naam!"
+
+msgid "Invalid netmask!"
+msgstr "Ongeldig subnetmasker"
+
+msgid "Invalid port! Please enter a value between 1 and 65535."
+msgstr "Ongeldige poort! Voer een waarde in tussen 1 en 65535!"
+
+msgid ""
+"Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed "
+"characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+msgstr ""
+"Ongeldige sleutel! Voer 64 tekens in. Toegestane tekens: 0 1 2 3 4 5 6 7 8 "
+"9 a b c d e f"
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 123."
+msgstr "Ongeldig gebied voor 2,4 GHz. Geef een waarde aan tussen 0 en 123. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Ongeldig gebied voor 2,4 GHz. Geef een waarde aan tussen 0 en 123. Ongeldig "
+"gebied voor 5 GHz. Geef een waarde aan tussen 0 en 200. "
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 127."
+msgstr "Ongeldig gebied voor 2,4 GHz. Geef een waarde aan tussen 0 en 127. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Ongeldig gebied voor 2,4 GHz. Geef een waarde aan tussen 0 en 127. Ongeldig "
+"gebied voor 5 GHz. Geef een waarde aan tussen 0 en 200. "
+
+msgid "Invalid range for 5 GHz, please enter a value between 0 and 200."
+msgstr "Ongeldig gebied voor 5 GHz. Geef een waarde aan tussen 0 en 200. "
+
+msgid "Key:"
+msgstr "Code:"
+
+msgid "LAN"
+msgstr "LAN"
+
+msgid "LED Settings"
+msgstr "LED-instellingen"
+
+msgid "LEDs"
+msgstr "LED's"
+
+msgid "Lease Time:"
+msgstr "Leaseduur:"
+
+msgid "Leasetime"
+msgstr "Leaseduur"
+
+msgid "Licenses"
+msgstr "Licenties"
+
+msgid "Loading ..."
+msgstr "Wordt geladen ..."
+
+msgid "Local Device"
+msgstr "Lokaal apparaat"
+
+msgid "Local time:"
+msgstr "Actuele datum en tijd:"
+
+msgid "Location:"
+msgstr "Locatie:"
+
+msgid "Log Level"
+msgstr "Niveau"
+
+msgid "Login"
+msgstr "Aanmelden"
+
+msgid "Logout"
+msgstr "Afmelden"
+
+msgid "Logs"
+msgstr "Resultaten"
+
+msgid "Low ({power} dBm)"
+msgstr "Laag ({power} dBm)"
+
+msgid "MAC Address"
+msgstr "MAC-adres"
+
+msgid "MAC Addresses"
+msgstr "MAC-adressen"
+
+msgid "MAC address"
+msgstr "MAC-adres"
+
+msgid "MBytes"
+msgstr "MByte"
+
+msgid "MD5"
+msgstr "MD5"
+
+msgid "MHz"
+msgstr "MHz"
+
+msgid "MM"
+msgstr "mm"
+
+msgid "Management"
+msgstr "Beheer"
+
+msgid "Management VLAN"
+msgstr "Management-VLAN"
+
+msgid "Management VLAN:"
+msgstr "Management-VLAN:"
+
+msgid "Manual"
+msgstr "Handboek"
+
+msgid "Manufacturer"
+msgstr "Producent"
+
+msgid "Mask:"
+msgstr "Voorvoegsel:"
+
+msgid "Max. clients:"
+msgstr "Max. aantal apparaten:"
+
+msgid "Max. transmit power:"
+msgstr "Max. zendvermogen:"
+
+msgid "Mbit/s"
+msgstr "Mbps"
+
+msgid "Medium ({power} dBm)"
+msgstr "Gemiddeld ({power} dBm)"
+
+msgid "Members"
+msgstr "Leden"
+
+msgid "Mesh WiFi"
+msgstr "Mesh-WiFi"
+
+msgid "Message"
+msgstr "Melding"
+
+msgid "Minimum lease time is two minutes!"
+msgstr "Minimale leaseduur is twee minuten!"
+
+msgid "Mode:"
+msgstr "Modus:"
+
+msgid "Mon"
+msgstr "Ma."
+
+msgid "Mon-Fri"
+msgstr "Ma-vr"
+
+msgid "Monday"
+msgstr "Maandag"
+
+msgid "N/A"
+msgstr "N.v.t."
+
+msgid "NTP configuration successfully saved."
+msgstr "Tijdserver-configuratie is met succes opgeslagen."
+
+msgid "Name server:"
+msgstr "DNS-server:"
+
+msgid "Name:"
+msgstr "Naam:"
+
+msgid ""
+"Navigating away from this page will discard all your changes. Really "
+"proceed?"
+msgstr "Als u de pagina verlaat, gaan uw wijzigingen verloren. Wilt u toch doorgaan?"
+
+msgid "Neighbour network"
+msgstr "Naburige netwerken"
+
+msgid "Network"
+msgstr "Netwerk"
+
+msgid "Network Mode:"
+msgstr "Netwerkmodus:"
+
+msgid "Network interface"
+msgstr "Netwerkadapter"
+
+msgid "Network name"
+msgstr "Netwerknaam"
+
+msgid "Network name 2.4 + 5 GHz"
+msgstr "Netwerknaam 2,4 + 5 GHz"
+
+msgid "Network name:"
+msgstr "Netwerknaam:"
+
+msgid "Never"
+msgstr "Nooit"
+
+msgid ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+msgstr ""
+"Er is een nieuw Powerline-apparaat gevonden. Wacht tot de procedure is "
+"afgesloten. Dit kan 20 sec. duren."
+
+msgid "No Log Information"
+msgstr "Geen resultaten beschikbaar."
+
+msgid ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"companions security ID."
+msgstr ""
+"Er is geen nieuw Powerline-apparaat gevonden. Controleer of de "
+"beveiligings-ID correct werd ingevoerd."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button.\n"
+"              Please wait until the process has been finished."
+msgstr ""
+"Er is geen Powerline-apparaat gevonden. Controleer of de betreffende "
+"PLC-toetsen correct zijn ingedrukt.\n"
+"Wacht tot de procedure is afgesloten.\n"
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button. Please wait until the process has been finished."
+msgstr ""
+"Er is geen Powerline-apparaat gevonden. Druk op de PLC-knop en wacht tot de "
+"procedure is afgesloten."
+
+msgid "No RADIUS server configured"
+msgstr "Er is geen RADIUS-server geconfigureerd!"
+
+msgid "No VLAN"
+msgstr "Geen VLAN"
+
+msgid "No WiFi radio enabled. Please enable a radio."
+msgstr ""
+"Alle WiFi-zendstations zijn uitgeschakeld. Schakel minstens één "
+"WiFi-zendstation in."
+
+msgid "No clients are connected"
+msgstr "Geen apparaten verbonden."
+
+msgid "No encryption (not recommended)"
+msgstr "\"Geen codering\" is een niet-aanbevolen instelling."
+
+msgid "No file selected."
+msgstr "Geen bestand geselecteerd."
+
+msgid "Not a valid input such as \"1d 12h 30m\"!"
+msgstr "Geen geldige invoer zoals \"1d 12h 30m\"!"
+
+msgid "Not configured"
+msgstr "Niet geconfigureerd."
+
+msgid "Not connected"
+msgstr "Niet verbonden"
+
+msgid "Now press the WPS button on the device being added to your WiFi network."
+msgstr ""
+"Druk nu op de WiFi-knop op het apparaat dat u aan het WiFi-netwerk wilt "
+"toevoegen."
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Off"
+msgstr "Uit"
+
+msgid "Old password was incorrect!"
+msgstr "Het actuele wachtwoord is niet correct!"
+
+msgid "Only for development"
+msgstr "Alleen voor ontwikkelingsdoeleinden"
+
+msgid "Open"
+msgstr "Open"
+
+msgid "Open (OWE)"
+msgstr "Open (OWE)"
+
+msgid "Operate as DHCP server"
+msgstr "Als DHCP-server gebruiken"
+
+msgid "Origin"
+msgstr "Bron"
+
+msgid "Outside of the address range!"
+msgstr "Buiten het adresgebied!"
+
+msgid "Overview"
+msgstr "Overzicht"
+
+msgid "Overview of the wifi schedule settings"
+msgstr "Overzicht"
+
+msgid "PAIR"
+msgstr "PLC-verbinding opbouwen"
+
+msgid "PLC Connections"
+msgstr "PLC-verbindingen"
+
+msgid "PLC Name"
+msgstr "PLC-naam"
+
+msgid "PLC domain name"
+msgstr "PLC-Domain-naam"
+
+msgid "PLC firmware version:"
+msgstr "PLC-firmwareversie:"
+
+msgid "PLC password"
+msgstr "PLC-wachtwoord"
+
+msgid "PLC role"
+msgstr "PLC-rol"
+
+msgid "Pairing"
+msgstr "Pairing – PLC-verbinding opbouwen"
+
+msgid "Parental Control"
+msgstr "Kinderbeveiliging"
+
+msgid "Password"
+msgstr "Wachtwoord"
+
+msgid "Password:"
+msgstr "Wachtwoord:"
+
+msgid "Passwords do not match!"
+msgstr "De wachtwoorden zijn niet identiek!"
+
+msgid "Peer isolation"
+msgstr "Communicatie tussen WiFi-apparaten verbieden"
+
+msgid "Please activate the WiFi network to enable Clone SSID via WPS"
+msgstr "Schakel het WiFi-netwerk in om de WiFi Clone-modus te starten."
+
+msgid "Please click the + button to add a SSID."
+msgstr "Klik op de knop + om een nieuwe SSID toe te voegen."
+
+msgid "Please click the + button to add a VLAN"
+msgstr "Klik op de knop + om een nieuwe VLAN toe te voegen"
+
+msgid "Please click the + button to add a new schedule."
+msgstr "Klik op de knop + om een nieuwe regel toe te voegen."
+
+msgid "Please click the + button to add a time server"
+msgstr "Klik op de knop + om een nieuwe tijdserver toe te voegen."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+msgstr ""
+"Configureer {here} een statisch WiFi-zendkanaal. Houd er rekening mee dat "
+"de andere zendstations in uw netwerk overeenkomstig geconfigureerd worden. "
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+msgstr ""
+"Configureer {here} een statisch WiFi-zendkanaal. Houd er rekening mee dat "
+"de andere zendstations in uw netwerk overeenkomstig geconfigureerd worden. "
+"Advies: kies een zendkanaal tussen 36 en 48 om zendkanaalwijzigingen "
+"vanwege DFS te vermijden."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+msgstr ""
+"Configureer {here} een statisch WiFi-zendkanaal. Houd er rekening mee dat "
+"voor andere zendstations in de brug hetzelfde WiFi-zendkanaal ingesteld "
+"moet worden. Advies: zendkanaal 100."
+
+msgid ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+msgstr ""
+"Leg de naam van het netwerk vast en klik ter bevestiging op het "
+"diskette-symbool."
+
+msgid "Please enter a password to secure the access to your device."
+msgstr ""
+"Voer een wachtwoord in om de toegang tot de configuratie van het apparaat "
+"te beperken."
+
+msgid ""
+"Please enter a value of at least 15 minutes or 0 to disable the "
+"functionality!"
+msgstr ""
+"Voer een tijd van meer dan 15 minuten in. Voor het deactiveren van de "
+"functie voert u 0 in."
+
+msgid "Please log in with your password!"
+msgstr "Meld u met uw wachtwoord aan!"
+
+msgid "Please login again."
+msgstr "Meld u opnieuw aan:"
+
+msgid "Please note that WiFi schedule Settings have precedence over these settings!"
+msgstr ""
+"Houd er rekening mee dat de instellingen in het tijdbesturingselement "
+"voorrang hebben boven deze instellingen!"
+
+msgid ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+msgstr ""
+"Houd er rekening mee dat veel tablets/smartphones hun WiFi-verbinding "
+"permanent in stand houden!"
+
+msgid ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, exit Config Sync on the device, that you want to configure "
+"or switch separately."
+msgstr ""
+"Let erop dat altijd in het gehele netwerk de WiFi in- of uitgeschakeld "
+"wordt.  Beëindig daarom eerst Config Sync op het apparaat dat u apart wilt "
+"configureren of schakelen."
+
+msgid "Please select the configuration file to be restored to this device."
+msgstr "Selecteer het configuratiebestand dat u wilt herstellen."
+
+msgid "Please select the firmware file to be loaded onto this device."
+msgstr "Selecteer het firmwarebestand dat op uw apparaat moet worden geladen."
+
+msgid "Port"
+msgstr "Aansluiting"
+
+msgid "Port number"
+msgstr "Poortnummer"
+
+msgid "Port:"
+msgstr "Poort:"
+
+msgid "Power Management"
+msgstr "Energiemanagement"
+
+msgid "Powerline"
+msgstr "Powerline"
+
+msgid "Powerline LED"
+msgstr "Powerline-LED"
+
+msgid "Powerline Network Mode"
+msgstr "Powerline-netwerkmodus"
+
+msgid "Powerline Password"
+msgstr "Powerline-wachtwoord"
+
+msgid "Powerline Settings"
+msgstr "Powerline-standby-instellingen"
+
+msgid "Powerline button"
+msgstr "PLC-knop"
+
+msgid "Powerline encryption already in progress by external or previous request."
+msgstr "Het Powerline-netwerk wordt nog opgebouwd."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+msgstr ""
+"Het Powerline-netwerk wordt nog opgebouwd. Wacht tot de procedure is "
+"afgesloten. Nog 120 seconden."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+msgstr ""
+"Het Powerline-netwerk wordt nog opgebouwd. Wacht tot de procedure is "
+"afgesloten. Nog {time} seconden."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished.\n"
+"              This can take up to 1 minute."
+msgstr ""
+"De integratie in een Powerline-netwerk met beveiligings-ID werd gestart. "
+"Wacht tot de procedure is afgesloten. Dit kan 60 sec. duren."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished. This can take up to 1 minute."
+msgstr ""
+"De integratie in een Powerline pro-netwerk met beveiligings-ID werd "
+"gestart. Wacht tot de procedure is afgesloten. Dit kan 60 sec. duren."
+
+msgid "Powerline encryption was stopped by external event."
+msgstr "De opbouw van het Powerline-netwerk werd gestopt."
+
+msgid "Powerline encryption was successfully stopped."
+msgstr "Het Powerline-netwerk is met succes geïnstalleerd."
+
+msgid ""
+"Powerline standby is enabled! Disabling all radios will interrupt the "
+"connection to this website if the device can only be reached via Powerline "
+"and it enters standby mode. Do you really want to disable this radio?"
+msgstr ""
+"De Powerline-standby-modus is ingeschakeld! De uitschakeling van alle "
+"frequentiebanden onderbreekt de verbinding met deze website als dit "
+"apparaat via Powerline met het netwerk is verbonden en naar de "
+"standby-modus overgaat. Wilt u deze frequentieband werkelijk uitschakelen?"
+
+msgid "Powersave mode"
+msgstr "Stroombesparingsmodus"
+
+msgid "Preferred:"
+msgstr "Bij voorkeur:"
+
+msgid "Profile"
+msgstr "PLC-profiel"
+
+msgid "Programming firmware image..."
+msgstr "Firmwarebestand wordt geschreven ..."
+
+msgid "Protocol:"
+msgstr "Protocol:"
+
+msgid "Public community (read only):"
+msgstr "Public community (lezend):"
+
+msgid "Public source:"
+msgstr "Public source:"
+
+msgid "Quota"
+msgstr "Tijdcontingent"
+
+msgid "Quota has been depleted"
+msgstr "Het tijdcontingent is afgelopen."
+
+msgid "Quota is currently depleting"
+msgstr "Het tijdcontingent loopt af."
+
+msgid "RADIUS"
+msgstr "RADIUS"
+
+msgid "RADIUS configuration applied successfully"
+msgstr "RADIUS-configuratie met succes opgeslagen."
+
+msgid "RADIUS configuration is incomplete"
+msgstr "RADIUS-configuratie is niet volledig!"
+
+msgid "RADIUS password:"
+msgstr "RADIUS-wachtwoord:"
+
+msgid "RADIUS username:"
+msgstr "RADIUS-gebruikersnaam:"
+
+msgid "Radio"
+msgstr "Radio"
+
+msgid "Radio channel:"
+msgstr "WiFi-zendkanaal:"
+
+msgid "Radio:"
+msgstr "Radio:"
+
+msgid "Radios"
+msgstr "Radio's"
+
+msgid "Rate (Mbit/s)"
+msgstr "Snelheid (Mbps)"
+
+msgid "Reboot"
+msgstr "Opnieuw starten"
+
+msgid "Reboot Device"
+msgstr "Apparaat opnieuw starten"
+
+msgid "Reboot device?"
+msgstr "Apparaat opnieuw starten?"
+
+msgid "Receive (Mbps)"
+msgstr "Ontvangen (Mbps)"
+
+msgid "Recommended: 20 MHz"
+msgstr "Aanbevolen waarde: 20 MHz"
+
+msgid "Recommended: 802.11g/n"
+msgstr "Aanbevolen waarde: 802.11g/n"
+
+msgid "Recommended: 802.11n/ac"
+msgstr "Aanbevolen waarde: 802.11n/ac"
+
+msgid "Recommended: Auto"
+msgstr "Aanbevolen waarde: auto"
+
+msgid "Recommended: Auto, 1, 6, 11"
+msgstr "Aanbevolen waarde: auto, 1, 6, 11"
+
+msgid "Reduced"
+msgstr "Gereduceerd"
+
+msgid "Remote syslog server:"
+msgstr "Remote-Syslog-server:"
+
+msgid "Reset"
+msgstr "Resetten"
+
+msgid "Reset Configuration"
+msgstr "Configuratie apparaat resetten"
+
+msgid "Reset button"
+msgstr "Resetknop"
+
+msgid "Reset device to factory defaults?"
+msgstr "Toestand bij levering van apparaat resetten?"
+
+msgid "Reset/Restart button"
+msgstr "Resetknop"
+
+msgid "Restore"
+msgstr "Herstellen"
+
+msgid "Restore Device Configuration From File"
+msgstr "Configuratie van apparaat uit bestand herstellen"
+
+msgid "Role"
+msgstr "Rol"
+
+msgid "Run Mode"
+msgstr "Run Mode"
+
+msgid "Rx rate (Mbit/s)"
+msgstr "Ontvangstsnelheid (Mbps)"
+
+msgid "SHA"
+msgstr "SHA"
+
+msgid "SNMP version:"
+msgstr "SNMP-versie:"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID already exists"
+msgstr "SSID bestaat al!"
+
+msgid "SSID broadcast"
+msgstr "SSID zichtbaar"
+
+msgid "SSID:"
+msgstr "SSID:"
+
+msgid "SSIDs"
+msgstr "SSID's"
+
+msgid "Sat"
+msgstr "Za."
+
+msgid "Sat+Sun"
+msgstr "Za+Zo"
+
+msgid "Saturday"
+msgstr "Zaterdag"
+
+msgid "Save"
+msgstr "Opslaan"
+
+msgid "Save Configuration to File"
+msgstr "Configuratie van apparaat als bestand opslaan"
+
+msgid "Scan"
+msgstr "Scannen"
+
+msgid "Scan interval (min.):"
+msgstr "Testinterval (min.):"
+
+msgid "Scan interval in minutes"
+msgstr "Scan-interval in minuten"
+
+msgid "Schedule"
+msgstr "Tijdbesturing"
+
+msgid "Schedule configuration successfully saved."
+msgstr "De wijziging is met succes opgeslagen."
+
+msgid "Search ..."
+msgstr "Zoeken ..."
+
+msgid "Secret:"
+msgstr "Geheim"
+
+msgid "Secured"
+msgstr "Beveiligd"
+
+msgid "Security"
+msgstr "Codering"
+
+msgid "Security ID:"
+msgstr "Beveiligings-ID:"
+
+msgid "Security passphrase:"
+msgstr "Veiligheidscode:"
+
+msgid "Security status:"
+msgstr "Coderingsstatus:"
+
+msgid "Security type:"
+msgstr "Soort codering:"
+
+msgid "Security:"
+msgstr "Codering:"
+
+msgid "Select Interval"
+msgstr "Interval kiezen"
+
+msgid ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+msgstr ""
+"Selecteer een periode. Na afloop wordt het gastnetwerk automatisch "
+"uitgeschakeld."
+
+msgid "Select day"
+msgstr "Dag kiezen"
+
+msgid "Select time limit"
+msgstr "Selecteer tijdslimiet"
+
+msgid "Selected time period:"
+msgstr "Geselecteerde tijdsperiode:"
+
+msgid "Serial number:"
+msgstr "Volgnummer:"
+
+msgid "Server is outside of the network and unreachable!"
+msgstr "Het adres ligt buiten het subnet en is daarom niet bereikbaar!"
+
+msgid "Server-side NAS key"
+msgstr "Serverinterne NAS-code"
+
+msgid "Server:"
+msgstr "Server:"
+
+msgid "Service"
+msgstr "Dienst"
+
+msgid "Service Name"
+msgstr "Dienstnaam"
+
+msgid "Services"
+msgstr "Diensten"
+
+msgid "Set a duration and click \"Start\" to activate the buzzer for this time."
+msgstr ""
+"Stel de duur van de zoemer in om uw apparaat te vinden en klik op "
+"\"Starten\"."
+
+msgid "Setting 0 prevents any clients from connecting to the SSID!"
+msgstr "De instelling 0 verhindert de aanmelding van alle apparaten bij deze SSID!"
+
+msgid "Settings"
+msgstr "Instellingen"
+
+msgid ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually, after having re-established the connection."
+msgstr ""
+"Als het apparaat met de gewijzigde instellingen niet meer bereikbaar "
+"is,moet u de pagina opnieuw laden nadat u de verbinding hersteld hebt."
+
+msgid "Show password"
+msgstr "Wachtwoord tonen"
+
+msgid "Signal (dBm)"
+msgstr "Signaal (dBm)"
+
+msgid "Signal quality (%)"
+msgstr "Signaalkwaliteit (%)"
+
+msgid "Since"
+msgstr "Sinds"
+
+msgid ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+msgstr ""
+"Sommige SSID's werden uitgeschakeld, omdat de RADIUS-configuratie ongeldig "
+"is geworden."
+
+msgid "Some SSIDs are updated to new RADIUS configuration"
+msgstr "Sommige SSID's werden gewijzigd, omdat de RADIUS-configuratie gewijzigd is."
+
+msgid ""
+"Some event has been occoured. Determining reason, this can take up to 1 "
+"minute."
+msgstr ""
+"Er is een probleem opgetreden. Het kan tot 1 minuut duren tot de oorzaak "
+"wordt gevonden."
+
+msgid "Standby"
+msgstr "Standby"
+
+msgid "Start"
+msgstr "Starten"
+
+msgid "Start Configuration"
+msgstr "Configuratie starten"
+
+msgid "Start IP Address:"
+msgstr "Start-IP-adres:"
+
+msgid "Start address equals end address!"
+msgstr "Startadres is hetzelfde als eindadres"
+
+msgid "Start address must be smaller than end address!"
+msgstr "Startadres moet kleiner zijn dan eindadres!"
+
+msgid "Start pairing"
+msgstr "PLC-verbindingsopbouw starten"
+
+msgid ""
+"Start the pairing process by pressing the PLC button on an adapter in your "
+"existing network first. Then, click on \"PAIR\"."
+msgstr ""
+"Druk eerst op de PLC-knop van een adapter van uw bestaande netwerk en start "
+"vervolgens de pairing-procedure met een\n"
+"klik op \"PAIR\"."
+
+msgid "Start time and end time cannot be equal! Please correct your time quotas!"
+msgstr "Start- en eindtijd kunnen niet hetzelfde zijn! Wijzig de tijden!"
+
+msgid "Static IPv4 Address"
+msgstr "Statisch IPv4-adres"
+
+msgid "Station is not connected"
+msgstr "Apparaat niet verbonden"
+
+msgid "Status"
+msgstr "Status"
+
+msgid "Status:"
+msgstr "Status:"
+
+msgid "Stop"
+msgstr "Stoppen"
+
+msgid "Stop Configuration"
+msgstr "Configuratie stoppen"
+
+msgid "Stop time must be after start time! Please correct your time quotas!"
+msgstr "De eindtijd moet na de starttijd liggen! Wijzig de tijden!"
+
+msgid "Subnet mask:"
+msgstr "Subnetmasker:"
+
+msgid "Subnet:"
+msgstr "Subnetmasker:"
+
+msgid "Successfully deleted."
+msgstr "Met succes gewist."
+
+msgid "Sun"
+msgstr "Zo."
+
+msgid "Sunday"
+msgstr "Zondag"
+
+msgid "Support"
+msgstr "Support"
+
+msgid "Supported"
+msgstr "Ondersteund"
+
+msgid "Switch your WiFi network on first so that your guest network can be used."
+msgstr "Schakel eerst uw wifi-netwerk in om uw gastnetwerk te kunnen gebruiken."
+
+msgid "System"
+msgstr "Systeem"
+
+msgid "System Information"
+msgstr "Systeeminformatie"
+
+msgid "System contact:"
+msgstr "Contactpersoon:"
+
+msgid "System location:"
+msgstr "Locatie van apparaat:"
+
+msgid "System name (hostname):"
+msgstr "Apparaatnaam (hostnaam):"
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using a mobile "
+"devices such as smartphones or tablets. While scanning the QR code the "
+"credentials for the guestnetwork will be transfered to your mobile device."
+msgstr ""
+"Met de QR‐code kunt u de verbinding met het gastnetwerk gemakkelijk voor "
+"mobiele apparaten (bijv. smartphone of tablet) installeren. Bij het scannen "
+"van de code worden de coderingsinstellingen van het gastnetwerk automatisch "
+"aan het betreffende mobiele apparaat doorgegeven."
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+msgstr ""
+"Met de QR‐code kunt u de verbinding met het gastnetwerk gemakkelijk voor "
+"mobiele apparaten (bijv. smartphone of tablet) installeren. Bij het scannen "
+"van de code worden de coderingsinstellingen van het gastnetwerk automatisch "
+"aan het betreffende mobiele apparaat doorgegeven."
+
+msgid ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+msgstr "Schakel WiFi in zodat u de naburige netwerken kunt zien."
+
+msgid "The device has a new IP address. Please login at the new URL:"
+msgstr "Het apparaat heeft een nieuw IP-adres. Meld u opnieuw aan:"
+
+msgid ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+msgstr ""
+"De complete WiFi-configuratie wordt aan alle voor Config Sync geschikte "
+"apparaten van uw netwerk doorgegeven."
+
+msgid "The guest network does only allow access to the internet."
+msgstr "Het gastnetwerk staat alleen de toegang tot het internet toe."
+
+msgid "The guestnetwork does only allow access to the internet."
+msgstr "Het gastnetwerk staat alleen de toegang tot het internet toe."
+
+msgid "The host name is too long. Max. 32 characters allowed."
+msgstr "De hostnaam moet uit 1 tot 32 tekens bestaan."
+
+msgid "The host name is too short. Please enter at least 1 character."
+msgstr "De hostnaam is te kort. Voer minimaal 1 teken in."
+
+msgid "The maximum number ({maxVLANs}) of VLANs has been configured."
+msgstr "Het maximale aantal ({maxVLANs}) VLAN's is bereikt."
+
+msgid "The password contains an invalid character:"
+msgstr "Het wachtwoord bevat een ongeldig teken:"
+
+msgid ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+msgstr ""
+"De beveiligings-ID bestaat uit vier door een koppelteken gescheiden groepen "
+"met steeds vier hoofdletters."
+
+msgid ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+msgstr ""
+"Het geselecteerde configuratiebestand is ongeldig. Kies een passend bestand "
+"voor dit apparaat."
+
+msgid ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+msgstr ""
+"Het geselecteerde firmwarebestand is ongeldig. Kies een passend "
+"firmwarebestand voor dit apparaat."
+
+msgid ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+msgstr ""
+"De omschakeling tussen zomer- en wintertijd gebeurt automatisch door de "
+"tijdserver. U hoeft daarom geen handmatige instellingen uit te voeren."
+
+msgid "There are no configured time servers."
+msgstr "Er zijn geen tijdservers geconfigureerd."
+
+msgid "There is a newer version."
+msgstr "Actuele versie"
+
+msgid "There is newer version:"
+msgstr "Actuele versie: "
+
+msgid ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+msgstr ""
+"Daarbij behoren de volgende instellingen:WiFi-netwerk, gastnetwerk, "
+"Mesh-functionaliteit, tijdbesturings- en tijdserverinstellingen."
+
+msgid "This is the broadcast address!"
+msgstr "Dit is het broadcast-adres!"
+
+msgid "This is the device's IP address!"
+msgstr "Dit is het IP-adres van het apparaat!"
+
+msgid "This is the network address!"
+msgstr "Dit is het subnetadres!"
+
+msgid "This page will be reloaded automatically, when the action has finished."
+msgstr "Deze pagina wordt na beëindiging van de actie automatisch opnieuw geladen."
+
+msgid "This server already exists."
+msgstr "Deze server bestaat al!"
+
+msgid "Thu"
+msgstr "Do."
+
+msgid "Thursday"
+msgstr "Donderdag"
+
+msgid "Time Server"
+msgstr "Tijdserver"
+
+msgid "Time Server (NTP)"
+msgstr "Tijdserver (NTP)"
+
+msgid "Time Server:"
+msgstr "Tijdserver:"
+
+msgid "Time Zone"
+msgstr "Tijdzone"
+
+msgid "Time server"
+msgstr "Tijdserver "
+
+msgid "Time zone configuration successfully saved."
+msgstr "De tijdzoneconfiguratie is met succes opgeslagen."
+
+msgid "Time zone:"
+msgstr "Tijdzone:"
+
+msgid "To"
+msgstr "tot"
+
+msgid "Total memory:"
+msgstr "Gehele werkgeheugen:"
+
+msgid "Transmit (Mbps)"
+msgstr "Zenden (Mbps)"
+
+msgid "Tue"
+msgstr "Di."
+
+msgid "Tuesday"
+msgstr "Dinsdag"
+
+msgid "Turn off the WiFi"
+msgstr "WiFi uitschakelen"
+
+msgid "Tx rate (Mbit/s)"
+msgstr "Zendsnelheid (Mbps)"
+
+msgid "Tx-Power"
+msgstr "Zendvermogen"
+
+msgid "Type"
+msgstr "Type"
+
+msgid "Type error"
+msgstr "Fouttype"
+
+msgid "Type status"
+msgstr "Statustype"
+
+msgid "UNPAIR"
+msgstr "PLC-verbinding verbreken"
+
+msgid "UTC"
+msgstr "UTC"
+
+msgid "Unpair device"
+msgstr "PLC-verbinding van het apparaat verbreken"
+
+msgid "Unpairing"
+msgstr "Pairing beëindigen – PLC-verbinding verbreken"
+
+msgid "Unsecured"
+msgstr "Onbeveiligd"
+
+msgid "Untagged"
+msgstr "Untagged"
+
+msgid "Update firmware"
+msgstr "Update uitvoeren"
+
+msgid "Update firmware to latest version"
+msgstr "Firmware op laatste versie geactualiseerd"
+
+msgid "Update table"
+msgstr "Tabel actualiseren"
+
+msgid "Uploading ..."
+msgstr "Transmissie actief..."
+
+msgid "Uploading firmware image ..."
+msgstr "Firmwarebestand wordt doorgegeven..."
+
+msgid "Uptime:"
+msgstr "Apparaatlooptijd:"
+
+msgid "Use common settings"
+msgstr "Zelfde instellingen"
+
+msgid ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button on the device which you want to join "
+"your Powerline network! Afterwards, click the \"Start configuration\" "
+"button."
+msgstr ""
+"Apparaten via PLC-knop in het Powerline-netwerk opnemen. Druk binnen 2 "
+"minuten op de PLC-knop van het apparaat dat aan uw Powerline-netwerk "
+"toegevoegd moet worden. Klik daarna op de knop \"Configuratie starten\"."
+
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+msgid "Username:"
+msgstr "Gebruikersnaam:"
+
+msgid "Using the encryption button"
+msgstr "M.b.v. PLC-knop"
+
+msgid "VLAN ID"
+msgstr "VLAN-ID"
+
+msgid "VLAN ID must be unique!"
+msgstr "VLAN-ID bestaat al!"
+
+msgid "VLAN ID out of range (1-4094)!"
+msgstr "Ongeldige VLAN-ID! Voer een waarde tussen 1 en 4094 in."
+
+msgid "VLAN Name"
+msgstr "VLAN-naam"
+
+msgid "VLAN name must be unique!"
+msgstr "VLAN-naam moet uniek zijn!"
+
+msgid "VLAN {id}"
+msgstr "VLAN {id}"
+
+msgid "VLAN:"
+msgstr "VLAN:"
+
+msgid "VLANs"
+msgstr "VLAN's"
+
+msgid "Valid:"
+msgstr "Geldig:"
+
+msgid "Very High ({power} dBm)"
+msgstr "Zeer hoog ({power} dBm)"
+
+msgid "Via security ID"
+msgstr "M.b.v. beveiligings-ID"
+
+msgid "WDS bridge configuration updated."
+msgstr "Configuratie van de WiFi-brug met succes opgeslagen."
+
+msgid "WMM Power-Save (U-APSD)"
+msgstr "WMM Power-Save (U-APSD)"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA/WPA2 Personal"
+msgstr "WPA/WPA2-Personal"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WPA2 Enterprise"
+msgstr "WPA2-Enterprise"
+
+msgid "WPA2 Personal"
+msgstr "WPA2-Personal"
+
+msgid "WPA2 Personal *"
+msgstr "WPA2-Personal *"
+
+msgid "WPA2 pre-shared key:"
+msgstr "WPA2-code:"
+
+msgid "WPA3/WPA2 Personal"
+msgstr "WPA3/WPA2 Personal"
+
+msgid "WPS"
+msgstr "WPS"
+
+msgid "WPS Clone Mode failed: "
+msgstr "De WPS-Clone-Mode is mislukt:"
+
+msgid "WPS Clone Mode succeeded!"
+msgstr "De WPS-Clone-Mode was succesvol!"
+
+msgid "WPS Mode:"
+msgstr "WPS-modus:"
+
+msgid "WPS PIN"
+msgstr "WPS-PIN"
+
+msgid "WPS PIN connect applied successfully"
+msgstr "De verbinding via WPS-PIN was succesvol!"
+
+msgid "WPS PIN connect failed"
+msgstr "De verbinding via WPS-PIN is mislukt!"
+
+msgid "WPS PIN is active..."
+msgstr "WPS-PIN is actief..."
+
+msgid "WPS PIN is not valid. Use a 4- or 8-digit number."
+msgstr "De WPS-PIN is niet correct. Voer het juiste getal met 4 of 8 tekens in."
+
+msgid "WPS Pushbutton"
+msgstr "WPS-drukknop"
+
+msgid "WPS Pushbutton is active..."
+msgstr "WPS-drukknop is actief..."
+
+msgid "WPS connect applied successfully"
+msgstr "De verbinding via WPS was succesvol!"
+
+msgid "WPS connect failed"
+msgstr "De verbinding via WPS is mislukt!"
+
+msgid "WPS is active..."
+msgstr "WPS is actief..."
+
+msgid "Warning"
+msgstr "Waarschuwing"
+
+msgid "Wed"
+msgstr "Wo."
+
+msgid "Wednesday"
+msgstr "Woensdag"
+
+msgid "Welcome to your {product}"
+msgstr "Welkom bij uw {product}"
+
+msgid ""
+"When scan interval is set to 0 this function is disabled. Recommended: 240 "
+"minutes"
+msgstr "Voor het deactiveren van de functie voert u 0 in. Advies: 240 minuten"
+
+msgid ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+msgstr ""
+"Indien „Automatisch verbinding verbreken“ activeert is wordt het "
+"WiFi-netwerk pas dan uitgeschakeld als het laatste WiFi-apparaat zich bij "
+"zijn access point heeft afgemeld."
+
+msgid "WiFi"
+msgstr "WiFi"
+
+msgid "WiFi Clients"
+msgstr "WiFi-apparaten"
+
+msgid "WiFi Clone"
+msgstr "WiFi Clone"
+
+msgid ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+msgstr ""
+"Met behulp van WiFi Clone kunt u de WiFi-toegangsdata (netwerknaam en "
+"WiFi-wachtwoord) van een ander WiFi-zendstation voor dit apparaat "
+"automatisch overnemen. Start daartoe de configuratieprocedure en druk "
+"daarna op de WPS-knop op het apparaat waarvan de WiFi-toegangsdata (SSID en "
+"WiFi-wachtwoord) overgenomen moeten worden."
+
+msgid "WiFi Clone is active..."
+msgstr "WiFi Clone is geactiveerd ..."
+
+msgid "WiFi LED"
+msgstr "WiFi-LED"
+
+msgid "WiFi Network"
+msgstr "WiFi-netwerk"
+
+msgid "WiFi Protected Setup (WPS) - Configuration"
+msgstr "WiFi Protected Setup (WPS) - configuratie"
+
+msgid "WiFi button"
+msgstr "WiFi-knop"
+
+msgid "WiFi convenience function"
+msgstr "Automatisch verbinding verbreken"
+
+msgid "WiFi disabled"
+msgstr "WiFi uitgeschakeld"
+
+msgid "WiFi enabled"
+msgstr "WiFi ingeschakeld"
+
+msgid "WiFi network"
+msgstr "WiFi-netwerk"
+
+msgid "WiFi network mode:"
+msgstr "WiFi-netwerkmodus:"
+
+msgid "WiFi networks"
+msgstr "WiFi-netwerken"
+
+msgid "WiFi schedule control"
+msgstr "WiFi-tijdbesturing"
+
+msgid "WiFi schedule settings"
+msgstr "Instellingen"
+
+msgid "Wifi Status"
+msgstr "WiFi-status"
+
+msgid ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+msgstr ""
+"U kunt de configuratie van het apparaat op uw computer als bestand opslaan "
+"en later herstellen of het opgeslagen configuratiebestand aan een ander "
+"apparaat doorgeven."
+
+msgid "You can find the latest firmware"
+msgstr "De actuele Firmware vindt u "
+
+msgid ""
+"You can limit access to certain Wi-Fi devices by the MAC address. Please "
+"define the time periods during which Wi-Fi access is allowed."
+msgstr ""
+"Hier kunt u aan de hand van het MAC-adres toegangsbeperkingen instellen "
+"voor bepaalde WiFi apparaten. Geef daarbij tijdintervallen aan waarin de "
+"apparaten toegang moeten krijgen."
+
+msgid "You can no longer create SSIDs for the {radioBand} radio"
+msgstr "U kunt niet meer SSID's voor de {radioBand}-frequentieband toevoegen!"
+
+msgid "You can't have 2 quotas for same mac address! Please correct your quota!"
+msgstr ""
+"Eén apparaat kan niet gelijktijdig meerdere tijdcontingenten "
+"gebruiken.Wijzig de tijden!"
+
+msgid "You can't have overlapping quotas for the same station!"
+msgstr ""
+"Overlapping van meerdere tijdsquota's voor het zelfde apparaat is niet "
+"mogelijk!"
+
+msgid "You cannot combine the time period and time limit for a WiFi device!"
+msgstr ""
+"U kunt geen tijdsperiode en tijdcontingent voor een WiFi-apparaat "
+"combineren!"
+
+msgid ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+msgstr ""
+"U werd om veiligheidsredenen automatisch in het systeem afgemeld. Meld u "
+"opnieuw aan!"
+
+msgid "You have successfully changed the Configuration for your device's LEDs."
+msgstr "U hebt het gedrag van de LED met succes gewijzigd."
+
+msgid "You have successfully changed the configuration for your device's buttons."
+msgstr "U hebt het gedrag van de bedieningsknop met succes gewijzigd."
+
+msgid "You have successfully configured an SSID"
+msgstr "De configuratie van de SSID is met succes opgeslagen."
+
+msgid "You have successfully deleted an SSID"
+msgstr "De SSID is met succes gewist."
+
+msgid "You have successfully updated the compatibility mode setting."
+msgstr "De compatibiliteitsmodus  is met succes geactualiseerd."
+
+msgid "You have successfully updated your Config sync settings"
+msgstr "De Config Sync-instellingen zijn met succes opgeslagen."
+
+msgid "You have successfully updated your PLC network settings."
+msgstr "De PLC-configuratie is met succes geactualiseerd."
+
+msgid "You have successfully updated your PLC password."
+msgstr "Uw PLC-wachtwoord is met succes geactualiseerd."
+
+msgid "You have successfully updated your Powerline encryption password"
+msgstr "Uw PLC-wachtwoord is met succes geactualiseerd."
+
+msgid "You have successfully updated your Powerline network mode"
+msgstr "U hebt de Powerline-netwerkmodus met succes geactualiseerd."
+
+msgid "You have successfully updated your Powerline pro network."
+msgstr "Uw Powerline pro-netwerk is met succes uitgebreid."
+
+msgid "You have successfully updated your system management configuration"
+msgstr "Beheerinstellingen zijn met succes opgeslagen."
+
+msgid "You have successfully {enableOrDisableTerm} {name} service."
+msgstr "{name} werd met succes {enableOrDisableTerm}."
+
+msgid ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+msgstr ""
+"U moet meer verschillende tekenklassen gebruiken (hoofdletters, kleine "
+"letters, cijfers en speciale tekens)."
+
+msgid "You've successfully changed your password."
+msgstr "Wachtwoord met succes gewijzigd."
+
+msgid "You've successfully configured the WiFi network."
+msgstr "Uw WiFi-netwerk is met succes geconfigureerd."
+
+msgid "You've successfully configured the radio."
+msgstr "De configuratie van de WiFi-frequentieband is met succes opgeslagen."
+
+msgid "Your Powerline pro network is disabled."
+msgstr "Uw Powerline pro-netwerk is uitgeschakeld."
+
+msgid "Your WiFi is not encrypted. Please activate the encryption."
+msgstr "Uw WiFi-netwerk is niet gecodeerd. Activeer de codering."
+
+msgid ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+msgstr ""
+"Het Powerline-apparaat wordt automatisch in de stroombesparingsmodus "
+"gebracht als er geen ethernetverbindingen actief zijn (d.w.z. geen "
+"ingeschakelde netwerktoestellen op de netwerkinterfaces zijn aangesloten) "
+"en WiFi uitgeschakeld is."
+
+msgid "call ubus"
+msgstr "ubus oproepen"
+
+msgid "connected"
+msgstr "verbonden"
+
+msgid "current session"
+msgstr "Actuele sessie:"
+
+msgid "current ubus request queue"
+msgstr "Actuele ubus-request-wachtrij"
+
+msgid "d, "
+msgstr "T, "
+
+msgid "dLAN button"
+msgstr "PLC-knop"
+
+msgid "daily"
+msgstr "dagelijks"
+
+msgid "devolo"
+msgstr "devolo"
+
+msgid "disabled"
+msgstr "gedeactiveerd"
+
+msgid "display {num} of {all}"
+msgstr "toon {num} van {all}"
+
+msgid "enabled"
+msgstr "geactiveerd"
+
+msgid "mimo_full"
+msgstr "Full power"
+
+msgid "mimo_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "mimo_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "n/a"
+msgstr "N.v.t."
+
+msgid "no PLC connections"
+msgstr "geen verbindingen PLC"
+
+msgid "none"
+msgstr "geen"
+
+msgid "not configured"
+msgstr "niet geconfigureerd"
+
+msgid "off"
+msgstr "uit"
+
+msgid "on"
+msgstr "aan"
+
+msgid "one day, {hours}:{minutes}:{seconds}"
+msgstr "Een dag, {hours}:{minutes}:{seconds}"
+
+msgid "pending"
+msgstr "Wordt verbonden..."
+
+msgid "reduced"
+msgstr "gereduceerd"
+
+msgid "s"
+msgstr "sec."
+
+msgid "siso_full"
+msgstr "Full power"
+
+msgid "siso_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "siso_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "static"
+msgstr "statisch"
+
+msgid "ubus Test"
+msgstr "ubus-test"
+
+msgid "ubus callee"
+msgstr "ubus-opgeroepene:"
+
+msgid "ubus data"
+msgstr "ubus-gegevens:"
+
+msgid "ubus section"
+msgstr "ubus-sectie:"
+
+msgid "unknown"
+msgstr "Onbekend"
+
+msgid "unknown LED"
+msgstr "onbekende LED"
+
+msgid "unknown button"
+msgstr "onbekende knop"
+
+msgid "v1 + v2c"
+msgstr "v1 + v2c"
+
+msgid "v3"
+msgstr "v3"
+
+msgid "{days} days, {hours}:{minutes}:{seconds}"
+msgstr "{days} dagen, {hours}:{minutes}:{seconds}"
+
+msgid "{duration} remaining"
+msgstr "{duration} resterende"
+
+msgid "{frequency} GHz Radio"
+msgstr "{frequency}-GHz-frequentieband"
\ No newline at end of file
diff --git a/www/assets/i18n/pt.po b/www/assets/i18n/pt.po
new file mode 100644
index 0000000..fa1c47c
--- /dev/null
+++ b/www/assets/i18n/pt.po
@@ -0,0 +1,2717 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "1"
+msgstr "1"
+
+msgid "10"
+msgstr "10"
+
+msgid "60"
+msgstr "60"
+
+msgid "120"
+msgstr "120"
+
+msgid " Device is not enabled,"
+msgstr "O dispositivo não está ligado,"
+
+msgid " Encryption disabled,"
+msgstr "Codificação desligada,"
+
+msgid " SSID is hidden,"
+msgstr "A rede WiFi está oculta"
+
+msgid " The minimum password length is {minlength} character(s)."
+msgstr "A extensão mínima da palavra-passe é de {minlength} caracteres."
+
+msgid "(2.4 GHz)"
+msgstr "(2,4 GHz)"
+
+msgid "(5 GHz)"
+msgstr "(5 GHz)"
+
+msgid "(Radar detected on {channel})"
+msgstr "(Radar reconhecido em {channel})"
+
+msgid "(dynamic)"
+msgstr "(dinâmico)"
+
+msgid ")\n"
+msgstr ""
+
+msgid ")<br/>"
+msgstr ")<br/>"
+
+msgid "* Automatic"
+msgstr "* Automático"
+
+msgid "* indicates default option"
+msgstr "* Configuração padrão"
+
+msgid "* marks this device."
+msgstr "* Este dispositivo"
+
+msgid "* offers best performance"
+msgstr "* Melhor desempenho"
+
+msgid "00PM"
+msgstr "24"
+
+msgid "01AM"
+msgstr "01"
+
+msgid "01PM"
+msgstr "13"
+
+msgid "02AM"
+msgstr "02"
+
+msgid "02PM"
+msgstr "14"
+
+msgid "03AM"
+msgstr "03"
+
+msgid "03PM"
+msgstr "15"
+
+msgid "04AM"
+msgstr "04"
+
+msgid "04PM"
+msgstr "16"
+
+msgid "05AM"
+msgstr "05"
+
+msgid "05PM"
+msgstr "17"
+
+msgid "06AM"
+msgstr "06"
+
+msgid "06PM"
+msgstr "18"
+
+msgid "07AM"
+msgstr "07"
+
+msgid "07PM"
+msgstr "19"
+
+msgid "08AM"
+msgstr "08"
+
+msgid "08PM"
+msgstr "20"
+
+msgid "09AM"
+msgstr "09"
+
+msgid "09PM"
+msgstr "21"
+
+msgid "1 h"
+msgstr "1 h"
+
+msgid "10AM"
+msgstr "10"
+
+msgid "10PM"
+msgstr "22"
+
+msgid "11AM"
+msgstr "11"
+
+msgid "11PM"
+msgstr "23"
+
+msgid "12 h"
+msgstr "12 h"
+
+msgid "12AM"
+msgstr "00"
+
+msgid "12PM"
+msgstr "12"
+
+msgid "15 min"
+msgstr "15 min"
+
+msgid "18 h"
+msgstr "18 h"
+
+msgid "2 h"
+msgstr "2 h"
+
+msgid "2.4 + 5 GHz network name"
+msgstr "Nome da rede 2,4 + 5 GHz"
+
+msgid "2.4 GHz"
+msgstr "2,4 GHz"
+
+msgid "2.4 GHz + 5 GHz"
+msgstr "2,4 GHz + 5 GHz"
+
+msgid "2.4 GHz Radio"
+msgstr "Bandas de frequências dos 2,4 GHz"
+
+msgid "2.4 GHz WiFi LED"
+msgstr "LED WiFi 2,4 GHz"
+
+msgid "2.4 GHz network name"
+msgstr "Nome da rede 2,4 GHz"
+
+msgid "2.4 GHz network name:"
+msgstr "Nome da rede 2,4 GHz:"
+
+msgid "20 MHz"
+msgstr "20 MHz"
+
+msgid "20/40 MHz"
+msgstr "20/40 MHz"
+
+msgid "24 h"
+msgstr "24 h"
+
+msgid "3 h"
+msgstr "3 h"
+
+msgid "30 min"
+msgstr "30 min."
+
+msgid "36 h"
+msgstr "36 h"
+
+msgid "4 h"
+msgstr "4 h"
+
+msgid "40 MHz"
+msgstr "40 MHz"
+
+msgid "48 h"
+msgstr "48 h"
+
+msgid "5 GHz"
+msgstr "5 GHz"
+
+msgid "5 GHz Radio"
+msgstr "Banda de frequências dos 5 GHz"
+
+msgid "5 GHz WiFi LED"
+msgstr "LED WiFi 5 GHz"
+
+msgid "5 GHz network name"
+msgstr "Nome da rede 5 GHz"
+
+msgid "5 GHz network name:"
+msgstr "Nome da rede 5 GHz:"
+
+msgid "5 h"
+msgstr "5 h"
+
+msgid "5 min"
+msgstr "5 min"
+
+msgid "6 h"
+msgstr "6 h"
+
+msgid "80 MHz"
+msgstr "80 MHz"
+
+msgid "802.11a/n/ac"
+msgstr "802.11 a/n/ac"
+
+msgid "802.11ac"
+msgstr "802.11 ac"
+
+msgid "802.11b/g/n"
+msgstr "802.11 b/g/n"
+
+msgid "802.11g/n"
+msgstr "802.11 g/n"
+
+msgid "802.11n"
+msgstr "802.11 n"
+
+msgid "802.11n/ac"
+msgstr "802.11 n/ac"
+
+msgid "A RADIUS password is required!"
+msgstr "Palavra-passe RADIUS não introduzida!"
+
+msgid "A RADIUS username is required!"
+msgstr "Nome de utilizador RADIUS não introduzido!"
+
+msgid "A new firmware version is available."
+msgstr ""
+
+msgid ""
+"A passphrase (8-63 characters) or a pre-shared key (64 characters) is "
+"required"
+msgstr ""
+"Uma chave necessária: 8 a 63 caracteres (passphrase) ou 64 caracteres "
+"(pre-shared key)"
+
+msgid "A pre-shared key is required (8-64 characters)!"
+msgstr "Chave necessária (64 caracteres, pre-shared key)!"
+
+msgid "AES"
+msgstr "AES"
+
+msgid "AVLN"
+msgstr "AVLN"
+
+msgid "Accounting Server"
+msgstr "Servidor de cálculo"
+
+msgid "Accounting Server:"
+msgstr "Servidor de cálculo:"
+
+msgid "Active"
+msgstr "Ativo"
+
+msgid "Add Devices"
+msgstr "Adicionar dispositivos"
+
+msgid "Add devices to the WiFi network using the soft push button."
+msgstr "Registar o dispositivo na rede WiFi através do botão WPS."
+
+msgid "Add devices to the WiFi network using your PIN."
+msgstr "Registar dispositivo na rede WiFi através do PIN"
+
+msgid "Add new SSID"
+msgstr "Adicionar novos SSID"
+
+msgid "Add new Time Server"
+msgstr "Adicionar novo servidor de horas"
+
+msgid "Add new VLAN"
+msgstr "Adicionar novo VLAN"
+
+msgid "Add new server"
+msgstr "Adicionar novo servidor"
+
+msgid "Address/Subnet:"
+msgstr "Endereço/Sub-rede:"
+
+msgid "Address:"
+msgstr "Endereço:"
+
+msgid "Advanced Settings"
+msgstr "Definições avançadas"
+
+msgid "Airtime Fairness"
+msgstr "Airtime Fairness"
+
+msgid "All changes will have effect after system boot."
+msgstr ""
+
+msgid "Allow power saving mode"
+msgstr "Permitir modo de poupança de energia"
+
+msgid ""
+"Allow the device to switch to power save mode when reduced traffic over "
+"ethernet is detected. Warning: Latency may suffer when very slow traffic is "
+"detected."
+msgstr ""
+"Permita que o dispositivo entre no modo de poupança de energia quando for "
+"detectado tráfego reduzido pela ethernet. Aviso: a latência pode sofrer se "
+"um tráfego muito lento for detectado."
+
+msgid "Allowed number of SSIDs: {allowedRadioVapNumber} for {radioBand} radio."
+msgstr "Número permitido de SSIDs: {allowedRadioVapNumber} para Radio {radioBand}."
+
+msgid ""
+"Allowed number of SSIDs: {num1} for {radio1} radio and {num2} for {radio2} "
+"radio."
+msgstr ""
+"Número permitido de SSIDs: {num1} para {radio1} Radio e {num2} para Radio "
+"{radio2} "
+
+msgid "Always"
+msgstr "Sempre"
+
+msgid "An error has occurred. Please click the arrow to reload the page!"
+msgstr "Ocorreu um erro.  Clique na seta para voltar a carregar a página!"
+
+msgid "An error occurred during device configuration:"
+msgstr "Ocorreu um erro durante a configuração do dispositivo:"
+
+msgid "Answer of"
+msgstr "Resposta de"
+
+msgid "Authentication Server"
+msgstr "Servidor de autenticação"
+
+msgid "Authentication Server:"
+msgstr "Servidor de autenticação:"
+
+msgid "Authentication passphrase:"
+msgstr "Chave de autenticação:"
+
+msgid "Authentication type:"
+msgstr "Tipo de autenticação:"
+
+msgid "Auto"
+msgstr "Automático"
+
+msgid "Auto *"
+msgstr "Automático *"
+
+msgid "Automatic *"
+msgstr "Automático *"
+
+msgid "Automatic Update:"
+msgstr "Atualização de firmware automática:"
+
+msgid "Automatic shutoff"
+msgstr "Desconexão automática"
+
+msgid "Automatically search for updates:"
+msgstr "Pesquisar automaticamente por actualizações:"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Band Steering"
+msgstr "Band Steering"
+
+msgid "Basic"
+msgstr "Base"
+
+msgid "Basic Settings"
+msgstr "Configurações padrão"
+
+msgid "Bridge"
+msgstr "Bridge"
+
+msgid "Bridge to Remote Access Point (WDS)"
+msgstr "Bridge para ponto de acesso removido (WDS)"
+
+msgid "Browse ..."
+msgstr "Selecionar ficheiro ..."
+
+msgid "Button Settings"
+msgstr "Configurações para as teclas de comando"
+
+msgid "Buttons"
+msgstr "Teclas de comando"
+
+msgid "Buzzer"
+msgstr "Aviso sonoro"
+
+msgid "Buzzer duration: {dur} s"
+msgstr "Duração do sinal: {dur} seg."
+
+msgid "CPU load:"
+msgstr "Sobrecarga da CPU:"
+
+msgid "Cancel"
+msgstr "Interrupção"
+
+msgid "Cancelled!"
+msgstr "Processo interrompido!"
+
+msgid "Cannot retrieve current network information."
+msgstr "Não foi possível transmitir informações atuais da rede."
+
+msgid "Caps Lock is on!"
+msgstr "O bloqueio das teclas do painel de controlo está pressionado!"
+
+msgid "Central Coordinator"
+msgstr "Coordenador central"
+
+msgid "Change Password"
+msgstr "Alterar palavra-passe de acesso"
+
+msgid "Change Password?"
+msgstr "Alterar palavra-passe?"
+
+msgid "Change language"
+msgstr "Alterar idioma"
+
+msgid "Changing"
+msgstr "Alterar"
+
+msgid "Channel"
+msgstr "Canal"
+
+msgid "Channel 2.4 GHz:"
+msgstr "Canal de 2,4 GHz"
+
+msgid "Channel 5 GHz:"
+msgstr "Canal de 5 GHz"
+
+msgid "Channel bandwidth:"
+msgstr "Largura de canal:"
+
+msgid "Channel:"
+msgstr "Canal:"
+
+msgid "Checking firmware image ..."
+msgstr "A verificar ficheiro firmware..."
+
+msgid "Checking session ID ..."
+msgstr "A verificar Session-ID..."
+
+msgid "Choose between different LED notification levels."
+msgstr "Selecione o comportamento dos LED."
+
+msgid "Choose the CCo setting of your device in P2P mode."
+msgstr "Selecione a configuração CCo do seu dispositivo para o modo P2P."
+
+msgid ""
+"Choose the compatibility mode of your device. This setting can help "
+"increase performance with technologies such as VDSL."
+msgstr ""
+"Selecione o modo de compatibilidade; é um modo especial, que resolve "
+"problemas de ligação raros que possam ocorrer causados pela interação com "
+"outras técnicas como, por exemplo, VDSL."
+
+msgid "Choose the network mode of your device."
+msgstr "Selecione o modo de rede do seu dispositivo."
+
+msgid "Click here to update."
+msgstr "Clique aqui para atualizar."
+
+msgid "Click to edit"
+msgstr "Clique aqui para processar a entrada"
+
+msgid "Clicking the button below will restart your device."
+msgstr "Clicando em \"Reiniciar\", o dispositivo reinicia."
+
+msgid "Clone SSID"
+msgstr "Clonar SSID"
+
+msgid "Clone SSID via WPS"
+msgstr "Clonar SSID via WPS"
+
+msgid "Compatibility Mode"
+msgstr "Modo de compatibilidade"
+
+msgid "Compatibility Mode:"
+msgstr "Modo de compatibilidade:"
+
+msgid "Compatibility mode"
+msgstr "Modo de compatibilidade"
+
+msgid "Config Sync"
+msgstr "Config Sync"
+
+msgid "Configuration"
+msgstr "Configuração"
+
+msgid "Configuration file too large (maximum {maxSize} bytes)!"
+msgstr "O ficheiro de configuração é demasiado grande (máximo {maxSize} Byte)!"
+
+msgid "Configuration of time quotas"
+msgstr "Configuração"
+
+msgid "Configuration successfully restored!"
+msgstr "Configuração recuperada com êxito!"
+
+msgid "Configured VLANs:"
+msgstr "VLANs configurados:"
+
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgid "Confirm new password:"
+msgstr "Confirmar nova palavra-passe:"
+
+msgid "Connected AVLNs:"
+msgstr "AVLNs ligados:"
+
+msgid "Connected WiFi Clients"
+msgstr "Dispositivos WiFi ligados"
+
+msgid "Connected WiFi clients:"
+msgstr "Dispositivos WiFi ligados:"
+
+msgid "Connected clients"
+msgstr "Dispositivos ligados"
+
+msgid "Connected devices:"
+msgstr "Dispositivos ligados:"
+
+msgid "Connected powerline devices"
+msgstr "Dispositivos Powerline ligados"
+
+msgid "Connected since"
+msgstr "Ligados desde"
+
+msgid "Connection"
+msgstr "Ligação"
+
+msgid "Connection lost!"
+msgstr "Ligação interrompida!"
+
+msgid "Connection status:"
+msgstr "Estado de ligação:"
+
+msgid "Contact:"
+msgstr "Contacto:"
+
+msgid "Current Firmware"
+msgstr "Firmware atual"
+
+msgid "Current channel"
+msgstr "Canal atual"
+
+msgid "Current channel:"
+msgstr "Canal atual:"
+
+msgid "DES"
+msgstr "DES"
+
+msgid "DHCP"
+msgstr "DHCP"
+
+msgid "DHCP Server"
+msgstr "Servidor DHCP"
+
+msgid "Data rates:"
+msgstr "Taxas de transferência:"
+
+msgid "Date"
+msgstr "Data"
+
+msgid "Date and Time"
+msgstr "Data e hora"
+
+msgid "Days"
+msgstr "Dias"
+
+msgid "Default"
+msgstr "Padrão"
+
+msgid "Default VLAN"
+msgstr "VLAN padrão"
+
+msgid "Default gateway:"
+msgstr "Gateway padrão:"
+
+msgid "Default mode *"
+msgstr "Configuração padrão *"
+
+msgid "Delete"
+msgstr "Apagar"
+
+msgid "Delete SSID?"
+msgstr "Apagar SSID?"
+
+msgid "Device ID"
+msgstr "ID de dispositivo"
+
+msgid "Device MAC"
+msgstr "Endereço MAC do dispositivo"
+
+msgid "Device Name"
+msgstr "Nome do dispositivo"
+
+msgid "Device rebooted.  Please login again!"
+msgstr "O dispositivo foi reiniciado. Volte a iniciar sessão!"
+
+msgid "Disable Radio?"
+msgstr "Radio desligado?"
+
+msgid "Disable guest network {duration}"
+msgstr "Desativar a rede de convidado {duration}"
+
+msgid "Disabled"
+msgstr "Desligado"
+
+msgid ""
+"Disabling the reset button also forbids resetting the configuration to "
+"factory defaults."
+msgstr ""
+"A desativação da tecla reset exclui a possibilidade de reiniciar o "
+"dispositivo ou de repor o estado de entrega."
+
+msgid ""
+"Do you really want to change your Powerline encryption password? This could "
+"interrupt your connection."
+msgstr ""
+"Pretende realmente alterar a palavra-passe PLC? A ligação a este "
+"dispositivo pode perder-se."
+
+msgid ""
+"Do you really want to enable the WiFi Schedule without adding time quotas? "
+"The Wifi will be turned off permanently."
+msgstr ""
+"Se não configurar regras, deixa de ser possível utilizar o WiFi até que "
+"adicione uma regra ou desative a temporização."
+
+msgid "Do you really want to remove this SSID?"
+msgstr "Pretende realmente apagar o SSID?"
+
+msgid ""
+"Do you really want to reset the device to factory defaults? The device will "
+"be rebooted during the reset."
+msgstr ""
+"Pretende realmente repor o dispositivo para o estado de entrega? O "
+"dispositivo reinicia em seguida."
+
+msgid "Do you really want to restart the device?"
+msgstr "Pretende realmente reiniciar o dispositivo?"
+
+msgid "Domain Master"
+msgstr "Domain Master"
+
+msgid "Download Firmware Version for Update"
+msgstr "Descarregar firmware atualizado"
+
+msgid "Download Firmware:"
+msgstr "Descarregar firmware:"
+
+msgid "Dynamic VLAN"
+msgstr "VLAN dinâmico"
+
+msgid "Enable"
+msgstr "Ligar"
+
+msgid "Enable or completely disable the LEDs of your device."
+msgstr "Ligar os LEDs deste dispositivo ou desligar completamente"
+
+msgid "Enable or disable the buttons of your devices."
+msgstr "Ative ou desative a função das teclas de comando no dispositivo."
+
+msgid "Enabled"
+msgstr "Ligado"
+
+msgid "Enabled ({url})"
+msgstr "Ligado ({url})"
+
+msgid "Enabled SSIDs"
+msgstr "SSIDs ligados"
+
+msgid "Enabled SSIDs:"
+msgstr "SSIDs ligados:"
+
+msgid ""
+"Enabling the Mesh functionality features will optimize your inhome WiFi "
+"network experience while using your mobile devices. Inhome roaming solves "
+"your sticky client problem, Band Steering and Dynamic Frequency Selection "
+"provides WiFi access even with many clients and Airtime Fairness optimizes "
+"your bandwidth."
+msgstr ""
+"A funcionalidade Mesh otimiza a sua rede WiFi e permite uma melhor "
+"utilização com dispositivos WiFi móveis. Roaming resolve o problema com "
+"dispositivos WiFi fixos. Band Steering e Dynamic Frequency Selection "
+"permitem o acesso sem problemas ao WiFi, mesmo para muitos dispositivos "
+"WiFi. Airtime Fairness otimiza a largura de banda em redes com muitos "
+"dispositivos WiFi."
+
+msgid "Encryption:"
+msgstr "Codificação:"
+
+msgid "End IP Address:"
+msgstr "Endereço IP final:"
+
+msgid "End Point"
+msgstr "Dispositivo"
+
+msgid "End address equals start address!"
+msgstr "O endereço final é igual ao endereço inicial!"
+
+msgid "End address must be larger than start address!"
+msgstr "O endereço final deve ser maior que o endereço inicial!"
+
+msgid "End node"
+msgstr "End node"
+
+msgid "Enter WPS PIN"
+msgstr "Introduza o PIN WPS"
+
+msgid "Enter an alphanumeric community name (max 24 characters)"
+msgstr "Introduza um nome Community alfanumérico (máx. 24 caracteres)."
+
+msgid "Enter an alphanumeric username (max 24 characters)"
+msgstr "Introduza um nome de utilizador alfanumérico (máx. 24 caracteres)."
+
+msgid "Enter between 1 and 64 of these characters:"
+msgstr "Introduzir entre 1 e 64 destes caracteres:"
+
+msgid "Enter between 8 and 130 of these characters:"
+msgstr "Introduzir entre 8 e 130 destes caracteres:"
+
+msgid "Enter between 8 and 64 of these characters:"
+msgstr "Introduzir entre 8 e 64 destes caracteres:"
+
+msgid "Enter new password:"
+msgstr "Introduzir nova palavra-passe:"
+
+msgid "Enter old password:"
+msgstr "Introduzir a palavra-passe atual:"
+
+msgid "Enter the PIN of the device to be added to your WiFi network."
+msgstr "Introduza o PIN do dispositivo a adicionar à sua rede WiFi."
+
+msgid ""
+"Enter the Powerline network password needed for your device to access your "
+"Powerline network. All devices that are part of a Powerline network must "
+"use the same Powerline network password."
+msgstr ""
+"Introduza a palavra-passe PLC que o dispositivo deverá utilizar para o "
+"acesso à sua rede Powerline. Todos os dispositivos numa rede Powerline "
+"devem utilizar a mesma palavra-passe PLC."
+
+msgid "Error code:"
+msgstr "Código de erro:"
+
+msgid "Error occured! Please try again!"
+msgstr "Ocorreu um erro! Tente novamente!"
+
+msgid "Error while processing WPS!  ->  ("
+msgstr "Surgiu um erro durante o processo WPS! -&gt; ("
+
+msgid "Ethernet"
+msgstr "Ethernet"
+
+msgid "Europe/Aachen"
+msgstr "Europa/Aachen"
+
+msgid "Europe/Amsterdam"
+msgstr "Europa/Amesterdão"
+
+msgid "Europe/Andorra"
+msgstr "Europa/Andorra"
+
+msgid "Europe/Athens"
+msgstr "Europa/Atenas"
+
+msgid "Europe/Belgrade"
+msgstr "Europa/Belgrado"
+
+msgid "Europe/Berlin"
+msgstr "Europa/Berlim"
+
+msgid "Europe/Bratislava"
+msgstr "Europa/Bratislava"
+
+msgid "Europe/Brussels"
+msgstr "Europa/Bruxelas"
+
+msgid "Europe/Bucharest"
+msgstr "Europa/Bucareste"
+
+msgid "Europe/Budapest"
+msgstr "Europa/Budapeste"
+
+msgid "Europe/Busingen"
+msgstr "Europa/Busingen"
+
+msgid "Europe/Chisinau"
+msgstr "Europa/Chisinau"
+
+msgid "Europe/Copenhagen"
+msgstr "Europa/Copenhaga"
+
+msgid "Europe/Dublin"
+msgstr "Europa/Dublin"
+
+msgid "Europe/Gibraltar"
+msgstr "Europa/Gibraltar"
+
+msgid "Europe/Guernsey"
+msgstr "Europa/Guernsey"
+
+msgid "Europe/Helsinki"
+msgstr "Europa/Helsínquia"
+
+msgid "Europe/Isle of Man"
+msgstr "Europa/Ilha de Man"
+
+msgid "Europe/Istanbul"
+msgstr "Europa/Istambul"
+
+msgid "Europe/Jersey"
+msgstr "Europa/Jersey"
+
+msgid "Europe/Kaliningrad"
+msgstr "Europa/Kaliningrado"
+
+msgid "Europe/Kiev"
+msgstr "Europa/Kiev"
+
+msgid "Europe/Lisbon"
+msgstr "Europa/Lisboa"
+
+msgid "Europe/Ljubljana"
+msgstr "Europa/Liubliana"
+
+msgid "Europe/London"
+msgstr "Europa/Londres"
+
+msgid "Europe/Luxembourg"
+msgstr "Europa/Luxemburgo"
+
+msgid "Europe/Madrid"
+msgstr "Europa/Madrid"
+
+msgid "Europe/Malta"
+msgstr "Europa/Malta"
+
+msgid "Europe/Mariehamn"
+msgstr "Europa/Mariehamn"
+
+msgid "Europe/Minsk"
+msgstr "Europa/Minsk"
+
+msgid "Europe/Monaco"
+msgstr "Europa/Mónaco"
+
+msgid "Europe/Moscow"
+msgstr "Europa/Moscovo"
+
+msgid "Europe/Oslo"
+msgstr "Europa/Oslo"
+
+msgid "Europe/Paris"
+msgstr "Europa/Paris"
+
+msgid "Europe/Podgorica"
+msgstr "Europa/Podgorica"
+
+msgid "Europe/Prague"
+msgstr "Europa/Praga"
+
+msgid "Europe/Riga"
+msgstr "Europa/Riga"
+
+msgid "Europe/Rome"
+msgstr "Europa/Roma"
+
+msgid "Europe/Samara"
+msgstr "Europa/Samara"
+
+msgid "Europe/San Marino"
+msgstr "Europa/São Marino"
+
+msgid "Europe/Sarajevo"
+msgstr "Europa/Sarajevo"
+
+msgid "Europe/Simferopol"
+msgstr "Europa/Simferopol"
+
+msgid "Europe/Skopje"
+msgstr "Europa/Skopje"
+
+msgid "Europe/Sofia"
+msgstr "Europa/Sofia"
+
+msgid "Europe/Stockholm"
+msgstr "Europa/Estocolmo"
+
+msgid "Europe/Tallinn"
+msgstr "Europa/Tallinn"
+
+msgid "Europe/Tirane"
+msgstr "Europa/Tirana"
+
+msgid "Europe/Uzhgorod"
+msgstr "Europa/Uschhorod"
+
+msgid "Europe/Vaduz"
+msgstr "Europa/Vaduz"
+
+msgid "Europe/Vatican"
+msgstr "Europa/Vaticano"
+
+msgid "Europe/Vienna"
+msgstr "Europa/Viena"
+
+msgid "Europe/Vilnius"
+msgstr "Europa/Vilnius"
+
+msgid "Europe/Volgograd"
+msgstr "Europa/Volgogrado"
+
+msgid "Europe/Warsaw"
+msgstr "Europa/Varsóvia"
+
+msgid "Europe/Zagreb"
+msgstr "Europa/Zagreb"
+
+msgid "Europe/Zaporozhye"
+msgstr "Europa/Saporischschja"
+
+msgid "Europe/Zurich"
+msgstr "Europa/Zurique"
+
+msgid "Fast transition (802.11r)"
+msgstr "Fast transition (802.11r)"
+
+msgid "Features"
+msgstr "Funções"
+
+msgid "Find Me"
+msgstr "Encontre-me!"
+
+msgid "Firmware"
+msgstr "Firmware"
+
+msgid "Firmware file:"
+msgstr "Ficheiro firmware:"
+
+msgid "Firmware image too large (maximum {maxSize} bytes)!"
+msgstr "O ficheiro de firmware é demasiado grande (máximo {maxSize} Byte)!"
+
+msgid "Firmware updated successfully."
+msgstr "Firmware atualizado com êxito."
+
+msgid "Firmware version:"
+msgstr "Versão do firmware:"
+
+msgid "Force Node Type"
+msgstr "Force Node Type"
+
+msgid "Force node type"
+msgstr "Force Node Type"
+
+msgid "Free memory:"
+msgstr "RAM livre:"
+
+msgid "Frequency band"
+msgstr "Banda de frequência"
+
+msgid "Frequency band:"
+msgstr "Banda de frequência:"
+
+msgid "Fri"
+msgstr "Sex"
+
+msgid "Friday"
+msgstr "Sexta-feira"
+
+msgid "From"
+msgstr "de"
+
+msgid "Get IP configuration from a DHCP server"
+msgstr "Assumir as configurações de rede de um servidor DHCP"
+
+msgid "Guest network"
+msgstr "Rede do convidado"
+
+msgid "Guest network configuration"
+msgstr "Configuração "
+
+msgid "HH"
+msgstr "HH"
+
+msgid "Here"
+msgstr "Aqui"
+
+msgid ""
+"Here you can add a new Powerline device to your network. First, enter the "
+"security ID printed on the rear side, plug the device into a power outlet "
+"and then confirm by clicking Start configuration."
+msgstr ""
+"Aqui, tem a possibilidade de adicionar um dispositivo Powerline à sua rede. "
+"Em primeiro lugar,introduza Security ID impressa na parte de trás do "
+"dispositivo,em seguida, ligue o dispositivo a uma tomada e confirme, por "
+"fim, com um clique em \"Iniciar configuração\"."
+
+msgid ""
+"Here you can assign a custom PLC password to your network (instead of the "
+"automatically generated PLC password)."
+msgstr ""
+"Atribua aqui, uma palavra-passe individual do PLC à sua rede (em vez da "
+"palavra-passe do PLC gerada automaticamente)."
+
+msgid ""
+"Here you can define the time intervals for when you want your WiFi to be "
+"activated."
+msgstr ""
+"Aqui pode definir os intervalos de tempo, quando o seu WiFi deverá ser "
+"ligado."
+
+msgid "Hide SSID:"
+msgstr "Esconder SSID"
+
+msgid "Hide password"
+msgstr "Ocultar palavra-passe"
+
+msgid "High ({power} dBm)"
+msgstr "Alto ({power} dBm)"
+
+msgid ""
+"IEEE 802.11r (also called \"Fast Roaming\") accelerates the login of a WiFi "
+"device to this WiFi access point. Requirement: The device was already "
+"connected to another WiFi access point with 802.11r enabled, identical "
+"network name (SSID), and identical encryption. Unfortunately, 802.11r is "
+"not compatible with every WiFi device. If you experience problems with any "
+"of your devices, please disable this option."
+msgstr ""
+"O IEEE 802.11r (também chamado de \"Fast Roaming\") acelera o login de um "
+"dispositivo WiFi neste ponto de acesso WiFi. Pré-requisito: O dispositivo "
+"já estava conectado a outro ponto de acesso WiFi com 802.11r habilitado, "
+"nome de rede idêntico (SSID) e criptografia idêntica. Infelizmente, o "
+"802.11r não é compatível com nenhum dispositivo WiFi. Se algum de seus "
+"dispositivos encontrar problemas, desative essa opção."
+
+msgid "IP Configuration"
+msgstr "Configuração de IP"
+
+msgid "IP address is inside the loopback network!"
+msgstr "O endereço IP encontra-se dentro do intervalo de endereços Loopback!"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv4 address"
+msgstr "Endereço IPv4"
+
+msgid "IPv4 address of DNS server"
+msgstr "Endereço IPv4 do servidor DNS"
+
+msgid "IPv4 address of default gateway"
+msgstr "Endereço IPv4 do gateway padrão"
+
+msgid "IPv4 configuration successfully updated."
+msgstr "Configuração de IPv4 atualizada com êxito."
+
+msgid "IPv4 netmask"
+msgstr "Máscara de sub-rede IPv4"
+
+msgid "IPv4/IPv6"
+msgstr "IPv4/IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "IPv6 Address"
+msgstr "Endereço IPv6"
+
+msgid ""
+"If you continue, all device settings will be deleted and the configuration "
+"will be resetted to factory defaults."
+msgstr ""
+"Se continuar, todas as configurações do dispositivo são apagadas e é "
+"reposto o estado de entrega."
+
+msgid "Incorrect password!"
+msgstr "Palavra-passe inválida"
+
+msgid "Individual ({power} dBm)"
+msgstr "Individual ({power} dBm)"
+
+msgid "Individual transmit power:"
+msgstr "Potência de emissão individual:"
+
+msgid "Indoor use only:"
+msgstr "Apenas utilização interna:"
+
+msgid "Information"
+msgstr "Informações"
+
+msgid "Interfaces"
+msgstr "Interfaces de rede"
+
+msgid "Interval"
+msgstr "Área"
+
+msgid "Invalid IP address!"
+msgstr "Endereço IP inválido"
+
+msgid ""
+"Invalid Key! Please enter between 8 and 63 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"SSID Inválida! Introduza entre 8 e 63 caracteres. Caracteres especiais "
+"permitidos: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+
+msgid "Invalid Mac address!"
+msgstr "Endereço MAC inválido!"
+
+msgid "Invalid SSID!  Please enter between 1 and 32 characters)."
+msgstr "SSID inválida! Introduza no mínimo 1 e no máximo 32 caracteres."
+
+msgid ""
+"Invalid SSID! Please enter between 1 and 32 characters. Allowed special "
+"characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"
+msgstr ""
+"SSID inválida! Introduza no mínimo 1 e no máximo 32 caracteres. Caracteres "
+"especiais permitidos: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ "
+"/ ? \\ < >"
+
+msgid "Invalid VLAN ID.  Please enter a value between 1 and 4094!"
+msgstr "ID VLAN inválida! Introduza um valor entre 1 e 4094!"
+
+msgid "Invalid hostname or IP address!"
+msgstr "Nome de host ou endereço IP inválido"
+
+msgid "Invalid hostname or IP/Subnet!"
+msgstr "Nome de host ou endereço IP/máscara de rede inválida"
+
+msgid ""
+"Invalid hostname! Allowed are the digits 0-9, upper- and lowercase letters "
+"a-z, A-Z and the hyphen. The hostname cannot start or end with a hyphen."
+msgstr ""
+"Nome de host inválido! Os caracteres permitidos são 0-9, a-z, A-Z e hífen "
+"&quot;-&quot;. O nome de host não pode iniciar ou terminar com um hífen."
+
+msgid "Invalid name!"
+msgstr "Nome inválido!"
+
+msgid "Invalid netmask!"
+msgstr "Máscara de sub-rede inválida"
+
+msgid "Invalid port! Please enter a value between 1 and 65535."
+msgstr "Porta inválida! Introduza um valor entre 1 e 65535!"
+
+msgid ""
+"Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed "
+"characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"
+msgstr ""
+"Chave inválida! Introduza 64 caracteres. Caracteres permitidos: 0 1 2 3 4 5 "
+"6 7 8 9 a b c d e f"
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 123."
+msgstr "Área inválida para 2,4 GHz, introduza um valor entre 0 e 123. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Área inválida para 2,4 GHz, introduza um valor entre 0 e 123. Área inválida "
+"para 5 GHz, introduza um valor entre 0 e 200. "
+
+msgid "Invalid range for 2.4 GHz, please enter a value between 0 and 127."
+msgstr "Área inválida para 2,4 GHz, introduza um valor entre 0 e 127. "
+
+msgid ""
+"Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid "
+"range for 5 GHz, please enter a value between 0 and 200."
+msgstr ""
+"Área inválida para 2,4 GHz, introduza um valor entre 0 e 127. Área inválida "
+"para 5 GHz, introduza um valor entre 0 e 200. "
+
+msgid "Invalid range for 5 GHz, please enter a value between 0 and 200."
+msgstr "Área inválida para 5 GHz, introduza um valor entre 0 e 200. "
+
+msgid "Key:"
+msgstr "Chave:"
+
+msgid "LAN"
+msgstr "LAN"
+
+msgid "LED Settings"
+msgstr "Configurações dos LED"
+
+msgid "LEDs"
+msgstr "LEDs"
+
+msgid "Lease Time:"
+msgstr "Duração do aluguer:"
+
+msgid "Leasetime"
+msgstr "Duração do aluguer"
+
+msgid "Licenses"
+msgstr "Licenças"
+
+msgid "Loading ..."
+msgstr "A carregar ..."
+
+msgid "Local Device"
+msgstr "Dispositivo local"
+
+msgid "Local time:"
+msgstr "Data e hora atuais:"
+
+msgid "Location:"
+msgstr "Localização:"
+
+msgid "Log Level"
+msgstr "Nível"
+
+msgid "Login"
+msgstr "Fazer login"
+
+msgid "Logout"
+msgstr "Terminar a sessão"
+
+msgid "Logs"
+msgstr "Eventos"
+
+msgid "Low ({power} dBm)"
+msgstr "Baixo ({power} dBm)"
+
+msgid "MAC Address"
+msgstr "Endereço MAC"
+
+msgid "MAC Addresses"
+msgstr "Endereços MAC"
+
+msgid "MAC address"
+msgstr "Endereço MAC"
+
+msgid "MBytes"
+msgstr "MByte"
+
+msgid "MD5"
+msgstr "MD5"
+
+msgid "MHz"
+msgstr "MHz"
+
+msgid "MM"
+msgstr "mm"
+
+msgid "Management"
+msgstr "Administração"
+
+msgid "Management VLAN"
+msgstr "VLAN de gestão"
+
+msgid "Management VLAN:"
+msgstr "VLAN de gestão:"
+
+msgid "Manual"
+msgstr "Manual"
+
+msgid "Manufacturer"
+msgstr "Fabricante"
+
+msgid "Mask:"
+msgstr "Prefixo:"
+
+msgid "Max. clients:"
+msgstr "Número máx. de dispositivos:"
+
+msgid "Max. transmit power:"
+msgstr "Potência de emissão máx.:"
+
+msgid "Mbit/s"
+msgstr "Mbps"
+
+msgid "Medium ({power} dBm)"
+msgstr "Médio ({power} dBm)"
+
+msgid "Members"
+msgstr "Membros"
+
+msgid "Mesh WiFi"
+msgstr "Mesh WiFi"
+
+msgid "Message"
+msgstr "Mensagem"
+
+msgid "Minimum lease time is two minutes!"
+msgstr "A duração mínima do aluguer é de dois minutos!"
+
+msgid "Mode:"
+msgstr "Modo:"
+
+msgid "Mon"
+msgstr "Seg"
+
+msgid "Mon-Fri"
+msgstr "Seg-Sex"
+
+msgid "Monday"
+msgstr "Segunda-feira"
+
+msgid "N/A"
+msgstr "N/A"
+
+msgid "NTP configuration successfully saved."
+msgstr "As configurações do servidor de horas foram guardadas com êxito."
+
+msgid "Name server:"
+msgstr "Servidor DNS:"
+
+msgid "Name:"
+msgstr "Nome:"
+
+msgid ""
+"Navigating away from this page will discard all your changes. Really "
+"proceed?"
+msgstr ""
+"Se abandonar esta página, as suas alterações serão perdidas. Deseja "
+"prosseguir mesmo assim?"
+
+msgid "Neighbour network"
+msgstr "Redes vizinhas"
+
+msgid "Network"
+msgstr "Rede"
+
+msgid "Network Mode:"
+msgstr "Modo de rede:"
+
+msgid "Network interface"
+msgstr "Adaptador de rede"
+
+msgid "Network name"
+msgstr "Nome da rede"
+
+msgid "Network name 2.4 + 5 GHz"
+msgstr "Nome da rede 2,4 + 5 GHz"
+
+msgid "Network name:"
+msgstr "Nome da rede:"
+
+msgid "Never"
+msgstr "Nunca"
+
+msgid ""
+"New Powerline device found. Please wait until the process has been "
+"completely finished. This can take up to 20 seconds."
+msgstr ""
+"Foi encontrado um novo dispositivo Powerline. Aguarde até que o processo "
+"seja concluído, isto pode demorar até 20 segundos."
+
+msgid "No Log Information"
+msgstr "Nenhuns eventos existentes."
+
+msgid ""
+"No Powerline device was found. Ensure you have correctly entered the "
+"companions security ID."
+msgstr ""
+"Não foram encontrados novos dispositivos Powerline. Verifique se a Security "
+"Id foi introduzida corretamente."
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button.\n"
+"              Please wait until the process has been finished."
+msgstr ""
+"Não foram encontrados dispositivos Powerline.Verifique se as teclas "
+"correspondentes do PLC foram premidas correctamente.\n"
+"Aguarde até que o processo seja concluído.\n"
+
+msgid ""
+"No Powerline device was found. Ensure you pressed the companions Powerline "
+"encryption button. Please wait until the process has been finished."
+msgstr ""
+"Não foram encontrados dispositivos Powerline. Pressione o botão PLC e "
+"aguarde até que o processo seja concluído."
+
+msgid "No RADIUS server configured"
+msgstr "Não existe nenhum servidor RADIUS configurado!"
+
+msgid "No VLAN"
+msgstr "Nenhum VLAN"
+
+msgid "No WiFi radio enabled. Please enable a radio."
+msgstr ""
+"Todos os ponto de acesso WiFi estão desligados. Ligue, no mínimo um ponto "
+"de acesso WiFi."
+
+msgid "No clients are connected"
+msgstr "Nenhuns dispositivos ligados."
+
+msgid "No encryption (not recommended)"
+msgstr "\"Nenhuma codificação\" não é uma definição recomendável."
+
+msgid "No file selected."
+msgstr "Nenhum ficheiro selecionado."
+
+msgid "Not a valid input such as \"1d 12h 30m\"!"
+msgstr "Não é uma entrada válida como  \"1d 12h 30m\"!"
+
+msgid "Not configured"
+msgstr "Não configurado."
+
+msgid "Not connected"
+msgstr "Não ligado"
+
+msgid "Now press the WPS button on the device being added to your WiFi network."
+msgstr ""
+"Agora, pressione o botão WiFi no dispositivo que pretende adicionar à rede "
+"WiFi."
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Off"
+msgstr "Desligado"
+
+msgid "Old password was incorrect!"
+msgstr "A palavra-passe atual não está correta!"
+
+msgid "Only for development"
+msgstr "Apenas para efeitos de desenvolvimento"
+
+msgid "Open"
+msgstr "Aberto"
+
+msgid "Open (OWE)"
+msgstr "Open (OWE)"
+
+msgid "Operate as DHCP server"
+msgstr "Utilizar como servidor DHCP"
+
+msgid "Origin"
+msgstr "Fonte"
+
+msgid "Outside of the address range!"
+msgstr "Fora da área do endereço!"
+
+msgid "Overview"
+msgstr "Visão geral"
+
+msgid "Overview of the wifi schedule settings"
+msgstr "Visão geral"
+
+msgid "PAIR"
+msgstr "Estabelecer ligação PLC"
+
+msgid "PLC Connections"
+msgstr "Ligações PLC"
+
+msgid "PLC Name"
+msgstr "Nome PLC"
+
+msgid "PLC button"
+msgstr "Botão PLC"
+
+msgid "PLC domain name"
+msgstr "Nome Domain PLC"
+
+msgid "PLC firmware version:"
+msgstr "Versão do firmware do PLC:"
+
+msgid "PLC password"
+msgstr "Palavra-passe PLC"
+
+msgid "PLC role"
+msgstr "Papel PLC"
+
+msgid "Pairing"
+msgstr "Emparelhamento – estabelecer ligação PLC"
+
+msgid "Parental Control"
+msgstr "Seguro para niños"
+
+msgid "Password"
+msgstr "Palavra-passe"
+
+msgid "Password:"
+msgstr "Palavra-passe:"
+
+msgid "Passwords do not match!"
+msgstr "As palavras-passe não coincidem!"
+
+msgid "Peer isolation"
+msgstr "Proibir comunicação entre dispositivos WiFi"
+
+msgid "Please activate the WiFi network to enable Clone SSID via WPS"
+msgstr "Ligue a rede WiFi para iniciar o modo WiFi Clone."
+
+msgid "Please click the + button to add a SSID."
+msgstr "Clique no botão + para adicionar uma nova SSID."
+
+msgid "Please click the + button to add a VLAN"
+msgstr "Clique no botão + para adicionar um novo VLAN"
+
+msgid "Please click the + button to add a new schedule."
+msgstr "Clique no botão + para adicionar uma nova regra."
+
+msgid "Please click the + button to add a time server"
+msgstr "Clique no botão +, para adicionar um novo servidor de hora."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly."
+msgstr ""
+"Configure {here} um canal WiFi estático. Garanta que os restantes pontos de "
+"acesso na sua rede são configurados de forma correspondente."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select a channel between 36 and 48 to avoid channel changes "
+"because of DFS."
+msgstr ""
+"Configure {here} um canal WiFi estático. Garanta que os restantes pontos de "
+"acesso na sua rede são configurados de forma correspondente. Recomendação: "
+"selecione um canal entre 36 e 48 para evitar alterações de canais devido a "
+"DFS."
+
+msgid ""
+"Please configure a static wifi channel {here}. Be aware that the other "
+"access points in your network need to be configured accordingly. "
+"Recommendation: select channel 100 to avoid channel changes because of DFS."
+msgstr ""
+"Configure {here} um canal WiFi estático. Note que outros pontos de acesso "
+"na Bridge devem ter configurado o mesmo canal WiFi. Recomendação: Canal 100."
+
+msgid ""
+"Please define the name of the network and confirm your settings by clicking "
+"the diskette icon."
+msgstr ""
+"Defina o nome da rede do convidado e confirme as suas configurações "
+"clicando no símbolo da disquete."
+
+msgid "Please enter a password to secure the access to your device."
+msgstr ""
+"Introduza uma palavra-passe para limitar o acesso à configuração do "
+"dispositivo."
+
+msgid ""
+"Please enter a value of at least 15 minutes or 0 to disable the "
+"functionality!"
+msgstr ""
+"Introduza um período de tempo superior a 15 minutos. Introduza 0 para "
+"desativar a função."
+
+msgid "Please log in with your password!"
+msgstr "Inicie sessão com a sua palavra-passe!"
+
+msgid "Please login again."
+msgstr "Volte a iniciar sessão:"
+
+msgid "Please note that WiFi schedule Settings have precedence over these settings!"
+msgstr ""
+"Tenha em atenção que as configurações de controle de tempo têm prioridade "
+"sobre essas configurações!"
+
+msgid ""
+"Please note that many tablets/smartphones maintain their WiFi connection "
+"indefinitely!"
+msgstr ""
+"Tenha em atenção que muitos tablets/smartphones mantêm a ligação WiFi "
+"permanentemente ativa!"
+
+msgid ""
+"Please note that the WiFi is always switched on and off throughout the "
+"network. First, exit Config Sync on the device, that you want to configure "
+"or switch separately."
+msgstr ""
+"Garanta que o WiFi é ligado e desligado. em toda a rede.  Para o efeito, em "
+"primeiro lugar, encerre Config Sync no dispositivo que pretenda configurar "
+"ou ligar em separado."
+
+msgid "Please select the configuration file to be restored to this device."
+msgstr "Selecione o ficheiro de configuração que pretende restaurar."
+
+msgid "Please select the firmware file to be loaded onto this device."
+msgstr "Selecione o ficheiro Firmware a carregar para o dispositivo."
+
+msgid "Port"
+msgstr "Ligação"
+
+msgid "Port number"
+msgstr "Número da porta"
+
+msgid "Port:"
+msgstr "Porta:"
+
+msgid "Power Management"
+msgstr "Gerenciamento de energia"
+
+msgid "Powerline"
+msgstr "Powerline"
+
+msgid "Powerline LED"
+msgstr "LED Powerline"
+
+msgid "Powerline Network Mode"
+msgstr "Modo de rede Powerline"
+
+msgid "Powerline Password"
+msgstr "Palavra-passe Powerline"
+
+msgid "Powerline Settings"
+msgstr "Configurações stand-by Powerline"
+
+msgid "Powerline button"
+msgstr "Botão PLC"
+
+msgid "Powerline encryption already in progress by external or previous request."
+msgstr "A rede Powerline está ainda a ser estabelecida."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. 120 "
+"seconds left."
+msgstr ""
+"A rede Powerline está ainda a ser estabelecida. Aguarde até que o processo "
+"seja concluído. Ainda 120 segundos."
+
+msgid ""
+"Powerline encryption in progress. Wait until process has been finished. "
+"{time} seconds left."
+msgstr ""
+"A rede Powerline está ainda a ser estabelecida. Aguarde até que o processo "
+"seja concluído. Ainda {time} segundos."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished.\n"
+"              This can take up to 1 minute."
+msgstr ""
+"Foi iniciada a integração de uma rede Powerline por meio de\n"
+"Security-ID. Aguarde até que o processo seja concluído, isto pode demorar "
+"até 60 segundos."
+
+msgid ""
+"Powerline encryption via secuity ID successfully started. Wait until this "
+"process has been finished. This can take up to 1 minute."
+msgstr ""
+"Foi iniciada a integração de uma rede Powerline pro por meio de "
+"Security-ID. Aguarde até que o processo seja concluído, isto pode demorar "
+"até 60 segundos."
+
+msgid "Powerline encryption was stopped by external event."
+msgstr "A criação da rede Powerline foi interrompida."
+
+msgid "Powerline encryption was successfully stopped."
+msgstr "A rede Powerline foi instalada com êxito."
+
+msgid ""
+"Powerline standby is enabled! Disabling all radios will interrupt the "
+"connection to this website if the device can only be reached via Powerline "
+"and it enters standby mode. Do you really want to disable this radio?"
+msgstr ""
+"O modo stand-by Powerline está ligado! A desativação de todas as bandas de "
+"frequência interrompe a ligação e esta página Web, caso este dispositivo "
+"esteja ligado à rede com Powerline e mudar para o modo stand-by.  Pretende "
+"realmente desligar esta banda de frequência?"
+
+msgid "Powersave mode"
+msgstr "Modo de poupança de energia"
+
+msgid "Preferred:"
+msgstr "Preferencialmente:"
+
+msgid "Profile"
+msgstr "Perfil"
+
+msgid "Programming firmware image..."
+msgstr "Escrever ficheiro Firmware..."
+
+msgid "Protocol:"
+msgstr "Protocolo:"
+
+msgid "Public community (read only):"
+msgstr "Public community (leitura):"
+
+msgid "Public source:"
+msgstr "Public source:"
+
+msgid "Quota"
+msgstr "Contingente de tempo"
+
+msgid "Quota has been depleted"
+msgstr "O contingente de tempo está esgotado."
+
+msgid "Quota is currently depleting"
+msgstr "O contingente de tempo está a esgotar-se."
+
+msgid "RADIUS"
+msgstr "RADIUS"
+
+msgid "RADIUS configuration applied successfully"
+msgstr "Configuração RADIUS guardada com êxito."
+
+msgid "RADIUS configuration is incomplete"
+msgstr "Configuração RADIUS incompleta!"
+
+msgid "RADIUS password:"
+msgstr "Palavra-passe RADIUS:"
+
+msgid "RADIUS username:"
+msgstr "Nome de utilização RADIUS:"
+
+msgid "Radio"
+msgstr "Rádio"
+
+msgid "Radio channel:"
+msgstr "Canal WiFi:"
+
+msgid "Radio:"
+msgstr "Rádio:"
+
+msgid "Radios"
+msgstr "Rádios"
+
+msgid "Rate (Mbit/s)"
+msgstr "Taxa (Mbps)"
+
+msgid "Reboot"
+msgstr "Reiniciar"
+
+msgid "Reboot Device"
+msgstr "Reiniciar o dispositivo"
+
+msgid "Reboot device?"
+msgstr "Reiniciar o dispositivo?"
+
+msgid "Receive (Mbps)"
+msgstr "Receber (Mbps)"
+
+msgid "Recommended: 20 MHz"
+msgstr "Valor recomendado: 20 MHz"
+
+msgid "Recommended: 802.11g/n"
+msgstr "Valor recomendado: 802.11g/n"
+
+msgid "Recommended: 802.11n/ac"
+msgstr "Valor recomendado: 802.11n/ac"
+
+msgid "Recommended: Auto"
+msgstr "Valor recomendado: Auto"
+
+msgid "Recommended: Auto, 1, 6, 11"
+msgstr "Valores recomendados: Auto, 1, 6, 11"
+
+msgid "Reduced"
+msgstr "Reduzido"
+
+msgid "Remote syslog server:"
+msgstr "Servidor Remote-Syslog:"
+
+msgid "Reset"
+msgstr "Repor"
+
+msgid "Reset Configuration"
+msgstr "Repor a configuração do dispositivo"
+
+msgid "Reset button"
+msgstr "Botão Reset"
+
+msgid "Reset device to factory defaults?"
+msgstr "Repor o dispositivo para o estado de entrega?"
+
+msgid "Reset/Restart button"
+msgstr "Botão Reset"
+
+msgid "Restore"
+msgstr "Restaurar"
+
+msgid "Restore Device Configuration From File"
+msgstr "Restaurar a configuração do dispositivo a partir do ficheiro"
+
+msgid "Role"
+msgstr "Rol"
+
+msgid "Run Mode"
+msgstr "Modo Run"
+
+msgid "Rx rate (Mbit/s)"
+msgstr "Taxa de receção (Mbps)"
+
+msgid "SHA"
+msgstr "SHA"
+
+msgid "SNMP version:"
+msgstr "Versão SNMP:"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID already exists"
+msgstr "SSID já existe!"
+
+msgid "SSID broadcast"
+msgstr "SSID visível"
+
+msgid "SSID:"
+msgstr "SSID:"
+
+msgid "SSIDs"
+msgstr "SSIDs"
+
+msgid "Sat"
+msgstr "Sáb"
+
+msgid "Sat+Sun"
+msgstr "Sáb+Dom"
+
+msgid "Saturday"
+msgstr "Sábado"
+
+msgid "Save"
+msgstr "Guardar"
+
+msgid "Save Configuration to File"
+msgstr "Guardar a configuração do dispositivo como ficheiro"
+
+msgid "Scan"
+msgstr "Ler"
+
+msgid "Scan interval (min.):"
+msgstr "Intervalo de teste (min.):"
+
+msgid "Scan interval in minutes"
+msgstr "Intervalo de leitura em minutos"
+
+msgid "Schedule"
+msgstr "Temporização"
+
+msgid "Schedule configuration successfully saved."
+msgstr "A alteração foi guardada com êxito."
+
+msgid "Search ..."
+msgstr "Procurar ..."
+
+msgid "Secret:"
+msgstr "Segredo"
+
+msgid "Secured"
+msgstr "Seguro"
+
+msgid "Security"
+msgstr "Codificação"
+
+msgid "Security ID:"
+msgstr "Security-ID:"
+
+msgid "Security passphrase:"
+msgstr "Código de segurança:"
+
+msgid "Security status:"
+msgstr "Estado de codificação:"
+
+msgid "Security type:"
+msgstr "Tipo de codificação:"
+
+msgid "Security:"
+msgstr "Codificação:"
+
+msgid "Select Interval"
+msgstr "Selecionar intervalo"
+
+msgid ""
+"Select a time period. The guest WiFi network is automatically switched off "
+"after this period has elapsed."
+msgstr ""
+"Selecione um período de tempo. Após a expiração, a rede de convidados é "
+"desligada automaticamente."
+
+msgid "Select day"
+msgstr "Selecionar Tag"
+
+msgid "Select time limit"
+msgstr "Selecione o limite de tempo"
+
+msgid "Selected time period:"
+msgstr "Período de tempo"
+
+msgid "Serial number:"
+msgstr "Número de série:"
+
+msgid "Server is outside of the network and unreachable!"
+msgstr "O endereço está fora da sub-rede e, por isso, não está acessível!"
+
+msgid "Server-side NAS key"
+msgstr "Chave NAS do lado do servidor"
+
+msgid "Server:"
+msgstr "Servidor:"
+
+msgid "Service"
+msgstr "Serviço"
+
+msgid "Service Name"
+msgstr "Nome do serviço"
+
+msgid "Services"
+msgstr "Serviços"
+
+msgid "Set a duration and click \"Start\" to activate the buzzer for this time."
+msgstr ""
+"Definir uma duração e clique em \"Iniciar\" para ativar a cigarra para este "
+"tempo."
+
+msgid "Setting 0 prevents any clients from connecting to the SSID!"
+msgstr "A configuração 0 impede o início de sessão de cada dispositivo neste SSID!"
+
+msgid "Settings"
+msgstr "Configurações"
+
+msgid ""
+"Should the device no longer be accessible with changed settings, you have "
+"to reload the page manually, after having re-established the connection."
+msgstr ""
+"Caso já não seja possível aceder ao dispositivo com as configurações "
+"alteradas, terá de carregar a página manualmente depois de repor a ligação."
+
+msgid "Show password"
+msgstr "Mostrar palavra-passe"
+
+msgid "Signal (dBm)"
+msgstr "Sinal (dBm)"
+
+msgid "Signal quality (%)"
+msgstr "Qualidade do sinal (%)"
+
+msgid "Since"
+msgstr "Desde que"
+
+msgid ""
+"Some SSIDs are disabled due to deleted or incomplete RADIUS authentication "
+"Server configuration."
+msgstr ""
+"Algumas SSIDs foram desligadas, porque a configuração RADIUS se tornou "
+"inválida."
+
+msgid "Some SSIDs are updated to new RADIUS configuration"
+msgstr "Algumas SSIDs foram alteradas, porque a configuração RADIUS se alterou."
+
+msgid ""
+"Some event has been occoured. Determining reason, this can take up to 1 "
+"minute."
+msgstr "Ocorreu um problema. Pode demorar até 1 minuto até encontrar a causa."
+
+msgid "Standby"
+msgstr "Stand-by"
+
+msgid "Start"
+msgstr "Iniciar"
+
+msgid "Start Configuration"
+msgstr "Iniciar a configuração"
+
+msgid "Start IP Address:"
+msgstr "Endereço IP inicial:"
+
+msgid "Start address equals end address!"
+msgstr "O endereço inicial é igual ao endereço final"
+
+msgid "Start address must be smaller than end address!"
+msgstr "O endereço inicial deve ser menor que o endereço final!"
+
+msgid "Start pairing"
+msgstr "Iniciar estabelecimento da ligação PLC"
+
+msgid ""
+"Start the pairing process by pressing the PLC button on an adapter in your "
+"existing network first. Then, click on \"PAIR\"."
+msgstr ""
+"Pressione primeiro o botão PLC de\n"
+"um adaptador da sua rede existente e, em seguida, inicie o processo de "
+"emparelhamento\n"
+"clicando em \"PAIR\"."
+
+msgid "Start time and end time cannot be equal! Please correct your time quotas!"
+msgstr "A hora de início e de fim não podem ser iguais! Altere os tempos!"
+
+msgid "Static IPv4 Address"
+msgstr "Endereço IPv4 estático"
+
+msgid "Station is not connected"
+msgstr "Dispositivo não ligado"
+
+msgid "Status"
+msgstr "Estado"
+
+msgid "Status:"
+msgstr "Estado:"
+
+msgid "Stop"
+msgstr "Manter"
+
+msgid "Stop Configuration"
+msgstr "Parar a configuração"
+
+msgid "Stop time must be after start time! Please correct your time quotas!"
+msgstr "A hora de fim deve estar depois da hora de início! Altere os tempos!"
+
+msgid "Subnet mask:"
+msgstr "Máscara de sub-rede:"
+
+msgid "Subnet:"
+msgstr "Máscara de sub-rede:"
+
+msgid "Successfully deleted."
+msgstr "Eliminada com êxito."
+
+msgid "Sun"
+msgstr "Dom"
+
+msgid "Sunday"
+msgstr "Domingo"
+
+msgid "Support"
+msgstr "Assistência"
+
+msgid "Supported"
+msgstr "Suportada"
+
+msgid "Switch your WiFi network on first so that your guest network can be used."
+msgstr "Para poder utilizar a sua rede do convidado, ligue primeiro a sua rede WiFi."
+
+msgid "System"
+msgstr "Sistema"
+
+msgid "System Information"
+msgstr "Informações do sistema"
+
+msgid "System contact:"
+msgstr "Pessoa de contacto:"
+
+msgid "System location:"
+msgstr "Localização do dispositivo:"
+
+msgid "System name (hostname):"
+msgstr "Nome do dispositivo (Hostname):"
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using a mobile "
+"devices such as smartphones or tablets. While scanning the QR code the "
+"credentials for the guestnetwork will be transfered to your mobile device."
+msgstr ""
+"O código QR permite estabelecer comodamente a ligação à rede do convidado "
+"para dispositivos móveis (p. ex., Smartphone ou Tablet). Ao ler o código, "
+"as configurações de codificação da rede do convidado são automaticamente "
+"transmitidas ao respetivo dispositivo móvel."
+
+msgid ""
+"The QR-Code gives you easy access to the guest network using mobile devices "
+"such as smartphones or tablets. While scanning the QR-code the credentials "
+"for the guest network will be transferred to your mobile device."
+msgstr ""
+"O código QR permite estabelecer comodamente a ligação à rede do convidado "
+"para dispositivos móveis (p. ex., Smartphone ou Tablet). Ao ler o código, "
+"as configurações de codificação da rede do convidado são automaticamente "
+"transmitidas ao respetivo dispositivo móvel."
+
+msgid ""
+"The WiFi network is currently switched off, please switch the WiFi on again "
+"to see the Neighbour networks."
+msgstr "Ligue o WiFi para que possa visualizar as redes vizinhas."
+
+msgid "The device has a new IP address. Please login at the new URL:"
+msgstr "O dispositivo possui um novo endereço IP. Volte a iniciar sessão:"
+
+msgid ""
+"The entire WiFi configuration is transferred to all Config Sync compatible "
+"devices in your network."
+msgstr ""
+"A configuração WiFi completa é transmitida a todos os dispositivos "
+"compatíveis com Config Sync da sua rede."
+
+msgid "The guest network does only allow access to the internet."
+msgstr "A rede do convidado permite apenas o acesso à internet."
+
+msgid "The guestnetwork does only allow access to the internet."
+msgstr "A rede do convidado permite apenas o acesso à internet."
+
+msgid "The host name is too long. Max. 32 characters allowed."
+msgstr "O nome do host deve ser composto por 1 a 32 caracteres."
+
+msgid "The host name is too short. Please enter at least 1 character."
+msgstr "O nome de host é demasiado curto. Introduza no mínimo 1 caractere."
+
+msgid "The maximum number ({maxVLANs}) of VLANs has been configured."
+msgstr "O número máximo ({maxVLANs}) de VLANs foi alcançado."
+
+msgid "The password contains an invalid character:"
+msgstr "A palavra-passe contém um carácter inválido:"
+
+msgid ""
+"The security ID consists of four groups, each with four capital letters, "
+"separated by hyphens."
+msgstr ""
+"A Security-ID é composta por quatro grupos separados por hífen, com quatro "
+"letras maiúsculas respetivamente."
+
+msgid ""
+"The selected configuration file is not valid, please select a configuration "
+"file valid for this device."
+msgstr ""
+"O ficheiro de configuração selecionado é inválido, selecione um ficheiro "
+"adequado para este dispositivo."
+
+msgid ""
+"The selected firmware file is not valid, please select a firmware file "
+"dedicated for this device."
+msgstr ""
+"O ficheiro de configuração selecionado é inválido, selecione um ficheiro de "
+"firmware adequado para este dispositivo."
+
+msgid ""
+"The switch between summer and winter time is done automatically by the time "
+"server. No manual settings are needed."
+msgstr ""
+"A mudança para a hora de verão e de inverno ocorre automaticamente através "
+"do servidor de hora. Por isso, não é necessário que realize configurações "
+"manuais."
+
+msgid "There are no configured time servers."
+msgstr "Não estão configurados quaisquer servidores de horas."
+
+msgid "There is a newer version."
+msgstr "Versão atual"
+
+msgid "There is newer version:"
+msgstr "Versão atual:"
+
+msgid ""
+"This includes the following settings: WiFi network, guest network, Mesh "
+"functionality, WiFi schedule control and time server settings."
+msgstr ""
+"Esta inclui as seguintes configurações: rede WiFi, rede do convidado, "
+"funcionalidade Mesh, temporização e definições do servidor de hora."
+
+msgid "This is the broadcast address!"
+msgstr "Este é o endereço de Broadcast!"
+
+msgid "This is the device's IP address!"
+msgstr "Este é o endereço IP do dispositivo!"
+
+msgid "This is the network address!"
+msgstr "Este é endereço de sub-rede!"
+
+msgid "This page will be reloaded automatically, when the action has finished."
+msgstr "Esta página é recarregada automaticamente após concluir a ação."
+
+msgid "This server already exists."
+msgstr "Este servidor já existe!"
+
+msgid "Thu"
+msgstr "Qui"
+
+msgid "Thursday"
+msgstr "Quinta-feira"
+
+msgid "Time Server"
+msgstr "Servidor de horas"
+
+msgid "Time Server (NTP)"
+msgstr "Servidor de horas (NTP)"
+
+msgid "Time Server:"
+msgstr "Servidor de horas:"
+
+msgid "Time Zone"
+msgstr "Fuso horário"
+
+msgid "Time server"
+msgstr "Servidor de horas "
+
+msgid "Time zone configuration successfully saved."
+msgstr "A configuração do servidor de horas foi guardada com êxito."
+
+msgid "Time zone:"
+msgstr "Fuso horário:"
+
+msgid "To"
+msgstr "até"
+
+msgid "Total memory:"
+msgstr "RAM total:"
+
+msgid "Transmit (Mbps)"
+msgstr "Enviar (Mbps)"
+
+msgid "Tue"
+msgstr "Ter"
+
+msgid "Tuesday"
+msgstr "Terça-feira"
+
+msgid "Turn off the WiFi"
+msgstr "Desligar WiFi"
+
+msgid "Tx rate (Mbit/s)"
+msgstr "Taxa de envio (Mbps)"
+
+msgid "Tx-Power"
+msgstr "Potência de emissão"
+
+msgid "Type"
+msgstr "Tipo"
+
+msgid "Type error"
+msgstr "Tipo de erro"
+
+msgid "Type status"
+msgstr "Estado de erro"
+
+msgid "UNPAIR"
+msgstr "Separar ligação PLC"
+
+msgid "UTC"
+msgstr "UTC"
+
+msgid "Unpair device"
+msgstr "Separar a ligação PLC do dispositivo"
+
+msgid "Unpairing"
+msgstr "Desemparelhamento – separar ligação PLC"
+
+msgid "Unsecured"
+msgstr "Desprotegido"
+
+msgid "Untagged"
+msgstr "Untagged"
+
+msgid "Update firmware"
+msgstr "Efetuar atualização"
+
+msgid "Update firmware to latest version"
+msgstr "Efetuar atualização para a versão mais recente"
+
+msgid "Update table"
+msgstr "Atualizar tabela"
+
+msgid "Uploading ..."
+msgstr "Transmissão em curso..."
+
+msgid "Uploading firmware image ..."
+msgstr "A transmitir ficheiro firmware..."
+
+msgid "Uptime:"
+msgstr "Tempo de funcionamento do dispositivo:"
+
+msgid "Use common settings"
+msgstr "Mesmas configurações"
+
+msgid ""
+"Use the encryption button to allow the device to join the Powerline "
+"network. Press the encryption button on the device which you want to join "
+"your Powerline network! Afterwards, click the \"Start configuration\" "
+"button."
+msgstr ""
+"Assumir dispositivos na rede Powerline por meio do botão PLC. Dentro de 2 "
+"minutos, pressione o botão PLC do dispositivo ao qual pretende adicionar a "
+"sua rede Powerline. Em seguida, clique no botão \"Iniciar configuração\"."
+
+msgid "Username"
+msgstr "Nome de utilizador"
+
+msgid "Username:"
+msgstr "Nome de utilizador:"
+
+msgid "Using the encryption button"
+msgstr "Por meio de botão PLC"
+
+msgid "VLAN ID"
+msgstr "ID VLAN"
+
+msgid "VLAN ID must be unique!"
+msgstr "A ID VLAN já existe!"
+
+msgid "VLAN ID out of range (1-4094)!"
+msgstr "ID VLAN inválida! Introduza um valor entre 1 e 4094."
+
+msgid "VLAN Name"
+msgstr "Nome VLAN"
+
+msgid "VLAN name must be unique!"
+msgstr "O nome VLAN deve ser único!"
+
+msgid "VLAN {id}"
+msgstr "VLAN {id}"
+
+msgid "VLAN:"
+msgstr "VLAN:"
+
+msgid "VLANs"
+msgstr "VLANs"
+
+msgid "Valid:"
+msgstr "Inválido:"
+
+msgid "Very High ({power} dBm)"
+msgstr "Muito alto ({power} dBm)"
+
+msgid "Via security ID"
+msgstr "Por meio de Security-ID"
+
+msgid "WDS bridge configuration updated."
+msgstr "Configuração da ponte WiFi guardada com êxito."
+
+msgid "WMM Power-Save (U-APSD)"
+msgstr "WMM Power-Save (U-APSD)"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA/WPA2 Personal"
+msgstr "WPA/WPA2-Personal"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "WPA2 Enterprise"
+msgstr "WPA2-Enterprise"
+
+msgid "WPA2 Personal"
+msgstr "WPA2-Personal"
+
+msgid "WPA2 Personal *"
+msgstr "WPA2-Personal *"
+
+msgid "WPA2 pre-shared key:"
+msgstr "Chave WPA2:"
+
+msgid "WPA3/WPA2 Personal"
+msgstr "WPA3/WPA2 Personal"
+
+msgid "WPS"
+msgstr "WPS"
+
+msgid "WPS Clone Mode failed: "
+msgstr "O modo Clone WPS falhou:"
+
+msgid "WPS Clone Mode succeeded!"
+msgstr "O modo Clone WPS teve êxito!"
+
+msgid "WPS Mode:"
+msgstr "Modo WPS:"
+
+msgid "WPS PIN"
+msgstr "PIN WPS"
+
+msgid "WPS PIN connect applied successfully"
+msgstr "Ligação através do PIN WPS com êxito!"
+
+msgid "WPS PIN connect failed"
+msgstr "A ligação através do PIN WPS falhou!"
+
+msgid "WPS PIN is active..."
+msgstr "PIN WPS ativo..."
+
+msgid "WPS PIN is not valid. Use a 4- or 8-digit number."
+msgstr ""
+"O PIN WPS não está correto. Introduza o número correto, com 4 ou 8 "
+"caracteres."
+
+msgid "WPS Pushbutton"
+msgstr "Botão WPS"
+
+msgid "WPS Pushbutton is active..."
+msgstr "Botão WPS ativo..."
+
+msgid "WPS connect applied successfully"
+msgstr "Ligação através de WPS com êxito!"
+
+msgid "WPS connect failed"
+msgstr "A ligação através de WPS falhou!"
+
+msgid "WPS is active..."
+msgstr "WPS ativo..."
+
+msgid "Warning"
+msgstr "Aviso"
+
+msgid "Wed"
+msgstr "Qua"
+
+msgid "Wednesday"
+msgstr "Quarta-feira"
+
+msgid "Welcome to your {product}"
+msgstr "Bem vindo a {product}"
+
+msgid ""
+"When scan interval is set to 0 this function is disabled. Recommended: 240 "
+"minutes"
+msgstr "Introduza 0 para desativar a função. Recomendação: 240 minutos"
+
+msgid ""
+"When the WiFi convenience function is activated, the wireless network is "
+"not switched off until the last WiFi device has logged off from your access "
+"point."
+msgstr ""
+"Quando a função \"Separação automática da ligação\" está activada, a rede "
+"sem fio não será desativado até que o último dispositivo WiFi tenha "
+"efetuado logoff do seu ponto de acesso."
+
+msgid "WiFi"
+msgstr "WiFi"
+
+msgid "WiFi Clients"
+msgstr "Dispositivos WiFi"
+
+msgid "WiFi Clone"
+msgstr "WiFi Clone"
+
+msgid ""
+"WiFi Clone allows you to apply the WiFi access data (network name and WiFi "
+"password) of another WiFi access point to this device automatically. This "
+"requires that you start the configuration process and then press the WPS "
+"button on the device containing the WiFi access data (SSID and WiFi "
+"password) to be applied."
+msgstr ""
+"Através do WiFi Clone pode assumir automaticamente os dados de acesso WiFi "
+"(nome da rede e palavra-passe WiFi) de um outro ponto de acesso WiFi para "
+"este dispositivo. Para isso, inicie o processo de configuração e, em "
+"seguida, pressione o botão WPS no dispositivo cujos dados de acesso WiFi "
+"(SSID e palavra-passe WiFi) devem ser assumidos."
+
+msgid "WiFi Clone is active..."
+msgstr "WiFi Clone está activada ..."
+
+msgid "WiFi LED"
+msgstr "LED WiFi"
+
+msgid "WiFi Network"
+msgstr "Rede WiFi"
+
+msgid "WiFi Protected Setup (WPS) - Configuration"
+msgstr "WiFi Protected Setup (WPS) - Configuração"
+
+msgid "WiFi button"
+msgstr "Botão WiFi"
+
+msgid "WiFi convenience function"
+msgstr "Separação automática da ligação"
+
+msgid "WiFi disabled"
+msgstr "WiFi desligado"
+
+msgid "WiFi enabled"
+msgstr "WiFi ligado"
+
+msgid "WiFi network"
+msgstr "Rede WiFi"
+
+msgid "WiFi network mode:"
+msgstr "Modo de rede WiFi:"
+
+msgid "WiFi networks"
+msgstr "Redes WiFi"
+
+msgid "WiFi schedule control"
+msgstr "Temporização WiFi"
+
+msgid "WiFi schedule settings"
+msgstr "Configurações"
+
+msgid "Wifi Status"
+msgstr "Estado WiFi"
+
+msgid ""
+"You can backup the device configuration as a file on your computer and "
+"restore it later or transfer it to another device."
+msgstr ""
+"A configuração do dispositivo pode ser guardada no seu computador como "
+"ficheiro e restaurá-la mais tarde ou transmitir o ficheiro de configuração "
+"guardado noutro dispositivo."
+
+msgid "You can find the latest firmware"
+msgstr "O firmware atualizado pode ser encontrado "
+
+msgid ""
+"You can limit access to certain Wi-Fi devices by the MAC address. Please "
+"define the time periods during which Wi-Fi access is allowed."
+msgstr ""
+"Você pode definir restrições de acesso para dispositivos WiFi específicos "
+"com base no endereço MAC. Insira os intervalos de tempo em que os "
+"dispositivos devem ter acesso à WiFi."
+
+msgid "You can no longer create SSIDs for the {radioBand} radio"
+msgstr ""
+"Não é possível adicionar SSIDs adicionais para{radioBand}-a banda de "
+"frequência!"
+
+msgid "You can't have 2 quotas for same mac address! Please correct your quota!"
+msgstr ""
+"Um dispositivo WiFi não pode usar vários contingentes de tempo ao mesmo "
+"tempo. Altere os tempos!"
+
+msgid "You can't have overlapping quotas for the same station!"
+msgstr ""
+"A sobreposição de vários contingentes de tempo para o mesmo dispositivo "
+"WiFi não é possível!"
+
+msgid "You cannot combine the time period and time limit for a WiFi device!"
+msgstr ""
+"Você não pode combinar o período de tempo e o limite de tempo para um "
+"dispositivo WiFi!"
+
+msgid ""
+"You have been logged out automatically for security reasons! Please log in "
+"again!"
+msgstr ""
+"Por motivos de segurança, a sua sessão no sistema foi terminada "
+"automaticamente. Por favor,volte a iniciar sessão!"
+
+msgid "You have successfully changed the Configuration for your device's LEDs."
+msgstr "Alterou o comportamento do LED com êxito."
+
+msgid "You have successfully changed the configuration for your device's buttons."
+msgstr "Alterou o comportamento da tecla de comando com êxito."
+
+msgid "You have successfully configured an SSID"
+msgstr "A configuração da SSID foi guardada com êxito."
+
+msgid "You have successfully deleted an SSID"
+msgstr "A SSID foi apagada com êxito."
+
+msgid "You have successfully updated the compatibility mode setting."
+msgstr "O modo de compatibilidad foi atualizado com êxito."
+
+msgid "You have successfully updated your Config sync settings"
+msgstr "As configurações Config Sync foram guardadas com êxito."
+
+msgid "You have successfully updated your PLC network settings."
+msgstr "A configuração PLC atualizada com êxito."
+
+msgid "You have successfully updated your PLC password."
+msgstr "A sua palavra-passe PLC foi atualizada com êxito."
+
+msgid "You have successfully updated your Powerline encryption password"
+msgstr "A sua palavra-passe PLC foi atualizada com êxito."
+
+msgid "You have successfully updated your Powerline network mode"
+msgstr "Atualizou o modo de rede Powerline com êxito."
+
+msgid "You have successfully updated your Powerline pro network."
+msgstr "A sua rede Powerline pro foi ampliada com êxito."
+
+msgid "You have successfully updated your system management configuration"
+msgstr "As configurações de administração foram guardadas com êxito."
+
+msgid "You have successfully {enableOrDisableTerm} {name} service."
+msgstr "{name} com êxito{enableOrDisableTerm}."
+
+msgid ""
+"You have to mix more character classes (uppercase, lowercase, digits, and "
+"special characters)."
+msgstr ""
+"Deve utilizar mais classes de caracteres diferentes (maiúsculas, "
+"minúsculas, números e caracteres especiais)."
+
+msgid "You've successfully changed your password."
+msgstr "Palavra-passe alterada com êxito."
+
+msgid "You've successfully configured the WiFi network."
+msgstr "A sua rede WiFi foi configurada com êxito."
+
+msgid "You've successfully configured the radio."
+msgstr "A configuração da banda de frequência WiFi foi guardada com êxito."
+
+msgid "Your Powerline pro network is disabled."
+msgstr "A sua rede Powerline pro está desligada."
+
+msgid "Your WiFi is not encrypted. Please activate the encryption."
+msgstr "A sua rede WiFi não está codificada. Ative a codificação."
+
+msgid ""
+"Your device's Powerline module can be automatically set to a power-saving "
+"mode if no cable connections are active and WiFi is switched off."
+msgstr ""
+"O dispositivo Powerline é colocado automaticamente em modo de poupança de "
+"energia se não existirem ligações Ethernet ativas (ou seja, nenhuns "
+"dispositivos de rede ativos ligados aos interfaces de rede) e o WiFi "
+"estiver desligado."
+
+msgid "call ubus"
+msgstr "aceder a ubus"
+
+msgid "connected"
+msgstr "ligado"
+
+msgid "current session"
+msgstr "Sessão atual:"
+
+msgid "current ubus request queue"
+msgstr "Fila de espera ubus-Request atual"
+
+msgid "d, "
+msgstr "T, "
+
+msgid "daily"
+msgstr "diariamente"
+
+msgid "devolo"
+msgstr "devolo"
+
+msgid "disabled"
+msgstr "desativado"
+
+msgid "display {num} of {all}"
+msgstr "mostrar {num} de {all}"
+
+msgid "enabled"
+msgstr "ativado"
+
+msgid "mimo_full"
+msgstr "Full power"
+
+msgid "mimo_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "mimo_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "n/a"
+msgstr "n/a"
+
+msgid "no PLC connections"
+msgstr "não ligações PLC"
+
+msgid "none"
+msgstr "nenhum"
+
+msgid "not configured"
+msgstr "não configurado"
+
+msgid "off"
+msgstr "desligado"
+
+msgid "on"
+msgstr "ligado"
+
+msgid "one day, {hours}:{minutes}:{seconds}"
+msgstr "Um dia, {hours}:{minutes}:{seconds}"
+
+msgid "pending"
+msgstr "Ligar..."
+
+msgid "reduced"
+msgstr "reduzido"
+
+msgid "s"
+msgstr "seg."
+
+msgid "siso_full"
+msgstr "Full power"
+
+msgid "siso_vdsl17a"
+msgstr "VDSL 17a"
+
+msgid "siso_vdsl35b"
+msgstr "VDSL 35b"
+
+msgid "static"
+msgstr "estático"
+
+msgid "ubus Test"
+msgstr "Teste ubus"
+
+msgid "ubus callee"
+msgstr "ubus acedido:"
+
+msgid "ubus data"
+msgstr "Dados ubus:"
+
+msgid "ubus section"
+msgstr "Secção ubus:"
+
+msgid "unknown"
+msgstr "Desconhecido"
+
+msgid "unknown LED"
+msgstr "LED desconhecido"
+
+msgid "unknown button"
+msgstr "Botão desconhecido"
+
+msgid "v1 + v2c"
+msgstr "v1 + v2c"
+
+msgid "v3"
+msgstr "v3"
+
+msgid "{days} days, {hours}:{minutes}:{seconds}"
+msgstr "{days} dias, {hours}:{minutes}:{seconds}"
+
+msgid "{duration} remaining"
+msgstr "{duration} restante"
+
+msgid "{frequency} GHz Radio"
+msgstr "Banda de frequência de {frequency} GHz"
\ No newline at end of file
diff --git a/www/assets/images/cm_small_black.png b/www/assets/images/cm_small_black.png
new file mode 100644
index 0000000..cc609c3
Binary files /dev/null and b/www/assets/images/cm_small_black.png differ
diff --git a/www/assets/images/cm_small_green.png b/www/assets/images/cm_small_green.png
new file mode 100644
index 0000000..5b01b08
Binary files /dev/null and b/www/assets/images/cm_small_green.png differ
diff --git a/www/assets/images/devolo-buttons.png b/www/assets/images/devolo-buttons.png
new file mode 100644
index 0000000..f38a3d2
Binary files /dev/null and b/www/assets/images/devolo-buttons.png differ
diff --git a/www/assets/images/devolo_header.svg b/www/assets/images/devolo_header.svg
new file mode 100644
index 0000000..bcefbc8
--- /dev/null
+++ b/www/assets/images/devolo_header.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
+	 width="46" height="400" viewBox="0 0 46 400" class="header_cornenrs">
+	<svg width="46" height="79" viewBox="0 0 46 79" id="header-curve-shadow" y="0">
+		<defs><filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="dha">
+			<feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="1.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0" in="shadowBlurOuter1" result="shadowMatrixOuter1"/><feMerge><feMergeNode in="shadowMatrixOuter1"/><feMergeNode in="SourceGraphic"/></feMerge></filter>
+		</defs>
+		<path d="M28 0H0v56h1.2s5.1 0 6.5-4.9l12-42.9C20.9 3 25.5 2.1 27 2h1V0z" filter="url(#dha)" fill="#fff"/>
+	</svg>	
+</svg>
\ No newline at end of file
diff --git a/www/assets/images/devolo_header_sm.svg b/www/assets/images/devolo_header_sm.svg
new file mode 100644
index 0000000..7df08b3
--- /dev/null
+++ b/www/assets/images/devolo_header_sm.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
+	 width="48" height="400" viewBox="0 0 48 400" class="header_cornenrs">
+	<svg width="41" height="64" viewBox="0 0 41 64" id="header-curve-tablet-shadow" y="0">
+		<defs>
+			<filter x="-50%" y="-50%" width="200%" height="200%" filterUnits="objectBoundingBox" id="dia"><feOffset dy="2" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="2" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0" in="shadowBlurOuter1" result="shadowMatrixOuter1"/><feMerge><feMergeNode in="shadowMatrixOuter1"/><feMergeNode in="SourceGraphic"/></feMerge>
+			</filter>
+		</defs>
+		<path d="M21.3 0H0v40h1.9s3.6 0 4.6-3.4l8.4-30.1c.8-3.7 4-4.3 5.1-4.4h1.3V0z" filter="url(#dia)" fill="#fff"/>
+	</svg>
+	<svg width="41.3" height="60" viewBox="0 0 41.3 60" id="header-curve-tablet" y="100">
+		<path d="M21.3 0H0v40h1.9s3.6 0 4.6-3.4l8.4-30.1c.8-3.7 4-4.3 5.1-4.4h1.3V0z" fill="#fff"/>
+	</svg>
+</svg>
\ No newline at end of file
diff --git a/www/assets/images/favicon.ico b/www/assets/images/favicon.ico
new file mode 100644
index 0000000..9e51d22
Binary files /dev/null and b/www/assets/images/favicon.ico differ
diff --git a/www/assets/images/header_Bg_44x21.png b/www/assets/images/header_Bg_44x21.png
new file mode 100644
index 0000000..5e8ee40
Binary files /dev/null and b/www/assets/images/header_Bg_44x21.png differ
diff --git a/www/assets/images/header_Bg_58x29.png b/www/assets/images/header_Bg_58x29.png
new file mode 100644
index 0000000..d4336c6
Binary files /dev/null and b/www/assets/images/header_Bg_58x29.png differ
diff --git a/www/assets/images/icons.png b/www/assets/images/icons.png
new file mode 100644
index 0000000..ac95023
Binary files /dev/null and b/www/assets/images/icons.png differ
diff --git a/www/assets/images/timeline_4b.svg b/www/assets/images/timeline_4b.svg
new file mode 100644
index 0000000..a41da9e
--- /dev/null
+++ b/www/assets/images/timeline_4b.svg
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="240.32448"
+   height="62.017929"
+   viewBox="0 0 240.32448 62.017929"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="timeline_4b.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4.6286645"
+     inkscape:cx="114.95989"
+     inkscape:cy="56.427017"
+     inkscape:document-units="px"
+     inkscape:current-layer="g3682"
+     showgrid="false"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="980"
+     inkscape:window-x="0"
+     inkscape:window-y="1"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     fit-margin-top="5"
+     fit-margin-bottom="5"
+     fit-margin-left="0"
+     fit-margin-right="0">
+    <sodipodi:guide
+       position="20,73.100228"
+       orientation="1,0"
+       id="guide3646" />
+    <sodipodi:guide
+       position="40,73.026009"
+       orientation="1,0"
+       id="guide3648" />
+    <sodipodi:guide
+       position="60.004639,75.244595"
+       orientation="1,0"
+       id="guide3650" />
+    <sodipodi:guide
+       position="80.002503,74.559585"
+       orientation="1,0"
+       id="guide3652" />
+    <sodipodi:guide
+       position="100.00037,75.023624"
+       orientation="1,0"
+       id="guide3654" />
+    <sodipodi:guide
+       position="119.99823,74.681119"
+       orientation="1,0"
+       id="guide3656" />
+    <sodipodi:guide
+       position="139.99609,74.194983"
+       orientation="1,0"
+       id="guide3658" />
+    <sodipodi:guide
+       position="160.00501,74.935236"
+       orientation="1,0"
+       id="guide3660" />
+    <sodipodi:guide
+       position="179.98077,75.377177"
+       orientation="1,0"
+       id="guide3662" />
+    <sodipodi:guide
+       position="200.00618,76.672658"
+       orientation="1,0"
+       id="guide3664" />
+    <sodipodi:guide
+       position="220.01355,77.956915"
+       orientation="1,0"
+       id="guide3666" />
+    <sodipodi:guide
+       position="100.00037,88.853806"
+       orientation="0,1"
+       id="guide3668" />
+    <sodipodi:guide
+       position="60.004639,18.579873"
+       orientation="0,1"
+       id="guide3376" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="g3682"
+     inkscape:label="small lines "
+     style="display:inline"
+     sodipodi:insensitive="true"
+     transform="translate(4.6302943e-8,-42.195579)">
+    <g
+       id="g3712"
+       transform="matrix(1,0,0,0.46346714,0,43.876163)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3642"
+         d="m 20.511097,35.137654 0,46.463054"
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 40.532481,35.105368 0,46.463054"
+         id="path3638"
+         inkscape:connector-curvature="0" />
+      <path
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 80.525835,34.897933 0,46.463054"
+         id="path3630"
+         inkscape:connector-curvature="0" />
+      <path
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 100.53397,35.034433 0,46.463054"
+         id="path3701"
+         inkscape:connector-curvature="0" />
+      <path
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 200.55945,35.081931 0,46.463054"
+         id="path3672"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3626"
+         d="m 220.53131,35.314162 0,46.463054"
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 160.5155,34.664967 0,46.463054"
+         id="path3680"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3684"
+         d="m 140.48292,35.058182 0,46.463054"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="g3674"
+     inkscape:label="big lines"
+     style="display:inline"
+     sodipodi:insensitive="true"
+     transform="translate(4.6302943e-8,-42.195579)">
+    <g
+       id="g3724"
+       transform="matrix(1,0,0,0.73270889,0,21.79625)">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3634"
+         d="m 60.565942,35.081931 0,46.463054"
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 120.52956,81.544985 0,-46.463054"
+         id="path3688"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3676"
+         d="m 180.53484,34.664967 0,46.463054"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+  </g>
+  <g
+     inkscape:label="horiz"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(4.6302943e-8,-994.55774)"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00689924px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M -4.6302943e-8,1033.9572 240.32448,1033.9572"
+       id="path3357"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     transform="translate(4.6302943e-8,-42.195579)"
+     inkscape:groupmode="layer"
+     id="g3370"
+     inkscape:label="0"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3372"
+       y="98.80526"
+       x="-0.84769785"
+       style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         id="tspan3374"
+         y="98.80526"
+         x="-0.84769785"
+         sodipodi:role="line">0</tspan></text>
+  </g>
+  <g
+     style="display:inline"
+     inkscape:label="6"
+     id="g3507"
+     inkscape:groupmode="layer"
+     sodipodi:insensitive="true"
+     transform="translate(4.6302943e-8,-42.195579)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="54.675877"
+       y="98.965706"
+       id="text3527"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="54.675877"
+         y="98.965706"
+         id="tspan3531">6</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="12"
+     style="display:inline"
+     sodipodi:insensitive="true"
+     transform="translate(4.6302943e-8,-42.195579)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="110.29726"
+       y="98.78125"
+       id="text3536"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3538"
+         x="110.29726"
+         y="98.78125">12</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="18"
+     style="display:inline"
+     sodipodi:insensitive="true"
+     transform="translate(4.6302943e-8,-42.195579)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="169.37488"
+       y="98.761505"
+       id="text3546"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3548"
+         x="169.37488"
+         y="98.761505">18</tspan></text>
+  </g>
+</svg>
diff --git a/www/cgi-bin/config-backup b/www/cgi-bin/config-backup
new file mode 120000
index 0000000..5ab982f
--- /dev/null
+++ b/www/cgi-bin/config-backup
@@ -0,0 +1 @@
+/usr/libexec/base-cgi
\ No newline at end of file
diff --git a/www/cgi-bin/data-upload b/www/cgi-bin/data-upload
new file mode 120000
index 0000000..5ab982f
--- /dev/null
+++ b/www/cgi-bin/data-upload
@@ -0,0 +1 @@
+/usr/libexec/base-cgi
\ No newline at end of file
diff --git a/www/cgi-bin/htmlmgr b/www/cgi-bin/htmlmgr
new file mode 100755
index 0000000..c0e645e
--- /dev/null
+++ b/www/cgi-bin/htmlmgr
@@ -0,0 +1,8 @@
+#!/bin/sh
+echo Content-type: text/html  
+echo                        
+cat << EOF                  
+<HTML>                      
+<meta http-equiv="Refresh" content="1; url=https://$SERVER_NAME/#/status/overview"> 
+</HTML>
+EOF
diff --git a/www/common.ac31b91bb6bdf907c95d.js b/www/common.ac31b91bb6bdf907c95d.js
new file mode 100644
index 0000000..cc00edd
--- /dev/null
+++ b/www/common.ac31b91bb6bdf907c95d.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{CkFY:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var i=n("CcnG"),o=(n("gIcY"),n("uAiS"),Object(i.V)(function(){return o}),function(){function t(t,e,n,i){this.el=t,this.cdr=e,this.group=n,this.renderer=i,this.onChange=Function.prototype,this.onTouched=Function.prototype}return Object.defineProperty(t.prototype,"value",{get:function(){return this.group?this.group.value:this._value},set:function(t){this.group?this.group.value=t:this._value=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=t,this.setDisabledState(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isActive",{get:function(){return this.btnRadio===this.value},enumerable:!0,configurable:!0}),t.prototype.onClick=function(){this.el.nativeElement.attributes.disabled||!this.uncheckable&&this.btnRadio===this.value||(this.value=this.uncheckable&&this.btnRadio===this.value?void 0:this.btnRadio,this._onChange(this.value))},t.prototype.ngOnInit=function(){this.uncheckable=void 0!==this.uncheckable},t.prototype.onBlur=function(){this.onTouched()},t.prototype._onChange=function(t){if(this.group)return this.group.onTouched(),void this.group.onChange(t);this.onTouched(),this.onChange(t)},t.prototype.writeValue=function(t){this.value=t,this.cdr.markForCheck()},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t.prototype.setDisabledState=function(t){t?this.renderer.setAttribute(this.el.nativeElement,"disabled","disabled"):this.renderer.removeAttribute(this.el.nativeElement,"disabled")},t}())},uAiS:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var i=n("CcnG"),o=(n("gIcY"),Object(i.V)(function(){return o}),function(){function t(t,e){this.el=t,this.cdr=e,this.onChange=Function.prototype,this.onTouched=Function.prototype}return Object.defineProperty(t.prototype,"value",{get:function(){return this._value},set:function(t){this._value=t},enumerable:!0,configurable:!0}),t.prototype.writeValue=function(t){this._value=t,this.cdr.markForCheck()},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t}())},zCE2:function(t,e,n){"use strict";var i=n("CcnG"),o=(n("gIcY"),Object(i.V)(function(){return o}),function(){function t(){this.btnCheckboxTrue=!0,this.btnCheckboxFalse=!1,this.state=!1,this.onChange=Function.prototype,this.onTouched=Function.prototype}return t.prototype.onClick=function(){this.isDisabled||(this.toggle(!this.state),this.onChange(this.value))},t.prototype.ngOnInit=function(){this.toggle(this.trueValue===this.value)},Object.defineProperty(t.prototype,"trueValue",{get:function(){return void 0===this.btnCheckboxTrue||this.btnCheckboxTrue},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"falseValue",{get:function(){return void 0!==this.btnCheckboxFalse&&this.btnCheckboxFalse},enumerable:!0,configurable:!0}),t.prototype.toggle=function(t){this.state=t,this.value=this.state?this.trueValue:this.falseValue},t.prototype.writeValue=function(t){this.state=this.trueValue===t,this.value=t?this.trueValue:this.falseValue},t.prototype.setDisabledState=function(t){this.isDisabled=t},t.prototype.registerOnChange=function(t){this.onChange=t},t.prototype.registerOnTouched=function(t){this.onTouched=t},t}());n("CkFY"),n("uAiS"),n.d(e,"a",function(){return u});var u=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[]}},t}()}}]);
\ No newline at end of file
diff --git a/www/glyphicons-halflings-regular.448c34a56d699c29117a.woff2 b/www/glyphicons-halflings-regular.448c34a56d699c29117a.woff2
new file mode 100644
index 0000000..64539b5
Binary files /dev/null and b/www/glyphicons-halflings-regular.448c34a56d699c29117a.woff2 differ
diff --git a/www/glyphicons-halflings-regular.89889688147bd7575d63.svg b/www/glyphicons-halflings-regular.89889688147bd7575d63.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/www/glyphicons-halflings-regular.89889688147bd7575d63.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/www/glyphicons-halflings-regular.e18bbf611f2a2e43afc0.ttf b/www/glyphicons-halflings-regular.e18bbf611f2a2e43afc0.ttf
new file mode 100644
index 0000000..1413fc6
Binary files /dev/null and b/www/glyphicons-halflings-regular.e18bbf611f2a2e43afc0.ttf differ
diff --git a/www/glyphicons-halflings-regular.f4769f9bdb7466be6508.eot b/www/glyphicons-halflings-regular.f4769f9bdb7466be6508.eot
new file mode 100644
index 0000000..b93a495
Binary files /dev/null and b/www/glyphicons-halflings-regular.f4769f9bdb7466be6508.eot differ
diff --git a/www/glyphicons-halflings-regular.fa2772327f55d8198301.woff b/www/glyphicons-halflings-regular.fa2772327f55d8198301.woff
new file mode 100644
index 0000000..9e61285
Binary files /dev/null and b/www/glyphicons-halflings-regular.fa2772327f55d8198301.woff differ
diff --git a/www/index.html b/www/index.html
new file mode 100644
index 0000000..724d75e
--- /dev/null
+++ b/www/index.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Webui</title>
+  <base href="./">
+  <link rel="stylesheet" type="text/css" href="customization.css" />
+  <link id="favicon" rel="shortcut icon" type="image/x-icon" href="data:image/x-icon;," />
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+<link rel="stylesheet" href="styles.298ce34baa5f3685d166.css"></head>
+
+<body>
+  <app-root></app-root>
+<script type="text/javascript" src="runtime.9337249a387c7e595bff.js"></script><script type="text/javascript" src="polyfills.d8aa260bd700adfab723.js"></script><script type="text/javascript" src="main.c31911b358b5d113249b.js"></script></body>
+
+</html>
\ No newline at end of file
diff --git a/www/main.c31911b358b5d113249b.js b/www/main.c31911b358b5d113249b.js
new file mode 100644
index 0000000..8cdc2a9
--- /dev/null
+++ b/www/main.c31911b358b5d113249b.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{"+/+x":function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("jGGy"),n("+NEN");var r=n("67Y/"),i=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getDeviceInfo=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"DeviceType"}],[this.authService.getSid(),"system.management","version",{}]]}).pipe(Object(r.a)(function(e){return e.result}))},e}()},"+3se":function(e,t,n){"use strict";n.d(t,"c",function(){return i}),n.d(t,"g",function(){return o}),n.d(t,"h",function(){return s}),n.d(t,"d",function(){return a}),n.d(t,"e",function(){return u}),n.d(t,"b",function(){return c}),n.d(t,"f",function(){return l}),n.d(t,"a",function(){return h});var r=n("LvDl"),i=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}};function o(e){return void 0!==e}function s(e){return void 0===e}function a(e){try{return JSON.parse(JSON.stringify(e))}catch(t){return console.log("Problem with the deepCopy of:",e),{}}}function u(e,t){return!!Object(r.get)(e,t)}function c(e){return e}function l(e,t){return Object(r.template)(e,{interpolate:/\{([\s\S]+?)\}/g})(t)}var h=function(){function e(){}return e.newGuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},e}()},"+I7i":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.ip2int32=function(e){if(!e)return null;for(var t=0,n=e.split("."),r=0;r<4;++r)t<<=8,t|=Number(n[r]);return t},e.prototype.ip2bin=function(e){return e.split(".").map(function(e){var t=(e>>>0).toString(2);return t.length<8&&(t=new Array(8-t.length+1).join("0")+t),t}).join("")},e.prototype.cidr2bin=function(e){for(var t=[],n=0;n<4;n++){var r=Math.min(e,8);t.push(256-Math.pow(2,8-r)),e-=r}return t.join(".")},e.prototype.ConvertToUInt=function(e){return e>>>0},e.prototype.OffsetToIP=function(e,t,n){var r=this.ConvertToUInt(this.ip2int32(e)),i=this.ConvertToUInt(this.ip2int32(t)),o=this.ConvertToUInt(r&i)+this.ConvertToUInt(n),s=[o>>24&255,o>>16&255,o>>8&255,255&o];return s[0]+"."+s[1]+"."+s[2]+"."+s[3]},e.prototype.IPToOffset=function(e,t){return this.ConvertToUInt(this.ip2int32(e))&this.ConvertToUInt(this.ip2int32(t))},e.prototype.toNetmask=function(e){var t=new RegExp("^([1-9]|[12][0-9]|3[012])$");return e.match(t)?this.cidr2bin(e):e},e.prototype.getVlanDhcp=function(e){var t=[[this.authService.getSid(),"network.interface","dump",{}],[this.authService.getSid(),"uci","get",{config:"vlan"}]];return e&&t.push([this.authService.getSid(),"uci","get",{config:"dhcp"}]),this.ubusService.call({data:t}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1]})}))},e.prototype.save=function(e,t,n,r){var i={},o=[],s=[],a=this.authService.getSid();if("static"==e.proto?(i={proto:"static",ipaddr:e.ipaddr,netmask:this.toNetmask(e.netmask)},""==e.gateway?o.push("gateway"):i.gateway=e.gateway,""==e.dns?o.push("dns"):i.dns=e.dns):(i.proto="dhcp",o=["ipaddr","netmask","gateway","dns"]),s.push([a,"uci","set",{config:"network",section:r,values:i}]),o.length&&s.push([a,"uci","delete",{config:"network",section:r,options:o}]),t){if("static"==e.proto)if("off"==n.mode)s.push([a,"uci","set",{config:"dhcp",section:r,values:{ignore:1}}]);else{s.push([a,"uci","set",{config:"dhcp",section:r,values:{ignore:0}}]);var u=this.IPToOffset(n.start_address,e.netmask),c=this.IPToOffset(n.end_address,e.netmask)-u;c<1&&(c=1),s.push([a,"uci","set",{config:"dhcp",section:r,values:{start:u}}]),s.push([a,"uci","set",{config:"dhcp",section:r,values:{limit:c}}]),s.push([a,"uci","set",{config:"dhcp",section:r,values:{leasetime:n.leasetime}}])}else s.push([a,"uci","set",{config:"dhcp",section:r,values:{ignore:1}}]);s.push([a,"uci","commit",{config:"dhcp"}])}return s.push([a,"uci","commit",{config:"network"}]),this.ubusService.call({data:s})},e}())},"+NEN":function(e,t,n){"use strict";var r=n("0/uQ"),i=n("XlPw"),o=n("67Y/"),s=n("ZqrO"),a=n("xMyE"),u=n("vubp"),c=n("t9fZ"),l=n("wbK0"),h=n("9Z1F"),f=n("+3se"),d=function(){function e(e,t){this.defaults={basePath:"/rpc"},this.request=function(e,t,n,r){return arguments.length<4&&(r=n,n=t,t=e,e=null),this.jsonrpc({path:e,method:t,data:n},r)},this.serviceName=e,this.path=t}return e.prototype.createMethod=function(e,t){var n=this,r=this.path,i=e;return this.serviceName&&(i=this.serviceName+"."+i),function(e){return n.request(r,i,e,t)}},e.prototype.toPayload=function(e){var t=f.a.newGuid(),n={jsonrpc:"2.0",method:e.method,id:t,params:null};return e.data&&(n.params=e.data),n},e.prototype.jsonrpc=function(e,t){var n=null,r=e.path;if(Array.isArray(e.data[0])){n=[];for(var i=0;i<e.data.length;i++)n.push(this.toPayload({method:e.method,data:e.data[i]}))}else n=this.toPayload(e);return{path:r||this.defaults.basePath,payload:n,config:t}},e}();n.d(t,"a",function(){return p});var p=function(){function e(e,t){this.http=e,this.router=t,this.isUpdating=!1,this.mergeOptions=function(e){var t,n,r,i,o,s,a=[],u={};for(var c in t="calls"in e?e.calls:[],n=e.sid,r=e.config,o=e.wanted,s="got"in e?e.got:{},e.section?i=e.section:o[".name"]?i=o[".name"]:s&&(i=s[".name"]),s)"."===c.charAt(0)||"$"===c.charAt(0)||c in o&&""+o[c]!=""||a.push(c);for(var l in o)if("."!==l.charAt(0)&&"$"!==l.charAt(0)&&""+o[l]!="")if(s[l])if(Array.isArray(s[l])){if(s[l].length!==o[l].length)u[l]=o[l];else for(var h=0;h<s[l].length;++h)if(s[l][h]!==o[l][h]){u[l]=o[l];break}}else""+s[l]!=""+o[l]&&(u[l]=o[l]);else u[l]=o[l];return a.length&&t.push([n,"uci","delete",{config:r,section:i,options:a}]),Object.keys(u).length&&t.push([n,"uci","set",{config:r,section:i,values:u}]),t},this.mergeConfig=function(e){var t,n,r,i,o,s;for(var a in s=!1,t="calls"in e?e.calls:[],n=e.sid,r=e.config,i=e.wanted,o="got"in e?e.got:{})i[a]||(t.push([n,"uci","delete",{config:r,type:o[a][".type"],section:a}]),s=!0);for(var u in i)if(u in o){var c=t.length;this.mergeOptions({calls:t,sid:n,config:r,section:u,wanted:i[u],got:o[u]}),c!==t.length&&(s=!0)}else{var l={config:r,type:i[u][".type"],values:Object(f.d)(i[u]),name:u};for(var h in l.values)"."!==h.charAt(0)&&"$"!==h.charAt(0)||delete l.values[h];t.push([n,"uci","add",l]),s=!0}return s&&e.commit&&t.push([n,"uci","commit",{config:r}]),t},this.callService=new d(null,"/ubus").createMethod("call")}return e.prototype.catchError=function(e){if(!e)return Object(r.a)([]);if(e.error)throw e.error;if(Array.isArray(e)&&e.filter(function(e){return e.error}).length)throw e.map(function(e){return e.error});return e},e.prototype.setUpdateState=function(e){this.isUpdating=e},e.prototype.processResponse=function(e,t,n){if(t.raw)return n;if(Array.isArray(n)){var r=[],o=[];return n.forEach(function(t){var n=e.payload.find(function(e){return e.id===t.id}).params;if(r.push(t.result),o.push(n),null!=t.error)return Object(i.a)({params:n,result:t.error})}),{params:o,result:r}}return n.result?{params:e.payload.params,result:n.result}:void 0},e.prototype.call=function(e){var t=this,n=this.callService(e.data);return this.http.post(n.path,n.payload).pipe(Object(o.a)(this.catchError),Object(s.a)(function(e){return e.pipe(Object(a.a)(function(e){if(!t.isUpdating&&0!==e.status)throw e}),Object(u.a)(2e3),Object(c.a)(2),Object(l.a)(e.pipe(Object(a.a)(function(e){if(!t.isUpdating)throw e}))))}),Object(h.a)(function(e){if((-32002==e.code||Array.isArray(e)&&e.find(function(e){return-32002==e.code}))&&(t.router.url.includes("redirectTo")?t.router.navigate(["/login"],{queryParams:{redirectTo:/redirectTo=([^&]+)/.exec(t.router.url)[1]}}):t.router.navigate(["/login"],{queryParams:{redirectTo:t.router.url}})),0===e.status&&"Unknown Error"===e.statusText&&t.router.navigate(["./error",{errorMsg:e.message,errorCode:e.code||"Unknown error code."}]),Array.isArray(e)&&e.find(function(e){return-32e3==e.code})){var n=e.find(function(e){return-32e3==e.code}),r=Object(f.b)("An error occurred during device configuration:");t.router.navigate(["./error",{errorMsg:r+n.message,errorCode:n.code}])}throw e}),Object(o.a)(function(r){return t.processResponse(n,e,r)}))},e}()},"+pXn":function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("K9Ia"),i=n("gI3B"),o=n("xXU7"),s=n("15JJ"),a=n("ny24"),u=(n("Obbf"),n("UVPe"),n("+3se")),c=(n("/TrN"),function(){function e(e,t,n){this.wpsService=e,this.spinner=t,this.notification=n,this.wpsActive=!1,this.ngUnsubscribe=new r.a,this.intervalSubject=new r.a,this.wpsActiveSubject=new r.a,this.timeoutSubject=new r.a,this.interfaceUpdateSubject=new r.a,this.wpsUpdateSubject=new r.a,this.wpsPinUpdateSubject=new r.a,this.wpsmode="wps_pbc",this.state="stopped",this.wpsDuration=120,this.wps_started=0,this.enable=1,this.configured_WPS_SSID=""}return e.prototype.ngOnInit=function(){var e=this;this.getDevices(),Object(i.a)(0,2e3).pipe(Object(s.a)(function(){return e.wpsService.wpsUpdateStatus()}),Object(a.a)(this.wpsActiveSubject)).subscribe(function(t){e.wpsActive=Object.values(t).some(function(e){return"Active"==e}),e.wpsActive||e.wpsActiveSubject.next(!1)})},e.prototype.ngOnDestroy=function(){this.interfaceUpdateSubject.next(!1),this.interfaceUpdateSubject.complete(),this.intervalSubject.next(!1),this.intervalSubject.complete(),this.timeoutSubject.next(!1),this.timeoutSubject.complete(),this.wpsPinUpdateSubject.next(!1),this.wpsPinUpdateSubject.complete(),this.wpsUpdateSubject.next(!1),this.wpsUpdateSubject.complete(),this.wpsActiveSubject.next(!1),this.wpsActiveSubject.complete(),this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.getDevices=function(){var e=this;this.wpsService.getDevices().pipe(Object(a.a)(this.ngUnsubscribe)).subscribe(function(t){e._vaps=t[0];var n=t[0],r=t[1];for(var i in e.isactive=!1,e.aps=[],e.ssids=[],e.vaps=[],r)if(r.hasOwnProperty(i)){var o=r[i];(Object(u.h)(o.disabled)||0==o.disabled)&&(e.isactive=!0)}for(var i in n)if(n.hasOwnProperty(i)){var s=n[i];e.vaps.push(Object(u.d)(s)),Object(u.g)(s.wps_config)&&1!=r[s.device].disabled&&(e.enable=0,e.aps.push(s)),e.testSSID(s.ssid)||1==s.hidden||"psk-mixed+tkip+ccmp"!=s.encryption&&"psk2"!=s.encryption||(e.ssids.push(s.ssid),Object(u.h)(s.wps_config)||""==s.wps_config||(e.configured_WPS_SSID=s.ssid))}0==e.enable&&e.aps.length&&(e.wps_active=e.aps[0].ssid),""==e.configured_WPS_SSID&&e.ssids.length>0&&(e.wps_active=e.ssids[0]),e.isSelectedSsidEnabled=e.vaps.filter(function(t){return t.ssid===e.wps_active&&1!=r[t.device].disabled}).some(function(e){return 1!=e.disabled}),e.fakeEnable=e.enable,e.spinner.hide()})},e.prototype.testSSID=function(e){for(var t=0;t<this.ssids.length;t++)if(e==this.ssids[t])return!0;return!1},e.prototype.checkWpsPin=function(){var e=this.wps_pin_input?this.wps_pin_input.length:0;if(4==e)return!0;if(8!=e)return!1;for(var t=this.wps_pin_input.substring(0,7),n=this.wps_pin_input.substring(7),r=0;t;)r=parseInt(String(r),10)+3*parseInt(t,10)%10,t=Math.floor(parseInt(t,10)/10),r=parseInt(String(r),10)+parseInt(t,10)%10,t=Math.floor(parseInt(t,10)/10);return n==(10-parseInt(String(r),10)%10)%10},e.prototype.startWpsPin=function(){this.wpsmode="wps_pin",this.checkWpsPin()?this.startWps():this.notification.error(Object(u.b)("WPS PIN is not valid. Use a 4- or 8-digit number."))},e.prototype.startWpsPbc=function(){this.wpsmode="wps_pbc",this.startWps()},e.prototype.startWps=function(){var e=this;this.wpsActive=!1,this.wpsActiveSubject.next(!1),this.delos.form.markAsPristine(),this.isactive?("stopped"===this.state&&(this.state="wps_pending"),this.wpsService.startWps(this.wpsmode,this.wps_pin_input).pipe(Object(a.a)(this.ngUnsubscribe)).subscribe(function(t){if(e.vapstate=t,"ok"==e.vapstate.status){for(var n in e.activeAPs=[],e.vapstate.WPS_state)e.vapstate.WPS_state.hasOwnProperty(n)&&"OK"==(c=e.vapstate.WPS_state[n])&&e.activeAPs.push(n);"wps_running"!=e.state?(e.wps_started=(new Date).getTime(),e.elapsed=0,e.state="wps_running","wps_pbc"===e.wpsmode?(e.wpsUpdateSubject.next(!0),Object(i.a)(0,2e3).pipe(Object(a.a)(e.wpsUpdateSubject)).subscribe(function(){e.wpsUpdateStatus()})):"wps_pin"===e.wpsmode&&(e.pinCounter=0,e.wpsPinUpdateSubject.next(!0),e.timeoutSubject.next(!0),e.intervalSubject.next(!0),Object(i.a)(0,2e3).pipe(Object(a.a)(e.wpsPinUpdateSubject)).subscribe(function(){e.wpsPinUpdateStatus()})),Object(i.a)(1e3*e.wpsDuration).pipe(Object(a.a)(e.timeoutSubject)).subscribe(function(){e.onWpsStop()}),Object(i.a)(0,100).pipe(Object(a.a)(e.intervalSubject)).subscribe(function(){e.elapsed=((new Date).getTime()-e.wps_started)/1e3})):(e.timeoutSubject.next(!0),Object(i.a)(1e3*e.wpsDuration).pipe(Object(a.a)(e.timeoutSubject)).subscribe(function(){e.onWpsStop()}),e.wps_started=(new Date).getTime())}else{var r=Object(u.b)("Error while processing WPS!  ->  (");for(var o in e._vaps)if(e._vaps.hasOwnProperty(o)&&e.wps_active==e._vaps[o].ssid)for(var s in e.vapstate){var c;e.vapstate.hasOwnProperty(s)&&"failed"==(c=e.vapstate[s]).status&&s==o&&("failed"==c.encrypted&&(r+=Object(u.b)(" Encryption disabled,")),"failed"==c.hidden&&(r+=Object(u.b)(" SSID is hidden,")),"failed"==c.enabled&&(r+=Object(u.b)(" Device is not enabled,")),r+=Object(u.b)(")\n"))}e.onWpsStop(),e.notification.error(r)}})):this.notification.error(Object(u.b)("No WiFi radio enabled. Please enable a radio."))},e.prototype.wpsUpdateStatus=function(){var e=this,t=!0,n=!0;this.wpsService.wpsUpdateStatus().pipe(Object(a.a)(this.ngUnsubscribe),Object(a.a)(this.wpsUpdateSubject)).subscribe(function(r){e.wpsstate=r,Object.values(e.activeAPs).forEach(function(t){e.wpsstate.hasOwnProperty(t)&&"Active"==e.wpsstate[t]&&(n=!1)}),n&&(e.wpsUpdateSubject.next(!1),e.onWpsStop(),Object.values(e.activeAPs).forEach(function(n){e.wpsstate.hasOwnProperty(n)&&"Disabled"!=e.wpsstate[n]&&(t=!1)}),t?e.notification.success(Object(u.b)("WPS connect applied successfully")):e.notification.error(Object(u.b)("WPS connect failed")))})},e.prototype.wpsPinUpdateStatus=function(){var e=this,t=!1,n=!1;this.wpsService.wpsPinUpdateStatus(this.activeAPs[0]).pipe(Object(a.a)(this.ngUnsubscribe),Object(a.a)(this.wpsPinUpdateSubject)).subscribe(function(r){e.wpsstate=r,e.pinCounter++,Object.values(e.wpsstate).forEach(function(e){"RUNNING"!=e&&(n=!0)}),n&&(e.onWpsStop(),e.wpsPinUpdateSubject.next(!1),e.pinCounter<58&&(t=!0),t?e.notification.success(Object(u.b)("WPS PIN connect applied successfully")):e.notification.error(Object(u.b)("WPS PIN connect failed")))})},e.prototype.onWpsStop=function(){var e=this,t=new r.a;t.next(!0),this.elapsed=this.wpsDuration,this.timeoutSubject.next(!1),this.intervalSubject.next(!1),Object(i.a)(0,100).pipe(Object(a.a)(t)).subscribe(function(){t.next(!1),t.complete(),e.state="stopped",e.elapsed=0})},e.prototype.save=function(){var e=this;"wps_pin_input"!==document.activeElement.id?this.isactive?(this.delos.form.markAsPristine(),this.spinner.show(),this.waitForInterface=!0,this.elapsed=0,this.interfaceUpdateSubject.next(!0),this.wpsService.save(this.enable,this._vaps,this.wps_active).subscribe(function(){}),Object(o.a)(3e3).pipe(Object(a.a)(this.interfaceUpdateSubject)).subscribe(function(){e.checkInterfaceState()}),this.fakeEnable=this.enable):this.notification.error(Object(u.b)("No WiFi radio enabled. Please enable a radio.")):this.startWpsPin()},e.prototype.checkInterfaceState=function(){var e=this;this.wpsService.checkInterfaceState().pipe(Object(a.a)(this.ngUnsubscribe)).subscribe(function(t){"no"==t&&(e.interfaceUpdateSubject.next(!1),e.cleanupForm())})},e.prototype.cleanupForm=function(){this.enable=this.fakeEnable,this.getDevices(),this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}())},"+qE3":function(e,t,n){"use strict";var r,i="object"==typeof Reflect?Reflect:null,o=i&&"function"==typeof i.apply?i.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};r=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}e.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var u=10;function c(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function l(e,t,n,r){var i,o,s;if("function"!=typeof n)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof n);if(void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),s=o[t]),void 0===s)s=o[t]=n,++e._eventsCount;else if("function"==typeof s?s=o[t]=r?[n,s]:[s,n]:r?s.unshift(n):s.push(n),(i=c(e))>0&&s.length>i&&!s.warned){s.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=e,a.type=t,a.count=s.length,console&&console.warn&&console.warn(a)}return e}function h(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=(function(){for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);this.fired||(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,o(this.listener,this.target,e))}).bind(r);return i.listener=n,r.wrapFn=i,i}function f(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(i):p(i,i.length)}function d(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function p(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}Object.defineProperty(a,"defaultMaxListeners",{enumerable:!0,get:function(){return u},set:function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");u=e}}),a.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},a.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},a.prototype.getMaxListeners=function(){return c(this)},a.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=i[e];if(void 0===u)return!1;if("function"==typeof u)o(u,this,t);else{var c=u.length,l=p(u,c);for(n=0;n<c;++n)o(l[n],this,t)}return!0},a.prototype.on=a.prototype.addListener=function(e,t){return l(this,e,t,!1)},a.prototype.prependListener=function(e,t){return l(this,e,t,!0)},a.prototype.once=function(e,t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);return this.on(e,h(this,e,t)),this},a.prototype.prependOnceListener=function(e,t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);return this.prependListener(e,h(this,e,t)),this},a.prototype.off=a.prototype.removeListener=function(e,t){var n,r,i,o,s;if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);if(void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(i=-1,o=n.length-1;o>=0;o--)if(n[o]===t||n[o].listener===t){s=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,i),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,s||t)}return this},a.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var i,o=Object.keys(n);for(r=0;r<o.length;++r)"removeListener"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},a.prototype.listeners=function(e){return f(this,e,!0)},a.prototype.rawListeners=function(e){return f(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):d.call(e,t)},a.prototype.listenerCount=d,a.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},"+qTL":function(e,t,n){"use strict";var r=n("hwdV").Buffer,i=n("M2TY"),o=n("tsXx");function s(e,t){return e.msgid>t.msgid?1:t.msgid>e.msgid?-1:0}function a(e,t){this._table=e||{},this._table.headers=this._table.headers||{},this._table.translations=this._table.translations||{},this._options=t||{},"foldLength"in this._options||(this._options.foldLength=76),"sort"in this._options||(this._options.sort=!1),this._translations=[],this._handleCharset()}e.exports=function(e,t){return new a(e,t).compile()},a.prototype._drawComments=function(e){var t=[];return[{key:"translator",prefix:"# "},{key:"reference",prefix:"#: "},{key:"extracted",prefix:"#. "},{key:"flag",prefix:"#, "},{key:"previous",prefix:"#| "}].forEach(function(n){e[n.key]&&e[n.key].split(/\r?\n|\r/).forEach(function(e){t.push(n.prefix+e)})}),t.join("\n")},a.prototype._drawBlock=function(e,t){var n=[],r=(t=t||{}).comments||e.comments,i=t.msgctxt||e.msgctxt,o=t.msgid||e.msgid,s=t.msgid_plural||e.msgid_plural,a=[].concat(t.msgstr||e.msgstr);return r&&(r=this._drawComments(r))&&n.push(r),i&&n.push(this._addPOString("msgctxt",i)),n.push(this._addPOString("msgid",o||"")),s?(n.push(this._addPOString("msgid_plural",s)),a.forEach((function(e,t){n.push(this._addPOString("msgstr["+t+"]",e||""))}).bind(this))):n.push(this._addPOString("msgstr",a[0]||"")),n.join("\n")},a.prototype._addPOString=function(e,t){e=(e||"").toString();var n=[t=(t||"").toString().replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/\n/g,"\\n")];return this._options.foldLength>0&&(n=o.foldLine(t,this._options.foldLength)),n.length<2?e+' "'+(n.shift()||"")+'"':e+' ""\n"'+n.join('"\n"')+'"'},a.prototype._handleCharset=function(){var e=(this._table.headers["content-type"]||"text/plain").split(";"),t=e.shift(),n=o.formatCharset(this._table.charset),r=[];r=e.map(function(e){var t=e.split("="),r=t.shift().trim(),i=t.join("=");return"charset"===r.toLowerCase()?(n||(n=o.formatCharset(i.trim()||"utf-8")),"charset="+n):e}),n||r.push("charset="+(n=this._table.charset||"utf-8")),this._table.charset=n,this._table.headers["content-type"]=t+"; "+r.join("; "),this._charset=n},a.prototype.compile=function(){var e=[],t=this._table.translations[""]&&this._table.translations[""][""]||{};return Object.keys(this._table.translations).forEach((function(t){"object"==typeof this._table.translations[t]&&Object.keys(this._table.translations[t]).forEach((function(n){"object"==typeof this._table.translations[t][n]&&(""===t&&""===n||e.push(this._table.translations[t][n]))}).bind(this))}).bind(this)),!1!==this._options.sort&&(e=e.sort("function"==typeof this._options.sort?this._options.sort:s)),(e=e.map((function(e){return this._drawBlock(e)}).bind(this))).unshift(this._drawBlock(t,{msgstr:o.generateHeader(this._table.headers)})),"utf-8"===this._charset||"ascii"===this._charset?r.from(e.join("\n\n"),"utf-8"):i.convert(e.join("\n\n"),this._charset)}},"+tJ4":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){return function(t){for(var n=0,r=e.length;n<r&&!t.closed;n++)t.next(e[n]);t.closed||t.complete()}}},"+umK":function(e,t,n){"use strict";function r(){}n.d(t,"a",function(){return r})},"/21U":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("isby");function i(e){return!Object(r.a)(e)&&e-parseFloat(e)+1>=0}},"/TrN":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authSercice=e,this.ubusService=t}return e.prototype.getDevices=function(){return this.ubusService.call({data:[[this.authSercice.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"ap"}}],[this.authSercice.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}]]}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e.prototype.startWps=function(e,t){var n=[];if("wps_pbc"===e)n=[this.authSercice.getSid(),"network.wps","enable",{mode:"wps_pbc"}];else{if("wps_pin"!==e)return;n=[this.authSercice.getSid(),"network.wps","enable",{mode:"wps_pin",pin:t}]}return this.ubusService.call({data:n}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.wpsUpdateStatus=function(){return this.ubusService.call({data:[this.authSercice.getSid(),"network.wps","get_status",{}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.wpsPinUpdateStatus=function(e){return this.ubusService.call({data:[this.authSercice.getSid(),"network.wps","get_pin_status",{device:e}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.save=function(e,t,n){var r=[];if(0==e)for(var i in t)t.hasOwnProperty(i)&&r.push(t[i].ssid==n?[this.authSercice.getSid(),"uci","set",{config:"wireless",section:i,values:{wps_config:"push_button virtual_push_button physical_push_button display virtual_display"}}]:[this.authSercice.getSid(),"uci","set",{config:"wireless",section:i,values:{wps_config:""}}]);else for(var i in t)t.hasOwnProperty(i)&&r.push([this.authSercice.getSid(),"uci","set",{config:"wireless",section:i,values:{wps_config:""}}]);return r.push([this.authSercice.getSid(),"uci","commit",{config:"wireless"}]),this.ubusService.call({data:r})},e.prototype.checkInterfaceState=function(){return this.ubusService.call({data:[this.authSercice.getSid(),"network.wifi","wifi_script_running",{}]}).pipe(Object(r.a)(function(e){return e.result[1].running}))},e}())},"/WYv":function(e,t,n){"use strict";function r(e){return e&&"function"!=typeof e.subscribe&&"function"==typeof e.then}n.d(t,"a",function(){return r})},0:function(e,t,n){e.exports=n("zUnb")},"0/uQ":function(e,t,n){"use strict";var r=n("6blF"),i=n("/WYv"),o=n("2ePl"),s=n("xTla"),a=n("En8+"),u=n("IUTb"),c=n("pugT"),l=n("S5XQ"),h=n("u67D"),f=n("JcRv"),d=n("Fxb1");function p(e,t){if(!t)return e instanceof r.a?e:new r.a(Object(d.a)(e));if(null!=e){if(function(e){return e&&"function"==typeof e[s.a]}(e))return function(e,t){return new r.a(t?function(n){var r=new c.a;return r.add(t.schedule(function(){var i=e[s.a]();r.add(i.subscribe({next:function(e){r.add(t.schedule(function(){return n.next(e)}))},error:function(e){r.add(t.schedule(function(){return n.error(e)}))},complete:function(){r.add(t.schedule(function(){return n.complete()}))}}))})),r}:Object(f.a)(e))}(e,t);if(Object(i.a)(e))return function(e,t){return new r.a(t?function(n){var r=new c.a;return r.add(t.schedule(function(){return e.then(function(e){r.add(t.schedule(function(){n.next(e),r.add(t.schedule(function(){return n.complete()}))}))},function(e){r.add(t.schedule(function(){return n.error(e)}))})})),r}:Object(l.a)(e))}(e,t);if(Object(o.a)(e))return Object(u.a)(e,t);if(function(e){return e&&"function"==typeof e[a.a]}(e)||"string"==typeof e)return function(e,t){if(!e)throw new Error("Iterable cannot be null");return new r.a(t?function(n){var r,i=new c.a;return i.add(function(){r&&"function"==typeof r.return&&r.return()}),i.add(t.schedule(function(){r=e[a.a](),i.add(t.schedule(function(){if(!n.closed){var e,t;try{var i=r.next();e=i.value,t=i.done}catch(o){return void n.error(o)}t?n.complete():(n.next(e),this.schedule())}}))})),i}:Object(h.a)(e))}(e,t)}throw new TypeError((null!==e&&typeof e||e)+" is not observable")}n.d(t,"a",function(){return p})},"008C":function(e,t,n){"use strict";n.d(t,"a",function(){return u});var r=n("CcnG"),i=(n("6aHO"),n("ew9u")),o=n("uwht"),s=n("zIf0"),a=n("jFtu"),u=function(){function e(e,t){this.clf=t,this.config=s.e,this.onShow=new r.m,this.onShown=new r.m,this.onHide=new r.m,this.onHidden=new r.m,this.isBodyOverflowing=!1,this.originalBodyPadding=0,this.scrollbarWidth=0,this.modalsCount=0,this.lastDismissReason="",this.loaders=[],this._backdropLoader=this.clf.createLoader(null,null,null),this._renderer=e.createRenderer(null,null)}return e.prototype.show=function(e,t){return this.modalsCount++,this._createLoaders(),this.config=Object.assign({},s.e,t),this._showBackdrop(),this.lastDismissReason=null,this._showModal(e)},e.prototype.hide=function(e){var t=this;1===this.modalsCount&&(this._hideBackdrop(),this.resetScrollbar()),this.modalsCount=this.modalsCount>=1?this.modalsCount-1:0,setTimeout(function(){t._hideModal(e),t.removeLoaders(e)},this.config.animated?s.d.BACKDROP:0)},e.prototype._showBackdrop=function(){var e=this.config.backdrop||"static"===this.config.backdrop,t=!this.backdropRef||!this.backdropRef.instance.isShown;1===this.modalsCount&&(this.removeBackdrop(),e&&t&&(this._backdropLoader.attach(i.a).to("body").show({isAnimated:this.config.animated}),this.backdropRef=this._backdropLoader._componentRef))},e.prototype._hideBackdrop=function(){var e=this;this.backdropRef&&(this.backdropRef.instance.isShown=!1,setTimeout(function(){return e.removeBackdrop()},this.config.animated?s.d.BACKDROP:0))},e.prototype._showModal=function(e){var t=this.loaders[this.loaders.length-1],n=new a.a,r=t.provide({provide:s.c,useValue:this.config}).provide({provide:a.a,useValue:n}).attach(o.a).to("body").show({content:e,isAnimated:this.config.animated,initialState:this.config.initialState,bsModalService:this});return r.instance.level=this.getModalsCount(),n.hide=function(){r.instance.hide()},n.content=t.getInnerComponent()||null,n},e.prototype._hideModal=function(e){var t=this.loaders[e-1];t&&t.hide()},e.prototype.getModalsCount=function(){return this.modalsCount},e.prototype.setDismissReason=function(e){this.lastDismissReason=e},e.prototype.removeBackdrop=function(){this._backdropLoader.hide(),this.backdropRef=null},e.prototype.checkScrollbar=function(){this.isBodyOverflowing=document.body.clientWidth<window.innerWidth,this.scrollbarWidth=this.getScrollbarWidth()},e.prototype.setScrollbar=function(){document&&(this.originalBodyPadding=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")||"0",10),this.isBodyOverflowing&&(document.body.style.paddingRight=this.originalBodyPadding+this.scrollbarWidth+"px"))},e.prototype.resetScrollbar=function(){document.body.style.paddingRight=this.originalBodyPadding+"px"},e.prototype.getScrollbarWidth=function(){var e=this._renderer.createElement("div");this._renderer.addClass(e,s.a.SCROLLBAR_MEASURER),this._renderer.appendChild(document.body,e);var t=e.offsetWidth-e.clientWidth;return this._renderer.removeChild(document.body,e),t},e.prototype._createLoaders=function(){var e=this.clf.createLoader(null,null,null);this.copyEvent(e.onBeforeShow,this.onShow),this.copyEvent(e.onShown,this.onShown),this.copyEvent(e.onBeforeHide,this.onHide),this.copyEvent(e.onHidden,this.onHidden),this.loaders.push(e)},e.prototype.removeLoaders=function(e){this.loaders.splice(e-1,1),this.loaders.forEach(function(e,t){e.instance.level=t+1})},e.prototype.copyEvent=function(e,t){var n=this;e.subscribe(function(){t.emit(n.lastDismissReason)})},e}()},"01QI":function(e,t,n){"use strict";var r=n("xZGU").Buffer;function i(e,t){this.enc=e.encodingName,this.bomAware=e.bomAware,"base64"===this.enc?this.encoder=u:"cesu8"===this.enc&&(this.enc="utf8",this.encoder=c,"\ud83d\udca9"!==r.from("eda0bdedb2a9","hex").toString()&&(this.decoder=l,this.defaultCharUnicode=t.defaultCharUnicode))}e.exports={utf8:{type:"_internal",bomAware:!0},cesu8:{type:"_internal",bomAware:!0},unicode11utf8:"utf8",ucs2:{type:"_internal",bomAware:!0},utf16le:"ucs2",binary:{type:"_internal"},base64:{type:"_internal"},hex:{type:"_internal"},_internal:i},i.prototype.encoder=a,i.prototype.decoder=s;var o=n("fXKp").StringDecoder;function s(e,t){o.call(this,t.enc)}function a(e,t){this.enc=t.enc}function u(e,t){this.prevStr=""}function c(e,t){}function l(e,t){this.acc=0,this.contBytes=0,this.accBytes=0,this.defaultCharUnicode=t.defaultCharUnicode}o.prototype.end||(o.prototype.end=function(){}),s.prototype=o.prototype,a.prototype.write=function(e){return r.from(e,this.enc)},a.prototype.end=function(){},u.prototype.write=function(e){var t=(e=this.prevStr+e).length-e.length%4;return this.prevStr=e.slice(t),e=e.slice(0,t),r.from(e,"base64")},u.prototype.end=function(){return r.from(this.prevStr,"base64")},c.prototype.write=function(e){for(var t=r.alloc(3*e.length),n=0,i=0;i<e.length;i++){var o=e.charCodeAt(i);o<128?t[n++]=o:o<2048?(t[n++]=192+(o>>>6),t[n++]=128+(63&o)):(t[n++]=224+(o>>>12),t[n++]=128+(o>>>6&63),t[n++]=128+(63&o))}return t.slice(0,n)},c.prototype.end=function(){},l.prototype.write=function(e){for(var t=this.acc,n=this.contBytes,r=this.accBytes,i="",o=0;o<e.length;o++){var s=e[o];128!=(192&s)?(n>0&&(i+=this.defaultCharUnicode,n=0),s<128?i+=String.fromCharCode(s):s<224?(t=31&s,n=1,r=1):s<240?(t=15&s,n=2,r=1):i+=this.defaultCharUnicode):n>0?(t=t<<6|63&s,r++,0==--n&&(i+=2===r&&t<128&&t>0?this.defaultCharUnicode:3===r&&t<2048?this.defaultCharUnicode:String.fromCharCode(t))):i+=this.defaultCharUnicode}return this.acc=t,this.contBytes=n,this.accBytes=r,i},l.prototype.end=function(){var e=0;return this.contBytes>0&&(e+=this.defaultCharUnicode),e}},"0KIB":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){return function(){}}()),o=function(){return function(){}}(),s=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.acceptDeployment=function(){return this.ubusService.call({data:[this.authService.getSid(),"fwuagent","accept_deployment",{}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.getDeployment=function(){return this.ubusService.call({data:[this.authService.getSid(),"fwuagent","get_deployment",{}]}).pipe(Object(r.a)(function(e){var t=e.result[1];if(t.success){for(var n=[],r=0,s=t.chunks;r<s.length;r++){var a=s[r],u=new i;u.type=a.type,u.version=a.version,n.push(u)}var c=new o;return c.actionId=t.action_id,c.chunks=n,c}}))},e}()},"0XuU":function(e,t,n){e.exports=n("43KI").Transform},1:function(e,t){},"15JJ":function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("mrSG"),i=n("MGBS"),o=n("rPjj"),s=n("zotm"),a=n("67Y/"),u=n("0/uQ");function c(e,t){return"function"==typeof t?function(n){return n.pipe(c(function(n,r){return Object(u.a)(e(n,r)).pipe(Object(a.a)(function(e,i){return t(n,e,r,i)}))}))}:function(t){return t.lift(new l(e))}}var l=function(){function e(e){this.project=e}return e.prototype.call=function(e,t){return t.subscribe(new h(e,this.project))},e}(),h=function(e){function t(t,n){var r=e.call(this,t)||this;return r.project=n,r.index=0,r}return r.c(t,e),t.prototype._next=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(r){return void this.destination.error(r)}this._innerSub(t,e,n)},t.prototype._innerSub=function(e,t,n){var r=this.innerSubscription;r&&r.unsubscribe();var i=new o.a(this,void 0,void 0);this.destination.add(i),this.innerSubscription=Object(s.a)(this,e,t,n,i)},t.prototype._complete=function(){var t=this.innerSubscription;t&&!t.closed||e.prototype._complete.call(this),this.unsubscribe()},t.prototype._unsubscribe=function(){this.innerSubscription=null},t.prototype.notifyComplete=function(t){this.destination.remove(t),this.innerSubscription=null,this.isStopped&&e.prototype._complete.call(this)},t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},t}(i.a)},"1IWx":function(e,t,n){e.exports=i;var r=n("+qE3").EventEmitter;function i(){r.call(this)}n("P7XM")(i,r),i.Readable=n("43KI"),i.Writable=n("LGOv"),i.Duplex=n("CWBI"),i.Transform=n("0XuU"),i.PassThrough=n("wq4j"),i.Stream=i,i.prototype.pipe=function(e,t){var n=this;function i(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function o(){n.readable&&n.resume&&n.resume()}n.on("data",i),e.on("drain",o),e._isStdio||t&&!1===t.end||(n.on("end",a),n.on("close",u));var s=!1;function a(){s||(s=!0,e.end())}function u(){s||(s=!0,"function"==typeof e.destroy&&e.destroy())}function c(e){if(l(),0===r.listenerCount(this,"error"))throw e}function l(){n.removeListener("data",i),e.removeListener("drain",o),n.removeListener("end",a),n.removeListener("close",u),n.removeListener("error",c),e.removeListener("error",c),n.removeListener("end",l),n.removeListener("close",l),e.removeListener("close",l)}return n.on("error",c),e.on("error",c),n.on("end",l),n.on("close",l),e.on("close",l),e.emit("pipe",n),e}},"1ZPt":function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("K9Ia"),i=n("xXU7"),o=n("ny24"),s=n("15JJ"),a=n("Vx+w"),u=(n("jGGy"),n("Obbf"),n("Sxbm"),n("t2rx"),n("+3se")),c=(n("QRwJ"),n("5dpn"),function(){function e(e,t,n,i,o,s){this.sonService=e,this.authService=t,this.vapsService=n,this.notification=i,this.isRetailService=o,this.pageLoadingService=s,this.cloneStatusSubject=new r.a,this.wpsCloneDuration=120,this.wpsCloneStarted=0,this.wpsCloneState="stopped",this.cloneSsidButtonTitle=Object(u.b)("Clone SSID via WPS"),this.ngUnsubscribe=new r.a,this.pageLoadingService.register(["sonLoaded"])}return e.prototype.ngOnInit=function(){this.sid=this.authService.getSid(),this.getSons(),this.isRetailService.isDeviceLicenseRetail&&(this.pageLoadingService.register(["radiosLoaded"]),this.checkRadiosEnabled())},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.getSons=function(){var e=this;this.sonService.getSons().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){var n=t[0];e.enable=Number(n.enabled),e.atf=Number(n.airtimefairness),e.bsteer=Number(n.bandsteering),e.ieee80211k=Number(n.ieee80211k),e.ieee80211v=Number(n.ieee80211v),e.ieee80211r=Number(n.ieee80211r),e.vaps=t[1],e.pageLoadingService.ready("sonLoaded")})},e.prototype.save=function(){var e=this;this.sonService.saveSons({enable:this.enable,atf:this.atf,bsteer:this.bsteer,ieee80211k:this.ieee80211k,ieee80211v:this.ieee80211v,ieee80211r:this.ieee80211r,vaps:this.vaps}).subscribe(function(){e.cleanupForm()})},e.prototype.wpsClone=function(){var e=this;this.vapsService.checkCloneStatus().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){"Ok"==t?(e.wpsCloneState="running",e.elapsed=0,e.wpsCloneStarted=(new Date).getTime(),e.queryWpsCloneStatus(),e.timeout=setTimeout(function(){e.onWpsCloneStop()},1e3*e.wpsCloneDuration+3e3),Object(i.a)(100).pipe(Object(o.a)(e.cloneStatusSubject),Object(o.a)(e.ngUnsubscribe)).subscribe(function(){e.elapsed=((new Date).getTime()-e.wpsCloneStarted)/1e3})):"restarted"==t&&(e.wpsCloneStarted=(new Date).getTime())})},e.prototype.queryWpsCloneStatus=function(){var e=this;this.cloneStatusSubject.next(!0);var t="";Object(i.a)(2e3).pipe(Object(o.a)(this.cloneStatusSubject),Object(s.a)(function(){return e.vapsService.getCloneStatus()}),Object(o.a)(this.ngUnsubscribe)).subscribe(function(n){"running"!=n.state&&("success"==n.state?(e.wpsCloneState="success",t=Object(u.b)("WPS Clone Mode succeeded!"),e.notification.success(t)):"failed"==n.state&&(e.wpsCloneState="failed",t=Object(u.b)("WPS Clone Mode failed: ")+n.reason,e.notification.error(t)),e.onWpsCloneStop())})},e.prototype.onWpsCloneStop=function(){var e=this;this.elapsed=this.wpsCloneDuration,this.cloneStatusSubject.next(!1),clearTimeout(this.timeout),this.timeout=!1,setTimeout(function(){e.elapsed=0},100)},e.prototype.checkRadiosEnabled=function(){var e=this;this.vapsService.getRadios().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){var n=Object.values(t).find(function(e){return"wifi0"==e[".name"]}),r=Object.values(t).find(function(e){return"wifi1"==e[".name"]}),i=n&&0==(Number(n.disabled)||0),o=!1;Object(u.e)(a.a,"wireless.devices.radio0")&&Object(u.e)(a.a,"wireless.devices.radio1")&&(o=r&&0==(Number(r.disabled)||0)),e.radiosDisabled=!i&&!o,e.radiosDisabled&&(e.cloneSsidButtonTitle=Object(u.b)("Please activate the WiFi network to enable Clone SSID via WPS")),e.pageLoadingService.ready("radiosLoaded")})},e.prototype.cleanupForm=function(){this.delos.form.markAsUntouched(),this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity(),this.getSons()},e.prototype.cancel=function(){this.cleanupForm()},e.prototype.markAsDirty=function(){var e=this;setTimeout(function(){e.delos.form.markAsDirty(),e.delos.form.updateValueAndValidity()},0)},e}())},"1b+T":function(e,t,n){"use strict";n.d(t,"a",function(){return u});var r=n("K9Ia"),i=n("F/XL"),o=n("gI3B"),s=n("ny24"),a=n("vubp"),u=(n("UVPe"),n("qKjf"),function(){function e(e,t){this.findMeService=e,this.spinner=t,this.duration=10,this.timeoutSubject=new r.a,this.state="stopped"}return e.prototype.ngOnInit=function(){this.spinner.hide(),this.timeoutSubject.next(!0)},e.prototype.start=function(){var e=this;this.state="pending",this.findMeService.start(this.duration).subscribe(function(){e.state="buzzing";var t=(new Date).getTime();Object(i.a)(null).pipe(Object(s.a)(e.timeoutSubject),Object(a.a)(1e3*e.duration)).subscribe(function(){e.onBuzzerStop()}),Object(o.a)(0,100).pipe(Object(s.a)(e.timeoutSubject)).subscribe(function(){e.elapsed=((new Date).getTime()-t)/1e3})})},e.prototype.stop=function(){var e=this;this.timeoutSubject.next(!1),this.state="pending",this.findMeService.stop().subscribe(function(){e.onBuzzerStop()})},e.prototype.onBuzzerStop=function(){this.elapsed=this.duration,this.timeoutSubject.next(!1),this.state="stopped",this.elapsed=0},e}())},"1dzw":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=767,i=function(){function e(e,t){var n=this;this.hostElement=e,this.zone=t,this.mediaMatcher=matchMedia("(max-width: "+r+"px)"),this.mediaMatcher.addListener(function(e){n.zone.run(function(){return n.mediaMatcher=e})})}return e.prototype.ngOnChanges=function(){!this.appFocus||this.mediaMatcher.matches&&!this.forceFocusForMobileDevice||this.hostElement.nativeElement.focus()},e}()},"1gqn":function(e,t){e.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},2:function(e,t){},"26FU":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("mrSG"),i=n("K9Ia"),o=n("8g8A"),s=function(e){function t(t){var n=e.call(this)||this;return n._value=t,n}return r.c(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),t.prototype._subscribe=function(t){var n=e.prototype._subscribe.call(this,t);return n&&!n.closed&&t.next(this._value),n},t.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(i.a)},"2Bdj":function(e,t,n){"use strict";function r(e){return"function"==typeof e}n.d(t,"a",function(){return r})},"2Nt0":function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},"2ePl":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){return e&&"number"==typeof e.length&&"function"!=typeof e}},3:function(e,t){},"3BRs":function(e,t,n){"use strict";(function(t,r,i){var o=n("lm0R");function s(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;for(e.entry=null;r;){var i=r.callback;t.pendingcb--,i(void 0),r=r.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=y;var a,u=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?r:o.nextTick;y.WritableState=v;var c=n("Onz0");c.inherits=n("P7XM");var l,h={deprecate:n("t9FE")},f=n("QpuX"),d=n("hwdV").Buffer,p=i.Uint8Array||function(){},g=n("RoFp");function b(){}function v(e,t){a=a||n("sZro");var r=t instanceof a;this.objectMode=!!(e=e||{}).objectMode,r&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,c=e.writableHighWaterMark;this.highWaterMark=i||0===i?i:r&&(c||0===c)?c:this.objectMode?16:16384,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1,this.decodeStrings=!(!1===e.decodeStrings),this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,i=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,i){--t.pendingcb,n?(o.nextTick(i,r),o.nextTick(C,e,t),e._writableState.errorEmitted=!0,e.emit("error",r)):(i(r),e._writableState.errorEmitted=!0,e.emit("error",r),C(e,t))}(e,n,r,t,i);else{var s=S(n);s||n.corked||n.bufferProcessing||!n.bufferedRequest||_(e,n),r?u(w,e,n,s,i):w(e,n,s,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function y(e){if(a=a||n("sZro"),!(l.call(y,this)||this instanceof a))return new y(e);this._writableState=new v(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),f.call(this)}function m(e,t,n,r,i,o,s){t.writelen=r,t.writecb=s,t.writing=!0,t.sync=!0,n?e._writev(i,t.onwrite):e._write(i,o,t.onwrite),t.sync=!1}function w(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),C(e,t)}function _(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=new Array(t.bufferedRequestCount),i=t.corkedRequestsFree;i.entry=n;for(var o=0,a=!0;n;)r[o]=n,n.isBuf||(a=!1),n=n.next,o+=1;r.allBuffers=a,m(e,t,!0,t.length,r,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new s(t),t.bufferedRequestCount=0}else{for(;n;){var u=n.chunk;if(m(e,t,!1,t.objectMode?1:u.length,u,n.encoding,n.callback),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function S(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function O(e,t){e._final(function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),C(e,t)})}function C(e,t){var n=S(t);return n&&(function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,o.nextTick(O,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}c.inherits(y,f),v.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(v.prototype,"buffer",{get:h.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(l=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!l.call(this,e)||this===y&&e&&e._writableState instanceof v}})):l=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},y.prototype.write=function(e,t,n){var r,i=this._writableState,s=!1,a=!i.objectMode&&(d.isBuffer(r=e)||r instanceof p);return a&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),"function"==typeof t&&(n=t,t=null),a?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof n&&(n=b),i.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),o.nextTick(t,n)}(this,n):(a||function(e,t,n,r){var i=!0,s=!1;return null===n?s=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(s=new TypeError("Invalid non-string/buffer chunk")),s&&(e.emit("error",s),o.nextTick(r,s),i=!1),i}(this,i,e,n))&&(i.pendingcb++,s=function(e,t,n,r,i,o){if(!n){var s=function(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=d.from(t,n)),t}(t,r,i);r!==s&&(n=!0,i="buffer",r=s)}var a=t.objectMode?1:r.length;t.length+=a;var u=t.length<t.highWaterMark;if(u||(t.needDrain=!0),t.writing||t.corked){var c=t.lastBufferedRequest;t.lastBufferedRequest={chunk:r,encoding:i,isBuf:n,callback:o,next:null},c?c.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else m(e,t,!1,a,r,i,o);return u}(this,i,a,e,t,n)),s},y.prototype.cork=function(){this._writableState.corked++},y.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||_(this,e))},y.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(y.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),y.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},y.prototype._writev=null,y.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||function(e,t,n){t.ending=!0,C(e,t),n&&(t.finished?o.nextTick(n):e.once("finish",n)),t.ended=!0,e.writable=!1}(this,r,n)},Object.defineProperty(y.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=g.destroy,y.prototype._undestroy=g.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n("8oxB"),n("URgk").setImmediate,n("yLpj"))},"3GIH":function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"a",function(){return i});var r="undefined"!=typeof window&&window||{},i=r.document},"3GWt":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(e){this.http=e}return e.prototype.call=function(e,t){return"HEAD"==t?this.http.head(e):"OPTIONS"==t?this.http.options(e):void 0},e}()},"3a/w":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getDevices=function(){return this.ubusService.call({data:[[this.authService.getSid(),"network.plctool","avlninfo",{}],[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"DlanMacAddress"}],[this.authService.getSid(),"uci","get",{config:"plc",section:"plc",option:"disabled"}]]}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1]})}))},e}())},4:function(e,t){},"4+XQ":function(e,t,n){"use strict";n.d(t,"a",function(){return l});var r=n("gIcY"),i=n("K9Ia"),o=n("p0ib"),s=n("vubp"),a=n("ny24"),u=n("Vx+w"),c=n("+3se"),l=(n("UVPe"),n("MLAN"),n("wEt0"),n("Qtq/"),n("qEVT"),n("tP3N"),n("Xpm8"),n("qDEp"),n("61DS"),function(){function e(e,t,n){this.spinner=e,this.cdr=t,this.route=n,this.ngUnsubscribe=new i.a,this.standyAvilable=Object(c.e)(u.a,"plc.standby.available")||Object(c.e)(u.a,"ghn.standby.available")}return e.prototype.ngOnInit=function(){this.ledWithScheme=Object(c.e)(u.a,"button.leds.schemes"),this.sid=this.route.snapshot.params.sid},e.prototype.ngAfterViewChecked=function(){this.cdr.detectChanges()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.ngAfterViewInit=function(){var e=this;this.childComponents=[this.sysInfoComponent,this.buttonsComponent,this.ledsComponent,this.ledsStandartComponent,this.changePasswordComponent,this.timeServerComponent,this.timeZoneComponent,this.powerSaveComponent],this.spinner.spinnerState.pipe(Object(s.a)(0),Object(a.a)(this.ngUnsubscribe)).subscribe(function(t){if(0==t.show){e.childForms=[],e.childComponents.forEach(function(t){if(Object(c.g)(t))for(var n in t)t.hasOwnProperty(n)&&t[n]instanceof r.m&&e.childForms.push(t[n])});var n=[];e.childForms.forEach(function(e){return n.push(e.statusChanges)}),o.a.apply(void 0,n).pipe(Object(s.a)(0),Object(a.a)(e.ngUnsubscribe)).subscribe(function(t){e.invalid=e.childForms.some(function(e){return e.invalid}),e.dirty=e.childForms.some(function(e){return e.dirty}),e.dirty?e.markAsDirty():e.markAsPristine(),e.invalid&&e.markAsInvalid()})}})},e.prototype.save=function(){this.childComponents.forEach(function(e){Object(c.g)(e)&&Object.keys(e).forEach(function(t){var n=e[t];n instanceof r.m&&n.dirty&&e.save()})}),this.markAsPristine()},e.prototype.cancel=function(){this.childComponents.forEach(function(e){Object(c.g)(e)&&Object.keys(e).forEach(function(t){var n=e[t];n instanceof r.m&&n.dirty&&e.cancel()})}),this.markAsPristine()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.markAsInvalid=function(){this.delos.form.setErrors({incorrect:!0})},e}())},"43KI":function(e,t,n){(t=e.exports=n("rXFu")).Stream=t,t.Readable=t,t.Writable=n("3BRs"),t.Duplex=n("sZro"),t.Transform=n("J78i"),t.PassThrough=n("eA/Y")},"4PzE":function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n("CPDd");var r=function(){function e(e){this.addressCheckService=e,this.validator=this.hostOrIpValidator()}return e.prototype.validate=function(e){return this.validator(e)},e.prototype.hostOrIpValidator=function(){var e=this;return function(t){return e.addressCheckService.hostOrIP(t.value)?null:{appDelosHostOrIp:{valid:!1}}}},e}()},"5Ki+":function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("67Y/"),i=n("psW0"),o=n("Vx+w"),s=(n("+NEN"),n("jGGy"),n("+3se")),a=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getRadios=function(){var e=[[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"sta"}}]];return Object(s.g)(o.a.plc)?e.push([this.authService.getSid(),"uci","get",{config:"plc",section:"plc"}]):Object(s.g)(o.a.ghn)&&e.push([this.authService.getSid(),"uci","get",{config:"ghn",section:"ghn"}]),this.ubusService.call({data:e}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1]&&e[1].values})}))},e.prototype.save=function(e,t,n,r,o){var s=this,a=[];return a.push([this.authService.getSid(),"uci","delete",{config:"wireless",type:"wifi-device",option:"beacon_int"}]),Object.keys(e).forEach(function(e){a.push([s.authService.getSid(),"uci","set",{config:"wireless",section:e,values:{autorescan:Number(t)>0?"1":"0",autorescan_interval:t}}])}),a.push([this.authService.getSid(),"uci","set",{config:"wireless",section:n,values:r}],[this.authService.getSid(),"uci","delete",{config:"wireless",section:n,options:o}]),this.ubusService.call({data:a}).pipe(Object(i.a)(function(){return s.ubusService.call({data:[s.authService.getSid(),"uci","commit",{config:"wireless"}]})}))},e}()},"5WRQ":function(e){e.exports=[["0","\0",127],["8141","\uac02\uac03\uac05\uac06\uac0b",4,"\uac18\uac1e\uac1f\uac21\uac22\uac23\uac25",6,"\uac2e\uac32\uac33\uac34"],["8161","\uac35\uac36\uac37\uac3a\uac3b\uac3d\uac3e\uac3f\uac41",9,"\uac4c\uac4e",5,"\uac55"],["8181","\uac56\uac57\uac59\uac5a\uac5b\uac5d",18,"\uac72\uac73\uac75\uac76\uac79\uac7b",4,"\uac82\uac87\uac88\uac8d\uac8e\uac8f\uac91\uac92\uac93\uac95",6,"\uac9e\uaca2",5,"\uacab\uacad\uacae\uacb1",6,"\uacba\uacbe\uacbf\uacc0\uacc2\uacc3\uacc5\uacc6\uacc7\uacc9\uacca\uaccb\uaccd",7,"\uacd6\uacd8",7,"\uace2\uace3\uace5\uace6\uace9\uaceb\uaced\uacee\uacf2\uacf4\uacf7",4,"\uacfe\uacff\uad01\uad02\uad03\uad05\uad07",4,"\uad0e\uad10\uad12\uad13"],["8241","\uad14\uad15\uad16\uad17\uad19\uad1a\uad1b\uad1d\uad1e\uad1f\uad21",7,"\uad2a\uad2b\uad2e",5],["8261","\uad36\uad37\uad39\uad3a\uad3b\uad3d",6,"\uad46\uad48\uad4a",5,"\uad51\uad52\uad53\uad55\uad56\uad57"],["8281","\uad59",7,"\uad62\uad64",7,"\uad6e\uad6f\uad71\uad72\uad77\uad78\uad79\uad7a\uad7e\uad80\uad83",4,"\uad8a\uad8b\uad8d\uad8e\uad8f\uad91",10,"\uad9e",5,"\uada5",17,"\uadb8",7,"\uadc2\uadc3\uadc5\uadc6\uadc7\uadc9",6,"\uadd2\uadd4",7,"\uaddd\uadde\uaddf\uade1\uade2\uade3\uade5",18],["8341","\uadfa\uadfb\uadfd\uadfe\uae02",5,"\uae0a\uae0c\uae0e",5,"\uae15",7],["8361","\uae1d",18,"\uae32\uae33\uae35\uae36\uae39\uae3b\uae3c"],["8381","\uae3d\uae3e\uae3f\uae42\uae44\uae47\uae48\uae49\uae4b\uae4f\uae51\uae52\uae53\uae55\uae57",4,"\uae5e\uae62\uae63\uae64\uae66\uae67\uae6a\uae6b\uae6d\uae6e\uae6f\uae71",6,"\uae7a\uae7e",5,"\uae86",5,"\uae8d",46,"\uaebf\uaec1\uaec2\uaec3\uaec5",6,"\uaece\uaed2",5,"\uaeda\uaedb\uaedd",8],["8441","\uaee6\uaee7\uaee9\uaeea\uaeec\uaeee",5,"\uaef5\uaef6\uaef7\uaef9\uaefa\uaefb\uaefd",8],["8461","\uaf06\uaf09\uaf0a\uaf0b\uaf0c\uaf0e\uaf0f\uaf11",18],["8481","\uaf24",7,"\uaf2e\uaf2f\uaf31\uaf33\uaf35",6,"\uaf3e\uaf40\uaf44\uaf45\uaf46\uaf47\uaf4a",5,"\uaf51",10,"\uaf5e",5,"\uaf66",18,"\uaf7a",5,"\uaf81\uaf82\uaf83\uaf85\uaf86\uaf87\uaf89",6,"\uaf92\uaf93\uaf94\uaf96",5,"\uaf9d",26,"\uafba\uafbb\uafbd\uafbe"],["8541","\uafbf\uafc1",5,"\uafca\uafcc\uafcf",4,"\uafd5",6,"\uafdd",4],["8561","\uafe2",5,"\uafea",5,"\uaff2\uaff3\uaff5\uaff6\uaff7\uaff9",6,"\ub002\ub003"],["8581","\ub005",6,"\ub00d\ub00e\ub00f\ub011\ub012\ub013\ub015",6,"\ub01e",9,"\ub029",26,"\ub046\ub047\ub049\ub04b\ub04d\ub04f\ub050\ub051\ub052\ub056\ub058\ub05a\ub05b\ub05c\ub05e",29,"\ub07e\ub07f\ub081\ub082\ub083\ub085",6,"\ub08e\ub090\ub092",5,"\ub09b\ub09d\ub09e\ub0a3\ub0a4"],["8641","\ub0a5\ub0a6\ub0a7\ub0aa\ub0b0\ub0b2\ub0b6\ub0b7\ub0b9\ub0ba\ub0bb\ub0bd",6,"\ub0c6\ub0ca",5,"\ub0d2"],["8661","\ub0d3\ub0d5\ub0d6\ub0d7\ub0d9",6,"\ub0e1\ub0e2\ub0e3\ub0e4\ub0e6",10],["8681","\ub0f1",22,"\ub10a\ub10d\ub10e\ub10f\ub111\ub114\ub115\ub116\ub117\ub11a\ub11e",4,"\ub126\ub127\ub129\ub12a\ub12b\ub12d",6,"\ub136\ub13a",5,"\ub142\ub143\ub145\ub146\ub147\ub149",6,"\ub152\ub153\ub156\ub157\ub159\ub15a\ub15b\ub15d\ub15e\ub15f\ub161",22,"\ub17a\ub17b\ub17d\ub17e\ub17f\ub181\ub183",4,"\ub18a\ub18c\ub18e\ub18f\ub190\ub191\ub195\ub196\ub197\ub199\ub19a\ub19b\ub19d"],["8741","\ub19e",9,"\ub1a9",15],["8761","\ub1b9",18,"\ub1cd\ub1ce\ub1cf\ub1d1\ub1d2\ub1d3\ub1d5"],["8781","\ub1d6",5,"\ub1de\ub1e0",7,"\ub1ea\ub1eb\ub1ed\ub1ee\ub1ef\ub1f1",7,"\ub1fa\ub1fc\ub1fe",5,"\ub206\ub207\ub209\ub20a\ub20d",6,"\ub216\ub218\ub21a",5,"\ub221",18,"\ub235",6,"\ub23d",26,"\ub259\ub25a\ub25b\ub25d\ub25e\ub25f\ub261",6,"\ub26a",4],["8841","\ub26f",4,"\ub276",5,"\ub27d",6,"\ub286\ub287\ub288\ub28a",4],["8861","\ub28f\ub292\ub293\ub295\ub296\ub297\ub29b",4,"\ub2a2\ub2a4\ub2a7\ub2a8\ub2a9\ub2ab\ub2ad\ub2ae\ub2af\ub2b1\ub2b2\ub2b3\ub2b5\ub2b6\ub2b7"],["8881","\ub2b8",15,"\ub2ca\ub2cb\ub2cd\ub2ce\ub2cf\ub2d1\ub2d3",4,"\ub2da\ub2dc\ub2de\ub2df\ub2e0\ub2e1\ub2e3\ub2e7\ub2e9\ub2ea\ub2f0\ub2f1\ub2f2\ub2f6\ub2fc\ub2fd\ub2fe\ub302\ub303\ub305\ub306\ub307\ub309",6,"\ub312\ub316",5,"\ub31d",54,"\ub357\ub359\ub35a\ub35d\ub360\ub361\ub362\ub363"],["8941","\ub366\ub368\ub36a\ub36c\ub36d\ub36f\ub372\ub373\ub375\ub376\ub377\ub379",6,"\ub382\ub386",5,"\ub38d"],["8961","\ub38e\ub38f\ub391\ub392\ub393\ub395",10,"\ub3a2",5,"\ub3a9\ub3aa\ub3ab\ub3ad"],["8981","\ub3ae",21,"\ub3c6\ub3c7\ub3c9\ub3ca\ub3cd\ub3cf\ub3d1\ub3d2\ub3d3\ub3d6\ub3d8\ub3da\ub3dc\ub3de\ub3df\ub3e1\ub3e2\ub3e3\ub3e5\ub3e6\ub3e7\ub3e9",18,"\ub3fd",18,"\ub411",6,"\ub419\ub41a\ub41b\ub41d\ub41e\ub41f\ub421",6,"\ub42a\ub42c",7,"\ub435",15],["8a41","\ub445",10,"\ub452\ub453\ub455\ub456\ub457\ub459",6,"\ub462\ub464\ub466"],["8a61","\ub467",4,"\ub46d",18,"\ub481\ub482"],["8a81","\ub483",4,"\ub489",19,"\ub49e",5,"\ub4a5\ub4a6\ub4a7\ub4a9\ub4aa\ub4ab\ub4ad",7,"\ub4b6\ub4b8\ub4ba",5,"\ub4c1\ub4c2\ub4c3\ub4c5\ub4c6\ub4c7\ub4c9",6,"\ub4d1\ub4d2\ub4d3\ub4d4\ub4d6",5,"\ub4de\ub4df\ub4e1\ub4e2\ub4e5\ub4e7",4,"\ub4ee\ub4f0\ub4f2",5,"\ub4f9",26,"\ub516\ub517\ub519\ub51a\ub51d"],["8b41","\ub51e",5,"\ub526\ub52b",4,"\ub532\ub533\ub535\ub536\ub537\ub539",6,"\ub542\ub546"],["8b61","\ub547\ub548\ub549\ub54a\ub54e\ub54f\ub551\ub552\ub553\ub555",6,"\ub55e\ub562",8],["8b81","\ub56b",52,"\ub5a2\ub5a3\ub5a5\ub5a6\ub5a7\ub5a9\ub5ac\ub5ad\ub5ae\ub5af\ub5b2\ub5b6",4,"\ub5be\ub5bf\ub5c1\ub5c2\ub5c3\ub5c5",6,"\ub5ce\ub5d2",5,"\ub5d9",18,"\ub5ed",18],["8c41","\ub600",15,"\ub612\ub613\ub615\ub616\ub617\ub619",4],["8c61","\ub61e",6,"\ub626",5,"\ub62d",6,"\ub635",5],["8c81","\ub63b",12,"\ub649",26,"\ub665\ub666\ub667\ub669",50,"\ub69e\ub69f\ub6a1\ub6a2\ub6a3\ub6a5",5,"\ub6ad\ub6ae\ub6af\ub6b0\ub6b2",16],["8d41","\ub6c3",16,"\ub6d5",8],["8d61","\ub6de",17,"\ub6f1\ub6f2\ub6f3\ub6f5\ub6f6\ub6f7\ub6f9\ub6fa"],["8d81","\ub6fb",4,"\ub702\ub703\ub704\ub706",33,"\ub72a\ub72b\ub72d\ub72e\ub731",6,"\ub73a\ub73c",7,"\ub745\ub746\ub747\ub749\ub74a\ub74b\ub74d",6,"\ub756",9,"\ub761\ub762\ub763\ub765\ub766\ub767\ub769",6,"\ub772\ub774\ub776",5,"\ub77e\ub77f\ub781\ub782\ub783\ub785",6,"\ub78e\ub793\ub794\ub795\ub79a\ub79b\ub79d\ub79e"],["8e41","\ub79f\ub7a1",6,"\ub7aa\ub7ae",5,"\ub7b6\ub7b7\ub7b9",8],["8e61","\ub7c2",4,"\ub7c8\ub7ca",19],["8e81","\ub7de",13,"\ub7ee\ub7ef\ub7f1\ub7f2\ub7f3\ub7f5",6,"\ub7fe\ub802",4,"\ub80a\ub80b\ub80d\ub80e\ub80f\ub811",6,"\ub81a\ub81c\ub81e",5,"\ub826\ub827\ub829\ub82a\ub82b\ub82d",6,"\ub836\ub83a",5,"\ub841\ub842\ub843\ub845",11,"\ub852\ub854",7,"\ub85e\ub85f\ub861\ub862\ub863\ub865",6,"\ub86e\ub870\ub872",5,"\ub879\ub87a\ub87b\ub87d",7],["8f41","\ub885",7,"\ub88e",17],["8f61","\ub8a0",7,"\ub8a9",6,"\ub8b1\ub8b2\ub8b3\ub8b5\ub8b6\ub8b7\ub8b9",4],["8f81","\ub8be\ub8bf\ub8c2\ub8c4\ub8c6",5,"\ub8cd\ub8ce\ub8cf\ub8d1\ub8d2\ub8d3\ub8d5",7,"\ub8de\ub8e0\ub8e2",5,"\ub8ea\ub8eb\ub8ed\ub8ee\ub8ef\ub8f1",6,"\ub8fa\ub8fc\ub8fe",5,"\ub905",18,"\ub919",6,"\ub921",26,"\ub93e\ub93f\ub941\ub942\ub943\ub945",6,"\ub94d\ub94e\ub950\ub952",5],["9041","\ub95a\ub95b\ub95d\ub95e\ub95f\ub961",6,"\ub96a\ub96c\ub96e",5,"\ub976\ub977\ub979\ub97a\ub97b\ub97d"],["9061","\ub97e",5,"\ub986\ub988\ub98b\ub98c\ub98f",15],["9081","\ub99f",12,"\ub9ae\ub9af\ub9b1\ub9b2\ub9b3\ub9b5",6,"\ub9be\ub9c0\ub9c2",5,"\ub9ca\ub9cb\ub9cd\ub9d3",4,"\ub9da\ub9dc\ub9df\ub9e0\ub9e2\ub9e6\ub9e7\ub9e9\ub9ea\ub9eb\ub9ed",6,"\ub9f6\ub9fb",4,"\uba02",5,"\uba09",11,"\uba16",33,"\uba3a\uba3b\uba3d\uba3e\uba3f\uba41\uba43\uba44\uba45\uba46"],["9141","\uba47\uba4a\uba4c\uba4f\uba50\uba51\uba52\uba56\uba57\uba59\uba5a\uba5b\uba5d",6,"\uba66\uba6a",5],["9161","\uba72\uba73\uba75\uba76\uba77\uba79",9,"\uba86\uba88\uba89\uba8a\uba8b\uba8d",5],["9181","\uba93",20,"\ubaaa\ubaad\ubaae\ubaaf\ubab1\ubab3",4,"\ubaba\ubabc\ubabe",5,"\ubac5\ubac6\ubac7\ubac9",14,"\ubada",33,"\ubafd\ubafe\ubaff\ubb01\ubb02\ubb03\ubb05",7,"\ubb0e\ubb10\ubb12",5,"\ubb19\ubb1a\ubb1b\ubb1d\ubb1e\ubb1f\ubb21",6],["9241","\ubb28\ubb2a\ubb2c",7,"\ubb37\ubb39\ubb3a\ubb3f",4,"\ubb46\ubb48\ubb4a\ubb4b\ubb4c\ubb4e\ubb51\ubb52"],["9261","\ubb53\ubb55\ubb56\ubb57\ubb59",7,"\ubb62\ubb64",7,"\ubb6d",4],["9281","\ubb72",21,"\ubb89\ubb8a\ubb8b\ubb8d\ubb8e\ubb8f\ubb91",18,"\ubba5\ubba6\ubba7\ubba9\ubbaa\ubbab\ubbad",6,"\ubbb5\ubbb6\ubbb8",7,"\ubbc1\ubbc2\ubbc3\ubbc5\ubbc6\ubbc7\ubbc9",6,"\ubbd1\ubbd2\ubbd4",35,"\ubbfa\ubbfb\ubbfd\ubbfe\ubc01"],["9341","\ubc03",4,"\ubc0a\ubc0e\ubc10\ubc12\ubc13\ubc19\ubc1a\ubc20\ubc21\ubc22\ubc23\ubc26\ubc28\ubc2a\ubc2b\ubc2c\ubc2e\ubc2f\ubc32\ubc33\ubc35"],["9361","\ubc36\ubc37\ubc39",6,"\ubc42\ubc46\ubc47\ubc48\ubc4a\ubc4b\ubc4e\ubc4f\ubc51",8],["9381","\ubc5a\ubc5b\ubc5c\ubc5e",37,"\ubc86\ubc87\ubc89\ubc8a\ubc8d\ubc8f",4,"\ubc96\ubc98\ubc9b",4,"\ubca2\ubca3\ubca5\ubca6\ubca9",6,"\ubcb2\ubcb6",5,"\ubcbe\ubcbf\ubcc1\ubcc2\ubcc3\ubcc5",7,"\ubcce\ubcd2\ubcd3\ubcd4\ubcd6\ubcd7\ubcd9\ubcda\ubcdb\ubcdd",22,"\ubcf7\ubcf9\ubcfa\ubcfb\ubcfd"],["9441","\ubcfe",5,"\ubd06\ubd08\ubd0a",5,"\ubd11\ubd12\ubd13\ubd15",8],["9461","\ubd1e",5,"\ubd25",6,"\ubd2d",12],["9481","\ubd3a",5,"\ubd41",6,"\ubd4a\ubd4b\ubd4d\ubd4e\ubd4f\ubd51",6,"\ubd5a",9,"\ubd65\ubd66\ubd67\ubd69",22,"\ubd82\ubd83\ubd85\ubd86\ubd8b",4,"\ubd92\ubd94\ubd96\ubd97\ubd98\ubd9b\ubd9d",6,"\ubda5",10,"\ubdb1",6,"\ubdb9",24],["9541","\ubdd2\ubdd3\ubdd6\ubdd7\ubdd9\ubdda\ubddb\ubddd",11,"\ubdea",5,"\ubdf1"],["9561","\ubdf2\ubdf3\ubdf5\ubdf6\ubdf7\ubdf9",6,"\ube01\ube02\ube04\ube06",5,"\ube0e\ube0f\ube11\ube12\ube13"],["9581","\ube15",6,"\ube1e\ube20",35,"\ube46\ube47\ube49\ube4a\ube4b\ube4d\ube4f",4,"\ube56\ube58\ube5c\ube5d\ube5e\ube5f\ube62\ube63\ube65\ube66\ube67\ube69\ube6b",4,"\ube72\ube76",4,"\ube7e\ube7f\ube81\ube82\ube83\ube85",6,"\ube8e\ube92",5,"\ube9a",13,"\ubea9",14],["9641","\ubeb8",23,"\ubed2\ubed3"],["9661","\ubed5\ubed6\ubed9",6,"\ubee1\ubee2\ubee6",5,"\ubeed",8],["9681","\ubef6",10,"\ubf02",5,"\ubf0a",13,"\ubf1a\ubf1e",33,"\ubf42\ubf43\ubf45\ubf46\ubf47\ubf49",6,"\ubf52\ubf53\ubf54\ubf56",44],["9741","\ubf83",16,"\ubf95",8],["9761","\ubf9e",17,"\ubfb1",7],["9781","\ubfb9",11,"\ubfc6",5,"\ubfce\ubfcf\ubfd1\ubfd2\ubfd3\ubfd5",6,"\ubfdd\ubfde\ubfe0\ubfe2",89,"\uc03d\uc03e\uc03f"],["9841","\uc040",16,"\uc052",5,"\uc059\uc05a\uc05b"],["9861","\uc05d\uc05e\uc05f\uc061",6,"\uc06a",15],["9881","\uc07a",21,"\uc092\uc093\uc095\uc096\uc097\uc099",6,"\uc0a2\uc0a4\uc0a6",5,"\uc0ae\uc0b1\uc0b2\uc0b7",4,"\uc0be\uc0c2\uc0c3\uc0c4\uc0c6\uc0c7\uc0ca\uc0cb\uc0cd\uc0ce\uc0cf\uc0d1",6,"\uc0da\uc0de",5,"\uc0e6\uc0e7\uc0e9\uc0ea\uc0eb\uc0ed",6,"\uc0f6\uc0f8\uc0fa",5,"\uc101\uc102\uc103\uc105\uc106\uc107\uc109",6,"\uc111\uc112\uc113\uc114\uc116",5,"\uc121\uc122\uc125\uc128\uc129\uc12a\uc12b\uc12e"],["9941","\uc132\uc133\uc134\uc135\uc137\uc13a\uc13b\uc13d\uc13e\uc13f\uc141",6,"\uc14a\uc14e",5,"\uc156\uc157"],["9961","\uc159\uc15a\uc15b\uc15d",6,"\uc166\uc16a",5,"\uc171\uc172\uc173\uc175\uc176\uc177\uc179\uc17a\uc17b"],["9981","\uc17c",8,"\uc186",5,"\uc18f\uc191\uc192\uc193\uc195\uc197",4,"\uc19e\uc1a0\uc1a2\uc1a3\uc1a4\uc1a6\uc1a7\uc1aa\uc1ab\uc1ad\uc1ae\uc1af\uc1b1",11,"\uc1be",5,"\uc1c5\uc1c6\uc1c7\uc1c9\uc1ca\uc1cb\uc1cd",6,"\uc1d5\uc1d6\uc1d9",6,"\uc1e1\uc1e2\uc1e3\uc1e5\uc1e6\uc1e7\uc1e9",6,"\uc1f2\uc1f4",7,"\uc1fe\uc1ff\uc201\uc202\uc203\uc205",6,"\uc20e\uc210\uc212",5,"\uc21a\uc21b\uc21d\uc21e\uc221\uc222\uc223"],["9a41","\uc224\uc225\uc226\uc227\uc22a\uc22c\uc22e\uc230\uc233\uc235",16],["9a61","\uc246\uc247\uc249",6,"\uc252\uc253\uc255\uc256\uc257\uc259",6,"\uc261\uc262\uc263\uc264\uc266"],["9a81","\uc267",4,"\uc26e\uc26f\uc271\uc272\uc273\uc275",6,"\uc27e\uc280\uc282",5,"\uc28a",5,"\uc291",6,"\uc299\uc29a\uc29c\uc29e",5,"\uc2a6\uc2a7\uc2a9\uc2aa\uc2ab\uc2ae",5,"\uc2b6\uc2b8\uc2ba",33,"\uc2de\uc2df\uc2e1\uc2e2\uc2e5",5,"\uc2ee\uc2f0\uc2f2\uc2f3\uc2f4\uc2f5\uc2f7\uc2fa\uc2fd\uc2fe\uc2ff\uc301",6,"\uc30a\uc30b\uc30e\uc30f"],["9b41","\uc310\uc311\uc312\uc316\uc317\uc319\uc31a\uc31b\uc31d",6,"\uc326\uc327\uc32a",8],["9b61","\uc333",17,"\uc346",7],["9b81","\uc34e",25,"\uc36a\uc36b\uc36d\uc36e\uc36f\uc371\uc373",4,"\uc37a\uc37b\uc37e",5,"\uc385\uc386\uc387\uc389\uc38a\uc38b\uc38d",50,"\uc3c1",22,"\uc3da"],["9c41","\uc3db\uc3dd\uc3de\uc3e1\uc3e3",4,"\uc3ea\uc3eb\uc3ec\uc3ee",5,"\uc3f6\uc3f7\uc3f9",5],["9c61","\uc3ff",8,"\uc409",6,"\uc411",9],["9c81","\uc41b",8,"\uc425",6,"\uc42d\uc42e\uc42f\uc431\uc432\uc433\uc435",6,"\uc43e",9,"\uc449",26,"\uc466\uc467\uc469\uc46a\uc46b\uc46d",6,"\uc476\uc477\uc478\uc47a",5,"\uc481",18,"\uc495",6,"\uc49d",12],["9d41","\uc4aa",13,"\uc4b9\uc4ba\uc4bb\uc4bd",8],["9d61","\uc4c6",25],["9d81","\uc4e0",8,"\uc4ea",5,"\uc4f2\uc4f3\uc4f5\uc4f6\uc4f7\uc4f9\uc4fb\uc4fc\uc4fd\uc4fe\uc502",9,"\uc50d\uc50e\uc50f\uc511\uc512\uc513\uc515",6,"\uc51d",10,"\uc52a\uc52b\uc52d\uc52e\uc52f\uc531",6,"\uc53a\uc53c\uc53e",5,"\uc546\uc547\uc54b\uc54f\uc550\uc551\uc552\uc556\uc55a\uc55b\uc55c\uc55f\uc562\uc563\uc565\uc566\uc567\uc569",6,"\uc572\uc576",5,"\uc57e\uc57f\uc581\uc582\uc583\uc585\uc586\uc588\uc589\uc58a\uc58b\uc58e\uc590\uc592\uc593\uc594"],["9e41","\uc596\uc599\uc59a\uc59b\uc59d\uc59e\uc59f\uc5a1",7,"\uc5aa",9,"\uc5b6"],["9e61","\uc5b7\uc5ba\uc5bf",4,"\uc5cb\uc5cd\uc5cf\uc5d2\uc5d3\uc5d5\uc5d6\uc5d7\uc5d9",6,"\uc5e2\uc5e4\uc5e6\uc5e7"],["9e81","\uc5e8\uc5e9\uc5ea\uc5eb\uc5ef\uc5f1\uc5f2\uc5f3\uc5f5\uc5f8\uc5f9\uc5fa\uc5fb\uc602\uc603\uc604\uc609\uc60a\uc60b\uc60d\uc60e\uc60f\uc611",6,"\uc61a\uc61d",6,"\uc626\uc627\uc629\uc62a\uc62b\uc62f\uc631\uc632\uc636\uc638\uc63a\uc63c\uc63d\uc63e\uc63f\uc642\uc643\uc645\uc646\uc647\uc649",6,"\uc652\uc656",5,"\uc65e\uc65f\uc661",10,"\uc66d\uc66e\uc670\uc672",5,"\uc67a\uc67b\uc67d\uc67e\uc67f\uc681",6,"\uc68a\uc68c\uc68e",5,"\uc696\uc697\uc699\uc69a\uc69b\uc69d",6,"\uc6a6"],["9f41","\uc6a8\uc6aa",5,"\uc6b2\uc6b3\uc6b5\uc6b6\uc6b7\uc6bb",4,"\uc6c2\uc6c4\uc6c6",5,"\uc6ce"],["9f61","\uc6cf\uc6d1\uc6d2\uc6d3\uc6d5",6,"\uc6de\uc6df\uc6e2",5,"\uc6ea\uc6eb\uc6ed\uc6ee\uc6ef\uc6f1\uc6f2"],["9f81","\uc6f3",4,"\uc6fa\uc6fb\uc6fc\uc6fe",5,"\uc706\uc707\uc709\uc70a\uc70b\uc70d",6,"\uc716\uc718\uc71a",5,"\uc722\uc723\uc725\uc726\uc727\uc729",6,"\uc732\uc734\uc736\uc738\uc739\uc73a\uc73b\uc73e\uc73f\uc741\uc742\uc743\uc745",4,"\uc74b\uc74e\uc750\uc759\uc75a\uc75b\uc75d\uc75e\uc75f\uc761",6,"\uc769\uc76a\uc76c",7,"\uc776\uc777\uc779\uc77a\uc77b\uc77f\uc780\uc781\uc782\uc786\uc78b\uc78c\uc78d\uc78f\uc792\uc793\uc795\uc799\uc79b",4,"\uc7a2\uc7a7",4,"\uc7ae\uc7af\uc7b1\uc7b2\uc7b3\uc7b5\uc7b6\uc7b7"],["a041","\uc7b8\uc7b9\uc7ba\uc7bb\uc7be\uc7c2",5,"\uc7ca\uc7cb\uc7cd\uc7cf\uc7d1",6,"\uc7d9\uc7da\uc7db\uc7dc"],["a061","\uc7de",5,"\uc7e5\uc7e6\uc7e7\uc7e9\uc7ea\uc7eb\uc7ed",13],["a081","\uc7fb",4,"\uc802\uc803\uc805\uc806\uc807\uc809\uc80b",4,"\uc812\uc814\uc817",4,"\uc81e\uc81f\uc821\uc822\uc823\uc825",6,"\uc82e\uc830\uc832",5,"\uc839\uc83a\uc83b\uc83d\uc83e\uc83f\uc841",6,"\uc84a\uc84b\uc84e",5,"\uc855",26,"\uc872\uc873\uc875\uc876\uc877\uc879\uc87b",4,"\uc882\uc884\uc888\uc889\uc88a\uc88e",5,"\uc895",7,"\uc89e\uc8a0\uc8a2\uc8a3\uc8a4"],["a141","\uc8a5\uc8a6\uc8a7\uc8a9",18,"\uc8be\uc8bf\uc8c0\uc8c1"],["a161","\uc8c2\uc8c3\uc8c5\uc8c6\uc8c7\uc8c9\uc8ca\uc8cb\uc8cd",6,"\uc8d6\uc8d8\uc8da",5,"\uc8e2\uc8e3\uc8e5"],["a181","\uc8e6",14,"\uc8f6",5,"\uc8fe\uc8ff\uc901\uc902\uc903\uc907",4,"\uc90e\u3000\u3001\u3002\xb7\u2025\u2026\xa8\u3003\xad\u2015\u2225\uff3c\u223c\u2018\u2019\u201c\u201d\u3014\u3015\u3008",9,"\xb1\xd7\xf7\u2260\u2264\u2265\u221e\u2234\xb0\u2032\u2033\u2103\u212b\uffe0\uffe1\uffe5\u2642\u2640\u2220\u22a5\u2312\u2202\u2207\u2261\u2252\xa7\u203b\u2606\u2605\u25cb\u25cf\u25ce\u25c7\u25c6\u25a1\u25a0\u25b3\u25b2\u25bd\u25bc\u2192\u2190\u2191\u2193\u2194\u3013\u226a\u226b\u221a\u223d\u221d\u2235\u222b\u222c\u2208\u220b\u2286\u2287\u2282\u2283\u222a\u2229\u2227\u2228\uffe2"],["a241","\uc910\uc912",5,"\uc919",18],["a261","\uc92d",6,"\uc935",18],["a281","\uc948",7,"\uc952\uc953\uc955\uc956\uc957\uc959",6,"\uc962\uc964",7,"\uc96d\uc96e\uc96f\u21d2\u21d4\u2200\u2203\xb4\uff5e\u02c7\u02d8\u02dd\u02da\u02d9\xb8\u02db\xa1\xbf\u02d0\u222e\u2211\u220f\xa4\u2109\u2030\u25c1\u25c0\u25b7\u25b6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25c8\u25a3\u25d0\u25d1\u2592\u25a4\u25a5\u25a8\u25a7\u25a6\u25a9\u2668\u260f\u260e\u261c\u261e\xb6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266d\u2669\u266a\u266c\u327f\u321c\u2116\u33c7\u2122\u33c2\u33d8\u2121\u20ac\xae"],["a341","\uc971\uc972\uc973\uc975",6,"\uc97d",10,"\uc98a\uc98b\uc98d\uc98e\uc98f"],["a361","\uc991",6,"\uc99a\uc99c\uc99e",16],["a381","\uc9af",16,"\uc9c2\uc9c3\uc9c5\uc9c6\uc9c9\uc9cb",4,"\uc9d2\uc9d4\uc9d7\uc9d8\uc9db\uff01",58,"\uffe6\uff3d",32,"\uffe3"],["a441","\uc9de\uc9df\uc9e1\uc9e3\uc9e5\uc9e6\uc9e8\uc9e9\uc9ea\uc9eb\uc9ee\uc9f2",5,"\uc9fa\uc9fb\uc9fd\uc9fe\uc9ff\uca01\uca02\uca03\uca04"],["a461","\uca05\uca06\uca07\uca0a\uca0e",5,"\uca15\uca16\uca17\uca19",12],["a481","\uca26\uca27\uca28\uca2a",28,"\u3131",93],["a541","\uca47",4,"\uca4e\uca4f\uca51\uca52\uca53\uca55",6,"\uca5e\uca62",5,"\uca69\uca6a"],["a561","\uca6b",17,"\uca7e",5,"\uca85\uca86"],["a581","\uca87",16,"\uca99",14,"\u2170",9],["a5b0","\u2160",9],["a5c1","\u0391",16,"\u03a3",6],["a5e1","\u03b1",16,"\u03c3",6],["a641","\ucaa8",19,"\ucabe\ucabf\ucac1\ucac2\ucac3\ucac5"],["a661","\ucac6",5,"\ucace\ucad0\ucad2\ucad4\ucad5\ucad6\ucad7\ucada",5,"\ucae1",6],["a681","\ucae8\ucae9\ucaea\ucaeb\ucaed",6,"\ucaf5",18,"\ucb09\ucb0a\u2500\u2502\u250c\u2510\u2518\u2514\u251c\u252c\u2524\u2534\u253c\u2501\u2503\u250f\u2513\u251b\u2517\u2523\u2533\u252b\u253b\u254b\u2520\u252f\u2528\u2537\u253f\u251d\u2530\u2525\u2538\u2542\u2512\u2511\u251a\u2519\u2516\u2515\u250e\u250d\u251e\u251f\u2521\u2522\u2526\u2527\u2529\u252a\u252d\u252e\u2531\u2532\u2535\u2536\u2539\u253a\u253d\u253e\u2540\u2541\u2543",7],["a741","\ucb0b",4,"\ucb11\ucb12\ucb13\ucb15\ucb16\ucb17\ucb19",6,"\ucb22",7],["a761","\ucb2a",22,"\ucb42\ucb43\ucb44"],["a781","\ucb45\ucb46\ucb47\ucb4a\ucb4b\ucb4d\ucb4e\ucb4f\ucb51",6,"\ucb5a\ucb5b\ucb5c\ucb5e",5,"\ucb65",7,"\u3395\u3396\u3397\u2113\u3398\u33c4\u33a3\u33a4\u33a5\u33a6\u3399",9,"\u33ca\u338d\u338e\u338f\u33cf\u3388\u3389\u33c8\u33a7\u33a8\u33b0",9,"\u3380",4,"\u33ba",5,"\u3390",4,"\u2126\u33c0\u33c1\u338a\u338b\u338c\u33d6\u33c5\u33ad\u33ae\u33af\u33db\u33a9\u33aa\u33ab\u33ac\u33dd\u33d0\u33d3\u33c3\u33c9\u33dc\u33c6"],["a841","\ucb6d",10,"\ucb7a",14],["a861","\ucb89",18,"\ucb9d",6],["a881","\ucba4",19,"\ucbb9",11,"\xc6\xd0\xaa\u0126"],["a8a6","\u0132"],["a8a8","\u013f\u0141\xd8\u0152\xba\xde\u0166\u014a"],["a8b1","\u3260",27,"\u24d0",25,"\u2460",14,"\xbd\u2153\u2154\xbc\xbe\u215b\u215c\u215d\u215e"],["a941","\ucbc5",14,"\ucbd5",10],["a961","\ucbe0\ucbe1\ucbe2\ucbe3\ucbe5\ucbe6\ucbe8\ucbea",18],["a981","\ucbfd",14,"\ucc0e\ucc0f\ucc11\ucc12\ucc13\ucc15",6,"\ucc1e\ucc1f\ucc20\ucc23\ucc24\xe6\u0111\xf0\u0127\u0131\u0133\u0138\u0140\u0142\xf8\u0153\xdf\xfe\u0167\u014b\u0149\u3200",27,"\u249c",25,"\u2474",14,"\xb9\xb2\xb3\u2074\u207f\u2081\u2082\u2083\u2084"],["aa41","\ucc25\ucc26\ucc2a\ucc2b\ucc2d\ucc2f\ucc31",6,"\ucc3a\ucc3f",4,"\ucc46\ucc47\ucc49\ucc4a\ucc4b\ucc4d\ucc4e"],["aa61","\ucc4f",4,"\ucc56\ucc5a",5,"\ucc61\ucc62\ucc63\ucc65\ucc67\ucc69",6,"\ucc71\ucc72"],["aa81","\ucc73\ucc74\ucc76",29,"\u3041",82],["ab41","\ucc94\ucc95\ucc96\ucc97\ucc9a\ucc9b\ucc9d\ucc9e\ucc9f\ucca1",6,"\uccaa\uccae",5,"\uccb6\uccb7\uccb9"],["ab61","\uccba\uccbb\uccbd",6,"\uccc6\uccc8\uccca",5,"\uccd1\uccd2\uccd3\uccd5",5],["ab81","\uccdb",8,"\ucce5",6,"\ucced\uccee\uccef\uccf1",12,"\u30a1",85],["ac41","\uccfe\uccff\ucd00\ucd02",5,"\ucd0a\ucd0b\ucd0d\ucd0e\ucd0f\ucd11",6,"\ucd1a\ucd1c\ucd1e\ucd1f\ucd20"],["ac61","\ucd21\ucd22\ucd23\ucd25\ucd26\ucd27\ucd29\ucd2a\ucd2b\ucd2d",11,"\ucd3a",4],["ac81","\ucd3f",28,"\ucd5d\ucd5e\ucd5f\u0410",5,"\u0401\u0416",25],["acd1","\u0430",5,"\u0451\u0436",25],["ad41","\ucd61\ucd62\ucd63\ucd65",6,"\ucd6e\ucd70\ucd72",5,"\ucd79",7],["ad61","\ucd81",6,"\ucd89",10,"\ucd96\ucd97\ucd99\ucd9a\ucd9b\ucd9d\ucd9e\ucd9f"],["ad81","\ucda0\ucda1\ucda2\ucda3\ucda6\ucda8\ucdaa",5,"\ucdb1",18,"\ucdc5"],["ae41","\ucdc6",5,"\ucdcd\ucdce\ucdcf\ucdd1",16],["ae61","\ucde2",5,"\ucde9\ucdea\ucdeb\ucded\ucdee\ucdef\ucdf1",6,"\ucdfa\ucdfc\ucdfe",4],["ae81","\uce03\uce05\uce06\uce07\uce09\uce0a\uce0b\uce0d",6,"\uce15\uce16\uce17\uce18\uce1a",5,"\uce22\uce23\uce25\uce26\uce27\uce29\uce2a\uce2b"],["af41","\uce2c\uce2d\uce2e\uce2f\uce32\uce34\uce36",19],["af61","\uce4a",13,"\uce5a\uce5b\uce5d\uce5e\uce62",5,"\uce6a\uce6c"],["af81","\uce6e",5,"\uce76\uce77\uce79\uce7a\uce7b\uce7d",6,"\uce86\uce88\uce8a",5,"\uce92\uce93\uce95\uce96\uce97\uce99"],["b041","\uce9a",5,"\ucea2\ucea6",5,"\uceae",12],["b061","\ucebb",5,"\ucec2",19],["b081","\uced6",13,"\ucee6\ucee7\ucee9\uceea\uceed",6,"\ucef6\ucefa",5,"\uac00\uac01\uac04\uac07\uac08\uac09\uac0a\uac10",7,"\uac19",4,"\uac20\uac24\uac2c\uac2d\uac2f\uac30\uac31\uac38\uac39\uac3c\uac40\uac4b\uac4d\uac54\uac58\uac5c\uac70\uac71\uac74\uac77\uac78\uac7a\uac80\uac81\uac83\uac84\uac85\uac86\uac89\uac8a\uac8b\uac8c\uac90\uac94\uac9c\uac9d\uac9f\uaca0\uaca1\uaca8\uaca9\uacaa\uacac\uacaf\uacb0\uacb8\uacb9\uacbb\uacbc\uacbd\uacc1\uacc4\uacc8\uaccc\uacd5\uacd7\uace0\uace1\uace4\uace7\uace8\uacea\uacec\uacef\uacf0\uacf1\uacf3\uacf5\uacf6\uacfc\uacfd\uad00\uad04\uad06"],["b141","\ucf02\ucf03\ucf05\ucf06\ucf07\ucf09",6,"\ucf12\ucf14\ucf16",5,"\ucf1d\ucf1e\ucf1f\ucf21\ucf22\ucf23"],["b161","\ucf25",6,"\ucf2e\ucf32",5,"\ucf39",11],["b181","\ucf45",14,"\ucf56\ucf57\ucf59\ucf5a\ucf5b\ucf5d",6,"\ucf66\ucf68\ucf6a\ucf6b\ucf6c\uad0c\uad0d\uad0f\uad11\uad18\uad1c\uad20\uad29\uad2c\uad2d\uad34\uad35\uad38\uad3c\uad44\uad45\uad47\uad49\uad50\uad54\uad58\uad61\uad63\uad6c\uad6d\uad70\uad73\uad74\uad75\uad76\uad7b\uad7c\uad7d\uad7f\uad81\uad82\uad88\uad89\uad8c\uad90\uad9c\uad9d\uada4\uadb7\uadc0\uadc1\uadc4\uadc8\uadd0\uadd1\uadd3\uaddc\uade0\uade4\uadf8\uadf9\uadfc\uadff\uae00\uae01\uae08\uae09\uae0b\uae0d\uae14\uae30\uae31\uae34\uae37\uae38\uae3a\uae40\uae41\uae43\uae45\uae46\uae4a\uae4c\uae4d\uae4e\uae50\uae54\uae56\uae5c\uae5d\uae5f\uae60\uae61\uae65\uae68\uae69\uae6c\uae70\uae78"],["b241","\ucf6d\ucf6e\ucf6f\ucf72\ucf73\ucf75\ucf76\ucf77\ucf79",6,"\ucf81\ucf82\ucf83\ucf84\ucf86",5,"\ucf8d"],["b261","\ucf8e",18,"\ucfa2",5,"\ucfa9"],["b281","\ucfaa",5,"\ucfb1",18,"\ucfc5",6,"\uae79\uae7b\uae7c\uae7d\uae84\uae85\uae8c\uaebc\uaebd\uaebe\uaec0\uaec4\uaecc\uaecd\uaecf\uaed0\uaed1\uaed8\uaed9\uaedc\uaee8\uaeeb\uaeed\uaef4\uaef8\uaefc\uaf07\uaf08\uaf0d\uaf10\uaf2c\uaf2d\uaf30\uaf32\uaf34\uaf3c\uaf3d\uaf3f\uaf41\uaf42\uaf43\uaf48\uaf49\uaf50\uaf5c\uaf5d\uaf64\uaf65\uaf79\uaf80\uaf84\uaf88\uaf90\uaf91\uaf95\uaf9c\uafb8\uafb9\uafbc\uafc0\uafc7\uafc8\uafc9\uafcb\uafcd\uafce\uafd4\uafdc\uafe8\uafe9\uaff0\uaff1\uaff4\uaff8\ub000\ub001\ub004\ub00c\ub010\ub014\ub01c\ub01d\ub028\ub044\ub045\ub048\ub04a\ub04c\ub04e\ub053\ub054\ub055\ub057\ub059"],["b341","\ucfcc",19,"\ucfe2\ucfe3\ucfe5\ucfe6\ucfe7\ucfe9"],["b361","\ucfea",5,"\ucff2\ucff4\ucff6",5,"\ucffd\ucffe\ucfff\ud001\ud002\ud003\ud005",5],["b381","\ud00b",5,"\ud012",5,"\ud019",19,"\ub05d\ub07c\ub07d\ub080\ub084\ub08c\ub08d\ub08f\ub091\ub098\ub099\ub09a\ub09c\ub09f\ub0a0\ub0a1\ub0a2\ub0a8\ub0a9\ub0ab",4,"\ub0b1\ub0b3\ub0b4\ub0b5\ub0b8\ub0bc\ub0c4\ub0c5\ub0c7\ub0c8\ub0c9\ub0d0\ub0d1\ub0d4\ub0d8\ub0e0\ub0e5\ub108\ub109\ub10b\ub10c\ub110\ub112\ub113\ub118\ub119\ub11b\ub11c\ub11d\ub123\ub124\ub125\ub128\ub12c\ub134\ub135\ub137\ub138\ub139\ub140\ub141\ub144\ub148\ub150\ub151\ub154\ub155\ub158\ub15c\ub160\ub178\ub179\ub17c\ub180\ub182\ub188\ub189\ub18b\ub18d\ub192\ub193\ub194\ub198\ub19c\ub1a8\ub1cc\ub1d0\ub1d4\ub1dc\ub1dd"],["b441","\ud02e",5,"\ud036\ud037\ud039\ud03a\ud03b\ud03d",6,"\ud046\ud048\ud04a",5],["b461","\ud051\ud052\ud053\ud055\ud056\ud057\ud059",6,"\ud061",10,"\ud06e\ud06f"],["b481","\ud071\ud072\ud073\ud075",6,"\ud07e\ud07f\ud080\ud082",18,"\ub1df\ub1e8\ub1e9\ub1ec\ub1f0\ub1f9\ub1fb\ub1fd\ub204\ub205\ub208\ub20b\ub20c\ub214\ub215\ub217\ub219\ub220\ub234\ub23c\ub258\ub25c\ub260\ub268\ub269\ub274\ub275\ub27c\ub284\ub285\ub289\ub290\ub291\ub294\ub298\ub299\ub29a\ub2a0\ub2a1\ub2a3\ub2a5\ub2a6\ub2aa\ub2ac\ub2b0\ub2b4\ub2c8\ub2c9\ub2cc\ub2d0\ub2d2\ub2d8\ub2d9\ub2db\ub2dd\ub2e2\ub2e4\ub2e5\ub2e6\ub2e8\ub2eb",4,"\ub2f3\ub2f4\ub2f5\ub2f7",4,"\ub2ff\ub300\ub301\ub304\ub308\ub310\ub311\ub313\ub314\ub315\ub31c\ub354\ub355\ub356\ub358\ub35b\ub35c\ub35e\ub35f\ub364\ub365"],["b541","\ud095",14,"\ud0a6\ud0a7\ud0a9\ud0aa\ud0ab\ud0ad",5],["b561","\ud0b3\ud0b6\ud0b8\ud0ba",5,"\ud0c2\ud0c3\ud0c5\ud0c6\ud0c7\ud0ca",5,"\ud0d2\ud0d6",4],["b581","\ud0db\ud0de\ud0df\ud0e1\ud0e2\ud0e3\ud0e5",6,"\ud0ee\ud0f2",5,"\ud0f9",11,"\ub367\ub369\ub36b\ub36e\ub370\ub371\ub374\ub378\ub380\ub381\ub383\ub384\ub385\ub38c\ub390\ub394\ub3a0\ub3a1\ub3a8\ub3ac\ub3c4\ub3c5\ub3c8\ub3cb\ub3cc\ub3ce\ub3d0\ub3d4\ub3d5\ub3d7\ub3d9\ub3db\ub3dd\ub3e0\ub3e4\ub3e8\ub3fc\ub410\ub418\ub41c\ub420\ub428\ub429\ub42b\ub434\ub450\ub451\ub454\ub458\ub460\ub461\ub463\ub465\ub46c\ub480\ub488\ub49d\ub4a4\ub4a8\ub4ac\ub4b5\ub4b7\ub4b9\ub4c0\ub4c4\ub4c8\ub4d0\ub4d5\ub4dc\ub4dd\ub4e0\ub4e3\ub4e4\ub4e6\ub4ec\ub4ed\ub4ef\ub4f1\ub4f8\ub514\ub515\ub518\ub51b\ub51c\ub524\ub525\ub527\ub528\ub529\ub52a\ub530\ub531\ub534\ub538"],["b641","\ud105",7,"\ud10e",17],["b661","\ud120",15,"\ud132\ud133\ud135\ud136\ud137\ud139\ud13b\ud13c\ud13d\ud13e"],["b681","\ud13f\ud142\ud146",5,"\ud14e\ud14f\ud151\ud152\ud153\ud155",6,"\ud15e\ud160\ud162",5,"\ud169\ud16a\ud16b\ud16d\ub540\ub541\ub543\ub544\ub545\ub54b\ub54c\ub54d\ub550\ub554\ub55c\ub55d\ub55f\ub560\ub561\ub5a0\ub5a1\ub5a4\ub5a8\ub5aa\ub5ab\ub5b0\ub5b1\ub5b3\ub5b4\ub5b5\ub5bb\ub5bc\ub5bd\ub5c0\ub5c4\ub5cc\ub5cd\ub5cf\ub5d0\ub5d1\ub5d8\ub5ec\ub610\ub611\ub614\ub618\ub625\ub62c\ub634\ub648\ub664\ub668\ub69c\ub69d\ub6a0\ub6a4\ub6ab\ub6ac\ub6b1\ub6d4\ub6f0\ub6f4\ub6f8\ub700\ub701\ub705\ub728\ub729\ub72c\ub72f\ub730\ub738\ub739\ub73b\ub744\ub748\ub74c\ub754\ub755\ub760\ub764\ub768\ub770\ub771\ub773\ub775\ub77c\ub77d\ub780\ub784\ub78c\ub78d\ub78f\ub790\ub791\ub792\ub796\ub797"],["b741","\ud16e",13,"\ud17d",6,"\ud185\ud186\ud187\ud189\ud18a"],["b761","\ud18b",20,"\ud1a2\ud1a3\ud1a5\ud1a6\ud1a7"],["b781","\ud1a9",6,"\ud1b2\ud1b4\ud1b6\ud1b7\ud1b8\ud1b9\ud1bb\ud1bd\ud1be\ud1bf\ud1c1",14,"\ub798\ub799\ub79c\ub7a0\ub7a8\ub7a9\ub7ab\ub7ac\ub7ad\ub7b4\ub7b5\ub7b8\ub7c7\ub7c9\ub7ec\ub7ed\ub7f0\ub7f4\ub7fc\ub7fd\ub7ff\ub800\ub801\ub807\ub808\ub809\ub80c\ub810\ub818\ub819\ub81b\ub81d\ub824\ub825\ub828\ub82c\ub834\ub835\ub837\ub838\ub839\ub840\ub844\ub851\ub853\ub85c\ub85d\ub860\ub864\ub86c\ub86d\ub86f\ub871\ub878\ub87c\ub88d\ub8a8\ub8b0\ub8b4\ub8b8\ub8c0\ub8c1\ub8c3\ub8c5\ub8cc\ub8d0\ub8d4\ub8dd\ub8df\ub8e1\ub8e8\ub8e9\ub8ec\ub8f0\ub8f8\ub8f9\ub8fb\ub8fd\ub904\ub918\ub920\ub93c\ub93d\ub940\ub944\ub94c\ub94f\ub951\ub958\ub959\ub95c\ub960\ub968\ub969"],["b841","\ud1d0",7,"\ud1d9",17],["b861","\ud1eb",8,"\ud1f5\ud1f6\ud1f7\ud1f9",13],["b881","\ud208\ud20a",5,"\ud211",24,"\ub96b\ub96d\ub974\ub975\ub978\ub97c\ub984\ub985\ub987\ub989\ub98a\ub98d\ub98e\ub9ac\ub9ad\ub9b0\ub9b4\ub9bc\ub9bd\ub9bf\ub9c1\ub9c8\ub9c9\ub9cc\ub9ce",4,"\ub9d8\ub9d9\ub9db\ub9dd\ub9de\ub9e1\ub9e3\ub9e4\ub9e5\ub9e8\ub9ec\ub9f4\ub9f5\ub9f7\ub9f8\ub9f9\ub9fa\uba00\uba01\uba08\uba15\uba38\uba39\uba3c\uba40\uba42\uba48\uba49\uba4b\uba4d\uba4e\uba53\uba54\uba55\uba58\uba5c\uba64\uba65\uba67\uba68\uba69\uba70\uba71\uba74\uba78\uba83\uba84\uba85\uba87\uba8c\ubaa8\ubaa9\ubaab\ubaac\ubab0\ubab2\ubab8\ubab9\ubabb\ubabd\ubac4\ubac8\ubad8\ubad9\ubafc"],["b941","\ud22a\ud22b\ud22e\ud22f\ud231\ud232\ud233\ud235",6,"\ud23e\ud240\ud242",5,"\ud249\ud24a\ud24b\ud24c"],["b961","\ud24d",14,"\ud25d",6,"\ud265\ud266\ud267\ud268"],["b981","\ud269",22,"\ud282\ud283\ud285\ud286\ud287\ud289\ud28a\ud28b\ud28c\ubb00\ubb04\ubb0d\ubb0f\ubb11\ubb18\ubb1c\ubb20\ubb29\ubb2b\ubb34\ubb35\ubb36\ubb38\ubb3b\ubb3c\ubb3d\ubb3e\ubb44\ubb45\ubb47\ubb49\ubb4d\ubb4f\ubb50\ubb54\ubb58\ubb61\ubb63\ubb6c\ubb88\ubb8c\ubb90\ubba4\ubba8\ubbac\ubbb4\ubbb7\ubbc0\ubbc4\ubbc8\ubbd0\ubbd3\ubbf8\ubbf9\ubbfc\ubbff\ubc00\ubc02\ubc08\ubc09\ubc0b\ubc0c\ubc0d\ubc0f\ubc11\ubc14",4,"\ubc1b",4,"\ubc24\ubc25\ubc27\ubc29\ubc2d\ubc30\ubc31\ubc34\ubc38\ubc40\ubc41\ubc43\ubc44\ubc45\ubc49\ubc4c\ubc4d\ubc50\ubc5d\ubc84\ubc85\ubc88\ubc8b\ubc8c\ubc8e\ubc94\ubc95\ubc97"],["ba41","\ud28d\ud28e\ud28f\ud292\ud293\ud294\ud296",5,"\ud29d\ud29e\ud29f\ud2a1\ud2a2\ud2a3\ud2a5",6,"\ud2ad"],["ba61","\ud2ae\ud2af\ud2b0\ud2b2",5,"\ud2ba\ud2bb\ud2bd\ud2be\ud2c1\ud2c3",4,"\ud2ca\ud2cc",5],["ba81","\ud2d2\ud2d3\ud2d5\ud2d6\ud2d7\ud2d9\ud2da\ud2db\ud2dd",6,"\ud2e6",9,"\ud2f2\ud2f3\ud2f5\ud2f6\ud2f7\ud2f9\ud2fa\ubc99\ubc9a\ubca0\ubca1\ubca4\ubca7\ubca8\ubcb0\ubcb1\ubcb3\ubcb4\ubcb5\ubcbc\ubcbd\ubcc0\ubcc4\ubccd\ubccf\ubcd0\ubcd1\ubcd5\ubcd8\ubcdc\ubcf4\ubcf5\ubcf6\ubcf8\ubcfc\ubd04\ubd05\ubd07\ubd09\ubd10\ubd14\ubd24\ubd2c\ubd40\ubd48\ubd49\ubd4c\ubd50\ubd58\ubd59\ubd64\ubd68\ubd80\ubd81\ubd84\ubd87\ubd88\ubd89\ubd8a\ubd90\ubd91\ubd93\ubd95\ubd99\ubd9a\ubd9c\ubda4\ubdb0\ubdb8\ubdd4\ubdd5\ubdd8\ubddc\ubde9\ubdf0\ubdf4\ubdf8\ube00\ube03\ube05\ube0c\ube0d\ube10\ube14\ube1c\ube1d\ube1f\ube44\ube45\ube48\ube4c\ube4e\ube54\ube55\ube57\ube59\ube5a\ube5b\ube60\ube61\ube64"],["bb41","\ud2fb",4,"\ud302\ud304\ud306",5,"\ud30f\ud311\ud312\ud313\ud315\ud317",4,"\ud31e\ud322\ud323"],["bb61","\ud324\ud326\ud327\ud32a\ud32b\ud32d\ud32e\ud32f\ud331",6,"\ud33a\ud33e",5,"\ud346\ud347\ud348\ud349"],["bb81","\ud34a",31,"\ube68\ube6a\ube70\ube71\ube73\ube74\ube75\ube7b\ube7c\ube7d\ube80\ube84\ube8c\ube8d\ube8f\ube90\ube91\ube98\ube99\ubea8\ubed0\ubed1\ubed4\ubed7\ubed8\ubee0\ubee3\ubee4\ubee5\ubeec\ubf01\ubf08\ubf09\ubf18\ubf19\ubf1b\ubf1c\ubf1d\ubf40\ubf41\ubf44\ubf48\ubf50\ubf51\ubf55\ubf94\ubfb0\ubfc5\ubfcc\ubfcd\ubfd0\ubfd4\ubfdc\ubfdf\ubfe1\uc03c\uc051\uc058\uc05c\uc060\uc068\uc069\uc090\uc091\uc094\uc098\uc0a0\uc0a1\uc0a3\uc0a5\uc0ac\uc0ad\uc0af\uc0b0\uc0b3\uc0b4\uc0b5\uc0b6\uc0bc\uc0bd\uc0bf\uc0c0\uc0c1\uc0c5\uc0c8\uc0c9\uc0cc\uc0d0\uc0d8\uc0d9\uc0db\uc0dc\uc0dd\uc0e4"],["bc41","\ud36a",17,"\ud37e\ud37f\ud381\ud382\ud383\ud385\ud386\ud387"],["bc61","\ud388\ud389\ud38a\ud38b\ud38e\ud392",5,"\ud39a\ud39b\ud39d\ud39e\ud39f\ud3a1",6,"\ud3aa\ud3ac\ud3ae"],["bc81","\ud3af",4,"\ud3b5\ud3b6\ud3b7\ud3b9\ud3ba\ud3bb\ud3bd",6,"\ud3c6\ud3c7\ud3ca",5,"\ud3d1",5,"\uc0e5\uc0e8\uc0ec\uc0f4\uc0f5\uc0f7\uc0f9\uc100\uc104\uc108\uc110\uc115\uc11c",4,"\uc123\uc124\uc126\uc127\uc12c\uc12d\uc12f\uc130\uc131\uc136\uc138\uc139\uc13c\uc140\uc148\uc149\uc14b\uc14c\uc14d\uc154\uc155\uc158\uc15c\uc164\uc165\uc167\uc168\uc169\uc170\uc174\uc178\uc185\uc18c\uc18d\uc18e\uc190\uc194\uc196\uc19c\uc19d\uc19f\uc1a1\uc1a5\uc1a8\uc1a9\uc1ac\uc1b0\uc1bd\uc1c4\uc1c8\uc1cc\uc1d4\uc1d7\uc1d8\uc1e0\uc1e4\uc1e8\uc1f0\uc1f1\uc1f3\uc1fc\uc1fd\uc200\uc204\uc20c\uc20d\uc20f\uc211\uc218\uc219\uc21c\uc21f\uc220\uc228\uc229\uc22b\uc22d"],["bd41","\ud3d7\ud3d9",7,"\ud3e2\ud3e4",7,"\ud3ee\ud3ef\ud3f1\ud3f2\ud3f3\ud3f5\ud3f6\ud3f7"],["bd61","\ud3f8\ud3f9\ud3fa\ud3fb\ud3fe\ud400\ud402",5,"\ud409",13],["bd81","\ud417",5,"\ud41e",25,"\uc22f\uc231\uc232\uc234\uc248\uc250\uc251\uc254\uc258\uc260\uc265\uc26c\uc26d\uc270\uc274\uc27c\uc27d\uc27f\uc281\uc288\uc289\uc290\uc298\uc29b\uc29d\uc2a4\uc2a5\uc2a8\uc2ac\uc2ad\uc2b4\uc2b5\uc2b7\uc2b9\uc2dc\uc2dd\uc2e0\uc2e3\uc2e4\uc2eb\uc2ec\uc2ed\uc2ef\uc2f1\uc2f6\uc2f8\uc2f9\uc2fb\uc2fc\uc300\uc308\uc309\uc30c\uc30d\uc313\uc314\uc315\uc318\uc31c\uc324\uc325\uc328\uc329\uc345\uc368\uc369\uc36c\uc370\uc372\uc378\uc379\uc37c\uc37d\uc384\uc388\uc38c\uc3c0\uc3d8\uc3d9\uc3dc\uc3df\uc3e0\uc3e2\uc3e8\uc3e9\uc3ed\uc3f4\uc3f5\uc3f8\uc408\uc410\uc424\uc42c\uc430"],["be41","\ud438",7,"\ud441\ud442\ud443\ud445",14],["be61","\ud454",7,"\ud45d\ud45e\ud45f\ud461\ud462\ud463\ud465",7,"\ud46e\ud470\ud471\ud472"],["be81","\ud473",4,"\ud47a\ud47b\ud47d\ud47e\ud481\ud483",4,"\ud48a\ud48c\ud48e",5,"\ud495",8,"\uc434\uc43c\uc43d\uc448\uc464\uc465\uc468\uc46c\uc474\uc475\uc479\uc480\uc494\uc49c\uc4b8\uc4bc\uc4e9\uc4f0\uc4f1\uc4f4\uc4f8\uc4fa\uc4ff\uc500\uc501\uc50c\uc510\uc514\uc51c\uc528\uc529\uc52c\uc530\uc538\uc539\uc53b\uc53d\uc544\uc545\uc548\uc549\uc54a\uc54c\uc54d\uc54e\uc553\uc554\uc555\uc557\uc558\uc559\uc55d\uc55e\uc560\uc561\uc564\uc568\uc570\uc571\uc573\uc574\uc575\uc57c\uc57d\uc580\uc584\uc587\uc58c\uc58d\uc58f\uc591\uc595\uc597\uc598\uc59c\uc5a0\uc5a9\uc5b4\uc5b5\uc5b8\uc5b9\uc5bb\uc5bc\uc5bd\uc5be\uc5c4",6,"\uc5cc\uc5ce"],["bf41","\ud49e",10,"\ud4aa",14],["bf61","\ud4b9",18,"\ud4cd\ud4ce\ud4cf\ud4d1\ud4d2\ud4d3\ud4d5"],["bf81","\ud4d6",5,"\ud4dd\ud4de\ud4e0",7,"\ud4e9\ud4ea\ud4eb\ud4ed\ud4ee\ud4ef\ud4f1",6,"\ud4f9\ud4fa\ud4fc\uc5d0\uc5d1\uc5d4\uc5d8\uc5e0\uc5e1\uc5e3\uc5e5\uc5ec\uc5ed\uc5ee\uc5f0\uc5f4\uc5f6\uc5f7\uc5fc",5,"\uc605\uc606\uc607\uc608\uc60c\uc610\uc618\uc619\uc61b\uc61c\uc624\uc625\uc628\uc62c\uc62d\uc62e\uc630\uc633\uc634\uc635\uc637\uc639\uc63b\uc640\uc641\uc644\uc648\uc650\uc651\uc653\uc654\uc655\uc65c\uc65d\uc660\uc66c\uc66f\uc671\uc678\uc679\uc67c\uc680\uc688\uc689\uc68b\uc68d\uc694\uc695\uc698\uc69c\uc6a4\uc6a5\uc6a7\uc6a9\uc6b0\uc6b1\uc6b4\uc6b8\uc6b9\uc6ba\uc6c0\uc6c1\uc6c3\uc6c5\uc6cc\uc6cd\uc6d0\uc6d4\uc6dc\uc6dd\uc6e0\uc6e1\uc6e8"],["c041","\ud4fe",5,"\ud505\ud506\ud507\ud509\ud50a\ud50b\ud50d",6,"\ud516\ud518",5],["c061","\ud51e",25],["c081","\ud538\ud539\ud53a\ud53b\ud53e\ud53f\ud541\ud542\ud543\ud545",6,"\ud54e\ud550\ud552",5,"\ud55a\ud55b\ud55d\ud55e\ud55f\ud561\ud562\ud563\uc6e9\uc6ec\uc6f0\uc6f8\uc6f9\uc6fd\uc704\uc705\uc708\uc70c\uc714\uc715\uc717\uc719\uc720\uc721\uc724\uc728\uc730\uc731\uc733\uc735\uc737\uc73c\uc73d\uc740\uc744\uc74a\uc74c\uc74d\uc74f\uc751",7,"\uc75c\uc760\uc768\uc76b\uc774\uc775\uc778\uc77c\uc77d\uc77e\uc783\uc784\uc785\uc787\uc788\uc789\uc78a\uc78e\uc790\uc791\uc794\uc796\uc797\uc798\uc79a\uc7a0\uc7a1\uc7a3\uc7a4\uc7a5\uc7a6\uc7ac\uc7ad\uc7b0\uc7b4\uc7bc\uc7bd\uc7bf\uc7c0\uc7c1\uc7c8\uc7c9\uc7cc\uc7ce\uc7d0\uc7d8\uc7dd\uc7e4\uc7e8\uc7ec\uc800\uc801\uc804\uc808\uc80a"],["c141","\ud564\ud566\ud567\ud56a\ud56c\ud56e",5,"\ud576\ud577\ud579\ud57a\ud57b\ud57d",6,"\ud586\ud58a\ud58b"],["c161","\ud58c\ud58d\ud58e\ud58f\ud591",19,"\ud5a6\ud5a7"],["c181","\ud5a8",31,"\uc810\uc811\uc813\uc815\uc816\uc81c\uc81d\uc820\uc824\uc82c\uc82d\uc82f\uc831\uc838\uc83c\uc840\uc848\uc849\uc84c\uc84d\uc854\uc870\uc871\uc874\uc878\uc87a\uc880\uc881\uc883\uc885\uc886\uc887\uc88b\uc88c\uc88d\uc894\uc89d\uc89f\uc8a1\uc8a8\uc8bc\uc8bd\uc8c4\uc8c8\uc8cc\uc8d4\uc8d5\uc8d7\uc8d9\uc8e0\uc8e1\uc8e4\uc8f5\uc8fc\uc8fd\uc900\uc904\uc905\uc906\uc90c\uc90d\uc90f\uc911\uc918\uc92c\uc934\uc950\uc951\uc954\uc958\uc960\uc961\uc963\uc96c\uc970\uc974\uc97c\uc988\uc989\uc98c\uc990\uc998\uc999\uc99b\uc99d\uc9c0\uc9c1\uc9c4\uc9c7\uc9c8\uc9ca\uc9d0\uc9d1\uc9d3"],["c241","\ud5ca\ud5cb\ud5cd\ud5ce\ud5cf\ud5d1\ud5d3",4,"\ud5da\ud5dc\ud5de",5,"\ud5e6\ud5e7\ud5e9\ud5ea\ud5eb\ud5ed\ud5ee"],["c261","\ud5ef",4,"\ud5f6\ud5f8\ud5fa",5,"\ud602\ud603\ud605\ud606\ud607\ud609",6,"\ud612"],["c281","\ud616",5,"\ud61d\ud61e\ud61f\ud621\ud622\ud623\ud625",7,"\ud62e",9,"\ud63a\ud63b\uc9d5\uc9d6\uc9d9\uc9da\uc9dc\uc9dd\uc9e0\uc9e2\uc9e4\uc9e7\uc9ec\uc9ed\uc9ef\uc9f0\uc9f1\uc9f8\uc9f9\uc9fc\uca00\uca08\uca09\uca0b\uca0c\uca0d\uca14\uca18\uca29\uca4c\uca4d\uca50\uca54\uca5c\uca5d\uca5f\uca60\uca61\uca68\uca7d\uca84\uca98\ucabc\ucabd\ucac0\ucac4\ucacc\ucacd\ucacf\ucad1\ucad3\ucad8\ucad9\ucae0\ucaec\ucaf4\ucb08\ucb10\ucb14\ucb18\ucb20\ucb21\ucb41\ucb48\ucb49\ucb4c\ucb50\ucb58\ucb59\ucb5d\ucb64\ucb78\ucb79\ucb9c\ucbb8\ucbd4\ucbe4\ucbe7\ucbe9\ucc0c\ucc0d\ucc10\ucc14\ucc1c\ucc1d\ucc21\ucc22\ucc27\ucc28\ucc29\ucc2c\ucc2e\ucc30\ucc38\ucc39\ucc3b"],["c341","\ud63d\ud63e\ud63f\ud641\ud642\ud643\ud644\ud646\ud647\ud64a\ud64c\ud64e\ud64f\ud650\ud652\ud653\ud656\ud657\ud659\ud65a\ud65b\ud65d",4],["c361","\ud662",4,"\ud668\ud66a",5,"\ud672\ud673\ud675",11],["c381","\ud681\ud682\ud684\ud686",5,"\ud68e\ud68f\ud691\ud692\ud693\ud695",7,"\ud69e\ud6a0\ud6a2",5,"\ud6a9\ud6aa\ucc3c\ucc3d\ucc3e\ucc44\ucc45\ucc48\ucc4c\ucc54\ucc55\ucc57\ucc58\ucc59\ucc60\ucc64\ucc66\ucc68\ucc70\ucc75\ucc98\ucc99\ucc9c\ucca0\ucca8\ucca9\uccab\uccac\uccad\uccb4\uccb5\uccb8\uccbc\uccc4\uccc5\uccc7\uccc9\uccd0\uccd4\ucce4\uccec\uccf0\ucd01\ucd08\ucd09\ucd0c\ucd10\ucd18\ucd19\ucd1b\ucd1d\ucd24\ucd28\ucd2c\ucd39\ucd5c\ucd60\ucd64\ucd6c\ucd6d\ucd6f\ucd71\ucd78\ucd88\ucd94\ucd95\ucd98\ucd9c\ucda4\ucda5\ucda7\ucda9\ucdb0\ucdc4\ucdcc\ucdd0\ucde8\ucdec\ucdf0\ucdf8\ucdf9\ucdfb\ucdfd\uce04\uce08\uce0c\uce14\uce19\uce20\uce21\uce24\uce28\uce30\uce31\uce33\uce35"],["c441","\ud6ab\ud6ad\ud6ae\ud6af\ud6b1",7,"\ud6ba\ud6bc",7,"\ud6c6\ud6c7\ud6c9\ud6ca\ud6cb"],["c461","\ud6cd\ud6ce\ud6cf\ud6d0\ud6d2\ud6d3\ud6d5\ud6d6\ud6d8\ud6da",5,"\ud6e1\ud6e2\ud6e3\ud6e5\ud6e6\ud6e7\ud6e9",4],["c481","\ud6ee\ud6ef\ud6f1\ud6f2\ud6f3\ud6f4\ud6f6",5,"\ud6fe\ud6ff\ud701\ud702\ud703\ud705",11,"\ud712\ud713\ud714\uce58\uce59\uce5c\uce5f\uce60\uce61\uce68\uce69\uce6b\uce6d\uce74\uce75\uce78\uce7c\uce84\uce85\uce87\uce89\uce90\uce91\uce94\uce98\ucea0\ucea1\ucea3\ucea4\ucea5\uceac\ucead\ucec1\ucee4\ucee5\ucee8\uceeb\uceec\ucef4\ucef5\ucef7\ucef8\ucef9\ucf00\ucf01\ucf04\ucf08\ucf10\ucf11\ucf13\ucf15\ucf1c\ucf20\ucf24\ucf2c\ucf2d\ucf2f\ucf30\ucf31\ucf38\ucf54\ucf55\ucf58\ucf5c\ucf64\ucf65\ucf67\ucf69\ucf70\ucf71\ucf74\ucf78\ucf80\ucf85\ucf8c\ucfa1\ucfa8\ucfb0\ucfc4\ucfe0\ucfe1\ucfe4\ucfe8\ucff0\ucff1\ucff3\ucff5\ucffc\ud000\ud004\ud011\ud018\ud02d\ud034\ud035\ud038\ud03c"],["c541","\ud715\ud716\ud717\ud71a\ud71b\ud71d\ud71e\ud71f\ud721",6,"\ud72a\ud72c\ud72e",5,"\ud736\ud737\ud739"],["c561","\ud73a\ud73b\ud73d",6,"\ud745\ud746\ud748\ud74a",5,"\ud752\ud753\ud755\ud75a",4],["c581","\ud75f\ud762\ud764\ud766\ud767\ud768\ud76a\ud76b\ud76d\ud76e\ud76f\ud771\ud772\ud773\ud775",6,"\ud77e\ud77f\ud780\ud782",5,"\ud78a\ud78b\ud044\ud045\ud047\ud049\ud050\ud054\ud058\ud060\ud06c\ud06d\ud070\ud074\ud07c\ud07d\ud081\ud0a4\ud0a5\ud0a8\ud0ac\ud0b4\ud0b5\ud0b7\ud0b9\ud0c0\ud0c1\ud0c4\ud0c8\ud0c9\ud0d0\ud0d1\ud0d3\ud0d4\ud0d5\ud0dc\ud0dd\ud0e0\ud0e4\ud0ec\ud0ed\ud0ef\ud0f0\ud0f1\ud0f8\ud10d\ud130\ud131\ud134\ud138\ud13a\ud140\ud141\ud143\ud144\ud145\ud14c\ud14d\ud150\ud154\ud15c\ud15d\ud15f\ud161\ud168\ud16c\ud17c\ud184\ud188\ud1a0\ud1a1\ud1a4\ud1a8\ud1b0\ud1b1\ud1b3\ud1b5\ud1ba\ud1bc\ud1c0\ud1d8\ud1f4\ud1f8\ud207\ud209\ud210\ud22c\ud22d\ud230\ud234\ud23c\ud23d\ud23f\ud241\ud248\ud25c"],["c641","\ud78d\ud78e\ud78f\ud791",6,"\ud79a\ud79c\ud79e",5],["c6a1","\ud264\ud280\ud281\ud284\ud288\ud290\ud291\ud295\ud29c\ud2a0\ud2a4\ud2ac\ud2b1\ud2b8\ud2b9\ud2bc\ud2bf\ud2c0\ud2c2\ud2c8\ud2c9\ud2cb\ud2d4\ud2d8\ud2dc\ud2e4\ud2e5\ud2f0\ud2f1\ud2f4\ud2f8\ud300\ud301\ud303\ud305\ud30c\ud30d\ud30e\ud310\ud314\ud316\ud31c\ud31d\ud31f\ud320\ud321\ud325\ud328\ud329\ud32c\ud330\ud338\ud339\ud33b\ud33c\ud33d\ud344\ud345\ud37c\ud37d\ud380\ud384\ud38c\ud38d\ud38f\ud390\ud391\ud398\ud399\ud39c\ud3a0\ud3a8\ud3a9\ud3ab\ud3ad\ud3b4\ud3b8\ud3bc\ud3c4\ud3c5\ud3c8\ud3c9\ud3d0\ud3d8\ud3e1\ud3e3\ud3ec\ud3ed\ud3f0\ud3f4\ud3fc\ud3fd\ud3ff\ud401"],["c7a1","\ud408\ud41d\ud440\ud444\ud45c\ud460\ud464\ud46d\ud46f\ud478\ud479\ud47c\ud47f\ud480\ud482\ud488\ud489\ud48b\ud48d\ud494\ud4a9\ud4cc\ud4d0\ud4d4\ud4dc\ud4df\ud4e8\ud4ec\ud4f0\ud4f8\ud4fb\ud4fd\ud504\ud508\ud50c\ud514\ud515\ud517\ud53c\ud53d\ud540\ud544\ud54c\ud54d\ud54f\ud551\ud558\ud559\ud55c\ud560\ud565\ud568\ud569\ud56b\ud56d\ud574\ud575\ud578\ud57c\ud584\ud585\ud587\ud588\ud589\ud590\ud5a5\ud5c8\ud5c9\ud5cc\ud5d0\ud5d2\ud5d8\ud5d9\ud5db\ud5dd\ud5e4\ud5e5\ud5e8\ud5ec\ud5f4\ud5f5\ud5f7\ud5f9\ud600\ud601\ud604\ud608\ud610\ud611\ud613\ud614\ud615\ud61c\ud620"],["c8a1","\ud624\ud62d\ud638\ud639\ud63c\ud640\ud645\ud648\ud649\ud64b\ud64d\ud651\ud654\ud655\ud658\ud65c\ud667\ud669\ud670\ud671\ud674\ud683\ud685\ud68c\ud68d\ud690\ud694\ud69d\ud69f\ud6a1\ud6a8\ud6ac\ud6b0\ud6b9\ud6bb\ud6c4\ud6c5\ud6c8\ud6cc\ud6d1\ud6d4\ud6d7\ud6d9\ud6e0\ud6e4\ud6e8\ud6f0\ud6f5\ud6fc\ud6fd\ud700\ud704\ud711\ud718\ud719\ud71c\ud720\ud728\ud729\ud72b\ud72d\ud734\ud735\ud738\ud73c\ud744\ud747\ud749\ud750\ud751\ud754\ud756\ud757\ud758\ud759\ud760\ud761\ud763\ud765\ud769\ud76c\ud770\ud774\ud77c\ud77d\ud781\ud788\ud789\ud78c\ud790\ud798\ud799\ud79b\ud79d"],["caa1","\u4f3d\u4f73\u5047\u50f9\u52a0\u53ef\u5475\u54e5\u5609\u5ac1\u5bb6\u6687\u67b6\u67b7\u67ef\u6b4c\u73c2\u75c2\u7a3c\u82db\u8304\u8857\u8888\u8a36\u8cc8\u8dcf\u8efb\u8fe6\u99d5\u523b\u5374\u5404\u606a\u6164\u6bbc\u73cf\u811a\u89ba\u89d2\u95a3\u4f83\u520a\u58be\u5978\u59e6\u5e72\u5e79\u61c7\u63c0\u6746\u67ec\u687f\u6f97\u764e\u770b\u78f5\u7a08\u7aff\u7c21\u809d\u826e\u8271\u8aeb\u9593\u4e6b\u559d\u66f7\u6e34\u78a3\u7aed\u845b\u8910\u874e\u97a8\u52d8\u574e\u582a\u5d4c\u611f\u61be\u6221\u6562\u67d1\u6a44\u6e1b\u7518\u75b3\u76e3\u77b0\u7d3a\u90af\u9451\u9452\u9f95"],["cba1","\u5323\u5cac\u7532\u80db\u9240\u9598\u525b\u5808\u59dc\u5ca1\u5d17\u5eb7\u5f3a\u5f4a\u6177\u6c5f\u757a\u7586\u7ce0\u7d73\u7db1\u7f8c\u8154\u8221\u8591\u8941\u8b1b\u92fc\u964d\u9c47\u4ecb\u4ef7\u500b\u51f1\u584f\u6137\u613e\u6168\u6539\u69ea\u6f11\u75a5\u7686\u76d6\u7b87\u82a5\u84cb\uf900\u93a7\u958b\u5580\u5ba2\u5751\uf901\u7cb3\u7fb9\u91b5\u5028\u53bb\u5c45\u5de8\u62d2\u636e\u64da\u64e7\u6e20\u70ac\u795b\u8ddd\u8e1e\uf902\u907d\u9245\u92f8\u4e7e\u4ef6\u5065\u5dfe\u5efa\u6106\u6957\u8171\u8654\u8e47\u9375\u9a2b\u4e5e\u5091\u6770\u6840\u5109\u528d\u5292\u6aa2"],["cca1","\u77bc\u9210\u9ed4\u52ab\u602f\u8ff2\u5048\u61a9\u63ed\u64ca\u683c\u6a84\u6fc0\u8188\u89a1\u9694\u5805\u727d\u72ac\u7504\u7d79\u7e6d\u80a9\u898b\u8b74\u9063\u9d51\u6289\u6c7a\u6f54\u7d50\u7f3a\u8a23\u517c\u614a\u7b9d\u8b19\u9257\u938c\u4eac\u4fd3\u501e\u50be\u5106\u52c1\u52cd\u537f\u5770\u5883\u5e9a\u5f91\u6176\u61ac\u64ce\u656c\u666f\u66bb\u66f4\u6897\u6d87\u7085\u70f1\u749f\u74a5\u74ca\u75d9\u786c\u78ec\u7adf\u7af6\u7d45\u7d93\u8015\u803f\u811b\u8396\u8b66\u8f15\u9015\u93e1\u9803\u9838\u9a5a\u9be8\u4fc2\u5553\u583a\u5951\u5b63\u5c46\u60b8\u6212\u6842\u68b0"],["cda1","\u68e8\u6eaa\u754c\u7678\u78ce\u7a3d\u7cfb\u7e6b\u7e7c\u8a08\u8aa1\u8c3f\u968e\u9dc4\u53e4\u53e9\u544a\u5471\u56fa\u59d1\u5b64\u5c3b\u5eab\u62f7\u6537\u6545\u6572\u66a0\u67af\u69c1\u6cbd\u75fc\u7690\u777e\u7a3f\u7f94\u8003\u80a1\u818f\u82e6\u82fd\u83f0\u85c1\u8831\u88b4\u8aa5\uf903\u8f9c\u932e\u96c7\u9867\u9ad8\u9f13\u54ed\u659b\u66f2\u688f\u7a40\u8c37\u9d60\u56f0\u5764\u5d11\u6606\u68b1\u68cd\u6efe\u7428\u889e\u9be4\u6c68\uf904\u9aa8\u4f9b\u516c\u5171\u529f\u5b54\u5de5\u6050\u606d\u62f1\u63a7\u653b\u73d9\u7a7a\u86a3\u8ca2\u978f\u4e32\u5be1\u6208\u679c\u74dc"],["cea1","\u79d1\u83d3\u8a87\u8ab2\u8de8\u904e\u934b\u9846\u5ed3\u69e8\u85ff\u90ed\uf905\u51a0\u5b98\u5bec\u6163\u68fa\u6b3e\u704c\u742f\u74d8\u7ba1\u7f50\u83c5\u89c0\u8cab\u95dc\u9928\u522e\u605d\u62ec\u9002\u4f8a\u5149\u5321\u58d9\u5ee3\u66e0\u6d38\u709a\u72c2\u73d6\u7b50\u80f1\u945b\u5366\u639b\u7f6b\u4e56\u5080\u584a\u58de\u602a\u6127\u62d0\u69d0\u9b41\u5b8f\u7d18\u80b1\u8f5f\u4ea4\u50d1\u54ac\u55ac\u5b0c\u5da0\u5de7\u652a\u654e\u6821\u6a4b\u72e1\u768e\u77ef\u7d5e\u7ff9\u81a0\u854e\u86df\u8f03\u8f4e\u90ca\u9903\u9a55\u9bab\u4e18\u4e45\u4e5d\u4ec7\u4ff1\u5177\u52fe"],["cfa1","\u5340\u53e3\u53e5\u548e\u5614\u5775\u57a2\u5bc7\u5d87\u5ed0\u61fc\u62d8\u6551\u67b8\u67e9\u69cb\u6b50\u6bc6\u6bec\u6c42\u6e9d\u7078\u72d7\u7396\u7403\u77bf\u77e9\u7a76\u7d7f\u8009\u81fc\u8205\u820a\u82df\u8862\u8b33\u8cfc\u8ec0\u9011\u90b1\u9264\u92b6\u99d2\u9a45\u9ce9\u9dd7\u9f9c\u570b\u5c40\u83ca\u97a0\u97ab\u9eb4\u541b\u7a98\u7fa4\u88d9\u8ecd\u90e1\u5800\u5c48\u6398\u7a9f\u5bae\u5f13\u7a79\u7aae\u828e\u8eac\u5026\u5238\u52f8\u5377\u5708\u62f3\u6372\u6b0a\u6dc3\u7737\u53a5\u7357\u8568\u8e76\u95d5\u673a\u6ac3\u6f70\u8a6d\u8ecc\u994b\uf906\u6677\u6b78\u8cb4"],["d0a1","\u9b3c\uf907\u53eb\u572d\u594e\u63c6\u69fb\u73ea\u7845\u7aba\u7ac5\u7cfe\u8475\u898f\u8d73\u9035\u95a8\u52fb\u5747\u7547\u7b60\u83cc\u921e\uf908\u6a58\u514b\u524b\u5287\u621f\u68d8\u6975\u9699\u50c5\u52a4\u52e4\u61c3\u65a4\u6839\u69ff\u747e\u7b4b\u82b9\u83eb\u89b2\u8b39\u8fd1\u9949\uf909\u4eca\u5997\u64d2\u6611\u6a8e\u7434\u7981\u79bd\u82a9\u887e\u887f\u895f\uf90a\u9326\u4f0b\u53ca\u6025\u6271\u6c72\u7d1a\u7d66\u4e98\u5162\u77dc\u80af\u4f01\u4f0e\u5176\u5180\u55dc\u5668\u573b\u57fa\u57fc\u5914\u5947\u5993\u5bc4\u5c90\u5d0e\u5df1\u5e7e\u5fcc\u6280\u65d7\u65e3"],["d1a1","\u671e\u671f\u675e\u68cb\u68c4\u6a5f\u6b3a\u6c23\u6c7d\u6c82\u6dc7\u7398\u7426\u742a\u7482\u74a3\u7578\u757f\u7881\u78ef\u7941\u7947\u7948\u797a\u7b95\u7d00\u7dba\u7f88\u8006\u802d\u808c\u8a18\u8b4f\u8c48\u8d77\u9321\u9324\u98e2\u9951\u9a0e\u9a0f\u9a65\u9e92\u7dca\u4f76\u5409\u62ee\u6854\u91d1\u55ab\u513a\uf90b\uf90c\u5a1c\u61e6\uf90d\u62cf\u62ff\uf90e",5,"\u90a3\uf914",4,"\u8afe\uf919\uf91a\uf91b\uf91c\u6696\uf91d\u7156\uf91e\uf91f\u96e3\uf920\u634f\u637a\u5357\uf921\u678f\u6960\u6e73\uf922\u7537\uf923\uf924\uf925"],["d2a1","\u7d0d\uf926\uf927\u8872\u56ca\u5a18\uf928",4,"\u4e43\uf92d\u5167\u5948\u67f0\u8010\uf92e\u5973\u5e74\u649a\u79ca\u5ff5\u606c\u62c8\u637b\u5be7\u5bd7\u52aa\uf92f\u5974\u5f29\u6012\uf930\uf931\uf932\u7459\uf933",5,"\u99d1\uf939",10,"\u6fc3\uf944\uf945\u81bf\u8fb2\u60f1\uf946\uf947\u8166\uf948\uf949\u5c3f\uf94a",7,"\u5ae9\u8a25\u677b\u7d10\uf952",5,"\u80fd\uf958\uf959\u5c3c\u6ce5\u533f\u6eba\u591a\u8336"],["d3a1","\u4e39\u4eb6\u4f46\u55ae\u5718\u58c7\u5f56\u65b7\u65e6\u6a80\u6bb5\u6e4d\u77ed\u7aef\u7c1e\u7dde\u86cb\u8892\u9132\u935b\u64bb\u6fbe\u737a\u75b8\u9054\u5556\u574d\u61ba\u64d4\u66c7\u6de1\u6e5b\u6f6d\u6fb9\u75f0\u8043\u81bd\u8541\u8983\u8ac7\u8b5a\u931f\u6c93\u7553\u7b54\u8e0f\u905d\u5510\u5802\u5858\u5e62\u6207\u649e\u68e0\u7576\u7cd6\u87b3\u9ee8\u4ee3\u5788\u576e\u5927\u5c0d\u5cb1\u5e36\u5f85\u6234\u64e1\u73b3\u81fa\u888b\u8cb8\u968a\u9edb\u5b85\u5fb7\u60b3\u5012\u5200\u5230\u5716\u5835\u5857\u5c0e\u5c60\u5cf6\u5d8b\u5ea6\u5f92\u60bc\u6311\u6389\u6417\u6843"],["d4a1","\u68f9\u6ac2\u6dd8\u6e21\u6ed4\u6fe4\u71fe\u76dc\u7779\u79b1\u7a3b\u8404\u89a9\u8ced\u8df3\u8e48\u9003\u9014\u9053\u90fd\u934d\u9676\u97dc\u6bd2\u7006\u7258\u72a2\u7368\u7763\u79bf\u7be4\u7e9b\u8b80\u58a9\u60c7\u6566\u65fd\u66be\u6c8c\u711e\u71c9\u8c5a\u9813\u4e6d\u7a81\u4edd\u51ac\u51cd\u52d5\u540c\u61a7\u6771\u6850\u68df\u6d1e\u6f7c\u75bc\u77b3\u7ae5\u80f4\u8463\u9285\u515c\u6597\u675c\u6793\u75d8\u7ac7\u8373\uf95a\u8c46\u9017\u982d\u5c6f\u81c0\u829a\u9041\u906f\u920d\u5f97\u5d9d\u6a59\u71c8\u767b\u7b49\u85e4\u8b04\u9127\u9a30\u5587\u61f6\uf95b\u7669\u7f85"],["d5a1","\u863f\u87ba\u88f8\u908f\uf95c\u6d1b\u70d9\u73de\u7d61\u843d\uf95d\u916a\u99f1\uf95e\u4e82\u5375\u6b04\u6b12\u703e\u721b\u862d\u9e1e\u524c\u8fa3\u5d50\u64e5\u652c\u6b16\u6feb\u7c43\u7e9c\u85cd\u8964\u89bd\u62c9\u81d8\u881f\u5eca\u6717\u6d6a\u72fc\u7405\u746f\u8782\u90de\u4f86\u5d0d\u5fa0\u840a\u51b7\u63a0\u7565\u4eae\u5006\u5169\u51c9\u6881\u6a11\u7cae\u7cb1\u7ce7\u826f\u8ad2\u8f1b\u91cf\u4fb6\u5137\u52f5\u5442\u5eec\u616e\u623e\u65c5\u6ada\u6ffe\u792a\u85dc\u8823\u95ad\u9a62\u9a6a\u9e97\u9ece\u529b\u66c6\u6b77\u701d\u792b\u8f62\u9742\u6190\u6200\u6523\u6f23"],["d6a1","\u7149\u7489\u7df4\u806f\u84ee\u8f26\u9023\u934a\u51bd\u5217\u52a3\u6d0c\u70c8\u88c2\u5ec9\u6582\u6bae\u6fc2\u7c3e\u7375\u4ee4\u4f36\u56f9\uf95f\u5cba\u5dba\u601c\u73b2\u7b2d\u7f9a\u7fce\u8046\u901e\u9234\u96f6\u9748\u9818\u9f61\u4f8b\u6fa7\u79ae\u91b4\u96b7\u52de\uf960\u6488\u64c4\u6ad3\u6f5e\u7018\u7210\u76e7\u8001\u8606\u865c\u8def\u8f05\u9732\u9b6f\u9dfa\u9e75\u788c\u797f\u7da0\u83c9\u9304\u9e7f\u9e93\u8ad6\u58df\u5f04\u6727\u7027\u74cf\u7c60\u807e\u5121\u7028\u7262\u78ca\u8cc2\u8cda\u8cf4\u96f7\u4e86\u50da\u5bee\u5ed6\u6599\u71ce\u7642\u77ad\u804a\u84fc"],["d7a1","\u907c\u9b27\u9f8d\u58d8\u5a41\u5c62\u6a13\u6dda\u6f0f\u763b\u7d2f\u7e37\u851e\u8938\u93e4\u964b\u5289\u65d2\u67f3\u69b4\u6d41\u6e9c\u700f\u7409\u7460\u7559\u7624\u786b\u8b2c\u985e\u516d\u622e\u9678\u4f96\u502b\u5d19\u6dea\u7db8\u8f2a\u5f8b\u6144\u6817\uf961\u9686\u52d2\u808b\u51dc\u51cc\u695e\u7a1c\u7dbe\u83f1\u9675\u4fda\u5229\u5398\u540f\u550e\u5c65\u60a7\u674e\u68a8\u6d6c\u7281\u72f8\u7406\u7483\uf962\u75e2\u7c6c\u7f79\u7fb8\u8389\u88cf\u88e1\u91cc\u91d0\u96e2\u9bc9\u541d\u6f7e\u71d0\u7498\u85fa\u8eaa\u96a3\u9c57\u9e9f\u6797\u6dcb\u7433\u81e8\u9716\u782c"],["d8a1","\u7acb\u7b20\u7c92\u6469\u746a\u75f2\u78bc\u78e8\u99ac\u9b54\u9ebb\u5bde\u5e55\u6f20\u819c\u83ab\u9088\u4e07\u534d\u5a29\u5dd2\u5f4e\u6162\u633d\u6669\u66fc\u6eff\u6f2b\u7063\u779e\u842c\u8513\u883b\u8f13\u9945\u9c3b\u551c\u62b9\u672b\u6cab\u8309\u896a\u977a\u4ea1\u5984\u5fd8\u5fd9\u671b\u7db2\u7f54\u8292\u832b\u83bd\u8f1e\u9099\u57cb\u59b9\u5a92\u5bd0\u6627\u679a\u6885\u6bcf\u7164\u7f75\u8cb7\u8ce3\u9081\u9b45\u8108\u8c8a\u964c\u9a40\u9ea5\u5b5f\u6c13\u731b\u76f2\u76df\u840c\u51aa\u8993\u514d\u5195\u52c9\u68c9\u6c94\u7704\u7720\u7dbf\u7dec\u9762\u9eb5\u6ec5"],["d9a1","\u8511\u51a5\u540d\u547d\u660e\u669d\u6927\u6e9f\u76bf\u7791\u8317\u84c2\u879f\u9169\u9298\u9cf4\u8882\u4fae\u5192\u52df\u59c6\u5e3d\u6155\u6478\u6479\u66ae\u67d0\u6a21\u6bcd\u6bdb\u725f\u7261\u7441\u7738\u77db\u8017\u82bc\u8305\u8b00\u8b28\u8c8c\u6728\u6c90\u7267\u76ee\u7766\u7a46\u9da9\u6b7f\u6c92\u5922\u6726\u8499\u536f\u5893\u5999\u5edf\u63cf\u6634\u6773\u6e3a\u732b\u7ad7\u82d7\u9328\u52d9\u5deb\u61ae\u61cb\u620a\u62c7\u64ab\u65e0\u6959\u6b66\u6bcb\u7121\u73f7\u755d\u7e46\u821e\u8302\u856a\u8aa3\u8cbf\u9727\u9d61\u58a8\u9ed8\u5011\u520e\u543b\u554f\u6587"],["daa1","\u6c76\u7d0a\u7d0b\u805e\u868a\u9580\u96ef\u52ff\u6c95\u7269\u5473\u5a9a\u5c3e\u5d4b\u5f4c\u5fae\u672a\u68b6\u6963\u6e3c\u6e44\u7709\u7c73\u7f8e\u8587\u8b0e\u8ff7\u9761\u9ef4\u5cb7\u60b6\u610d\u61ab\u654f\u65fb\u65fc\u6c11\u6cef\u739f\u73c9\u7de1\u9594\u5bc6\u871c\u8b10\u525d\u535a\u62cd\u640f\u64b2\u6734\u6a38\u6cca\u73c0\u749e\u7b94\u7c95\u7e1b\u818a\u8236\u8584\u8feb\u96f9\u99c1\u4f34\u534a\u53cd\u53db\u62cc\u642c\u6500\u6591\u69c3\u6cee\u6f58\u73ed\u7554\u7622\u76e4\u76fc\u78d0\u78fb\u792c\u7d46\u822c\u87e0\u8fd4\u9812\u98ef\u52c3\u62d4\u64a5\u6e24\u6f51"],["dba1","\u767c\u8dcb\u91b1\u9262\u9aee\u9b43\u5023\u508d\u574a\u59a8\u5c28\u5e47\u5f77\u623f\u653e\u65b9\u65c1\u6609\u678b\u699c\u6ec2\u78c5\u7d21\u80aa\u8180\u822b\u82b3\u84a1\u868c\u8a2a\u8b17\u90a6\u9632\u9f90\u500d\u4ff3\uf963\u57f9\u5f98\u62dc\u6392\u676f\u6e43\u7119\u76c3\u80cc\u80da\u88f4\u88f5\u8919\u8ce0\u8f29\u914d\u966a\u4f2f\u4f70\u5e1b\u67cf\u6822\u767d\u767e\u9b44\u5e61\u6a0a\u7169\u71d4\u756a\uf964\u7e41\u8543\u85e9\u98dc\u4f10\u7b4f\u7f70\u95a5\u51e1\u5e06\u68b5\u6c3e\u6c4e\u6cdb\u72af\u7bc4\u8303\u6cd5\u743a\u50fb\u5288\u58c1\u64d8\u6a97\u74a7\u7656"],["dca1","\u78a7\u8617\u95e2\u9739\uf965\u535e\u5f01\u8b8a\u8fa8\u8faf\u908a\u5225\u77a5\u9c49\u9f08\u4e19\u5002\u5175\u5c5b\u5e77\u661e\u663a\u67c4\u68c5\u70b3\u7501\u75c5\u79c9\u7add\u8f27\u9920\u9a08\u4fdd\u5821\u5831\u5bf6\u666e\u6b65\u6d11\u6e7a\u6f7d\u73e4\u752b\u83e9\u88dc\u8913\u8b5c\u8f14\u4f0f\u50d5\u5310\u535c\u5b93\u5fa9\u670d\u798f\u8179\u832f\u8514\u8907\u8986\u8f39\u8f3b\u99a5\u9c12\u672c\u4e76\u4ff8\u5949\u5c01\u5cef\u5cf0\u6367\u68d2\u70fd\u71a2\u742b\u7e2b\u84ec\u8702\u9022\u92d2\u9cf3\u4e0d\u4ed8\u4fef\u5085\u5256\u526f\u5426\u5490\u57e0\u592b\u5a66"],["dda1","\u5b5a\u5b75\u5bcc\u5e9c\uf966\u6276\u6577\u65a7\u6d6e\u6ea5\u7236\u7b26\u7c3f\u7f36\u8150\u8151\u819a\u8240\u8299\u83a9\u8a03\u8ca0\u8ce6\u8cfb\u8d74\u8dba\u90e8\u91dc\u961c\u9644\u99d9\u9ce7\u5317\u5206\u5429\u5674\u58b3\u5954\u596e\u5fff\u61a4\u626e\u6610\u6c7e\u711a\u76c6\u7c89\u7cde\u7d1b\u82ac\u8cc1\u96f0\uf967\u4f5b\u5f17\u5f7f\u62c2\u5d29\u670b\u68da\u787c\u7e43\u9d6c\u4e15\u5099\u5315\u532a\u5351\u5983\u5a62\u5e87\u60b2\u618a\u6249\u6279\u6590\u6787\u69a7\u6bd4\u6bd6\u6bd7\u6bd8\u6cb8\uf968\u7435\u75fa\u7812\u7891\u79d5\u79d8\u7c83\u7dcb\u7fe1\u80a5"],["dea1","\u813e\u81c2\u83f2\u871a\u88e8\u8ab9\u8b6c\u8cbb\u9119\u975e\u98db\u9f3b\u56ac\u5b2a\u5f6c\u658c\u6ab3\u6baf\u6d5c\u6ff1\u7015\u725d\u73ad\u8ca7\u8cd3\u983b\u6191\u6c37\u8058\u9a01\u4e4d\u4e8b\u4e9b\u4ed5\u4f3a\u4f3c\u4f7f\u4fdf\u50ff\u53f2\u53f8\u5506\u55e3\u56db\u58eb\u5962\u5a11\u5beb\u5bfa\u5c04\u5df3\u5e2b\u5f99\u601d\u6368\u659c\u65af\u67f6\u67fb\u68ad\u6b7b\u6c99\u6cd7\u6e23\u7009\u7345\u7802\u793e\u7940\u7960\u79c1\u7be9\u7d17\u7d72\u8086\u820d\u838e\u84d1\u86c7\u88df\u8a50\u8a5e\u8b1d\u8cdc\u8d66\u8fad\u90aa\u98fc\u99df\u9e9d\u524a\uf969\u6714\uf96a"],["dfa1","\u5098\u522a\u5c71\u6563\u6c55\u73ca\u7523\u759d\u7b97\u849c\u9178\u9730\u4e77\u6492\u6bba\u715e\u85a9\u4e09\uf96b\u6749\u68ee\u6e17\u829f\u8518\u886b\u63f7\u6f81\u9212\u98af\u4e0a\u50b7\u50cf\u511f\u5546\u55aa\u5617\u5b40\u5c19\u5ce0\u5e38\u5e8a\u5ea0\u5ec2\u60f3\u6851\u6a61\u6e58\u723d\u7240\u72c0\u76f8\u7965\u7bb1\u7fd4\u88f3\u89f4\u8a73\u8c61\u8cde\u971c\u585e\u74bd\u8cfd\u55c7\uf96c\u7a61\u7d22\u8272\u7272\u751f\u7525\uf96d\u7b19\u5885\u58fb\u5dbc\u5e8f\u5eb6\u5f90\u6055\u6292\u637f\u654d\u6691\u66d9\u66f8\u6816\u68f2\u7280\u745e\u7b6e\u7d6e\u7dd6\u7f72"],["e0a1","\u80e5\u8212\u85af\u897f\u8a93\u901d\u92e4\u9ecd\u9f20\u5915\u596d\u5e2d\u60dc\u6614\u6673\u6790\u6c50\u6dc5\u6f5f\u77f3\u78a9\u84c6\u91cb\u932b\u4ed9\u50ca\u5148\u5584\u5b0b\u5ba3\u6247\u657e\u65cb\u6e32\u717d\u7401\u7444\u7487\u74bf\u766c\u79aa\u7dda\u7e55\u7fa8\u817a\u81b3\u8239\u861a\u87ec\u8a75\u8de3\u9078\u9291\u9425\u994d\u9bae\u5368\u5c51\u6954\u6cc4\u6d29\u6e2b\u820c\u859b\u893b\u8a2d\u8aaa\u96ea\u9f67\u5261\u66b9\u6bb2\u7e96\u87fe\u8d0d\u9583\u965d\u651d\u6d89\u71ee\uf96e\u57ce\u59d3\u5bac\u6027\u60fa\u6210\u661f\u665f\u7329\u73f9\u76db\u7701\u7b6c"],["e1a1","\u8056\u8072\u8165\u8aa0\u9192\u4e16\u52e2\u6b72\u6d17\u7a05\u7b39\u7d30\uf96f\u8cb0\u53ec\u562f\u5851\u5bb5\u5c0f\u5c11\u5de2\u6240\u6383\u6414\u662d\u68b3\u6cbc\u6d88\u6eaf\u701f\u70a4\u71d2\u7526\u758f\u758e\u7619\u7b11\u7be0\u7c2b\u7d20\u7d39\u852c\u856d\u8607\u8a34\u900d\u9061\u90b5\u92b7\u97f6\u9a37\u4fd7\u5c6c\u675f\u6d91\u7c9f\u7e8c\u8b16\u8d16\u901f\u5b6b\u5dfd\u640d\u84c0\u905c\u98e1\u7387\u5b8b\u609a\u677e\u6dde\u8a1f\u8aa6\u9001\u980c\u5237\uf970\u7051\u788e\u9396\u8870\u91d7\u4fee\u53d7\u55fd\u56da\u5782\u58fd\u5ac2\u5b88\u5cab\u5cc0\u5e25\u6101"],["e2a1","\u620d\u624b\u6388\u641c\u6536\u6578\u6a39\u6b8a\u6c34\u6d19\u6f31\u71e7\u72e9\u7378\u7407\u74b2\u7626\u7761\u79c0\u7a57\u7aea\u7cb9\u7d8f\u7dac\u7e61\u7f9e\u8129\u8331\u8490\u84da\u85ea\u8896\u8ab0\u8b90\u8f38\u9042\u9083\u916c\u9296\u92b9\u968b\u96a7\u96a8\u96d6\u9700\u9808\u9996\u9ad3\u9b1a\u53d4\u587e\u5919\u5b70\u5bbf\u6dd1\u6f5a\u719f\u7421\u74b9\u8085\u83fd\u5de1\u5f87\u5faa\u6042\u65ec\u6812\u696f\u6a53\u6b89\u6d35\u6df3\u73e3\u76fe\u77ac\u7b4d\u7d14\u8123\u821c\u8340\u84f4\u8563\u8a62\u8ac4\u9187\u931e\u9806\u99b4\u620c\u8853\u8ff0\u9265\u5d07\u5d27"],["e3a1","\u5d69\u745f\u819d\u8768\u6fd5\u62fe\u7fd2\u8936\u8972\u4e1e\u4e58\u50e7\u52dd\u5347\u627f\u6607\u7e69\u8805\u965e\u4f8d\u5319\u5636\u59cb\u5aa4\u5c38\u5c4e\u5c4d\u5e02\u5f11\u6043\u65bd\u662f\u6642\u67be\u67f4\u731c\u77e2\u793a\u7fc5\u8494\u84cd\u8996\u8a66\u8a69\u8ae1\u8c55\u8c7a\u57f4\u5bd4\u5f0f\u606f\u62ed\u690d\u6b96\u6e5c\u7184\u7bd2\u8755\u8b58\u8efe\u98df\u98fe\u4f38\u4f81\u4fe1\u547b\u5a20\u5bb8\u613c\u65b0\u6668\u71fc\u7533\u795e\u7d33\u814e\u81e3\u8398\u85aa\u85ce\u8703\u8a0a\u8eab\u8f9b\uf971\u8fc5\u5931\u5ba4\u5be6\u6089\u5be9\u5c0b\u5fc3\u6c81"],["e4a1","\uf972\u6df1\u700b\u751a\u82af\u8af6\u4ec0\u5341\uf973\u96d9\u6c0f\u4e9e\u4fc4\u5152\u555e\u5a25\u5ce8\u6211\u7259\u82bd\u83aa\u86fe\u8859\u8a1d\u963f\u96c5\u9913\u9d09\u9d5d\u580a\u5cb3\u5dbd\u5e44\u60e1\u6115\u63e1\u6a02\u6e25\u9102\u9354\u984e\u9c10\u9f77\u5b89\u5cb8\u6309\u664f\u6848\u773c\u96c1\u978d\u9854\u9b9f\u65a1\u8b01\u8ecb\u95bc\u5535\u5ca9\u5dd6\u5eb5\u6697\u764c\u83f4\u95c7\u58d3\u62bc\u72ce\u9d28\u4ef0\u592e\u600f\u663b\u6b83\u79e7\u9d26\u5393\u54c0\u57c3\u5d16\u611b\u66d6\u6daf\u788d\u827e\u9698\u9744\u5384\u627c\u6396\u6db2\u7e0a\u814b\u984d"],["e5a1","\u6afb\u7f4c\u9daf\u9e1a\u4e5f\u503b\u51b6\u591c\u60f9\u63f6\u6930\u723a\u8036\uf974\u91ce\u5f31\uf975\uf976\u7d04\u82e5\u846f\u84bb\u85e5\u8e8d\uf977\u4f6f\uf978\uf979\u58e4\u5b43\u6059\u63da\u6518\u656d\u6698\uf97a\u694a\u6a23\u6d0b\u7001\u716c\u75d2\u760d\u79b3\u7a70\uf97b\u7f8a\uf97c\u8944\uf97d\u8b93\u91c0\u967d\uf97e\u990a\u5704\u5fa1\u65bc\u6f01\u7600\u79a6\u8a9e\u99ad\u9b5a\u9f6c\u5104\u61b6\u6291\u6a8d\u81c6\u5043\u5830\u5f66\u7109\u8a00\u8afa\u5b7c\u8616\u4ffa\u513c\u56b4\u5944\u63a9\u6df9\u5daa\u696d\u5186\u4e88\u4f59\uf97f\uf980\uf981\u5982\uf982"],["e6a1","\uf983\u6b5f\u6c5d\uf984\u74b5\u7916\uf985\u8207\u8245\u8339\u8f3f\u8f5d\uf986\u9918\uf987\uf988\uf989\u4ea6\uf98a\u57df\u5f79\u6613\uf98b\uf98c\u75ab\u7e79\u8b6f\uf98d\u9006\u9a5b\u56a5\u5827\u59f8\u5a1f\u5bb4\uf98e\u5ef6\uf98f\uf990\u6350\u633b\uf991\u693d\u6c87\u6cbf\u6d8e\u6d93\u6df5\u6f14\uf992\u70df\u7136\u7159\uf993\u71c3\u71d5\uf994\u784f\u786f\uf995\u7b75\u7de3\uf996\u7e2f\uf997\u884d\u8edf\uf998\uf999\uf99a\u925b\uf99b\u9cf6\uf99c\uf99d\uf99e\u6085\u6d85\uf99f\u71b1\uf9a0\uf9a1\u95b1\u53ad\uf9a2\uf9a3\uf9a4\u67d3\uf9a5\u708e\u7130\u7430\u8276\u82d2"],["e7a1","\uf9a6\u95bb\u9ae5\u9e7d\u66c4\uf9a7\u71c1\u8449\uf9a8\uf9a9\u584b\uf9aa\uf9ab\u5db8\u5f71\uf9ac\u6620\u668e\u6979\u69ae\u6c38\u6cf3\u6e36\u6f41\u6fda\u701b\u702f\u7150\u71df\u7370\uf9ad\u745b\uf9ae\u74d4\u76c8\u7a4e\u7e93\uf9af\uf9b0\u82f1\u8a60\u8fce\uf9b1\u9348\uf9b2\u9719\uf9b3\uf9b4\u4e42\u502a\uf9b5\u5208\u53e1\u66f3\u6c6d\u6fca\u730a\u777f\u7a62\u82ae\u85dd\u8602\uf9b6\u88d4\u8a63\u8b7d\u8c6b\uf9b7\u92b3\uf9b8\u9713\u9810\u4e94\u4f0d\u4fc9\u50b2\u5348\u543e\u5433\u55da\u5862\u58ba\u5967\u5a1b\u5be4\u609f\uf9b9\u61ca\u6556\u65ff\u6664\u68a7\u6c5a\u6fb3"],["e8a1","\u70cf\u71ac\u7352\u7b7d\u8708\u8aa4\u9c32\u9f07\u5c4b\u6c83\u7344\u7389\u923a\u6eab\u7465\u761f\u7a69\u7e15\u860a\u5140\u58c5\u64c1\u74ee\u7515\u7670\u7fc1\u9095\u96cd\u9954\u6e26\u74e6\u7aa9\u7aaa\u81e5\u86d9\u8778\u8a1b\u5a49\u5b8c\u5b9b\u68a1\u6900\u6d63\u73a9\u7413\u742c\u7897\u7de9\u7feb\u8118\u8155\u839e\u8c4c\u962e\u9811\u66f0\u5f80\u65fa\u6789\u6c6a\u738b\u502d\u5a03\u6b6a\u77ee\u5916\u5d6c\u5dcd\u7325\u754f\uf9ba\uf9bb\u50e5\u51f9\u582f\u592d\u5996\u59da\u5be5\uf9bc\uf9bd\u5da2\u62d7\u6416\u6493\u64fe\uf9be\u66dc\uf9bf\u6a48\uf9c0\u71ff\u7464\uf9c1"],["e9a1","\u7a88\u7aaf\u7e47\u7e5e\u8000\u8170\uf9c2\u87ef\u8981\u8b20\u9059\uf9c3\u9080\u9952\u617e\u6b32\u6d74\u7e1f\u8925\u8fb1\u4fd1\u50ad\u5197\u52c7\u57c7\u5889\u5bb9\u5eb8\u6142\u6995\u6d8c\u6e67\u6eb6\u7194\u7462\u7528\u752c\u8073\u8338\u84c9\u8e0a\u9394\u93de\uf9c4\u4e8e\u4f51\u5076\u512a\u53c8\u53cb\u53f3\u5b87\u5bd3\u5c24\u611a\u6182\u65f4\u725b\u7397\u7440\u76c2\u7950\u7991\u79b9\u7d06\u7fbd\u828b\u85d5\u865e\u8fc2\u9047\u90f5\u91ea\u9685\u96e8\u96e9\u52d6\u5f67\u65ed\u6631\u682f\u715c\u7a36\u90c1\u980a\u4e91\uf9c5\u6a52\u6b9e\u6f90\u7189\u8018\u82b8\u8553"],["eaa1","\u904b\u9695\u96f2\u97fb\u851a\u9b31\u4e90\u718a\u96c4\u5143\u539f\u54e1\u5713\u5712\u57a3\u5a9b\u5ac4\u5bc3\u6028\u613f\u63f4\u6c85\u6d39\u6e72\u6e90\u7230\u733f\u7457\u82d1\u8881\u8f45\u9060\uf9c6\u9662\u9858\u9d1b\u6708\u8d8a\u925e\u4f4d\u5049\u50de\u5371\u570d\u59d4\u5a01\u5c09\u6170\u6690\u6e2d\u7232\u744b\u7def\u80c3\u840e\u8466\u853f\u875f\u885b\u8918\u8b02\u9055\u97cb\u9b4f\u4e73\u4f91\u5112\u516a\uf9c7\u552f\u55a9\u5b7a\u5ba5\u5e7c\u5e7d\u5ebe\u60a0\u60df\u6108\u6109\u63c4\u6538\u6709\uf9c8\u67d4\u67da\uf9c9\u6961\u6962\u6cb9\u6d27\uf9ca\u6e38\uf9cb"],["eba1","\u6fe1\u7336\u7337\uf9cc\u745c\u7531\uf9cd\u7652\uf9ce\uf9cf\u7dad\u81fe\u8438\u88d5\u8a98\u8adb\u8aed\u8e30\u8e42\u904a\u903e\u907a\u9149\u91c9\u936e\uf9d0\uf9d1\u5809\uf9d2\u6bd3\u8089\u80b2\uf9d3\uf9d4\u5141\u596b\u5c39\uf9d5\uf9d6\u6f64\u73a7\u80e4\u8d07\uf9d7\u9217\u958f\uf9d8\uf9d9\uf9da\uf9db\u807f\u620e\u701c\u7d68\u878d\uf9dc\u57a0\u6069\u6147\u6bb7\u8abe\u9280\u96b1\u4e59\u541f\u6deb\u852d\u9670\u97f3\u98ee\u63d6\u6ce3\u9091\u51dd\u61c9\u81ba\u9df9\u4f9d\u501a\u5100\u5b9c\u610f\u61ff\u64ec\u6905\u6bc5\u7591\u77e3\u7fa9\u8264\u858f\u87fb\u8863\u8abc"],["eca1","\u8b70\u91ab\u4e8c\u4ee5\u4f0a\uf9dd\uf9de\u5937\u59e8\uf9df\u5df2\u5f1b\u5f5b\u6021\uf9e0\uf9e1\uf9e2\uf9e3\u723e\u73e5\uf9e4\u7570\u75cd\uf9e5\u79fb\uf9e6\u800c\u8033\u8084\u82e1\u8351\uf9e7\uf9e8\u8cbd\u8cb3\u9087\uf9e9\uf9ea\u98f4\u990c\uf9eb\uf9ec\u7037\u76ca\u7fca\u7fcc\u7ffc\u8b1a\u4eba\u4ec1\u5203\u5370\uf9ed\u54bd\u56e0\u59fb\u5bc5\u5f15\u5fcd\u6e6e\uf9ee\uf9ef\u7d6a\u8335\uf9f0\u8693\u8a8d\uf9f1\u976d\u9777\uf9f2\uf9f3\u4e00\u4f5a\u4f7e\u58f9\u65e5\u6ea2\u9038\u93b0\u99b9\u4efb\u58ec\u598a\u59d9\u6041\uf9f4\uf9f5\u7a14\uf9f6\u834f\u8cc3\u5165\u5344"],["eda1","\uf9f7\uf9f8\uf9f9\u4ecd\u5269\u5b55\u82bf\u4ed4\u523a\u54a8\u59c9\u59ff\u5b50\u5b57\u5b5c\u6063\u6148\u6ecb\u7099\u716e\u7386\u74f7\u75b5\u78c1\u7d2b\u8005\u81ea\u8328\u8517\u85c9\u8aee\u8cc7\u96cc\u4f5c\u52fa\u56bc\u65ab\u6628\u707c\u70b8\u7235\u7dbd\u828d\u914c\u96c0\u9d72\u5b71\u68e7\u6b98\u6f7a\u76de\u5c91\u66ab\u6f5b\u7bb4\u7c2a\u8836\u96dc\u4e08\u4ed7\u5320\u5834\u58bb\u58ef\u596c\u5c07\u5e33\u5e84\u5f35\u638c\u66b2\u6756\u6a1f\u6aa3\u6b0c\u6f3f\u7246\uf9fa\u7350\u748b\u7ae0\u7ca7\u8178\u81df\u81e7\u838a\u846c\u8523\u8594\u85cf\u88dd\u8d13\u91ac\u9577"],["eea1","\u969c\u518d\u54c9\u5728\u5bb0\u624d\u6750\u683d\u6893\u6e3d\u6ed3\u707d\u7e21\u88c1\u8ca1\u8f09\u9f4b\u9f4e\u722d\u7b8f\u8acd\u931a\u4f47\u4f4e\u5132\u5480\u59d0\u5e95\u62b5\u6775\u696e\u6a17\u6cae\u6e1a\u72d9\u732a\u75bd\u7bb8\u7d35\u82e7\u83f9\u8457\u85f7\u8a5b\u8caf\u8e87\u9019\u90b8\u96ce\u9f5f\u52e3\u540a\u5ae1\u5bc2\u6458\u6575\u6ef4\u72c4\uf9fb\u7684\u7a4d\u7b1b\u7c4d\u7e3e\u7fdf\u837b\u8b2b\u8cca\u8d64\u8de1\u8e5f\u8fea\u8ff9\u9069\u93d1\u4f43\u4f7a\u50b3\u5168\u5178\u524d\u526a\u5861\u587c\u5960\u5c08\u5c55\u5edb\u609b\u6230\u6813\u6bbf\u6c08\u6fb1"],["efa1","\u714e\u7420\u7530\u7538\u7551\u7672\u7b4c\u7b8b\u7bad\u7bc6\u7e8f\u8a6e\u8f3e\u8f49\u923f\u9293\u9322\u942b\u96fb\u985a\u986b\u991e\u5207\u622a\u6298\u6d59\u7664\u7aca\u7bc0\u7d76\u5360\u5cbe\u5e97\u6f38\u70b9\u7c98\u9711\u9b8e\u9ede\u63a5\u647a\u8776\u4e01\u4e95\u4ead\u505c\u5075\u5448\u59c3\u5b9a\u5e40\u5ead\u5ef7\u5f81\u60c5\u633a\u653f\u6574\u65cc\u6676\u6678\u67fe\u6968\u6a89\u6b63\u6c40\u6dc0\u6de8\u6e1f\u6e5e\u701e\u70a1\u738e\u73fd\u753a\u775b\u7887\u798e\u7a0b\u7a7d\u7cbe\u7d8e\u8247\u8a02\u8aea\u8c9e\u912d\u914a\u91d8\u9266\u92cc\u9320\u9706\u9756"],["f0a1","\u975c\u9802\u9f0e\u5236\u5291\u557c\u5824\u5e1d\u5f1f\u608c\u63d0\u68af\u6fdf\u796d\u7b2c\u81cd\u85ba\u88fd\u8af8\u8e44\u918d\u9664\u969b\u973d\u984c\u9f4a\u4fce\u5146\u51cb\u52a9\u5632\u5f14\u5f6b\u63aa\u64cd\u65e9\u6641\u66fa\u66f9\u671d\u689d\u68d7\u69fd\u6f15\u6f6e\u7167\u71e5\u722a\u74aa\u773a\u7956\u795a\u79df\u7a20\u7a95\u7c97\u7cdf\u7d44\u7e70\u8087\u85fb\u86a4\u8a54\u8abf\u8d99\u8e81\u9020\u906d\u91e3\u963b\u96d5\u9ce5\u65cf\u7c07\u8db3\u93c3\u5b58\u5c0a\u5352\u62d9\u731d\u5027\u5b97\u5f9e\u60b0\u616b\u68d5\u6dd9\u742e\u7a2e\u7d42\u7d9c\u7e31\u816b"],["f1a1","\u8e2a\u8e35\u937e\u9418\u4f50\u5750\u5de6\u5ea7\u632b\u7f6a\u4e3b\u4f4f\u4f8f\u505a\u59dd\u80c4\u546a\u5468\u55fe\u594f\u5b99\u5dde\u5eda\u665d\u6731\u67f1\u682a\u6ce8\u6d32\u6e4a\u6f8d\u70b7\u73e0\u7587\u7c4c\u7d02\u7d2c\u7da2\u821f\u86db\u8a3b\u8a85\u8d70\u8e8a\u8f33\u9031\u914e\u9152\u9444\u99d0\u7af9\u7ca5\u4fca\u5101\u51c6\u57c8\u5bef\u5cfb\u6659\u6a3d\u6d5a\u6e96\u6fec\u710c\u756f\u7ae3\u8822\u9021\u9075\u96cb\u99ff\u8301\u4e2d\u4ef2\u8846\u91cd\u537d\u6adb\u696b\u6c41\u847a\u589e\u618e\u66fe\u62ef\u70dd\u7511\u75c7\u7e52\u84b8\u8b49\u8d08\u4e4b\u53ea"],["f2a1","\u54ab\u5730\u5740\u5fd7\u6301\u6307\u646f\u652f\u65e8\u667a\u679d\u67b3\u6b62\u6c60\u6c9a\u6f2c\u77e5\u7825\u7949\u7957\u7d19\u80a2\u8102\u81f3\u829d\u82b7\u8718\u8a8c\uf9fc\u8d04\u8dbe\u9072\u76f4\u7a19\u7a37\u7e54\u8077\u5507\u55d4\u5875\u632f\u6422\u6649\u664b\u686d\u699b\u6b84\u6d25\u6eb1\u73cd\u7468\u74a1\u755b\u75b9\u76e1\u771e\u778b\u79e6\u7e09\u7e1d\u81fb\u852f\u8897\u8a3a\u8cd1\u8eeb\u8fb0\u9032\u93ad\u9663\u9673\u9707\u4f84\u53f1\u59ea\u5ac9\u5e19\u684e\u74c6\u75be\u79e9\u7a92\u81a3\u86ed\u8cea\u8dcc\u8fed\u659f\u6715\uf9fd\u57f7\u6f57\u7ddd\u8f2f"],["f3a1","\u93f6\u96c6\u5fb5\u61f2\u6f84\u4e14\u4f98\u501f\u53c9\u55df\u5d6f\u5dee\u6b21\u6b64\u78cb\u7b9a\uf9fe\u8e49\u8eca\u906e\u6349\u643e\u7740\u7a84\u932f\u947f\u9f6a\u64b0\u6faf\u71e6\u74a8\u74da\u7ac4\u7c12\u7e82\u7cb2\u7e98\u8b9a\u8d0a\u947d\u9910\u994c\u5239\u5bdf\u64e6\u672d\u7d2e\u50ed\u53c3\u5879\u6158\u6159\u61fa\u65ac\u7ad9\u8b92\u8b96\u5009\u5021\u5275\u5531\u5a3c\u5ee0\u5f70\u6134\u655e\u660c\u6636\u66a2\u69cd\u6ec4\u6f32\u7316\u7621\u7a93\u8139\u8259\u83d6\u84bc\u50b5\u57f0\u5bc0\u5be8\u5f69\u63a1\u7826\u7db5\u83dc\u8521\u91c7\u91f5\u518a\u67f5\u7b56"],["f4a1","\u8cac\u51c4\u59bb\u60bd\u8655\u501c\uf9ff\u5254\u5c3a\u617d\u621a\u62d3\u64f2\u65a5\u6ecc\u7620\u810a\u8e60\u965f\u96bb\u4edf\u5343\u5598\u5929\u5ddd\u64c5\u6cc9\u6dfa\u7394\u7a7f\u821b\u85a6\u8ce4\u8e10\u9077\u91e7\u95e1\u9621\u97c6\u51f8\u54f2\u5586\u5fb9\u64a4\u6f88\u7db4\u8f1f\u8f4d\u9435\u50c9\u5c16\u6cbe\u6dfb\u751b\u77bb\u7c3d\u7c64\u8a79\u8ac2\u581e\u59be\u5e16\u6377\u7252\u758a\u776b\u8adc\u8cbc\u8f12\u5ef3\u6674\u6df8\u807d\u83c1\u8acb\u9751\u9bd6\ufa00\u5243\u66ff\u6d95\u6eef\u7de0\u8ae6\u902e\u905e\u9ad4\u521d\u527f\u54e8\u6194\u6284\u62db\u68a2"],["f5a1","\u6912\u695a\u6a35\u7092\u7126\u785d\u7901\u790e\u79d2\u7a0d\u8096\u8278\u82d5\u8349\u8549\u8c82\u8d85\u9162\u918b\u91ae\u4fc3\u56d1\u71ed\u77d7\u8700\u89f8\u5bf8\u5fd6\u6751\u90a8\u53e2\u585a\u5bf5\u60a4\u6181\u6460\u7e3d\u8070\u8525\u9283\u64ae\u50ac\u5d14\u6700\u589c\u62bd\u63a8\u690e\u6978\u6a1e\u6e6b\u76ba\u79cb\u82bb\u8429\u8acf\u8da8\u8ffd\u9112\u914b\u919c\u9310\u9318\u939a\u96db\u9a36\u9c0d\u4e11\u755c\u795d\u7afa\u7b51\u7bc9\u7e2e\u84c4\u8e59\u8e74\u8ef8\u9010\u6625\u693f\u7443\u51fa\u672e\u9edc\u5145\u5fe0\u6c96\u87f2\u885d\u8877\u60b4\u81b5\u8403"],["f6a1","\u8d05\u53d6\u5439\u5634\u5a36\u5c31\u708a\u7fe0\u805a\u8106\u81ed\u8da3\u9189\u9a5f\u9df2\u5074\u4ec4\u53a0\u60fb\u6e2c\u5c64\u4f88\u5024\u55e4\u5cd9\u5e5f\u6065\u6894\u6cbb\u6dc4\u71be\u75d4\u75f4\u7661\u7a1a\u7a49\u7dc7\u7dfb\u7f6e\u81f4\u86a9\u8f1c\u96c9\u99b3\u9f52\u5247\u52c5\u98ed\u89aa\u4e03\u67d2\u6f06\u4fb5\u5be2\u6795\u6c88\u6d78\u741b\u7827\u91dd\u937c\u87c4\u79e4\u7a31\u5feb\u4ed6\u54a4\u553e\u58ae\u59a5\u60f0\u6253\u62d6\u6736\u6955\u8235\u9640\u99b1\u99dd\u502c\u5353\u5544\u577c\ufa01\u6258\ufa02\u64e2\u666b\u67dd\u6fc1\u6fef\u7422\u7438\u8a17"],["f7a1","\u9438\u5451\u5606\u5766\u5f48\u619a\u6b4e\u7058\u70ad\u7dbb\u8a95\u596a\u812b\u63a2\u7708\u803d\u8caa\u5854\u642d\u69bb\u5b95\u5e11\u6e6f\ufa03\u8569\u514c\u53f0\u592a\u6020\u614b\u6b86\u6c70\u6cf0\u7b1e\u80ce\u82d4\u8dc6\u90b0\u98b1\ufa04\u64c7\u6fa4\u6491\u6504\u514e\u5410\u571f\u8a0e\u615f\u6876\ufa05\u75db\u7b52\u7d71\u901a\u5806\u69cc\u817f\u892a\u9000\u9839\u5078\u5957\u59ac\u6295\u900f\u9b2a\u615d\u7279\u95d6\u5761\u5a46\u5df4\u628a\u64ad\u64fa\u6777\u6ce2\u6d3e\u722c\u7436\u7834\u7f77\u82ad\u8ddb\u9817\u5224\u5742\u677f\u7248\u74e3\u8ca9\u8fa6\u9211"],["f8a1","\u962a\u516b\u53ed\u634c\u4f69\u5504\u6096\u6557\u6c9b\u6d7f\u724c\u72fd\u7a17\u8987\u8c9d\u5f6d\u6f8e\u70f9\u81a8\u610e\u4fbf\u504f\u6241\u7247\u7bc7\u7de8\u7fe9\u904d\u97ad\u9a19\u8cb6\u576a\u5e73\u67b0\u840d\u8a55\u5420\u5b16\u5e63\u5ee2\u5f0a\u6583\u80ba\u853d\u9589\u965b\u4f48\u5305\u530d\u530f\u5486\u54fa\u5703\u5e03\u6016\u629b\u62b1\u6355\ufa06\u6ce1\u6d66\u75b1\u7832\u80de\u812f\u82de\u8461\u84b2\u888d\u8912\u900b\u92ea\u98fd\u9b91\u5e45\u66b4\u66dd\u7011\u7206\ufa07\u4ff5\u527d\u5f6a\u6153\u6753\u6a19\u6f02\u74e2\u7968\u8868\u8c79\u98c7\u98c4\u9a43"],["f9a1","\u54c1\u7a1f\u6953\u8af7\u8c4a\u98a8\u99ae\u5f7c\u62ab\u75b2\u76ae\u88ab\u907f\u9642\u5339\u5f3c\u5fc5\u6ccc\u73cc\u7562\u758b\u7b46\u82fe\u999d\u4e4f\u903c\u4e0b\u4f55\u53a6\u590f\u5ec8\u6630\u6cb3\u7455\u8377\u8766\u8cc0\u9050\u971e\u9c15\u58d1\u5b78\u8650\u8b14\u9db4\u5bd2\u6068\u608d\u65f1\u6c57\u6f22\u6fa3\u701a\u7f55\u7ff0\u9591\u9592\u9650\u97d3\u5272\u8f44\u51fd\u542b\u54b8\u5563\u558a\u6abb\u6db5\u7dd8\u8266\u929c\u9677\u9e79\u5408\u54c8\u76d2\u86e4\u95a4\u95d4\u965c\u4ea2\u4f09\u59ee\u5ae6\u5df7\u6052\u6297\u676d\u6841\u6c86\u6e2f\u7f38\u809b\u822a"],["faa1","\ufa08\ufa09\u9805\u4ea5\u5055\u54b3\u5793\u595a\u5b69\u5bb3\u61c8\u6977\u6d77\u7023\u87f9\u89e3\u8a72\u8ae7\u9082\u99ed\u9ab8\u52be\u6838\u5016\u5e78\u674f\u8347\u884c\u4eab\u5411\u56ae\u73e6\u9115\u97ff\u9909\u9957\u9999\u5653\u589f\u865b\u8a31\u61b2\u6af6\u737b\u8ed2\u6b47\u96aa\u9a57\u5955\u7200\u8d6b\u9769\u4fd4\u5cf4\u5f26\u61f8\u665b\u6ceb\u70ab\u7384\u73b9\u73fe\u7729\u774d\u7d43\u7d62\u7e23\u8237\u8852\ufa0a\u8ce2\u9249\u986f\u5b51\u7a74\u8840\u9801\u5acc\u4fe0\u5354\u593e\u5cfd\u633e\u6d79\u72f9\u8105\u8107\u83a2\u92cf\u9830\u4ea8\u5144\u5211\u578b"],["fba1","\u5f62\u6cc2\u6ece\u7005\u7050\u70af\u7192\u73e9\u7469\u834a\u87a2\u8861\u9008\u90a2\u93a3\u99a8\u516e\u5f57\u60e0\u6167\u66b3\u8559\u8e4a\u91af\u978b\u4e4e\u4e92\u547c\u58d5\u58fa\u597d\u5cb5\u5f27\u6236\u6248\u660a\u6667\u6beb\u6d69\u6dcf\u6e56\u6ef8\u6f94\u6fe0\u6fe9\u705d\u72d0\u7425\u745a\u74e0\u7693\u795c\u7cca\u7e1e\u80e1\u82a6\u846b\u84bf\u864e\u865f\u8774\u8b77\u8c6a\u93ac\u9800\u9865\u60d1\u6216\u9177\u5a5a\u660f\u6df7\u6e3e\u743f\u9b42\u5ffd\u60da\u7b0f\u54c4\u5f18\u6c5e\u6cd3\u6d2a\u70d8\u7d05\u8679\u8a0c\u9d3b\u5316\u548c\u5b05\u6a3a\u706b\u7575"],["fca1","\u798d\u79be\u82b1\u83ef\u8a71\u8b41\u8ca8\u9774\ufa0b\u64f4\u652b\u78ba\u78bb\u7a6b\u4e38\u559a\u5950\u5ba6\u5e7b\u60a3\u63db\u6b61\u6665\u6853\u6e19\u7165\u74b0\u7d08\u9084\u9a69\u9c25\u6d3b\u6ed1\u733e\u8c41\u95ca\u51f0\u5e4c\u5fa8\u604d\u60f6\u6130\u614c\u6643\u6644\u69a5\u6cc1\u6e5f\u6ec9\u6f62\u714c\u749c\u7687\u7bc1\u7c27\u8352\u8757\u9051\u968d\u9ec3\u532f\u56de\u5efb\u5f8a\u6062\u6094\u61f7\u6666\u6703\u6a9c\u6dee\u6fae\u7070\u736a\u7e6a\u81be\u8334\u86d4\u8aa8\u8cc4\u5283\u7372\u5b96\u6a6b\u9404\u54ee\u5686\u5b5d\u6548\u6585\u66c9\u689f\u6d8d\u6dc6"],["fda1","\u723b\u80b4\u9175\u9a4d\u4faf\u5019\u539a\u540e\u543c\u5589\u55c5\u5e3f\u5f8c\u673d\u7166\u73dd\u9005\u52db\u52f3\u5864\u58ce\u7104\u718f\u71fb\u85b0\u8a13\u6688\u85a8\u55a7\u6684\u714a\u8431\u5349\u5599\u6bc1\u5f59\u5fbd\u63ee\u6689\u7147\u8af1\u8f1d\u9ebe\u4f11\u643a\u70cb\u7566\u8667\u6064\u8b4e\u9df8\u5147\u51f6\u5308\u6d36\u80f8\u9ed1\u6615\u6b23\u7098\u75d5\u5403\u5c79\u7d07\u8a16\u6b20\u6b3d\u6b46\u5438\u6070\u6d3d\u7fd5\u8208\u50d6\u51de\u559c\u566b\u56cd\u59ec\u5b09\u5e0c\u6199\u6198\u6231\u665e\u66e6\u7199\u71b9\u71ba\u72a7\u79a7\u7a00\u7fb2\u8a70"]]},"5dpn":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getSons=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"wireless",section:"son"}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface"}]]}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e.prototype.saveSons=function(e){var t,n=this.authService.getSid();if(0==e.enable){(t=[]).push([n,"uci","set",{config:"wireless",section:"son",values:{enabled:"0"}}]),t.push([n,"uci","set",{config:"wireless",section:"qcawifi",values:{atf_mode:"0"}}]);for(var r=0,i=Object.keys(e.vaps);r<i.length;r++)t.push([n,"uci","set",{config:"wireless",section:i[r],values:{rrm:"0",wnm:"0",ieee80211r:"0"}}]);t.push([n,"uci","set",{config:"lbd",section:"config",values:{Enable:"0"}}]),t.push([n,"uci","commit",{config:"wireless"}]),t.push([n,"uci","commit",{config:"lbd"}])}else{(t=[]).push([n,"uci","set",{config:"wireless",section:"son",values:{enabled:e.enable,airtimefairness:e.atf,bandsteering:e.bsteer,ieee80211k:e.ieee80211k,ieee80211v:e.ieee80211v,ieee80211r:e.ieee80211r}}]),t.push([n,"uci","set",{config:"wireless",section:"qcawifi",values:{atf_mode:e.atf}}]);for(var o=0,s=Object.keys(e.vaps);o<s.length;o++){var a=s[o],u=0;"1"!=e.vaps[a].dvl_guest&&(u=e.ieee80211r),t.push([n,"uci","set",{config:"wireless",section:a,values:{rrm:e.ieee80211k,wnm:e.ieee80211v,ieee80211r:u}}])}t.push([n,"uci","set",{config:"lbd",section:"config",values:{Enable:e.bsteer}}]),t.push([n,"uci","commit",{config:"wireless"}]),t.push([n,"uci","commit",{config:"lbd"}])}return this.ubusService.call({data:t})},e}())},"5xw/":function(e,t,n){"use strict";n.d(t,"a",function(){return d}),n("H5ub");var r=n("K9Ia"),i=n("gI3B"),o=n("xXU7"),s=n("ny24"),a=n("VnD/"),u=n("15JJ"),c=(n("t2rx"),n("+3se")),l=n("Vx+w"),h=n("ClyA"),f=(n("Obbf"),n("QRwJ"),n("CPDd"),Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}),d=function(){function e(e,t,n,i,o){this.vapsService=e,this.modalService=t,this.addressCheckService=n,this.notification=i,this.pageLoadingService=o,this.deleteInProgress=!1,this.cloneStatusSubject=new r.a,this.fetchVapsTimer=!0,this.ngUnsubscribe=new r.a,this.objectKeys=Object.keys,this.editRowName=void 0,this.newCount=0,this.defaultVLAN="lan",this.saving=!1,this.regExSsid=this.addressCheckService.vapRegExSsid,this.regExPass=this.addressCheckService.vapRegExPass,this.hasRadiusAuth=!1,this.hasRadiusAcct=!1,this.allowNewVaps=!0,this.hasRadio0=Object(c.e)(l.a,"wireless.devices.radio0"),this.hasRadio1=Object(c.e)(l.a,"wireless.devices.radio1"),this.radio0Band=this.hasRadio0&&5==l.a.wireless.devices.radio0.frequency?Object(c.b)("5 GHz"):Object(c.b)("2.4 GHz"),this.radio1Band=this.hasRadio1&&5==l.a.wireless.devices.radio1.frequency?Object(c.b)("5 GHz"):Object(c.b)("2.4 GHz"),this.allowedRadio0VapNumber=this.hasRadio0?l.a.wireless.devices.radio0.maxVapsAllowed:0,this.allowedRadio1VapNumber=this.hasRadio1?l.a.wireless.devices.radio1.maxVapsAllowed:0,this.allowRadio0Vap=this.allowedRadio0VapNumber>0,this.allowRadio1Vap=this.allowedRadio1VapNumber>0,this.keyInputType="password",this.tooltipWarning=!0,this.wpsCloneState="stopped",this.wpsCloneDuration=120,this.wpsCloneStarted=0,this.radioDevice0="radio0",this.radioDevice1="radio1",this.vaps=[],this.orderby="ssid",this.reverse=!1,this.editMode=!1,this.addMode=!1,this.cloneSsidButtonTitle=Object(c.b)("Clone SSID via WPS"),this.encryptionOptions={"psk-mixed+tkip+ccmp":Object(c.b)("WPA/WPA2 Personal"),psk2:Object(c.b)("WPA2 Personal *"),wpa2:Object(c.b)("WPA2 Enterprise"),"psk3-mixed":Object(c.b)("WPA3/WPA2 Personal"),owe:Object(c.b)("Open (OWE)"),none:Object(c.b)("Open")},this.deviceOptions={radio1:this.radio1Band,radio0:this.radio0Band,"radio1+radio0":"2.4 GHz + 5 GHz"},this.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e},this.pageLoadingService.register(["vapsLoaded","radiosLoaded"]),this.radio0Available=Object(c.e)(l.a,"wireless.devices.radio0"),this.radio1Available=Object(c.e)(l.a,"wireless.devices.radio1"),this.dualRadio=this.radio0Available&&this.radio1Available}return e.prototype.ngOnInit=function(){var e=this;this.editMode=!1,this.getRadios(),Object(i.a)(0,l.a.wireless.vaps.refresh).pipe(Object(s.a)(this.ngUnsubscribe),Object(a.a)(function(t){return 1==e.fetchVapsTimer})).subscribe(function(){e.getVaps()})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.cloneStatusSubject.next(!1),this.cloneStatusSubject.complete(),clearTimeout(this.timeout),this.timeout=!1,this.bsModalRef&&this.bsModalRef.hide()},e.prototype.getRadios=function(){var e=this;this.vapsService.getRadios().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("radiosLoaded");var n=Object.values(t).find(function(e){return"wifi0"==e[".name"]}),r=Object.values(t).find(function(e){return"wifi1"==e[".name"]}),i=n&&0==(Number(n.disabled)||0),o=!1;e.dualRadio&&(o=r&&0==(Number(r.disabled)||0)),e.radiosDisabled=!i&&!o,e.radiosDisabled&&(e.cloneSsidButtonTitle=Object(c.b)("Please activate the WiFi network to enable Clone SSID via WPS"))})},e.prototype.getVaps=function(){var e=this;this.vapsService.getVaps().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("vapsLoaded");var n=t[0],r=t[1],i=t[2];Object(c.g)(t[3].wifi0)&&(e.radioDevice0="wifi0",e.radioDevice1="wifi1");var o=t[4];for(var s in n)if(n.hasOwnProperty(s)){if((u=n[s]).device=u.device.replace("wifi","radio"),!Object(c.g)(l.a.wireless.devices[u.device]))continue;u.dynamicVLAN=!!u.dynamic_vlan,u.name="radio1"==u.device?Object(c.b)("2.4 GHz"):Object(c.b)("5 GHz"),delete u.dynamic_vlan,u.maxassoc&&(u.hasMaxassoc=!0,u.maxassoc=Number(u.maxassoc))}for(var a in e.vaps=Object.values(n).map(function(e){return f({},e)}),e.vaps){var u;e.vaps.hasOwnProperty(a)&&delete(u=e.vaps[a]).ieee80211w}for(var h=0;h<e.vaps.length;h++){for(var d=h+1;d<e.vaps.length;d++)if(e.vaps[h].encryption===e.vaps[d].encryption&&e.vaps[h].ssid==e.vaps[d].ssid&&e.vaps[h].key==e.vaps[d].key&&e.vaps[h].name!==e.vaps[d].name){e.vaps[h].names=[e.vaps[h][".name"],e.vaps[d][".name"]],e.vaps[h].devices=[e.vaps[h].device,e.vaps[d].device],e.vaps[h].hasMaxassoc&&e.vaps[h].maxassoc!=e.vaps[d].maxassoc&&(e.vaps[h].maxassoc=e.vaps[h].maxassoc>e.vaps[d].maxassoc?e.vaps[h].maxassoc:e.vaps[d].maxassoc),e.vaps[h][".name"]+="+"+e.vaps[d][".name"],e.vaps[h].device="radio1+radio0",e.vaps.splice(d,1);break}e.vaps[h].deviceName=e.deviceOptions[e.vaps[h].device],e.vaps[h].encryptionName=e.encryptionOptions[e.vaps[h].encryption]}for(var p in e.vaps.forEach(function(e){e.disabled=isNaN(Number(e.disabled))?0:Number(e.disabled),e.isolate=isNaN(Number(e.isolate))?0:Number(e.isolate),e.uapsd=isNaN(Number(e.uapsd))?1:Number(e.uapsd),e.hidden=isNaN(Number(e.hidden))?0:Number(e.hidden),e.ieee80211r=isNaN(Number(e.ieee80211r))?0:Number(e.ieee80211r),e.show11r=Number(o.ieee80211r),e.network||(e.network="lan")}),e.vlansByID=i,i)if(i.hasOwnProperty(p)){var g=i[p];"1"===g.management&&(e.defaultVLAN=g[".name"]),g.id=g[".name"].replace(/^vlan/,"")}e.vlans=Object.values(i).map(function(e){return f({},e)}),e.vlansByID.lan={name:Object(c.b)("No VLAN"),id:0};var b=0,v=0;for(var a in e.vaps.forEach(function(e){"radio0"==e.device?b++:"radio1"==e.device?v++:(b++,v++)}),e.allowRadio0Vap=!(b>=e.allowedRadio0VapNumber),e.allowRadio1Vap=!(v>=e.allowedRadio1VapNumber),e.allowNewVaps=!(b>=e.allowedRadio0VapNumber&&v>=e.allowedRadio1VapNumber),r)if(r.hasOwnProperty(a)){var y=r[a];y.auth_server&&y.auth_port&&y.auth_secret&&(e.hasRadiusAuth=!0,e.authServer=y.auth_server,e.authPort=y.auth_port,e.authSecret=y.auth_secret,y.acct_server&&y.acct_port&&y.acct_secret&&(e.hasRadiusAcct=!0,e.acctServer=y.acct_server,e.acctPort=y.acct_port,e.acctSecret=y.acct_secret))}e.fakeVaps=Object(c.d)(e.vaps),e.fakeVlans=Object(c.d)(e.vlans),e.switchToViewMode()})},e.prototype.remove=function(e){var t=this;this.bsModalRef=this.modalService.show(h.a),this.bsModalRef.content.title=Object(c.b)("Delete SSID?"),this.bsModalRef.content.bodyText=Object(c.b)("Do you really want to remove this SSID?"),this.bsModalRef.content.closeButtonText=Object(c.b)("Cancel"),this.bsModalRef.content.actionButtonText=Object(c.b)("Delete"),this.switchToViewMode(),this.bsModalRef.content.ok=function(){t.deleteInProgress=!0,t.vapsService.remove(e).subscribe(function(){t.getVaps(),t.notification.success(Object(c.b)("You have successfully deleted an SSID"))})}},e.prototype.add=function(){this.fetchVapsTimer=!1,this.addMode=!0,this.markAsDirty();var e=":"+ ++this.newCount,t={ssid:"",new:!0,disabled:0,hidden:0,isolate:0,uapsd:1,device:"radio1+radio0",devices:["radio1","radio0"],".name":e,names:[e,":"+ ++this.newCount],encryption:"psk2",network:this.defaultVLAN,maxassoc:null,ieee80211r:0,rsn_preauth:1};0==this.allowRadio0Vap&&(t.device="radio1"),0==this.allowRadio1Vap&&(t.device="radio0"),this.vaps.push(t),void 0!==this.searchVAPs&&(this.searchVAPs=void 0),this.editRow(t)},e.prototype.currentVap=function(e){this.currentVapObj=e,this.markAsDirty()},e.prototype.save=function(e){var t=this;"wpa2"==e.encryption&&(e.auth_server=this.authServer,e.auth_port=this.authPort,e.auth_secret=this.authSecret,1==this.hasRadiusAcct&&(e.acct_server=this.acctServer,e.acct_port=this.acctPort,e.acct_secret=this.acctSecret)),this.pageLoadingService.register(["vapsLoaded"]),this.vapsService.save(e,this.hasRadiusAcct,this.radioDevice0,this.radioDevice1).subscribe(function(){t.fetchVapsTimer=!0,t.getVaps(),t.notification.success(Object(c.b)("You have successfully configured an SSID"))})},e.prototype.editRow=function(e){this.fetchVapsTimer=!1,this.editRowName=e[".name"],this.editMode=!0,this.maxassocCheck(e)},e.prototype.required=function(e){if(!this.saving)return"psk2"===e.encryption||"psk-mixed+tkip+ccmp"===e.encryption||"psk3-mixed"===e.encryption},e.prototype.hideKey=function(e){if(!this.saving)return"none"===e.encryption||"wpa2"===e.encryption||"owe"===e.encryption},e.prototype.disableRadioOption=function(e,t){var n=this;return!(Object(c.g)(this.fakeVaps)&&(t.new?"radio0"==e?this.allowRadio0Vap:"radio1"==e?this.allowRadio1Vap:this.allowRadio0Vap&&this.allowRadio1Vap:(this.fakeVaps.forEach(function(t){if(t[".name"]==t[".name"])return!("radio1+radio0"==t.device||("radio0"==e?"radio0"===t.device||n.allowRadio0Vap:"radio1"==e?"radio1"===t.device||n.allowRadio1Vap:"radio1+radio0"===t.device||n.allowRadio0Vap||n.allowRadio1Vap))}),1)))},e.prototype.onDynamicVLANToggle=function(e){e.dynamicVLAN||"lan"!==e.network?e.dynamicVLAN&&(e.network="lan"):this.vlans.forEach(function(t){t.management&&(e.network=t[".name"])})},e.prototype.onEncryptionChange=function(e){e.key&&"psk-mixed+tkip+ccmp"!==e.encryption&&"psk2"!==e.encryption&&"psk3-mixed"!==e.encryption&&(e.key=void 0),e.dynamicVLAN&&"wpa2"!==e.encryption&&(e.dynamicVLAN=!1,this.onDynamicVLANToggle(e)),this.keyInputType="password",this.maxassocCheck(e)},e.prototype.clearWarnings=function(){this.maxassocWarning=!1,this.tooltipWarning=!1},e.prototype.showWarnings=function(e){0===e.maxassoc&&(this.tooltipWarning=!0),0!==e.maxassoc&&e.maxassoc>123&&"none"!==e.encryption&&(this.maxassocWarning=!0),0!==e.maxassoc&&e.maxassoc>123&&"none"===e.encryption&&(this.maxassocWarning=!0)},e.prototype.toggleKeyVisibility=function(){this.keyInputType="password"===this.keyInputType?"text":"password"},e.prototype.wps_clone=function(){var e=this;this.vapsService.checkCloneStatus().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){"Ok"==t?(e.wpsCloneState="running",e.elapsed=0,e.wpsCloneStarted=(new Date).getTime(),e.queryWpsCloneStatus(),e.timeout=setTimeout(function(){e.on_wps_clone_stop()},1e3*e.wpsCloneDuration+3e3),Object(o.a)(100).pipe(Object(s.a)(e.cloneStatusSubject),Object(s.a)(e.ngUnsubscribe)).subscribe(function(){e.elapsed=((new Date).getTime()-e.wpsCloneStarted)/1e3})):"restarted"==t&&(e.wpsCloneStarted=(new Date).getTime())})},e.prototype.on_wps_clone_stop=function(){var e=this;this.elapsed=this.wpsCloneDuration,this.cloneStatusSubject.next(!1),clearTimeout(this.timeout),this.timeout=!1,setTimeout(function(){var t="success"==e.wpsCloneState;e.elapsed=0,t&&e.getVaps()},100)},e.prototype.queryWpsCloneStatus=function(){var e=this;this.cloneStatusSubject.next(!0);var t="";Object(o.a)(2e3).pipe(Object(s.a)(this.cloneStatusSubject),Object(u.a)(function(){return e.vapsService.getCloneStatus()}),Object(s.a)(this.ngUnsubscribe)).subscribe(function(n){"running"!=n.state&&("success"==n.state?(e.wpsCloneState="success",t=Object(c.b)("WPS Clone Mode succeeded!"),e.notification.success(t)):"failed"==n.state&&(e.wpsCloneState="failed",t=Object(c.b)("WPS Clone Mode failed: ")+n.reason,e.notification.error(t)),e.on_wps_clone_stop())})},e.prototype.ssidCheck=function(e){var t=this;return Object(c.g)(e.ssid)&&!e.ssid.match(this.regExSsid)?(this.ssid_error=Object(c.b)("Invalid SSID! Please enter between 1 and 32 characters. Allowed special characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"),!1):this.vaps.find(function(t){return t.ssid===e.ssid&&t[".name"]!==e[".name"]})?(this.ssid_error=Object(c.b)("SSID already exists"),setTimeout(function(){t.delos.controls.nameSsid.setErrors({ssid_error:!0})},0),!1):""!=e.ssid&&(this.ssid_error="",void setTimeout(function(){t.delos.controls.nameSsid.setErrors(null)},0))},e.prototype.keySsidCheck=function(e){var t=this;return Object(c.g)(e.key)&&!e.key.match(this.regExPass)?(this.key_ssid_error=Object(c.b)("Invalid Key! Please enter between 8 and 63 characters. Allowed special characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"),!1):""!=e.key&&(this.key_ssid_error="",void setTimeout(function(){t.delos.controls.keySsid.setErrors(null)},0))},e.prototype.maxassocCheck=function(e){var t,n,r={single:{2.4:{condition:{none:{min:0,max:127,msg:Object(c.b)("Invalid range for 2.4 GHz, please enter a value between 0 and 127."),error:!0,warning:!1,invalid:!0,css:"text-error"},encrypted:{min:0,max:123,msg:Object(c.b)("Invalid range for 2.4 GHz, please enter a value between 0 and 123."),error:!0,warning:!1,invalid:!0,css:"text-error"}}},5:{condition:{none:{min:0,max:200,msg:Object(c.b)("Invalid range for 5 GHz, please enter a value between 0 and 200."),error:!0,warning:!1,invalid:!0,css:"text-error"},encrypted:{min:0,max:200,msg:Object(c.b)("Invalid range for 5 GHz, please enter a value between 0 and 200."),error:!0,warning:!1,invalid:!0,css:"text-error"}}}},both:{condition:{none:{warning:{msg:Object(c.b)("Invalid range for 2.4 GHz, please enter a value between 0 and 127."),error:!1,warning:!0,invalid:!1,css:"text-warning"},error:{msg:Object(c.b)("Invalid range for 2.4 GHz, please enter a value between 0 and 127. Invalid range for 5 GHz, please enter a value between 0 and 200."),error:!0,warning:!1,invalid:!0,css:"text-error"}},encrypted:{warning:{msg:Object(c.b)("Invalid range for 2.4 GHz, please enter a value between 0 and 123."),error:!1,warning:!0,invalid:!1,css:"text-warning"},error:{msg:Object(c.b)("Invalid range for 2.4 GHz, please enter a value between 0 and 123. Invalid range for 5 GHz, please enter a value between 0 and 200."),error:!0,warning:!1,invalid:!0,css:"text-error"}}}}};-1!==e.device.indexOf("+")?(n=r.both.condition["none"===e.encryption?"none":"encrypted"],e.maxassoc<0||e.maxassoc>200?t=n.error:e.maxassoc<0||e.maxassoc>127&&"none"===e.encryption?t=n.warning:(e.maxassoc<0||e.maxassoc>123&&"none"!==e.encryption)&&(t=n.warning),t?(this.maxassocError=t.error,this.maxassocWarning=t.warning,this.maxassocMsg=t.msg,this.maxassocClass=t.css):(this.maxassocError=!1,this.maxassocWarning=!1)):e.maxassoc<(t=r.single[l.a.wireless.devices[e.device].frequency].condition["none"===e.encryption?"none":"encrypted"]).min||e.maxassoc>t.max?(this.maxassocError=t.error,this.maxassocWarning=t.warning,this.maxassocMsg=t.msg,this.maxassocClass=t.css):(this.maxassocError=!1,this.maxassocWarning=!1),this.maxassocPlacement=window.screen.width>991?"bottom":"top"},e.prototype.cancel=function(){this.fetchVapsTimer=!0,this.key_ssid_error="",this.switchToViewMode(),this.vaps=Object(c.d)(this.fakeVaps),this.vlans=Object(c.d)(this.fakeVlans)},e.prototype.switchToViewMode=function(){this.keyInputType="password",this.deleteInProgress=!1,this.addMode=!1,this.editMode=!1,this.editRowName=void 0,this.currentVapObj=void 0,this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.trackByIndex=function(e){return e},e}()},"5yF5":function(e,t,n){"use strict";n.d(t,"a",function(){return c}),n("Obbf");var r=n("ClyA"),i=(n("H5ub"),n("UVPe"),n("krbb"),n("+3se")),o=n("ny24"),s=n("psW0"),a=n("K9Ia"),u=n("909l"),c=(n("FW/t"),function(){function e(e,t,n,r,o){this.networkService=e,this.modalService=t,this.notification=n,this.spinner=r,this.compatibilityModeService=o,this.ngUnsubscribe=new a.a,this.objectKeys=Object.keys,this.initialDisabledState=0,this.initialCcoState=0,this.initialMduState=0,this.disabled=0,this.localPass="",this.localPassType="password",this.ccoModes={auto:Object(i.b)("Auto *"),never:Object(i.b)("Never"),always:Object(i.b)("Always")},this.mduModes={disabled:"P2P (peer-to-peer) *",slave:"MDU slave",master:"MDU master"},this.invalidCompatibilityMode=!1}return e.prototype.ngOnInit=function(){this.getNetworkSettings(),this.plcAccessible()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.bsModalRef&&this.bsModalRef.hide()},e.prototype.getNetworkSettings=function(){var e=this;Object(u.a)(this.networkService.getNetworkSettings(),this.compatibilityModeService.getCompatibilityModeInfo()).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){var n=[t[0][0].values,t[0][1]],r=n[1];e.disabled=Number(n[0].disabled),e.initialDisabledState=e.disabled,e.cco=Object(i.g)(r.cco)?r.cco:"auto",e.initialCcoState=e.cco,e.mdu=Object(i.g)(r.mdu)?r.mdu:"disabled",e.initialMduState=e.mdu,e.currentCompatibilityMode=t[1].selectedMode,e.compatibilityModeInfo=t[1],e.spinner.hide()})},e.prototype.onCompatibilityModeChange=function(e){this.currentCompatibilityMode=e,this.invalidCompatibilityMode=void 0===e,this.markAsDirty()},e.prototype.selectedMdu=function(){switch(this.mdu){case"disabled":this.cco="auto";break;case"master":this.cco="always";break;case"slave":this.cco="never"}},e.prototype.save=function(){var e=this;""===this.localPass||this.disabled?this.saveConfig():(this.bsModalRef=this.modalService.show(r.a),this.bsModalRef.content.title=Object(i.b)("Change Password?"),this.bsModalRef.content.bodyText=Object(i.b)("Do you really want to change your Powerline encryption password? This could interrupt your connection."),this.bsModalRef.content.closeButtonText=Object(i.b)("Cancel"),this.bsModalRef.content.actionButtonText=Object(i.b)("Change Password"),this.bsModalRef.content.ok=function(){e.saveConfig()})},e.prototype.saveConfig=function(){var e=this;this.markAsPristine(),this.currentCompatibilityMode!==this.compatibilityModeInfo.selectedMode&&this.compatibilityModeService.setCompatibilityMode(this.currentCompatibilityMode).subscribe(function(){e.notification.success(Object(i.b)("You have successfully updated the compatibility mode setting.")),e.compatibilityModeInfo.selectedMode=e.currentCompatibilityMode}),this.initialDisabledState!=this.disabled?this.networkService.saveNetworkConfig(this.disabled).subscribe(function(){e.notification.success(Object(i.b)("You have successfully updated your Powerline pro network.")),e.changeLocalPassword()}):this.changeLocalPassword()},e.prototype.changeLocalPassword=function(){var e=this;this.disabled||""===this.localPass?this.changeLocalPibSettings():this.plcAccessible().pipe(Object(s.a)(function(){return e.networkService.changeLocalPassword(e.localPass)})).subscribe(function(){e.notification.success(Object(i.b)("You have successfully updated your Powerline encryption password")),e.changeLocalPibSettings()},function(t){return e.catchError()})},e.prototype.changeLocalPibSettings=function(){var e=this,t={};this.cco!=this.initialCcoState&&(t.cco=this.cco),this.mdu!=this.initialMduState&&(t.mdu=this.mdu),0==Object.keys(t).length||this.disabled||this.plcAccessible().pipe(Object(s.a)(function(){return e.networkService.changeLocalPibSettings(t)})).subscribe(function(){e.notification.success(Object(i.b)("You have successfully updated your Powerline network mode"))},function(t){return e.catchError()})},e.prototype.plcAccessible=function(){return this.networkService.plcAccessible()},e.prototype.catchError=function(){this.notification.error(Object(i.b)("Error occured! Please try again!")),this.cancel()},e.prototype.toggleLocalPassVisibility=function(){this.localPassType="password"===this.localPassType?"text":"password"},e.prototype.cancel=function(){this.spinner.hide(),this.localPass="",this.localPassType="password",this.getNetworkSettings(),this.markAsPristine()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e}())},"61DS":function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("K9Ia"),i=n("ny24"),o=(n("Obbf"),n("t2rx"),n("+3se")),s=(n("dcxs"),{});s[Object(o.b)("Europe/Aachen")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Amsterdam")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Andorra")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Athens")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Belgrade")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Berlin")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Bratislava")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Brussels")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Bucharest")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Budapest")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Busingen")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Chisinau")]="EET-2EEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Copenhagen")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Dublin")]="GMT0IST,M3.5.0/1,M10.5.0",s[Object(o.b)("Europe/Gibraltar")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Guernsey")]="GMT0BST,M3.5.0/1,M10.5.0",s[Object(o.b)("Europe/Helsinki")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Isle of Man")]="GMT0BST,M3.5.0/1,M10.5.0",s[Object(o.b)("Europe/Istanbul")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Jersey")]="GMT0BST,M3.5.0/1,M10.5.0",s[Object(o.b)("Europe/Kaliningrad")]="EET-2",s[Object(o.b)("Europe/Kiev")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Lisbon")]="WET0WEST,M3.5.0/1,M10.5.0",s[Object(o.b)("Europe/Ljubljana")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/London")]="GMT0BST,M3.5.0/1,M10.5.0",s[Object(o.b)("Europe/Luxembourg")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Madrid")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Malta")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Mariehamn")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Minsk")]="MSK-3",s[Object(o.b)("Europe/Monaco")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Moscow")]="MSK-3",s[Object(o.b)("Europe/Oslo")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Paris")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Podgorica")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Prague")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Riga")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Rome")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Samara")]="SAMT-4",s[Object(o.b)("Europe/San Marino")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Sarajevo")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Simferopol")]="MSK-3",s[Object(o.b)("Europe/Skopje")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Sofia")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Stockholm")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Tallinn")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Tirane")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Uzhgorod")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Vaduz")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Vatican")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Vienna")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Vilnius")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Volgograd")]="MSK-3",s[Object(o.b)("Europe/Warsaw")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Zagreb")]="CET-1CEST,M3.5.0,M10.5.0/3",s[Object(o.b)("Europe/Zaporozhye")]="EET-2EEST,M3.5.0/3,M10.5.0/4",s[Object(o.b)("Europe/Zurich")]="CET-1CEST,M3.5.0,M10.5.0/3",s["UTC-12"]="UTC+12",s["UTC-11"]="UTC+11",s["UTC-10"]="UTC+10",s["UTC-9"]="UTC+9",s["UTC-8"]="UTC+8",s["UTC-7"]="UTC+7",s["UTC-6"]="UTC+6",s["UTC-5"]="UTC+5",s["UTC-4"]="UTC+4",s["UTC-3:30"]="UTC+3:30",s["UTC-3"]="UTC+3",s["UTC-2"]="UTC+2",s["UTC-1"]="UTC+1",s.UTC="UTC",s["UTC+1"]="UTC-1",s["UTC+2"]="UTC-2",s["UTC+3"]="UTC-3",s["UTC+3:30"]="UTC-3:30",s["UTC+4"]="UTC-4",s["UTC+5"]="UTC-5",s["UTC+5:30"]="UTC-5:30",s["UTC+5:45"]="UTC-5:45",s["UTC+6"]="UTC-6",s["UTC+6:30"]="UTC-6:30",s["UTC+7"]="UTC-7",s["UTC+8"]="UTC-8",s["UTC+9"]="UTC-9",s["UTC+9:30"]="UTC-9:30",s["UTC+10"]="UTC-10",s["UTC+10:30"]="UTC-10:30",s["UTC+11"]="UTC-11",s["UTC+12"]="UTC-12",s["UTC+12"]="UTC-13",s["UTC+14"]="UTC-14";var a=function(){function e(e,t,n){this.managementService=e,this.notificationService=t,this.pageLoadingService=n,this.ngUnsubscribe=new r.a,this.zones=[],this.pageLoadingService.register(["timeZoneViewInit","timeZoneLoaded"])}return e.prototype.ngOnInit=function(){var e=this;this.getTimeZone(),Object.keys(s).forEach(function(t){e.zones.push({id:t,name:t})})},e.prototype.ngAfterViewInit=function(){this.pageLoadingService.ready("timeZoneViewInit")},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.getTimeZone=function(){var e=this;this.managementService.getTimeZone().pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("timeZoneLoaded"),e.zonename=t.zonename||"UTC",e.fakezonename=e.zonename})},e.prototype.save=function(){var e=this;this.managementService.saveTimezone({zonename:this.zonename,timezone:s[this.zonename]}).subscribe(function(){e.notificationService.success(Object(o.b)("Time zone configuration successfully saved.")),e.markAsPristine()})},e.prototype.cancel=function(){this.zonename=this.fakezonename,this.markAsPristine()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}()},"67Y/":function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(e,t){return function(n){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new s(e,t))}}var s=function(){function e(e,t){this.project=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.project,this.thisArg))},e}(),a=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.project=n,i.count=0,i.thisArg=r||i,i}return r.c(t,e),t.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(n){return void this.destination.error(n)}this.destination.next(t)},t}(i.a)},"6aHO":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("MrYD"),i=(n("XD9u"),function(){function e(e,t,n,r,i){this._componentFactoryResolver=e,this._ngZone=t,this._injector=n,this._posService=r,this._applicationRef=i}return e.prototype.createLoader=function(e,t,n){return new r.a(t,n,e,this._injector,this._componentFactoryResolver,this._ngZone,this._applicationRef,this._posService)},e}())},"6ahw":function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("iLxQ"),i=n("DKTb"),o={closed:!0,next:function(e){},error:function(e){if(r.a.useDeprecatedSynchronousErrorHandling)throw e;Object(i.a)(e)},complete:function(){}}},"6blF":function(e,t,n){"use strict";var r=n("FFOo"),i=n("L/V9"),o=n("6ahw"),s=n("xTla"),a=n("y3By"),u=n("iLxQ");n.d(t,"a",function(){return c});var c=function(){function e(e){this._isScalar=!1,e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var s=this.operator,a=function(e,t,n){if(e){if(e instanceof r.a)return e;if(e[i.a])return e[i.a]()}return e||t||n?new r.a(e,t,n):new r.a(o.a)}(e,t,n);if(s?s.call(a,this.source):a.add(this.source||u.a.useDeprecatedSynchronousErrorHandling&&!a.syncErrorThrowable?this._subscribe(a):this._trySubscribe(a)),u.a.useDeprecatedSynchronousErrorHandling&&a.syncErrorThrowable&&(a.syncErrorThrowable=!1,a.syncErrorThrown))throw a.syncErrorValue;return a},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){u.a.useDeprecatedSynchronousErrorHandling&&(e.syncErrorThrown=!0,e.syncErrorValue=t),function(e){for(;e;){var t=e.destination;if(e.closed||e.isStopped)return!1;e=t&&t instanceof r.a?t:null}return!0}(e)?e.error(t):console.warn(t)}},e.prototype.forEach=function(e,t){var n=this;return new(t=l(t))(function(t,r){var i;i=n.subscribe(function(t){try{e(t)}catch(n){r(n),i&&i.unsubscribe()}},r,t)})},e.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)},e.prototype[s.a]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 0===e.length?this:Object(a.b)(e)(this)},e.prototype.toPromise=function(e){var t=this;return new(e=l(e))(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}();function l(e){if(e||(e=u.a.Promise||Promise),!e)throw new Error("no Promise impl found");return e}},"7klA":function(e,t,n){"use strict";var r=n("Jf9v");e.exports={po:{parse:r.parse,createParseStream:r.stream,compile:n("+qTL")},mo:{parse:n("LisU"),compile:n("OEhD")}}},"7z7v":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(e,t){this.appValidateEqual=e,this.reverse=t}return e.prototype.validate=function(e){var t=e.value,n=e.root.get(this.appValidateEqual);return n&&t!==n.value?{appValidateEqual:!1}:(n&&n.errors&&(delete n.errors.appValidateEqual,Object.keys(n.errors).length||n.setErrors(null)),null)},e}()},"8g8A":function(e,t,n){"use strict";function r(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}n.d(t,"a",function(){return i}),r.prototype=Object.create(Error.prototype);var i=r},"8oxB":function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(e){r=s}}();var u,c=[],l=!1,h=-1;function f(){l&&u&&(l=!1,u.length?c=u.concat(c):h=-1,c.length&&d())}function d(){if(!l){var e=a(f);l=!0;for(var t=c.length;t;){for(u=c,c=[];++h<t;)u&&u[h].run();h=-1,t=c.length}u=null,l=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function g(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new p(e,t)),1!==c.length||l||a(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},"909l":function(e,t,n){"use strict";n.d(t,"a",function(){return l});var r=n("mrSG"),i=n("IUTb"),o=n("isby"),s=n("FFOo"),a=n("MGBS"),u=n("zotm"),c=n("En8+");function l(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e[e.length-1];return"function"==typeof n&&e.pop(),Object(i.a)(e,void 0).lift(new h(n))}var h=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new f(e,this.resultSelector))},e}(),f=function(e){function t(t,n,r){void 0===r&&(r=Object.create(null));var i=e.call(this,t)||this;return i.iterators=[],i.active=0,i.resultSelector="function"==typeof n?n:null,i.values=r,i}return r.c(t,e),t.prototype._next=function(e){var t=this.iterators;Object(o.a)(e)?t.push(new p(e)):t.push("function"==typeof e[c.a]?new d(e[c.a]()):new g(this.destination,this,e))},t.prototype._complete=function(){var e=this.iterators,t=e.length;if(this.unsubscribe(),0!==t){this.active=t;for(var n=0;n<t;n++){var r=e[n];r.stillUnsubscribed?this.destination.add(r.subscribe(r,n)):this.active--}}else this.destination.complete()},t.prototype.notifyInactive=function(){this.active--,0===this.active&&this.destination.complete()},t.prototype.checkIterators=function(){for(var e=this.iterators,t=e.length,n=this.destination,r=0;r<t;r++)if("function"==typeof(s=e[r]).hasValue&&!s.hasValue())return;var i=!1,o=[];for(r=0;r<t;r++){var s,a=(s=e[r]).next();if(s.hasCompleted()&&(i=!0),a.done)return void n.complete();o.push(a.value)}this.resultSelector?this._tryresultSelector(o):n.next(o),i&&n.complete()},t.prototype._tryresultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(n){return void this.destination.error(n)}this.destination.next(t)},t}(s.a),d=function(){function e(e){this.iterator=e,this.nextResult=e.next()}return e.prototype.hasValue=function(){return!0},e.prototype.next=function(){var e=this.nextResult;return this.nextResult=this.iterator.next(),e},e.prototype.hasCompleted=function(){var e=this.nextResult;return e&&e.done},e}(),p=function(){function e(e){this.array=e,this.index=0,this.length=0,this.length=e.length}return e.prototype[c.a]=function(){return this},e.prototype.next=function(e){var t=this.index++;return t<this.length?{value:this.array[t],done:!1}:{value:null,done:!0}},e.prototype.hasValue=function(){return this.array.length>this.index},e.prototype.hasCompleted=function(){return this.array.length===this.index},e}(),g=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.parent=n,i.observable=r,i.stillUnsubscribed=!0,i.buffer=[],i.isComplete=!1,i}return r.c(t,e),t.prototype[c.a]=function(){return this},t.prototype.next=function(){var e=this.buffer;return 0===e.length&&this.isComplete?{value:null,done:!0}:{value:e.shift(),done:!1}},t.prototype.hasValue=function(){return this.buffer.length>0},t.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},t.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){this.buffer.push(t),this.parent.checkIterators()},t.prototype.subscribe=function(e,t){return Object(u.a)(this,this.observable,this,t)},t}(a.a)},"9NBF":function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("+NEN"),n("jGGy");var r=n("67Y/"),i=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getSchedules=function(){var e=this;return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"parental_control"}]}).pipe(Object(r.a)(function(e){return e.result[1].values})).pipe(Object(r.a)(function(t){var n=[],r=[];for(var i in t)if("entry"==t[i][".type"]){var o=t[i].starttime,s=t[i].stoptime,a=t[i].daysofweek;t[i].leftPos=e.calcLeftPos(o),t[i].rightPos=e.calcRightPos(s),t[i].duration=e.durationType(a),t[i].daysofweek=e.daysofweekToType(a),t[i].configType="interval","singleday"==t[i].daysofweek?(t[i].weekday=a,t[i].showWeekdays=!0):t[i].showWeekdays=!1,t[i].starthour=e.formatStringToTime(o)[0].toString(),t[i].startmins=e.formatStringToTime(o)[1].toString(),t[i].endhour=e.formatStringToTime(s)[0].toString(),t[i].endmins=e.formatStringToTime(s)[1].toString(),n.push(Object.assign({},t[i]))}else r.push(Object.assign({},t[i]));return[n,r]}))},e.prototype.saveGlobalSettings=function(e,t){return this.ubusService.call({data:[[this.authService.getSid(),"uci","add",{config:"parental_control",section:e,type:"global",name:e,values:{enabled:t.toString()}}],[this.authService.getSid(),"uci","set",{config:"station_quota",section:"global",values:{enabled:t.toString()}}],[this.authService.getSid(),"uci","commit",{config:"parental_control"}],[this.authService.getSid(),"uci","commit",{config:"station_quota"}]]})},e.prototype.delete=function(e,t,n){var r=e[".name"],i=[];return t?(i.push([this.authService.getSid(),"uci","delete",{config:"station_quota",section:r,values:{enabled:+n}}]),i.push([this.authService.getSid(),"uci","commit",{config:"station_quota"}])):(i.push([this.authService.getSid(),"uci","delete",{config:"parental_control",section:r}]),i.push([this.authService.getSid(),"uci","commit",{config:"parental_control"}])),this.ubusService.call({data:i})},e.prototype.saveSchedule=function(e,t,n,r){var i={config:"parental_control",type:"entry",values:{daysofweek:t,starttime:this.formatTimeToString(e.starthour,e.startmins),stoptime:this.formatTimeToString(e.endhour,e.endmins),stations:e.stations,enabled:n}};r||(i.section=e[".section"],i.name=e[".name"]);var o=[[this.authService.getSid(),"uci","add",i],[this.authService.getSid(),"uci","commit",{config:"parental_control"}]];return this.ubusService.call({data:o})},e.prototype.getQuotas=function(){var e=this;return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"station_quota"}]}).pipe(Object(r.a)(function(e){return e.result[1].values})).pipe(Object(r.a)(function(t){var n=[],r=[];for(var i in t)if("entry"==t[i][".type"]){var o=t[i].daysofweek;t[i].time=e.formatStringToTime(t[i].quota).toString(),t[i].duration=e.durationType(o),t[i].daysofweek=e.daysofweekToType(o),t[i].configType="interval","singleday"==t[i].daysofweek?(t[i].weekday=o,t[i].showWeekdays=!0):t[i].showWeekdays=!1,t[i].configType="quota",n.push(Object.assign({},t[i]))}else r.push(Object.assign({},t[i]));return[n,r]}))},e.prototype.getQuotaStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"station_quota","status",{}]}).pipe(Object(r.a)(function(e){return e.result[1]})).pipe(Object(r.a)(function(e){for(var t=new Map,n=0,r=Object.keys(e);n<r.length;n++){var i=r[n],o=e[i].state,s=Math.floor(e[i].quota/1e3),a=new Date;if("EXPIRED"===o)t.set(i,{depleted:!0,running:!1,remaining:0,quota:s,depletionTime:a});else{var u="RUNNING"===o,c=Math.floor(e[i].remaining/1e3);a.setSeconds(a.getSeconds()+c),t.set(i,{depleted:!1,running:u,remaining:c,quota:s,depletionTime:a})}}return t}))},e.prototype.saveQuota=function(e,t,n){var r={config:"station_quota",type:"entry",values:{quota:e.quota,daysofweek:t,station:e.station}};n||(r.type=e[".type"],r.name=e[".name"]);var i=[[this.authService.getSid(),"uci","add",r],[this.authService.getSid(),"uci","commit",{config:"station_quota"}]];return this.ubusService.call({data:i})},e.prototype.formatTimeToString=function(e,t){return e=e.toString(),t=t.toString(),(e=("00"+e).slice(-2))+":"+("00"+t).slice(-2)},e.prototype.validateStartEndTime=function(e,t,n,r){var i="2000-01-01T"+this.formatTimeToString(e,t)+":00Z",o="2000-01-01T"+this.formatTimeToString(n,r)+":00Z";return[Date.parse(i),Date.parse(o)]},e.prototype.formatStringToTime=function(e){return e.split(":").map(function(e){return Number(e)})},e.prototype.calcLeftPos=function(e){var t,n,r;return r=e.split(":"),t=parseInt(r[0],10),n=parseInt(r[1],10),this.starttimePosition(t,n)},e.prototype.calcRightPos=function(e){var t,n,r;return r=e.split(":"),t=parseInt(r[0],10),n=parseInt(r[1],10),this.endtimePosition(t,n)},e.prototype.starttimePosition=function(e,t){var n;return n=.0693*(60*(e*=1)+(t*=1)),Math.round(100*n)/100},e.prototype.endtimePosition=function(e,t){var n;return n=100-.0693*(60*(e=Number(e))+(t=Number(t))),Math.round(100*n)/100},e.prototype.durationType=function(e){return"Saturday Sunday"==e?"weekend":"Monday Tuesday Wednesday Thursday Friday"==e?"business":"Monday Tuesday Wednesday Thursday Friday Saturday Sunday"==e?"daily":e},e.prototype.daysofweekToType=function(e){return"Monday"==e||"Tuesday"==e||"Wednesday"==e||"Thursday"==e||"Friday"==e||"Saturday"==e||"Sunday"==e?"singleday":e},e}()},"9Xeq":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){return function(){}}()},"9Z1F":function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("mrSG"),i=n("MGBS"),o=n("rPjj"),s=n("zotm");function a(e){return function(t){var n=new u(e),r=t.lift(n);return n.caught=r}}var u=function(){function e(e){this.selector=e}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.selector,this.caught))},e}(),c=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.selector=n,i.caught=r,i}return r.c(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=void 0;try{n=this.selector(t,this.caught)}catch(i){return void e.prototype.error.call(this,i)}this._unsubscribeAndRecycle();var r=new o.a(this,void 0,void 0);this.add(r),Object(s.a)(this,n,void 0,void 0,r)}},t}(i.a)},"9nVo":function(e,t,n){"use strict";n.d(t,"a",function(){return u});var r=n("K9Ia"),i=n("gI3B"),o=n("ny24"),s=(n("t2rx"),n("BioP"),n("+3se")),a=n("Vx+w"),u=(n("Obbf"),n("nMVA"),n("+I7i"),function(){function e(e,t,n,i,o){this.lanStatusService=e,this.notification=t,this.portStatusService=n,this.pageLoadingService=i,this.ipService=o,this.ngUnsubscribe=new r.a,this.network={},this.orderby="id*1",this.reverse=!1,this.hasWireless=Object.keys(a.a.wireless.devices).length>0,this.updatingNetwork=!1,this.ports=[],this.vlans=[],this.ipv6GlobalAddr=!1}return e.prototype.ngOnInit=function(){var e=this;this.pageLoadingService.register(["updateVlans","updateEthernet","updateNetwork"]),Object(i.a)(0,1e4).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(){e.updateVlans(),e.updateEthernet(),e.updateNetwork()})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e},e.prototype.updateNetwork=function(){var e=this;this.updatingNetwork||this.lanStatusService.getQueryManagementInterface().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){switch(e.pageLoadingService.ready("updateNetwork"),e.network.ipaddr=t.ipaddr,e.network.lan6=t.lan6,e.ipv6GlobalAddr=!(!e.network.lan6.hasOwnProperty("ipv6-address")||!e.network.lan6["ipv6-address"].length),t.proto){case"dhcp":e.network.proto=Object(s.b)("DHCP");break;case"static":e.network.proto=Object(s.b)("static");break;default:e.network.proto=Object(s.b)("unknown")}e.network.netmask=e.ipService.cidr2bin(t.netmask),e.network.dns=t.dns,e.network.gateway=t.gateway,e.updatingNetwork=!1},function(){e.notification.error(Object(s.b)("Cannot retrieve current network information.")),e.updatingNetwork=!1})},e.prototype.updateEthernet=function(){var e=this;this.portStatusService.update().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("updateEthernet");var n=a.a.network.interfaces;e.ports=t;var r=Object.keys(n).length;e.lanStatusService.updateEthernet(r).subscribe(function(t){for(var r in e.interfaces=[],n)n.hasOwnProperty(r)&&e.interfaces.push({description:n[r].description});for(var i=0;i<t.length;i++)e.interfaces[i].macaddr=t[i]})})},e.prototype.updateVlans=function(){var e=this;this.updatingVlans||(this.updatingVlans=!0,this.lanStatusService.updateVlans(this.hasWireless).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("updateVlans");var n=t[0]||{},r=t[1],i=e.hasWireless&&t[2]||{};e.vlans=Object(s.d)(Object.values(n)),e.vlans.length&&(e.vlans.forEach(function(e){for(var t in e.id=e[".name"].replace(/^vlan/,""),e.members=[],i)if(i.hasOwnProperty(t)){var n,o=i[t];if(n="1"===o.dynamic_vlan,e[".name"]===o.network){var s=o.device.replace("wifi","radio");e.members.push({ssid:o.ssid,frequency:a.a.wireless.devices[s].frequency,dynamic:n})}}for(var t in r)if(r.hasOwnProperty(t)){var u=r[t];if(u[".name"]===e[".name"]){var c=u.ifname;for(var l in a.a.network.interfaces)c.substr(a.a.network.interfaces[l])&&e.members.push({iface:a.a.network.interfaces[l].description})}}}),e.updatingVlans=!1)}))},e}())},"A7o+":function(e,t,n){"use strict";var r=n("mrSG"),i=n("CcnG"),o=n("F/XL"),s=n("p0ib"),a=n("6blF"),u=n("dEwP"),c=n("t9fZ"),l=n("S1nX"),h=n("Qgas");function f(e,t,n){return 0===n?[t]:(e.push(t),e)}var d=n("67Y/"),p=n("15JJ");n.d(t,"g",function(){return I}),n.d(t,"f",function(){return g}),n.d(t,"m",function(){return E}),n.d(t,"l",function(){return x}),n.d(t,"j",function(){return P}),n.d(t,"a",function(){return v}),n.d(t,"h",function(){return C}),n.d(t,"c",function(){return j}),n.d(t,"b",function(){return m}),n.d(t,"e",function(){return w}),n.d(t,"d",function(){return T}),n.d(t,"i",function(){return A}),n.d(t,"k",function(){return k});var g=function(){return function(){}}(),b=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.getTranslation=function(e){return Object(o.a)({})},t}(g),v=function(){return function(){}}(),y=function(){function e(){}return e.prototype.handle=function(e){return e.key},e}(),m=function(){return function(){}}(),w=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.compile=function(e,t){return e},t.prototype.compileTranslations=function(e,t){return e},t}(m);function _(e,t){if(e===t)return!0;if(null===e||null===t)return!1;if(e!=e&&t!=t)return!0;var n,r,i,o=typeof e;if(o==typeof t&&"object"==o){if(!Array.isArray(e)){if(Array.isArray(t))return!1;for(r in i=Object.create(null),e){if(!_(e[r],t[r]))return!1;i[r]=!0}for(r in t)if(!(r in i)&&void 0!==t[r])return!1;return!0}if(!Array.isArray(t))return!1;if((n=e.length)==t.length){for(r=0;r<n;r++)if(!_(e[r],t[r]))return!1;return!0}}return!1}function S(e){return null!=e}function O(e){return e&&"object"==typeof e&&!Array.isArray(e)}var C=function(){return function(){}}(),j=function(e){function t(){var t=e.apply(this,Object(r.g)(arguments))||this;return t.templateMatcher=/{{\s?([^{}\s]*)\s?}}/g,t}return Object(r.c)(t,e),t.prototype.interpolate=function(e,t){return"string"==typeof e?this.interpolateString(e,t):"function"==typeof e?this.interpolateFunction(e,t):e},t.prototype.getValue=function(e,t){var n=t.split(".");t="";do{t+=n.shift(),!S(e)||!S(e[t])||"object"!=typeof e[t]&&n.length?n.length?t+=".":e=void 0:(e=e[t],t="")}while(n.length);return e},t.prototype.interpolateFunction=function(e,t){return e(t)},t.prototype.interpolateString=function(e,t){var n=this;return t?e.replace(this.templateMatcher,function(e,r){var i=n.getValue(t,r);return S(i)?i:e}):e},t}(C),k=function(){return function(){this.currentLang=this.defaultLang,this.translations={},this.langs=[],this.onTranslationChange=new i.m,this.onLangChange=new i.m,this.onDefaultLangChange=new i.m}}(),E=new i.p("USE_STORE"),x=new i.p("USE_DEFAULT_LANG"),P=function(){function e(e,t,n,r,o,s,a){void 0===s&&(s=!0),void 0===a&&(a=!1),this.store=e,this.currentLoader=t,this.compiler=n,this.parser=r,this.missingTranslationHandler=o,this.useDefaultLang=s,this.isolate=a,this.pending=!1,this._onTranslationChange=new i.m,this._onLangChange=new i.m,this._onDefaultLangChange=new i.m,this._langs=[],this._translations={},this._translationRequests={}}return Object.defineProperty(e.prototype,"onTranslationChange",{get:function(){return this.isolate?this._onTranslationChange:this.store.onTranslationChange},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onLangChange",{get:function(){return this.isolate?this._onLangChange:this.store.onLangChange},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"onDefaultLangChange",{get:function(){return this.isolate?this._onDefaultLangChange:this.store.onDefaultLangChange},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"defaultLang",{get:function(){return this.isolate?this._defaultLang:this.store.defaultLang},set:function(e){this.isolate?this._defaultLang=e:this.store.defaultLang=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"currentLang",{get:function(){return this.isolate?this._currentLang:this.store.currentLang},set:function(e){this.isolate?this._currentLang=e:this.store.currentLang=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"langs",{get:function(){return this.isolate?this._langs:this.store.langs},set:function(e){this.isolate?this._langs=e:this.store.langs=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"translations",{get:function(){return this.isolate?this._translations:this.store.translations},set:function(e){this.isolate?this._translations=e:this.store.translations=e},enumerable:!0,configurable:!0}),e.prototype.setDefaultLang=function(e){var t=this;if(e!==this.defaultLang){var n=this.retrieveTranslations(e);void 0!==n?(this.defaultLang||(this.defaultLang=e),n.pipe(Object(c.a)(1)).subscribe(function(n){t.changeDefaultLang(e)})):this.changeDefaultLang(e)}},e.prototype.getDefaultLang=function(){return this.defaultLang},e.prototype.use=function(e){var t=this;if(e===this.currentLang)return Object(o.a)(this.translations[e]);var n=this.retrieveTranslations(e);return void 0!==n?(this.currentLang||(this.currentLang=e),n.pipe(Object(c.a)(1)).subscribe(function(n){t.changeLang(e)}),n):(this.changeLang(e),Object(o.a)(this.translations[e]))},e.prototype.retrieveTranslations=function(e){var t;return void 0===this.translations[e]&&(this._translationRequests[e]=this._translationRequests[e]||this.getTranslation(e),t=this._translationRequests[e]),t},e.prototype.getTranslation=function(e){var t=this;return this.pending=!0,this.loadingTranslations=this.currentLoader.getTranslation(e).pipe(Object(l.a)()),this.loadingTranslations.pipe(Object(c.a)(1)).subscribe(function(n){t.translations[e]=t.compiler.compileTranslations(n,e),t.updateLangs(),t.pending=!1},function(e){t.pending=!1}),this.loadingTranslations},e.prototype.setTranslation=function(e,t,n){void 0===n&&(n=!1),t=this.compiler.compileTranslations(t,e),this.translations[e]=n&&this.translations[e]?function e(t,n){var r=Object.assign({},t);return O(t)&&O(n)&&Object.keys(n).forEach(function(i){var o,s;O(n[i])?i in t?r[i]=e(t[i],n[i]):Object.assign(r,((o={})[i]=n[i],o)):Object.assign(r,((s={})[i]=n[i],s))}),r}(this.translations[e],t):t,this.updateLangs(),this.onTranslationChange.emit({lang:e,translations:this.translations[e]})},e.prototype.getLangs=function(){return this.langs},e.prototype.addLangs=function(e){var t=this;e.forEach(function(e){-1===t.langs.indexOf(e)&&t.langs.push(e)})},e.prototype.updateLangs=function(){this.addLangs(Object.keys(this.translations))},e.prototype.getParsedResult=function(e,t,n){var i,a,u,c,l;if(t instanceof Array){var p={},g=!1;try{for(var b=Object(r.h)(t),v=b.next();!v.done;v=b.next())p[_=v.value]=this.getParsedResult(e,_,n),"function"==typeof p[_].subscribe&&(g=!0)}catch(C){a={error:C}}finally{try{v&&!v.done&&(u=b.return)&&u.call(b)}finally{if(a)throw a.error}}if(g){var y=void 0;try{for(var m=Object(r.h)(t),w=m.next();!w.done;w=m.next()){var _,S="function"==typeof p[_=w.value].subscribe?p[_]:Object(o.a)(p[_]);y=void 0===y?S:Object(s.a)(y,S)}}catch(j){c={error:j}}finally{try{w&&!w.done&&(l=m.return)&&l.call(m)}finally{if(c)throw c.error}}return y.pipe(Object(h.a)(f,[]),Object(d.a)(function(e){var n={};return e.forEach(function(e,r){n[t[r]]=e}),n}))}return p}if(e&&(i=this.parser.interpolate(this.parser.getValue(e,t),n)),void 0===i&&this.defaultLang&&this.defaultLang!==this.currentLang&&this.useDefaultLang&&(i=this.parser.interpolate(this.parser.getValue(this.translations[this.defaultLang],t),n)),void 0===i){var O={key:t,translateService:this};void 0!==n&&(O.interpolateParams=n),i=this.missingTranslationHandler.handle(O)}return void 0!==i?i:t},e.prototype.get=function(e,t){var n=this;if(!S(e)||!e.length)throw new Error('Parameter "key" required');if(this.pending)return a.a.create(function(r){var i=function(e){r.next(e),r.complete()},o=function(e){r.error(e)};n.loadingTranslations.subscribe(function(r){"function"==typeof(r=n.getParsedResult(n.compiler.compileTranslations(r,n.currentLang),e,t)).subscribe?r.subscribe(i,o):i(r)},o)});var r=this.getParsedResult(this.translations[this.currentLang],e,t);return"function"==typeof r.subscribe?r:Object(o.a)(r)},e.prototype.stream=function(e,t){var n=this;if(!S(e)||!e.length)throw new Error('Parameter "key" required');return Object(u.a)(this.get(e,t),this.onLangChange.pipe(Object(p.a)(function(r){var i=n.getParsedResult(r.translations,e,t);return"function"==typeof i.subscribe?i:Object(o.a)(i)})))},e.prototype.instant=function(e,t){if(!S(e)||!e.length)throw new Error('Parameter "key" required');var n=this.getParsedResult(this.translations[this.currentLang],e,t);if(void 0!==n.subscribe){if(e instanceof Array){var r={};return e.forEach(function(t,n){r[e[n]]=e[n]}),r}return e}return n},e.prototype.set=function(e,t,n){void 0===n&&(n=this.currentLang),this.translations[n][e]=this.compiler.compile(t,n),this.updateLangs(),this.onTranslationChange.emit({lang:n,translations:this.translations[n]})},e.prototype.changeLang=function(e){this.currentLang=e,this.onLangChange.emit({lang:e,translations:this.translations[e]}),this.defaultLang||this.changeDefaultLang(e)},e.prototype.changeDefaultLang=function(e){this.defaultLang=e,this.onDefaultLangChange.emit({lang:e,translations:this.translations[e]})},e.prototype.reloadLang=function(e){return this.resetLang(e),this.getTranslation(e)},e.prototype.resetLang=function(e){this._translationRequests[e]=void 0,this.translations[e]=void 0},e.prototype.getBrowserLang=function(){if("undefined"!=typeof window&&void 0!==window.navigator){var e=window.navigator.languages?window.navigator.languages[0]:null;return-1!==(e=e||window.navigator.language||window.navigator.browserLanguage||window.navigator.userLanguage).indexOf("-")&&(e=e.split("-")[0]),-1!==e.indexOf("_")&&(e=e.split("_")[0]),e}},e.prototype.getBrowserCultureLang=function(){if("undefined"!=typeof window&&void 0!==window.navigator)return(window.navigator.languages?window.navigator.languages[0]:null)||window.navigator.language||window.navigator.browserLanguage||window.navigator.userLanguage},e}(),T=function(){function e(e,t,n){var r=this;this.translateService=e,this.element=t,this._ref=n,this.onTranslationChangeSub||(this.onTranslationChangeSub=this.translateService.onTranslationChange.subscribe(function(e){e.lang===r.translateService.currentLang&&r.checkNodes(!0,e.translations)})),this.onLangChangeSub||(this.onLangChangeSub=this.translateService.onLangChange.subscribe(function(e){r.checkNodes(!0,e.translations)})),this.onDefaultLangChangeSub||(this.onDefaultLangChangeSub=this.translateService.onDefaultLangChange.subscribe(function(e){r.checkNodes(!0)}))}return Object.defineProperty(e.prototype,"translate",{set:function(e){e&&(this.key=e,this.checkNodes())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"translateParams",{set:function(e){_(this.currentParams,e)||(this.currentParams=e,this.checkNodes(!0))},enumerable:!0,configurable:!0}),e.prototype.ngAfterViewChecked=function(){this.checkNodes()},e.prototype.checkNodes=function(e,t){void 0===e&&(e=!1);var n=this.element.nativeElement.childNodes;n.length||(this.setContent(this.element.nativeElement,this.key),n=this.element.nativeElement.childNodes);for(var r=0;r<n.length;++r){var i=n[r];if(3===i.nodeType){var o=void 0;if(this.key)o=this.key,e&&(i.lastKey=null);else{var s=this.getContent(i),a=s.trim();a.length&&(s!==i.currentValue?(o=a,i.originalContent=this.getContent(i)):i.originalContent&&e&&(i.lastKey=null,o=i.originalContent.trim()))}this.updateValue(o,i,t)}}},e.prototype.updateValue=function(e,t,n){var r=this;if(e){if(t.lastKey===e&&this.lastParams===this.currentParams)return;this.lastParams=this.currentParams;var i=function(n){n!==e&&(t.lastKey=e),t.originalContent||(t.originalContent=r.getContent(t)),t.currentValue=S(n)?n:t.originalContent||e,r.setContent(t,r.key?t.currentValue:t.originalContent.replace(e,t.currentValue)),r._ref.markForCheck()};if(S(n)){var o=this.translateService.getParsedResult(n,e,this.currentParams);"function"==typeof o.subscribe?o.subscribe(i):i(o)}else this.translateService.get(e,this.currentParams).subscribe(i)}},e.prototype.getContent=function(e){return S(e.textContent)?e.textContent:e.data},e.prototype.setContent=function(e,t){S(e.textContent)?e.textContent=t:e.data=t},e.prototype.ngOnDestroy=function(){this.onLangChangeSub&&this.onLangChangeSub.unsubscribe(),this.onDefaultLangChangeSub&&this.onDefaultLangChangeSub.unsubscribe(),this.onTranslationChangeSub&&this.onTranslationChangeSub.unsubscribe()},e}(),A=function(){function e(e,t){this.translate=e,this._ref=t,this.value=""}return e.prototype.updateValue=function(e,t,n){var r=this,i=function(t){r.value=void 0!==t?t:e,r.lastKey=e,r._ref.markForCheck()};if(n){var o=this.translate.getParsedResult(n,e,t);"function"==typeof o.subscribe?o.subscribe(i):i(o)}this.translate.get(e,t).subscribe(i)},e.prototype.transform=function(e){for(var t,n=this,r=[],i=1;i<arguments.length;i++)r[i-1]=arguments[i];if(!e||0===e.length)return e;if(_(e,this.lastKey)&&_(r,this.lastParams))return this.value;if(S(r[0])&&r.length)if("string"==typeof r[0]&&r[0].length){var o=r[0].replace(/(\')?([a-zA-Z0-9_]+)(\')?(\s)?:/g,'"$2":').replace(/:(\s)?(\')(.*?)(\')/g,':"$3"');try{t=JSON.parse(o)}catch(s){throw new SyntaxError("Wrong parameter in TranslatePipe. Expected a valid Object, received: "+r[0])}}else"object"!=typeof r[0]||Array.isArray(r[0])||(t=r[0]);return this.lastKey=e,this.lastParams=r,this.updateValue(e,t),this._dispose(),this.onTranslationChange||(this.onTranslationChange=this.translate.onTranslationChange.subscribe(function(r){n.lastKey&&r.lang===n.translate.currentLang&&(n.lastKey=null,n.updateValue(e,t,r.translations))})),this.onLangChange||(this.onLangChange=this.translate.onLangChange.subscribe(function(r){n.lastKey&&(n.lastKey=null,n.updateValue(e,t,r.translations))})),this.onDefaultLangChange||(this.onDefaultLangChange=this.translate.onDefaultLangChange.subscribe(function(){n.lastKey&&(n.lastKey=null,n.updateValue(e,t))})),this.value},e.prototype._dispose=function(){void 0!==this.onTranslationChange&&(this.onTranslationChange.unsubscribe(),this.onTranslationChange=void 0),void 0!==this.onLangChange&&(this.onLangChange.unsubscribe(),this.onLangChange=void 0),void 0!==this.onDefaultLangChange&&(this.onDefaultLangChange.unsubscribe(),this.onDefaultLangChange=void 0)},e.prototype.ngOnDestroy=function(){this._dispose()},e}(),I=function(){function e(){}return e.forRoot=function(t){return void 0===t&&(t={}),{ngModule:e,providers:[t.loader||{provide:g,useClass:b},t.compiler||{provide:m,useClass:w},t.parser||{provide:C,useClass:j},t.missingTranslationHandler||{provide:v,useClass:y},k,{provide:E,useValue:t.isolate},{provide:x,useValue:t.useDefaultLang},P]}},e.forChild=function(t){return void 0===t&&(t={}),{ngModule:e,providers:[t.loader||{provide:g,useClass:b},t.compiler||{provide:m,useClass:w},t.parser||{provide:C,useClass:j},t.missingTranslationHandler||{provide:v,useClass:y},{provide:E,useValue:t.isolate},{provide:x,useValue:t.useDefaultLang},P]}},e}()},Aivk:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){return function(){}}()},AuKA:function(e,t,n){"use strict";n.d(t,"b",function(){return c}),n.d(t,"a",function(){return l});var r=n("+3se"),i=n("ub4/"),o=n("JPNY"),s=n("N+XP"),a=n("5yF5"),u=n("JXkt"),c=[{path:"",component:o.a,data:{displayName:Object(r.b)("Powerline"),order:0},canDeactivate:[i.a]},{path:"status",component:u.a,data:{displayName:Object(r.b)("Status"),order:0}},{path:"network",component:a.a,data:{displayName:Object(r.b)("Settings"),order:10},canDeactivate:[i.a]},{path:"devices",component:s.a,data:{displayName:Object(r.b)("Add Devices"),order:20},canDeactivate:[i.a]}],l=function(){return function(){}}()},AxiF:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("mrSG"),i=n("FFOo"),o=n("b7mW"),s=n("G5J1");function a(e){return function(t){return 0===e?Object(s.b)():t.lift(new u(e))}}var u=function(){function e(e){if(this.total=e,this.total<0)throw new o.a}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.total))},e}(),c=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.ring=new Array,r.count=0,r}return r.c(t,e),t.prototype._next=function(e){var t=this.ring,n=this.total,r=this.count++;t.length<n?t.push(e):t[r%n]=e},t.prototype._complete=function(){var e=this.destination,t=this.count;if(t>0)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i<n;i++){var o=t++%n;e.next(r[o])}e.complete()},t}(i.a)},"B/aH":function(e,t,n){"use strict";e.exports=n("rPnE")},BVCH:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("CPDd"),n("+NEN"),n("XzGN");var r=n("+3se"),i=(n("UVPe"),n("jGGy"),n("Obbf"),function(){function e(e,t,n,r,i,o,s){this.servicesService=e,this.spinner=t,this.authService=n,this.ubusService=r,this.translate=i,this.notification=o,this.addressCheckService=s,this.portRegEx=this.addressCheckService.portRegEx,this.alphanumericRegEx=this.addressCheckService.alphanumericRegEx,this.passwordPattern=/^[a-zA-Z0-9,.\/$=+-^@!%~#]{8,130}$/,this.secPasswordPattern=/^[a-zA-Z0-9,.\/$=+-^@!%~#]{8,64}$/,this.authPassType="password",this.securityPassType="password",this.SNMP={},this.orderby="name",this.reverse=!1,this.services=[]}return e.prototype.ngOnInit=function(){this.getServices()},e.prototype.getServices=function(){var e,t,n,i,o=this;this.isEdited=!1,this.editRowName="",this.servicesService.getServices().subscribe(function(s){o.services=[],o.ubusServices=Object(r.d)(s),o.origSNMP=s[1],o.SNMPConf=Object(r.d)(o.origSNMP),o.fakeSNMPConf=Object(r.d)(o.origSNMP),o.assignFields(o.SNMPConf),e=Object(r.g)(o.ubusServices[3].enable)?"1"===o.ubusServices[3].enable?0:1:0,t=Object(r.g)(o.ubusServices[4].log_remote)&&"1"===o.ubusServices[4].log_remote?0:1,n=Object(r.g)(o.ubusServices[4].log_port)?o.ubusServices[4].log_port:"514",i=Object(r.g)(o.ubusServices[4].log_ip)?o.ubusServices[4].log_ip:"",o.services=[{name:"SSDP",disabled:!parseInt(o.ubusServices[0].enable_upnp,10)||0,port:"5000"},o.SNMP,{name:"mDNS",disabled:parseInt(o.ubusServices[2].disabled,10)||0,port:o.ubusServices[2].port||5354,jail:o.ubusServices[2].jail||1,network:o.ubusServices[2].network},{name:"SSH",disabled:e,port:o.ubusServices[3].Port},{name:"Remote syslog",disabled:t,port:n,log_ip:i}],o.services.forEach(function(e){Object.keys(e).length>3&&(e.hasadditional=!0),e.noteditable="SSDP"===e.name||"mDNS"===e.name}),o.spinner.hide()})},e.prototype.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e},e.prototype.editRow=function(e){this.editRowName||(this.fakeService=Object(r.d)(e),this.editRowName=e.name,this.isEdited=!0,void 0!==e.log_ip&&(this.remoteSyslog=!0))},e.prototype.onSNMPVersionChange=function(){"any"===this.SNMP.version&&void 0!==this.name&&(this.SNMP.username=void 0,this.SNMP.authpass=void 0,this.SNMP.secpass=void 0)},e.prototype.toggleAuthPassVisibility=function(){this.authPassType="password"===this.authPassType?"text":"password"},e.prototype.toggleSecurityPassVisibility=function(){this.securityPassType="password"===this.securityPassType?"text":"password"},e.prototype.assignFields=function(e){for(var t in this.SNMP.name="SNMP",this.SNMP.isSnmp=!0,e)if(this.SNMPConf.hasOwnProperty(t)){var n=e[t];n.hasOwnProperty("disabled")&&(this.SNMP.enableSNMP=parseInt(n.disabled,10),this.SNMP.disabled=parseInt(n.disabled,10)),n.hasOwnProperty("version")&&"access"==n[".type"]&&(this.SNMP.version=n.version),n.hasOwnProperty("level")&&(this.SNMP.level=n.level),n.hasOwnProperty("agentaddress")&&(this.SNMP.agentaddress=n.agentaddress.replace(/^UDP:/,""),this.SNMP.port=this.SNMP.agentaddress),n.hasOwnProperty("community")&&(this.SNMP.community=n.community),n.hasOwnProperty("source")&&(this.SNMP.source=n.source),n.hasOwnProperty("name")?this.SNMP.username=n.name:this.SNMP.ver3notset=!0,n.hasOwnProperty("authtype")&&(this.SNMP.authtype=n.authtype),n.hasOwnProperty("authpass")&&(this.SNMP.authpass=n.authpass),n.hasOwnProperty("sectype")&&(this.SNMP.sectype=n.sectype),n.hasOwnProperty("secpass")&&(this.SNMP.secpass=n.secpass)}},e.prototype.save=function(e){"SSDP"===e.name&&this.saveSSDP(e),"SNMP"===e.name&&this.saveSNMP(e),"mDNS"===e.name&&this.saveMDNS(e),"SSH"===e.name&&this.saveSSH(e),e.hasOwnProperty("log_ip")&&this.saveSyslog(e)},e.prototype.saveSSDP=function(e){e.enable_natpmp=this.ubusServices[0].enable_natpmp,e.secure_mode=this.ubusServices[0].secure_mode,e.log_output=this.ubusServices[0].log_output,e.download=this.ubusServices[0].download,e.upload=this.ubusServices[0].upload,e.internal_iface=this.ubusServices[0].internal_iface,e.upnp_lease_file=this.ubusServices[0].upnp_lease_file,e.external_zone=this.ubusServices[0].external_zone,e.hasOwnProperty("hasadditional")&&delete e.hasadditional,e.hasOwnProperty("noteditable")&&delete e.noteditable,this.name=e.name.toUpperCase(),delete e.name,delete e.frozenOrder,e.disabled=e.disabled.toString(),"1"===e.disabled?(e.enable_upnp="0",this.saveAlertFlag="disabled"):(e.enable_upnp="1",this.saveAlertFlag="enabled");var t=[],n=this.authService.getSid();this.ubusService.mergeOptions({calls:t,sid:n,config:"upnpd",section:"config",wanted:e,got:this.ubusServices[0]}),t.push([n,"uci","commit",{config:"upnpd"}]),this.saveService(t)},e.prototype.saveSNMP=function(e){var t=[],n=this.authService.getSid();for(var r in this.name=e.name.toUpperCase(),delete e.name,!0===e.ver3notset&&"usm"===e.version&&(""===e.authpass&&(e.authpass=void 0),""===e.secpass&&(e.secpass=void 0),t.push([n,"uci","set",{config:"snmpd",type:"userv3",values:{name:e.username,authtype:e.authtype,authpass:e.authpass,sectype:e.sectype,secpass:e.secpass}}])),e.level="usm"===e.version?void 0===e.authpass||""===e.authpass?"noauth":void 0===e.secpass||""===e.secpass?"auth":"priv":"noauth",this.SNMPConf)if(this.SNMPConf.hasOwnProperty(r)){var i=this.SNMPConf[r];i.hasOwnProperty("disabled")&&(i.disabled=e.disabled.toString()),i.hasOwnProperty("version")&&"access"==i[".type"]&&(i.version=e.version),i.hasOwnProperty("level")&&(i.level=e.level),i.hasOwnProperty("agentaddress")&&(i.agentaddress="UDP:"+e.port),i.hasOwnProperty("community")&&(i.community=e.community),i.hasOwnProperty("source")&&(i.source=e.source),i.hasOwnProperty("name")&&void 0!==e.username?i.name=e.username:void 0===e.username&&delete i.name,i.hasOwnProperty("authtype")&&(i.authtype=e.authtype),i.hasOwnProperty("authpass")&&void 0!==e.authpass?i.authpass=e.authpass:void 0===e.authpass&&delete i.authpass,i.hasOwnProperty("sectype")&&(i.sectype=e.sectype),i.hasOwnProperty("secpass")&&void 0!==e.secpass?i.secpass=e.secpass:void 0===e.secpass&&delete i.secpass}this.saveAlertFlag="1"===e.disabled?"disabled":"enabled",this.ubusService.mergeConfig({calls:t,sid:n,config:"snmpd",wanted:this.SNMPConf,got:this.origSNMP}),t.push([n,"uci","commit",{config:"snmpd"}]),this.saveService(t)},e.prototype.saveMDNS=function(e){e.hasOwnProperty("hasadditional")&&delete e.hasadditional,e.hasOwnProperty("noteditable")&&delete e.noteditable,this.name=e.name.toUpperCase(),delete e.name,delete e.frozenOrder,e.disabled=e.disabled.toString(),this.saveAlertFlag="1"===e.disabled?"disabled":"enabled";var t=[],n=this.authService.getSid();this.ubusService.mergeOptions({calls:t,sid:n,config:"avahi",section:"config",wanted:e,got:this.ubusServices[2]}),t.push([n,"uci","commit",{config:"avahi"}]),this.saveService(t)},e.prototype.saveSSH=function(e){e.hasOwnProperty("hasadditional")&&delete e.hasadditional,e.hasOwnProperty("noteditable")&&delete e.noteditable,this.name=e.name.toUpperCase(),delete e.name,delete e.frozenOrder,"1"===e.disabled?(e.enable="0",this.saveAlertFlag="disabled"):(e.enable="1",this.saveAlertFlag="enabled"),delete e.disabled,e.Port=e.port,delete e.port;var t=[],n=this.authService.getSid();this.ubusService.mergeOptions({calls:t,sid:n,config:"dropbear",type:"dropbear",section:e[".name"],wanted:e,got:this.ubusServices[3]}),t.push([n,"uci","commit",{config:"dropbear"}]),this.saveService(t)},e.prototype.saveSyslog=function(e){e.hasOwnProperty("hasadditional")&&delete e.hasadditional,e.hasOwnProperty("noteditable")&&delete e.noteditable,delete e.frozenOrder,this.name=e.name,delete e.name,1==e.disabled?(e.log_remote="0",this.saveAlertFlag="disabled"):(e.log_remote="1",this.saveAlertFlag="enabled"),delete e.disabled,e.log_port=e.port,delete e.port;var t=[],n=this.authService.getSid();t.push([n,"uci","set",{config:"system",type:"system",values:e}]),t.push([n,"uci","commit",{config:"system"}]),this.saveService(t)},e.prototype.saveService=function(e){var t=this;this.servicesService.saveService(e).subscribe(function(){var e="disabled"===t.saveAlertFlag?Object(r.b)("disabled"):Object(r.b)("enabled");t.translate.get(t.saveAlertFlag).subscribe(function(t){return e=t}),t.translate.get("You have successfully {enableOrDisableTerm} {name} service.",{enableOrDisableTerm:e,name:t.name}).subscribe(function(e){return t.notification.success(e)}),t.delos.form.markAsPristine(),t.delos.form.updateValueAndValidity(),t.getServices()})},e.prototype.cancel=function(){var e=this,t=this.services.findIndex(function(t){return t.name==e.fakeService.name});this.services[t]=Object(r.d)(this.fakeService),this.isEdited=!1,this.editRowName="",this.delos.form.markAsPristine()},e}())},BioP:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("67Y/"),i=n("psW0"),o=n("Vx+w"),s=(n("+NEN"),n("jGGy"),n("+3se")),a=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.updateWithoutSwitch=function(){var e=[],t=[];for(var n in o.a.network.interfaces)o.a.network.interfaces.hasOwnProperty(n)&&(t.push(n),e.push([this.authService.getSid(),"network.device","status",{name:n}]));return this.ubusService.call({data:e}).pipe(Object(r.a)(function(e){var n,r=[];for(n=0;n<e.result.length;n++){var i={link:!1,speed:0,name:""};0==e.result[n][0]&&(i.link=!!e.result[n][1].hasOwnProperty("carrier")&&e.result[n][1].carrier,i.speed=e.result[n][1].hasOwnProperty("speed")?e.result[n][1].speed.slice(0,-1):0),i.name=o.a.network.interfaces[t[n]].description,r.push(i)}return r}))},e.prototype.updateWithSwitch=function(){var e=this;return this.ubusService.call({data:[this.authService.getSid(),"network.swconfig","list",{}]}).pipe(Object(i.a)(function(t){var n=[];return t.result[1].switches.forEach(function(t){n.push([e.authService.getSid(),"network.swconfig","status",{switch:t}])}),e.ubusService.call({data:n}).pipe(Object(r.a)(function(e){var t=[],n=1;return e.result.map(function(e){Object(s.e)(o.a,"switch.ethernetPorts")&&o.a.switch.ethernetPorts.forEach(function(r){var i=e[1].ports[r];i.name="Port "+n,t.push(i),n++})}),t}))}))},e.prototype.update=function(){return Object(s.g)(o.a.switch)?this.updateWithSwitch():this.updateWithoutSwitch()},e}()},CG3r:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("Sxbm"),n("jGGy"),n("+NEN"),function(){function e(e,t,n){this.authService=e,this.ubusService=t,this.isRetailService=n}return e.prototype.getNetworkDevicesList=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.ghntool","ghninfo",{}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.startPairing=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.ghntool","pushbtn",{action:"pair"}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.unpair=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.ghntool","pushbtn",{action:"unpair"}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.setPassword=function(e){return this.ubusService.call({data:[this.authService.getSid(),"network.ghntool","set_npw",{password:e}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.factoryReset=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.ghntool","factory_reset",{}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.getAdvancedSettings=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.ghntool","get_settings",{}]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e.prototype.updateSettings=function(e){var t={};return e.forceNode&&!this.isRetailService.isDeviceLicenseRetail()&&(t.force_node=e.forceNode),this.ubusService.call({data:[this.authService.getSid(),"network.ghntool","set_settings",t]}).pipe(Object(r.a)(function(e){return e.result[1]}))},e}())},CMBB:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}),o=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getAutoSwitchOffConfig=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"wireless",section:"guest_wifi"}]}).pipe(Object(r.a)(function(e){return e.result[1].values})).pipe(Object(r.a)(function(e){var t={starttime:0,auto_switch_off:"1"==e.auto_switch_off,interval:e.interval};return t.auto_switch_off&&(t.starttime=Number(e.starttime)),t}))},e.prototype.getServerTime=function(){return this.ubusService.call({data:[[this.authService.getSid(),"system","info",{}]]}).pipe(Object(r.a)(function(e){return e.result[0][1].localtime}))},e.prototype.getGuests=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"ap"}}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{dvl_guest:1}}]]})},e.prototype.saveGuestNetworks=function(e,t,n,r){var o=this,s=[];if(Object.values(e).forEach(function(e,r){var i=t;"wifi1"==e.device&&(i=n),s.push([o.authService.getSid(),"uci","set",{config:"wireless",section:""+e[".name"],values:i}])}),r){var a=i({},r);r.auto_switch_off&&r.starttime||(a.starttime=""),s.push([this.authService.getSid(),"uci","set",{config:"wireless",section:"guest_wifi",values:a}])}return s.push([this.authService.getSid(),"uci","commit",{config:"wireless"}]),this.ubusService.call({data:s})},e.prototype.checkInterfaceState=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.wifi","wifi_script_running",{}]})},e}()},CPDd:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("GYWy"),i=function(){function e(){this.forbidden_ips={"0.0.0.0":!0,"255.255.255.255":!0,"10.0.0.0":!0,"10.255.255.255":!0,"127.0.0.0":!0,"127.255.255.255":!0,"172.16.0.0":!0,"172.31.255.255":!0,"192.168.0.0":!0,"192.168.255.255":!0},this.vapRegExSsid=/^[-a-zA-Z0-9 !@#$%^&*)([\]{}|\\,:;'"`~+=._\/?<>]{0,32}$/,this.vapRegExPass=/^([-a-zA-Z0-9 !@#$%^&*)([\]{}|\\,:;'"`~+=._\/?<>]{8,63}|[0-9a-fA-F]{64})$/,this.vapRegExPassphrase=/^([-a-zA-Z0-9 !@#$%^&*)([\]{}|\\,:;'"`~+=._\/?<>]{8,63})$/,this.vapRegExPSK=/^([0-9a-fA-F]{64})$/,this.portRegEx=/^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/,this.alphanumericRegEx=/^[a-zA-Z0-9]{0,24}$/,this.fqdn_re=/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*\.?$/,this.host_re=/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])$/,this.host_short_re=/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,32}[a-zA-Z0-9])$/,this.octet_re=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,this.ip_re=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,this.validNetmasks={"128.0.0.0":1,"192.0.0.0":2,"224.0.0.0":3,"240.0.0.0":4,"248.0.0.0":5,"252.0.0.0":6,"254.0.0.0":7,"255.0.0.0":8,"255.128.0.0":9,"255.192.0.0":10,"255.224.0.0":11,"255.240.0.0":12,"255.248.0.0":13,"255.252.0.0":14,"255.254.0.0":15,"255.255.0.0":16,"255.255.128.0":17,"255.255.192.0":18,"255.255.224.0":19,"255.255.240.0":20,"255.255.248.0":21,"255.255.252.0":22,"255.255.254.0":23,"255.255.255.0":24,"255.255.255.128":25,"255.255.255.192":26,"255.255.255.224":27,"255.255.255.240":28,"255.255.255.248":29,"255.255.255.252":30}}return e.prototype.ipSubnet=function(e){return void 0!==e&&this.networkAddressCheck(e)},e.prototype.networkAddressCheck=function(e){var t=e.split("/"),n=t[0],r=t[1],i=n.split("."),o=[],s=[];if(r)if(-1==r.indexOf(".")&&r>=1&&r<=30)for(var a=4294967295>>>32-r,u=0;u<=3;u++)s[u]=a>>>8*u&255;else if(-1!=r.indexOf(".")){if(!this.validNetmasks.hasOwnProperty(r))return!1;s=r.split(".")}for(u=0;u<i.length;u++)o[u]=i[u]&s[u];return o.join(".")===n&&e},e.prototype.host=function(e){return void 0!==e&&null!=e&&""!=e&&null!==r.toASCII(e).match(this.host_re)},e.prototype.hostShort=function(e){return void 0!==e&&null!=e&&""!=e&&null!==e.match(this.host_short_re)},e.prototype.fqdn=function(e){return void 0!==e&&null!==r.toASCII(e).match(this.fqdn_re)},e.prototype.ip=function(e){if(void 0===e||null==e||""==e)return!1;var t=e.split(".");if(4!==t.length)return!1;for(var n=0;n<4;++n)if(!t[n].match(this.octet_re))return!1;return!(this.forbidden_ips[e]||169===(t=t.map(function(e){return parseInt(e,10)}))[0]&&254===t[1]&&t[2]>=1&&t[3]<=254||100===t[0]&&t[1]>=1&&t[3]<=254)},e.prototype.hostOrIP=function(e){return void 0!==e&&null!=e&&""!=e&&(e.match(this.ip_re)?this.ip(e):this.fqdn(e))},e.prototype.hostIpSubnet=function(e){return void 0!==e&&null!=e&&""!=e&&(e.match(this.host_re)?this.host(e):e.match(this.ip_re)?this.ip(e):this.ipSubnet(e))},e.prototype.toASCII=function(e){return r.toASCII(e)},e.prototype.toUnicode=function(e){return r.toUnicode(e)},e}()},CWBI:function(e,t,n){e.exports=n("sZro")},CcnG:function(e,t,n){"use strict";(function(e){n.d(t,"jb",function(){return Gn}),n.d(t,"kb",function(){return Wn}),n.d(t,"lb",function(){return Kn}),n.d(t,"ib",function(){return rt}),n.d(t,"g",function(){return Jt}),n.d(t,"U",function(){return Gt}),n.d(t,"Y",function(){return Wt}),n.d(t,"S",function(){return Zt}),n.d(t,"y",function(){return Kt}),n.d(t,"c",function(){return nt}),n.d(t,"C",function(){return ot}),n.d(t,"B",function(){return st}),n.d(t,"b",function(){return at}),n.d(t,"d",function(){return et}),n.d(t,"e",function(){return tt}),n.d(t,"W",function(){return _n}),n.d(t,"N",function(){return Vt}),n.d(t,"ab",function(){return Ut}),n.d(t,"u",function(){return qn}),n.d(t,"f",function(){return Zn}),n.d(t,"m",function(){return Pt}),n.d(t,"l",function(){return _e}),n.d(t,"H",function(){return wr}),n.d(t,"I",function(){return mr}),n.d(t,"a",function(){return b}),n.d(t,"n",function(){return y}),n.d(t,"r",function(){return v}),n.d(t,"Q",function(){return fe}),n.d(t,"O",function(){return de}),n.d(t,"T",function(){return c}),n.d(t,"V",function(){return D}),n.d(t,"X",function(){return le}),n.d(t,"q",function(){return K}),n.d(t,"D",function(){return Ue}),n.d(t,"p",function(){return l}),n.d(t,"o",function(){return L}),n.d(t,"A",function(){return U}),n.d(t,"J",function(){return B}),n.d(t,"z",function(){return Tt}),n.d(t,"E",function(){return rn}),n.d(t,"F",function(){return tn}),n.d(t,"G",function(){return nn}),n.d(t,"i",function(){return lt}),n.d(t,"j",function(){return mt}),n.d(t,"k",function(){return on}),n.d(t,"v",function(){return Ot}),n.d(t,"x",function(){return St}),n.d(t,"w",function(){return sn}),n.d(t,"K",function(){return ln}),n.d(t,"L",function(){return un}),n.d(t,"M",function(){return fn}),n.d(t,"P",function(){return dn}),n.d(t,"h",function(){return pn}),n.d(t,"s",function(){return Ln}),n.d(t,"t",function(){return Un}),n.d(t,"R",function(){return Cn}),n.d(t,"Z",function(){return Hn}),n.d(t,"tb",function(){return kn}),n.d(t,"db",function(){return ut}),n.d(t,"bb",function(){return Be}),n.d(t,"cb",function(){return wt}),n.d(t,"eb",function(){return pr}),n.d(t,"fb",function(){return yr}),n.d(t,"gb",function(){return Jn}),n.d(t,"rb",function(){return O}),n.d(t,"wb",function(){return x}),n.d(t,"Hb",function(){return P}),n.d(t,"ub",function(){return Xe}),n.d(t,"vb",function(){return Je}),n.d(t,"hb",function(){return di}),n.d(t,"mb",function(){return Mi}),n.d(t,"nb",function(){return zs}),n.d(t,"ob",function(){return Lr}),n.d(t,"pb",function(){return ro}),n.d(t,"qb",function(){return pi}),n.d(t,"sb",function(){return hi}),n.d(t,"xb",function(){return Ci}),n.d(t,"yb",function(){return Oi}),n.d(t,"zb",function(){return ko}),n.d(t,"Ab",function(){return qi}),n.d(t,"Cb",function(){return io}),n.d(t,"Fb",function(){return oo}),n.d(t,"Bb",function(){return Po}),n.d(t,"Db",function(){return To}),n.d(t,"Eb",function(){return xo}),n.d(t,"Gb",function(){return _o}),n.d(t,"Ib",function(){return Io}),n.d(t,"Jb",function(){return Rr}),n.d(t,"Kb",function(){return Ro});var r=n("mrSG"),i=n("pugT"),o=n("K9Ia"),s=n("6blF"),a=n("p0ib"),u=n("S1nX");function c(e){return{providedIn:e.providedIn||null,factory:e.factory,value:void 0}}var l=function(){function e(e,t){this._desc=e,this.ngMetadataName="InjectionToken",this.ngInjectableDef=void 0!==t?c({providedIn:t.providedIn||"root",factory:t.factory}):void 0}return e.prototype.toString=function(){return"InjectionToken "+this._desc},e}(),h="__parameters__",f="__prop__metadata__";function d(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(e){var i=e.apply(void 0,Object(r.g)(t));for(var o in i)this[o]=i[o]}}}function p(e,t,n){var i=d(t);function o(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(this instanceof o)return i.apply(this,t),this;var s=new((e=o).bind.apply(e,Object(r.g)([void 0],t)));return a.annotation=s,a;function a(e,t,n){for(var r=e.hasOwnProperty(h)?e[h]:Object.defineProperty(e,h,{value:[]})[h];r.length<=n;)r.push(null);return(r[n]=r[n]||[]).push(s),e}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o}function g(e,t,n){var i=d(t);function o(){for(var e,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];if(this instanceof o)return i.apply(this,t),this;var s=new((e=o).bind.apply(e,Object(r.g)([void 0],t)));return function(e,t){var n=e.constructor,r=n.hasOwnProperty(f)?n[f]:Object.defineProperty(n,f,{value:{}})[f];r[t]=r.hasOwnProperty(t)&&r[t]||[],r[t].unshift(s)}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o}var b=new l("AnalyzeForEntryComponents"),v=g("Input",function(e){return{bindingPropertyName:e}}),y=g("HostBinding",function(e){return{hostPropertyName:e}}),m=Function;function w(e){return"function"==typeof e}var _="undefined"!=typeof window&&window,S="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,O=void 0!==e&&e||_||S,C=Promise.resolve(0),j=null;function k(){if(!j){var e=O.Symbol;if(e&&e.iterator)j=e.iterator;else for(var t=Object.getOwnPropertyNames(Map.prototype),n=0;n<t.length;++n){var r=t[n];"entries"!==r&&"size"!==r&&Map.prototype[r]===Map.prototype.entries&&(j=r)}}return j}function E(e){"undefined"==typeof Zone?C.then(function(){e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}function x(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)}function P(e){if("string"==typeof e)return e;if(e instanceof Array)return"["+e.map(P).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return""+e.overriddenName;if(e.name)return""+e.name;var t=e.toString();if(null==t)return""+t;var n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}var T=/^function\s+\S+\(\)\s*{[\s\S]+\.apply\(this,\s*arguments\)/,A=/^class\s+[A-Za-z\d$_]*\s*extends\s+[A-Za-z\d$_]+\s*{/,I=/^class\s+[A-Za-z\d$_]*\s*extends\s+[A-Za-z\d$_]+\s*{[\s\S]*constructor\s*\(/,M=function(){function e(e){this._reflect=e||O.Reflect}return e.prototype.isReflectionEnabled=function(){return!0},e.prototype.factory=function(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return new(e.bind.apply(e,Object(r.g)([void 0],t)))}},e.prototype._zipTypesAndAnnotations=function(e,t){var n;n=void 0===e?new Array(t.length):new Array(e.length);for(var r=0;r<n.length;r++)n[r]=void 0===e?[]:e[r]!=Object?[e[r]]:[],t&&null!=t[r]&&(n[r]=n[r].concat(t[r]));return n},e.prototype._ownParameters=function(e,t){var n=e.toString();if(T.exec(n)||A.exec(n)&&!I.exec(n))return null;if(e.parameters&&e.parameters!==t.parameters)return e.parameters;var r=e.ctorParameters;if(r&&r!==t.ctorParameters){var i="function"==typeof r?r():r,o=i.map(function(e){return e&&e.type}),s=i.map(function(e){return e&&N(e.decorators)});return this._zipTypesAndAnnotations(o,s)}var a=e.hasOwnProperty(h)&&e[h],u=this._reflect&&this._reflect.getOwnMetadata&&this._reflect.getOwnMetadata("design:paramtypes",e);return u||a?this._zipTypesAndAnnotations(u,a):new Array(e.length).fill(void 0)},e.prototype.parameters=function(e){if(!w(e))return[];var t=R(e),n=this._ownParameters(e,t);return n||t===Object||(n=this.parameters(t)),n||[]},e.prototype._ownAnnotations=function(e,t){if(e.annotations&&e.annotations!==t.annotations){var n=e.annotations;return"function"==typeof n&&n.annotations&&(n=n.annotations),n}return e.decorators&&e.decorators!==t.decorators?N(e.decorators):e.hasOwnProperty("__annotations__")?e.__annotations__:null},e.prototype.annotations=function(e){if(!w(e))return[];var t=R(e),n=this._ownAnnotations(e,t)||[];return(t!==Object?this.annotations(t):[]).concat(n)},e.prototype._ownPropMetadata=function(e,t){if(e.propMetadata&&e.propMetadata!==t.propMetadata){var n=e.propMetadata;return"function"==typeof n&&n.propMetadata&&(n=n.propMetadata),n}if(e.propDecorators&&e.propDecorators!==t.propDecorators){var r=e.propDecorators,i={};return Object.keys(r).forEach(function(e){i[e]=N(r[e])}),i}return e.hasOwnProperty(f)?e[f]:null},e.prototype.propMetadata=function(e){if(!w(e))return{};var t=R(e),n={};if(t!==Object){var i=this.propMetadata(t);Object.keys(i).forEach(function(e){n[e]=i[e]})}var o=this._ownPropMetadata(e,t);return o&&Object.keys(o).forEach(function(e){var t=[];n.hasOwnProperty(e)&&t.push.apply(t,Object(r.g)(n[e])),t.push.apply(t,Object(r.g)(o[e])),n[e]=t}),n},e.prototype.hasLifecycleHook=function(e,t){return e instanceof m&&t in e.prototype},e.prototype.guards=function(e){return{}},e.prototype.getter=function(e){return new Function("o","return o."+e+";")},e.prototype.setter=function(e){return new Function("o","v","return o."+e+" = v;")},e.prototype.method=function(e){return new Function("o","args","if (!o."+e+") throw new Error('\""+e+"\" is undefined');\n        return o."+e+".apply(o, args);")},e.prototype.importUri=function(e){return"object"==typeof e&&e.filePath?e.filePath:"./"+P(e)},e.prototype.resourceUri=function(e){return"./"+P(e)},e.prototype.resolveIdentifier=function(e,t,n,r){return r},e.prototype.resolveEnum=function(e,t){return e[t]},e}();function N(e){return e?e.map(function(e){var t=e.type.annotationCls,n=e.args?e.args:[];return new(t.bind.apply(t,Object(r.g)([void 0],n)))}):[]}function R(e){var t=e.prototype?Object.getPrototypeOf(e.prototype):null;return(t?t.constructor:null)||Object}function D(e){return e.__forward_ref__=D,e.toString=function(){return P(this())},e}function V(e){return"function"==typeof e&&e.hasOwnProperty("__forward_ref__")&&e.__forward_ref__===D?e():e}var L=p("Inject",function(e){return{token:e}}),U=p("Optional"),F=p("Self"),B=p("SkipSelf"),z="__source",H=new Object,q=H,G=new l("INJECTOR"),W=function(){function e(){}return e.prototype.get=function(e,t){if(void 0===t&&(t=H),t===H)throw new Error("NullInjectorError: No provider for "+P(e)+"!");return t},e}(),K=function(){function e(){}return e.create=function(e,t){return Array.isArray(e)?new re(e,t):new re(e.providers,e.parent,e.name||null)},e.THROW_IF_NOT_FOUND=H,e.NULL=new W,e.ngInjectableDef=c({providedIn:"any",factory:function(){return le(G)}}),e}(),Z=function(e){return e},Y=[],$=Z,Q=function(){return Array.prototype.slice.call(arguments)},J={},X=ae({provide:String,useValue:J}),ee=K.NULL,te=/\n/gm,ne="\u0275",re=function(){function e(e,t,n){void 0===t&&(t=ee),void 0===n&&(n=null),this.parent=t,this.source=n;var r=this._records=new Map;r.set(K,{token:K,fn:Z,deps:Y,value:this,useNew:!1}),r.set(G,{token:G,fn:Z,deps:Y,value:this,useNew:!1}),function e(t,n){if(n)if((n=V(n))instanceof Array)for(var r=0;r<n.length;r++)e(t,n[r]);else{if("function"==typeof n)throw se("Function/Class not supported",n);if(!n||"object"!=typeof n||!n.provide)throw se("Unexpected provider",n);var i=V(n.provide),o=function(e){var t=function(e){var t=Y,n=e.deps;if(n&&n.length){t=[];for(var r=0;r<n.length;r++){var i=6;if((u=V(n[r]))instanceof Array)for(var o=0,s=u;o<s.length;o++){var a=s[o];a instanceof U||a==U?i|=1:a instanceof B||a==B?i&=-3:a instanceof F||a==F?i&=-5:u=a instanceof L?a.token:V(a)}t.push({token:u,options:i})}}else if(e.useExisting){var u;t=[{token:u=V(e.useExisting),options:6}]}else if(!(n||X in e))throw se("'deps' required",e);return t}(e),n=Z,r=Y,i=!1,o=V(e.provide);if(X in e)r=e.useValue;else if(e.useFactory)n=e.useFactory;else if(e.useExisting);else if(e.useClass)i=!0,n=V(e.useClass);else{if("function"!=typeof o)throw se("StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable",e);i=!0,n=o}return{deps:t,fn:n,useNew:i,value:r}}(n);if(!0===n.multi){var s=t.get(i);if(s){if(s.fn!==Q)throw ie(i)}else t.set(i,s={token:n.provide,deps:[],useNew:!1,fn:Q,value:Y});s.deps.push({token:i=n,options:6})}var a=t.get(i);if(a&&a.fn==Q)throw ie(i);t.set(i,o)}}(r,e)}return e.prototype.get=function(e,t,n){void 0===n&&(n=0);var i=this._records.get(e);try{return function e(t,n,i,o,s,a){try{return function(t,n,i,o,s,a){var u,c;if(!n||4&a)2&a||(c=o.get(t,s,0));else{if((c=n.value)==$)throw Error(ne+"Circular dependency");if(c===Y){n.value=$;var l=n.useNew,h=n.fn,f=n.deps,d=Y;if(f.length){d=[];for(var p=0;p<f.length;p++){var g=f[p],b=g.options,v=2&b?i.get(g.token):void 0;d.push(e(g.token,v,i,v||4&b?o:ee,1&b?null:K.THROW_IF_NOT_FOUND,0))}}n.value=c=l?new((u=h).bind.apply(u,Object(r.g)([void 0],d))):h.apply(void 0,d)}}return c}(t,n,i,o,s,a)}catch(u){throw u instanceof Error||(u=new Error(u)),(u.ngTempTokenPath=u.ngTempTokenPath||[]).unshift(t),n&&n.value==$&&(n.value=Y),u}}(e,i,this._records,this.parent,t,n)}catch(s){var o=s.ngTempTokenPath;throw e[z]&&o.unshift(e[z]),s.message=oe("\n"+s.message,o,this.source),s.ngTokenPath=o,s.ngTempTokenPath=null,s}},e.prototype.toString=function(){var e=[];return this._records.forEach(function(t,n){return e.push(P(n))}),"StaticInjector["+e.join(", ")+"]"},e}();function ie(e){return se("Cannot mix multi providers and regular providers",e)}function oe(e,t,n){void 0===n&&(n=null),e=e&&"\n"===e.charAt(0)&&e.charAt(1)==ne?e.substr(2):e;var r=P(t);if(t instanceof Array)r=t.map(P).join(" -> ");else if("object"==typeof t){var i=[];for(var o in t)if(t.hasOwnProperty(o)){var s=t[o];i.push(o+":"+("string"==typeof s?JSON.stringify(s):P(s)))}r="{"+i.join(", ")+"}"}return"StaticInjectorError"+(n?"("+n+")":"")+"["+r+"]: "+e.replace(te,"\n  ")}function se(e,t){return new Error(oe(e,t))}function ae(e){for(var t in e)if(e[t]===J)return t;throw Error("!prop")}var ue=void 0;function ce(e){var t=ue;return ue=e,t}function le(e,t){if(void 0===t&&(t=0),void 0===ue)throw new Error("inject() must be called from an injection context");if(null===ue){var n=e.ngInjectableDef;if(n&&"root"==n.providedIn)return void 0===n.value?n.value=n.factory():n.value;if(8&t)return null;throw new Error("Injector: NOT_FOUND ["+P(e)+"]")}return ue.get(e,8&t?null:void 0,t)}function he(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];if(Array.isArray(r)){if(0===r.length)throw new Error("Arguments array must have arguments.");for(var i=void 0,o=0,s=0;s<r.length;s++){var a=r[s];a instanceof U||"Optional"===a.ngMetadataName?o|=8:a instanceof B||"SkipSelf"===a.ngMetadataName?o|=4:a instanceof F||"Self"===a.ngMetadataName?o|=2:i=a instanceof L?a.token:a}t.push(le(i,o))}else t.push(le(r))}return t}var fe=function(e){return e[e.Emulated=0]="Emulated",e[e.Native=1]="Native",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",e}({}),de=function(){return function(e){this.full=e,this.major=e.split(".")[0],this.minor=e.split(".")[1],this.patch=e.split(".").slice(2).join(".")}}(),pe=new de("6.1.9"),ge="ngDebugContext",be="ngOriginalError",ve="ngErrorLogger";function ye(e){return e[ge]}function me(e){return e[be]}function we(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e.error.apply(e,Object(r.g)(t))}var _e=function(){function e(){this._console=console}return e.prototype.handleError=function(e){var t=this._findOriginalError(e),n=this._findContext(e),r=function(e){return e[ve]||we}(e);r(this._console,"ERROR",e),t&&r(this._console,"ORIGINAL ERROR",t),n&&r(this._console,"ERROR CONTEXT",n)},e.prototype._findContext=function(e){return e?ye(e)?ye(e):this._findContext(me(e)):null},e.prototype._findOriginalError=function(e){for(var t=me(e);t&&me(t);)t=me(t);return t},e}();function Se(e){return e.length>1?" ("+function(e){for(var t=[],n=0;n<e.length;++n){if(t.indexOf(e[n])>-1)return t.push(e[n]),t;t.push(e[n])}return t}(e.slice().reverse()).map(function(e){return P(e.token)}).join(" -> ")+")":""}function Oe(e,t,n,r){var i=[t],o=n(i),s=r?function(e,t){var n=o+" caused by: "+(t instanceof Error?t.message:t),r=Error(n);return r[be]=t,r}(0,r):Error(o);return s.addKey=Ce,s.keys=i,s.injectors=[e],s.constructResolvingMessage=n,s[be]=r,s}function Ce(e,t){this.injectors.push(e),this.keys.push(t),this.message=this.constructResolvingMessage(this.keys)}function je(e,t){for(var n=[],r=0,i=t.length;r<i;r++){var o=t[r];n.push(o&&0!=o.length?o.map(P).join(" "):"?")}return Error("Cannot resolve all parameters for '"+P(e)+"'("+n.join(", ")+"). Make sure that all the parameters are decorated with Inject or have valid type annotations and that '"+P(e)+"' is decorated with Injectable.")}var ke=function(){function e(e,t){if(this.token=e,this.id=t,!e)throw new Error("Token must be defined!");this.displayName=P(this.token)}return e.get=function(e){return Ee.get(V(e))},Object.defineProperty(e,"numberOfKeys",{get:function(){return Ee.numberOfKeys},enumerable:!0,configurable:!0}),e}(),Ee=new(function(){function e(){this._allKeys=new Map}return e.prototype.get=function(e){if(e instanceof ke)return e;if(this._allKeys.has(e))return this._allKeys.get(e);var t=new ke(e,ke.numberOfKeys);return this._allKeys.set(e,t),t},Object.defineProperty(e.prototype,"numberOfKeys",{get:function(){return this._allKeys.size},enumerable:!0,configurable:!0}),e}()),xe=new(function(){function e(e){this.reflectionCapabilities=e}return e.prototype.updateCapabilities=function(e){this.reflectionCapabilities=e},e.prototype.factory=function(e){return this.reflectionCapabilities.factory(e)},e.prototype.parameters=function(e){return this.reflectionCapabilities.parameters(e)},e.prototype.annotations=function(e){return this.reflectionCapabilities.annotations(e)},e.prototype.propMetadata=function(e){return this.reflectionCapabilities.propMetadata(e)},e.prototype.hasLifecycleHook=function(e,t){return this.reflectionCapabilities.hasLifecycleHook(e,t)},e.prototype.getter=function(e){return this.reflectionCapabilities.getter(e)},e.prototype.setter=function(e){return this.reflectionCapabilities.setter(e)},e.prototype.method=function(e){return this.reflectionCapabilities.method(e)},e.prototype.importUri=function(e){return this.reflectionCapabilities.importUri(e)},e.prototype.resourceUri=function(e){return this.reflectionCapabilities.resourceUri(e)},e.prototype.resolveIdentifier=function(e,t,n,r){return this.reflectionCapabilities.resolveIdentifier(e,t,n,r)},e.prototype.resolveEnum=function(e,t){return this.reflectionCapabilities.resolveEnum(e,t)},e}())(new M),Pe=function(){function e(e,t,n){this.key=e,this.optional=t,this.visibility=n}return e.fromKey=function(t){return new e(t,!1,null)},e}(),Te=[],Ae=function(){return function(e,t,n){this.key=e,this.resolvedFactories=t,this.multiProvider=n,this.resolvedFactory=this.resolvedFactories[0]}}(),Ie=function(){return function(e,t){this.factory=e,this.dependencies=t}}();function Me(e){var t,n;if(e.useClass){var r=V(e.useClass);t=xe.factory(r),n=Re(r)}else e.useExisting?(t=function(e){return e},n=[Pe.fromKey(ke.get(e.useExisting))]):e.useFactory?(t=e.useFactory,n=function(e,t){if(t){var n=t.map(function(e){return[e]});return t.map(function(t){return De(e,t,n)})}return Re(e)}(e.useFactory,e.deps)):(t=function(){return e.useValue},n=Te);return new Ie(t,n)}function Ne(e){return new Ae(ke.get(e.provide),[Me(e)],e.multi||!1)}function Re(e){var t=xe.parameters(e);if(!t)return[];if(t.some(function(e){return null==e}))throw je(e,t);return t.map(function(n){return De(e,n,t)})}function De(e,t,n){var r=null,i=!1;if(!Array.isArray(t))return Ve(t instanceof L?t.token:t,i,null);for(var o=null,s=0;s<t.length;++s){var a=t[s];a instanceof m?r=a:a instanceof L?r=a.token:a instanceof U?i=!0:a instanceof F||a instanceof B?o=a:a instanceof l&&(r=a)}if(null!=(r=V(r)))return Ve(r,i,o);throw je(e,n)}function Ve(e,t,n){return new Pe(ke.get(e),t,n)}var Le=new Object,Ue=function(){function e(){}return e.resolve=function(e){return function(e){var t=function(e,t){for(var n=0;n<e.length;n++){var r=e[n],i=t.get(r.key.id);if(i){if(r.multiProvider!==i.multiProvider)throw Error("Cannot mix multi providers and regular providers, got: "+i+" "+r);if(r.multiProvider)for(var o=0;o<r.resolvedFactories.length;o++)i.resolvedFactories.push(r.resolvedFactories[o]);else t.set(r.key.id,r)}else{var s;s=r.multiProvider?new Ae(r.key,r.resolvedFactories.slice(),r.multiProvider):r,t.set(r.key.id,s)}}return t}(function e(t,n){return t.forEach(function(t){if(t instanceof m)n.push({provide:t,useClass:t});else if(t&&"object"==typeof t&&void 0!==t.provide)n.push(t);else{if(!(t instanceof Array))throw Error("Invalid provider - only instances of Provider and Type are allowed, got: "+t);e(t,n)}}),n}(e,[]).map(Ne),new Map);return Array.from(t.values())}(e)},e.resolveAndCreate=function(t,n){var r=e.resolve(t);return e.fromResolvedProviders(r,n)},e.fromResolvedProviders=function(e,t){return new Fe(e,t)},e}(),Fe=function(){function e(e,t){this._constructionCounter=0,this._providers=e,this.parent=t||null;var n=e.length;this.keyIds=new Array(n),this.objs=new Array(n);for(var r=0;r<n;r++)this.keyIds[r]=e[r].key.id,this.objs[r]=Le}return e.prototype.get=function(e,t){return void 0===t&&(t=q),this._getByKey(ke.get(e),null,t)},e.prototype.resolveAndCreateChild=function(e){var t=Ue.resolve(e);return this.createChildFromResolved(t)},e.prototype.createChildFromResolved=function(t){var n=new e(t);return n.parent=this,n},e.prototype.resolveAndInstantiate=function(e){return this.instantiateResolved(Ue.resolve([e])[0])},e.prototype.instantiateResolved=function(e){return this._instantiateProvider(e)},e.prototype.getProviderAtIndex=function(e){if(e<0||e>=this._providers.length)throw function(e){return Error("Index "+e+" is out-of-bounds.")}(e);return this._providers[e]},e.prototype._new=function(e){if(this._constructionCounter++>this._getMaxNumberOfObjects())throw Oe(this,e.key,function(e){return"Cannot instantiate cyclic dependency!"+Se(e)});return this._instantiateProvider(e)},e.prototype._getMaxNumberOfObjects=function(){return this.objs.length},e.prototype._instantiateProvider=function(e){if(e.multiProvider){for(var t=new Array(e.resolvedFactories.length),n=0;n<e.resolvedFactories.length;++n)t[n]=this._instantiate(e,e.resolvedFactories[n]);return t}return this._instantiate(e,e.resolvedFactories[0])},e.prototype._instantiate=function(e,t){var n,i,o,s=this,a=t.factory;try{n=t.dependencies.map(function(e){return s._getByReflectiveDependency(e)})}catch(u){throw u.addKey&&u.addKey(this,e.key),u}try{i=a.apply(void 0,Object(r.g)(n))}catch(u){throw Oe(this,e.key,function(e){var t=P(e[0].token);return o.message+": Error during instantiation of "+t+"!"+Se(e)+"."},o=u)}return i},e.prototype._getByReflectiveDependency=function(e){return this._getByKey(e.key,e.visibility,e.optional?null:q)},e.prototype._getByKey=function(t,n,r){return t===e.INJECTOR_KEY?this:n instanceof F?this._getByKeySelf(t,r):this._getByKeyDefault(t,r,n)},e.prototype._getObjByKeyId=function(e){for(var t=0;t<this.keyIds.length;t++)if(this.keyIds[t]===e)return this.objs[t]===Le&&(this.objs[t]=this._new(this._providers[t])),this.objs[t];return Le},e.prototype._throwOrNull=function(e,t){if(t!==q)return t;throw function(e,t){return Oe(e,t,function(e){return"No provider for "+P(e[0].token)+"!"+Se(e)})}(this,e)},e.prototype._getByKeySelf=function(e,t){var n=this._getObjByKeyId(e.id);return n!==Le?n:this._throwOrNull(e,t)},e.prototype._getByKeyDefault=function(t,n,r){var i;for(i=r instanceof B?this.parent:this;i instanceof e;){var o=i,s=o._getObjByKeyId(t.id);if(s!==Le)return s;i=o.parent}return null!==i?i.get(t.token,n):this._throwOrNull(t,n)},Object.defineProperty(e.prototype,"displayName",{get:function(){return"ReflectiveInjector(providers: ["+function(e,t){for(var n=new Array(e._providers.length),r=0;r<e._providers.length;++r)n[r]=' "'+e.getProviderAtIndex(r).key.displayName+'" ';return n}(this).join(", ")+"])"},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.displayName},e.INJECTOR_KEY=ke.get(K),e}(),Be=new l("The presence of this token marks an injector as being the root injector."),ze={},He={},qe=[],Ge=void 0;function We(){return void 0===Ge&&(Ge=new W),Ge}var Ke=function(){function e(e,t,n){var r=this;this.parent=n,this.records=new Map,this.injectorDefTypes=new Set,this.onDestroy=new Set,this.destroyed=!1,$e([e],function(e){return r.processInjectorType(e,new Set)}),t&&$e(t,function(e){return r.processProvider(e)}),this.records.set(G,Ye(void 0,this)),this.isRootInjector=this.records.has(Be),this.injectorDefTypes.forEach(function(e){return r.get(e)})}return e.prototype.destroy=function(){this.assertNotDestroyed(),this.destroyed=!0;try{this.onDestroy.forEach(function(e){return e.ngOnDestroy()})}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}},e.prototype.get=function(e,t,n){void 0===t&&(t=q),void 0===n&&(n=0),this.assertNotDestroyed();var r,i=ce(this);try{if(!(4&n)){var o=this.records.get(e);if(void 0===o){var s=("function"==typeof(r=e)||"object"==typeof r&&r instanceof l)&&e.ngInjectableDef||void 0;void 0!==s&&this.injectableDefInScope(s)&&(o=Ze(e),this.records.set(e,o))}if(void 0!==o)return this.hydrate(e,o)}return 2&n&&We(),this.parent.get(e,t)}finally{ce(i)}},e.prototype.assertNotDestroyed=function(){if(this.destroyed)throw new Error("Injector has already been destroyed.")},e.prototype.processInjectorType=function(e,t){var n=this,r=(e=V(e)).ngInjectorDef,i=null==r&&e.ngModule||void 0,o=void 0===i?e:i,s=void 0!==i&&e.providers||qe;if(void 0!==i&&(r=i.ngInjectorDef),null!=r){if(t.has(o))throw new Error("Circular dependency: type "+P(o)+" ends up importing itself.");if(this.injectorDefTypes.add(o),this.records.set(o,Ye(r.factory)),null!=r.imports){t.add(o);try{$e(r.imports,function(e){return n.processInjectorType(e,t)})}finally{t.delete(o)}}null!=r.providers&&$e(r.providers,function(e){return n.processProvider(e)}),$e(s,function(e){return n.processProvider(e)})}},e.prototype.processProvider=function(e){var t=Qe(e=V(e))?e:V(e.provide),n=function(e){var t=V(e),n=ze,i=void 0;if(Qe(e))return Ze(e);if(t=V(e.provide),X in e)n=e.useValue;else if(e.useExisting)i=function(){return le(e.useExisting)};else if(e.useFactory)i=function(){return e.useFactory.apply(e,Object(r.g)(he(e.deps||[])))};else{var o=e.useClass||t;if(!e.deps)return Ze(o);i=function(){return new(o.bind.apply(o,Object(r.g)([void 0],he(e.deps))))}}return Ye(i,n)}(e);if(Qe(e)||!0!==e.multi){var i=this.records.get(t);if(i&&void 0!==i.multi)throw new Error("Mixed multi-provider for "+P(t))}else{var o=this.records.get(t);if(o){if(void 0===o.multi)throw new Error("Mixed multi-provider for "+t+".")}else(o=Ye(void 0,ze,!0)).factory=function(){return he(o.multi)},this.records.set(t,o);t=e,o.multi.push(e)}this.records.set(t,n)},e.prototype.hydrate=function(e,t){if(t.value===He)throw new Error("Circular dep for "+P(e));var n;return t.value===ze&&(t.value=He,t.value=t.factory()),"object"==typeof t.value&&t.value&&"object"==typeof(n=t.value)&&null!=n&&n.ngOnDestroy&&"function"==typeof n.ngOnDestroy&&this.onDestroy.add(t.value),t.value},e.prototype.injectableDefInScope=function(e){return!!e.providedIn&&("string"==typeof e.providedIn?"any"===e.providedIn||"root"===e.providedIn&&this.isRootInjector:this.injectorDefTypes.has(e.providedIn))},e}();function Ze(e){var t=e.ngInjectableDef;if(void 0===t){if(e instanceof l)throw new Error("Token "+P(e)+" is missing an ngInjectableDef definition.");return Ye(function(){return new e})}return Ye(t.factory)}function Ye(e,t,n){return void 0===t&&(t=ze),void 0===n&&(n=!1),{factory:e,value:t,multi:n?[]:void 0}}function $e(e,t){e.forEach(function(e){return Array.isArray(e)?$e(e,t):t(e)})}function Qe(e){return"function"==typeof e}function Je(e){return!!e&&"function"==typeof e.then}function Xe(e){return!!e&&"function"==typeof e.subscribe}var et=new l("Application Initializer"),tt=function(){function e(e){var t=this;this.appInits=e,this.initialized=!1,this.done=!1,this.donePromise=new Promise(function(e,n){t.resolve=e,t.reject=n})}return e.prototype.runInitializers=function(){var e=this;if(!this.initialized){var t=[],n=function(){e.done=!0,e.resolve()};if(this.appInits)for(var r=0;r<this.appInits.length;r++){var i=this.appInits[r]();Je(i)&&t.push(i)}Promise.all(t).then(function(){n()}).catch(function(t){e.reject(t)}),0===t.length&&n(),this.initialized=!0}},e}(),nt=new l("AppId");function rt(){return""+it()+it()+it()}function it(){return String.fromCharCode(97+Math.floor(25*Math.random()))}var ot=new l("Platform Initializer"),st=new l("Platform ID"),at=new l("appBootstrapListener"),ut=function(){function e(){}return e.prototype.log=function(e){console.log(e)},e.prototype.warn=function(e){console.warn(e)},e}();function ct(){throw new Error("Runtime compiler is not loaded")}var lt=function(){function e(){}return e.prototype.compileModuleSync=function(e){throw ct()},e.prototype.compileModuleAsync=function(e){throw ct()},e.prototype.compileModuleAndAllComponentsSync=function(e){throw ct()},e.prototype.compileModuleAndAllComponentsAsync=function(e){throw ct()},e.prototype.clearCache=function(){},e.prototype.clearCacheFor=function(e){},e.prototype.getModuleId=function(e){},e}(),ht=function(){return function(){}}(),ft=function(){return function(){}}(),dt=function(){return function(){}}();function pt(e){var t=Error("No component factory found for "+P(e)+". Did you add it to @NgModule.entryComponents?");return t[vt]=e,t}var gt,bt,vt="ngComponent",yt=function(){function e(){}return e.prototype.resolveComponentFactory=function(e){throw pt(e)},e}(),mt=function(){function e(){}return e.NULL=new yt,e}(),wt=function(){function e(e,t,n){this._parent=t,this._ngModule=n,this._factories=new Map;for(var r=0;r<e.length;r++){var i=e[r];this._factories.set(i.componentType,i)}}return e.prototype.resolveComponentFactory=function(e){var t=this._factories.get(e);if(!t&&this._parent&&(t=this._parent.resolveComponentFactory(e)),!t)throw pt(e);return new _t(t,this._ngModule)},e}(),_t=function(e){function t(t,n){var r=e.call(this)||this;return r.factory=t,r.ngModule=n,r.selector=t.selector,r.componentType=t.componentType,r.ngContentSelectors=t.ngContentSelectors,r.inputs=t.inputs,r.outputs=t.outputs,r}return Object(r.c)(t,e),t.prototype.create=function(e,t,n,r){return this.factory.create(e,t,n,r||this.ngModule)},t}(dt),St=function(){return function(){}}(),Ot=function(){return function(){}}();function Ct(){var e=O.wtf;return!(!e||!(gt=e.trace)||(bt=gt.events,0))}var jt=Ct();function kt(e,t){return null}var Et=jt?function(e,t){return void 0===t&&(t=null),bt.createScope(e,t)}:function(e,t){return kt},xt=jt?function(e,t){return gt.leaveScope(e,t),t}:function(e,t){return t},Pt=function(e){function t(t){void 0===t&&(t=!1);var n=e.call(this)||this;return n.__isAsync=t,n}return Object(r.c)(t,e),t.prototype.emit=function(t){e.prototype.next.call(this,t)},t.prototype.subscribe=function(t,n,r){var o,s=function(e){return null},a=function(){return null};t&&"object"==typeof t?(o=this.__isAsync?function(e){setTimeout(function(){return t.next(e)})}:function(e){t.next(e)},t.error&&(s=this.__isAsync?function(e){setTimeout(function(){return t.error(e)})}:function(e){t.error(e)}),t.complete&&(a=this.__isAsync?function(){setTimeout(function(){return t.complete()})}:function(){t.complete()})):(o=this.__isAsync?function(e){setTimeout(function(){return t(e)})}:function(e){t(e)},n&&(s=this.__isAsync?function(e){setTimeout(function(){return n(e)})}:function(e){n(e)}),r&&(a=this.__isAsync?function(){setTimeout(function(){return r()})}:function(){r()}));var u=e.prototype.subscribe.call(this,o,s,a);return t instanceof i.a&&t.add(u),u},t}(o.a),Tt=function(){function e(e){var t,n=e.enableLongStackTrace,r=void 0!==n&&n;if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Pt(!1),this.onMicrotaskEmpty=new Pt(!1),this.onStable=new Pt(!1),this.onError=new Pt(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched(),this._nesting=0,this._outer=this._inner=Zone.current,Zone.wtfZoneSpec&&(this._inner=this._inner.fork(Zone.wtfZoneSpec)),Zone.TaskTrackingZoneSpec&&(this._inner=this._inner.fork(new Zone.TaskTrackingZoneSpec)),r&&Zone.longStackTraceZoneSpec&&(this._inner=this._inner.fork(Zone.longStackTraceZoneSpec)),(t=this)._inner=t._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:function(e,n,r,i,o,s){try{return Nt(t),e.invokeTask(r,i,o,s)}finally{Rt(t)}},onInvoke:function(e,n,r,i,o,s,a){try{return Nt(t),e.invoke(r,i,o,s,a)}finally{Rt(t)}},onHasTask:function(e,n,r,i){e.hasTask(r,i),n===r&&("microTask"==i.change?(t.hasPendingMicrotasks=i.microTask,Mt(t)):"macroTask"==i.change&&(t.hasPendingMacrotasks=i.macroTask))},onHandleError:function(e,n,r,i){return e.handleError(r,i),t.runOutsideAngular(function(){return t.onError.emit(i)}),!1}})}return e.isInAngularZone=function(){return!0===Zone.current.get("isAngularZone")},e.assertInAngularZone=function(){if(!e.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")},e.assertNotInAngularZone=function(){if(e.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")},e.prototype.run=function(e,t,n){return this._inner.run(e,t,n)},e.prototype.runTask=function(e,t,n,r){var i=this._inner,o=i.scheduleEventTask("NgZoneEvent: "+r,e,It,At,At);try{return i.runTask(o,t,n)}finally{i.cancelTask(o)}},e.prototype.runGuarded=function(e,t,n){return this._inner.runGuarded(e,t,n)},e.prototype.runOutsideAngular=function(e){return this._outer.run(e)},e}();function At(){}var It={};function Mt(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(function(){return e.onStable.emit(null)})}finally{e.isStable=!0}}}function Nt(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Rt(e){e._nesting--,Mt(e)}var Dt=function(){function e(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Pt,this.onMicrotaskEmpty=new Pt,this.onStable=new Pt,this.onError=new Pt}return e.prototype.run=function(e){return e()},e.prototype.runGuarded=function(e){return e()},e.prototype.runOutsideAngular=function(e){return e()},e.prototype.runTask=function(e){return e()},e}(),Vt=function(){function e(e){var t=this;this._ngZone=e,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this._watchAngularEvents(),e.run(function(){t.taskTrackingZone=Zone.current.get("TaskTrackingZone")})}return e.prototype._watchAngularEvents=function(){var e=this;this._ngZone.onUnstable.subscribe({next:function(){e._didWork=!0,e._isZoneStable=!1}}),this._ngZone.runOutsideAngular(function(){e._ngZone.onStable.subscribe({next:function(){Tt.assertNotInAngularZone(),E(function(){e._isZoneStable=!0,e._runCallbacksIfReady()})}})})},e.prototype.increasePendingRequestCount=function(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount},e.prototype.decreasePendingRequestCount=function(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount},e.prototype.isStable=function(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks},e.prototype._runCallbacksIfReady=function(){var e=this;if(this.isStable())E(function(){for(;0!==e._callbacks.length;){var t=e._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb(e._didWork)}e._didWork=!1});else{var t=this.getPendingTasks();this._callbacks=this._callbacks.filter(function(e){return!e.updateCb||!e.updateCb(t)||(clearTimeout(e.timeoutId),!1)}),this._didWork=!0}},e.prototype.getPendingTasks=function(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(function(e){return{source:e.source,isPeriodic:e.data.isPeriodic,delay:e.data.delay,creationLocation:e.creationLocation,xhr:e.data.target}}):[]},e.prototype.addCallback=function(e,t,n){var r=this,i=-1;t&&t>0&&(i=setTimeout(function(){r._callbacks=r._callbacks.filter(function(e){return e.timeoutId!==i}),e(r._didWork,r.getPendingTasks())},t)),this._callbacks.push({doneCb:e,timeoutId:i,updateCb:n})},e.prototype.whenStable=function(e,t,n){if(n&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/dist/task-tracking.js" loaded?');this.addCallback(e,t,n),this._runCallbacksIfReady()},e.prototype.getPendingRequestCount=function(){return this._pendingCount},e.prototype.findProviders=function(e,t,n){return[]},e}(),Lt=function(){function e(){this._applications=new Map,Bt.addToWindow(this)}return e.prototype.registerApplication=function(e,t){this._applications.set(e,t)},e.prototype.unregisterApplication=function(e){this._applications.delete(e)},e.prototype.unregisterAllApplications=function(){this._applications.clear()},e.prototype.getTestability=function(e){return this._applications.get(e)||null},e.prototype.getAllTestabilities=function(){return Array.from(this._applications.values())},e.prototype.getAllRootElements=function(){return Array.from(this._applications.keys())},e.prototype.findTestabilityInTree=function(e,t){return void 0===t&&(t=!0),Bt.findTestabilityInTree(this,e,t)},Object(r.b)([Object(r.d)("design:paramtypes",[])],e)}();function Ut(e){Bt=e}var Ft,Bt=new(function(){function e(){}return e.prototype.addToWindow=function(e){},e.prototype.findTestabilityInTree=function(e,t,n){return null},e}()),zt=!0,Ht=!1,qt=new l("AllowMultipleToken");function Gt(){if(Ht)throw new Error("Cannot enable prod mode after platform setup.");zt=!1}function Wt(){return Ht=!0,zt}var Kt=function(){return function(e,t){this.name=e,this.token=t}}();function Zt(e,t,n){void 0===n&&(n=[]);var r="Platform: "+t,i=new l(r);return function(t){void 0===t&&(t=[]);var o=Yt();if(!o||o.injector.get(qt,!1))if(e)e(n.concat(t).concat({provide:i,useValue:!0}));else{var s=n.concat(t).concat({provide:i,useValue:!0});!function(e){if(Ft&&!Ft.destroyed&&!Ft.injector.get(qt,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");Ft=e.get($t);var t=e.get(ot,null);t&&t.forEach(function(e){return e()})}(K.create({providers:s,name:r}))}return function(e){var t=Yt();if(!t)throw new Error("No platform exists!");if(!t.injector.get(e,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return t}(i)}}function Yt(){return Ft&&!Ft.destroyed?Ft:null}var $t=function(){function e(e){this._injector=e,this._modules=[],this._destroyListeners=[],this._destroyed=!1}return e.prototype.bootstrapModuleFactory=function(e,t){var n,r=this,i="noop"===(n=t?t.ngZone:void 0)?new Dt:("zone.js"===n?void 0:n)||new Tt({enableLongStackTrace:Wt()}),o=[{provide:Tt,useValue:i}];return i.run(function(){var t=K.create({providers:o,parent:r.injector,name:e.moduleType.name}),n=e.create(t),s=n.injector.get(_e,null);if(!s)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return n.onDestroy(function(){return Xt(r._modules,n)}),i.runOutsideAngular(function(){return i.onError.subscribe({next:function(e){s.handleError(e)}})}),function(e,t,i){try{var o=((s=n.injector.get(tt)).runInitializers(),s.donePromise.then(function(){return r._moduleDoBootstrap(n),n}));return Je(o)?o.catch(function(n){throw t.runOutsideAngular(function(){return e.handleError(n)}),n}):o}catch(a){throw t.runOutsideAngular(function(){return e.handleError(a)}),a}var s}(s,i)})},e.prototype.bootstrapModule=function(e,t){var n=this;void 0===t&&(t=[]);var r=this.injector.get(ht),i=Qt({},t);return r.createCompiler([i]).compileModuleAsync(e).then(function(e){return n.bootstrapModuleFactory(e,i)})},e.prototype._moduleDoBootstrap=function(e){var t=e.injector.get(Jt);if(e._bootstrapComponents.length>0)e._bootstrapComponents.forEach(function(e){return t.bootstrap(e)});else{if(!e.instance.ngDoBootstrap)throw new Error("The module "+P(e.instance.constructor)+' was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.');e.instance.ngDoBootstrap(t)}this._modules.push(e)},e.prototype.onDestroy=function(e){this._destroyListeners.push(e)},Object.defineProperty(e.prototype,"injector",{get:function(){return this._injector},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(function(e){return e.destroy()}),this._destroyListeners.forEach(function(e){return e()}),this._destroyed=!0},Object.defineProperty(e.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),e}();function Qt(e,t){return Array.isArray(t)?t.reduce(Qt,e):Object(r.a)({},e,t)}var Jt=function(){function e(e,t,n,r,i,o){var c=this;this._zone=e,this._console=t,this._injector=n,this._exceptionHandler=r,this._componentFactoryResolver=i,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=Wt(),this._zone.onMicrotaskEmpty.subscribe({next:function(){c._zone.run(function(){c.tick()})}});var l=new s.a(function(e){c._stable=c._zone.isStable&&!c._zone.hasPendingMacrotasks&&!c._zone.hasPendingMicrotasks,c._zone.runOutsideAngular(function(){e.next(c._stable),e.complete()})}),h=new s.a(function(e){var t;c._zone.runOutsideAngular(function(){t=c._zone.onStable.subscribe(function(){Tt.assertNotInAngularZone(),E(function(){c._stable||c._zone.hasPendingMacrotasks||c._zone.hasPendingMicrotasks||(c._stable=!0,e.next(!0))})})});var n=c._zone.onUnstable.subscribe(function(){Tt.assertInAngularZone(),c._stable&&(c._stable=!1,c._zone.runOutsideAngular(function(){e.next(!1)}))});return function(){t.unsubscribe(),n.unsubscribe()}});this.isStable=Object(a.a)(l,h.pipe(Object(u.a)()))}var t;return t=e,e.prototype.bootstrap=function(e,t){var n,r=this;if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");n=e instanceof dt?e:this._componentFactoryResolver.resolveComponentFactory(e),this.componentTypes.push(n.componentType);var i=n instanceof _t?null:this._injector.get(St),o=n.create(K.NULL,[],t||n.selector,i);o.onDestroy(function(){r._unloadComponent(o)});var s=o.injector.get(Vt,null);return s&&o.injector.get(Lt).registerApplication(o.location.nativeElement,s),this._loadComponent(o),Wt()&&this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode."),o},e.prototype.tick=function(){var e=this;if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");var n=t._tickScope();try{this._runningTick=!0,this._views.forEach(function(e){return e.detectChanges()}),this._enforceNoNewChanges&&this._views.forEach(function(e){return e.checkNoChanges()})}catch(r){this._zone.runOutsideAngular(function(){return e._exceptionHandler.handleError(r)})}finally{this._runningTick=!1,xt(n)}},e.prototype.attachView=function(e){var t=e;this._views.push(t),t.attachToAppRef(this)},e.prototype.detachView=function(e){var t=e;Xt(this._views,t),t.detachFromAppRef()},e.prototype._loadComponent=function(e){this.attachView(e.hostView),this.tick(),this.components.push(e),this._injector.get(at,[]).concat(this._bootstrapListeners).forEach(function(t){return t(e)})},e.prototype._unloadComponent=function(e){this.detachView(e.hostView),Xt(this.components,e)},e.prototype.ngOnDestroy=function(){this._views.slice().forEach(function(e){return e.destroy()})},Object.defineProperty(e.prototype,"viewCount",{get:function(){return this._views.length},enumerable:!0,configurable:!0}),e._tickScope=Et("ApplicationRef#tick()"),e}();function Xt(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)}var en=function(){return function(){}}(),tn=function(){return function(){}}(),nn=function(e){return e[e.Important=1]="Important",e[e.DashCase=2]="DashCase",e}({}),rn=function(){return function(){}}(),on=function(){return function(e){this.nativeElement=e}}(),sn=function(){return function(){}}(),an=function(){function e(){this.dirty=!0,this._results=[],this.changes=new Pt,this.length=0}return e.prototype.map=function(e){return this._results.map(e)},e.prototype.filter=function(e){return this._results.filter(e)},e.prototype.find=function(e){return this._results.find(e)},e.prototype.reduce=function(e,t){return this._results.reduce(e,t)},e.prototype.forEach=function(e){this._results.forEach(e)},e.prototype.some=function(e){return this._results.some(e)},e.prototype.toArray=function(){return this._results.slice()},e.prototype[k()]=function(){return this._results[k()]()},e.prototype.toString=function(){return this._results.toString()},e.prototype.reset=function(e){this._results=function e(t){return t.reduce(function(t,n){var r=Array.isArray(n)?e(n):n;return t.concat(r)},[])}(e),this.dirty=!1,this.length=this._results.length,this.last=this._results[this.length-1],this.first=this._results[0]},e.prototype.notifyOnChanges=function(){this.changes.emit(this)},e.prototype.setDirty=function(){this.dirty=!0},e.prototype.destroy=function(){this.changes.complete(),this.changes.unsubscribe()},e}(),un=function(){return function(){}}(),cn={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"},ln=function(){function e(e,t){this._compiler=e,this._config=t||cn}return e.prototype.load=function(e){return this._compiler instanceof lt?this.loadFactory(e):this.loadAndCompile(e)},e.prototype.loadAndCompile=function(e){var t=this,i=Object(r.f)(e.split("#"),2),o=i[0],s=i[1];return void 0===s&&(s="default"),n("crnd")(o).then(function(e){return e[s]}).then(function(e){return hn(e,o,s)}).then(function(e){return t._compiler.compileModuleAsync(e)})},e.prototype.loadFactory=function(e){var t=Object(r.f)(e.split("#"),2),i=t[0],o=t[1],s="NgFactory";return void 0===o&&(o="default",s=""),n("crnd")(this._config.factoryPathPrefix+i+this._config.factoryPathSuffix).then(function(e){return e[o+s]}).then(function(e){return hn(e,i,o)})},e}();function hn(e,t,n){if(!e)throw new Error("Cannot find '"+n+"' in '"+t+"'");return e}var fn=function(){return function(){}}(),dn=function(){return function(){}}(),pn=function(){return function(){}}(),gn=function(){return function(e,t){this.name=e,this.callback=t}}(),bn=function(){function e(e,t,n){this._debugContext=n,this.nativeNode=e,t&&t instanceof vn?t.addChild(this):this.parent=null,this.listeners=[]}return Object.defineProperty(e.prototype,"injector",{get:function(){return this._debugContext.injector},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentInstance",{get:function(){return this._debugContext.component},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._debugContext.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"references",{get:function(){return this._debugContext.references},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"providerTokens",{get:function(){return this._debugContext.providerTokens},enumerable:!0,configurable:!0}),e}(),vn=function(e){function t(t,n,r){var i=e.call(this,t,n,r)||this;return i.properties={},i.attributes={},i.classes={},i.styles={},i.childNodes=[],i.nativeElement=t,i}return Object(r.c)(t,e),t.prototype.addChild=function(e){e&&(this.childNodes.push(e),e.parent=this)},t.prototype.removeChild=function(e){var t=this.childNodes.indexOf(e);-1!==t&&(e.parent=null,this.childNodes.splice(t,1))},t.prototype.insertChildrenAfter=function(e,t){var n,i=this,o=this.childNodes.indexOf(e);-1!==o&&((n=this.childNodes).splice.apply(n,Object(r.g)([o+1,0],t)),t.forEach(function(e){e.parent&&e.parent.removeChild(e),e.parent=i}))},t.prototype.insertBefore=function(e,t){var n=this.childNodes.indexOf(e);-1===n?this.addChild(t):(t.parent&&t.parent.removeChild(t),t.parent=this,this.childNodes.splice(n,0,t))},t.prototype.query=function(e){return this.queryAll(e)[0]||null},t.prototype.queryAll=function(e){var t=[];return yn(this,e,t),t},t.prototype.queryAllNodes=function(e){var t=[];return mn(this,e,t),t},Object.defineProperty(t.prototype,"children",{get:function(){return this.childNodes.filter(function(e){return e instanceof t})},enumerable:!0,configurable:!0}),t.prototype.triggerEventHandler=function(e,t){this.listeners.forEach(function(n){n.name==e&&n.callback(t)})},t}(bn);function yn(e,t,n){e.childNodes.forEach(function(e){e instanceof vn&&(t(e)&&n.push(e),yn(e,t,n))})}function mn(e,t,n){e instanceof vn&&e.childNodes.forEach(function(e){t(e)&&n.push(e),e instanceof vn&&mn(e,t,n)})}var wn=new Map;function _n(e){return wn.get(e)||null}function Sn(e){wn.set(e.nativeNode,e)}function On(e,t){var n=kn(e),r=kn(t);return n&&r?function(e,t,n){for(var r=e[k()](),i=t[k()]();;){var o=r.next(),s=i.next();if(o.done&&s.done)return!0;if(o.done||s.done)return!1;if(!n(o.value,s.value))return!1}}(e,t,On):!(n||!e||"object"!=typeof e&&"function"!=typeof e||r||!t||"object"!=typeof t&&"function"!=typeof t)||x(e,t)}var Cn=function(){function e(e){this.wrapped=e}return e.wrap=function(t){return new e(t)},e.unwrap=function(t){return e.isWrapped(t)?t.wrapped:t},e.isWrapped=function(t){return t instanceof e},e}(),jn=function(){function e(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}return e.prototype.isFirstChange=function(){return this.firstChange},e}();function kn(e){return!!En(e)&&(Array.isArray(e)||!(e instanceof Map)&&k()in e)}function En(e){return null!==e&&("function"==typeof e||"object"==typeof e)}var xn=function(){function e(){}return e.prototype.supports=function(e){return kn(e)},e.prototype.create=function(e){return new Tn(e)},e}(),Pn=function(e,t){return t},Tn=function(){function e(e){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=e||Pn}return e.prototype.forEachItem=function(e){var t;for(t=this._itHead;null!==t;t=t._next)e(t)},e.prototype.forEachOperation=function(e){for(var t=this._itHead,n=this._removalsHead,r=0,i=null;t||n;){var o=!n||t&&t.currentIndex<Nn(n,r,i)?t:n,s=Nn(o,r,i),a=o.currentIndex;if(o===n)r--,n=n._nextRemoved;else if(t=t._next,null==o.previousIndex)r++;else{i||(i=[]);var u=s-r,c=a-r;if(u!=c){for(var l=0;l<u;l++){var h=l<i.length?i[l]:i[l]=0,f=h+l;c<=f&&f<u&&(i[l]=h+1)}i[o.previousIndex]=c-u}}s!==a&&e(o,s,a)}},e.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousItHead;null!==t;t=t._nextPrevious)e(t)},e.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},e.prototype.forEachMovedItem=function(e){var t;for(t=this._movesHead;null!==t;t=t._nextMoved)e(t)},e.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},e.prototype.forEachIdentityChange=function(e){var t;for(t=this._identityChangesHead;null!==t;t=t._nextIdentityChange)e(t)},e.prototype.diff=function(e){if(null==e&&(e=[]),!kn(e))throw new Error("Error trying to diff '"+P(e)+"'. Only arrays and iterables are allowed");return this.check(e)?this:null},e.prototype.onDestroy=function(){},e.prototype.check=function(e){var t=this;this._reset();var n,r,i,o=this._itHead,s=!1;if(Array.isArray(e)){this.length=e.length;for(var a=0;a<this.length;a++)i=this._trackByFn(a,r=e[a]),null!==o&&x(o.trackById,i)?(s&&(o=this._verifyReinsertion(o,r,i,a)),x(o.item,r)||this._addIdentityChange(o,r)):(o=this._mismatch(o,r,i,a),s=!0),o=o._next}else n=0,function(e,t){if(Array.isArray(e))for(var n=0;n<e.length;n++)t(e[n]);else for(var r=e[k()](),i=void 0;!(i=r.next()).done;)t(i.value)}(e,function(e){i=t._trackByFn(n,e),null!==o&&x(o.trackById,i)?(s&&(o=t._verifyReinsertion(o,e,i,n)),x(o.item,e)||t._addIdentityChange(o,e)):(o=t._mismatch(o,e,i,n),s=!0),o=o._next,n++}),this.length=n;return this._truncate(o),this.collection=e,this.isDirty},Object.defineProperty(e.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead},enumerable:!0,configurable:!0}),e.prototype._reset=function(){if(this.isDirty){var e=void 0,t=void 0;for(e=this._previousItHead=this._itHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._additionsHead;null!==e;e=e._nextAdded)e.previousIndex=e.currentIndex;for(this._additionsHead=this._additionsTail=null,e=this._movesHead;null!==e;e=t)e.previousIndex=e.currentIndex,t=e._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}},e.prototype._mismatch=function(e,t,n,r){var i;return null===e?i=this._itTail:(i=e._prev,this._remove(e)),null!==(e=null===this._linkedRecords?null:this._linkedRecords.get(n,r))?(x(e.item,t)||this._addIdentityChange(e,t),this._moveAfter(e,i,r)):null!==(e=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(x(e.item,t)||this._addIdentityChange(e,t),this._reinsertAfter(e,i,r)):e=this._addAfter(new An(t,n),i,r),e},e.prototype._verifyReinsertion=function(e,t,n,r){var i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==i?e=this._reinsertAfter(i,e._prev,r):e.currentIndex!=r&&(e.currentIndex=r,this._addToMoves(e,r)),e},e.prototype._truncate=function(e){for(;null!==e;){var t=e._next;this._addToRemovals(this._unlink(e)),e=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)},e.prototype._reinsertAfter=function(e,t,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(e);var r=e._prevRemoved,i=e._nextRemoved;return null===r?this._removalsHead=i:r._nextRemoved=i,null===i?this._removalsTail=r:i._prevRemoved=r,this._insertAfter(e,t,n),this._addToMoves(e,n),e},e.prototype._moveAfter=function(e,t,n){return this._unlink(e),this._insertAfter(e,t,n),this._addToMoves(e,n),e},e.prototype._addAfter=function(e,t,n){return this._insertAfter(e,t,n),this._additionsTail=null===this._additionsTail?this._additionsHead=e:this._additionsTail._nextAdded=e,e},e.prototype._insertAfter=function(e,t,n){var r=null===t?this._itHead:t._next;return e._next=r,e._prev=t,null===r?this._itTail=e:r._prev=e,null===t?this._itHead=e:t._next=e,null===this._linkedRecords&&(this._linkedRecords=new Mn),this._linkedRecords.put(e),e.currentIndex=n,e},e.prototype._remove=function(e){return this._addToRemovals(this._unlink(e))},e.prototype._unlink=function(e){null!==this._linkedRecords&&this._linkedRecords.remove(e);var t=e._prev,n=e._next;return null===t?this._itHead=n:t._next=n,null===n?this._itTail=t:n._prev=t,e},e.prototype._addToMoves=function(e,t){return e.previousIndex===t?e:(this._movesTail=null===this._movesTail?this._movesHead=e:this._movesTail._nextMoved=e,e)},e.prototype._addToRemovals=function(e){return null===this._unlinkedRecords&&(this._unlinkedRecords=new Mn),this._unlinkedRecords.put(e),e.currentIndex=null,e._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=e,e._prevRemoved=null):(e._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=e),e},e.prototype._addIdentityChange=function(e,t){return e.item=t,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=e:this._identityChangesTail._nextIdentityChange=e,e},e}(),An=function(){return function(e,t){this.item=e,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}(),In=function(){function e(){this._head=null,this._tail=null}return e.prototype.add=function(e){null===this._head?(this._head=this._tail=e,e._nextDup=null,e._prevDup=null):(this._tail._nextDup=e,e._prevDup=this._tail,e._nextDup=null,this._tail=e)},e.prototype.get=function(e,t){var n;for(n=this._head;null!==n;n=n._nextDup)if((null===t||t<=n.currentIndex)&&x(n.trackById,e))return n;return null},e.prototype.remove=function(e){var t=e._prevDup,n=e._nextDup;return null===t?this._head=n:t._nextDup=n,null===n?this._tail=t:n._prevDup=t,null===this._head},e}(),Mn=function(){function e(){this.map=new Map}return e.prototype.put=function(e){var t=e.trackById,n=this.map.get(t);n||(n=new In,this.map.set(t,n)),n.add(e)},e.prototype.get=function(e,t){var n=this.map.get(e);return n?n.get(e,t):null},e.prototype.remove=function(e){var t=e.trackById;return this.map.get(t).remove(e)&&this.map.delete(t),e},Object.defineProperty(e.prototype,"isEmpty",{get:function(){return 0===this.map.size},enumerable:!0,configurable:!0}),e.prototype.clear=function(){this.map.clear()},e}();function Nn(e,t,n){var r=e.previousIndex;if(null===r)return r;var i=0;return n&&r<n.length&&(i=n[r]),r+t+i}var Rn=function(){function e(){}return e.prototype.supports=function(e){return e instanceof Map||En(e)},e.prototype.create=function(){return new Dn},e}(),Dn=function(){function e(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}return Object.defineProperty(e.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead},enumerable:!0,configurable:!0}),e.prototype.forEachItem=function(e){var t;for(t=this._mapHead;null!==t;t=t._next)e(t)},e.prototype.forEachPreviousItem=function(e){var t;for(t=this._previousMapHead;null!==t;t=t._nextPrevious)e(t)},e.prototype.forEachChangedItem=function(e){var t;for(t=this._changesHead;null!==t;t=t._nextChanged)e(t)},e.prototype.forEachAddedItem=function(e){var t;for(t=this._additionsHead;null!==t;t=t._nextAdded)e(t)},e.prototype.forEachRemovedItem=function(e){var t;for(t=this._removalsHead;null!==t;t=t._nextRemoved)e(t)},e.prototype.diff=function(e){if(e){if(!(e instanceof Map||En(e)))throw new Error("Error trying to diff '"+P(e)+"'. Only maps and objects are allowed")}else e=new Map;return this.check(e)?this:null},e.prototype.onDestroy=function(){},e.prototype.check=function(e){var t=this;this._reset();var n=this._mapHead;if(this._appendAfter=null,this._forEach(e,function(e,r){if(n&&n.key===r)t._maybeAddToChanges(n,e),t._appendAfter=n,n=n._next;else{var i=t._getOrCreateRecordForKey(r,e);n=t._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(var r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty},e.prototype._insertBeforeOrAppend=function(e,t){if(e){var n=e._prev;return t._next=e,t._prev=n,e._prev=t,n&&(n._next=t),e===this._mapHead&&(this._mapHead=t),this._appendAfter=e,e}return this._appendAfter?(this._appendAfter._next=t,t._prev=this._appendAfter):this._mapHead=t,this._appendAfter=t,null},e.prototype._getOrCreateRecordForKey=function(e,t){if(this._records.has(e)){var n=this._records.get(e);this._maybeAddToChanges(n,t);var r=n._prev,i=n._next;return r&&(r._next=i),i&&(i._prev=r),n._next=null,n._prev=null,n}var o=new Vn(e);return this._records.set(e,o),o.currentValue=t,this._addToAdditions(o),o},e.prototype._reset=function(){if(this.isDirty){var e=void 0;for(this._previousMapHead=this._mapHead,e=this._previousMapHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._changesHead;null!==e;e=e._nextChanged)e.previousValue=e.currentValue;for(e=this._additionsHead;null!=e;e=e._nextAdded)e.previousValue=e.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}},e.prototype._maybeAddToChanges=function(e,t){x(t,e.currentValue)||(e.previousValue=e.currentValue,e.currentValue=t,this._addToChanges(e))},e.prototype._addToAdditions=function(e){null===this._additionsHead?this._additionsHead=this._additionsTail=e:(this._additionsTail._nextAdded=e,this._additionsTail=e)},e.prototype._addToChanges=function(e){null===this._changesHead?this._changesHead=this._changesTail=e:(this._changesTail._nextChanged=e,this._changesTail=e)},e.prototype._forEach=function(e,t){e instanceof Map?e.forEach(t):Object.keys(e).forEach(function(n){return t(e[n],n)})},e}(),Vn=function(){return function(e){this.key=e,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}(),Ln=function(){function e(e){this.factories=e}return e.create=function(t,n){if(null!=n){var r=n.factories.slice();t=t.concat(r)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend IterableDiffers without a parent injector");return e.create(t,n)},deps:[[e,new B,new U]]}},e.prototype.find=function(e){var t,n=this.factories.find(function(t){return t.supports(e)});if(null!=n)return n;throw new Error("Cannot find a differ supporting object '"+e+"' of type '"+((t=e).name||typeof t)+"'")},e.ngInjectableDef=c({providedIn:"root",factory:function(){return new e([new xn])}}),e}(),Un=function(){function e(e){this.factories=e}return e.create=function(t,n){if(n){var r=n.factories.slice();t=t.concat(r)}return new e(t)},e.extend=function(t){return{provide:e,useFactory:function(n){if(!n)throw new Error("Cannot extend KeyValueDiffers without a parent injector");return e.create(t,n)},deps:[[e,new B,new U]]}},e.prototype.find=function(e){var t=this.factories.find(function(t){return t.supports(e)});if(t)return t;throw new Error("Cannot find a differ supporting object '"+e+"'")},e}(),Fn=[new Rn],Bn=new Ln([new xn]),zn=new Un(Fn),Hn=Zt(null,"core",[{provide:st,useValue:"unknown"},{provide:$t,deps:[K]},{provide:Lt,deps:[]},{provide:ut,deps:[]}]),qn=new l("LocaleId");function Gn(){return Bn}function Wn(){return zn}function Kn(e){return e||"en-US"}var Zn=function(){return function(e){}}(),Yn=function(){function e(e){if(this.defaultDoc=e,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),this.inertBodyElement=this.inertDocument.body,null==this.inertBodyElement){var t=this.inertDocument.createElement("html");this.inertDocument.appendChild(t),this.inertBodyElement=this.inertDocument.createElement("body"),t.appendChild(this.inertBodyElement)}this.inertBodyElement.innerHTML='<svg><g onload="this.parentNode.remove()"></g></svg>',!this.inertBodyElement.querySelector||this.inertBodyElement.querySelector("svg")?(this.inertBodyElement.innerHTML='<svg><p><style><img src="</style><img src=x onerror=alert(1)//">',this.getInertBodyElement=this.inertBodyElement.querySelector&&this.inertBodyElement.querySelector("svg img")&&function(){try{return!!window.DOMParser}catch(e){return!1}}()?this.getInertBodyElement_DOMParser:this.getInertBodyElement_InertDocument):this.getInertBodyElement=this.getInertBodyElement_XHR}return e.prototype.getInertBodyElement_XHR=function(e){e="<body><remove></remove>"+e+"</body>";try{e=encodeURI(e)}catch(r){return null}var t=new XMLHttpRequest;t.responseType="document",t.open("GET","data:text/html;charset=utf-8,"+e,!1),t.send(null);var n=t.response.body;return n.removeChild(n.firstChild),n},e.prototype.getInertBodyElement_DOMParser=function(e){e="<body><remove></remove>"+e+"</body>";try{var t=(new window.DOMParser).parseFromString(e,"text/html").body;return t.removeChild(t.firstChild),t}catch(n){return null}},e.prototype.getInertBodyElement_InertDocument=function(e){var t=this.inertDocument.createElement("template");return"content"in t?(t.innerHTML=e,t):(this.inertBodyElement.innerHTML=e,this.defaultDoc.documentMode&&this.stripCustomNsAttrs(this.inertBodyElement),this.inertBodyElement)},e.prototype.stripCustomNsAttrs=function(e){for(var t=e.attributes,n=t.length-1;0<n;n--){var r=t.item(n).name;"xmlns:ns1"!==r&&0!==r.indexOf("ns1:")||e.removeAttribute(r)}for(var i=e.firstChild;i;)i.nodeType===Node.ELEMENT_NODE&&this.stripCustomNsAttrs(i),i=i.nextSibling},e}(),$n=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:\/?#]*(?:[\/?#]|$))/gi,Qn=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;function Jn(e){return(e=String(e)).match($n)||e.match(Qn)?e:(Wt()&&console.warn("WARNING: sanitizing unsafe URL value "+e+" (see http://g.co/ng/security#xss)"),"unsafe:"+e)}function Xn(e){var t,n,i={};try{for(var o=Object(r.h)(e.split(",")),s=o.next();!s.done;s=o.next())i[s.value]=!0}catch(a){t={error:a}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return i}function er(){for(var e,t,n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];var o={};try{for(var s=Object(r.h)(n),a=s.next();!a.done;a=s.next()){var u=a.value;for(var c in u)u.hasOwnProperty(c)&&(o[c]=!0)}}catch(l){e={error:l}}finally{try{a&&!a.done&&(t=s.return)&&t.call(s)}finally{if(e)throw e.error}}return o}var tr,nr=Xn("area,br,col,hr,img,wbr"),rr=Xn("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),ir=Xn("rp,rt"),or=er(ir,rr),sr=er(nr,er(rr,Xn("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),er(ir,Xn("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),or),ar=Xn("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),ur=Xn("srcset"),cr=er(ar,ur,Xn("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width")),lr=function(){function e(){this.sanitizedSomething=!1,this.buf=[]}return e.prototype.sanitizeChildren=function(e){for(var t=e.firstChild;t;)if(t.nodeType===Node.ELEMENT_NODE?this.startElement(t):t.nodeType===Node.TEXT_NODE?this.chars(t.nodeValue):this.sanitizedSomething=!0,t.firstChild)t=t.firstChild;else for(;t;){t.nodeType===Node.ELEMENT_NODE&&this.endElement(t);var n=this.checkClobberedElement(t,t.nextSibling);if(n){t=n;break}t=this.checkClobberedElement(t,t.parentNode)}return this.buf.join("")},e.prototype.startElement=function(e){var t=e.nodeName.toLowerCase();if(sr.hasOwnProperty(t)){this.buf.push("<"),this.buf.push(t);for(var n,r=e.attributes,i=0;i<r.length;i++){var o=r.item(i),s=o.name,a=s.toLowerCase();if(cr.hasOwnProperty(a)){var u=o.value;ar[a]&&(u=Jn(u)),ur[a]&&(n=u,u=(n=String(n)).split(",").map(function(e){return Jn(e.trim())}).join(", ")),this.buf.push(" ",s,'="',dr(u),'"')}else this.sanitizedSomething=!0}this.buf.push(">")}else this.sanitizedSomething=!0},e.prototype.endElement=function(e){var t=e.nodeName.toLowerCase();sr.hasOwnProperty(t)&&!nr.hasOwnProperty(t)&&(this.buf.push("</"),this.buf.push(t),this.buf.push(">"))},e.prototype.chars=function(e){this.buf.push(dr(e))},e.prototype.checkClobberedElement=function(e,t){if(t&&(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error("Failed to sanitize html because the element is clobbered: "+e.outerHTML);return t},e}(),hr=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,fr=/([^\#-~ |!])/g;function dr(e){return e.replace(/&/g,"&amp;").replace(hr,function(e){return"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";"}).replace(fr,function(e){return"&#"+e.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function pr(e,t){var n=null;try{tr=tr||new Yn(e);var r=t?String(t):"";n=tr.getInertBodyElement(r);var i=5,o=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=o,o=n.innerHTML,n=tr.getInertBodyElement(r)}while(r!==o);var s=new lr,a=s.sanitizeChildren(gr(n)||n);return Wt()&&s.sanitizedSomething&&console.warn("WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss)."),a}finally{if(n)for(var u=gr(n)||n;u.firstChild;)u.removeChild(u.firstChild)}}function gr(e){return"content"in e&&function(e){return e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.nodeName}(e)?e.content:null}var br=new RegExp("^([-,.\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\([-0-9.%, #a-zA-Z]+\\))$","g"),vr=/^url\(([^)]+)\)$/;function yr(e){if(!(e=String(e).trim()))return"";var t=e.match(vr);return t&&Jn(t[1])===t[1]||e.match(br)&&function(e){for(var t=!0,n=!0,r=0;r<e.length;r++){var i=e.charAt(r);"'"===i&&n?t=!t:'"'===i&&t&&(n=!n)}return t&&n}(e)?e:(Wt()&&console.warn("WARNING: sanitizing unsafe style value "+e+" (see http://g.co/ng/security#xss)."),"unsafe")}var mr=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}({}),wr=function(){return function(){}}();function _r(e,t,n){var r=e.state,i=1792&r;return i===t?(e.state=-1793&r|n,e.initIndex=-1,!0):i===n}function Sr(e,t,n){return(1792&e.state)===t&&e.initIndex<=n&&(e.initIndex=n+1,!0)}function Or(e,t){return e.nodes[t]}function Cr(e,t){return e.nodes[t]}function jr(e,t){return e.nodes[t]}function kr(e,t){return e.nodes[t]}function Er(e,t){return e.nodes[t]}var xr={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,overrideComponentView:void 0,clearOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0};function Pr(e,t,n,r){var i="ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '"+t+"'. Current value: '"+n+"'.";return r&&(i+=" It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?"),function(e,t){var n=new Error(e);return Tr(n,t),n}(i,e)}function Tr(e,t){e[ge]=t,e[ve]=t.logError.bind(t)}function Ar(e){return new Error("ViewDestroyedError: Attempt to use a destroyed view: "+e)}var Ir=function(){},Mr=new Map;function Nr(e){var t=Mr.get(e);return t||(t=P(e)+"_"+Mr.size,Mr.set(e,t)),t}function Rr(e,t,n,r){if(Cn.isWrapped(r)){r=Cn.unwrap(r);var i=e.def.nodes[t].bindingIndex+n,o=Cn.unwrap(e.oldValues[i]);e.oldValues[i]=new Cn(o)}return r}var Dr="$$undefined",Vr="$$empty";function Lr(e){return{id:Dr,styles:e.styles,encapsulation:e.encapsulation,data:e.data}}var Ur=0;function Fr(e,t,n,r){return!(!(2&e.state)&&x(e.oldValues[t.bindingIndex+n],r))}function Br(e,t,n,r){return!!Fr(e,t,n,r)&&(e.oldValues[t.bindingIndex+n]=r,!0)}function zr(e,t,n,r){var i=e.oldValues[t.bindingIndex+n];if(1&e.state||!On(i,r)){var o=t.bindings[n].name;throw Pr(xr.createDebugContext(e,t.nodeIndex),o+": "+i,o+": "+r,0!=(1&e.state))}}function Hr(e){for(var t=e;t;)2&t.def.flags&&(t.state|=8),t=t.viewContainerParent||t.parent}function qr(e,t){for(var n=e;n&&n!==t;)n.state|=64,n=n.viewContainerParent||n.parent}function Gr(e,t,n,r){try{return Hr(33554432&e.def.nodes[t].flags?Cr(e,t).componentView:e),xr.handleEvent(e,t,n,r)}catch(i){e.root.errorHandler.handleError(i)}}function Wr(e){return e.parent?Cr(e.parent,e.parentNodeDef.nodeIndex):null}function Kr(e){return e.parent?e.parentNodeDef.parent:null}function Zr(e,t){switch(201347067&t.flags){case 1:return Cr(e,t.nodeIndex).renderElement;case 2:return Or(e,t.nodeIndex).renderText}}function Yr(e){return!!e.parent&&!!(32768&e.parentNodeDef.flags)}function $r(e){return!(!e.parent||32768&e.parentNodeDef.flags)}function Qr(e){return 1<<e%32}function Jr(e){var t={},n=0,i={};return e&&e.forEach(function(e){var o=Object(r.f)(e,2),s=o[0],a=o[1];"number"==typeof s?(t[s]=a,n|=Qr(s)):i[s]=a}),{matchedQueries:t,references:i,matchedQueryIds:n}}function Xr(e,t){return e.map(function(e){var n,i,o;return Array.isArray(e)?(o=(n=Object(r.f)(e,2))[0],i=n[1]):(o=0,i=e),i&&("function"==typeof i||"object"==typeof i)&&t&&Object.defineProperty(i,z,{value:t,configurable:!0}),{flags:o,token:i,tokenKey:Nr(i)}})}function ei(e,t,n){var r=n.renderParent;return r?0==(1&r.flags)||0==(33554432&r.flags)||r.element.componentRendererType&&r.element.componentRendererType.encapsulation===fe.Native?Cr(e,n.renderParent.nodeIndex).renderElement:void 0:t}var ti=new WeakMap;function ni(e){var t=ti.get(e);return t||((t=e(function(){return Ir})).factory=e,ti.set(e,t)),t}function ri(e,t,n,r,i){3===t&&(n=e.renderer.parentNode(Zr(e,e.def.lastRenderRootNode))),ii(e,t,0,e.def.nodes.length-1,n,r,i)}function ii(e,t,n,r,i,o,s){for(var a=n;a<=r;a++){var u=e.def.nodes[a];11&u.flags&&si(e,u,t,i,o,s),a+=u.childCount}}function oi(e,t,n,r,i,o){for(var s=e;s&&!Yr(s);)s=s.parent;for(var a=s.parent,u=Kr(s),c=u.nodeIndex+u.childCount,l=u.nodeIndex+1;l<=c;l++){var h=a.def.nodes[l];h.ngContentIndex===t&&si(a,h,n,r,i,o),l+=h.childCount}if(!a.parent){var f=e.root.projectableNodes[t];if(f)for(l=0;l<f.length;l++)ai(e,f[l],n,r,i,o)}}function si(e,t,n,r,i,o){if(8&t.flags)oi(e,t.ngContent.index,n,r,i,o);else{var s=Zr(e,t);if(3===n&&33554432&t.flags&&48&t.bindingFlags?(16&t.bindingFlags&&ai(e,s,n,r,i,o),32&t.bindingFlags&&ai(Cr(e,t.nodeIndex).componentView,s,n,r,i,o)):ai(e,s,n,r,i,o),16777216&t.flags)for(var a=Cr(e,t.nodeIndex).viewContainer._embeddedViews,u=0;u<a.length;u++)ri(a[u],n,r,i,o);1&t.flags&&!t.element.name&&ii(e,n,t.nodeIndex+1,t.nodeIndex+t.childCount,r,i,o)}}function ai(e,t,n,r,i,o){var s=e.renderer;switch(n){case 1:s.appendChild(r,t);break;case 2:s.insertBefore(r,t,i);break;case 3:s.removeChild(r,t);break;case 0:o.push(t)}}var ui=/^:([^:]+):(.+)$/;function ci(e){if(":"===e[0]){var t=e.match(ui);return[t[1],t[2]]}return["",e]}function li(e){for(var t=0,n=0;n<e.length;n++)t|=e[n].flags;return t}function hi(e,t,n,r,i,o,s,a,u,c,l,h,f,d,p,g,b,v,y,m){switch(e){case 1:return t+fi(n)+r;case 2:return t+fi(n)+r+fi(i)+o;case 3:return t+fi(n)+r+fi(i)+o+fi(s)+a;case 4:return t+fi(n)+r+fi(i)+o+fi(s)+a+fi(u)+c;case 5:return t+fi(n)+r+fi(i)+o+fi(s)+a+fi(u)+c+fi(l)+h;case 6:return t+fi(n)+r+fi(i)+o+fi(s)+a+fi(u)+c+fi(l)+h+fi(f)+d;case 7:return t+fi(n)+r+fi(i)+o+fi(s)+a+fi(u)+c+fi(l)+h+fi(f)+d+fi(p)+g;case 8:return t+fi(n)+r+fi(i)+o+fi(s)+a+fi(u)+c+fi(l)+h+fi(f)+d+fi(p)+g+fi(b)+v;case 9:return t+fi(n)+r+fi(i)+o+fi(s)+a+fi(u)+c+fi(l)+h+fi(f)+d+fi(p)+g+fi(b)+v+fi(y)+m;default:throw new Error("Does not support more than 9 expressions")}}function fi(e){return null!=e?e.toString():""}function di(e,t,n,r,i,o){e|=1;var s=Jr(t);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:e,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:s.matchedQueries,matchedQueryIds:s.matchedQueryIds,references:s.references,ngContentIndex:n,childCount:r,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:o?ni(o):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:i||Ir},provider:null,text:null,query:null,ngContent:null}}function pi(e,t,n,i,o,s,a,u,c,l,h,f){var d;void 0===a&&(a=[]),l||(l=Ir);var p=Jr(n),g=p.matchedQueries,b=p.references,v=p.matchedQueryIds,y=null,m=null;s&&(y=(d=Object(r.f)(ci(s),2))[0],m=d[1]),u=u||[];for(var w=new Array(u.length),_=0;_<u.length;_++){var S=Object(r.f)(u[_],3),O=S[0],C=S[1],j=S[2],k=Object(r.f)(ci(C),2),E=k[0],x=k[1],P=void 0,T=void 0;switch(15&O){case 4:T=j;break;case 1:case 8:P=j}w[_]={flags:O,ns:E,name:x,nonMinifiedName:x,securityContext:P,suffix:T}}c=c||[];var A=new Array(c.length);for(_=0;_<c.length;_++){var I=Object(r.f)(c[_],2);A[_]={type:0,target:I[0],eventName:I[1],propName:null}}var M=(a=a||[]).map(function(e){var t=Object(r.f)(e,2),n=t[0],i=t[1],o=Object(r.f)(ci(n),2);return[o[0],o[1],i]});return f=function(e){if(e&&e.id===Dr){var t=null!=e.encapsulation&&e.encapsulation!==fe.None||e.styles.length||Object.keys(e.data).length;e.id=t?"c"+Ur++:Vr}return e&&e.id===Vr&&(e=null),e||null}(f),h&&(t|=33554432),{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t|=1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:g,matchedQueryIds:v,references:b,ngContentIndex:i,childCount:o,bindings:w,bindingFlags:li(w),outputs:A,element:{ns:y,name:m,attrs:M,template:null,componentProvider:null,componentView:h||null,componentRendererType:f,publicProviders:null,allProviders:null,handleEvent:l||Ir},provider:null,text:null,query:null,ngContent:null}}function gi(e,t,n){var i,o=n.element,s=e.root.selectorOrNode,a=e.renderer;if(e.parent||!s){i=o.name?a.createElement(o.name,o.ns):a.createComment("");var u=ei(e,t,n);u&&a.appendChild(u,i)}else i=a.selectRootElement(s);if(o.attrs)for(var c=0;c<o.attrs.length;c++){var l=Object(r.f)(o.attrs[c],3);a.setAttribute(i,l[1],l[2],l[0])}return i}function bi(e,t,n,r){for(var i=0;i<n.outputs.length;i++){var o=n.outputs[i],s=vi(e,n.nodeIndex,(h=o.eventName,(l=o.target)?l+":"+h:h)),a=o.target,u=e;"component"===o.target&&(a=null,u=t);var c=u.renderer.listen(a||r,o.eventName,s);e.disposables[n.outputIndex+i]=c}var l,h}function vi(e,t,n){return function(r){return Gr(e,t,n,r)}}function yi(e,t,n,r){if(!Br(e,t,n,r))return!1;var i=t.bindings[n],o=Cr(e,t.nodeIndex),s=o.renderElement,a=i.name;switch(15&i.flags){case 1:!function(e,t,n,r,i,o){var s=t.securityContext,a=s?e.root.sanitizer.sanitize(s,o):o;a=null!=a?a.toString():null;var u=e.renderer;null!=o?u.setAttribute(n,i,a,r):u.removeAttribute(n,i,r)}(e,i,s,i.ns,a,r);break;case 2:!function(e,t,n,r){var i=e.renderer;r?i.addClass(t,n):i.removeClass(t,n)}(e,s,a,r);break;case 4:!function(e,t,n,r,i){var o=e.root.sanitizer.sanitize(mr.STYLE,i);if(null!=o){o=o.toString();var s=t.suffix;null!=s&&(o+=s)}else o=null;var a=e.renderer;null!=o?a.setStyle(n,r,o):a.removeStyle(n,r)}(e,i,s,a,r);break;case 8:!function(e,t,n,r,i){var o=t.securityContext,s=o?e.root.sanitizer.sanitize(o,i):i;e.renderer.setProperty(n,r,s)}(33554432&t.flags&&32&i.flags?o.componentView:e,i,s,a,r)}return!0}var mi=new Object,wi=Nr(K),_i=Nr(G),Si=Nr(St);function Oi(e,t,n,r){return n=V(n),{index:-1,deps:Xr(r,P(t)),flags:e,token:t,value:n}}function Ci(e){for(var t={},n=[],r=!1,i=0;i<e.length;i++){var o=e[i];o.token===Be&&!0===o.value&&(r=!0),1073741824&o.flags&&n.push(o.token),o.index=i,t[Nr(o.token)]=o}return{factory:null,providersByKey:t,providers:e,modules:n,isRoot:r}}function ji(e,t,n){void 0===n&&(n=K.THROW_IF_NOT_FOUND);var r,i,o=ce(e);try{if(8&t.flags)return t.token;if(2&t.flags&&(n=null),1&t.flags)return e._parent.get(t.token,n);var s=t.tokenKey;switch(s){case wi:case _i:case Si:return e}var a=e._def.providersByKey[s];if(a){var u=e._providers[a.index];return void 0===u&&(u=e._providers[a.index]=ki(e,a)),u===mi?void 0:u}if(t.token.ngInjectableDef&&(r=e,null!=(i=t.token.ngInjectableDef).providedIn&&(function(e,t){return e._def.modules.indexOf(i.providedIn)>-1}(r)||"root"===i.providedIn&&r._def.isRoot))){var c=e._providers.length;return e._def.providersByKey[t.tokenKey]={flags:5120,value:t.token.ngInjectableDef.factory,deps:[],index:c,token:t.token},e._providers[c]=mi,e._providers[c]=ki(e,e._def.providersByKey[t.tokenKey])}return 4&t.flags?n:e._parent.get(t.token,n)}finally{ce(o)}}function ki(e,t){var n;switch(201347067&t.flags){case 512:n=function(e,t,n){var i=n.length;switch(i){case 0:return new t;case 1:return new t(ji(e,n[0]));case 2:return new t(ji(e,n[0]),ji(e,n[1]));case 3:return new t(ji(e,n[0]),ji(e,n[1]),ji(e,n[2]));default:for(var o=new Array(i),s=0;s<i;s++)o[s]=ji(e,n[s]);return new(t.bind.apply(t,Object(r.g)([void 0],o)))}}(e,t.value,t.deps);break;case 1024:n=function(e,t,n){var i=n.length;switch(i){case 0:return t();case 1:return t(ji(e,n[0]));case 2:return t(ji(e,n[0]),ji(e,n[1]));case 3:return t(ji(e,n[0]),ji(e,n[1]),ji(e,n[2]));default:for(var o=Array(i),s=0;s<i;s++)o[s]=ji(e,n[s]);return t.apply(void 0,Object(r.g)(o))}}(e,t.value,t.deps);break;case 2048:n=ji(e,t.deps[0]);break;case 256:n=t.value}return n===mi||null==n||"object"!=typeof n||131072&t.flags||"function"!=typeof n.ngOnDestroy||(t.flags|=131072),void 0===n?mi:n}function Ei(e,t){var n=e.viewContainer._embeddedViews;if((null==t||t>=n.length)&&(t=n.length-1),t<0)return null;var r=n[t];return r.viewContainerParent=null,Ai(n,t),xr.dirtyParentQueries(r),Pi(r),r}function xi(e,t,n){var r=t?Zr(t,t.def.lastRenderRootNode):e.renderElement,i=n.renderer.parentNode(r),o=n.renderer.nextSibling(r);ri(n,2,i,o,void 0)}function Pi(e){ri(e,3,null,null,void 0)}function Ti(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Ai(e,t){t>=e.length-1?e.pop():e.splice(t,1)}var Ii=new Object;function Mi(e,t,n,r,i,o){return new Ni(e,t,n,r,i,o)}var Ni=function(e){function t(t,n,r,i,o,s){var a=e.call(this)||this;return a.selector=t,a.componentType=n,a._inputs=i,a._outputs=o,a.ngContentSelectors=s,a.viewDefFactory=r,a}return Object(r.c)(t,e),Object.defineProperty(t.prototype,"inputs",{get:function(){var e=[],t=this._inputs;for(var n in t)e.push({propName:n,templateName:t[n]});return e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){var e=[];for(var t in this._outputs)e.push({propName:t,templateName:this._outputs[t]});return e},enumerable:!0,configurable:!0}),t.prototype.create=function(e,t,n,r){if(!r)throw new Error("ngModule should be provided");var i=ni(this.viewDefFactory),o=i.nodes[0].element.componentProvider.nodeIndex,s=xr.createRootView(e,t||[],n,i,r,Ii),a=jr(s,o).instance;return n&&s.renderer.setAttribute(Cr(s,0).renderElement,"ng-version",pe.full),new Ri(s,new Ui(s),a)},t}(dt),Ri=function(e){function t(t,n,r){var i=e.call(this)||this;return i._view=t,i._viewRef=n,i._component=r,i._elDef=i._view.def.nodes[0],i.hostView=n,i.changeDetectorRef=n,i.instance=r,i}return Object(r.c)(t,e),Object.defineProperty(t.prototype,"location",{get:function(){return new on(Cr(this._view,this._elDef.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"injector",{get:function(){return new Hi(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentType",{get:function(){return this._component.constructor},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){this._viewRef.destroy()},t.prototype.onDestroy=function(e){this._viewRef.onDestroy(e)},t}(ft);function Di(e,t,n){return new Vi(e,t,n)}var Vi=function(){function e(e,t,n){this._view=e,this._elDef=t,this._data=n,this._embeddedViews=[]}return Object.defineProperty(e.prototype,"element",{get:function(){return new on(this._data.renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return new Hi(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"parentInjector",{get:function(){for(var e=this._view,t=this._elDef.parent;!t&&e;)t=Kr(e),e=e.parent;return e?new Hi(e,t):new Hi(this._view,null)},enumerable:!0,configurable:!0}),e.prototype.clear=function(){for(var e=this._embeddedViews.length-1;e>=0;e--){var t=Ei(this._data,e);xr.destroyView(t)}},e.prototype.get=function(e){var t=this._embeddedViews[e];if(t){var n=new Ui(t);return n.attachToViewContainerRef(this),n}return null},Object.defineProperty(e.prototype,"length",{get:function(){return this._embeddedViews.length},enumerable:!0,configurable:!0}),e.prototype.createEmbeddedView=function(e,t,n){var r=e.createEmbeddedView(t||{});return this.insert(r,n),r},e.prototype.createComponent=function(e,t,n,r,i){var o=n||this.parentInjector;i||e instanceof _t||(i=o.get(St));var s=e.create(o,r,void 0,i);return this.insert(s.hostView,t),s},e.prototype.insert=function(e,t){if(e.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");var n,r,i,o,s=e;return o=(n=this._data).viewContainer._embeddedViews,null==(r=t)&&(r=o.length),(i=s._view).viewContainerParent=this._view,Ti(o,r,i),function(e,t){var n=Wr(t);if(n&&n!==e&&!(16&t.state)){t.state|=16;var r=n.template._projectedViews;r||(r=n.template._projectedViews=[]),r.push(t),function(e,n){if(!(4&n.flags)){t.parent.def.nodeFlags|=4,n.flags|=4;for(var r=n.parent;r;)r.childFlags|=4,r=r.parent}}(0,t.parentNodeDef)}}(n,i),xr.dirtyParentQueries(i),xi(n,r>0?o[r-1]:null,i),s.attachToViewContainerRef(this),e},e.prototype.move=function(e,t){if(e.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");var n,r,i,o,s,a=this._embeddedViews.indexOf(e._view);return i=t,s=(o=(n=this._data).viewContainer._embeddedViews)[r=a],Ai(o,r),null==i&&(i=o.length),Ti(o,i,s),xr.dirtyParentQueries(s),Pi(s),xi(n,i>0?o[i-1]:null,s),e},e.prototype.indexOf=function(e){return this._embeddedViews.indexOf(e._view)},e.prototype.remove=function(e){var t=Ei(this._data,e);t&&xr.destroyView(t)},e.prototype.detach=function(e){var t=Ei(this._data,e);return t?new Ui(t):null},e}();function Li(e){return new Ui(e)}var Ui=function(){function e(e){this._view=e,this._viewContainerRef=null,this._appRef=null}return Object.defineProperty(e.prototype,"rootNodes",{get:function(){return ri(this._view,0,void 0,void 0,e=[]),e;var e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"destroyed",{get:function(){return 0!=(128&this._view.state)},enumerable:!0,configurable:!0}),e.prototype.markForCheck=function(){Hr(this._view)},e.prototype.detach=function(){this._view.state&=-5},e.prototype.detectChanges=function(){var e=this._view.root.rendererFactory;e.begin&&e.begin();try{xr.checkAndUpdateView(this._view)}finally{e.end&&e.end()}},e.prototype.checkNoChanges=function(){xr.checkNoChangesView(this._view)},e.prototype.reattach=function(){this._view.state|=4},e.prototype.onDestroy=function(e){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(e)},e.prototype.destroy=function(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),xr.destroyView(this._view)},e.prototype.detachFromAppRef=function(){this._appRef=null,Pi(this._view),xr.dirtyParentQueries(this._view)},e.prototype.attachToAppRef=function(e){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=e},e.prototype.attachToViewContainerRef=function(e){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=e},e}();function Fi(e,t){return new Bi(e,t)}var Bi=function(e){function t(t,n){var r=e.call(this)||this;return r._parentView=t,r._def=n,r}return Object(r.c)(t,e),t.prototype.createEmbeddedView=function(e){return new Ui(xr.createEmbeddedView(this._parentView,this._def,this._def.element.template,e))},Object.defineProperty(t.prototype,"elementRef",{get:function(){return new on(Cr(this._parentView,this._def.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),t}(fn);function zi(e,t){return new Hi(e,t)}var Hi=function(){function e(e,t){this.view=e,this.elDef=t}return e.prototype.get=function(e,t){return void 0===t&&(t=K.THROW_IF_NOT_FOUND),xr.resolveDep(this.view,this.elDef,!!this.elDef&&0!=(33554432&this.elDef.flags),{flags:0,token:e,tokenKey:Nr(e)},t)},e}();function qi(e,t){var n=e.def.nodes[t];if(1&n.flags){var r=Cr(e,n.nodeIndex);return n.element.template?r.template:r.renderElement}if(2&n.flags)return Or(e,n.nodeIndex).renderText;if(20240&n.flags)return jr(e,n.nodeIndex).instance;throw new Error("Illegal state: read nodeValue for node index "+t)}function Gi(e){return new Wi(e.renderer)}var Wi=function(){function e(e){this.delegate=e}return e.prototype.selectRootElement=function(e){return this.delegate.selectRootElement(e)},e.prototype.createElement=function(e,t){var n=Object(r.f)(ci(t),2),i=this.delegate.createElement(n[1],n[0]);return e&&this.delegate.appendChild(e,i),i},e.prototype.createViewRoot=function(e){return e},e.prototype.createTemplateAnchor=function(e){var t=this.delegate.createComment("");return e&&this.delegate.appendChild(e,t),t},e.prototype.createText=function(e,t){var n=this.delegate.createText(t);return e&&this.delegate.appendChild(e,n),n},e.prototype.projectNodes=function(e,t){for(var n=0;n<t.length;n++)this.delegate.appendChild(e,t[n])},e.prototype.attachViewAfter=function(e,t){for(var n=this.delegate.parentNode(e),r=this.delegate.nextSibling(e),i=0;i<t.length;i++)this.delegate.insertBefore(n,t[i],r)},e.prototype.detachView=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=this.delegate.parentNode(n);this.delegate.removeChild(r,n)}},e.prototype.destroyView=function(e,t){for(var n=0;n<t.length;n++)this.delegate.destroyNode(t[n])},e.prototype.listen=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.listenGlobal=function(e,t,n){return this.delegate.listen(e,t,n)},e.prototype.setElementProperty=function(e,t,n){this.delegate.setProperty(e,t,n)},e.prototype.setElementAttribute=function(e,t,n){var i=Object(r.f)(ci(t),2),o=i[0],s=i[1];null!=n?this.delegate.setAttribute(e,s,n,o):this.delegate.removeAttribute(e,s,o)},e.prototype.setBindingDebugInfo=function(e,t,n){},e.prototype.setElementClass=function(e,t,n){n?this.delegate.addClass(e,t):this.delegate.removeClass(e,t)},e.prototype.setElementStyle=function(e,t,n){null!=n?this.delegate.setStyle(e,t,n):this.delegate.removeStyle(e,t)},e.prototype.invokeElementMethod=function(e,t,n){e[t].apply(e,n)},e.prototype.setText=function(e,t){this.delegate.setValue(e,t)},e.prototype.animate=function(){throw new Error("Renderer.animate is no longer supported!")},e}();function Ki(e,t,n,r){return new Zi(e,t,n,r)}var Zi=function(){function e(e,t,n,r){this._moduleType=e,this._parent=t,this._bootstrapComponents=n,this._def=r,this._destroyListeners=[],this._destroyed=!1,this.injector=this,function(e){for(var t=e._def,n=e._providers=new Array(t.providers.length),r=0;r<t.providers.length;r++){var i=t.providers[r];4096&i.flags||void 0===n[r]&&(n[r]=ki(e,i))}}(this)}return e.prototype.get=function(e,t,n){void 0===t&&(t=K.THROW_IF_NOT_FOUND),void 0===n&&(n=0);var r=0;return 4&n?r|=1:2&n&&(r|=4),ji(this,{token:e,tokenKey:Nr(e),flags:r},t)},Object.defineProperty(e.prototype,"instance",{get:function(){return this.get(this._moduleType)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentFactoryResolver",{get:function(){return this.get(mt)},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){if(this._destroyed)throw new Error("The ng module "+P(this.instance.constructor)+" has already been destroyed.");this._destroyed=!0,function(e,t){for(var n=e._def,r=new Set,i=0;i<n.providers.length;i++)if(131072&n.providers[i].flags){var o=e._providers[i];if(o&&o!==mi){var s=o.ngOnDestroy;"function"!=typeof s||r.has(o)||(s.apply(o),r.add(o))}}}(this),this._destroyListeners.forEach(function(e){return e()})},e.prototype.onDestroy=function(e){this._destroyListeners.push(e)},e}(),Yi=Nr(en),$i=Nr(rn),Qi=Nr(on),Ji=Nr(dn),Xi=Nr(fn),eo=Nr(pn),to=Nr(K),no=Nr(G);function ro(e,t,n,i,o,s,a,u){var c=[];if(a)for(var l in a){var h=Object(r.f)(a[l],2);c[h[0]]={flags:8,name:l,nonMinifiedName:h[1],ns:null,securityContext:null,suffix:null}}var f=[];if(u)for(var d in u)f.push({type:1,propName:d,target:null,eventName:u[d]});return so(e,t|=16384,n,i,o,o,s,c,f)}function io(e,t,n){return so(-1,e|=16,null,0,t,t,n)}function oo(e,t,n,r,i){return so(-1,e,t,0,n,r,i)}function so(e,t,n,r,i,o,s,a,u){var c=Jr(n),l=c.matchedQueries,h=c.references,f=c.matchedQueryIds;u||(u=[]),a||(a=[]),o=V(o);var d=Xr(s,P(i));return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:l,matchedQueryIds:f,references:h,ngContentIndex:-1,childCount:r,bindings:a,bindingFlags:li(a),outputs:u,element:null,provider:{token:i,value:o,deps:d},text:null,query:null,ngContent:null}}function ao(e,t){return ho(e,t)}function uo(e,t){for(var n=e;n.parent&&!Yr(n);)n=n.parent;return fo(n.parent,Kr(n),!0,t.provider.value,t.provider.deps)}function co(e,t){var n=fo(e,t.parent,(32768&t.flags)>0,t.provider.value,t.provider.deps);if(t.outputs.length)for(var r=0;r<t.outputs.length;r++){var i=t.outputs[r],o=n[i.propName].subscribe(lo(e,t.parent.nodeIndex,i.eventName));e.disposables[t.outputIndex+r]=o.unsubscribe.bind(o)}return n}function lo(e,t,n){return function(r){return Gr(e,t,n,r)}}function ho(e,t){var n=(8192&t.flags)>0,i=t.provider;switch(201347067&t.flags){case 512:return fo(e,t.parent,n,i.value,i.deps);case 1024:return function(e,t,n,i,o){var s=o.length;switch(s){case 0:return i();case 1:return i(go(e,t,n,o[0]));case 2:return i(go(e,t,n,o[0]),go(e,t,n,o[1]));case 3:return i(go(e,t,n,o[0]),go(e,t,n,o[1]),go(e,t,n,o[2]));default:for(var a=Array(s),u=0;u<s;u++)a[u]=go(e,t,n,o[u]);return i.apply(void 0,Object(r.g)(a))}}(e,t.parent,n,i.value,i.deps);case 2048:return go(e,t.parent,n,i.deps[0]);case 256:return i.value}}function fo(e,t,n,i,o){var s=o.length;switch(s){case 0:return new i;case 1:return new i(go(e,t,n,o[0]));case 2:return new i(go(e,t,n,o[0]),go(e,t,n,o[1]));case 3:return new i(go(e,t,n,o[0]),go(e,t,n,o[1]),go(e,t,n,o[2]));default:for(var a=new Array(s),u=0;u<s;u++)a[u]=go(e,t,n,o[u]);return new(i.bind.apply(i,Object(r.g)([void 0],a)))}}var po={};function go(e,t,n,r,i){if(void 0===i&&(i=K.THROW_IF_NOT_FOUND),8&r.flags)return r.token;var o=e;2&r.flags&&(i=null);var s=r.tokenKey;s===eo&&(n=!(!t||!t.element.componentView)),t&&1&r.flags&&(n=!1,t=t.parent);for(var a=e;a;){if(t)switch(s){case Yi:return Gi(bo(a,t,n));case $i:return bo(a,t,n).renderer;case Qi:return new on(Cr(a,t.nodeIndex).renderElement);case Ji:return Cr(a,t.nodeIndex).viewContainer;case Xi:if(t.element.template)return Cr(a,t.nodeIndex).template;break;case eo:return Li(bo(a,t,n));case to:case no:return zi(a,t);default:var u=(n?t.element.allProviders:t.element.publicProviders)[s];if(u){var c=jr(a,u.nodeIndex);return c||(c={instance:ho(a,u)},a.nodes[u.nodeIndex]=c),c.instance}}n=Yr(a),t=Kr(a),a=a.parent,4&r.flags&&(a=null)}var l=o.root.injector.get(r.token,po);return l!==po||i===po?l:o.root.ngModule.injector.get(r.token,i)}function bo(e,t,n){var r;if(n)r=Cr(e,t.nodeIndex).componentView;else for(r=e;r.parent&&!Yr(r);)r=r.parent;return r}function vo(e,t,n,r,i,o){if(32768&n.flags){var s=Cr(e,n.parent.nodeIndex).componentView;2&s.def.flags&&(s.state|=8)}if(t.instance[n.bindings[r].name]=i,524288&n.flags){o=o||{};var a=Cn.unwrap(e.oldValues[n.bindingIndex+r]);o[n.bindings[r].nonMinifiedName]=new jn(a,i,0!=(2&e.state))}return e.oldValues[n.bindingIndex+r]=i,o}function yo(e,t){if(e.def.nodeFlags&t)for(var n=e.def.nodes,r=0,i=0;i<n.length;i++){var o=n[i],s=o.parent;for(!s&&o.flags&t&&wo(e,i,o.flags&t,r++),0==(o.childFlags&t)&&(i+=o.childCount);s&&1&s.flags&&i===s.nodeIndex+s.childCount;)s.directChildFlags&t&&(r=mo(e,s,t,r)),s=s.parent}}function mo(e,t,n,r){for(var i=t.nodeIndex+1;i<=t.nodeIndex+t.childCount;i++){var o=e.def.nodes[i];o.flags&n&&wo(e,i,o.flags&n,r++),i+=o.childCount}return r}function wo(e,t,n,r){var i=jr(e,t);if(i){var o=i.instance;o&&(xr.setCurrentNode(e,t),1048576&n&&Sr(e,512,r)&&o.ngAfterContentInit(),2097152&n&&o.ngAfterContentChecked(),4194304&n&&Sr(e,768,r)&&o.ngAfterViewInit(),8388608&n&&o.ngAfterViewChecked(),131072&n&&o.ngOnDestroy())}}function _o(e,t,n){var r=[];for(var i in n)r.push({propName:i,bindingType:n[i]});return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,ngContentIndex:-1,matchedQueries:{},matchedQueryIds:0,references:{},childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:{id:t,filterId:Qr(t),bindings:r},ngContent:null}}function So(e){for(var t=e.def.nodeMatchedQueries;e.parent&&$r(e);){var n=e.parentNodeDef;e=e.parent;for(var r=n.nodeIndex+n.childCount,i=0;i<=r;i++)67108864&(o=e.def.nodes[i]).flags&&536870912&o.flags&&(o.query.filterId&t)===o.query.filterId&&Er(e,i).setDirty(),!(1&o.flags&&i+o.childCount<n.nodeIndex)&&67108864&o.childFlags&&536870912&o.childFlags||(i+=o.childCount)}if(134217728&e.def.nodeFlags)for(i=0;i<e.def.nodes.length;i++){var o;134217728&(o=e.def.nodes[i]).flags&&536870912&o.flags&&Er(e,i).setDirty(),i+=o.childCount}}function Oo(e,t){var n=Er(e,t.nodeIndex);if(n.dirty){var r,i=void 0;if(67108864&t.flags){var o=t.parent.parent;i=Co(e,o.nodeIndex,o.nodeIndex+o.childCount,t.query,[]),r=jr(e,t.parent.nodeIndex).instance}else 134217728&t.flags&&(i=Co(e,0,e.def.nodes.length-1,t.query,[]),r=e.component);n.reset(i);for(var s=t.query.bindings,a=!1,u=0;u<s.length;u++){var c=s[u],l=void 0;switch(c.bindingType){case 0:l=n.first;break;case 1:l=n,a=!0}r[c.propName]=l}a&&n.notifyOnChanges()}}function Co(e,t,n,r,i){for(var o=t;o<=n;o++){var s=e.def.nodes[o],a=s.matchedQueries[r.id];if(null!=a&&i.push(jo(e,s,a)),1&s.flags&&s.element.template&&(s.element.template.nodeMatchedQueries&r.filterId)===r.filterId){var u=Cr(e,o);if((s.childMatchedQueries&r.filterId)===r.filterId&&(Co(e,o+1,o+s.childCount,r,i),o+=s.childCount),16777216&s.flags)for(var c=u.viewContainer._embeddedViews,l=0;l<c.length;l++){var h=c[l],f=Wr(h);f&&f===u&&Co(h,0,h.def.nodes.length-1,r,i)}var d=u.template._projectedViews;if(d)for(l=0;l<d.length;l++){var p=d[l];Co(p,0,p.def.nodes.length-1,r,i)}}(s.childMatchedQueries&r.filterId)!==r.filterId&&(o+=s.childCount)}return i}function jo(e,t,n){if(null!=n)switch(n){case 1:return Cr(e,t.nodeIndex).renderElement;case 0:return new on(Cr(e,t.nodeIndex).renderElement);case 2:return Cr(e,t.nodeIndex).template;case 3:return Cr(e,t.nodeIndex).viewContainer;case 4:return jr(e,t.nodeIndex).instance}}function ko(e,t){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:t}}}function Eo(e,t,n){var r=ei(e,t,n);r&&oi(e,n.ngContent.index,1,r,null,void 0)}function xo(e,t){return Ao(128,e,new Array(t+1))}function Po(e,t){return Ao(32,e,new Array(t))}function To(e,t){for(var n=Object.keys(t),r=n.length,i=new Array(r),o=0;o<r;o++){var s=n[o];i[t[s]]=s}return Ao(64,e,i)}function Ao(e,t,n){for(var r=new Array(n.length),i=0;i<n.length;i++){var o=n[i];r[i]={flags:8,name:o,ns:null,nonMinifiedName:o,securityContext:null,suffix:null}}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:r,bindingFlags:li(r),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function Io(e,t,n){for(var r=new Array(n.length-1),i=1;i<n.length;i++)r[i-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[i]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:r,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}}function Mo(e,t,n){var r,i=e.renderer;r=i.createText(n.text.prefix);var o=ei(e,t,n);return o&&i.appendChild(o,r),{renderText:r}}function No(e,t){return(null!=e?e.toString():"")+t.suffix}function Ro(e,t,n,r){for(var i=0,o=0,s=0,a=0,u=0,c=null,l=null,h=!1,f=!1,d=null,p=0;p<t.length;p++){var g=t[p];if(g.nodeIndex=p,g.parent=c,g.bindingIndex=i,g.outputIndex=o,g.renderParent=l,s|=g.flags,u|=g.matchedQueryIds,g.element){var b=g.element;b.publicProviders=c?c.element.publicProviders:Object.create(null),b.allProviders=b.publicProviders,h=!1,f=!1,g.element.template&&(u|=g.element.template.nodeMatchedQueries)}if(Vo(c,g,t.length),i+=g.bindings.length,o+=g.outputs.length,!l&&3&g.flags&&(d=g),20224&g.flags){h||(h=!0,c.element.publicProviders=Object.create(c.element.publicProviders),c.element.allProviders=c.element.publicProviders);var v=0!=(32768&g.flags);0==(8192&g.flags)||v?c.element.publicProviders[Nr(g.provider.token)]=g:(f||(f=!0,c.element.allProviders=Object.create(c.element.publicProviders)),c.element.allProviders[Nr(g.provider.token)]=g),v&&(c.element.componentProvider=g)}if(c?(c.childFlags|=g.flags,c.directChildFlags|=g.flags,c.childMatchedQueries|=g.matchedQueryIds,g.element&&g.element.template&&(c.childMatchedQueries|=g.element.template.nodeMatchedQueries)):a|=g.flags,g.childCount>0)c=g,Do(g)||(l=g);else for(;c&&p===c.nodeIndex+c.childCount;){var y=c.parent;y&&(y.childFlags|=c.childFlags,y.childMatchedQueries|=c.childMatchedQueries),l=(c=y)&&Do(c)?c.renderParent:c}}return{factory:null,nodeFlags:s,rootNodeFlags:a,nodeMatchedQueries:u,flags:e,nodes:t,updateDirectives:n||Ir,updateRenderer:r||Ir,handleEvent:function(e,n,r,i){return t[n].element.handleEvent(e,r,i)},bindingCount:i,outputCount:o,lastRenderRootNode:d}}function Do(e){return 0!=(1&e.flags)&&null===e.element.name}function Vo(e,t,n){var r=t.element&&t.element.template;if(r){if(!r.lastRenderRootNode)throw new Error("Illegal State: Embedded templates without nodes are not allowed!");if(r.lastRenderRootNode&&16777216&r.lastRenderRootNode.flags)throw new Error("Illegal State: Last root node of a template can't have embedded views, at index "+t.nodeIndex+"!")}if(20224&t.flags&&0==(1&(e?e.flags:0)))throw new Error("Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index "+t.nodeIndex+"!");if(t.query){if(67108864&t.flags&&(!e||0==(16384&e.flags)))throw new Error("Illegal State: Content Query nodes need to be children of directives, at index "+t.nodeIndex+"!");if(134217728&t.flags&&e)throw new Error("Illegal State: View Query nodes have to be top level nodes, at index "+t.nodeIndex+"!")}if(t.childCount){var i=e?e.nodeIndex+e.childCount:n-1;if(t.nodeIndex<=i&&t.nodeIndex+t.childCount>i)throw new Error("Illegal State: childCount of node leads outside of parent, at index "+t.nodeIndex+"!")}}function Lo(e,t,n,r){var i=Bo(e.root,e.renderer,e,t,n);return zo(i,e.component,r),Ho(i),i}function Uo(e,t,n){var r=Bo(e,e.renderer,null,null,t);return zo(r,n,n),Ho(r),r}function Fo(e,t,n,r){var i,o=t.element.componentRendererType;return i=o?e.root.rendererFactory.createRenderer(r,o):e.root.renderer,Bo(e.root,i,e,t.element.componentProvider,n)}function Bo(e,t,n,r,i){var o=new Array(i.nodes.length),s=i.outputCount?new Array(i.outputCount):null;return{def:i,parent:n,viewContainerParent:null,parentNodeDef:r,context:null,component:null,nodes:o,state:13,root:e,renderer:t,oldValues:new Array(i.bindingCount),disposables:s,initIndex:-1}}function zo(e,t,n){e.component=t,e.context=n}function Ho(e){var t;Yr(e)&&(t=Cr(e.parent,e.parentNodeDef.parent.nodeIndex).renderElement);for(var n=e.def,r=e.nodes,i=0;i<n.nodes.length;i++){var o=n.nodes[i];xr.setCurrentNode(e,i);var s=void 0;switch(201347067&o.flags){case 1:var a=gi(e,t,o),u=void 0;if(33554432&o.flags){var c=ni(o.element.componentView);u=xr.createComponentView(e,o,c,a)}bi(e,u,o,a),s={renderElement:a,componentView:u,viewContainer:null,template:o.element.template?Fi(e,o):void 0},16777216&o.flags&&(s.viewContainer=Di(e,o,s));break;case 2:s=Mo(e,t,o);break;case 512:case 1024:case 2048:case 256:(s=r[i])||4096&o.flags||(s={instance:ao(e,o)});break;case 16:s={instance:uo(e,o)};break;case 16384:(s=r[i])||(s={instance:co(e,o)}),32768&o.flags&&zo(Cr(e,o.parent.nodeIndex).componentView,s.instance,s.instance);break;case 32:case 64:case 128:s={value:void 0};break;case 67108864:case 134217728:s=new an;break;case 8:Eo(e,t,o),s=void 0}r[i]=s}Jo(e,Qo.CreateViewNodes),ns(e,201326592,268435456,0)}function qo(e){Ko(e),xr.updateDirectives(e,1),Xo(e,Qo.CheckNoChanges),xr.updateRenderer(e,1),Jo(e,Qo.CheckNoChanges),e.state&=-97}function Go(e){1&e.state?(e.state&=-2,e.state|=2):e.state&=-3,_r(e,0,256),Ko(e),xr.updateDirectives(e,0),Xo(e,Qo.CheckAndUpdate),ns(e,67108864,536870912,0);var t=_r(e,256,512);yo(e,2097152|(t?1048576:0)),xr.updateRenderer(e,0),Jo(e,Qo.CheckAndUpdate),ns(e,134217728,536870912,0),yo(e,8388608|((t=_r(e,512,768))?4194304:0)),2&e.def.flags&&(e.state&=-9),e.state&=-97,_r(e,768,1024)}function Wo(e,t,n,i,o,s,a,u,c,l,h,f,d){return 0===n?function(e,t,n,r,i,o,s,a,u,c,l,h){switch(201347067&t.flags){case 1:return function(e,t,n,r,i,o,s,a,u,c,l,h){var f=t.bindings.length,d=!1;return f>0&&yi(e,t,0,n)&&(d=!0),f>1&&yi(e,t,1,r)&&(d=!0),f>2&&yi(e,t,2,i)&&(d=!0),f>3&&yi(e,t,3,o)&&(d=!0),f>4&&yi(e,t,4,s)&&(d=!0),f>5&&yi(e,t,5,a)&&(d=!0),f>6&&yi(e,t,6,u)&&(d=!0),f>7&&yi(e,t,7,c)&&(d=!0),f>8&&yi(e,t,8,l)&&(d=!0),f>9&&yi(e,t,9,h)&&(d=!0),d}(e,t,n,r,i,o,s,a,u,c,l,h);case 2:return function(e,t,n,r,i,o,s,a,u,c,l,h){var f=!1,d=t.bindings,p=d.length;if(p>0&&Br(e,t,0,n)&&(f=!0),p>1&&Br(e,t,1,r)&&(f=!0),p>2&&Br(e,t,2,i)&&(f=!0),p>3&&Br(e,t,3,o)&&(f=!0),p>4&&Br(e,t,4,s)&&(f=!0),p>5&&Br(e,t,5,a)&&(f=!0),p>6&&Br(e,t,6,u)&&(f=!0),p>7&&Br(e,t,7,c)&&(f=!0),p>8&&Br(e,t,8,l)&&(f=!0),p>9&&Br(e,t,9,h)&&(f=!0),f){var g=t.text.prefix;p>0&&(g+=No(n,d[0])),p>1&&(g+=No(r,d[1])),p>2&&(g+=No(i,d[2])),p>3&&(g+=No(o,d[3])),p>4&&(g+=No(s,d[4])),p>5&&(g+=No(a,d[5])),p>6&&(g+=No(u,d[6])),p>7&&(g+=No(c,d[7])),p>8&&(g+=No(l,d[8])),p>9&&(g+=No(h,d[9]));var b=Or(e,t.nodeIndex).renderText;e.renderer.setValue(b,g)}return f}(e,t,n,r,i,o,s,a,u,c,l,h);case 16384:return function(e,t,n,r,i,o,s,a,u,c,l,h){var f=jr(e,t.nodeIndex),d=f.instance,p=!1,g=void 0,b=t.bindings.length;return b>0&&Fr(e,t,0,n)&&(p=!0,g=vo(e,f,t,0,n,g)),b>1&&Fr(e,t,1,r)&&(p=!0,g=vo(e,f,t,1,r,g)),b>2&&Fr(e,t,2,i)&&(p=!0,g=vo(e,f,t,2,i,g)),b>3&&Fr(e,t,3,o)&&(p=!0,g=vo(e,f,t,3,o,g)),b>4&&Fr(e,t,4,s)&&(p=!0,g=vo(e,f,t,4,s,g)),b>5&&Fr(e,t,5,a)&&(p=!0,g=vo(e,f,t,5,a,g)),b>6&&Fr(e,t,6,u)&&(p=!0,g=vo(e,f,t,6,u,g)),b>7&&Fr(e,t,7,c)&&(p=!0,g=vo(e,f,t,7,c,g)),b>8&&Fr(e,t,8,l)&&(p=!0,g=vo(e,f,t,8,l,g)),b>9&&Fr(e,t,9,h)&&(p=!0,g=vo(e,f,t,9,h,g)),g&&d.ngOnChanges(g),65536&t.flags&&Sr(e,256,t.nodeIndex)&&d.ngOnInit(),262144&t.flags&&d.ngDoCheck(),p}(e,t,n,r,i,o,s,a,u,c,l,h);case 32:case 64:case 128:return function(e,t,n,r,i,o,s,a,u,c,l,h){var f=t.bindings,d=!1,p=f.length;if(p>0&&Br(e,t,0,n)&&(d=!0),p>1&&Br(e,t,1,r)&&(d=!0),p>2&&Br(e,t,2,i)&&(d=!0),p>3&&Br(e,t,3,o)&&(d=!0),p>4&&Br(e,t,4,s)&&(d=!0),p>5&&Br(e,t,5,a)&&(d=!0),p>6&&Br(e,t,6,u)&&(d=!0),p>7&&Br(e,t,7,c)&&(d=!0),p>8&&Br(e,t,8,l)&&(d=!0),p>9&&Br(e,t,9,h)&&(d=!0),d){var g=kr(e,t.nodeIndex),b=void 0;switch(201347067&t.flags){case 32:b=new Array(f.length),p>0&&(b[0]=n),p>1&&(b[1]=r),p>2&&(b[2]=i),p>3&&(b[3]=o),p>4&&(b[4]=s),p>5&&(b[5]=a),p>6&&(b[6]=u),p>7&&(b[7]=c),p>8&&(b[8]=l),p>9&&(b[9]=h);break;case 64:b={},p>0&&(b[f[0].name]=n),p>1&&(b[f[1].name]=r),p>2&&(b[f[2].name]=i),p>3&&(b[f[3].name]=o),p>4&&(b[f[4].name]=s),p>5&&(b[f[5].name]=a),p>6&&(b[f[6].name]=u),p>7&&(b[f[7].name]=c),p>8&&(b[f[8].name]=l),p>9&&(b[f[9].name]=h);break;case 128:var v=n;switch(p){case 1:b=v.transform(n);break;case 2:b=v.transform(r);break;case 3:b=v.transform(r,i);break;case 4:b=v.transform(r,i,o);break;case 5:b=v.transform(r,i,o,s);break;case 6:b=v.transform(r,i,o,s,a);break;case 7:b=v.transform(r,i,o,s,a,u);break;case 8:b=v.transform(r,i,o,s,a,u,c);break;case 9:b=v.transform(r,i,o,s,a,u,c,l);break;case 10:b=v.transform(r,i,o,s,a,u,c,l,h)}}g.value=b}return d}(e,t,n,r,i,o,s,a,u,c,l,h);default:throw"unreachable"}}(e,t,i,o,s,a,u,c,l,h,f,d):function(e,t,n){switch(201347067&t.flags){case 1:return function(e,t,n){for(var r=!1,i=0;i<n.length;i++)yi(e,t,i,n[i])&&(r=!0);return r}(e,t,n);case 2:return function(e,t,n){for(var r=t.bindings,i=!1,o=0;o<n.length;o++)Br(e,t,o,n[o])&&(i=!0);if(i){var s="";for(o=0;o<n.length;o++)s+=No(n[o],r[o]);s=t.text.prefix+s;var a=Or(e,t.nodeIndex).renderText;e.renderer.setValue(a,s)}return i}(e,t,n);case 16384:return function(e,t,n){for(var r=jr(e,t.nodeIndex),i=r.instance,o=!1,s=void 0,a=0;a<n.length;a++)Fr(e,t,a,n[a])&&(o=!0,s=vo(e,r,t,a,n[a],s));return s&&i.ngOnChanges(s),65536&t.flags&&Sr(e,256,t.nodeIndex)&&i.ngOnInit(),262144&t.flags&&i.ngDoCheck(),o}(e,t,n);case 32:case 64:case 128:return function(e,t,n){for(var i=t.bindings,o=!1,s=0;s<n.length;s++)Br(e,t,s,n[s])&&(o=!0);if(o){var a=kr(e,t.nodeIndex),u=void 0;switch(201347067&t.flags){case 32:u=n;break;case 64:for(u={},s=0;s<n.length;s++)u[i[s].name]=n[s];break;case 128:var c=n[0],l=n.slice(1);u=c.transform.apply(c,Object(r.g)(l))}a.value=u}return o}(e,t,n);default:throw"unreachable"}}(e,t,i)}function Ko(e){var t=e.def;if(4&t.nodeFlags)for(var n=0;n<t.nodes.length;n++){var r=t.nodes[n];if(4&r.flags){var i=Cr(e,n).template._projectedViews;if(i)for(var o=0;o<i.length;o++){var s=i[o];s.state|=32,qr(s,e)}}else 0==(4&r.childFlags)&&(n+=r.childCount)}}function Zo(e,t,n,r,i,o,s,a,u,c,l,h,f){return 0===n?function(e,t,n,r,i,o,s,a,u,c,l,h){var f=t.bindings.length;f>0&&zr(e,t,0,n),f>1&&zr(e,t,1,r),f>2&&zr(e,t,2,i),f>3&&zr(e,t,3,o),f>4&&zr(e,t,4,s),f>5&&zr(e,t,5,a),f>6&&zr(e,t,6,u),f>7&&zr(e,t,7,c),f>8&&zr(e,t,8,l),f>9&&zr(e,t,9,h)}(e,t,r,i,o,s,a,u,c,l,h,f):function(e,t,n){for(var r=0;r<n.length;r++)zr(e,t,r,n[r])}(e,t,r),!1}function Yo(e,t){if(Er(e,t.nodeIndex).dirty)throw Pr(xr.createDebugContext(e,t.nodeIndex),"Query "+t.query.id+" not dirty","Query "+t.query.id+" dirty",0!=(1&e.state))}function $o(e){if(!(128&e.state)){if(Xo(e,Qo.Destroy),Jo(e,Qo.Destroy),yo(e,131072),e.disposables)for(var t=0;t<e.disposables.length;t++)e.disposables[t]();!function(e){if(16&e.state){var t=Wr(e);if(t){var n=t.template._projectedViews;n&&(Ai(n,n.indexOf(e)),xr.dirtyParentQueries(e))}}}(e),e.renderer.destroyNode&&function(e){for(var t=e.def.nodes.length,n=0;n<t;n++){var r=e.def.nodes[n];1&r.flags?e.renderer.destroyNode(Cr(e,n).renderElement):2&r.flags?e.renderer.destroyNode(Or(e,n).renderText):(67108864&r.flags||134217728&r.flags)&&Er(e,n).destroy()}}(e),Yr(e)&&e.renderer.destroy(),e.state|=128}}var Qo=function(e){return e[e.CreateViewNodes=0]="CreateViewNodes",e[e.CheckNoChanges=1]="CheckNoChanges",e[e.CheckNoChangesProjectedViews=2]="CheckNoChangesProjectedViews",e[e.CheckAndUpdate=3]="CheckAndUpdate",e[e.CheckAndUpdateProjectedViews=4]="CheckAndUpdateProjectedViews",e[e.Destroy=5]="Destroy",e}({});function Jo(e,t){var n=e.def;if(33554432&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];33554432&i.flags?es(Cr(e,r).componentView,t):0==(33554432&i.childFlags)&&(r+=i.childCount)}}function Xo(e,t){var n=e.def;if(16777216&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];if(16777216&i.flags)for(var o=Cr(e,r).viewContainer._embeddedViews,s=0;s<o.length;s++)es(o[s],t);else 0==(16777216&i.childFlags)&&(r+=i.childCount)}}function es(e,t){var n=e.state;switch(t){case Qo.CheckNoChanges:0==(128&n)&&(12==(12&n)?qo(e):64&n&&ts(e,Qo.CheckNoChangesProjectedViews));break;case Qo.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?qo(e):64&n&&ts(e,t));break;case Qo.CheckAndUpdate:0==(128&n)&&(12==(12&n)?Go(e):64&n&&ts(e,Qo.CheckAndUpdateProjectedViews));break;case Qo.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?Go(e):64&n&&ts(e,t));break;case Qo.Destroy:$o(e);break;case Qo.CreateViewNodes:Ho(e)}}function ts(e,t){Xo(e,t),Jo(e,t)}function ns(e,t,n,r){if(e.def.nodeFlags&t&&e.def.nodeFlags&n)for(var i=e.def.nodes.length,o=0;o<i;o++){var s=e.def.nodes[o];if(s.flags&t&&s.flags&n)switch(xr.setCurrentNode(e,s.nodeIndex),r){case 0:Oo(e,s);break;case 1:Yo(e,s)}s.childFlags&t&&s.childFlags&n||(o+=s.childCount)}}var rs=!1;function is(e,t,n,r,i,o){var s=i.injector.get(tn);return Uo(ss(e,i,s,t,n),r,o)}function os(e,t,n,r,i,o){var s=i.injector.get(tn),a=ss(e,i,new Fs(s),t,n),u=bs(r);return Ls(js.create,Uo,null,[a,u,o])}function ss(e,t,n,r,i){var o=t.injector.get(wr),s=t.injector.get(_e),a=n.createRenderer(null,null);return{ngModule:t,injector:e,projectableNodes:r,selectorOrNode:i,sanitizer:o,rendererFactory:n,renderer:a,errorHandler:s}}function as(e,t,n,r){var i=bs(n);return Ls(js.create,Lo,null,[e,t,i,r])}function us(e,t,n,r){return n=fs.get(t.element.componentProvider.provider.token)||bs(n),Ls(js.create,Fo,null,[e,t,n,r])}function cs(e,t,n,r){return Ki(e,t,n,function(e){var t=function(e){var t=!1,n=!1;return 0===ls.size?{hasOverrides:t,hasDeprecatedOverrides:n}:(e.providers.forEach(function(e){var r=ls.get(e.token);3840&e.flags&&r&&(t=!0,n=n||r.deprecatedBehavior)}),e.modules.forEach(function(e){hs.forEach(function(r,i){i.ngInjectableDef.providedIn===e&&(t=!0,n=n||r.deprecatedBehavior)})}),{hasOverrides:t,hasDeprecatedOverrides:n})}(e),n=t.hasDeprecatedOverrides;return t.hasOverrides?(function(e){for(var t=0;t<e.providers.length;t++){var r=e.providers[t];n&&(r.flags|=4096);var i=ls.get(r.token);i&&(r.flags=-3841&r.flags|i.flags,r.deps=Xr(i.deps),r.value=i.value)}if(hs.size>0){var o=new Set(e.modules);hs.forEach(function(t,r){if(o.has(r.ngInjectableDef.providedIn)){var i={token:r,flags:t.flags|(n?4096:0),deps:Xr(t.deps),value:t.value,index:e.providers.length};e.providers.push(i),e.providersByKey[Nr(r)]=i}})}}(e=e.factory(function(){return Ir})),e):e}(r))}var ls=new Map,hs=new Map,fs=new Map;function ds(e){ls.set(e.token,e),"function"==typeof e.token&&e.token.ngInjectableDef&&"function"==typeof e.token.ngInjectableDef.providedIn&&hs.set(e.token,e)}function ps(e,t){var n=ni(t.viewDefFactory),r=ni(n.nodes[0].element.componentView);fs.set(e,r)}function gs(){ls.clear(),hs.clear(),fs.clear()}function bs(e){if(0===ls.size)return e;var t=function(e){for(var t=[],n=null,r=0;r<e.nodes.length;r++){var i=e.nodes[r];1&i.flags&&(n=i),n&&3840&i.flags&&ls.has(i.provider.token)&&(t.push(n.nodeIndex),n=null)}return t}(e);if(0===t.length)return e;e=e.factory(function(){return Ir});for(var n=0;n<t.length;n++)r(e,t[n]);return e;function r(e,t){for(var n=t+1;n<e.nodes.length;n++){var r=e.nodes[n];if(1&r.flags)return;if(3840&r.flags){var i=r.provider,o=ls.get(i.token);o&&(r.flags=-3841&r.flags|o.flags,i.deps=Xr(o.deps),i.value=o.value)}}}}function vs(e,t,n,r,i,o,s,a,u,c,l,h,f){var d=e.def.nodes[t];return Wo(e,d,n,r,i,o,s,a,u,c,l,h,f),224&d.flags?kr(e,t).value:void 0}function ys(e,t,n,r,i,o,s,a,u,c,l,h,f){var d=e.def.nodes[t];return Zo(e,d,n,r,i,o,s,a,u,c,l,h,f),224&d.flags?kr(e,t).value:void 0}function ms(e){return Ls(js.detectChanges,Go,null,[e])}function ws(e){return Ls(js.checkNoChanges,qo,null,[e])}function _s(e){return Ls(js.destroy,$o,null,[e])}var Ss,Os,Cs,js=function(e){return e[e.create=0]="create",e[e.detectChanges=1]="detectChanges",e[e.checkNoChanges=2]="checkNoChanges",e[e.destroy=3]="destroy",e[e.handleEvent=4]="handleEvent",e}({});function ks(e,t){Os=e,Cs=t}function Es(e,t,n,r){return ks(e,t),Ls(js.handleEvent,e.def.handleEvent,null,[e,t,n,r])}function xs(e,t){if(128&e.state)throw Ar(js[Ss]);return ks(e,Ns(e,0)),e.def.updateDirectives(function(e,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var s=e.def.nodes[n];return 0===t?Ts(e,s,r,i):As(e,s,r,i),16384&s.flags&&ks(e,Ns(e,n)),224&s.flags?kr(e,s.nodeIndex).value:void 0},e)}function Ps(e,t){if(128&e.state)throw Ar(js[Ss]);return ks(e,Rs(e,0)),e.def.updateRenderer(function(e,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var s=e.def.nodes[n];return 0===t?Ts(e,s,r,i):As(e,s,r,i),3&s.flags&&ks(e,Rs(e,n)),224&s.flags?kr(e,s.nodeIndex).value:void 0},e)}function Ts(e,t,n,i){if(Wo.apply(void 0,Object(r.g)([e,t,n],i))){var o=1===n?i[0]:i;if(16384&t.flags){for(var s={},a=0;a<t.bindings.length;a++){var u=t.bindings[a],c=o[a];8&u.flags&&(s[(d=u.nonMinifiedName,p=void 0,p=d.replace(/[$@]/g,"_"),"ng-reflect-"+(d=p.replace(Is,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return"-"+e[1].toLowerCase()})))]=Ms(c))}var l=t.parent,h=Cr(e,l.nodeIndex).renderElement;if(l.element.name)for(var f in s)null!=(c=s[f])?e.renderer.setAttribute(h,f,c):e.renderer.removeAttribute(h,f);else e.renderer.setValue(h,"bindings="+JSON.stringify(s,null,2))}}var d,p}function As(e,t,n,i){Zo.apply(void 0,Object(r.g)([e,t,n],i))}var Is=/([A-Z])/g;function Ms(e){try{return null!=e?e.toString().slice(0,30):e}catch(t){return"[ERROR] Exception while trying to serialize the value"}}function Ns(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(16384&r.flags&&r.bindings&&r.bindings.length)return n}return null}function Rs(e,t){for(var n=t;n<e.def.nodes.length;n++){var r=e.def.nodes[n];if(3&r.flags&&r.bindings&&r.bindings.length)return n}return null}var Ds=function(){function e(e,t){this.view=e,this.nodeIndex=t,null==t&&(this.nodeIndex=t=0),this.nodeDef=e.def.nodes[t];for(var n=this.nodeDef,r=e;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&r;)n=Kr(r),r=r.parent;this.elDef=n,this.elView=r}return Object.defineProperty(e.prototype,"elOrCompView",{get:function(){return Cr(this.elView,this.elDef.nodeIndex).componentView||this.view},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return zi(this.elView,this.elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"component",{get:function(){return this.elOrCompView.component},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"context",{get:function(){return this.elOrCompView.context},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"providerTokens",{get:function(){var e=[];if(this.elDef)for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&e.push(n.provider.token),t+=n.childCount}return e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"references",{get:function(){var e={};if(this.elDef){Vs(this.elView,this.elDef,e);for(var t=this.elDef.nodeIndex+1;t<=this.elDef.nodeIndex+this.elDef.childCount;t++){var n=this.elView.def.nodes[t];20224&n.flags&&Vs(this.elView,n,e),t+=n.childCount}}return e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentRenderElement",{get:function(){var e=function(e){for(;e&&!Yr(e);)e=e.parent;return e.parent?Cr(e.parent,Kr(e).nodeIndex):null}(this.elOrCompView);return e?e.renderElement:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"renderNode",{get:function(){return 2&this.nodeDef.flags?Zr(this.view,this.nodeDef):Zr(this.elView,this.elDef)},enumerable:!0,configurable:!0}),e.prototype.logError=function(e){for(var t,n,i=[],o=1;o<arguments.length;o++)i[o-1]=arguments[o];2&this.nodeDef.flags?(t=this.view.def,n=this.nodeDef.nodeIndex):(t=this.elView.def,n=this.elDef.nodeIndex);var s=function(e,t){for(var n=-1,r=0;r<=t;r++)3&e.nodes[r].flags&&n++;return n}(t,n),a=-1;t.factory(function(){var t;return++a===s?(t=e.error).bind.apply(t,Object(r.g)([e],i)):Ir}),a<s&&(e.error("Illegal state: the ViewDefinitionFactory did not call the logger!"),e.error.apply(e,Object(r.g)(i)))},e}();function Vs(e,t,n){for(var r in t.references)n[r]=jo(e,t,t.references[r])}function Ls(e,t,n,r){var i=Ss,o=Os,s=Cs;try{Ss=e;var a=t.apply(n,r);return Os=o,Cs=s,Ss=i,a}catch(u){if(ye(u)||!Os)throw u;throw function(e,t){return e instanceof Error||(e=new Error(e.toString())),Tr(e,t),e}(u,Us())}}function Us(){return Os?new Ds(Os,Cs):null}var Fs=function(){function e(e){this.delegate=e}return e.prototype.createRenderer=function(e,t){return new Bs(this.delegate.createRenderer(e,t))},e.prototype.begin=function(){this.delegate.begin&&this.delegate.begin()},e.prototype.end=function(){this.delegate.end&&this.delegate.end()},e.prototype.whenRenderingDone=function(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)},e}(),Bs=function(){function e(e){this.delegate=e,this.data=this.delegate.data}return e.prototype.destroyNode=function(e){!function(e){wn.delete(e.nativeNode)}(_n(e)),this.delegate.destroyNode&&this.delegate.destroyNode(e)},e.prototype.destroy=function(){this.delegate.destroy()},e.prototype.createElement=function(e,t){var n=this.delegate.createElement(e,t),r=Us();if(r){var i=new vn(n,null,r);i.name=e,Sn(i)}return n},e.prototype.createComment=function(e){var t=this.delegate.createComment(e),n=Us();return n&&Sn(new bn(t,null,n)),t},e.prototype.createText=function(e){var t=this.delegate.createText(e),n=Us();return n&&Sn(new bn(t,null,n)),t},e.prototype.appendChild=function(e,t){var n=_n(e),r=_n(t);n&&r&&n instanceof vn&&n.addChild(r),this.delegate.appendChild(e,t)},e.prototype.insertBefore=function(e,t,n){var r=_n(e),i=_n(t),o=_n(n);r&&i&&r instanceof vn&&r.insertBefore(o,i),this.delegate.insertBefore(e,t,n)},e.prototype.removeChild=function(e,t){var n=_n(e),r=_n(t);n&&r&&n instanceof vn&&n.removeChild(r),this.delegate.removeChild(e,t)},e.prototype.selectRootElement=function(e){var t=this.delegate.selectRootElement(e),n=Us();return n&&Sn(new vn(t,null,n)),t},e.prototype.setAttribute=function(e,t,n,r){var i=_n(e);i&&i instanceof vn&&(i.attributes[r?r+":"+t:t]=n),this.delegate.setAttribute(e,t,n,r)},e.prototype.removeAttribute=function(e,t,n){var r=_n(e);r&&r instanceof vn&&(r.attributes[n?n+":"+t:t]=null),this.delegate.removeAttribute(e,t,n)},e.prototype.addClass=function(e,t){var n=_n(e);n&&n instanceof vn&&(n.classes[t]=!0),this.delegate.addClass(e,t)},e.prototype.removeClass=function(e,t){var n=_n(e);n&&n instanceof vn&&(n.classes[t]=!1),this.delegate.removeClass(e,t)},e.prototype.setStyle=function(e,t,n,r){var i=_n(e);i&&i instanceof vn&&(i.styles[t]=n),this.delegate.setStyle(e,t,n,r)},e.prototype.removeStyle=function(e,t,n){var r=_n(e);r&&r instanceof vn&&(r.styles[t]=null),this.delegate.removeStyle(e,t,n)},e.prototype.setProperty=function(e,t,n){var r=_n(e);r&&r instanceof vn&&(r.properties[t]=n),this.delegate.setProperty(e,t,n)},e.prototype.listen=function(e,t,n){if("string"!=typeof e){var r=_n(e);r&&r.listeners.push(new gn(t,n))}return this.delegate.listen(e,t,n)},e.prototype.parentNode=function(e){return this.delegate.parentNode(e)},e.prototype.nextSibling=function(e){return this.delegate.nextSibling(e)},e.prototype.setValue=function(e,t){return this.delegate.setValue(e,t)},e}();function zs(e,t,n){return new Hs(e,t,n)}var Hs=function(e){function t(t,n,r){var i=e.call(this)||this;return i.moduleType=t,i._bootstrapComponents=n,i._ngModuleDefFactory=r,i}return Object(r.c)(t,e),t.prototype.create=function(e){!function(){if(!rs){rs=!0;var e=Wt()?{setCurrentNode:ks,createRootView:os,createEmbeddedView:as,createComponentView:us,createNgModuleRef:cs,overrideProvider:ds,overrideComponentView:ps,clearOverrides:gs,checkAndUpdateView:ms,checkNoChangesView:ws,destroyView:_s,createDebugContext:function(e,t){return new Ds(e,t)},handleEvent:Es,updateDirectives:xs,updateRenderer:Ps}:{setCurrentNode:function(){},createRootView:is,createEmbeddedView:Lo,createComponentView:Fo,createNgModuleRef:Ki,overrideProvider:Ir,overrideComponentView:Ir,clearOverrides:Ir,checkAndUpdateView:Go,checkNoChangesView:qo,destroyView:$o,createDebugContext:function(e,t){return new Ds(e,t)},handleEvent:function(e,t,n,r){return e.def.handleEvent(e,t,n,r)},updateDirectives:function(e,t){return e.def.updateDirectives(0===t?vs:ys,e)},updateRenderer:function(e,t){return e.def.updateRenderer(0===t?vs:ys,e)}};xr.setCurrentNode=e.setCurrentNode,xr.createRootView=e.createRootView,xr.createEmbeddedView=e.createEmbeddedView,xr.createComponentView=e.createComponentView,xr.createNgModuleRef=e.createNgModuleRef,xr.overrideProvider=e.overrideProvider,xr.overrideComponentView=e.overrideComponentView,xr.clearOverrides=e.clearOverrides,xr.checkAndUpdateView=e.checkAndUpdateView,xr.checkNoChangesView=e.checkNoChangesView,xr.destroyView=e.destroyView,xr.resolveDep=go,xr.createDebugContext=e.createDebugContext,xr.handleEvent=e.handleEvent,xr.updateDirectives=e.updateDirectives,xr.updateRenderer=e.updateRenderer,xr.dirtyParentQueries=So}}();var t=function(e){var t=Array.from(e.providers),n=Array.from(e.modules),r={};for(var i in e.providersByKey)r[i]=e.providersByKey[i];return{factory:e.factory,isRoot:e.isRoot,providers:t,modules:n,providersByKey:r}}(ni(this._ngModuleDefFactory));return xr.createNgModuleRef(this.moduleType,e||K.NULL,this._bootstrapComponents,t)},t}(Ot),qs=16,Gs=0,Ws=1,Ks=2,Zs=3,Ys=4,$s=5,Qs=6,Js=7,Xs=8,ea=9,ta=10,na=11,ra=14;function ia(e,t,n){e.afterContentInit&&(t.contentHooks||(t.contentHooks=[])).push(n,e.afterContentInit),e.afterContentChecked&&((t.contentHooks||(t.contentHooks=[])).push(n,e.afterContentChecked),(t.contentCheckHooks||(t.contentCheckHooks=[])).push(n,e.afterContentChecked))}function oa(e,t,n){e.afterViewInit&&(t.viewHooks||(t.viewHooks=[])).push(n,e.afterViewInit),e.afterViewChecked&&((t.viewHooks||(t.viewHooks=[])).push(n,e.afterViewChecked),(t.viewCheckHooks||(t.viewCheckHooks=[])).push(n,e.afterViewChecked))}function sa(e,t,n){null!=e.onDestroy&&(t.destroyHooks||(t.destroyHooks=[])).push(n,e.onDestroy)}function aa(e,t,n){16&e[Ys]&&(ua(e[Js],t.initHooks,t.checkHooks,n),e[Ys]&=-17)}function ua(e,t,n,r){var i=r?t:n;i&&ca(e,i)}function ca(e,t){for(var n=0;n<t.length;n+=2)t[n+1].call(e[t[n]])}var la=0,ha=4,fa="ngProjectAs";function da(e){return!!e.listen}var pa={createRenderer:function(e,t){return document}};function ga(e){return Array.isArray(e)?e[0]:e}function ba(e){if(2===e.tNode.type){var t=e.data;return t[Ks]?t[Ks][$s]:null}return e.tNode.next?e.view[e.tNode.next.index]:null}function va(e){return e.tNode.child?ga((2===e.tNode.type?e.data:e.view)[e.tNode.child.index]):null}function ya(e){if(-1===e.tNode.index&&2===e.tNode.type){var t=e.data[ra];return-1===t?null:e.view[t].dynamicLContainerNode}var n=e.tNode.parent;return ga(n?e.view[n.index]:e.view[$s])}var ma=[];function wa(e){for(var t=e[$s];2===t.tNode.type;)t=(e=e[Ws])[$s];return t}function _a(e,t,n,r,i){0===e?da(t)?t.insertBefore(n,r,i):n.insertBefore(r,i,!0):1===e?da(t)?t.removeChild(n,r):n.removeChild(r):2===e&&t.destroyNode(r)}function Sa(e){if(-1===e[Gs].childIndex)return null;var t=e[e[Gs].childIndex];return t.data?t.data:t.dynamicLContainerNode.data}function Oa(e,t){var n;return(n=e[$s])&&2===n.tNode.type?ya(n).data:e[Ws]===t?null:e[Ws]}function Ca(e){if(e[Gs]){var t=e;!function(e){var t=e[Gs].cleanup;if(null!=t){for(var n=0;n<t.length-1;n+=2)"string"==typeof t[n]?(ga(e[t[n+1]]).native.removeEventListener(t[n],e[Xs][t[n+2]],t[n+3]),n+=2):"number"==typeof t[n]?(0,e[Xs][t[n]])():t[n].call(e[Xs][t[n+1]]);e[Xs]=null}}(t),function(e){var t,n=e[Gs];null!=n&&null!=(t=n.destroyHooks)&&ca(e[Js],t)}(t),(r=(n=t)[Gs]&&n[Gs].pipeDestroyHooks)&&ca(n,r),-1===t[Gs].id&&da(t[na])&&t[na].destroy()}var n,r}var ja,ka,Ea,xa,Pa,Ta,Aa,Ia,Ma,Na="__ngHostLNode__",Ra=Promise.resolve(null),Da=[0,0],Va=new Array(qs).fill(null),La=!1,Ua=!0;function Fa(e,t){var n=Ia;return Ma=e&&e[Js],Pa=e&&e[Gs],Aa=e&&1==(1&e[Ys]),Ua=e&&Pa.firstTemplatePass,ja=e&&e[na],null!=t&&(Ea=t,xa=!0),Ia=e,Ta=e&&e[Zs],n}function Ba(e,t){t||(La||ua(Ma,Pa.viewHooks,Pa.viewCheckHooks,Aa),Ia[Ys]&=-6),Ia[Ys]|=16,Ia[Qs]=-1,Fa(e,null)}function za(){La||aa(Ia,Pa,Aa),function(e){for(var t=Sa(Ia);null!==t;t=t[Ks])if(t.length<qs&&null===t[la])for(var n=t,r=0;r<n[ha].length;r++){var i=n[ha][r],o=i.data;Wa(i,o[Gs],o[ea],2)}}(),La||ua(Ma,Pa.contentHooks,Pa.contentCheckHooks,Aa),Pa.firstTemplatePass=Ua=!1,Ha(Pa.hostBindings),function(e){if(null!=e.contentQueries)for(var t=0;t<e.contentQueries.length;t+=2){var n=e.contentQueries[t];e.directives[n].contentQueriesRefresh(n,e.contentQueries[t+1])}}(Pa),function(e){if(null!=e)for(var t=0;t<e.length;t+=2)eu(e[t],e[t+1])}(Pa.components)}function Ha(e){if(null!=e)for(var t=Pa.directives,n=0;n<e.length;n+=2){var r=e[n],i=t[r];i.hostBindings&&i.hostBindings(r,e[n+1])}}function qa(e,t,n,r,i){return[t,Ia,null,null,25|r,null,-1,null,null,n,Ia&&Ia[ta],e,i||null,null,-1,null]}function Ga(e,t,n,r,i,o){var s=xa?Ea:Ea&&ya(Ea),a=s&&s.view===Ia?s.tNode:null,u=(xa?Ta:Ea&&Ea.queries)||s&&s.queries&&s.queries.child(),c=null!=o,l=function(e,t,n,r,i,o){return{native:r,view:Ia,nodeInjector:n?n.nodeInjector:null,data:i,queries:o,tNode:null,dynamicLContainerNode:null}}(0,0,s,n,c?o:null,u);if(-1===e||2===t)l.tNode=(o?o[Gs].node:null)||Xa(t,e,null,null,a,null);else{var h=e+qs,f=Pa.data;if(Ia[h]=l,h>=f.length){var d=f[h]=Xa(t,h,r,i,a,null);if(!xa&&Ea){var p=Ea.tNode;p.next=d,p.dynamicContainerNode&&(p.dynamicContainerNode.next=d)}}l.tNode=f[h],xa&&(Ta=null,(null==Ea.tNode.child&&Ea.view===Ia||2===Ea.tNode.type)&&(Ea.tNode.child=l.tNode))}if(2==(2&t)&&c){var g=o;g[$s]=l,Ua&&(g[Gs].node=l.tNode)}return Ea=l,xa=!0,l}function Wa(e,t,n,r){var i,o=xa,s=Ea;if(null==e.data[Ws]&&e.data[ea]&&!t.template)nu(e.data[ea]);else try{xa=!0,Ea=null,i=Fa(e.data,e),$a(),t.template(r,n),2&r?za():e.data[Gs].firstTemplatePass=Ua=!1}finally{Ba(i,1==(1&r)),xa=o,Ea=s}return e}function Ka(e,t,n,r){var i=Fa(t,e);try{ka.begin&&ka.begin(),r?($a(),r(Za(t),n),za()):(La||(aa(Ia,Pa,Aa),ua(Ma,Pa.contentHooks,Pa.contentCheckHooks,Aa)),Ha(Da),eu(0,qs))}finally{ka.end&&ka.end(),Ba(i)}}function Za(e){return 1&e[Ys]?3:2}var Ya=null;function $a(){Ya=null}function Qa(e,t,n,r,i){return{id:e,template:t,viewQuery:i,node:null,data:Va.slice(),childIndex:-1,bindingStartIndex:-1,directives:null,firstTemplatePass:!0,initHooks:null,checkHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,pipeDestroyHooks:null,cleanup:null,hostBindings:null,contentQueries:null,components:null,directiveRegistry:"function"==typeof n?n():n,pipeRegistry:"function"==typeof r?r():r,currentMatches:null}}function Ja(e,t){ka=e;var n=e.createRenderer(null,null);return"string"==typeof t?da(n)?n.selectRootElement(t):n.querySelector(t):t}function Xa(e,t,n,r,i,o){return{type:e,index:t,flags:0,tagName:n,attrs:r,localNames:null,initialInputs:void 0,inputs:void 0,outputs:void 0,tViews:o,next:null,child:null,parent:i,dynamicContainerNode:null,detached:null,stylingTemplate:null,projection:null}}function eu(e,t){var n=Ia[t],r=n.data;tu(r)&&6&r[Ys]&&ou(r,n,Ma[e])}function tu(e){return 8==(8&e[Ys])}function nu(e){for(var t=0;t<e.components.length;t++){var n=e.components[t];Ka(su(n),ru(n),n)}}function ru(e){for(var t=su(e).view;t[Ws];)t=t[Ws];return t}function iu(e){var t=su(e);ou(t.data,t,e)}function ou(e,t,n){var r=Fa(e,t),i=e[Gs],o=i.template,s=i.viewQuery;try{$a(),function(t,n,r){t&&1&e[Ys]&&t(1,r)}(s,0,n),o(Za(e),n),za(),function(e,t){e&&e(2,t)}(s,n)}finally{Ba(r)}}function su(e){return e[Na]}var au=Ra;function uu(e){return{components:[],scheduler:e,clean:au}}var cu=function(){function e(e,t){this._view=e,this._appRef=null,this._viewContainerRef=null,this._lViewNode=null,this.context=t}return e.prototype._setComponentContext=function(e,t){this._view=e,this.context=t},Object.defineProperty(e.prototype,"destroyed",{get:function(){return 32==(32&this._view[Ys])},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){var e,t;this._viewContainerRef&&tu(this._view)&&(this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),this._viewContainerRef=null),da(t=(e=this._view)[na])&&t.destroyNode&&function(t,n,r,i,o,s){for(var a=e[$s],u=-1;a;){var c=null,l=a.tNode.type;if(3===l)_a(2,i,null,a.native,s),a.dynamicLContainerNode&&_a(2,i,null,a.dynamicLContainerNode.native,s);else if(0===l){_a(2,i,null,a.native,s);var h=a,f=h.dynamicLContainerNode?h.dynamicLContainerNode.data:h.data;(c=f[ha].length?va(f[ha][0]):null)&&(s=h.dynamicLContainerNode?h.dynamicLContainerNode.native:h.native)}else if(1===l){var d=wa(a.view),p=d.tNode.projection[a.tNode.projection];ma[++u]=a,c=p?d.data[Ws][p.index]:null}else c=va(a);if(null===c)for(null===(c=ba(a))&&8192&a.tNode.flags&&(c=ba(ma[u--]));a&&!c;){if(null===(a=ya(a))||a===n)return null;a.tNode.next||0!==l||(s=a.native),c=ba(a)}a=c}}(0,e[$s],0,t),function(e){if(-1===e[Gs].childIndex)return Ca(e);for(var t=Sa(e);t;){var n=null;if(t.length>=qs?t[Gs].childIndex>-1&&(n=Sa(t)):t[ha].length&&(n=t[ha][0].data),null==n){for(;t&&!t[Ks]&&t!==e;)Ca(t),t=Oa(t,e);Ca(t||e),n=t&&t[Ks]}t=n}}(e),e[Ys]|=32},e.prototype.onDestroy=function(e){var t,n;n=e,function(e){return e[Xs]||(e[Xs]=[])}(t=this._view).push(n),t[Gs].firstTemplatePass&&function(e){return e[Gs].cleanup||(e[Gs].cleanup=[])}(t).push(t[Xs].length-1,null)},e.prototype.markForCheck=function(){!function(e){for(var t=e;null!=t[Ws];)t[Ys]|=4,t=t[Ws];var n,r;t[Ys]|=4,(n=t[ea]).clean==Ra&&(n.clean=new Promise(function(e){return r=e}),n.scheduler(function(){nu(n),r(null),n.clean=Ra}))}(this._view)},e.prototype.detach=function(){this._view[Ys]&=-9},e.prototype.reattach=function(){this._view[Ys]|=8},e.prototype.detectChanges=function(){iu(this.context)},e.prototype.checkNoChanges=function(){!function(e){La=!0;try{iu(e)}finally{La=!1}}(this.context)},e.prototype.attachToViewContainerRef=function(e){this._viewContainerRef=e},e.prototype.detachFromAppRef=function(){this._appRef=null},e.prototype.attachToAppRef=function(e){this._appRef=e},e}(),lu=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.resolveComponentFactory=function(e){return new pu(e.ngComponentDef)},t}(mt);function hu(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}var fu=new l("ROOT_CONTEXT_TOKEN",{providedIn:"root",factory:function(){return uu(le(du))}}),du=new l("SCHEDULER_TOKEN",{providedIn:"root",factory:function(){return requestAnimationFrame.bind(window)}}),pu=function(e){function t(t){var n=e.call(this)||this;return n.componentDef=t,n.componentType=t.type,n.selector=t.selectors[0][0],n.ngContentSelectors=[],n}return Object(r.c)(t,e),Object.defineProperty(t.prototype,"inputs",{get:function(){return hu(this.componentDef.inputs)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outputs",{get:function(){return hu(this.componentDef.outputs)},enumerable:!0,configurable:!0}),t.prototype.create=function(e,t,n,r){var i,o,s=void 0===n,a=r?r.injector.get(tn):pa,u=s?(i=this.selector,da(o=a.createRenderer(null,this.componentDef.rendererType)||ja)?o.createElement(i,Ya):null===Ya?o.createElement(i):o.createElementNS(Ya,i)):Ja(a,n),c=r&&!s?r.injector.get(fu):uu(requestAnimationFrame.bind(window)),l=qa(a.createRenderer(u,this.componentDef.rendererType),Qa(-1,null,null,null,null),c,this.componentDef.onPush?4:2);l[ta]=r&&r.injector||null;var h,f,d=Fa(l,null);try{if(a.begin&&a.begin(),f=function(e,t,n,r){xa=!1,Ea=null;var i,o=Ga(0,3,t,null,null,qa(ja,(i=n.template).ngPrivateData||(i.ngPrivateData=Qa(-1,i,n.directiveDefs,n.pipeDefs,n.viewQuery)),null,n.onPush?4:2,r));return Ua&&(o.tNode.flags=4096,n.diPublic&&n.diPublic(n),Pa.directives=[n]),o}(0,u,this.componentDef),c.components.push(h=function(e,t,n){if(Object.defineProperty(t,Na,{enumerable:!1,value:Ea}),null==Ma&&(Ia[Js]=Ma=[]),Ma[e]=t,Ua){var r=Ea.tNode.flags;0==(4095&r)?Ea.tNode.flags=e<<14|4096&r|1:Ea.tNode.flags++}else{var i=n.diPublic;i&&i(n)}return null!=n.attributes&&3==Ea.tNode.type&&function(e,t){for(var n=da(ja),r=0;r<t.length;){var i=t[r];if(1===i)break;if(i===fa)r+=2;else if(0===i){var o=t[r+1],s=t[r+2],a=t[r+3];n?ja.setAttribute(e,s,a,o):e.setAttributeNS(o,s,a),r+=4}else a=t[r+1],n?ja.setAttribute(e,i,a):e.setAttribute(i,a),r+=2}}(Ea.native,n.attributes),t}(0,this.componentDef.factory(),this.componentDef)),function(e,t,n){e&&null!=e.changeDetectorRef&&e.changeDetectorRef._setComponentContext(f.data,h)}(f.nodeInjector),function(e,t){var n=su(e),r=n.view[Gs];(function(e,t,n,r){t&&(r.initHooks||(r.initHooks=[])).push(0,t),n&&((r.initHooks||(r.initHooks=[])).push(0,n),(r.checkHooks||(r.checkHooks=[])).push(0,n))})(0,t.onInit,t.doCheck,r),function(e,t){if(t.firstTemplatePass)for(var n=e>>14,r=n+(4095&e),i=n;i<r;i++){var o=t.directives[i];ia(o,t,i),oa(o,t,i),sa(o,t,i)}}(n.tNode.flags,r)}(h,this.componentDef),t)for(var p=0,g=f.tNode.projection=[],b=0;b<t.length;b++){for(var v=t[b],y=null,m=null,w=0;w<v.length;w++){var _=Ga(++p,3,v[w],null,null);m?m.next=_.tNode:y=_.tNode,m=_.tNode}g.push(y)}Wa(f,f.data[Gs],h,1),f.data[Ys]&=-2}finally{Fa(d,null),a.end&&a.end()}var S=new gu(this.componentType,h,l,e,u);return s&&(S.hostView._lViewNode.tNode.child=f.tNode),S},t}(dt),gu=function(e){function t(t,n,r,i,o){var s=e.call(this)||this;return s.destroyCbs=[],s.instance=n,s.hostView=s.changeDetectorRef=new cu(r,n),s.hostView._lViewNode=Ga(-1,2,null,null,null,r),s.injector=i,s.location=new on(o),s.componentType=t,s}return Object(r.c)(t,e),t.prototype.destroy=function(){this.destroyCbs.forEach(function(e){return e()}),this.destroyCbs=null},t.prototype.onDestroy=function(e){this.destroyCbs.push(e)},t}(ft),bu={provide:mt,useFactory:function(){return new lu},deps:[]},vu=function(e){function t(t,n){var r=e.call(this)||this;return r._bootstrapComponents=[],r.destroyCbs=[],r._bootstrapComponents=t.ngModuleDef.bootstrap,r.injector=function(e,t,n){return void 0===t&&(t=null),void 0===n&&(n=null),t=t||We(),new Ke(e,n,t)}(t,n,[bu,{provide:St,useValue:r}]),r.instance=r.injector.get(t),r.componentFactoryResolver=new lu,r}return Object(r.c)(t,e),t.prototype.destroy=function(){this.destroyCbs.forEach(function(e){return e()}),this.destroyCbs=null},t.prototype.onDestroy=function(e){this.destroyCbs.push(e)},t}(St);!function(e){function t(t){var n=e.call(this)||this;return n.moduleType=t,n}Object(r.c)(t,e),t.prototype.create=function(e){return new vu(this.moduleType,e)}}(Ot)}).call(this,n("yLpj"))},Cf0Y:function(e,t,n){"use strict";n.d(t,"b",function(){return i}),n.d(t,"a",function(){return o}),n("+NEN"),n("jGGy");var r=n("67Y/"),i=function(){return function(){this.enabled=!0,this.domain=0}}(),o=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getConfigSync=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"configsync",section:"global"}]}).pipe(Object(r.a)(function(e){return e.result[1].values})).pipe(Object(r.a)(function(e){var t=new i;return t.enabled="1"==e.enabled,t.domain=Number(e.domain),t}))},e.prototype.saveConfigSync=function(e){var t=this.authService.getSid(),n=[];return n.push([t,"uci","set",{config:"configsync",section:"global",values:e}]),n.push([t,"uci","commit",{config:"configsync"}]),this.ubusService.call({data:n})},e}()},ClyA:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("jFtu");var r=n("K9Ia"),i=function(){function e(e){this.bsModalRef=e,this.result=new r.a,this.title=null}return e.prototype.confirm=function(){this.ok&&this.ok(),this.result.next(!0),this.bsModalRef.hide()},e.prototype.cancel=function(){this.result.next(!1),this.bsModalRef.hide()},e.prototype.handleKeyboardEvent=function(e){var t=e.keyCode;13===t&&this.confirm(),27===t&&this.cancel()},e}()},DKTb:function(e,t,n){"use strict";function r(e){setTimeout(function(){throw e})}n.d(t,"a",function(){return r})},DSB1:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){return e[e.Success=0]="Success",e[e.Error=1]="Error",e[e.Info=2]="Info",e[e.Warning=3]="Warning",e}({})},EAhB:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){}return e.prototype.ngOnInit=function(){},e}()},EDOA:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("+3se"),i=function(){function e(){this.indoor5GAvailable=function(e){return Object(r.g)(e.indoorOutdoor)&&e.indoorOutdoor&&5==e.frequency}}return e.prototype.channelInRange=function(e,t,n){if("auto"===t||"number"!=typeof e)return!0;e=Number(e),t=Number(t);var r={VHT80:[[36,40,44,48],[52,56,60,64],[100,104,108,112],[116,120,124,128]],VHT40:[[36,40],[44,48],[52,56],[60,64],[100,104],[108,112],[116,120],[124,128],[132,136]]};if(r[n]){for(var i=0;i<r[n].length;i++)if(r[n][i].indexOf(t)>=0&&r[n][i].indexOf(e)>=0)return!0;return!1}return e===t},e.prototype.indoor5GEnabled=function(e){return Object(r.g)(e.acs_chanlist)&&Object(r.g)(e.acs_chanlist[0])&&Object(r.g)(e.acs_chanlist[1])&&"36-112"==e.acs_chanlist[0]&&"132-140"==e.acs_chanlist[1]},e.prototype.indoor5GUse=function(e,t){return!(this.indoor5GAvailable(e)&&!this.indoor5GEnabled(t))},e}()},Ehmk:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r,i=n("eihs");function o(){try{return r.apply(this,arguments)}catch(e){return i.a.e=e,i.a}}function s(e){return r=e,o}},"En8+":function(e,t,n){"use strict";function r(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}n.d(t,"a",function(){return i});var i=r()},"F/XL":function(e,t,n){"use strict";var r=n("nkY7"),i=n("IUTb"),o=n("G5J1"),s=n("6blF");function a(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n,a,u=e[e.length-1];switch(Object(r.a)(u)?e.pop():u=void 0,e.length){case 0:return Object(o.b)(u);case 1:return u?Object(i.a)(e,u):(n=e[0],(a=new s.a(function(e){e.next(n),e.complete()}))._isScalar=!0,a.value=n,a);default:return Object(i.a)(e,u)}}n.d(t,"a",function(){return a})},FFOo:function(e,t,n){"use strict";n.d(t,"a",function(){return l});var r=n("mrSG"),i=n("2Bdj"),o=n("6ahw"),s=n("pugT"),a=n("L/V9"),u=n("iLxQ"),c=n("DKTb"),l=function(e){function t(n,r,i){var s=e.call(this)||this;switch(s.syncErrorValue=null,s.syncErrorThrown=!1,s.syncErrorThrowable=!1,s.isStopped=!1,s._parentSubscription=null,arguments.length){case 0:s.destination=o.a;break;case 1:if(!n){s.destination=o.a;break}if("object"==typeof n){n instanceof t?(s.syncErrorThrowable=n.syncErrorThrowable,s.destination=n,n.add(s)):(s.syncErrorThrowable=!0,s.destination=new h(s,n));break}default:s.syncErrorThrowable=!0,s.destination=new h(s,n,r,i)}return s}return r.c(t,e),t.prototype[a.a]=function(){return this},t.create=function(e,n,r){var i=new t(e,n,r);return i.syncErrorThrowable=!1,i},t.prototype.next=function(e){this.isStopped||this._next(e)},t.prototype.error=function(e){this.isStopped||(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this))},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},t.prototype._unsubscribeAndRecycle=function(){var e=this._parent,t=this._parents;return this._parent=null,this._parents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parent=e,this._parents=t,this._parentSubscription=null,this},t}(s.a),h=function(e){function t(t,n,r,s){var a,u=e.call(this)||this;u._parentSubscriber=t;var c=u;return Object(i.a)(n)?a=n:n&&(a=n.next,r=n.error,s=n.complete,n!==o.a&&(c=Object.create(n),Object(i.a)(c.unsubscribe)&&u.add(c.unsubscribe.bind(c)),c.unsubscribe=u.unsubscribe.bind(u))),u._context=c,u._next=a,u._error=r,u._complete=s,u}return r.c(t,e),t.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;u.a.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?this.__tryOrSetError(t,this._next,e)&&this.unsubscribe():this.__tryOrUnsub(this._next,e)}},t.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber,n=u.a.useDeprecatedSynchronousErrorHandling;if(this._error)n&&t.syncErrorThrowable?(this.__tryOrSetError(t,this._error,e),this.unsubscribe()):(this.__tryOrUnsub(this._error,e),this.unsubscribe());else if(t.syncErrorThrowable)n?(t.syncErrorValue=e,t.syncErrorThrown=!0):Object(c.a)(e),this.unsubscribe();else{if(this.unsubscribe(),n)throw e;Object(c.a)(e)}}},t.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var n=function(){return e._complete.call(e._context)};u.a.useDeprecatedSynchronousErrorHandling&&t.syncErrorThrowable?(this.__tryOrSetError(t,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},t.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(n){if(this.unsubscribe(),u.a.useDeprecatedSynchronousErrorHandling)throw n;Object(c.a)(n)}},t.prototype.__tryOrSetError=function(e,t,n){if(!u.a.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{t.call(this._context,n)}catch(r){return u.a.useDeprecatedSynchronousErrorHandling?(e.syncErrorValue=r,e.syncErrorThrown=!0,!0):(Object(c.a)(r),!0)}return!1},t.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null,this._parentSubscriber=null,e.unsubscribe()},t}(l)},FV9V:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getDevices=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"sta"}}],[this.authService.getSid(),"uci","get",{config:"vlan",type:"vlan"}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}]]}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e.prototype.save=function(e,t,n){var r=[];return e?t?this.ubusService.mergeOptions({calls:r,sid:this.authService.getSid(),config:"wireless",wanted:n,got:t}):r.push([this.authService.getSid(),"uci","add",{config:"wireless",type:"wifi-iface",values:n}]):r.push([this.authService.getSid(),"uci","delete",{config:"wireless",type:"wifi-iface",match:{mode:"sta"}}]),r.length>0&&r.push([this.authService.getSid(),"uci","commit",{config:"wireless"}]),this.ubusService.call({data:r})},e}())},"FW/t":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),n("+3se")),o=function(){return function(){}}(),s=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getCompatibilityModeInfo=function(){return Object(i.b)("mimo_full"),Object(i.b)("siso_full"),Object(i.b)("mimo_vdsl17a"),Object(i.b)("mimo_vdsl35b"),Object(i.b)("siso_vdsl17a"),Object(i.b)("siso_vdsl35b"),this.ubusService.call({data:[[this.authService.getSid(),"network.powerline","get_compat_mode",{}]]}).pipe(Object(r.a)(function(e){var t=e.result[0][1].available_modes,n=e.result[0][1].current_mode,r=new o;return r.selectedMode=n,r.availableModes=t,r}))},e.prototype.setCompatibilityMode=function(e){return this.ubusService.call({data:[[this.authService.getSid(),"network.powerline","set_compat_mode",{mode:e}]]}).pipe(Object(r.a)(function(e){return"ok"===e.result[0][1].result}))},e}()},FfxL:function(e,t,n){"use strict";n("MrYD");var r=n("6aHO");n.d(t,"a",function(){return r.a}),n("Q2Sk")},Fq6B:function(e,t,n){"use strict";n.d(t,"a",function(){return s}),n("ew9u"),n("uCBG");var r=n("XD9u"),i=n("FfxL"),o=(n("uwht"),n("008C")),s=function(){function e(){}return e.forRoot=function(){return{ngModule:e,providers:[o.a,i.a,r.a]}},e}()},Fxb1:function(e,t,n){"use strict";n.d(t,"a",function(){return d});var r=n("6blF"),i=n("+tJ4"),o=n("S5XQ"),s=n("u67D"),a=n("JcRv"),u=n("2ePl"),c=n("/WYv"),l=n("McSo"),h=n("En8+"),f=n("xTla"),d=function(e){if(e instanceof r.a)return function(t){return e._isScalar?(t.next(e.value),void t.complete()):e.subscribe(t)};if(e&&"function"==typeof e[f.a])return Object(a.a)(e);if(Object(u.a)(e))return Object(i.a)(e);if(Object(c.a)(e))return Object(o.a)(e);if(e&&"function"==typeof e[h.a])return Object(s.a)(e);var t=Object(l.a)(e)?"an invalid object":"'"+e+"'";throw new TypeError("You provided "+t+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.")}},G5J1:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n.d(t,"b",function(){return o});var r=n("6blF"),i=new r.a(function(e){return e.complete()});function o(e){return e?function(e){return new r.a(function(t){return e.schedule(function(){return t.complete()})})}(e):i}},GMPP:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("67Y/"),i=n("t/Na"),o=(n("+NEN"),n("jGGy"),function(){function e(e,t,n){this.authService=e,this.ubusService=t,this.http=n}return e.prototype.checkSession=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","state",{config:"network",section:"lan"}]})},e.prototype.getFWUpdateStatus=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"fwuagent"}]]}).pipe(Object(r.a)(function(e){return e.result[0][1].values}))},e.prototype.saveFWUpdateStatus=function(e){return this.ubusService.call({data:[[this.authService.getSid(),"uci","set",{config:"fwuagent",section:"service",values:{disabled:e.disabled,automatic_update:e.automatic_update}}],[this.authService.getSid(),"uci","commit",{config:"fwuagent"}]]})},e.prototype.uploadFile=function(e){var t=new i.h("POST","/cgi-bin/data-upload",e,{reportProgress:!0});return t.serializeBody(),this.http.request(t)},e.prototype.testImage=function(){return this.ubusService.call({data:[this.authService.getSid(),"system.management.upgrade","test",{}]}).pipe(Object(r.a)(function(e){return e.result[1].code}))},e.prototype.upgrade=function(){return this.ubusService.call({data:[this.authService.getSid(),"system.management.upgrade","start",{keep:!0}],raw:!0})},e}())},GYWy:function(e,t,n){(function(e,r){var i;!function(r){var o,s=2147483647,a=36,u=1,c=26,l=38,h=700,f=72,d=128,p="-",g=/^xn--/,b=/[^\x20-\x7E]/,v=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},m=a-u,w=Math.floor,_=String.fromCharCode;function S(e){throw new RangeError(y[e])}function O(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function C(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+O((e=e.replace(v,".")).split("."),t).join(".")}function j(e){for(var t,n,r=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<o?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function k(e){return O(e,function(e){var t="";return e>65535&&(t+=_((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+_(e)}).join("")}function E(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function x(e,t,n){var r=0;for(e=n?w(e/h):e>>1,e+=w(e/t);e>m*c>>1;r+=a)e=w(e/m);return w(r+(m+1)*e/(e+l))}function P(e){var t,n,r,i,o,l,h,g,b,v,y,m=[],_=e.length,O=0,C=d,j=f;for((n=e.lastIndexOf(p))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&S("not-basic"),m.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<_;){for(o=O,l=1,h=a;i>=_&&S("invalid-input"),((g=(y=e.charCodeAt(i++))-48<10?y-22:y-65<26?y-65:y-97<26?y-97:a)>=a||g>w((s-O)/l))&&S("overflow"),O+=g*l,!(g<(b=h<=j?u:h>=j+c?c:h-j));h+=a)l>w(s/(v=a-b))&&S("overflow"),l*=v;j=x(O-o,t=m.length+1,0==o),w(O/t)>s-C&&S("overflow"),C+=w(O/t),O%=t,m.splice(O++,0,C)}return k(m)}function T(e){var t,n,r,i,o,l,h,g,b,v,y,m,O,C,k,P=[];for(m=(e=j(e)).length,t=d,n=0,o=f,l=0;l<m;++l)(y=e[l])<128&&P.push(_(y));for(r=i=P.length,i&&P.push(p);r<m;){for(h=s,l=0;l<m;++l)(y=e[l])>=t&&y<h&&(h=y);for(h-t>w((s-n)/(O=r+1))&&S("overflow"),n+=(h-t)*O,t=h,l=0;l<m;++l)if((y=e[l])<t&&++n>s&&S("overflow"),y==t){for(g=n,b=a;!(g<(v=b<=o?u:b>=o+c?c:b-o));b+=a)P.push(_(E(v+(k=g-v)%(C=a-v),0))),g=w(k/C);P.push(_(E(g,0))),o=x(n,O,r==i),n=0,++r}++n,++t}return P.join("")}o={version:"1.4.1",ucs2:{decode:j,encode:k},decode:P,encode:T,toASCII:function(e){return C(e,function(e){return b.test(e)?"xn--"+T(e):e})},toUnicode:function(e){return C(e,function(e){return g.test(e)?P(e.slice(4).toLowerCase()):e})}},void 0===(i=(function(){return o}).call(t,n,t,e))||(e.exports=i)}()}).call(this,n("YuTi")(e),n("yLpj"))},Gci6:function(e,t,n){"use strict";n.d(t,"a",function(){return d});var r=n("xMyE"),i=n("9Z1F"),o=n("+3se"),s=n("26FU"),a=n("F/XL"),u=n("XlPw"),c=n("Vx+w"),l=n("CcnG"),h=n("t/Na"),f=n("Ip0R"),d=function(){function e(e,t){this.http=e,this.document=t,this.customDataUrl="../../../customization.json",this.productName=new s.a(""),this.productNameSuffix=new s.a(""),this.vendorName=new s.a(""),this.vendorUrl=new s.a(""),this.manualUrl=new s.a(""),this.showManualUrl=new s.a(!1),this.hideUpdateLink=new s.a(!1)}return e.prototype.updateFavicon=function(e){e.images.favicon&&this.document.getElementById("favicon").setAttribute("href",e.images.favicon)},e.prototype.getProductName=function(){return this.productName},e.prototype.getProductNameSuffix=function(){return this.productNameSuffix},e.prototype.getCustomization=function(){var e=this;return this.customData?Object(a.a)(this.customData):this.http.get(this.customDataUrl).pipe(Object(r.a)(function(t){return e.customData=t}),Object(r.a)(function(t){return e.updateFooterData(t)}),Object(r.a)(function(t){return e.updateVendorData(t)}),Object(r.a)(function(t){return e.updateProductName(t)}),Object(r.a)(function(t){return e.updateFeatures(t)}),Object(r.a)(function(t){return e.updateFavicon(t)}),Object(i.a)(this.handleError))},e.prototype.updateFeatures=function(e){this.hideUpdateLink.next(e.features.hide_update_link)},e.prototype.updateFooterData=function(e){this.vendorUrl.next(e.footer.vendor_url),e.footer.manual_url_pattern?(this.manualUrl.next(Object(o.f)(e.footer.manual_url_pattern,{config:c.a,customization:e})),this.showManualUrl.next(!0)):this.showManualUrl.next(!1)},e.prototype.updateVendorData=function(e){this.vendorName.next(e.vendor_name)},e.prototype.updateProductName=function(e){var t=e.product_name.split(" "),n=t.pop();n.startsWith("(")&&n.endsWith(")")?(this.productName.next(t.join(" ")),this.productNameSuffix.next(n)):(this.productName.next(e.product_name),this.productNameSuffix.next(""))},e.prototype.handleError=function(e){var t;return t=e.error instanceof Error?"An error occurred: "+e.error.message:"Backend returned code "+e.status+", body was: "+e.error,console.error(e),Object(u.a)(t)},e.ngInjectableDef=l.T({factory:function(){return new e(l.X(h.c),l.X(f.d))},token:e,providedIn:"root"}),e}()},H4wX:function(e,t,n){"use strict";n.d(t,"b",function(){return d}),n.d(t,"a",function(){return p});var r=n("+3se"),i=n("ub4/"),o=n("st5l"),s=n("1b+T"),a=n("fS8q"),u=n("4+XQ"),c=n("BVCH"),l=n("EAhB"),h=n("U4A+"),f=n("ZNe7"),d=[{path:"status",component:l.a,data:{displayName:Object(r.b)("Status"),retailOrder:0}},{path:"management",component:u.a,data:{displayName:Object(r.b)("Management"),retailOrder:10},canDeactivate:[i.a]},{path:"services",component:c.a,data:{displayName:Object(r.b)("Services"),appHideForRetail:!0},canDeactivate:[i.a]},{path:"findme",component:s.a,data:{displayName:Object(r.b)("Find Me"),retailOrder:40,supportBuzzerDevices:["1750c","1750c-qsdk"]},canDeactivate:[i.a]},{path:"configuration",component:o.a,data:{displayName:Object(r.b)("Configuration"),retailOrder:20},canDeactivate:[i.a]},{path:"firmware",component:a.a,data:{displayName:Object(r.b)("Firmware"),retailOrder:30},canDeactivate:[i.a]},{path:"configsync",component:f.a,data:{displayName:Object(r.b)("Config Sync"),retailOrder:50},canDeactivate:[i.a]},{path:"ubustest",component:h.a,data:{displayName:Object(r.b)("ubus Test"),hideForProduction:!0,retailOrder:60}}],p=function(){return function(){}}()},H5ub:function(e,t,n){"use strict";n("jFtu"),n("uwht"),n("ew9u"),n("zIf0"),n("uCBG"),n("Fq6B"),n("008C")},H7XF:function(e,t,n){"use strict";t.byteLength=function(e){var t=c(e),n=t[1];return 3*(t[0]+n)/4-n},t.toByteArray=function(e){for(var t,n=c(e),r=n[0],s=n[1],a=new o(function(e,t,n){return 3*(t+n)/4-n}(0,r,s)),u=0,l=s>0?r-4:r,h=0;h<l;h+=4)t=i[e.charCodeAt(h)]<<18|i[e.charCodeAt(h+1)]<<12|i[e.charCodeAt(h+2)]<<6|i[e.charCodeAt(h+3)],a[u++]=t>>16&255,a[u++]=t>>8&255,a[u++]=255&t;return 2===s&&(t=i[e.charCodeAt(h)]<<2|i[e.charCodeAt(h+1)]>>4,a[u++]=255&t),1===s&&(t=i[e.charCodeAt(h)]<<10|i[e.charCodeAt(h+1)]<<4|i[e.charCodeAt(h+2)]>>2,a[u++]=t>>8&255,a[u++]=255&t),a},t.fromByteArray=function(e){for(var t,n=e.length,i=n%3,o=[],s=0,a=n-i;s<a;s+=16383)o.push(l(e,s,s+16383>a?a:s+16383));return 1===i?o.push(r[(t=e[n-1])>>2]+r[t<<4&63]+"=="):2===i&&o.push(r[(t=(e[n-2]<<8)+e[n-1])>>10]+r[t>>4&63]+r[t<<2&63]+"="),o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=s.length;a<u;++a)r[a]=s[a],i[s.charCodeAt(a)]=a;function c(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,n){for(var i,o=[],s=t;s<n;s+=3)o.push(r[(i=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]))>>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},HEcb:function(e,t,n){"use strict";e.exports={shiftjis:{type:"_dbcs",table:function(){return n("lPSh")},encodeAdd:{"\xa5":92,"\u203e":126},encodeSkipVals:[{from:60736,to:63808}]},csshiftjis:"shiftjis",mskanji:"shiftjis",sjis:"shiftjis",windows31j:"shiftjis",ms31j:"shiftjis",xsjis:"shiftjis",windows932:"shiftjis",ms932:"shiftjis",932:"shiftjis",cp932:"shiftjis",eucjp:{type:"_dbcs",table:function(){return n("SYHD")},encodeAdd:{"\xa5":92,"\u203e":126}},gb2312:"cp936",gb231280:"cp936",gb23121980:"cp936",csgb2312:"cp936",csiso58gb231280:"cp936",euccn:"cp936",windows936:"cp936",ms936:"cp936",936:"cp936",cp936:{type:"_dbcs",table:function(){return n("sv2S")}},gbk:{type:"_dbcs",table:function(){return n("sv2S").concat(n("hHSr"))}},xgbk:"gbk",isoir58:"gbk",gb18030:{type:"_dbcs",table:function(){return n("sv2S").concat(n("hHSr"))},gb18030:function(){return n("fPfv")},encodeSkipVals:[128],encodeAdd:{"\u20ac":41699}},chinese:"gb18030",windows949:"cp949",ms949:"cp949",949:"cp949",cp949:{type:"_dbcs",table:function(){return n("5WRQ")}},cseuckr:"cp949",csksc56011987:"cp949",euckr:"cp949",isoir149:"cp949",korean:"cp949",ksc56011987:"cp949",ksc56011989:"cp949",ksc5601:"cp949",windows950:"cp950",ms950:"cp950",950:"cp950",cp950:{type:"_dbcs",table:function(){return n("htfN")}},big5:"big5hkscs",big5hkscs:{type:"_dbcs",table:function(){return n("htfN").concat(n("cfAG"))},encodeSkipVals:[41676]},cnbig5:"big5hkscs",csbig5:"big5hkscs",xxbig5:"big5hkscs"}},HJBe:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(e){return void 0===e&&(e=null),function(t){return t.lift(new s(e))}}var s=function(){function e(e){this.defaultValue=e}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.defaultValue))},e}(),a=function(e){function t(t,n){var r=e.call(this,t)||this;return r.defaultValue=n,r.isEmpty=!0,r}return r.c(t,e),t.prototype._next=function(e){this.isEmpty=!1,this.destination.next(e)},t.prototype._complete=function(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()},t}(i.a)},HYbQ:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getRadius=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"radius",type:"radius"}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface"}]]}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e.prototype.save=function(e,t,n,i,o){var s=[],a=[],u=[],c=["auth_server","auth_port","auth_secret","acct_server","acct_port","acct_secret","profile_name"],l={},h=[];for(var f in c)if(c.hasOwnProperty(f)){var d=c[f];e[d]?l[d]=e[d]:h.push(d)}if(s.push([this.authService.getSid(),"uci","set",{config:"radius",type:"radius",values:l}]),h.length&&a.push([this.authService.getSid(),"uci","delete",{config:"radius",type:"radius",options:h}]),u.push([this.authService.getSid(),"uci","commit",{config:"radius"}]),t.length&&o){var p=!1;for(var f in e.auth_server&&e.auth_port&&e.auth_secret&&(p=!0),t)if(t.hasOwnProperty(f)){var g=t[f];p?(g.auth_server=e.auth_server,g.auth_port=e.auth_port,g.auth_secret=e.auth_secret,n=!0):(delete g.auth_server,delete g.auth_port,delete g.auth_secret,g.disabled="1",i=!0,a.push([this.authService.getSid(),"uci","delete",{config:"wireless",section:g[".name"],options:["auth_server","auth_port","auth_secret"]}]));var b=g[".name"];delete g[".name"],s.push([this.authService.getSid(),"uci","set",{config:"wireless",section:b,values:g}]),"0"==f&&u.push([this.authService.getSid(),"uci","commit",{config:"wireless"}])}}var v=[];for(var f in a)a.hasOwnProperty(f)&&v.push(a[f]);for(var f in u)u.hasOwnProperty(f)&&v.push(u[f]);var y=[].concat.apply([],[s,v]);return this.ubusService.call({data:y}).pipe(Object(r.a)(function(e){return{response:e,radiusVapsDisabled:i,radiusVapsUpdated:n}}))},e}())},IJ1v:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("3GIH"),i=function(){function e(){}return e.reflow=function(e){},e.getStyles=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=r.b),t.getComputedStyle(e)},e}()},IUTb:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("6blF"),i=n("pugT"),o=n("+tJ4");function s(e,t){return new r.a(t?function(n){var r=new i.a,o=0;return r.add(t.schedule(function(){o!==e.length?(n.next(e[o++]),n.closed||r.add(this.schedule())):n.complete()})),r}:Object(o.a)(e))}},IZUe:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("UVPe");var r=767,i=function(){function e(e,t,n){var i=this;this.el=e,this.spinner=t,this.zone=n,this.mediaMatcher=matchMedia("(max-width: "+r+"px)"),this.mediaMatcher.addListener(function(e){i.zone.run(function(){return i.mediaMatcher=e})})}return Object.defineProperty(e.prototype,"appAutofocus",{set:function(e){this._appAutofocus=0!=e},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var e=this;!this._appAutofocus&&void 0!==this._appAutofocus||this.mediaMatcher.matches||(this.subscription=this.spinner.spinnerState.subscribe(function(t){0==t.show&&(setTimeout(function(){e.el.nativeElement.focus()},0),e.subscription.unsubscribe())}))},e}()},Ip0R:function(e,t,n){"use strict";n.d(t,"B",function(){return Y}),n.d(t,"p",function(){return Q}),n.d(t,"q",function(){return $}),n.d(t,"C",function(){return J}),n.d(t,"c",function(){return _e}),n.d(t,"m",function(){return X}),n.d(t,"n",function(){return te}),n.d(t,"o",function(){return re}),n.d(t,"r",function(){return le}),n.d(t,"s",function(){return ae}),n.d(t,"t",function(){return ue}),n.d(t,"u",function(){return ce}),n.d(t,"v",function(){return he}),n.d(t,"d",function(){return Se}),n.d(t,"b",function(){return be}),n.d(t,"e",function(){return ye}),n.d(t,"h",function(){return me}),n.d(t,"l",function(){return ve}),n.d(t,"f",function(){return we}),n.d(t,"A",function(){return Oe}),n.d(t,"z",function(){return je}),n.d(t,"y",function(){return ke}),n.d(t,"x",function(){return o}),n.d(t,"i",function(){return s}),n.d(t,"k",function(){return a}),n.d(t,"a",function(){return u}),n.d(t,"g",function(){return h}),n.d(t,"w",function(){return f}),n.d(t,"j",function(){return c});var r=n("CcnG"),i=n("mrSG"),o=function(){return function(){}}(),s=new r.p("Location Initialized"),a=function(){return function(){}}(),u=new r.p("appBaseHref"),c=function(){function e(e){var n=this;this._subject=new r.m,this._platformStrategy=e;var i=this._platformStrategy.getBaseHref();this._baseHref=t.stripTrailingSlash(l(i)),this._platformStrategy.onPopState(function(e){n._subject.emit({url:n.path(!0),pop:!0,state:e.state,type:e.type})})}var t;return t=e,e.prototype.path=function(e){return void 0===e&&(e=!1),this.normalize(this._platformStrategy.path(e))},e.prototype.isCurrentPathEqualTo=function(e,n){return void 0===n&&(n=""),this.path()==this.normalize(e+t.normalizeQueryParams(n))},e.prototype.normalize=function(e){return t.stripTrailingSlash(function(e,t){return e&&t.startsWith(e)?t.substring(e.length):t}(this._baseHref,l(e)))},e.prototype.prepareExternalUrl=function(e){return e&&"/"!==e[0]&&(e="/"+e),this._platformStrategy.prepareExternalUrl(e)},e.prototype.go=function(e,t,n){void 0===t&&(t=""),void 0===n&&(n=null),this._platformStrategy.pushState(n,"",e,t)},e.prototype.replaceState=function(e,t,n){void 0===t&&(t=""),void 0===n&&(n=null),this._platformStrategy.replaceState(n,"",e,t)},e.prototype.forward=function(){this._platformStrategy.forward()},e.prototype.back=function(){this._platformStrategy.back()},e.prototype.subscribe=function(e,t,n){return this._subject.subscribe({next:e,error:t,complete:n})},e.normalizeQueryParams=function(e){return e&&"?"!==e[0]?"?"+e:e},e.joinWithSlash=function(e,t){if(0==e.length)return t;if(0==t.length)return e;var n=0;return e.endsWith("/")&&n++,t.startsWith("/")&&n++,2==n?e+t.substring(1):1==n?e+t:e+"/"+t},e.stripTrailingSlash=function(e){var t=e.match(/#|\?|$/),n=t&&t.index||e.length;return e.slice(0,n-("/"===e[n-1]?1:0))+e.slice(n)},e}();function l(e){return e.replace(/\/index.html$/,"")}var h=function(e){function t(t,n){var r=e.call(this)||this;return r._platformLocation=t,r._baseHref="",null!=n&&(r._baseHref=n),r}return Object(i.c)(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.hash;return null==t&&(t="#"),t.length>0?t.substring(1):t},t.prototype.prepareExternalUrl=function(e){var t=c.joinWithSlash(this._baseHref,e);return t.length>0?"#"+t:t},t.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+c.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.pushState(e,t,i)},t.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+c.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.replaceState(e,t,i)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(a),f=function(e){function t(t,n){var r=e.call(this)||this;if(r._platformLocation=t,null==n&&(n=r._platformLocation.getBaseHrefFromDOM()),null==n)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");return r._baseHref=n,r}return Object(i.c)(t,e),t.prototype.onPopState=function(e){this._platformLocation.onPopState(e),this._platformLocation.onHashChange(e)},t.prototype.getBaseHref=function(){return this._baseHref},t.prototype.prepareExternalUrl=function(e){return c.joinWithSlash(this._baseHref,e)},t.prototype.path=function(e){void 0===e&&(e=!1);var t=this._platformLocation.pathname+c.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&e?""+t+n:t},t.prototype.pushState=function(e,t,n,r){var i=this.prepareExternalUrl(n+c.normalizeQueryParams(r));this._platformLocation.pushState(e,t,i)},t.prototype.replaceState=function(e,t,n,r){var i=this.prepareExternalUrl(n+c.normalizeQueryParams(r));this._platformLocation.replaceState(e,t,i)},t.prototype.forward=function(){this._platformLocation.forward()},t.prototype.back=function(){this._platformLocation.back()},t}(a),d=void 0,p=["en",[["a","p"],["AM","PM"],d],[["AM","PM"],d,d],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],d,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],d,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",d,"{1} 'at' {0}",d],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"$","US Dollar",{},function(e){var t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,"").length;return 1===t&&0===n?1:5}],g={},b=function(e){return e[e.Decimal=0]="Decimal",e[e.Percent=1]="Percent",e[e.Currency=2]="Currency",e[e.Scientific=3]="Scientific",e}({}),v=function(e){return e[e.Zero=0]="Zero",e[e.One=1]="One",e[e.Two=2]="Two",e[e.Few=3]="Few",e[e.Many=4]="Many",e[e.Other=5]="Other",e}({}),y=function(e){return e[e.Format=0]="Format",e[e.Standalone=1]="Standalone",e}({}),m=function(e){return e[e.Narrow=0]="Narrow",e[e.Abbreviated=1]="Abbreviated",e[e.Wide=2]="Wide",e[e.Short=3]="Short",e}({}),w=function(e){return e[e.Short=0]="Short",e[e.Medium=1]="Medium",e[e.Long=2]="Long",e[e.Full=3]="Full",e}({}),_=function(e){return e[e.Decimal=0]="Decimal",e[e.Group=1]="Group",e[e.List=2]="List",e[e.PercentSign=3]="PercentSign",e[e.PlusSign=4]="PlusSign",e[e.MinusSign=5]="MinusSign",e[e.Exponential=6]="Exponential",e[e.SuperscriptingExponent=7]="SuperscriptingExponent",e[e.PerMille=8]="PerMille",e[e[1/0]=9]="Infinity",e[e.NaN=10]="NaN",e[e.TimeSeparator=11]="TimeSeparator",e[e.CurrencyDecimal=12]="CurrencyDecimal",e[e.CurrencyGroup=13]="CurrencyGroup",e}({});function S(e,t){return E(P(e)[10],t)}function O(e,t){return E(P(e)[11],t)}function C(e,t){return E(P(e)[12],t)}function j(e,t){var n=P(e),r=n[13][t];if(void 0===r){if(t===_.CurrencyDecimal)return n[13][_.Decimal];if(t===_.CurrencyGroup)return n[13][_.Group]}return r}function k(e){if(!e[19])throw new Error('Missing extra locale data for the locale "'+e[0]+'". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.')}function E(e,t){for(var n=t;n>-1;n--)if(void 0!==e[n])return e[n];throw new Error("Locale data API: locale data undefined")}function x(e){var t=Object(i.f)(e.split(":"),2);return{hours:+t[0],minutes:+t[1]}}function P(e){var t=e.toLowerCase().replace(/_/g,"-"),n=g[t];if(n)return n;var r=t.split("-")[0];if(n=g[r])return n;if("en"===r)return p;throw new Error('Missing locale data for the locale "'+e+'".')}var T=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,A={},I=/((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,M=function(e){return e[e.Short=0]="Short",e[e.ShortGMT=1]="ShortGMT",e[e.Long=2]="Long",e[e.Extended=3]="Extended",e}({}),N=function(e){return e[e.FullYear=0]="FullYear",e[e.Month=1]="Month",e[e.Date=2]="Date",e[e.Hours=3]="Hours",e[e.Minutes=4]="Minutes",e[e.Seconds=5]="Seconds",e[e.FractionalSeconds=6]="FractionalSeconds",e[e.Day=7]="Day",e}({}),R=function(e){return e[e.DayPeriods=0]="DayPeriods",e[e.Days=1]="Days",e[e.Months=2]="Months",e[e.Eras=3]="Eras",e}({});function D(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return null!=t&&n in t?t[n]:e})),e}function V(e,t,n,r,i){void 0===n&&(n="-");var o="";(e<0||i&&e<=0)&&(i?e=1-e:(e=-e,o=n));for(var s=String(e);s.length<t;)s="0"+s;return r&&(s=s.substr(s.length-t)),o+s}function L(e,t,n,r,i){return void 0===n&&(n=0),void 0===r&&(r=!1),void 0===i&&(i=!1),function(o,s){var a,u=function(e,t){switch(e){case N.FullYear:return t.getFullYear();case N.Month:return t.getMonth();case N.Date:return t.getDate();case N.Hours:return t.getHours();case N.Minutes:return t.getMinutes();case N.Seconds:return t.getSeconds();case N.FractionalSeconds:return t.getMilliseconds();case N.Day:return t.getDay();default:throw new Error('Unknown DateType value "'+e+'".')}}(e,o);if((n>0||u>-n)&&(u+=n),e===N.Hours)0===u&&-12===n&&(u=12);else if(e===N.FractionalSeconds)return a=t,V(u,3).substr(0,a);var c=j(s,_.MinusSign);return V(u,t,c,r,i)}}function U(e,t,n,r){return void 0===n&&(n=y.Format),void 0===r&&(r=!1),function(i,o){return function(e,t,n,r,i,o){switch(n){case R.Months:return function(e,t,n){var r=P(e),i=E([r[5],r[6]],t);return E(i,n)}(t,i,r)[e.getMonth()];case R.Days:return function(e,t,n){var r=P(e),i=E([r[3],r[4]],t);return E(i,n)}(t,i,r)[e.getDay()];case R.DayPeriods:var s=e.getHours(),a=e.getMinutes();if(o){var u,c=function(e){var t=P(e);return k(t),(t[19][2]||[]).map(function(e){return"string"==typeof e?x(e):[x(e[0]),x(e[1])]})}(t),l=function(e,t,n){var r=P(e);k(r);var i=E([r[19][0],r[19][1]],t)||[];return E(i,n)||[]}(t,i,r);if(c.forEach(function(e,t){if(Array.isArray(e)){var n=e[0],r=e[1],i=r.hours;s>=n.hours&&a>=n.minutes&&(s<i||s===i&&a<r.minutes)&&(u=l[t])}else e.hours===s&&e.minutes===a&&(u=l[t])}),u)return u}return function(e,t,n){var r=P(e),i=E([r[1],r[2]],t);return E(i,n)}(t,i,r)[s<12?0:1];case R.Eras:return function(e,t){return E(P(e)[7],t)}(t,r)[e.getFullYear()<=0?0:1];default:throw new Error("unexpected translation type "+n)}}(i,o,e,t,n,r)}}function F(e){return function(t,n,r){var i=-1*r,o=j(n,_.MinusSign),s=i>0?Math.floor(i/60):Math.ceil(i/60);switch(e){case M.Short:return(i>=0?"+":"")+V(s,2,o)+V(Math.abs(i%60),2,o);case M.ShortGMT:return"GMT"+(i>=0?"+":"")+V(s,1,o);case M.Long:return"GMT"+(i>=0?"+":"")+V(s,2,o)+":"+V(Math.abs(i%60),2,o);case M.Extended:return 0===r?"Z":(i>=0?"+":"")+V(s,2,o)+":"+V(Math.abs(i%60),2,o);default:throw new Error('Unknown zone width "'+e+'"')}}}var B=0,z=4;function H(e,t){return void 0===t&&(t=!1),function(n,r){var i,o,s,a;if(t){var u=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,c=n.getDate();i=1+Math.floor((c+u)/7)}else{var l=(s=n.getFullYear(),a=new Date(s,B,1).getDay(),new Date(s,0,1+(a<=z?z:z+7)-a)),h=(o=n,new Date(o.getFullYear(),o.getMonth(),o.getDate()+(z-o.getDay()))).getTime()-l.getTime();i=1+Math.round(h/6048e5)}return V(i,e,j(r,_.MinusSign))}}var q={};function G(e,t){e=e.replace(/:/g,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+e)/6e4;return isNaN(n)?t:n}function W(e){return e instanceof Date&&!isNaN(e.valueOf())}var K=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function Z(e){var t=parseInt(e);if(isNaN(t))throw new Error("Invalid integer literal when parsing "+e);return t}var Y=new r.p("UseV4Plurals"),$=function(){return function(){}}(),Q=function(e){function t(t,n){var r=e.call(this)||this;return r.locale=t,r.deprecatedPluralFn=n,r}return Object(i.c)(t,e),t.prototype.getPluralCategory=function(e,t){switch(this.deprecatedPluralFn?this.deprecatedPluralFn(t||this.locale,e):function(e){return P(e)[18]}(t||this.locale)(e)){case v.Zero:return"zero";case v.One:return"one";case v.Two:return"two";case v.Few:return"few";case v.Many:return"many";default:return"other"}},t}($);function J(e,t){var n,r;t=encodeURIComponent(t);try{for(var o=Object(i.h)(e.split(";")),s=o.next();!s.done;s=o.next()){var a=s.value,u=a.indexOf("="),c=Object(i.f)(-1==u?[a,""]:[a.slice(0,u),a.slice(u+1)],2),l=c[1];if(c[0].trim()===t)return decodeURIComponent(l)}}catch(h){n={error:h}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return null}var X=function(){function e(e,t,n,r){this._iterableDiffers=e,this._keyValueDiffers=t,this._ngEl=n,this._renderer=r,this._initialClasses=[]}return Object.defineProperty(e.prototype,"klass",{set:function(e){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof e?e.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClass",{set:function(e){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof e?e.split(/\s+/):e,this._rawClass&&(Object(r.tb)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._iterableDiffer){var e=this._iterableDiffer.diff(this._rawClass);e&&this._applyIterableChanges(e)}else if(this._keyValueDiffer){var t=this._keyValueDiffer.diff(this._rawClass);t&&this._applyKeyValueChanges(t)}},e.prototype._applyKeyValueChanges=function(e){var t=this;e.forEachAddedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._toggleClass(e.key,e.currentValue)}),e.forEachRemovedItem(function(e){e.previousValue&&t._toggleClass(e.key,!1)})},e.prototype._applyIterableChanges=function(e){var t=this;e.forEachAddedItem(function(e){if("string"!=typeof e.item)throw new Error("NgClass can only toggle CSS classes expressed as strings, got "+Object(r.Hb)(e.item));t._toggleClass(e.item,!0)}),e.forEachRemovedItem(function(e){return t._toggleClass(e.item,!1)})},e.prototype._applyClasses=function(e){var t=this;e&&(Array.isArray(e)||e instanceof Set?e.forEach(function(e){return t._toggleClass(e,!0)}):Object.keys(e).forEach(function(n){return t._toggleClass(n,!!e[n])}))},e.prototype._removeClasses=function(e){var t=this;e&&(Array.isArray(e)||e instanceof Set?e.forEach(function(e){return t._toggleClass(e,!1)}):Object.keys(e).forEach(function(e){return t._toggleClass(e,!1)}))},e.prototype._toggleClass=function(e,t){var n=this;(e=e.trim())&&e.split(/\s+/g).forEach(function(e){t?n._renderer.addClass(n._ngEl.nativeElement,e):n._renderer.removeClass(n._ngEl.nativeElement,e)})},e}(),ee=function(){function e(e,t,n,r){this.$implicit=e,this.ngForOf=t,this.index=n,this.count=r}return Object.defineProperty(e.prototype,"first",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"last",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"even",{get:function(){return this.index%2==0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"odd",{get:function(){return!this.even},enumerable:!0,configurable:!0}),e}(),te=function(){function e(e,t,n){this._viewContainer=e,this._template=t,this._differs=n,this._ngForOfDirty=!0,this._differ=null}return Object.defineProperty(e.prototype,"ngForOf",{set:function(e){this._ngForOf=e,this._ngForOfDirty=!0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngForTrackBy",{get:function(){return this._trackByFn},set:function(e){Object(r.Y)()&&null!=e&&"function"!=typeof e&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(e)+". See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information."),this._trackByFn=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngForTemplate",{set:function(e){e&&(this._template=e)},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._ngForOfDirty){this._ngForOfDirty=!1;var e=this._ngForOf;if(!this._differ&&e)try{this._differ=this._differs.find(e).create(this.ngForTrackBy)}catch(r){throw new Error("Cannot find a differ supporting object '"+e+"' of type '"+((t=e).name||typeof t)+"'. NgFor only supports binding to Iterables such as Arrays.")}}var t;if(this._differ){var n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}},e.prototype._applyChanges=function(e){var t=this,n=[];e.forEachOperation(function(e,r,i){if(null==e.previousIndex){var o=t._viewContainer.createEmbeddedView(t._template,new ee(null,t._ngForOf,-1,-1),i),s=new ne(e,o);n.push(s)}else null==i?t._viewContainer.remove(r):(o=t._viewContainer.get(r),t._viewContainer.move(o,i),s=new ne(e,o),n.push(s))});for(var r=0;r<n.length;r++)this._perViewChange(n[r].view,n[r].record);r=0;for(var i=this._viewContainer.length;r<i;r++){var o=this._viewContainer.get(r);o.context.index=r,o.context.count=i,o.context.ngForOf=this._ngForOf}e.forEachIdentityChange(function(e){t._viewContainer.get(e.currentIndex).context.$implicit=e.item})},e.prototype._perViewChange=function(e,t){e.context.$implicit=t.item},e}(),ne=function(){return function(e,t){this.record=e,this.view=t}}(),re=function(){function e(e,t){this._viewContainer=e,this._context=new ie,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=t}return Object.defineProperty(e.prototype,"ngIf",{set:function(e){this._context.$implicit=this._context.ngIf=e,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngIfThen",{set:function(e){oe("ngIfThen",e),this._thenTemplateRef=e,this._thenViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngIfElse",{set:function(e){oe("ngIfElse",e),this._elseTemplateRef=e,this._elseViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),e.prototype._updateView=function(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))},e}(),ie=function(){return function(){this.$implicit=null,this.ngIf=null}}();function oe(e,t){if(t&&!t.createEmbeddedView)throw new Error(e+" must be a TemplateRef, but received '"+Object(r.Hb)(t)+"'.")}var se=function(){function e(e,t){this._viewContainerRef=e,this._templateRef=t,this._created=!1}return e.prototype.create=function(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)},e.prototype.destroy=function(){this._created=!1,this._viewContainerRef.clear()},e.prototype.enforceState=function(e){e&&!this._created?this.create():!e&&this._created&&this.destroy()},e}(),ae=function(){function e(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}return Object.defineProperty(e.prototype,"ngSwitch",{set:function(e){this._ngSwitch=e,0===this._caseCount&&this._updateDefaultCases(!0)},enumerable:!0,configurable:!0}),e.prototype._addCase=function(){return this._caseCount++},e.prototype._addDefault=function(e){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(e)},e.prototype._matchCase=function(e){var t=e==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||t,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),t},e.prototype._updateDefaultCases=function(e){if(this._defaultViews&&e!==this._defaultUsed){this._defaultUsed=e;for(var t=0;t<this._defaultViews.length;t++)this._defaultViews[t].enforceState(e)}},e}(),ue=function(){function e(e,t,n){this.ngSwitch=n,n._addCase(),this._view=new se(e,t)}return e.prototype.ngDoCheck=function(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))},e}(),ce=function(){return function(e,t,n){n._addDefault(new se(e,t))}}(),le=function(){function e(e,t,n){this._differs=e,this._ngEl=t,this._renderer=n}return Object.defineProperty(e.prototype,"ngStyle",{set:function(e){this._ngStyle=e,!this._differ&&e&&(this._differ=this._differs.find(e).create())},enumerable:!0,configurable:!0}),e.prototype.ngDoCheck=function(){if(this._differ){var e=this._differ.diff(this._ngStyle);e&&this._applyChanges(e)}},e.prototype._applyChanges=function(e){var t=this;e.forEachRemovedItem(function(e){return t._setStyle(e.key,null)}),e.forEachAddedItem(function(e){return t._setStyle(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t._setStyle(e.key,e.currentValue)})},e.prototype._setStyle=function(e,t){var n=Object(i.f)(e.split("."),2),r=n[0],o=n[1];null!=(t=null!=t&&o?""+t+o:t)?this._renderer.setStyle(this._ngEl.nativeElement,r,t):this._renderer.removeStyle(this._ngEl.nativeElement,r)},e}(),he=function(){function e(e){this._viewContainerRef=e}return e.prototype.ngOnChanges=function(e){this._shouldRecreateView(e)?(this._viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef)),this.ngTemplateOutlet&&(this._viewRef=this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext))):this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)},e.prototype._shouldRecreateView=function(e){var t=e.ngTemplateOutletContext;return!!e.ngTemplateOutlet||t&&this._hasContextShapeChanged(t)},e.prototype._hasContextShapeChanged=function(e){var t,n,r=Object.keys(e.previousValue||{}),o=Object.keys(e.currentValue||{});if(r.length===o.length){try{for(var s=Object(i.h)(o),a=s.next();!a.done;a=s.next())if(-1===r.indexOf(a.value))return!0}catch(u){t={error:u}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(t)throw t.error}}return!1}return!0},e.prototype._updateExistingContext=function(e){var t,n;try{for(var r=Object(i.h)(Object.keys(e)),o=r.next();!o.done;o=r.next()){var s=o.value;this._viewRef.context[s]=this.ngTemplateOutletContext[s]}}catch(a){t={error:a}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}},e}();function fe(e,t){return Error("InvalidPipeArgument: '"+t+"' for pipe '"+Object(r.Hb)(e)+"'")}var de=function(){function e(){}return e.prototype.createSubscription=function(e,t){return e.subscribe({next:t,error:function(e){throw e}})},e.prototype.dispose=function(e){e.unsubscribe()},e.prototype.onDestroy=function(e){e.unsubscribe()},e}(),pe=new(function(){function e(){}return e.prototype.createSubscription=function(e,t){return e.then(t,function(e){throw e})},e.prototype.dispose=function(e){},e.prototype.onDestroy=function(e){},e}()),ge=new de,be=function(){function e(e){this._ref=e,this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null,this._strategy=null}var t;return t=e,e.prototype.ngOnDestroy=function(){this._subscription&&this._dispose()},e.prototype.transform=function(e){return this._obj?e!==this._obj?(this._dispose(),this.transform(e)):this._latestValue===this._latestReturnedValue?this._latestReturnedValue:(this._latestReturnedValue=this._latestValue,r.R.wrap(this._latestValue)):(e&&this._subscribe(e),this._latestReturnedValue=this._latestValue,this._latestValue)},e.prototype._subscribe=function(e){var t=this;this._obj=e,this._strategy=this._selectStrategy(e),this._subscription=this._strategy.createSubscription(e,function(n){return t._updateLatestValue(e,n)})},e.prototype._selectStrategy=function(e){if(Object(r.vb)(e))return pe;if(Object(r.ub)(e))return ge;throw fe(t,e)},e.prototype._dispose=function(){this._strategy.dispose(this._subscription),this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null},e.prototype._updateLatestValue=function(e,t){e===this._obj&&(this._latestValue=t,this._ref.markForCheck())},e}(),ve=function(){function e(){}var t;return t=e,e.prototype.transform=function(e){if(!e)return e;if("string"!=typeof e)throw fe(t,e);return e.toLowerCase()},e}(),ye=function(){function e(e){this.locale=e}var t;return t=e,e.prototype.transform=function(e,n,r,o){if(void 0===n&&(n="mediumDate"),null==e||""===e||e!=e)return null;try{return function(e,t,n,r){var o=function(e){if(W(e))return e;if("number"==typeof e&&!isNaN(e))return new Date(e);if("string"==typeof e){e=e.trim();var t,n=parseFloat(e);if(!isNaN(e-n))return new Date(n);if(/^(\d{4}-\d{1,2}-\d{1,2})$/.test(e)){var r=Object(i.f)(e.split("-").map(function(e){return+e}),3);return new Date(r[0],r[1]-1,r[2])}if(t=e.match(T))return function(e){var t=new Date(0),n=0,r=0,i=e[8]?t.setUTCFullYear:t.setFullYear,o=e[8]?t.setUTCHours:t.setHours;e[9]&&(n=Number(e[9]+e[10]),r=Number(e[9]+e[11])),i.call(t,Number(e[1]),Number(e[2])-1,Number(e[3]));var s=Number(e[4]||0)-n,a=Number(e[5]||0)-r,u=Number(e[6]||0),c=Math.round(1e3*parseFloat("0."+(e[7]||0)));return o.call(t,s,a,u,c),t}(t)}var o=new Date(e);if(!W(o))throw new Error('Unable to convert "'+e+'" into a date');return o}(e);t=function e(t,n){var r=function(e){return P(e)[0]}(t);if(A[r]=A[r]||{},A[r][n])return A[r][n];var i="";switch(n){case"shortDate":i=S(t,w.Short);break;case"mediumDate":i=S(t,w.Medium);break;case"longDate":i=S(t,w.Long);break;case"fullDate":i=S(t,w.Full);break;case"shortTime":i=O(t,w.Short);break;case"mediumTime":i=O(t,w.Medium);break;case"longTime":i=O(t,w.Long);break;case"fullTime":i=O(t,w.Full);break;case"short":var o=e(t,"shortTime"),s=e(t,"shortDate");i=D(C(t,w.Short),[o,s]);break;case"medium":var a=e(t,"mediumTime"),u=e(t,"mediumDate");i=D(C(t,w.Medium),[a,u]);break;case"long":var c=e(t,"longTime"),l=e(t,"longDate");i=D(C(t,w.Long),[c,l]);break;case"full":var h=e(t,"fullTime"),f=e(t,"fullDate");i=D(C(t,w.Full),[h,f])}return i&&(A[r][n]=i),i}(n,t)||t;for(var s,a=[];t;){if(!(s=I.exec(t))){a.push(t);break}var u=(a=a.concat(s.slice(1))).pop();if(!u)break;t=u}var c=o.getTimezoneOffset();r&&(c=G(r,c),o=function(e,t,n){var r=e.getTimezoneOffset();return function(e,t){return(e=new Date(e.getTime())).setMinutes(e.getMinutes()+t),e}(e,-1*(G(t,r)-r))}(o,r));var l="";return a.forEach(function(e){var t=function(e){if(q[e])return q[e];var t;switch(e){case"G":case"GG":case"GGG":t=U(R.Eras,m.Abbreviated);break;case"GGGG":t=U(R.Eras,m.Wide);break;case"GGGGG":t=U(R.Eras,m.Narrow);break;case"y":t=L(N.FullYear,1,0,!1,!0);break;case"yy":t=L(N.FullYear,2,0,!0,!0);break;case"yyy":t=L(N.FullYear,3,0,!1,!0);break;case"yyyy":t=L(N.FullYear,4,0,!1,!0);break;case"M":case"L":t=L(N.Month,1,1);break;case"MM":case"LL":t=L(N.Month,2,1);break;case"MMM":t=U(R.Months,m.Abbreviated);break;case"MMMM":t=U(R.Months,m.Wide);break;case"MMMMM":t=U(R.Months,m.Narrow);break;case"LLL":t=U(R.Months,m.Abbreviated,y.Standalone);break;case"LLLL":t=U(R.Months,m.Wide,y.Standalone);break;case"LLLLL":t=U(R.Months,m.Narrow,y.Standalone);break;case"w":t=H(1);break;case"ww":t=H(2);break;case"W":t=H(1,!0);break;case"d":t=L(N.Date,1);break;case"dd":t=L(N.Date,2);break;case"E":case"EE":case"EEE":t=U(R.Days,m.Abbreviated);break;case"EEEE":t=U(R.Days,m.Wide);break;case"EEEEE":t=U(R.Days,m.Narrow);break;case"EEEEEE":t=U(R.Days,m.Short);break;case"a":case"aa":case"aaa":t=U(R.DayPeriods,m.Abbreviated);break;case"aaaa":t=U(R.DayPeriods,m.Wide);break;case"aaaaa":t=U(R.DayPeriods,m.Narrow);break;case"b":case"bb":case"bbb":t=U(R.DayPeriods,m.Abbreviated,y.Standalone,!0);break;case"bbbb":t=U(R.DayPeriods,m.Wide,y.Standalone,!0);break;case"bbbbb":t=U(R.DayPeriods,m.Narrow,y.Standalone,!0);break;case"B":case"BB":case"BBB":t=U(R.DayPeriods,m.Abbreviated,y.Format,!0);break;case"BBBB":t=U(R.DayPeriods,m.Wide,y.Format,!0);break;case"BBBBB":t=U(R.DayPeriods,m.Narrow,y.Format,!0);break;case"h":t=L(N.Hours,1,-12);break;case"hh":t=L(N.Hours,2,-12);break;case"H":t=L(N.Hours,1);break;case"HH":t=L(N.Hours,2);break;case"m":t=L(N.Minutes,1);break;case"mm":t=L(N.Minutes,2);break;case"s":t=L(N.Seconds,1);break;case"ss":t=L(N.Seconds,2);break;case"S":t=L(N.FractionalSeconds,1);break;case"SS":t=L(N.FractionalSeconds,2);break;case"SSS":t=L(N.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":t=F(M.Short);break;case"ZZZZZ":t=F(M.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":t=F(M.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":t=F(M.Long);break;default:return null}return q[e]=t,t}(e);l+=t?t(o,n,c):"''"===e?"'":e.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),l}(e,n,o||this.locale,r)}catch(s){throw fe(t,s.message)}},e}(),me=function(){function e(){}return e.prototype.transform=function(e){return JSON.stringify(e,null,2)},e}(),we=function(){function e(e){this._locale=e}var t;return t=e,e.prototype.transform=function(e,n,r){if(function(e){return null==e||""===e||e!=e}(e))return null;r=r||this._locale;try{return function(e,t,n){return function(e,t,n,r,i,o,s){void 0===s&&(s=!1);var a="",u=!1;if(isFinite(e)){var c=function(t){var n,r,i,o,s,a=Math.abs(e)+"",u=0;for((r=a.indexOf("."))>-1&&(a=a.replace(".","")),(i=a.search(/e/i))>0?(r<0&&(r=i),r+=+a.slice(i+1),a=a.substring(0,i)):r<0&&(r=a.length),i=0;"0"===a.charAt(i);i++);if(i===(s=a.length))n=[0],r=1;else{for(s--;"0"===a.charAt(s);)s--;for(r-=i,n=[],o=0;i<=s;i++,o++)n[o]=Number(a.charAt(i))}return r>22&&(n=n.splice(0,21),u=r-1,r=1),{digits:n,exponent:u,integerLen:r}}();s&&(c=function(e){if(0===e.digits[0])return e;var t=e.digits.length-e.integerLen;return e.exponent?e.exponent+=2:(0===t?e.digits.push(0,0):1===t&&e.digits.push(0),e.integerLen+=2),e}(c));var l=t.minInt,h=t.minFrac,f=t.maxFrac;if(o){var d=o.match(K);if(null===d)throw new Error(o+" is not a valid digit info");var p=d[1],g=d[3],b=d[5];null!=p&&(l=Z(p)),null!=g&&(h=Z(g)),null!=b?f=Z(b):null!=g&&h>f&&(f=h)}!function(e,t,n){if(t>n)throw new Error("The minimum number of digits after fraction ("+t+") is higher than the maximum ("+n+").");var r=e.digits,i=r.length-e.integerLen,o=Math.min(Math.max(t,i),n),s=o+e.integerLen,a=r[s];if(s>0){r.splice(Math.max(e.integerLen,s));for(var u=s;u<r.length;u++)r[u]=0}else{i=Math.max(0,i),e.integerLen=1,r.length=Math.max(1,s=o+1),r[0]=0;for(var c=1;c<s;c++)r[c]=0}if(a>=5)if(s-1<0){for(var l=0;l>s;l--)r.unshift(0),e.integerLen++;r.unshift(1),e.integerLen++}else r[s-1]++;for(;i<Math.max(0,o);i++)r.push(0);var h=0!==o,f=t+e.integerLen,d=r.reduceRight(function(e,t,n,r){return r[n]=(t+=e)<10?t:t-10,h&&(0===r[n]&&n>=f?r.pop():h=!1),t>=10?1:0},0);d&&(r.unshift(d),e.integerLen++)}(c,h,f);var v=c.digits,y=c.integerLen,m=c.exponent,w=[];for(u=v.every(function(e){return!e});y<l;y++)v.unshift(0);for(;y<0;y++)v.unshift(0);y>0?w=v.splice(y,v.length):(w=v,v=[0]);var S=[];for(v.length>=t.lgSize&&S.unshift(v.splice(-t.lgSize,v.length).join(""));v.length>t.gSize;)S.unshift(v.splice(-t.gSize,v.length).join(""));v.length&&S.unshift(v.join("")),a=S.join(j(n,r)),w.length&&(a+=j(n,i)+w.join("")),m&&(a+=j(n,_.Exponential)+"+"+m)}else a=j(n,_.Infinity);return e<0&&!u?t.negPre+a+t.negSuf:t.posPre+a+t.posSuf}(e,function(e,t){void 0===t&&(t="-");var n={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},r=e.split(";"),i=r[0],o=r[1],s=-1!==i.indexOf(".")?i.split("."):[i.substring(0,i.lastIndexOf("0")+1),i.substring(i.lastIndexOf("0")+1)],a=s[0],u=s[1]||"";n.posPre=a.substr(0,a.indexOf("#"));for(var c=0;c<u.length;c++){var l=u.charAt(c);"0"===l?n.minFrac=n.maxFrac=c+1:"#"===l?n.maxFrac=c+1:n.posSuf+=l}var h=a.split(",");if(n.gSize=h[1]?h[1].length:0,n.lgSize=h[2]||h[1]?(h[2]||h[1]).length:0,o){var f=i.length-n.posPre.length-n.posSuf.length,d=o.indexOf("#");n.negPre=o.substr(0,d).replace(/'/g,""),n.negSuf=o.substr(d+f).replace(/'/g,"")}else n.negPre=t+n.posPre,n.negSuf=n.posSuf;return n}(function(e,t){return P(e)[14][t]}(t,b.Decimal),j(t,_.MinusSign)),t,_.Group,_.Decimal,n)}(function(e){if("string"==typeof e&&!isNaN(Number(e)-parseFloat(e)))return Number(e);if("number"!=typeof e)throw new Error(e+" is not a number");return e}(e),r,n)}catch(i){throw fe(t,i.message)}},e}(),_e=function(){return function(){}}(),Se=new r.p("DocumentToken"),Oe="browser",Ce="server";function je(e){return e===Ce}var ke=function(){function e(){}return e.ngInjectableDef=Object(r.T)({providedIn:"root",factory:function(){return new Ee(Object(r.X)(Se),window)}}),e}(),Ee=function(){function e(e,t){this.document=e,this.window=t,this.offset=function(){return[0,0]}}return e.prototype.setOffset=function(e){this.offset=Array.isArray(e)?function(){return e}:e},e.prototype.getScrollPosition=function(){return this.supportScrollRestoration()?[this.window.scrollX,this.window.scrollY]:[0,0]},e.prototype.scrollToPosition=function(e){this.supportScrollRestoration()&&this.window.scrollTo(e[0],e[1])},e.prototype.scrollToAnchor=function(e){if(this.supportScrollRestoration()){var t=this.document.querySelector("#"+e);if(t)return void this.scrollToElement(t);var n=this.document.querySelector("[name='"+e+"']");if(n)return void this.scrollToElement(n)}},e.prototype.setHistoryScrollRestoration=function(e){if(this.supportScrollRestoration()){var t=this.window.history;t&&t.scrollRestoration&&(t.scrollRestoration=e)}},e.prototype.scrollToElement=function(e){var t=e.getBoundingClientRect(),n=t.left+this.window.pageXOffset,r=t.top+this.window.pageYOffset,i=this.offset();this.window.scrollTo(n-i[0],r-i[1])},e.prototype.supportScrollRestoration=function(){try{return!!this.window&&!!this.window.scrollTo}catch(e){return!1}},e}()},IzUq:function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},J78i:function(e,t,n){"use strict";e.exports=s;var r=n("sZro"),i=n("Onz0");function o(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(!r)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}function s(e){if(!(this instanceof s))return new s(e);r.call(this,e),this._transformState={afterTransform:o.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.on("prefinish",a)}function a(){var e=this;"function"==typeof this._flush?this._flush(function(t,n){u(e,t,n)}):u(this,null,null)}function u(e,t,n){if(t)return e.emit("error",t);if(null!=n&&e.push(n),e._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(e._transformState.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}i.inherits=n("P7XM"),i.inherits(s,r),s.prototype.push=function(e,t){return this._transformState.needTransform=!1,r.prototype.push.call(this,e,t)},s.prototype._transform=function(e,t,n){throw new Error("_transform() is not implemented")},s.prototype._write=function(e,t,n){var r=this._transformState;if(r.writecb=n,r.writechunk=e,r.writeencoding=t,!r.transforming){var i=this._readableState;(r.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},s.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},s.prototype._destroy=function(e,t){var n=this;r.prototype._destroy.call(this,e,function(e){t(e),n.emit("close")})}},JPNY:function(e,t,n){"use strict";n.d(t,"a",function(){return u});var r=n("K9Ia"),i=n("xXU7"),o=n("ny24"),s=(n("Obbf"),n("UVPe"),n("+3se")),a=(n("CG3r"),n("+/+x"),n("FW/t"),Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}),u=function(){function e(e,t,n,i,o){this.ghnPowerlineService=e,this.notification=t,this.spinner=n,this.deviceModeService=i,this.compatibilityModeService=o,this.ngUnsubscribe=new r.a,this.ngUnsubscribe2=new r.a,this.settings={domain_name:"UNCONNECTED",force_node:"",profile:""},this.dlanEnabled=!1,this.pairingInProgress=!1,this.unpairingInProgress=!1,this.updateSettingsInProgress=!1,this.passwordChangingInProgress=!1,this.deviceId=null,this.connections=[],this.localPassType="password",this.orderby="did*1",this.reverse=!1,this.savingInProgress=!1,this.invalidCompatibilityMode=!1}return e.prototype.ngOnInit=function(){var e=this;this.getCompatibilityModeInfo(),this.getDeviceType(),this.getAdvancedSettings(),this.getNetworkDevicesList(),Object(i.a)(1e4).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(){e.getNetworkDevicesList()})},e.prototype.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.ngUnsubscribe2.next(),this.ngUnsubscribe2.complete()},e.prototype.getCompatibilityModeInfo=function(){var e=this;this.compatibilityModeService.getCompatibilityModeInfo().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.compatibilityModeInfo=t,e.currentCompatibilityMode=t.selectedMode})},e.prototype.onCompatibilityModeChange=function(e){this.currentCompatibilityMode=e,this.invalidCompatibilityMode=void 0===e,this.markAsDirty()},e.prototype.setCompatibilityMode=function(){var e=this;this.compatibilityModeService.setCompatibilityMode(this.currentCompatibilityMode).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(){e.getCompatibilityModeInfo(),e.updateSettingsInProgress=!1,e.notification.success(Object(s.b)("You have successfully updated the compatibility mode setting.")),e.savingInProgress=!1,e.markAsPristine()})},e.prototype.getDeviceType=function(){var e=this;this.deviceModeService.getDeviceInfo().pipe(Object(o.a)(this.ngUnsubscribe2)).subscribe(function(t){t[0]&&t[0][1]&&(e.deviceType=t[0][1].value)})},e.prototype.startPairing=function(){var e=this;this.pairingInProgress=!0,this.ghnPowerlineService.startPairing().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.pairingInProgress=!1})},e.prototype.unpair=function(){var e=this;this.unpairingInProgress=!0,this.ghnPowerlineService.unpair().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.unpairingInProgress=!1})},e.prototype.setPassword=function(){var e=this;this.passwordChangingInProgress=!0,this.ghnPowerlineService.setPassword(this.password.nativeElement.value).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.passwordChangingInProgress=!1,e.notification.success(Object(s.b)("You have successfully updated your PLC password.")),e.savingInProgress=!1,e.markAsPristine()})},e.prototype.getAdvancedSettings=function(){var e=this;this.unpairingInProgress=!0,this.ghnPowerlineService.getAdvancedSettings().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.unpairingInProgress=!1,e.settings=t,e.spinner.hide()})},e.prototype.updateSettings=function(){var e=this,t={};this.forceNode&&(t.forceNode=this.forceNode.nativeElement.value),this.updateSettingsInProgress=!0,this.ghnPowerlineService.updateSettings(t).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.updateSettingsInProgress=!1,e.notification.success(Object(s.b)("You have successfully updated your PLC network settings.")),e.savingInProgress=!1,e.markAsPristine()})},e.prototype.getNetworkDevicesList=function(){var e=this;this.ghnPowerlineService.getNetworkDevicesList().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){if(!Object(s.g)(t.devices))return e.notification.clear(),void e.notification.info(Object(s.b)("Your Powerline pro network is disabled."),{sticky:!0});e.deviceId=t.device_id,e.connections=t.devices})},e.prototype.toggleLocalPassVisibility=function(){this.localPassType="password"===this.localPassType?"text":"password"},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.save=function(){this.currentCompatibilityMode!==this.compatibilityModeInfo.selectedMode&&(this.savingInProgress=!0,this.setCompatibilityMode()),this.password.nativeElement.value.length&&(this.savingInProgress=!0,this.setPassword()),this.forceNode&&this.forceNode.nativeElement.value.length&&(this.savingInProgress=!0,this.updateSettings())},e.prototype.cancel=function(){this.savingInProgress=!1,this.localPassType="password",this.password.nativeElement.value="",this.forceNode&&(this.forceNode.nativeElement.value=this.settings.force_node),this.compatibilityModeInfo=a({},this.compatibilityModeInfo),this.markAsPristine()},e}()},JXkt:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("K9Ia"),i=n("gI3B"),o=n("ny24"),s=n("+3se"),a=(n("UVPe"),n("3a/w"),function(){function e(e,t){this.statusService=e,this.spinner=t,this.getDevicesInProgress=!1,this.disabled=!1,this.ngUnsubscribe=new r.a,this.dlanDevices=[],this.dlanDevicesMfg={},this.dlanMacAddress="",this.secured=!1,this.securityText=Object(s.b)("Unsecured"),this.orderby="avln_num*1",this.reverse=!1}return e.prototype.ngOnInit=function(){var e=this;this.changeTooltipPlacement(window.screen.width),Object(i.a)(0,1e4).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(){e.getDevices()})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e},e.prototype.getDeviceName=function(e){return""==e.usr?e.mfg:e.usr},e.prototype.getOwnLocalDevice=function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];if(this.localDevice(n))return n}},e.prototype.localDevice=function(e){return e.mac===this.dlanMacAddress.toUpperCase()},e.prototype.getMfg=function(e){return this.dlanDevicesMfg[e]},e.prototype.addStabilizeProperty=function(e){e.forEach(function(e){e.stabilized=!1})},e.prototype.stabilizeAvlnNum=function(e){var t=this;if(this.addStabilizeProperty(e),0==this.avlnMap.maxUsedNum){var n=this.getOwnLocalDevice(e).mac;this.avlnMap[n]=1,this.avlnMap.maxUsedNum=1}var r=e.filter(function(e){return"1"===e.local});for(var i in r.forEach(function(e){Object(s.g)(t.avlnMap[e.mac])||(t.avlnMap[e.mac]=t.avlnMap.maxUsedNum+1,t.avlnMap.maxUsedNum+=1)}),r)if(r.hasOwnProperty(i)){var o=r[i],a=Number(o.avln_num),u=this.avlnMap[o.mac];if(a!=u)for(var c in e)if(e.hasOwnProperty(c)){var l=e[c];Number(l.avln_num)!=a||l.stabilized||(l.avln_num=u.toString(),l.stabilized=!0)}}},e.prototype.getDevices=function(){var e=this;this.avlnMap={maxUsedNum:0},this.getDevicesInProgress||(this.getDevicesInProgress=!0,this.statusService.getDevices().subscribe(function(t){if(e.spinner.hide(),e.disabled=!1,Object(s.g)(t[2].value)&&(e.disabled="1"===t[2].value),e.disabled)e.dlanDevices=[];else{e.dlanMacAddress=t[1].value;var n=t[0].devices;if(n.length){e.stabilizeAvlnNum(n);var r=!1,i=[];for(var o in e.dlanDevicesMfg={},n)if(n.hasOwnProperty(o)){var a=n[o],u={};e.localDevice(a)&&(r=!("50:D3:E4:93:3F:85:5B:70:40:78:4D:F8:15:AA:8D:B7"===a.nmk)),u.avln_num=a.avln_num,u.deviceName=e.getDeviceName(a),u.mac=a.mac.toUpperCase(),0!=a.local?(u.local="local",u.tx="",u.rx=""):(u.local="remote",u.tx=a.tx,u.rx=a.rx),u.cco=0!=a.cco,u.search=[a.avln_num,a.deviceName,a.mac,a.local,a.tx,a.rx],i.push(u),e.dlanDevicesMfg[a.mac]=n[o].mfg}e.dlanDevices=i,e.secured=r,e.securityText=r?Object(s.b)("Secured"):Object(s.b)("Unsecured")}e.getDevicesInProgress=!1}}))},e.prototype.changeTooltipPlacement=function(e){this.tooltipPlacement=e>767?"left":"top"},e.prototype.onResize=function(e){this.changeTooltipPlacement(e.target.innerWidth)},e}())},JcRv:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("xTla"),i=function(e){return function(t){var n=e[r.a]();if("function"!=typeof n.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return n.subscribe(t)}}},Jf9v:function(e,t,n){"use strict";(function(t,r){var i=n("M2TY"),o=n("tsXx"),s=n("1IWx").Transform,a=n("MCLT");function u(e,t){this._charset=t||"iso-8859-1",this._lex=[],this._escaped=!1,this._node={},this._state=this.states.none,"string"==typeof e?(this._charset="utf-8",this._fileContents=e):this._handleCharset(e)}function c(e,t){!t&&e&&"object"==typeof e&&(t=e,e=void 0),this.defaultCharset=e,this._parser=!1,this._tokens={},this._cache=[],this._cacheSize=0,this.initialTreshold=t.initialTreshold||2048,s.call(this,t),this._writableState.objectMode=!1,this._readableState.objectMode=!0}e.exports.parse=function(e,t){return new u(e,t).parse()},e.exports.stream=function(e,t){return new c(e,t)},u.prototype.parse=function(){return this._lexer(this._fileContents),this._finalize(this._lex)},u.prototype._handleCharset=function(e){var t,n,r=(e||"").toString(),i="";(t=r.search(/^\s*msgid/im))>=0&&(t+=r.substr(t+5).search(/^\s*(msgid|msgctxt)/im))&&(i=r.substr(0,t)),(n=i.match(/[; ]charset\s*=\s*([\w-]+)(?:[\s;]|\\n)*"\s*$/im))&&(this._charset=o.formatCharset(n[1],this._charset)),this._fileContents="utf-8"===this._charset?r:this._toString(e)},u.prototype._toString=function(e){return i.convert(e,"utf-8",this._charset).toString("utf-8")},u.prototype.states={none:1,comments:2,key:3,string:4},u.prototype.types={comments:1,key:2,string:3},u.prototype.symbols={quotes:/["']/,comments:/#/,whitespace:/\s/,key:/[\w\-[\]]/},u.prototype._lexer=function(e){for(var t,n=0,r=e.length;n<r;n++)switch(t=e.charAt(n),this._state){case this.states.none:t.match(this.symbols.quotes)?(this._node={type:this.types.string,value:"",quote:t},this._lex.push(this._node),this._state=this.states.string):t.match(this.symbols.comments)?(this._node={type:this.types.comments,value:""},this._lex.push(this._node),this._state=this.states.comments):t.match(this.symbols.whitespace)||(this._node={type:this.types.key,value:t},this._lex.push(this._node),this._state=this.states.key);break;case this.states.comments:"\n"===t?this._state=this.states.none:"\r"!==t&&(this._node.value+=t);break;case this.states.string:if(this._escaped){switch(t){case"t":this._node.value+="\t";break;case"n":this._node.value+="\n";break;case"r":this._node.value+="\r";break;default:this._node.value+=t}this._escaped=!1}else{if(t===this._node.quote)this._state=this.states.none;else{if("\\"===t){this._escaped=!0;break}this._node.value+=t}this._escaped=!1}break;case this.states.key:t.match(this.symbols.key)?this._node.value+=t:(this._state=this.states.none,n--)}},u.prototype._joinStringValues=function(e){for(var t,n=[],r=0,i=e.length;r<i;r++)t&&e[r].type===this.types.string&&t.type===this.types.string?t.value+=e[r].value:t&&e[r].type===this.types.comments&&t.type===this.types.comments?t.value+="\n"+e[r].value:(n.push(e[r]),t=e[r]);return n},u.prototype._parseComments=function(e){e.forEach((function(e){var t;e&&e.type===this.types.comments&&(t={translator:[],extracted:[],reference:[],flag:[],previous:[]},(e.value||"").split(/\n/).forEach(function(e){switch(e.charAt(0)||""){case":":t.reference.push(e.substr(1).trim());break;case".":t.extracted.push(e.substr(1).replace(/^\s+/,""));break;case",":t.flag.push(e.substr(1).replace(/^\s+/,""));break;case"|":t.previous.push(e.substr(1).replace(/^\s+/,""));break;default:t.translator.push(e.replace(/^\s+/,""))}}),e.value={},Object.keys(t).forEach(function(n){t[n]&&t[n].length&&(e.value[n]=t[n].join("\n"))}))}).bind(this))},u.prototype._handleKeys=function(e){for(var t,n=[],r=0,i=e.length;r<i;r++)e[r].type===this.types.key?(t={key:e[r].value},r&&e[r-1].type===this.types.comments&&(t.comments=e[r-1].value),t.value="",n.push(t)):e[r].type===this.types.string&&t&&(t.value+=e[r].value);return n},u.prototype._handleValues=function(e){for(var t,n,r,i=[],o=0,s=e.length;o<s;o++)"msgctxt"===e[o].key.toLowerCase()?(n=e[o].value,r=e[o].comments):"msgid"===e[o].key.toLowerCase()?(t={msgid:e[o].value},n&&(t.msgctxt=n),r&&(t.comments=r),e[o].comments&&!t.comments&&(t.comments=e[o].comments),n=!1,r=!1,i.push(t)):"msgid_plural"===e[o].key.toLowerCase()?(t&&(t.msgid_plural=e[o].value),e[o].comments&&!t.comments&&(t.comments=e[o].comments),n=!1,r=!1):"msgstr"===e[o].key.substr(0,6).toLowerCase()&&(t&&(t.msgstr=(t.msgstr||[]).concat(e[o].value)),e[o].comments&&!t.comments&&(t.comments=e[o].comments),n=!1,r=!1);return i},u.prototype._normalize=function(e){for(var t,n={charset:this._charset,headers:void 0,translations:{}},r=0,i=e.length;r<i;r++)n.translations[t=e[r].msgctxt||""]||(n.translations[t]={}),n.headers||t||e[r].msgid||(n.headers=o.parseHeader(e[r].msgstr[0])),n.translations[t][e[r].msgid]=e[r];return n},u.prototype._finalize=function(e){var t=this._joinStringValues(e);return this._parseComments(t),t=this._handleKeys(t),t=this._handleValues(t),this._normalize(t)},a.inherits(c,s),c.prototype._transform=function(e,n,i){var o,s=0;if(!e||!e.length)return i();if(this._parser)this._cacheSize&&(this._cache.push(e),this._cacheSize+=e.length,e=r.concat(this._cache,this._cacheSize),this._cacheSize=0,this._cache=[]);else{if(this._cache.push(e),this._cacheSize+=e.length,this._cacheSize<this.initialTreshold)return t(i);this._cacheSize&&(e=r.concat(this._cache,this._cacheSize),this._cacheSize=0,this._cache=[]),this._parser=new u(e,this.defaultCharset)}for(o=e.length-1;o>=0&&e[o]>=128;o--)s++;s&&(this._cache=[e.slice(e.length-s)],this._cacheSize=this._cache[0].length,e=e.slice(0,e.length-s)),e.length&&this._parser._lexer(this._parser._toString(e)),t(i)},c.prototype._flush=function(e){var n;this._cacheSize&&(n=r.concat(this._cache,this._cacheSize)),!this._parser&&n&&(this._parser=new u(n,this.defaultCharset)),n&&this._parser._lexer(this._parser._toString(n)),this._parser&&this.push(this._parser._finalize(this._parser._lex)),t(e)}}).call(this,n("URgk").setImmediate,n("tjlA").Buffer)},K9Ia:function(e,t,n){"use strict";var r=n("mrSG"),i=n("6blF"),o=n("FFOo"),s=n("pugT"),a=n("8g8A"),u=function(e){function t(t,n){var r=e.call(this)||this;return r.subject=t,r.subscriber=n,r.closed=!1,r}return r.c(t,e),t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e=this.subject,t=e.observers;if(this.subject=null,t&&0!==t.length&&!e.isStopped&&!e.closed){var n=t.indexOf(this.subscriber);-1!==n&&t.splice(n,1)}}},t}(s.a),c=n("L/V9");n.d(t,"b",function(){return l}),n.d(t,"a",function(){return h});var l=function(e){function t(t){var n=e.call(this,t)||this;return n.destination=t,n}return r.c(t,e),t}(o.a),h=function(e){function t(){var t=e.call(this)||this;return t.observers=[],t.closed=!1,t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return r.c(t,e),t.prototype[c.a]=function(){return new l(this)},t.prototype.lift=function(e){var t=new f(this,this);return t.operator=e,t},t.prototype.next=function(e){if(this.closed)throw new a.a;if(!this.isStopped)for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].next(e)},t.prototype.error=function(e){if(this.closed)throw new a.a;this.hasError=!0,this.thrownError=e,this.isStopped=!0;for(var t=this.observers,n=t.length,r=t.slice(),i=0;i<n;i++)r[i].error(e);this.observers.length=0},t.prototype.complete=function(){if(this.closed)throw new a.a;this.isStopped=!0;for(var e=this.observers,t=e.length,n=e.slice(),r=0;r<t;r++)n[r].complete();this.observers.length=0},t.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},t.prototype._trySubscribe=function(t){if(this.closed)throw new a.a;return e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){if(this.closed)throw new a.a;return this.hasError?(e.error(this.thrownError),s.a.EMPTY):this.isStopped?(e.complete(),s.a.EMPTY):(this.observers.push(e),new u(this,e))},t.prototype.asObservable=function(){var e=new i.a;return e.source=this,e},t.create=function(e,t){return new f(e,t)},t}(i.a),f=function(e){function t(t,n){var r=e.call(this)||this;return r.destination=t,r.source=n,r}return r.c(t,e),t.prototype.next=function(e){var t=this.destination;t&&t.next&&t.next(e)},t.prototype.error=function(e){var t=this.destination;t&&t.error&&this.destination.error(e)},t.prototype.complete=function(){var e=this.destination;e&&e.complete&&this.destination.complete()},t.prototype._subscribe=function(e){return this.source?this.source.subscribe(e):s.a.EMPTY},t}(h)},KXou:function(e,t,n){"use strict";n.d(t,"a",function(){return f});var r=n("CcnG"),i=n("A7o+"),o=n("Ip0R"),s=n("ClyA"),a=n("jFtu"),u=r.ob({encapsulation:2,styles:[],data:{}});function c(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,"div",[["class","modal-header"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,2,"h3",[],null,null,null,null,null)),(e()(),r.Ib(2,null,["",""])),r.Cb(131072,i.i,[i.j,r.h])],null,function(e,t){var n=t.component;e(t,2,0,r.Jb(t,2,0,r.Ab(t,3).transform(n.title)))})}function l(e){return r.Kb(0,[(e()(),r.hb(16777216,null,null,1,null,c)),r.pb(1,16384,null,0,o.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.qb(2,0,null,null,3,"div",[["class","modal-body"]],null,null,null,null,null)),(e()(),r.qb(3,0,null,null,2,"p",[],null,null,null,null,null)),(e()(),r.Ib(4,null,["",""])),r.Cb(131072,i.i,[i.j,r.h]),(e()(),r.qb(6,0,null,null,6,"div",[["class","modal-footer"]],null,null,null,null,null)),(e()(),r.qb(7,0,null,null,2,"button",[["class","btn btn-default"],["id","btn-modal-close"],["type","button"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.cancel()&&r),r},null,null)),(e()(),r.Ib(8,null,["",""])),r.Cb(131072,i.i,[i.j,r.h]),(e()(),r.qb(10,0,null,null,2,"button",[["class","btn btn-primary"],["id","btn-modal-ok"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.confirm()&&r),r},null,null)),(e()(),r.Ib(11,null,["",""])),r.Cb(131072,i.i,[i.j,r.h])],function(e,t){e(t,1,0,t.component.title)},function(e,t){var n=t.component;e(t,4,0,r.Jb(t,4,0,r.Ab(t,5).transform(n.bodyText))),e(t,8,0,r.Jb(t,8,0,r.Ab(t,9).transform(n.closeButtonText))),e(t,11,0,r.Jb(t,11,0,r.Ab(t,12).transform(n.actionButtonText)))})}function h(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"app-modal-content",[],null,[["document","keydown"]],function(e,t,n){var i=!0;return"document:keydown"===t&&(i=!1!==r.Ab(e,1).handleKeyboardEvent(n)&&i),i},l,u)),r.pb(1,49152,null,0,s.a,[a.a],null,null)],null,null)}var f=r.mb("app-modal-content",s.a,h,{},{},[])},"L/V9":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random()},LGOv:function(e,t,n){e.exports=n("3BRs")},LisU:function(e,t,n){"use strict";var r=n("M2TY"),i=n("tsXx");function o(e,t){this._fileContents=e,this._writeFunc="writeUInt32LE",this._readFunc="readUInt32LE",this._charset=t||"iso-8859-1",this._table={charset:this._charset,headers:void 0,translations:{}}}e.exports=function(e,t){return new o(e,t).parse()},o.prototype.MAGIC=2500072158,o.prototype._checkMagick=function(){return this._fileContents.readUInt32LE(0)===this.MAGIC?(this._readFunc="readUInt32LE",this._writeFunc="writeUInt32LE",!0):this._fileContents.readUInt32BE(0)===this.MAGIC&&(this._readFunc="readUInt32BE",this._writeFunc="writeUInt32BE",!0)},o.prototype._loadTranslationTable=function(){for(var e,t,n,i,o=this._offsetOriginals,s=this._offsetTranslations,a=0;a<this._total;a++)t=this._fileContents[this._readFunc](o),e=this._fileContents[this._readFunc](o+=4),o+=4,n=this._fileContents.slice(e,e+t),t=this._fileContents[this._readFunc](s),e=this._fileContents[this._readFunc](s+=4),s+=4,i=this._fileContents.slice(e,e+t),a||n.toString()||this._handleCharset(i),n=r.convert(n,"utf-8",this._charset).toString("utf-8"),i=r.convert(i,"utf-8",this._charset).toString("utf-8"),this._addString(n,i);this._fileContents=null},o.prototype._handleCharset=function(e){var t;(t=e.toString().match(/[; ]charset\s*=\s*([\w-]+)/i))&&(this._charset=this._table.charset=i.formatCharset(t[1],this._charset)),e=r.convert(e,"utf-8",this._charset).toString("utf-8"),this._table.headers=i.parseHeader(e)},o.prototype._addString=function(e,t){var n,r,i,o={};(e=e.split("\x04")).length>1?(r=e.shift(),o.msgctxt=r):r="",n=(e=e.join("\x04")).split("\0"),e=n.shift(),o.msgid=e,(i=n.join("\0"))&&(o.msgid_plural=i),t=t.split("\0"),o.msgstr=[].concat(t||[]),this._table.translations[r]||(this._table.translations[r]={}),this._table.translations[r][e]=o},o.prototype.parse=function(){return!!this._checkMagick()&&(this._revision=this._fileContents[this._readFunc](4),this._total=this._fileContents[this._readFunc](8),this._offsetOriginals=this._fileContents[this._readFunc](12),this._offsetTranslations=this._fileContents[this._readFunc](16),this._loadTranslationTable(),this._table)}},LvDl:function(e,t,n){(function(e,r){var i;(function(){var o,s=200,a="Expected a function",u="__lodash_placeholder__",c=1,l=2,h=4,f=1,d=2,p=1,g=2,b=4,v=8,y=16,m=32,w=64,_=128,S=256,O=512,C=800,j=16,k=1/0,E=9007199254740991,x=1.7976931348623157e308,P=NaN,T=4294967295,A=T-1,I=T>>>1,M=[["ary",_],["bind",p],["bindKey",g],["curry",v],["curryRight",y],["flip",O],["partial",m],["partialRight",w],["rearg",S]],N="[object Arguments]",R="[object Array]",D="[object AsyncFunction]",V="[object Boolean]",L="[object Date]",U="[object DOMException]",F="[object Error]",B="[object Function]",z="[object GeneratorFunction]",H="[object Map]",q="[object Number]",G="[object Null]",W="[object Object]",K="[object Proxy]",Z="[object RegExp]",Y="[object Set]",$="[object String]",Q="[object Symbol]",J="[object Undefined]",X="[object WeakMap]",ee="[object ArrayBuffer]",te="[object DataView]",ne="[object Float32Array]",re="[object Float64Array]",ie="[object Int8Array]",oe="[object Int16Array]",se="[object Int32Array]",ae="[object Uint8Array]",ue="[object Uint8ClampedArray]",ce="[object Uint16Array]",le="[object Uint32Array]",he=/\b__p \+= '';/g,fe=/\b(__p \+=) '' \+/g,de=/(__e\(.*?\)|\b__t\)) \+\n'';/g,pe=/&(?:amp|lt|gt|quot|#39);/g,ge=/[&<>"']/g,be=RegExp(pe.source),ve=RegExp(ge.source),ye=/<%-([\s\S]+?)%>/g,me=/<%([\s\S]+?)%>/g,we=/<%=([\s\S]+?)%>/g,_e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Se=/^\w*$/,Oe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ce=/[\\^$.*+?()[\]{}|]/g,je=RegExp(Ce.source),ke=/^\s+|\s+$/g,Ee=/^\s+/,xe=/\s+$/,Pe=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Te=/\{\n\/\* \[wrapped with (.+)\] \*/,Ae=/,? & /,Ie=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Me=/\\(\\)?/g,Ne=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Re=/\w*$/,De=/^[-+]0x[0-9a-f]+$/i,Ve=/^0b[01]+$/i,Le=/^\[object .+?Constructor\]$/,Ue=/^0o[0-7]+$/i,Fe=/^(?:0|[1-9]\d*)$/,Be=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ze=/($^)/,He=/['\n\r\u2028\u2029\\]/g,qe="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ge="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",We="["+Ge+"]",Ke="["+qe+"]",Ze="\\d+",Ye="[a-z\\xdf-\\xf6\\xf8-\\xff]",$e="[^\\ud800-\\udfff"+Ge+Ze+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",Qe="\\ud83c[\\udffb-\\udfff]",Je="[^\\ud800-\\udfff]",Xe="(?:\\ud83c[\\udde6-\\uddff]){2}",et="[\\ud800-\\udbff][\\udc00-\\udfff]",tt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",nt="(?:"+Ye+"|"+$e+")",rt="(?:"+tt+"|"+$e+")",it="(?:"+Ke+"|"+Qe+")?",ot="[\\ufe0e\\ufe0f]?"+it+"(?:\\u200d(?:"+[Je,Xe,et].join("|")+")[\\ufe0e\\ufe0f]?"+it+")*",st="(?:"+["[\\u2700-\\u27bf]",Xe,et].join("|")+")"+ot,at="(?:"+[Je+Ke+"?",Ke,Xe,et,"[\\ud800-\\udfff]"].join("|")+")",ut=RegExp("['\u2019]","g"),ct=RegExp(Ke,"g"),lt=RegExp(Qe+"(?="+Qe+")|"+at+ot,"g"),ht=RegExp([tt+"?"+Ye+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[We,tt,"$"].join("|")+")",rt+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[We,tt+nt,"$"].join("|")+")",tt+"?"+nt+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",tt+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Ze,st].join("|"),"g"),ft=RegExp("[\\u200d\\ud800-\\udfff"+qe+"\\ufe0e\\ufe0f]"),dt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,pt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],gt=-1,bt={};bt[ne]=bt[re]=bt[ie]=bt[oe]=bt[se]=bt[ae]=bt[ue]=bt[ce]=bt[le]=!0,bt[N]=bt[R]=bt[ee]=bt[V]=bt[te]=bt[L]=bt[F]=bt[B]=bt[H]=bt[q]=bt[W]=bt[Z]=bt[Y]=bt[$]=bt[X]=!1;var vt={};vt[N]=vt[R]=vt[ee]=vt[te]=vt[V]=vt[L]=vt[ne]=vt[re]=vt[ie]=vt[oe]=vt[se]=vt[H]=vt[q]=vt[W]=vt[Z]=vt[Y]=vt[$]=vt[Q]=vt[ae]=vt[ue]=vt[ce]=vt[le]=!0,vt[F]=vt[B]=vt[X]=!1;var yt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},mt=parseFloat,wt=parseInt,_t="object"==typeof e&&e&&e.Object===Object&&e,St="object"==typeof self&&self&&self.Object===Object&&self,Ot=_t||St||Function("return this")(),Ct=t&&!t.nodeType&&t,jt=Ct&&"object"==typeof r&&r&&!r.nodeType&&r,kt=jt&&jt.exports===Ct,Et=kt&&_t.process,xt=function(){try{return jt&&jt.require&&jt.require("util").types||Et&&Et.binding&&Et.binding("util")}catch(e){}}(),Pt=xt&&xt.isArrayBuffer,Tt=xt&&xt.isDate,At=xt&&xt.isMap,It=xt&&xt.isRegExp,Mt=xt&&xt.isSet,Nt=xt&&xt.isTypedArray;function Rt(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function Dt(e,t,n,r){for(var i=-1,o=null==e?0:e.length;++i<o;){var s=e[i];t(r,s,n(s),e)}return r}function Vt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}function Lt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}function Ut(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n<r;){var s=e[n];t(s,n,e)&&(o[i++]=s)}return o}function Ft(e,t){return!(null==e||!e.length)&&$t(e,t,0)>-1}function Bt(e,t,n){for(var r=-1,i=null==e?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function zt(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}function Ht(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}function qt(e,t,n,r){var i=-1,o=null==e?0:e.length;for(r&&o&&(n=e[++i]);++i<o;)n=t(n,e[i],i,e);return n}function Gt(e,t,n,r){var i=null==e?0:e.length;for(r&&i&&(n=e[--i]);i--;)n=t(n,e[i],i,e);return n}function Wt(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var Kt=en("length");function Zt(e,t,n){var r;return n(e,function(e,n,i){if(t(e,n,i))return r=n,!1}),r}function Yt(e,t,n,r){for(var i=e.length,o=n+(r?1:-1);r?o--:++o<i;)if(t(e[o],o,e))return o;return-1}function $t(e,t,n){return t==t?function(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}(e,t,n):Yt(e,Jt,n)}function Qt(e,t,n,r){for(var i=n-1,o=e.length;++i<o;)if(r(e[i],t))return i;return-1}function Jt(e){return e!=e}function Xt(e,t){var n=null==e?0:e.length;return n?rn(e,t)/n:P}function en(e){return function(t){return null==t?o:t[e]}}function tn(e){return function(t){return null==e?o:e[t]}}function nn(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}function rn(e,t){for(var n,r=-1,i=e.length;++r<i;){var s=t(e[r]);s!==o&&(n=n===o?s:n+s)}return n}function on(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}function sn(e){return function(t){return e(t)}}function an(e,t){return zt(t,function(t){return e[t]})}function un(e,t){return e.has(t)}function cn(e,t){for(var n=-1,r=e.length;++n<r&&$t(t,e[n],0)>-1;);return n}function ln(e,t){for(var n=e.length;n--&&$t(t,e[n],0)>-1;);return n}var hn=tn({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),fn=tn({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function dn(e){return"\\"+yt[e]}function pn(e){return ft.test(e)}function gn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function bn(e,t){return function(n){return e(t(n))}}function vn(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n];s!==t&&s!==u||(e[n]=u,o[i++]=n)}return o}function yn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}function mn(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=[e,e]}),n}function wn(e){return pn(e)?function(e){for(var t=lt.lastIndex=0;lt.test(e);)++t;return t}(e):Kt(e)}function _n(e){return pn(e)?function(e){return e.match(lt)||[]}(e):function(e){return e.split("")}(e)}var Sn=tn({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),On=function e(t){var n,r=(t=null==t?Ot:On.defaults(Ot.Object(),t,On.pick(Ot,pt))).Array,i=t.Date,qe=t.Error,Ge=t.Function,We=t.Math,Ke=t.Object,Ze=t.RegExp,Ye=t.String,$e=t.TypeError,Qe=r.prototype,Je=Ke.prototype,Xe=t["__core-js_shared__"],et=Ge.prototype.toString,tt=Je.hasOwnProperty,nt=0,rt=(n=/[^.]+$/.exec(Xe&&Xe.keys&&Xe.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",it=Je.toString,ot=et.call(Ke),st=Ot._,at=Ze("^"+et.call(tt).replace(Ce,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),lt=kt?t.Buffer:o,ft=t.Symbol,yt=t.Uint8Array,_t=lt?lt.allocUnsafe:o,St=bn(Ke.getPrototypeOf,Ke),Ct=Ke.create,jt=Je.propertyIsEnumerable,Et=Qe.splice,xt=ft?ft.isConcatSpreadable:o,Kt=ft?ft.iterator:o,tn=ft?ft.toStringTag:o,Cn=function(){try{var e=Oo(Ke,"defineProperty");return e({},"",{}),e}catch(t){}}(),jn=t.clearTimeout!==Ot.clearTimeout&&t.clearTimeout,kn=i&&i.now!==Ot.Date.now&&i.now,En=t.setTimeout!==Ot.setTimeout&&t.setTimeout,xn=We.ceil,Pn=We.floor,Tn=Ke.getOwnPropertySymbols,An=lt?lt.isBuffer:o,In=t.isFinite,Mn=Qe.join,Nn=bn(Ke.keys,Ke),Rn=We.max,Dn=We.min,Vn=i.now,Ln=t.parseInt,Un=We.random,Fn=Qe.reverse,Bn=Oo(t,"DataView"),zn=Oo(t,"Map"),Hn=Oo(t,"Promise"),qn=Oo(t,"Set"),Gn=Oo(t,"WeakMap"),Wn=Oo(Ke,"create"),Kn=Gn&&new Gn,Zn={},Yn=Yo(Bn),$n=Yo(zn),Qn=Yo(Hn),Jn=Yo(qn),Xn=Yo(Gn),er=ft?ft.prototype:o,tr=er?er.valueOf:o,nr=er?er.toString:o;function rr(e){if(fa(e)&&!ta(e)&&!(e instanceof ar)){if(e instanceof sr)return e;if(tt.call(e,"__wrapped__"))return $o(e)}return new sr(e)}var ir=function(){function e(){}return function(t){if(!ha(t))return{};if(Ct)return Ct(t);e.prototype=t;var n=new e;return e.prototype=o,n}}();function or(){}function sr(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=o}function ar(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=T,this.__views__=[]}function ur(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function cr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function lr(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function hr(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new lr;++t<n;)this.add(e[t])}function fr(e){var t=this.__data__=new cr(e);this.size=t.size}function dr(e,t){var n=ta(e),r=!n&&ea(e),i=!n&&!r&&oa(e),o=!n&&!r&&!i&&wa(e),s=n||r||i||o,a=s?on(e.length,Ye):[],u=a.length;for(var c in e)!t&&!tt.call(e,c)||s&&("length"==c||i&&("offset"==c||"parent"==c)||o&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||To(c,u))||a.push(c);return a}function pr(e){var t=e.length;return t?e[ui(0,t-1)]:o}function gr(e,t,n){(n===o||Qs(e[t],n))&&(n!==o||t in e)||wr(e,t,n)}function br(e,t,n){var r=e[t];tt.call(e,t)&&Qs(r,n)&&(n!==o||t in e)||wr(e,t,n)}function vr(e,t){for(var n=e.length;n--;)if(Qs(e[n][0],t))return n;return-1}function yr(e,t,n,r){return Er(e,function(e,i,o){t(r,e,n(e),o)}),r}function mr(e,t){return e&&Bi(t,za(t),e)}function wr(e,t,n){"__proto__"==t&&Cn?Cn(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}function _r(e,t){for(var n=-1,i=t.length,s=r(i),a=null==e;++n<i;)s[n]=a?o:Va(e,t[n]);return s}function Sr(e,t,n){return e==e&&(n!==o&&(e=e<=n?e:n),t!==o&&(e=e>=t?e:t)),e}function Or(e,t,n,r,i,s){var a,u=t&c,f=t&l,d=t&h;if(n&&(a=i?n(e,r,i,s):n(e)),a!==o)return a;if(!ha(e))return e;var p=ta(e);if(p){if(a=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&tt.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!u)return Fi(e,a)}else{var g=ko(e),b=g==B||g==z;if(oa(e))return Ni(e,u);if(g==W||g==N||b&&!i){if(a=f||b?{}:xo(e),!u)return f?function(e,t){return Bi(e,jo(e),t)}(e,function(t,n){return t&&Bi(e,Ha(e),t)}(a)):function(e,t){return Bi(e,Co(e),t)}(e,mr(a,e))}else{if(!vt[g])return i?e:{};a=function(e,t,n){var r,i,o=e.constructor;switch(t){case ee:return Ri(e);case V:case L:return new o(+e);case te:return function(e,t){var n=t?Ri(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case ne:case re:case ie:case oe:case se:case ae:case ue:case ce:case le:return Di(e,n);case H:return new o;case q:case $:return new o(e);case Z:return(i=new(r=e).constructor(r.source,Re.exec(r))).lastIndex=r.lastIndex,i;case Y:return new o;case Q:return tr?Ke(tr.call(e)):{}}}(e,g,u)}}s||(s=new fr);var v=s.get(e);if(v)return v;if(s.set(e,a),va(e))return e.forEach(function(r){a.add(Or(r,t,n,r,e,s))}),a;if(da(e))return e.forEach(function(r,i){a.set(i,Or(r,t,n,i,e,s))}),a;var y=p?o:(d?f?bo:go:f?Ha:za)(e);return Vt(y||e,function(r,i){y&&(r=e[i=r]),br(a,i,Or(r,t,n,i,e,s))}),a}function Cr(e,t,n){var r=n.length;if(null==e)return!r;for(e=Ke(e);r--;){var i=n[r],s=e[i];if(s===o&&!(i in e)||!(0,t[i])(s))return!1}return!0}function jr(e,t,n){if("function"!=typeof e)throw new $e(a);return zo(function(){e.apply(o,n)},t)}function kr(e,t,n,r){var i=-1,o=Ft,a=!0,u=e.length,c=[],l=t.length;if(!u)return c;n&&(t=zt(t,sn(n))),r?(o=Bt,a=!1):t.length>=s&&(o=un,a=!1,t=new hr(t));e:for(;++i<u;){var h=e[i],f=null==n?h:n(h);if(h=r||0!==h?h:0,a&&f==f){for(var d=l;d--;)if(t[d]===f)continue e;c.push(h)}else o(t,f,r)||c.push(h)}return c}rr.templateSettings={escape:ye,evaluate:me,interpolate:we,variable:"",imports:{_:rr}},(rr.prototype=or.prototype).constructor=rr,(sr.prototype=ir(or.prototype)).constructor=sr,(ar.prototype=ir(or.prototype)).constructor=ar,ur.prototype.clear=function(){this.__data__=Wn?Wn(null):{},this.size=0},ur.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},ur.prototype.get=function(e){var t=this.__data__;if(Wn){var n=t[e];return"__lodash_hash_undefined__"===n?o:n}return tt.call(t,e)?t[e]:o},ur.prototype.has=function(e){var t=this.__data__;return Wn?t[e]!==o:tt.call(t,e)},ur.prototype.set=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Wn&&t===o?"__lodash_hash_undefined__":t,this},cr.prototype.clear=function(){this.__data__=[],this.size=0},cr.prototype.delete=function(e){var t=this.__data__,n=vr(t,e);return!(n<0||(n==t.length-1?t.pop():Et.call(t,n,1),--this.size,0))},cr.prototype.get=function(e){var t=this.__data__,n=vr(t,e);return n<0?o:t[n][1]},cr.prototype.has=function(e){return vr(this.__data__,e)>-1},cr.prototype.set=function(e,t){var n=this.__data__,r=vr(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},lr.prototype.clear=function(){this.size=0,this.__data__={hash:new ur,map:new(zn||cr),string:new ur}},lr.prototype.delete=function(e){var t=_o(this,e).delete(e);return this.size-=t?1:0,t},lr.prototype.get=function(e){return _o(this,e).get(e)},lr.prototype.has=function(e){return _o(this,e).has(e)},lr.prototype.set=function(e,t){var n=_o(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},hr.prototype.add=hr.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},hr.prototype.has=function(e){return this.__data__.has(e)},fr.prototype.clear=function(){this.__data__=new cr,this.size=0},fr.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},fr.prototype.get=function(e){return this.__data__.get(e)},fr.prototype.has=function(e){return this.__data__.has(e)},fr.prototype.set=function(e,t){var n=this.__data__;if(n instanceof cr){var r=n.__data__;if(!zn||r.length<s-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new lr(r)}return n.set(e,t),this.size=n.size,this};var Er=qi(Rr),xr=qi(Dr,!0);function Pr(e,t){var n=!0;return Er(e,function(e,r,i){return n=!!t(e,r,i)}),n}function Tr(e,t,n){for(var r=-1,i=e.length;++r<i;){var s=e[r],a=t(s);if(null!=a&&(u===o?a==a&&!ma(a):n(a,u)))var u=a,c=s}return c}function Ar(e,t){var n=[];return Er(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function Ir(e,t,n,r,i){var o=-1,s=e.length;for(n||(n=Po),i||(i=[]);++o<s;){var a=e[o];t>0&&n(a)?t>1?Ir(a,t-1,n,r,i):Ht(i,a):r||(i[i.length]=a)}return i}var Mr=Gi(),Nr=Gi(!0);function Rr(e,t){return e&&Mr(e,t,za)}function Dr(e,t){return e&&Nr(e,t,za)}function Vr(e,t){return Ut(t,function(t){return ua(e[t])})}function Lr(e,t){for(var n=0,r=(t=Ti(t,e)).length;null!=e&&n<r;)e=e[Zo(t[n++])];return n&&n==r?e:o}function Ur(e,t,n){var r=t(e);return ta(e)?r:Ht(r,n(e))}function Fr(e){return null==e?e===o?J:G:tn&&tn in Ke(e)?function(e){var t=tt.call(e,tn),n=e[tn];try{e[tn]=o;var r=!0}catch(s){}var i=it.call(e);return r&&(t?e[tn]=n:delete e[tn]),i}(e):function(e){return it.call(e)}(e)}function Br(e,t){return e>t}function zr(e,t){return null!=e&&tt.call(e,t)}function Hr(e,t){return null!=e&&t in Ke(e)}function qr(e,t,n){for(var i=n?Bt:Ft,s=e[0].length,a=e.length,u=a,c=r(a),l=1/0,h=[];u--;){var f=e[u];u&&t&&(f=zt(f,sn(t))),l=Dn(f.length,l),c[u]=!n&&(t||s>=120&&f.length>=120)?new hr(u&&f):o}f=e[0];var d=-1,p=c[0];e:for(;++d<s&&h.length<l;){var g=f[d],b=t?t(g):g;if(g=n||0!==g?g:0,!(p?un(p,b):i(h,b,n))){for(u=a;--u;){var v=c[u];if(!(v?un(v,b):i(e[u],b,n)))continue e}p&&p.push(b),h.push(g)}}return h}function Gr(e,t,n){var r=null==(e=Uo(e,t=Ti(t,e)))?e:e[Zo(as(t))];return null==r?o:Rt(r,e,n)}function Wr(e){return fa(e)&&Fr(e)==N}function Kr(e,t,n,r,i){return e===t||(null==e||null==t||!fa(e)&&!fa(t)?e!=e&&t!=t:function(e,t,n,r,i,s){var a=ta(e),u=ta(t),c=a?R:ko(e),l=u?R:ko(t),h=(c=c==N?W:c)==W,p=(l=l==N?W:l)==W,g=c==l;if(g&&oa(e)){if(!oa(t))return!1;a=!0,h=!1}if(g&&!h)return s||(s=new fr),a||wa(e)?fo(e,t,n,r,i,s):function(e,t,n,r,i,o,s){switch(c){case te:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case ee:return!(e.byteLength!=t.byteLength||!o(new yt(e),new yt(t)));case V:case L:case q:return Qs(+e,+t);case F:return e.name==t.name&&e.message==t.message;case Z:case $:return e==t+"";case H:var a=gn;case Y:if(a||(a=yn),e.size!=t.size&&!(r&f))return!1;var u=s.get(e);if(u)return u==t;r|=d,s.set(e,t);var l=fo(a(e),a(t),r,i,o,s);return s.delete(e),l;case Q:if(tr)return tr.call(e)==tr.call(t)}return!1}(e,t,0,n,r,i,s);if(!(n&f)){var b=h&&tt.call(e,"__wrapped__"),v=p&&tt.call(t,"__wrapped__");if(b||v){var y=b?e.value():e,m=v?t.value():t;return s||(s=new fr),i(y,m,n,r,s)}}return!!g&&(s||(s=new fr),function(e,t,n,r,i,s){var a=n&f,u=go(e),c=u.length;if(c!=go(t).length&&!a)return!1;for(var l=c;l--;){var h=u[l];if(!(a?h in t:tt.call(t,h)))return!1}var d=s.get(e);if(d&&s.get(t))return d==t;var p=!0;s.set(e,t),s.set(t,e);for(var g=a;++l<c;){var b=e[h=u[l]],v=t[h];if(r)var y=a?r(v,b,h,t,e,s):r(b,v,h,e,t,s);if(!(y===o?b===v||i(b,v,n,r,s):y)){p=!1;break}g||(g="constructor"==h)}if(p&&!g){var m=e.constructor,w=t.constructor;m!=w&&"constructor"in e&&"constructor"in t&&!("function"==typeof m&&m instanceof m&&"function"==typeof w&&w instanceof w)&&(p=!1)}return s.delete(e),s.delete(t),p}(e,t,n,r,i,s))}(e,t,n,r,Kr,i))}function Zr(e,t,n,r){var i=n.length,s=i,a=!r;if(null==e)return!s;for(e=Ke(e);i--;){var u=n[i];if(a&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i<s;){var c=(u=n[i])[0],l=e[c],h=u[1];if(a&&u[2]){if(l===o&&!(c in e))return!1}else{var p=new fr;if(r)var g=r(l,h,c,e,t,p);if(!(g===o?Kr(h,l,f|d,r,p):g))return!1}}return!0}function Yr(e){return!(!ha(e)||(t=e,rt&&rt in t))&&(ua(e)?at:Le).test(Yo(e));var t}function $r(e){return"function"==typeof e?e:null==e?pu:"object"==typeof e?ta(e)?ti(e[0],e[1]):ei(e):Ou(e)}function Qr(e){if(!Ro(e))return Nn(e);var t=[];for(var n in Ke(e))tt.call(e,n)&&"constructor"!=n&&t.push(n);return t}function Jr(e,t){return e<t}function Xr(e,t){var n=-1,i=ra(e)?r(e.length):[];return Er(e,function(e,r,o){i[++n]=t(e,r,o)}),i}function ei(e){var t=So(e);return 1==t.length&&t[0][2]?Vo(t[0][0],t[0][1]):function(n){return n===e||Zr(n,e,t)}}function ti(e,t){return Io(e)&&Do(t)?Vo(Zo(e),t):function(n){var r=Va(n,e);return r===o&&r===t?La(n,e):Kr(t,r,f|d)}}function ni(e,t,n,r,i){e!==t&&Mr(t,function(s,a){if(ha(s))i||(i=new fr),function(e,t,n,r,i,s,a){var u=Fo(e,n),c=Fo(t,n),l=a.get(c);if(l)gr(e,n,l);else{var h=s?s(u,c,n+"",e,t,a):o,f=h===o;if(f){var d=ta(c),p=!d&&oa(c),g=!d&&!p&&wa(c);h=c,d||p||g?ta(u)?h=u:ia(u)?h=Fi(u):p?(f=!1,h=Ni(c,!0)):g?(f=!1,h=Di(c,!0)):h=[]:ga(c)||ea(c)?(h=u,ea(u)?h=xa(u):ha(u)&&!ua(u)||(h=xo(c))):f=!1}f&&(a.set(c,h),i(h,c,r,s,a),a.delete(c)),gr(e,n,h)}}(e,t,a,n,ni,r,i);else{var u=r?r(Fo(e,a),s,a+"",e,t,i):o;u===o&&(u=s),gr(e,a,u)}},Ha)}function ri(e,t){var n=e.length;if(n)return To(t+=t<0?n:0,n)?e[t]:o}function ii(e,t,n){var r=-1;return t=zt(t.length?t:[pu],sn(wo())),function(e,t){var r=e.length;for(e.sort(function(e,t){return function(e,t,n){for(var r=-1,i=e.criteria,o=t.criteria,s=i.length,a=n.length;++r<s;){var u=Vi(i[r],o[r]);if(u)return r>=a?u:u*("desc"==n[r]?-1:1)}return e.index-t.index}(e,t,n)});r--;)e[r]=e[r].value;return e}(Xr(e,function(e,n,i){return{criteria:zt(t,function(t){return t(e)}),index:++r,value:e}}))}function oi(e,t,n){for(var r=-1,i=t.length,o={};++r<i;){var s=t[r],a=Lr(e,s);n(a,s)&&hi(o,Ti(s,e),a)}return o}function si(e,t,n,r){var i=r?Qt:$t,o=-1,s=t.length,a=e;for(e===t&&(t=Fi(t)),n&&(a=zt(e,sn(n)));++o<s;)for(var u=0,c=t[o],l=n?n(c):c;(u=i(a,l,u,r))>-1;)a!==e&&Et.call(a,u,1),Et.call(e,u,1);return e}function ai(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==o){var o=i;To(i)?Et.call(e,i,1):Si(e,i)}}return e}function ui(e,t){return e+Pn(Un()*(t-e+1))}function ci(e,t){var n="";if(!e||t<1||t>E)return n;do{t%2&&(n+=e),(t=Pn(t/2))&&(e+=e)}while(t);return n}function li(e,t){return Ho(Lo(e,t,pu),e+"")}function hi(e,t,n,r){if(!ha(e))return e;for(var i=-1,s=(t=Ti(t,e)).length,a=s-1,u=e;null!=u&&++i<s;){var c=Zo(t[i]),l=n;if(i!=a){var h=u[c];(l=r?r(h,c,u):o)===o&&(l=ha(h)?h:To(t[i+1])?[]:{})}br(u,c,l),u=u[c]}return e}var fi=Kn?function(e,t){return Kn.set(e,t),e}:pu,di=Cn?function(e,t){return Cn(e,"toString",{configurable:!0,enumerable:!1,value:hu(t),writable:!0})}:pu;function pi(e,t,n){var i=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=r(o);++i<o;)s[i]=e[i+t];return s}function gi(e,t){var n;return Er(e,function(e,r,i){return!(n=t(e,r,i))}),!!n}function bi(e,t,n){var r=0,i=null==e?r:e.length;if("number"==typeof t&&t==t&&i<=I){for(;r<i;){var o=r+i>>>1,s=e[o];null!==s&&!ma(s)&&(n?s<=t:s<t)?r=o+1:i=o}return i}return vi(e,t,pu,n)}function vi(e,t,n,r){t=n(t);for(var i=0,s=null==e?0:e.length,a=t!=t,u=null===t,c=ma(t),l=t===o;i<s;){var h=Pn((i+s)/2),f=n(e[h]),d=f!==o,p=null===f,g=f==f,b=ma(f);if(a)var v=r||g;else v=l?g&&(r||d):u?g&&d&&(r||!p):c?g&&d&&!p&&(r||!b):!p&&!b&&(r?f<=t:f<t);v?i=h+1:s=h}return Dn(s,A)}function yi(e,t){for(var n=-1,r=e.length,i=0,o=[];++n<r;){var s=e[n],a=t?t(s):s;if(!n||!Qs(a,u)){var u=a;o[i++]=0===s?0:s}}return o}function mi(e){return"number"==typeof e?e:ma(e)?P:+e}function wi(e){if("string"==typeof e)return e;if(ta(e))return zt(e,wi)+"";if(ma(e))return nr?nr.call(e):"";var t=e+"";return"0"==t&&1/e==-k?"-0":t}function _i(e,t,n){var r=-1,i=Ft,o=e.length,a=!0,u=[],c=u;if(n)a=!1,i=Bt;else if(o>=s){var l=t?null:so(e);if(l)return yn(l);a=!1,i=un,c=new hr}else c=t?[]:u;e:for(;++r<o;){var h=e[r],f=t?t(h):h;if(h=n||0!==h?h:0,a&&f==f){for(var d=c.length;d--;)if(c[d]===f)continue e;t&&c.push(f),u.push(h)}else i(c,f,n)||(c!==u&&c.push(f),u.push(h))}return u}function Si(e,t){return null==(e=Uo(e,t=Ti(t,e)))||delete e[Zo(as(t))]}function Oi(e,t,n,r){return hi(e,t,n(Lr(e,t)),r)}function Ci(e,t,n,r){for(var i=e.length,o=r?i:-1;(r?o--:++o<i)&&t(e[o],o,e););return n?pi(e,r?0:o,r?o+1:i):pi(e,r?o+1:0,r?i:o)}function ji(e,t){var n=e;return n instanceof ar&&(n=n.value()),qt(t,function(e,t){return t.func.apply(t.thisArg,Ht([e],t.args))},n)}function ki(e,t,n){var i=e.length;if(i<2)return i?_i(e[0]):[];for(var o=-1,s=r(i);++o<i;)for(var a=e[o],u=-1;++u<i;)u!=o&&(s[o]=kr(s[o]||a,e[u],t,n));return _i(Ir(s,1),t,n)}function Ei(e,t,n){for(var r=-1,i=e.length,s=t.length,a={};++r<i;)n(a,e[r],r<s?t[r]:o);return a}function xi(e){return ia(e)?e:[]}function Pi(e){return"function"==typeof e?e:pu}function Ti(e,t){return ta(e)?e:Io(e,t)?[e]:Ko(Pa(e))}var Ai=li;function Ii(e,t,n){var r=e.length;return n=n===o?r:n,!t&&n>=r?e:pi(e,t,n)}var Mi=jn||function(e){return Ot.clearTimeout(e)};function Ni(e,t){if(t)return e.slice();var n=e.length,r=_t?_t(n):new e.constructor(n);return e.copy(r),r}function Ri(e){var t=new e.constructor(e.byteLength);return new yt(t).set(new yt(e)),t}function Di(e,t){var n=t?Ri(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function Vi(e,t){if(e!==t){var n=e!==o,r=null===e,i=e==e,s=ma(e),a=t!==o,u=null===t,c=t==t,l=ma(t);if(!u&&!l&&!s&&e>t||s&&a&&c&&!u&&!l||r&&a&&c||!n&&c||!i)return 1;if(!r&&!s&&!l&&e<t||l&&n&&i&&!r&&!s||u&&n&&i||!a&&i||!c)return-1}return 0}function Li(e,t,n,i){for(var o=-1,s=e.length,a=n.length,u=-1,c=t.length,l=Rn(s-a,0),h=r(c+l),f=!i;++u<c;)h[u]=t[u];for(;++o<a;)(f||o<s)&&(h[n[o]]=e[o]);for(;l--;)h[u++]=e[o++];return h}function Ui(e,t,n,i){for(var o=-1,s=e.length,a=-1,u=n.length,c=-1,l=t.length,h=Rn(s-u,0),f=r(h+l),d=!i;++o<h;)f[o]=e[o];for(var p=o;++c<l;)f[p+c]=t[c];for(;++a<u;)(d||o<s)&&(f[p+n[a]]=e[o++]);return f}function Fi(e,t){var n=-1,i=e.length;for(t||(t=r(i));++n<i;)t[n]=e[n];return t}function Bi(e,t,n,r){var i=!n;n||(n={});for(var s=-1,a=t.length;++s<a;){var u=t[s],c=r?r(n[u],e[u],u,n,e):o;c===o&&(c=e[u]),i?wr(n,u,c):br(n,u,c)}return n}function zi(e,t){return function(n,r){var i=ta(n)?Dt:yr,o=t?t():{};return i(n,e,wo(r,2),o)}}function Hi(e){return li(function(t,n){var r=-1,i=n.length,s=i>1?n[i-1]:o,a=i>2?n[2]:o;for(s=e.length>3&&"function"==typeof s?(i--,s):o,a&&Ao(n[0],n[1],a)&&(s=i<3?o:s,i=1),t=Ke(t);++r<i;){var u=n[r];u&&e(t,u,r,s)}return t})}function qi(e,t){return function(n,r){if(null==n)return n;if(!ra(n))return e(n,r);for(var i=n.length,o=t?i:-1,s=Ke(n);(t?o--:++o<i)&&!1!==r(s[o],o,s););return n}}function Gi(e){return function(t,n,r){for(var i=-1,o=Ke(t),s=r(t),a=s.length;a--;){var u=s[e?a:++i];if(!1===n(o[u],u,o))break}return t}}function Wi(e){return function(t){var n=pn(t=Pa(t))?_n(t):o,r=n?n[0]:t.charAt(0),i=n?Ii(n,1).join(""):t.slice(1);return r[e]()+i}}function Ki(e){return function(t){return qt(uu(eu(t).replace(ut,"")),e,"")}}function Zi(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=ir(e.prototype),r=e.apply(n,t);return ha(r)?r:n}}function Yi(e){return function(t,n,r){var i=Ke(t);if(!ra(t)){var s=wo(n,3);t=za(t),n=function(e){return s(i[e],e,i)}}var a=e(t,n,r);return a>-1?i[s?t[a]:a]:o}}function $i(e){return po(function(t){var n=t.length,r=n,i=sr.prototype.thru;for(e&&t.reverse();r--;){var s=t[r];if("function"!=typeof s)throw new $e(a);if(i&&!u&&"wrapper"==yo(s))var u=new sr([],!0)}for(r=u?r:n;++r<n;){var c=yo(s=t[r]),l="wrapper"==c?vo(s):o;u=l&&Mo(l[0])&&l[1]==(_|v|m|S)&&!l[4].length&&1==l[9]?u[yo(l[0])].apply(u,l[3]):1==s.length&&Mo(s)?u[c]():u.thru(s)}return function(){var e=arguments,r=e[0];if(u&&1==e.length&&ta(r))return u.plant(r).value();for(var i=0,o=n?t[i].apply(this,e):r;++i<n;)o=t[i].call(this,o);return o}})}function Qi(e,t,n,i,s,a,u,c,l,h){var f=t&_,d=t&p,b=t&g,m=t&(v|y),w=t&O,S=b?o:Zi(e);return function p(){for(var g=arguments.length,v=r(g),y=g;y--;)v[y]=arguments[y];if(m)var _=mo(p),O=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}(v,_);if(i&&(v=Li(v,i,s,m)),a&&(v=Ui(v,a,u,m)),g-=O,m&&g<h){var C=vn(v,_);return io(e,t,Qi,p.placeholder,n,v,C,c,l,h-g)}var j=d?n:this,k=b?j[e]:e;return g=v.length,c?v=function(e,t){for(var n=e.length,r=Dn(t.length,n),i=Fi(e);r--;){var s=t[r];e[r]=To(s,n)?i[s]:o}return e}(v,c):w&&g>1&&v.reverse(),f&&l<g&&(v.length=l),this&&this!==Ot&&this instanceof p&&(k=S||Zi(k)),k.apply(j,v)}}function Ji(e,t){return function(n,r){return function(e,t,n,r){return Rr(e,function(e,i,o){t(r,n(e),i,o)}),r}(n,e,t(r),{})}}function Xi(e,t){return function(n,r){var i;if(n===o&&r===o)return t;if(n!==o&&(i=n),r!==o){if(i===o)return r;"string"==typeof n||"string"==typeof r?(n=wi(n),r=wi(r)):(n=mi(n),r=mi(r)),i=e(n,r)}return i}}function eo(e){return po(function(t){return t=zt(t,sn(wo())),li(function(n){var r=this;return e(t,function(e){return Rt(e,r,n)})})})}function to(e,t){var n=(t=t===o?" ":wi(t)).length;if(n<2)return n?ci(t,e):t;var r=ci(t,xn(e/wn(t)));return pn(t)?Ii(_n(r),0,e).join(""):r.slice(0,e)}function no(e){return function(t,n,i){return i&&"number"!=typeof i&&Ao(t,n,i)&&(n=i=o),t=Ca(t),n===o?(n=t,t=0):n=Ca(n),function(e,t,n,i){for(var o=-1,s=Rn(xn((t-e)/(n||1)),0),a=r(s);s--;)a[i?s:++o]=e,e+=n;return a}(t,n,i=i===o?t<n?1:-1:Ca(i),e)}}function ro(e){return function(t,n){return"string"==typeof t&&"string"==typeof n||(t=Ea(t),n=Ea(n)),e(t,n)}}function io(e,t,n,r,i,s,a,u,c,l){var h=t&v;t|=h?m:w,(t&=~(h?w:m))&b||(t&=~(p|g));var f=[e,t,i,h?s:o,h?a:o,h?o:s,h?o:a,u,c,l],d=n.apply(o,f);return Mo(e)&&Bo(d,f),d.placeholder=r,qo(d,e,t)}function oo(e){var t=We[e];return function(e,n){if(e=Ea(e),n=null==n?0:Dn(ja(n),292)){var r=(Pa(e)+"e").split("e");return+((r=(Pa(t(r[0]+"e"+(+r[1]+n)))+"e").split("e"))[0]+"e"+(+r[1]-n))}return t(e)}}var so=qn&&1/yn(new qn([,-0]))[1]==k?function(e){return new qn(e)}:mu;function ao(e){return function(t){var n=ko(t);return n==H?gn(t):n==Y?mn(t):function(e,t){return zt(t,function(t){return[t,e[t]]})}(t,e(t))}}function uo(e,t,n,i,s,c,l,h){var f=t&g;if(!f&&"function"!=typeof e)throw new $e(a);var d=i?i.length:0;if(d||(t&=~(m|w),i=s=o),l=l===o?l:Rn(ja(l),0),h=h===o?h:ja(h),d-=s?s.length:0,t&w){var O=i,C=s;i=s=o}var j=f?o:vo(e),k=[e,t,n,i,s,O,C,c,l,h];if(j&&function(e,t){var n=e[1],r=t[1],i=n|r;if(!(i<(p|g|_)||r==_&&n==v||r==_&&n==S&&e[7].length<=t[8]||r==(_|S)&&t[7].length<=t[8]&&n==v))return e;r&p&&(e[2]=t[2],i|=n&p?0:b);var o=t[3];if(o){var s=e[3];e[3]=s?Li(s,o,t[4]):o,e[4]=s?vn(e[3],u):t[4]}(o=t[5])&&(e[5]=(s=e[5])?Ui(s,o,t[6]):o,e[6]=s?vn(e[5],u):t[6]),(o=t[7])&&(e[7]=o),r&_&&(e[8]=null==e[8]?t[8]:Dn(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=i}(k,j),e=k[0],t=k[1],n=k[2],i=k[3],s=k[4],!(h=k[9]=k[9]===o?f?0:e.length:Rn(k[9]-d,0))&&t&(v|y)&&(t&=~(v|y)),t&&t!=p)E=t==v||t==y?function(e,t,n){var i=Zi(e);return function s(){for(var a=arguments.length,u=r(a),c=a,l=mo(s);c--;)u[c]=arguments[c];var h=a<3&&u[0]!==l&&u[a-1]!==l?[]:vn(u,l);return(a-=h.length)<n?io(e,t,Qi,s.placeholder,o,u,h,o,o,n-a):Rt(this&&this!==Ot&&this instanceof s?i:e,this,u)}}(e,t,h):t!=m&&t!=(p|m)||s.length?Qi.apply(o,k):function(e,t,n,i){var o=t&p,s=Zi(e);return function t(){for(var a=-1,u=arguments.length,c=-1,l=i.length,h=r(l+u),f=this&&this!==Ot&&this instanceof t?s:e;++c<l;)h[c]=i[c];for(;u--;)h[c++]=arguments[++a];return Rt(f,o?n:this,h)}}(e,t,n,i);else var E=function(e,t,n){var r=t&p,i=Zi(e);return function t(){return(this&&this!==Ot&&this instanceof t?i:e).apply(r?n:this,arguments)}}(e,t,n);return qo((j?fi:Bo)(E,k),e,t)}function co(e,t,n,r){return e===o||Qs(e,Je[n])&&!tt.call(r,n)?t:e}function lo(e,t,n,r,i,s){return ha(e)&&ha(t)&&(s.set(t,e),ni(e,t,o,lo,s),s.delete(t)),e}function ho(e){return ga(e)?o:e}function fo(e,t,n,r,i,s){var a=n&f,u=e.length,c=t.length;if(u!=c&&!(a&&c>u))return!1;var l=s.get(e);if(l&&s.get(t))return l==t;var h=-1,p=!0,g=n&d?new hr:o;for(s.set(e,t),s.set(t,e);++h<u;){var b=e[h],v=t[h];if(r)var y=a?r(v,b,h,t,e,s):r(b,v,h,e,t,s);if(y!==o){if(y)continue;p=!1;break}if(g){if(!Wt(t,function(e,t){if(!un(g,t)&&(b===e||i(b,e,n,r,s)))return g.push(t)})){p=!1;break}}else if(b!==v&&!i(b,v,n,r,s)){p=!1;break}}return s.delete(e),s.delete(t),p}function po(e){return Ho(Lo(e,o,ns),e+"")}function go(e){return Ur(e,za,Co)}function bo(e){return Ur(e,Ha,jo)}var vo=Kn?function(e){return Kn.get(e)}:mu;function yo(e){for(var t=e.name+"",n=Zn[t],r=tt.call(Zn,t)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==e)return i.name}return t}function mo(e){return(tt.call(rr,"placeholder")?rr:e).placeholder}function wo(){var e=rr.iteratee||gu;return e=e===gu?$r:e,arguments.length?e(arguments[0],arguments[1]):e}function _o(e,t){var n,r,i=e.__data__;return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function So(e){for(var t=za(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,Do(i)]}return t}function Oo(e,t){var n=function(e,t){return null==e?o:e[t]}(e,t);return Yr(n)?n:o}var Co=Tn?function(e){return null==e?[]:(e=Ke(e),Ut(Tn(e),function(t){return jt.call(e,t)}))}:ku,jo=Tn?function(e){for(var t=[];e;)Ht(t,Co(e)),e=St(e);return t}:ku,ko=Fr;function Eo(e,t,n){for(var r=-1,i=(t=Ti(t,e)).length,o=!1;++r<i;){var s=Zo(t[r]);if(!(o=null!=e&&n(e,s)))break;e=e[s]}return o||++r!=i?o:!!(i=null==e?0:e.length)&&la(i)&&To(s,i)&&(ta(e)||ea(e))}function xo(e){return"function"!=typeof e.constructor||Ro(e)?{}:ir(St(e))}function Po(e){return ta(e)||ea(e)||!!(xt&&e&&e[xt])}function To(e,t){var n=typeof e;return!!(t=null==t?E:t)&&("number"==n||"symbol"!=n&&Fe.test(e))&&e>-1&&e%1==0&&e<t}function Ao(e,t,n){if(!ha(n))return!1;var r=typeof t;return!!("number"==r?ra(n)&&To(t,n.length):"string"==r&&t in n)&&Qs(n[t],e)}function Io(e,t){if(ta(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!ma(e))||Se.test(e)||!_e.test(e)||null!=t&&e in Ke(t)}function Mo(e){var t=yo(e),n=rr[t];if("function"!=typeof n||!(t in ar.prototype))return!1;if(e===n)return!0;var r=vo(n);return!!r&&e===r[0]}(Bn&&ko(new Bn(new ArrayBuffer(1)))!=te||zn&&ko(new zn)!=H||Hn&&"[object Promise]"!=ko(Hn.resolve())||qn&&ko(new qn)!=Y||Gn&&ko(new Gn)!=X)&&(ko=function(e){var t=Fr(e),n=t==W?e.constructor:o,r=n?Yo(n):"";if(r)switch(r){case Yn:return te;case $n:return H;case Qn:return"[object Promise]";case Jn:return Y;case Xn:return X}return t});var No=Xe?ua:Eu;function Ro(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Je)}function Do(e){return e==e&&!ha(e)}function Vo(e,t){return function(n){return null!=n&&n[e]===t&&(t!==o||e in Ke(n))}}function Lo(e,t,n){return t=Rn(t===o?e.length-1:t,0),function(){for(var i=arguments,o=-1,s=Rn(i.length-t,0),a=r(s);++o<s;)a[o]=i[t+o];o=-1;for(var u=r(t+1);++o<t;)u[o]=i[o];return u[t]=n(a),Rt(e,this,u)}}function Uo(e,t){return t.length<2?e:Lr(e,pi(t,0,-1))}function Fo(e,t){if("__proto__"!=t)return e[t]}var Bo=Go(fi),zo=En||function(e,t){return Ot.setTimeout(e,t)},Ho=Go(di);function qo(e,t,n){var r=t+"";return Ho(e,function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(Pe,"{\n/* [wrapped with "+t+"] */\n")}(r,function(e,t){return Vt(M,function(n){var r="_."+n[0];t&n[1]&&!Ft(e,r)&&e.push(r)}),e.sort()}(function(e){var t=e.match(Te);return t?t[1].split(Ae):[]}(r),n)))}function Go(e){var t=0,n=0;return function(){var r=Vn(),i=j-(r-n);if(n=r,i>0){if(++t>=C)return arguments[0]}else t=0;return e.apply(o,arguments)}}function Wo(e,t){var n=-1,r=e.length,i=r-1;for(t=t===o?r:t;++n<t;){var s=ui(n,i),a=e[s];e[s]=e[n],e[n]=a}return e.length=t,e}var Ko=function(e){var t=Gs(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Oe,function(e,n,r,i){t.push(r?i.replace(Me,"$1"):n||e)}),t},function(e){return 500===n.size&&n.clear(),e}),n=t.cache;return t}();function Zo(e){if("string"==typeof e||ma(e))return e;var t=e+"";return"0"==t&&1/e==-k?"-0":t}function Yo(e){if(null!=e){try{return et.call(e)}catch(t){}try{return e+""}catch(t){}}return""}function $o(e){if(e instanceof ar)return e.clone();var t=new sr(e.__wrapped__,e.__chain__);return t.__actions__=Fi(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}var Qo=li(function(e,t){return ia(e)?kr(e,Ir(t,1,ia,!0)):[]}),Jo=li(function(e,t){var n=as(t);return ia(n)&&(n=o),ia(e)?kr(e,Ir(t,1,ia,!0),wo(n,2)):[]}),Xo=li(function(e,t){var n=as(t);return ia(n)&&(n=o),ia(e)?kr(e,Ir(t,1,ia,!0),o,n):[]});function es(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ja(n);return i<0&&(i=Rn(r+i,0)),Yt(e,wo(t,3),i)}function ts(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return n!==o&&(i=ja(n),i=n<0?Rn(r+i,0):Dn(i,r-1)),Yt(e,wo(t,3),i,!0)}function ns(e){return null!=e&&e.length?Ir(e,1):[]}function rs(e){return e&&e.length?e[0]:o}var is=li(function(e){var t=zt(e,xi);return t.length&&t[0]===e[0]?qr(t):[]}),os=li(function(e){var t=as(e),n=zt(e,xi);return t===as(n)?t=o:n.pop(),n.length&&n[0]===e[0]?qr(n,wo(t,2)):[]}),ss=li(function(e){var t=as(e),n=zt(e,xi);return(t="function"==typeof t?t:o)&&n.pop(),n.length&&n[0]===e[0]?qr(n,o,t):[]});function as(e){var t=null==e?0:e.length;return t?e[t-1]:o}var us=li(cs);function cs(e,t){return e&&e.length&&t&&t.length?si(e,t):e}var ls=po(function(e,t){var n=null==e?0:e.length,r=_r(e,t);return ai(e,zt(t,function(e){return To(e,n)?+e:e}).sort(Vi)),r});function hs(e){return null==e?e:Fn.call(e)}var fs=li(function(e){return _i(Ir(e,1,ia,!0))}),ds=li(function(e){var t=as(e);return ia(t)&&(t=o),_i(Ir(e,1,ia,!0),wo(t,2))}),ps=li(function(e){var t=as(e);return t="function"==typeof t?t:o,_i(Ir(e,1,ia,!0),o,t)});function gs(e){if(!e||!e.length)return[];var t=0;return e=Ut(e,function(e){if(ia(e))return t=Rn(e.length,t),!0}),on(t,function(t){return zt(e,en(t))})}function bs(e,t){if(!e||!e.length)return[];var n=gs(e);return null==t?n:zt(n,function(e){return Rt(t,o,e)})}var vs=li(function(e,t){return ia(e)?kr(e,t):[]}),ys=li(function(e){return ki(Ut(e,ia))}),ms=li(function(e){var t=as(e);return ia(t)&&(t=o),ki(Ut(e,ia),wo(t,2))}),ws=li(function(e){var t=as(e);return t="function"==typeof t?t:o,ki(Ut(e,ia),o,t)}),_s=li(gs),Ss=li(function(e){var t=e.length,n=t>1?e[t-1]:o;return n="function"==typeof n?(e.pop(),n):o,bs(e,n)});function Os(e){var t=rr(e);return t.__chain__=!0,t}function Cs(e,t){return t(e)}var js=po(function(e){var t=e.length,n=t?e[0]:0,r=this.__wrapped__,i=function(t){return _r(t,e)};return!(t>1||this.__actions__.length)&&r instanceof ar&&To(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:Cs,args:[i],thisArg:o}),new sr(r,this.__chain__).thru(function(e){return t&&!e.length&&e.push(o),e})):this.thru(i)}),ks=zi(function(e,t,n){tt.call(e,n)?++e[n]:wr(e,n,1)}),Es=Yi(es),xs=Yi(ts);function Ps(e,t){return(ta(e)?Vt:Er)(e,wo(t,3))}function Ts(e,t){return(ta(e)?function(e,t){for(var n=null==e?0:e.length;n--&&!1!==t(e[n],n,e););return e}:xr)(e,wo(t,3))}var As=zi(function(e,t,n){tt.call(e,n)?e[n].push(t):wr(e,n,[t])}),Is=li(function(e,t,n){var i=-1,o="function"==typeof t,s=ra(e)?r(e.length):[];return Er(e,function(e){s[++i]=o?Rt(t,e,n):Gr(e,t,n)}),s}),Ms=zi(function(e,t,n){wr(e,n,t)});function Ns(e,t){return(ta(e)?zt:Xr)(e,wo(t,3))}var Rs=zi(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]}),Ds=li(function(e,t){if(null==e)return[];var n=t.length;return n>1&&Ao(e,t[0],t[1])?t=[]:n>2&&Ao(t[0],t[1],t[2])&&(t=[t[0]]),ii(e,Ir(t,1),[])}),Vs=kn||function(){return Ot.Date.now()};function Ls(e,t,n){return t=n?o:t,uo(e,_,o,o,o,o,t=e&&null==t?e.length:t)}function Us(e,t){var n;if("function"!=typeof t)throw new $e(a);return e=ja(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=o),n}}var Fs=li(function(e,t,n){var r=p;if(n.length){var i=vn(n,mo(Fs));r|=m}return uo(e,r,t,n,i)}),Bs=li(function(e,t,n){var r=p|g;if(n.length){var i=vn(n,mo(Bs));r|=m}return uo(t,r,e,n,i)});function zs(e,t,n){var r,i,s,u,c,l,h=0,f=!1,d=!1,p=!0;if("function"!=typeof e)throw new $e(a);function g(t){var n=r,s=i;return r=i=o,h=t,u=e.apply(s,n)}function b(e){var n=e-l;return l===o||n>=t||n<0||d&&e-h>=s}function v(){var e=Vs();if(b(e))return y(e);c=zo(v,function(e){var n=t-(e-l);return d?Dn(n,s-(e-h)):n}(e))}function y(e){return c=o,p&&r?g(e):(r=i=o,u)}function m(){var e=Vs(),n=b(e);if(r=arguments,i=this,l=e,n){if(c===o)return function(e){return h=e,c=zo(v,t),f?g(e):u}(l);if(d)return c=zo(v,t),g(l)}return c===o&&(c=zo(v,t)),u}return t=Ea(t)||0,ha(n)&&(f=!!n.leading,s=(d="maxWait"in n)?Rn(Ea(n.maxWait)||0,t):s,p="trailing"in n?!!n.trailing:p),m.cancel=function(){c!==o&&Mi(c),h=0,r=l=i=c=o},m.flush=function(){return c===o?u:y(Vs())},m}var Hs=li(function(e,t){return jr(e,1,t)}),qs=li(function(e,t,n){return jr(e,Ea(t)||0,n)});function Gs(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new $e(a);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=e.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Gs.Cache||lr),n}function Ws(e){if("function"!=typeof e)throw new $e(a);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}Gs.Cache=lr;var Ks=Ai(function(e,t){var n=(t=1==t.length&&ta(t[0])?zt(t[0],sn(wo())):zt(Ir(t,1),sn(wo()))).length;return li(function(r){for(var i=-1,o=Dn(r.length,n);++i<o;)r[i]=t[i].call(this,r[i]);return Rt(e,this,r)})}),Zs=li(function(e,t){var n=vn(t,mo(Zs));return uo(e,m,o,t,n)}),Ys=li(function(e,t){var n=vn(t,mo(Ys));return uo(e,w,o,t,n)}),$s=po(function(e,t){return uo(e,S,o,o,o,t)});function Qs(e,t){return e===t||e!=e&&t!=t}var Js=ro(Br),Xs=ro(function(e,t){return e>=t}),ea=Wr(function(){return arguments}())?Wr:function(e){return fa(e)&&tt.call(e,"callee")&&!jt.call(e,"callee")},ta=r.isArray,na=Pt?sn(Pt):function(e){return fa(e)&&Fr(e)==ee};function ra(e){return null!=e&&la(e.length)&&!ua(e)}function ia(e){return fa(e)&&ra(e)}var oa=An||Eu,sa=Tt?sn(Tt):function(e){return fa(e)&&Fr(e)==L};function aa(e){if(!fa(e))return!1;var t=Fr(e);return t==F||t==U||"string"==typeof e.message&&"string"==typeof e.name&&!ga(e)}function ua(e){if(!ha(e))return!1;var t=Fr(e);return t==B||t==z||t==D||t==K}function ca(e){return"number"==typeof e&&e==ja(e)}function la(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=E}function ha(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function fa(e){return null!=e&&"object"==typeof e}var da=At?sn(At):function(e){return fa(e)&&ko(e)==H};function pa(e){return"number"==typeof e||fa(e)&&Fr(e)==q}function ga(e){if(!fa(e)||Fr(e)!=W)return!1;var t=St(e);if(null===t)return!0;var n=tt.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&et.call(n)==ot}var ba=It?sn(It):function(e){return fa(e)&&Fr(e)==Z},va=Mt?sn(Mt):function(e){return fa(e)&&ko(e)==Y};function ya(e){return"string"==typeof e||!ta(e)&&fa(e)&&Fr(e)==$}function ma(e){return"symbol"==typeof e||fa(e)&&Fr(e)==Q}var wa=Nt?sn(Nt):function(e){return fa(e)&&la(e.length)&&!!bt[Fr(e)]},_a=ro(Jr),Sa=ro(function(e,t){return e<=t});function Oa(e){if(!e)return[];if(ra(e))return ya(e)?_n(e):Fi(e);if(Kt&&e[Kt])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Kt]());var t=ko(e);return(t==H?gn:t==Y?yn:Qa)(e)}function Ca(e){return e?(e=Ea(e))===k||e===-k?(e<0?-1:1)*x:e==e?e:0:0===e?e:0}function ja(e){var t=Ca(e),n=t%1;return t==t?n?t-n:t:0}function ka(e){return e?Sr(ja(e),0,T):0}function Ea(e){if("number"==typeof e)return e;if(ma(e))return P;if(ha(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=ha(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(ke,"");var n=Ve.test(e);return n||Ue.test(e)?wt(e.slice(2),n?2:8):De.test(e)?P:+e}function xa(e){return Bi(e,Ha(e))}function Pa(e){return null==e?"":wi(e)}var Ta=Hi(function(e,t){if(Ro(t)||ra(t))Bi(t,za(t),e);else for(var n in t)tt.call(t,n)&&br(e,n,t[n])}),Aa=Hi(function(e,t){Bi(t,Ha(t),e)}),Ia=Hi(function(e,t,n,r){Bi(t,Ha(t),e,r)}),Ma=Hi(function(e,t,n,r){Bi(t,za(t),e,r)}),Na=po(_r),Ra=li(function(e,t){e=Ke(e);var n=-1,r=t.length,i=r>2?t[2]:o;for(i&&Ao(t[0],t[1],i)&&(r=1);++n<r;)for(var s=t[n],a=Ha(s),u=-1,c=a.length;++u<c;){var l=a[u],h=e[l];(h===o||Qs(h,Je[l])&&!tt.call(e,l))&&(e[l]=s[l])}return e}),Da=li(function(e){return e.push(o,lo),Rt(Ga,o,e)});function Va(e,t,n){var r=null==e?o:Lr(e,t);return r===o?n:r}function La(e,t){return null!=e&&Eo(e,t,Hr)}var Ua=Ji(function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=it.call(t)),e[t]=n},hu(pu)),Fa=Ji(function(e,t,n){null!=t&&"function"!=typeof t.toString&&(t=it.call(t)),tt.call(e,t)?e[t].push(n):e[t]=[n]},wo),Ba=li(Gr);function za(e){return ra(e)?dr(e):Qr(e)}function Ha(e){return ra(e)?dr(e,!0):function(e){if(!ha(e))return function(e){var t=[];if(null!=e)for(var n in Ke(e))t.push(n);return t}(e);var t=Ro(e),n=[];for(var r in e)("constructor"!=r||!t&&tt.call(e,r))&&n.push(r);return n}(e)}var qa=Hi(function(e,t,n){ni(e,t,n)}),Ga=Hi(function(e,t,n,r){ni(e,t,n,r)}),Wa=po(function(e,t){var n={};if(null==e)return n;var r=!1;t=zt(t,function(t){return t=Ti(t,e),r||(r=t.length>1),t}),Bi(e,bo(e),n),r&&(n=Or(n,c|l|h,ho));for(var i=t.length;i--;)Si(n,t[i]);return n}),Ka=po(function(e,t){return null==e?{}:function(e,t){return oi(e,t,function(t,n){return La(e,n)})}(e,t)});function Za(e,t){if(null==e)return{};var n=zt(bo(e),function(e){return[e]});return t=wo(t),oi(e,n,function(e,n){return t(e,n[0])})}var Ya=ao(za),$a=ao(Ha);function Qa(e){return null==e?[]:an(e,za(e))}var Ja=Ki(function(e,t,n){return t=t.toLowerCase(),e+(n?Xa(t):t)});function Xa(e){return au(Pa(e).toLowerCase())}function eu(e){return(e=Pa(e))&&e.replace(Be,hn).replace(ct,"")}var tu=Ki(function(e,t,n){return e+(n?"-":"")+t.toLowerCase()}),nu=Ki(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()}),ru=Wi("toLowerCase"),iu=Ki(function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}),ou=Ki(function(e,t,n){return e+(n?" ":"")+au(t)}),su=Ki(function(e,t,n){return e+(n?" ":"")+t.toUpperCase()}),au=Wi("toUpperCase");function uu(e,t,n){return e=Pa(e),(t=n?o:t)===o?function(e){return dt.test(e)}(e)?function(e){return e.match(ht)||[]}(e):function(e){return e.match(Ie)||[]}(e):e.match(t)||[]}var cu=li(function(e,t){try{return Rt(e,o,t)}catch(n){return aa(n)?n:new qe(n)}}),lu=po(function(e,t){return Vt(t,function(t){t=Zo(t),wr(e,t,Fs(e[t],e))}),e});function hu(e){return function(){return e}}var fu=$i(),du=$i(!0);function pu(e){return e}function gu(e){return $r("function"==typeof e?e:Or(e,c))}var bu=li(function(e,t){return function(n){return Gr(n,e,t)}}),vu=li(function(e,t){return function(n){return Gr(e,n,t)}});function yu(e,t,n){var r=za(t),i=Vr(t,r);null!=n||ha(t)&&(i.length||!r.length)||(n=t,t=e,e=this,i=Vr(t,za(t)));var o=!(ha(n)&&"chain"in n&&!n.chain),s=ua(e);return Vt(i,function(n){var r=t[n];e[n]=r,s&&(e.prototype[n]=function(){var t=this.__chain__;if(o||t){var n=e(this.__wrapped__);return(n.__actions__=Fi(this.__actions__)).push({func:r,args:arguments,thisArg:e}),n.__chain__=t,n}return r.apply(e,Ht([this.value()],arguments))})}),e}function mu(){}var wu=eo(zt),_u=eo(Lt),Su=eo(Wt);function Ou(e){return Io(e)?en(Zo(e)):function(e){return function(t){return Lr(t,e)}}(e)}var Cu=no(),ju=no(!0);function ku(){return[]}function Eu(){return!1}var xu,Pu=Xi(function(e,t){return e+t},0),Tu=oo("ceil"),Au=Xi(function(e,t){return e/t},1),Iu=oo("floor"),Mu=Xi(function(e,t){return e*t},1),Nu=oo("round"),Ru=Xi(function(e,t){return e-t},0);return rr.after=function(e,t){if("function"!=typeof t)throw new $e(a);return e=ja(e),function(){if(--e<1)return t.apply(this,arguments)}},rr.ary=Ls,rr.assign=Ta,rr.assignIn=Aa,rr.assignInWith=Ia,rr.assignWith=Ma,rr.at=Na,rr.before=Us,rr.bind=Fs,rr.bindAll=lu,rr.bindKey=Bs,rr.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return ta(e)?e:[e]},rr.chain=Os,rr.chunk=function(e,t,n){t=(n?Ao(e,t,n):t===o)?1:Rn(ja(t),0);var i=null==e?0:e.length;if(!i||t<1)return[];for(var s=0,a=0,u=r(xn(i/t));s<i;)u[a++]=pi(e,s,s+=t);return u},rr.compact=function(e){for(var t=-1,n=null==e?0:e.length,r=0,i=[];++t<n;){var o=e[t];o&&(i[r++]=o)}return i},rr.concat=function(){var e=arguments.length;if(!e)return[];for(var t=r(e-1),n=arguments[0],i=e;i--;)t[i-1]=arguments[i];return Ht(ta(n)?Fi(n):[n],Ir(t,1))},rr.cond=function(e){var t=null==e?0:e.length,n=wo();return e=t?zt(e,function(e){if("function"!=typeof e[1])throw new $e(a);return[n(e[0]),e[1]]}):[],li(function(n){for(var r=-1;++r<t;){var i=e[r];if(Rt(i[0],this,n))return Rt(i[1],this,n)}})},rr.conforms=function(e){return function(e){var t=za(e);return function(n){return Cr(n,e,t)}}(Or(e,c))},rr.constant=hu,rr.countBy=ks,rr.create=function(e,t){var n=ir(e);return null==t?n:mr(n,t)},rr.curry=function e(t,n,r){var i=uo(t,v,o,o,o,o,o,n=r?o:n);return i.placeholder=e.placeholder,i},rr.curryRight=function e(t,n,r){var i=uo(t,y,o,o,o,o,o,n=r?o:n);return i.placeholder=e.placeholder,i},rr.debounce=zs,rr.defaults=Ra,rr.defaultsDeep=Da,rr.defer=Hs,rr.delay=qs,rr.difference=Qo,rr.differenceBy=Jo,rr.differenceWith=Xo,rr.drop=function(e,t,n){var r=null==e?0:e.length;return r?pi(e,(t=n||t===o?1:ja(t))<0?0:t,r):[]},rr.dropRight=function(e,t,n){var r=null==e?0:e.length;return r?pi(e,0,(t=r-(t=n||t===o?1:ja(t)))<0?0:t):[]},rr.dropRightWhile=function(e,t){return e&&e.length?Ci(e,wo(t,3),!0,!0):[]},rr.dropWhile=function(e,t){return e&&e.length?Ci(e,wo(t,3),!0):[]},rr.fill=function(e,t,n,r){var i=null==e?0:e.length;return i?(n&&"number"!=typeof n&&Ao(e,t,n)&&(n=0,r=i),function(e,t,n,r){var i=e.length;for((n=ja(n))<0&&(n=-n>i?0:i+n),(r=r===o||r>i?i:ja(r))<0&&(r+=i),r=n>r?0:ka(r);n<r;)e[n++]=t;return e}(e,t,n,r)):[]},rr.filter=function(e,t){return(ta(e)?Ut:Ar)(e,wo(t,3))},rr.flatMap=function(e,t){return Ir(Ns(e,t),1)},rr.flatMapDeep=function(e,t){return Ir(Ns(e,t),k)},rr.flatMapDepth=function(e,t,n){return n=n===o?1:ja(n),Ir(Ns(e,t),n)},rr.flatten=ns,rr.flattenDeep=function(e){return null!=e&&e.length?Ir(e,k):[]},rr.flattenDepth=function(e,t){return null!=e&&e.length?Ir(e,t=t===o?1:ja(t)):[]},rr.flip=function(e){return uo(e,O)},rr.flow=fu,rr.flowRight=du,rr.fromPairs=function(e){for(var t=-1,n=null==e?0:e.length,r={};++t<n;){var i=e[t];r[i[0]]=i[1]}return r},rr.functions=function(e){return null==e?[]:Vr(e,za(e))},rr.functionsIn=function(e){return null==e?[]:Vr(e,Ha(e))},rr.groupBy=As,rr.initial=function(e){return null!=e&&e.length?pi(e,0,-1):[]},rr.intersection=is,rr.intersectionBy=os,rr.intersectionWith=ss,rr.invert=Ua,rr.invertBy=Fa,rr.invokeMap=Is,rr.iteratee=gu,rr.keyBy=Ms,rr.keys=za,rr.keysIn=Ha,rr.map=Ns,rr.mapKeys=function(e,t){var n={};return t=wo(t,3),Rr(e,function(e,r,i){wr(n,t(e,r,i),e)}),n},rr.mapValues=function(e,t){var n={};return t=wo(t,3),Rr(e,function(e,r,i){wr(n,r,t(e,r,i))}),n},rr.matches=function(e){return ei(Or(e,c))},rr.matchesProperty=function(e,t){return ti(e,Or(t,c))},rr.memoize=Gs,rr.merge=qa,rr.mergeWith=Ga,rr.method=bu,rr.methodOf=vu,rr.mixin=yu,rr.negate=Ws,rr.nthArg=function(e){return e=ja(e),li(function(t){return ri(t,e)})},rr.omit=Wa,rr.omitBy=function(e,t){return Za(e,Ws(wo(t)))},rr.once=function(e){return Us(2,e)},rr.orderBy=function(e,t,n,r){return null==e?[]:(ta(t)||(t=null==t?[]:[t]),ta(n=r?o:n)||(n=null==n?[]:[n]),ii(e,t,n))},rr.over=wu,rr.overArgs=Ks,rr.overEvery=_u,rr.overSome=Su,rr.partial=Zs,rr.partialRight=Ys,rr.partition=Rs,rr.pick=Ka,rr.pickBy=Za,rr.property=Ou,rr.propertyOf=function(e){return function(t){return null==e?o:Lr(e,t)}},rr.pull=us,rr.pullAll=cs,rr.pullAllBy=function(e,t,n){return e&&e.length&&t&&t.length?si(e,t,wo(n,2)):e},rr.pullAllWith=function(e,t,n){return e&&e.length&&t&&t.length?si(e,t,o,n):e},rr.pullAt=ls,rr.range=Cu,rr.rangeRight=ju,rr.rearg=$s,rr.reject=function(e,t){return(ta(e)?Ut:Ar)(e,Ws(wo(t,3)))},rr.remove=function(e,t){var n=[];if(!e||!e.length)return n;var r=-1,i=[],o=e.length;for(t=wo(t,3);++r<o;){var s=e[r];t(s,r,e)&&(n.push(s),i.push(r))}return ai(e,i),n},rr.rest=function(e,t){if("function"!=typeof e)throw new $e(a);return li(e,t=t===o?t:ja(t))},rr.reverse=hs,rr.sampleSize=function(e,t,n){return t=(n?Ao(e,t,n):t===o)?1:ja(t),(ta(e)?function(e,t){return Wo(Fi(e),Sr(t,0,e.length))}:function(e,t){var n=Qa(e);return Wo(n,Sr(t,0,n.length))})(e,t)},rr.set=function(e,t,n){return null==e?e:hi(e,t,n)},rr.setWith=function(e,t,n,r){return r="function"==typeof r?r:o,null==e?e:hi(e,t,n,r)},rr.shuffle=function(e){return(ta(e)?function(e){return Wo(Fi(e))}:function(e){return Wo(Qa(e))})(e)},rr.slice=function(e,t,n){var r=null==e?0:e.length;return r?(n&&"number"!=typeof n&&Ao(e,t,n)?(t=0,n=r):(t=null==t?0:ja(t),n=n===o?r:ja(n)),pi(e,t,n)):[]},rr.sortBy=Ds,rr.sortedUniq=function(e){return e&&e.length?yi(e):[]},rr.sortedUniqBy=function(e,t){return e&&e.length?yi(e,wo(t,2)):[]},rr.split=function(e,t,n){return n&&"number"!=typeof n&&Ao(e,t,n)&&(t=n=o),(n=n===o?T:n>>>0)?(e=Pa(e))&&("string"==typeof t||null!=t&&!ba(t))&&!(t=wi(t))&&pn(e)?Ii(_n(e),0,n):e.split(t,n):[]},rr.spread=function(e,t){if("function"!=typeof e)throw new $e(a);return t=null==t?0:Rn(ja(t),0),li(function(n){var r=n[t],i=Ii(n,0,t);return r&&Ht(i,r),Rt(e,this,i)})},rr.tail=function(e){var t=null==e?0:e.length;return t?pi(e,1,t):[]},rr.take=function(e,t,n){return e&&e.length?pi(e,0,(t=n||t===o?1:ja(t))<0?0:t):[]},rr.takeRight=function(e,t,n){var r=null==e?0:e.length;return r?pi(e,(t=r-(t=n||t===o?1:ja(t)))<0?0:t,r):[]},rr.takeRightWhile=function(e,t){return e&&e.length?Ci(e,wo(t,3),!1,!0):[]},rr.takeWhile=function(e,t){return e&&e.length?Ci(e,wo(t,3)):[]},rr.tap=function(e,t){return t(e),e},rr.throttle=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new $e(a);return ha(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),zs(e,t,{leading:r,maxWait:t,trailing:i})},rr.thru=Cs,rr.toArray=Oa,rr.toPairs=Ya,rr.toPairsIn=$a,rr.toPath=function(e){return ta(e)?zt(e,Zo):ma(e)?[e]:Fi(Ko(Pa(e)))},rr.toPlainObject=xa,rr.transform=function(e,t,n){var r=ta(e),i=r||oa(e)||wa(e);if(t=wo(t,4),null==n){var o=e&&e.constructor;n=i?r?new o:[]:ha(e)&&ua(o)?ir(St(e)):{}}return(i?Vt:Rr)(e,function(e,r,i){return t(n,e,r,i)}),n},rr.unary=function(e){return Ls(e,1)},rr.union=fs,rr.unionBy=ds,rr.unionWith=ps,rr.uniq=function(e){return e&&e.length?_i(e):[]},rr.uniqBy=function(e,t){return e&&e.length?_i(e,wo(t,2)):[]},rr.uniqWith=function(e,t){return t="function"==typeof t?t:o,e&&e.length?_i(e,o,t):[]},rr.unset=function(e,t){return null==e||Si(e,t)},rr.unzip=gs,rr.unzipWith=bs,rr.update=function(e,t,n){return null==e?e:Oi(e,t,Pi(n))},rr.updateWith=function(e,t,n,r){return r="function"==typeof r?r:o,null==e?e:Oi(e,t,Pi(n),r)},rr.values=Qa,rr.valuesIn=function(e){return null==e?[]:an(e,Ha(e))},rr.without=vs,rr.words=uu,rr.wrap=function(e,t){return Zs(Pi(t),e)},rr.xor=ys,rr.xorBy=ms,rr.xorWith=ws,rr.zip=_s,rr.zipObject=function(e,t){return Ei(e||[],t||[],br)},rr.zipObjectDeep=function(e,t){return Ei(e||[],t||[],hi)},rr.zipWith=Ss,rr.entries=Ya,rr.entriesIn=$a,rr.extend=Aa,rr.extendWith=Ia,yu(rr,rr),rr.add=Pu,rr.attempt=cu,rr.camelCase=Ja,rr.capitalize=Xa,rr.ceil=Tu,rr.clamp=function(e,t,n){return n===o&&(n=t,t=o),n!==o&&(n=(n=Ea(n))==n?n:0),t!==o&&(t=(t=Ea(t))==t?t:0),Sr(Ea(e),t,n)},rr.clone=function(e){return Or(e,h)},rr.cloneDeep=function(e){return Or(e,c|h)},rr.cloneDeepWith=function(e,t){return Or(e,c|h,t="function"==typeof t?t:o)},rr.cloneWith=function(e,t){return Or(e,h,t="function"==typeof t?t:o)},rr.conformsTo=function(e,t){return null==t||Cr(e,t,za(t))},rr.deburr=eu,rr.defaultTo=function(e,t){return null==e||e!=e?t:e},rr.divide=Au,rr.endsWith=function(e,t,n){e=Pa(e),t=wi(t);var r=e.length,i=n=n===o?r:Sr(ja(n),0,r);return(n-=t.length)>=0&&e.slice(n,i)==t},rr.eq=Qs,rr.escape=function(e){return(e=Pa(e))&&ve.test(e)?e.replace(ge,fn):e},rr.escapeRegExp=function(e){return(e=Pa(e))&&je.test(e)?e.replace(Ce,"\\$&"):e},rr.every=function(e,t,n){var r=ta(e)?Lt:Pr;return n&&Ao(e,t,n)&&(t=o),r(e,wo(t,3))},rr.find=Es,rr.findIndex=es,rr.findKey=function(e,t){return Zt(e,wo(t,3),Rr)},rr.findLast=xs,rr.findLastIndex=ts,rr.findLastKey=function(e,t){return Zt(e,wo(t,3),Dr)},rr.floor=Iu,rr.forEach=Ps,rr.forEachRight=Ts,rr.forIn=function(e,t){return null==e?e:Mr(e,wo(t,3),Ha)},rr.forInRight=function(e,t){return null==e?e:Nr(e,wo(t,3),Ha)},rr.forOwn=function(e,t){return e&&Rr(e,wo(t,3))},rr.forOwnRight=function(e,t){return e&&Dr(e,wo(t,3))},rr.get=Va,rr.gt=Js,rr.gte=Xs,rr.has=function(e,t){return null!=e&&Eo(e,t,zr)},rr.hasIn=La,rr.head=rs,rr.identity=pu,rr.includes=function(e,t,n,r){e=ra(e)?e:Qa(e),n=n&&!r?ja(n):0;var i=e.length;return n<0&&(n=Rn(i+n,0)),ya(e)?n<=i&&e.indexOf(t,n)>-1:!!i&&$t(e,t,n)>-1},rr.indexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:ja(n);return i<0&&(i=Rn(r+i,0)),$t(e,t,i)},rr.inRange=function(e,t,n){return t=Ca(t),n===o?(n=t,t=0):n=Ca(n),function(e,t,n){return e>=Dn(t,n)&&e<Rn(t,n)}(e=Ea(e),t,n)},rr.invoke=Ba,rr.isArguments=ea,rr.isArray=ta,rr.isArrayBuffer=na,rr.isArrayLike=ra,rr.isArrayLikeObject=ia,rr.isBoolean=function(e){return!0===e||!1===e||fa(e)&&Fr(e)==V},rr.isBuffer=oa,rr.isDate=sa,rr.isElement=function(e){return fa(e)&&1===e.nodeType&&!ga(e)},rr.isEmpty=function(e){if(null==e)return!0;if(ra(e)&&(ta(e)||"string"==typeof e||"function"==typeof e.splice||oa(e)||wa(e)||ea(e)))return!e.length;var t=ko(e);if(t==H||t==Y)return!e.size;if(Ro(e))return!Qr(e).length;for(var n in e)if(tt.call(e,n))return!1;return!0},rr.isEqual=function(e,t){return Kr(e,t)},rr.isEqualWith=function(e,t,n){var r=(n="function"==typeof n?n:o)?n(e,t):o;return r===o?Kr(e,t,o,n):!!r},rr.isError=aa,rr.isFinite=function(e){return"number"==typeof e&&In(e)},rr.isFunction=ua,rr.isInteger=ca,rr.isLength=la,rr.isMap=da,rr.isMatch=function(e,t){return e===t||Zr(e,t,So(t))},rr.isMatchWith=function(e,t,n){return n="function"==typeof n?n:o,Zr(e,t,So(t),n)},rr.isNaN=function(e){return pa(e)&&e!=+e},rr.isNative=function(e){if(No(e))throw new qe("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Yr(e)},rr.isNil=function(e){return null==e},rr.isNull=function(e){return null===e},rr.isNumber=pa,rr.isObject=ha,rr.isObjectLike=fa,rr.isPlainObject=ga,rr.isRegExp=ba,rr.isSafeInteger=function(e){return ca(e)&&e>=-E&&e<=E},rr.isSet=va,rr.isString=ya,rr.isSymbol=ma,rr.isTypedArray=wa,rr.isUndefined=function(e){return e===o},rr.isWeakMap=function(e){return fa(e)&&ko(e)==X},rr.isWeakSet=function(e){return fa(e)&&"[object WeakSet]"==Fr(e)},rr.join=function(e,t){return null==e?"":Mn.call(e,t)},rr.kebabCase=tu,rr.last=as,rr.lastIndexOf=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return n!==o&&(i=(i=ja(n))<0?Rn(r+i,0):Dn(i,r-1)),t==t?function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r}(e,t,i):Yt(e,Jt,i,!0)},rr.lowerCase=nu,rr.lowerFirst=ru,rr.lt=_a,rr.lte=Sa,rr.max=function(e){return e&&e.length?Tr(e,pu,Br):o},rr.maxBy=function(e,t){return e&&e.length?Tr(e,wo(t,2),Br):o},rr.mean=function(e){return Xt(e,pu)},rr.meanBy=function(e,t){return Xt(e,wo(t,2))},rr.min=function(e){return e&&e.length?Tr(e,pu,Jr):o},rr.minBy=function(e,t){return e&&e.length?Tr(e,wo(t,2),Jr):o},rr.stubArray=ku,rr.stubFalse=Eu,rr.stubObject=function(){return{}},rr.stubString=function(){return""},rr.stubTrue=function(){return!0},rr.multiply=Mu,rr.nth=function(e,t){return e&&e.length?ri(e,ja(t)):o},rr.noConflict=function(){return Ot._===this&&(Ot._=st),this},rr.noop=mu,rr.now=Vs,rr.pad=function(e,t,n){e=Pa(e);var r=(t=ja(t))?wn(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return to(Pn(i),n)+e+to(xn(i),n)},rr.padEnd=function(e,t,n){e=Pa(e);var r=(t=ja(t))?wn(e):0;return t&&r<t?e+to(t-r,n):e},rr.padStart=function(e,t,n){e=Pa(e);var r=(t=ja(t))?wn(e):0;return t&&r<t?to(t-r,n)+e:e},rr.parseInt=function(e,t,n){return n||null==t?t=0:t&&(t=+t),Ln(Pa(e).replace(Ee,""),t||0)},rr.random=function(e,t,n){if(n&&"boolean"!=typeof n&&Ao(e,t,n)&&(t=n=o),n===o&&("boolean"==typeof t?(n=t,t=o):"boolean"==typeof e&&(n=e,e=o)),e===o&&t===o?(e=0,t=1):(e=Ca(e),t===o?(t=e,e=0):t=Ca(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Un();return Dn(e+i*(t-e+mt("1e-"+((i+"").length-1))),t)}return ui(e,t)},rr.reduce=function(e,t,n){var r=ta(e)?qt:nn,i=arguments.length<3;return r(e,wo(t,4),n,i,Er)},rr.reduceRight=function(e,t,n){var r=ta(e)?Gt:nn,i=arguments.length<3;return r(e,wo(t,4),n,i,xr)},rr.repeat=function(e,t,n){return t=(n?Ao(e,t,n):t===o)?1:ja(t),ci(Pa(e),t)},rr.replace=function(){var e=arguments,t=Pa(e[0]);return e.length<3?t:t.replace(e[1],e[2])},rr.result=function(e,t,n){var r=-1,i=(t=Ti(t,e)).length;for(i||(i=1,e=o);++r<i;){var s=null==e?o:e[Zo(t[r])];s===o&&(r=i,s=n),e=ua(s)?s.call(e):s}return e},rr.round=Nu,rr.runInContext=e,rr.sample=function(e){return(ta(e)?pr:function(e){return pr(Qa(e))})(e)},rr.size=function(e){if(null==e)return 0;if(ra(e))return ya(e)?wn(e):e.length;var t=ko(e);return t==H||t==Y?e.size:Qr(e).length},rr.snakeCase=iu,rr.some=function(e,t,n){var r=ta(e)?Wt:gi;return n&&Ao(e,t,n)&&(t=o),r(e,wo(t,3))},rr.sortedIndex=function(e,t){return bi(e,t)},rr.sortedIndexBy=function(e,t,n){return vi(e,t,wo(n,2))},rr.sortedIndexOf=function(e,t){var n=null==e?0:e.length;if(n){var r=bi(e,t);if(r<n&&Qs(e[r],t))return r}return-1},rr.sortedLastIndex=function(e,t){return bi(e,t,!0)},rr.sortedLastIndexBy=function(e,t,n){return vi(e,t,wo(n,2),!0)},rr.sortedLastIndexOf=function(e,t){if(null!=e&&e.length){var n=bi(e,t,!0)-1;if(Qs(e[n],t))return n}return-1},rr.startCase=ou,rr.startsWith=function(e,t,n){return e=Pa(e),n=null==n?0:Sr(ja(n),0,e.length),t=wi(t),e.slice(n,n+t.length)==t},rr.subtract=Ru,rr.sum=function(e){return e&&e.length?rn(e,pu):0},rr.sumBy=function(e,t){return e&&e.length?rn(e,wo(t,2)):0},rr.template=function(e,t,n){var r=rr.templateSettings;n&&Ao(e,t,n)&&(t=o),e=Pa(e),t=Ia({},t,r,co);var i,s,a=Ia({},t.imports,r.imports,co),u=za(a),c=an(a,u),l=0,h=t.interpolate||ze,f="__p += '",d=Ze((t.escape||ze).source+"|"+h.source+"|"+(h===we?Ne:ze).source+"|"+(t.evaluate||ze).source+"|$","g"),p="//# sourceURL="+("sourceURL"in t?t.sourceURL:"lodash.templateSources["+ ++gt+"]")+"\n";e.replace(d,function(t,n,r,o,a,u){return r||(r=o),f+=e.slice(l,u).replace(He,dn),n&&(i=!0,f+="' +\n__e("+n+") +\n'"),a&&(s=!0,f+="';\n"+a+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=u+t.length,t}),f+="';\n";var g=t.variable;g||(f="with (obj) {\n"+f+"\n}\n"),f=(s?f.replace(he,""):f).replace(fe,"$1").replace(de,"$1;"),f="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(s?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var b=cu(function(){return Ge(u,p+"return "+f).apply(o,c)});if(b.source=f,aa(b))throw b;return b},rr.times=function(e,t){if((e=ja(e))<1||e>E)return[];var n=T,r=Dn(e,T);t=wo(t),e-=T;for(var i=on(r,t);++n<e;)t(n);return i},rr.toFinite=Ca,rr.toInteger=ja,rr.toLength=ka,rr.toLower=function(e){return Pa(e).toLowerCase()},rr.toNumber=Ea,rr.toSafeInteger=function(e){return e?Sr(ja(e),-E,E):0===e?e:0},rr.toString=Pa,rr.toUpper=function(e){return Pa(e).toUpperCase()},rr.trim=function(e,t,n){if((e=Pa(e))&&(n||t===o))return e.replace(ke,"");if(!e||!(t=wi(t)))return e;var r=_n(e),i=_n(t);return Ii(r,cn(r,i),ln(r,i)+1).join("")},rr.trimEnd=function(e,t,n){if((e=Pa(e))&&(n||t===o))return e.replace(xe,"");if(!e||!(t=wi(t)))return e;var r=_n(e);return Ii(r,0,ln(r,_n(t))+1).join("")},rr.trimStart=function(e,t,n){if((e=Pa(e))&&(n||t===o))return e.replace(Ee,"");if(!e||!(t=wi(t)))return e;var r=_n(e);return Ii(r,cn(r,_n(t))).join("")},rr.truncate=function(e,t){var n=30,r="...";if(ha(t)){var i="separator"in t?t.separator:i;n="length"in t?ja(t.length):n,r="omission"in t?wi(t.omission):r}var s=(e=Pa(e)).length;if(pn(e)){var a=_n(e);s=a.length}if(n>=s)return e;var u=n-wn(r);if(u<1)return r;var c=a?Ii(a,0,u).join(""):e.slice(0,u);if(i===o)return c+r;if(a&&(u+=c.length-u),ba(i)){if(e.slice(u).search(i)){var l,h=c;for(i.global||(i=Ze(i.source,Pa(Re.exec(i))+"g")),i.lastIndex=0;l=i.exec(h);)var f=l.index;c=c.slice(0,f===o?u:f)}}else if(e.indexOf(wi(i),u)!=u){var d=c.lastIndexOf(i);d>-1&&(c=c.slice(0,d))}return c+r},rr.unescape=function(e){return(e=Pa(e))&&be.test(e)?e.replace(pe,Sn):e},rr.uniqueId=function(e){var t=++nt;return Pa(e)+t},rr.upperCase=su,rr.upperFirst=au,rr.each=Ps,rr.eachRight=Ts,rr.first=rs,yu(rr,(xu={},Rr(rr,function(e,t){tt.call(rr.prototype,t)||(xu[t]=e)}),xu),{chain:!1}),rr.VERSION="4.17.11",Vt(["bind","bindKey","curry","curryRight","partial","partialRight"],function(e){rr[e].placeholder=rr}),Vt(["drop","take"],function(e,t){ar.prototype[e]=function(n){n=n===o?1:Rn(ja(n),0);var r=this.__filtered__&&!t?new ar(this):this.clone();return r.__filtered__?r.__takeCount__=Dn(n,r.__takeCount__):r.__views__.push({size:Dn(n,T),type:e+(r.__dir__<0?"Right":"")}),r},ar.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}}),Vt(["filter","map","takeWhile"],function(e,t){var n=t+1,r=1==n||3==n;ar.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:wo(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}}),Vt(["head","last"],function(e,t){var n="take"+(t?"Right":"");ar.prototype[e]=function(){return this[n](1).value()[0]}}),Vt(["initial","tail"],function(e,t){var n="drop"+(t?"":"Right");ar.prototype[e]=function(){return this.__filtered__?new ar(this):this[n](1)}}),ar.prototype.compact=function(){return this.filter(pu)},ar.prototype.find=function(e){return this.filter(e).head()},ar.prototype.findLast=function(e){return this.reverse().find(e)},ar.prototype.invokeMap=li(function(e,t){return"function"==typeof e?new ar(this):this.map(function(n){return Gr(n,e,t)})}),ar.prototype.reject=function(e){return this.filter(Ws(wo(e)))},ar.prototype.slice=function(e,t){e=ja(e);var n=this;return n.__filtered__&&(e>0||t<0)?new ar(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==o&&(n=(t=ja(t))<0?n.dropRight(-t):n.take(t-e)),n)},ar.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},ar.prototype.toArray=function(){return this.take(T)},Rr(ar.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=rr[r?"take"+("last"==t?"Right":""):t],s=r||/^find/.test(t);i&&(rr.prototype[t]=function(){var t=this.__wrapped__,a=r?[1]:arguments,u=t instanceof ar,c=a[0],l=u||ta(t),h=function(e){var t=i.apply(rr,Ht([e],a));return r&&f?t[0]:t};l&&n&&"function"==typeof c&&1!=c.length&&(u=l=!1);var f=this.__chain__,d=s&&!f,p=u&&!this.__actions__.length;if(!s&&l){t=p?t:new ar(this);var g=e.apply(t,a);return g.__actions__.push({func:Cs,args:[h],thisArg:o}),new sr(g,f)}return d&&p?e.apply(this,a):(g=this.thru(h),d?r?g.value()[0]:g.value():g)})}),Vt(["pop","push","shift","sort","splice","unshift"],function(e){var t=Qe[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);rr.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(ta(i)?i:[],e)}return this[n](function(n){return t.apply(ta(n)?n:[],e)})}}),Rr(ar.prototype,function(e,t){var n=rr[t];if(n){var r=n.name+"";(Zn[r]||(Zn[r]=[])).push({name:t,func:n})}}),Zn[Qi(o,g).name]=[{name:"wrapper",func:o}],ar.prototype.clone=function(){var e=new ar(this.__wrapped__);return e.__actions__=Fi(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=Fi(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=Fi(this.__views__),e},ar.prototype.reverse=function(){if(this.__filtered__){var e=new ar(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},ar.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=ta(e),r=t<0,i=n?e.length:0,o=function(e,t,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],s=o.size;switch(o.type){case"drop":e+=s;break;case"dropRight":t-=s;break;case"take":t=Dn(t,e+s);break;case"takeRight":e=Rn(e,t-s)}}return{start:e,end:t}}(0,i,this.__views__),s=o.start,a=o.end,u=a-s,c=r?a:s-1,l=this.__iteratees__,h=l.length,f=0,d=Dn(u,this.__takeCount__);if(!n||!r&&i==u&&d==u)return ji(e,this.__actions__);var p=[];e:for(;u--&&f<d;){for(var g=-1,b=e[c+=t];++g<h;){var v=l[g],y=v.type,m=(0,v.iteratee)(b);if(2==y)b=m;else if(!m){if(1==y)continue e;break e}}p[f++]=b}return p},rr.prototype.at=js,rr.prototype.chain=function(){return Os(this)},rr.prototype.commit=function(){return new sr(this.value(),this.__chain__)},rr.prototype.next=function(){this.__values__===o&&(this.__values__=Oa(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?o:this.__values__[this.__index__++]}},rr.prototype.plant=function(e){for(var t,n=this;n instanceof or;){var r=$o(n);r.__index__=0,r.__values__=o,t?i.__wrapped__=r:t=r;var i=r;n=n.__wrapped__}return i.__wrapped__=e,t},rr.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof ar){var t=e;return this.__actions__.length&&(t=new ar(this)),(t=t.reverse()).__actions__.push({func:Cs,args:[hs],thisArg:o}),new sr(t,this.__chain__)}return this.thru(hs)},rr.prototype.toJSON=rr.prototype.valueOf=rr.prototype.value=function(){return ji(this.__wrapped__,this.__actions__)},rr.prototype.first=rr.prototype.head,Kt&&(rr.prototype[Kt]=function(){return this}),rr}();Ot._=On,(i=(function(){return On}).call(t,n,t,r))===o||(r.exports=i)}).call(this)}).call(this,n("yLpj"),n("YuTi")(e))},M2TY:function(e,t,n){"use strict";(function(t){var r=n("rPnE"),i=n("B/aH");function o(e,t,n){return"UTF-8"===t?r.decode(e,n):r.encode("UTF-8"===n?e:r.decode(e,n),t)}function s(e){return(e||"").toString().trim().replace(/^latin[\-_]?(\d+)$/i,"ISO-8859-$1").replace(/^win(?:dows)?[\-_]?(\d+)$/i,"WINDOWS-$1").replace(/^utf[\-_]?(\d+)$/i,"UTF-$1").replace(/^ks_c_5601\-1987$/i,"CP949").replace(/^us[\-_]?ascii$/i,"ASCII").toUpperCase()}e.exports.convert=function(e,n,r,a){var u;if(r=s(r||"UTF-8"),n=s(n||"UTF-8"),e=e||"","UTF-8"!==r&&"string"==typeof e&&(e=new t(e,"binary")),r===n)u="string"==typeof e?new t(e):e;else if(i&&!a)try{u=function(e,t,n){var r;return(r=new i(n,t+"//TRANSLIT//IGNORE").convert(e)).slice(0,r.length)}(e,n,r)}catch(c){try{u=o(e,n,r)}catch(c){u=e}}else try{u=o(e,n,r)}catch(c){console.error(c),u=e}return"string"==typeof u&&(u=new t(u,"utf-8")),u}}).call(this,n("tjlA").Buffer)},MCLT:function(e,t,n){(function(e){var r=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++)n[t[r]]=Object.getOwnPropertyDescriptor(e,t[r]);return n},i=/%[sdj%]/g;t.format=function(e){if(!v(e)){for(var t=[],n=0;n<arguments.length;n++)t.push(a(arguments[n]));return t.join(" ")}n=1;for(var r=arguments,o=r.length,s=String(e).replace(i,function(e){if("%%"===e)return"%";if(n>=o)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(t){return"[Circular]"}default:return e}}),u=r[n];n<o;u=r[++n])g(u)||!w(u)?s+=" "+u:s+=" "+a(u);return s},t.deprecate=function(n,r){if(void 0!==e&&!0===e.noDeprecation)return n;if(void 0===e)return function(){return t.deprecate(n,r).apply(this,arguments)};var i=!1;return function(){if(!i){if(e.throwDeprecation)throw new Error(r);e.traceDeprecation?console.trace(r):console.error(r),i=!0}return n.apply(this,arguments)}};var o,s={};function a(e,n){var r={seen:[],stylize:c};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),p(n)?r.showHidden=n:n&&t._extend(r,n),y(r.showHidden)&&(r.showHidden=!1),y(r.depth)&&(r.depth=2),y(r.colors)&&(r.colors=!1),y(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=u),l(r,e,r.depth)}function u(e,t){var n=a.styles[t];return n?"\x1b["+a.colors[n][0]+"m"+e+"\x1b["+a.colors[n][1]+"m":e}function c(e,t){return e}function l(e,n,r){if(e.customInspect&&n&&O(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var i=n.inspect(r,e);return v(i)||(i=l(e,i,r)),i}var o=function(e,t){if(y(t))return e.stylize("undefined","undefined");if(v(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}return b(t)?e.stylize(""+t,"number"):p(t)?e.stylize(""+t,"boolean"):g(t)?e.stylize("null","null"):void 0}(e,n);if(o)return o;var s,a=Object.keys(n),u=(s={},a.forEach(function(e,t){s[e]=!0}),s);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),S(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return h(n);if(0===a.length){if(O(n))return e.stylize("[Function"+(n.name?": "+n.name:"")+"]","special");if(m(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(_(n))return e.stylize(Date.prototype.toString.call(n),"date");if(S(n))return h(n)}var c,w="",C=!1,j=["{","}"];return d(n)&&(C=!0,j=["[","]"]),O(n)&&(w=" [Function"+(n.name?": "+n.name:"")+"]"),m(n)&&(w=" "+RegExp.prototype.toString.call(n)),_(n)&&(w=" "+Date.prototype.toUTCString.call(n)),S(n)&&(w=" "+h(n)),0!==a.length||C&&0!=n.length?r<0?m(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),c=C?function(e,t,n,r,i){for(var o=[],s=0,a=t.length;s<a;++s)E(t,String(s))?o.push(f(e,t,n,r,String(s),!0)):o.push("");return i.forEach(function(i){i.match(/^\d+$/)||o.push(f(e,t,n,r,i,!0))}),o}(e,n,r,u,a):a.map(function(t){return f(e,n,r,u,t,C)}),e.seen.pop(),function(e,t,n){return e.reduce(function(e,t){return t.indexOf("\n"),e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n  ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}(c,w,j)):j[0]+w+j[1]}function h(e){return"["+Error.prototype.toString.call(e)+"]"}function f(e,t,n,r,i,o){var s,a,u;if((u=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?a=e.stylize(u.set?"[Getter/Setter]":"[Getter]","special"):u.set&&(a=e.stylize("[Setter]","special")),E(r,i)||(s="["+i+"]"),a||(e.seen.indexOf(u.value)<0?(a=g(n)?l(e,u.value,null):l(e,u.value,n-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map(function(e){return"  "+e}).join("\n").substr(2):"\n"+a.split("\n").map(function(e){return"   "+e}).join("\n")):a=e.stylize("[Circular]","special")),y(s)){if(o&&i.match(/^\d+$/))return a;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+a}function d(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function g(e){return null===e}function b(e){return"number"==typeof e}function v(e){return"string"==typeof e}function y(e){return void 0===e}function m(e){return w(e)&&"[object RegExp]"===C(e)}function w(e){return"object"==typeof e&&null!==e}function _(e){return w(e)&&"[object Date]"===C(e)}function S(e){return w(e)&&("[object Error]"===C(e)||e instanceof Error)}function O(e){return"function"==typeof e}function C(e){return Object.prototype.toString.call(e)}function j(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(y(o)&&(o=e.env.NODE_DEBUG||""),n=n.toUpperCase(),!s[n])if(new RegExp("\\b"+n+"\\b","i").test(o)){var r=e.pid;s[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,r,e)}}else s[n]=function(){};return s[n]},t.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=d,t.isBoolean=p,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=b,t.isString=v,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=y,t.isRegExp=m,t.isObject=w,t.isDate=_,t.isError=S,t.isFunction=O,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=n("1gqn");var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,n;console.log("%s - %s",(n=[j((e=new Date).getHours()),j(e.getMinutes()),j(e.getSeconds())].join(":"),[e.getDate(),k[e.getMonth()],n].join(" ")),t.format.apply(t,arguments))},t.inherits=n("P7XM"),t._extend=function(e,t){if(!t||!w(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e};var x="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function P(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}t.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(x&&e[x]){var t;if("function"!=typeof(t=e[x]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,n,r=new Promise(function(e,r){t=e,n=r}),i=[],o=0;o<arguments.length;o++)i.push(arguments[o]);i.push(function(e,r){e?n(e):t(r)});try{e.apply(this,i)}catch(s){n(s)}return r}return Object.setPrototypeOf(t,Object.getPrototypeOf(e)),x&&Object.defineProperty(t,x,{value:t,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(t,r(e))},t.promisify.custom=x,t.callbackify=function(t){if("function"!=typeof t)throw new TypeError('The "original" argument must be of type Function');function n(){for(var n=[],r=0;r<arguments.length;r++)n.push(arguments[r]);var i=n.pop();if("function"!=typeof i)throw new TypeError("The last argument must be of type Function");var o=this,s=function(){return i.apply(o,arguments)};t.apply(this,n).then(function(t){e.nextTick(s,null,t)},function(t){e.nextTick(P,t,s)})}return Object.setPrototypeOf(n,Object.getPrototypeOf(t)),Object.defineProperties(n,r(t)),n}}).call(this,n("8oxB"))},MGBS:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("mrSG"),i=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r.c(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},t.prototype.notifyError=function(e,t){this.destination.error(e)},t.prototype.notifyComplete=function(e){this.destination.complete()},t}(n("FFOo").a)},MLAN:function(e,t,n){"use strict";n.d(t,"a",function(){return s}),n("+qE3");var r=n("Vx+w"),i=(n("jGGy"),n("Obbf"),n("t2rx"),n("+3se")),o=(n("dcxs"),Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}),s=function(){function e(e,t,n,o){this.managementService=e,this.authService=t,this.pageLoadingService=n,this.notification=o,this.hasPlc=Object(i.e)(r.a,"plc"),this.hasGhn=Object(i.e)(r.a,"ghn"),this.wifiScheme="default",this.plcScheme="default",this.ghnScheme="default",this.ledschemes=[],this.pageLoadingService.register(["ledsViewInit","ledsLoaded"])}return e.prototype.ngOnInit=function(){this.getLed()},e.prototype.ngAfterViewInit=function(){this.pageLoadingService.ready("ledsViewInit")},e.prototype.getLed=function(){var e=this;this.managementService.ledsGet().subscribe(function(t){e.ubusLeds=Object(i.d)(t),e.leds=e.managementService.prepareLedScope(t),Object(i.g)(r.a.plc)&&e.managementService.getPlc().subscribe(function(n){Object(i.e)(r.a,"button.leds.schemes")&&(e.ledschemes=r.a.button.leds.schemes.map(function(e){return o({},e)}),e.ledschemes.forEach(function(r){switch(r.label=e.managementService.getSysfsName(r.name),r.type){case"wifitrigger":r.disabled=parseInt(t[r.led].disableLeds,10)||0;break;case"plcscheme":r.disabled=Object(i.g)(n.result[1])&&"off"==n.result[1].value?1:0}r.initialState=r.disabled})),e.updateSchemeView()}),Object(i.g)(r.a.ghn)&&e.managementService.getGhn().subscribe(function(n){Object(i.e)(r.a,"button.leds.schemes")&&(e.ledschemes=r.a.button.leds.schemes.map(function(e){return o({},e)}),e.ledschemes.forEach(function(r){switch(r.label=e.managementService.getSysfsName(r.name),r.type){case"wifitrigger":r.disabled=parseInt(t[r.led].disableLeds,10)||0;break;case"ghnscheme":r.disabled=Object(i.g)(n.result[1])&&"off"==n.result[1].value?1:0}r.initialState=r.disabled})),e.updateSchemeView()}),e.pageLoadingService.ready("ledsLoaded")})},e.prototype.updateSchemeView=function(){var e=this;this.leds.forEach(function(t){"WLAN"===t.name&&(t.disabled?e.wifiScheme="off":e.ledschemes.forEach(function(t){"wifitrigger"===t.type&&(e.wifiScheme=t.disabled?"reduced":"default")}),e.fakeWifiScheme=e.wifiScheme),Object(i.g)(r.a.plc)&&("dLAN"===t.name&&(t.disabled?e.plcScheme="off":e.ledschemes.forEach(function(t){"plcscheme"===t.type&&(e.plcScheme=t.disabled?"reduced":"default")})),e.fakePlcScheme=Object(i.d)(e.plcScheme)),Object(i.g)(r.a.ghn)&&("dLAN"===t.name&&(t.disabled?e.ghnScheme="off":e.ledschemes.forEach(function(t){"ghnscheme"===t.type&&(e.ghnScheme=t.disabled?"reduced":"default")})),e.fakeGhnScheme=Object(i.d)(e.ghnScheme))})},e.prototype.updateLedScope=function(e,t,n){var r=this;this.ledschemes.forEach(function(i){if(i.type===t){var o=0,s="invalid";switch("wifitrigger"===t?(r.wifiScheme=e,s=r.wifiScheme):"plcscheme"===t?(r.plcScheme=e,s=r.plcScheme):"ghnscheme"===t&&(r.ghnScheme=e,s=r.ghnScheme),s){case"reduced":i.disabled=1,o=0;break;case"off":o=1;break;case"default":default:i.disabled=0,o=0}r.leds.forEach(function(e){e.name===n&&(e.disabled=o?1:0)})}})},e.prototype.updateWiFiScope=function(e){this.updateLedScope(e,"wifitrigger","WLAN")},e.prototype.updatePlcScope=function(e){r.a.plc&&this.updateLedScope(e,"plcscheme","dLAN"),r.a.ghn&&this.updateLedScope(e,"ghnscheme","dLAN")},e.prototype.reset=function(){this.wifiScheme=this.fakeWifiScheme,this.plcScheme=this.fakePlcScheme,this.ghnScheme=this.fakeGhnScheme,this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.cancel=function(){this.reset()},e.prototype.save=function(){var e=this,t=[],n=!1,o=!1,s=!1;Object(i.e)(r.a,"button.leds.schemes")&&this.ledschemes.forEach(function(r){if(r.disabled!=r.initialState)switch(r.type){case"wifitrigger":t.push([e.authService.getSid(),"uci","set",{config:"system",section:r.led,values:{disableLeds:r.disabled}}]),s=!0;break;case"plcscheme":t.push([e.authService.getSid(),"uci","set",{config:"plc",section:"plc",values:{led_scheme:r.disabled?"off":"on"}}]),n=!0;break;case"ghnscheme":t.push([e.authService.getSid(),"uci","set",{config:"ghn",section:"ghn",values:{led_scheme:r.disabled?"off":"on"}}]),o=!0}}),n&&t.push([this.authService.getSid(),"uci","commit",{config:"plc"}]),o&&t.push([this.authService.getSid(),"uci","commit",{config:"ghn"}]),this.leds.forEach(function(n){n.disabled!=e.ubusLeds[n[".name"]].disabled&&(t.push([e.authService.getSid(),"uci","set",{config:"system",section:n[".name"],values:{disabled:n.disabled}}]),s=!0)}),s&&t.push([this.authService.getSid(),"uci","commit",{config:"system"}]),t.length&&this.managementService.save(t).subscribe(function(t){e.fakePlcScheme=e.plcScheme,e.fakeGhnScheme=e.ghnScheme,e.fakeWifiScheme=e.wifiScheme,e.reset(),e.notification.success(Object(i.b)("You have successfully changed the Configuration for your device's LEDs.")),e.getLed()})},e}()},McSo:function(e,t,n){"use strict";function r(e){return null!=e&&"object"==typeof e}n.d(t,"a",function(){return r})},MrYD:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("CcnG"),i=n("hjjD"),o=n("Q2Sk"),s=function(){function e(e,t,n,i,o,s,a,u){this._viewContainerRef=e,this._renderer=t,this._elementRef=n,this._injector=i,this._componentFactoryResolver=o,this._ngZone=s,this._applicationRef=a,this._posService=u,this.onBeforeShow=new r.m,this.onShown=new r.m,this.onBeforeHide=new r.m,this.onHidden=new r.m,this._providers=[],this._isHiding=!1,this._listenOpts={},this._globalListener=Function.prototype}return Object.defineProperty(e.prototype,"isShown",{get:function(){return!this._isHiding&&!!this._componentRef},enumerable:!0,configurable:!0}),e.prototype.attach=function(e){return this._componentFactory=this._componentFactoryResolver.resolveComponentFactory(e),this},e.prototype.to=function(e){return this.container=e||this.container,this},e.prototype.position=function(e){return this.attachment=e.attachment||this.attachment,this._elementRef=e.target||this._elementRef,this},e.prototype.provide=function(e){return this._providers.push(e),this},e.prototype.show=function(e){if(void 0===e&&(e={}),this._subscribePositioning(),this._innerComponent=null,!this._componentRef){this.onBeforeShow.emit(),this._contentRef=this._getContentRef(e.content,e.context,e.initialState);var t=r.D.resolveAndCreate(this._providers,this._injector);this._componentRef=this._componentFactory.create(t,this._contentRef.nodes),this._applicationRef.attachView(this._componentRef.hostView),this.instance=this._componentRef.instance,Object.assign(this._componentRef.instance,e),this.container instanceof r.k&&this.container.nativeElement.appendChild(this._componentRef.location.nativeElement),"body"===this.container&&"undefined"!=typeof document&&document.querySelector(this.container).appendChild(this._componentRef.location.nativeElement),!this.container&&this._elementRef&&this._elementRef.nativeElement.parentElement&&this._elementRef.nativeElement.parentElement.appendChild(this._componentRef.location.nativeElement),this._contentRef.componentRef&&(this._innerComponent=this._contentRef.componentRef.instance,this._contentRef.componentRef.changeDetectorRef.markForCheck(),this._contentRef.componentRef.changeDetectorRef.detectChanges()),this._componentRef.changeDetectorRef.markForCheck(),this._componentRef.changeDetectorRef.detectChanges(),this.onShown.emit(this._componentRef.instance)}return this._registerOutsideClick(),this._componentRef},e.prototype.hide=function(){if(!this._componentRef)return this;this.onBeforeHide.emit(this._componentRef.instance);var e=this._componentRef.location.nativeElement;return e.parentNode.removeChild(e),this._contentRef.componentRef&&this._contentRef.componentRef.destroy(),this._componentRef.destroy(),this._viewContainerRef&&this._contentRef.viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef)),this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._contentRef=null,this._componentRef=null,this._removeGlobalListener(),this.onHidden.emit(),this},e.prototype.toggle=function(){this.isShown?this.hide():this.show()},e.prototype.dispose=function(){this.isShown&&this.hide(),this._unsubscribePositioning(),this._unregisterListenersFn&&this._unregisterListenersFn()},e.prototype.listen=function(e){var t=this;this.triggers=e.triggers||this.triggers,this._listenOpts.outsideClick=e.outsideClick,e.target=e.target||this._elementRef.nativeElement;var n=this._listenOpts.hide=function(){return e.hide?e.hide():void t.hide()},r=this._listenOpts.show=function(n){e.show?e.show(n):t.show(n),n()};return this._unregisterListenersFn=Object(i.a)(this._renderer,{target:e.target,triggers:e.triggers,show:r,hide:n,toggle:function(e){t.isShown?n():r(e)}}),this},e.prototype._removeGlobalListener=function(){this._globalListener&&(this._globalListener(),this._globalListener=null)},e.prototype.attachInline=function(e,t){return this._inlineViewRef=e.createEmbeddedView(t),this},e.prototype._registerOutsideClick=function(){var e=this;if(this._componentRef&&this._componentRef.location&&this._listenOpts.outsideClick){var t=this._componentRef.location.nativeElement;setTimeout(function(){e._globalListener=Object(i.c)(e._renderer,{targets:[t,e._elementRef.nativeElement],outsideClick:e._listenOpts.outsideClick,hide:function(){return e._listenOpts.hide()}})})}},e.prototype.getInnerComponent=function(){return this._innerComponent},e.prototype._subscribePositioning=function(){var e=this;!this._zoneSubscription&&this.attachment&&(this._zoneSubscription=this._ngZone.onStable.subscribe(function(){e._componentRef&&e._posService.position({element:e._componentRef.location,target:e._elementRef,attachment:e.attachment,appendToBody:"body"===e.container})}))},e.prototype._unsubscribePositioning=function(){this._zoneSubscription&&(this._zoneSubscription.unsubscribe(),this._zoneSubscription=null)},e.prototype._getContentRef=function(e,t,n){if(!e)return new o.a([]);if(e instanceof r.M){if(this._viewContainerRef){var i=this._viewContainerRef.createEmbeddedView(e,t);return i.markForCheck(),new o.a([i.rootNodes],i)}var s=e.createEmbeddedView({});return this._applicationRef.attachView(s),new o.a([s.rootNodes],s)}if("function"==typeof e){var a=this._componentFactoryResolver.resolveComponentFactory(e),u=r.D.resolveAndCreate(this._providers.slice(),this._injector),c=a.create(u);return Object.assign(c.instance,n),this._applicationRef.attachView(c.hostView),new o.a([[c.location.nativeElement]],c.hostView,c)}return new o.a([[this._renderer.createText(""+e)]])},e}()},"N+XP":function(e,t,n){"use strict";n.d(t,"a",function(){return f});var r=n("K9Ia"),i=n("xXU7"),o=n("0/uQ"),s=n("ny24"),a=n("15JJ"),u=n("psW0"),c=n("t9fZ"),l=n("+3se"),h=n("DSB1"),f=(n("Obbf"),n("UVPe"),n("t+HJ"),function(){function e(e,t,n,i,o){this.devicesService=e,this.notification=t,this.renderer=n,this.translate=i,this.spinner=o,this.ngUnsubscribe=new r.a,this.shouldStartSimpleConnectTimeout=!0,this.simpleConnectTrigger=0,this.schedulerUpdateSimpleConnectTimeout=new r.a,this.updateSimpleConnectTimeoutSubject=new r.a,this.simpleConnectStatusSubject=new r.a,this.newDeviceSubject=new r.a,this.simpleConnectTimeout=120,this.secId=["","","",""],this.buttonDisable=!0,this.secIdDisable=!0,this.orderby="deviceName",this.reverse=!1,this.simpleConnectInProgress=!1,this.oldDevices=[],this.simpleConnectMsg={alreadyInProgress:{msg:Object(l.b)("Powerline encryption already in progress by external or previous request."),type:h.a.Info,time:2e5,guid:""},swPushButton:{msg:Object(l.b)("Powerline encryption in progress. Wait until process has been finished. 120 seconds left."),type:h.a.Success,time:12e4,guid:""},swPushButtonStopped:{msg:Object(l.b)("Powerline encryption was successfully stopped."),type:h.a.Success,guid:""},noDeviceFound:{msg:Object(l.b)("No Powerline device was found. Ensure you pressed the companions Powerline encryption button.\n              Please wait until the process has been finished."),type:h.a.Warning,time:6e4,guid:""},newDeviceFound:{msg:Object(l.b)("New Powerline device found. Please wait until the process has been completely finished. This can take up to 20 seconds."),type:h.a.Success,time:2e4,guid:""},simpleConnectStopped:{msg:Object(l.b)("Powerline encryption was stopped by external event."),type:h.a.Info,guid:""},determineReason:{msg:Object(l.b)("Some event has been occoured. Determining reason, this can take up to 1 minute."),type:h.a.Info,time:6e4,guid:""},secIdInProgress:{msg:Object(l.b)("Powerline encryption via secuity ID successfully started. Wait until this process has been finished.\n              This can take up to 1 minute."),type:h.a.Success,time:6e4,guid:""},secIdNoDeviceFound:{msg:Object(l.b)("No Powerline device was found. Ensure you have correctly entered the companions security ID."),type:h.a.Warning,guid:""}},this.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e}}return e.prototype.ngOnInit=function(){this.getDlanStatus()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.stopUpdateSimpleConnectStatus(),this.simpleConnectStatusSubject.complete(),this.stopCheckForNewDevices(),this.newDeviceSubject.complete(),this.stopUpdateSimpleConnectTimeout(),this.updateSimpleConnectTimeoutSubject.complete()},e.prototype.updateDevices=function(){var e=this;this.devicesService.getDevices().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){Object(l.g)(t)?e.oldDevices=t:e.updateDevices()})},e.prototype.getDlanStatus=function(){var e=this;this.devicesService.getDlanStatus().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){if(Object(l.g)(t.value)&&(e.dlanEnabled=!("1"===t.value)),!e.dlanEnabled)return e.notification.clear(),e.notification.info(Object(l.b)("Your Powerline pro network is disabled."),{sticky:!0}),e.setSimpleConnectButtonText("start"),void e.spinner.hide();e.devicesService.getSimpleConnectStatus().pipe(Object(s.a)(e.ngUnsubscribe)).subscribe(function(t){0!=t&&256!=t?(e.showSimpleConnectMessage("alreadyInProgress"),e.simpleConnectInProgress=!0,e.setSimpleConnectButtonText("stop"),e.simpleConnectTrigger=3):(e.setSimpleConnectButtonText("start"),e.secIdDisable=!1),e.spinner.hide(),e.buttonDisable=!1,e.updateSimpleConnectStatus(),setTimeout(function(){try{e.renderer.selectRootElement("#dlan-secid-0").focus()}catch(t){}},1e3)})})},e.prototype.updateSimpleConnectStatus=function(){var e=this;this.simpleConnectStatusSubject.next(!0),Object(i.a)(2500).pipe(Object(s.a)(Object(o.a)(this.simpleConnectStatusSubject)),Object(s.a)(this.ngUnsubscribe),Object(a.a)(function(){return e.devicesService.getSimpleConnectStatus()})).subscribe(function(t){0===t||256===t||260===t?(e.spinner.hide(),e.hideSimpleConnectMessage("alreadyInProgress"),3==e.simpleConnectTrigger&&e.setSimpleConnectButtonText("start"),260===t&&(e.buttonDisable=!0,e.notification.removeNotification(e.dlanEncryptionInProgressMsgId),e.showSimpleConnectMessage("noDeviceFound")),0!==t&&256!==t||(e.hideSimpleConnectMessage("noDeviceFound"),e.setSimpleConnectButtonText("start"),e.secIdDisable=!1,e.buttonDisable=!1,e.simpleConnectInProgress=!1),0===t&&(1!=e.simpleConnectTrigger&&2!=e.simpleConnectTrigger||(e.notification.removeNotification(e.dlanEncryptionInProgressMsgId),2==e.simpleConnectTrigger?(e.showSimpleConnectMessage("swPushButtonStopped"),e.secIdDisable=!1):1==e.simpleConnectTrigger&&(e.buttonDisable=!0,e.stopUpdateSimpleConnectStatus(),e.showSimpleConnectMessage("determineReason"),e.checkForNewDevice(1e4,6e4,!0))),3==e.simpleConnectTrigger&&e.showSimpleConnectMessage("simpleConnectStopped"),e.simpleConnectTrigger=0)):(e.hideSimpleConnectMessage("simpleConnectStopped"),e.hideSimpleConnectMessage("swPushButtonStopped"),e.hideSimpleConnectMessage("newDeviceFound"),1==e.simpleConnectTrigger?e.shouldStartSimpleConnectTimeout&&(e.shouldStartSimpleConnectTimeout=!1,e.dlanEncryptionInProgressMsgId=e.showSimpleConnectMessage("swPushButton"),Object(i.a)(1e3).pipe(Object(s.a)(Object(o.a)(e.schedulerUpdateSimpleConnectTimeout)),Object(s.a)(Object(o.a)(e.updateSimpleConnectTimeoutSubject))).subscribe(function(){e.simpleConnectTimeout-=1,e.simpleConnectTimeout>=0?e.translate.get("Powerline encryption in progress. Wait until process has been finished. {time} seconds left.",{time:e.simpleConnectTimeout}).subscribe(function(t){e.notification.updateNotification(e.dlanEncryptionInProgressMsgId,t)}):(e.notification.removeNotification(e.dlanEncryptionInProgressMsgId),e.stopUpdateSimpleConnectTimeout())})):1!=e.simpleConnectTrigger&&(e.showSimpleConnectMessage("alreadyInProgress"),e.simpleConnectTrigger=3,e.shouldStartSimpleConnectTimeout=!0,e.simpleConnectInProgress=!0,e.setSimpleConnectButtonText("stop")),e.buttonDisable=!1,e.spinner.hide())})},e.prototype.startConfiguration=function(){var e=this;this.spinner.show(),this.stopUpdateSimpleConnectStatus(),this.hideSimpleConnectMessage("newDeviceFound"),this.hideSimpleConnectMessage("secIdNoDeviceFound"),this.hideSimpleConnectMessage("secIdInProgress"),this.updateDevices(),this.buttonDisable=!0,this.secIdDisable=!0,this.devicesService.addSecid(this.secId.join("-")).pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(){e.showSimpleConnectMessage("secIdInProgress"),e.checkForNewDevice(5e3,6e4)})},e.prototype.simpleconnect=function(){var e,t=this;this.simpleConnectStatusSubject.next(!0),this.buttonDisable=!0,this.spinner.show(),this.simpleConnectInProgress||(this.stopUpdateSimpleConnectStatus(),this.updateDevices(),this.simpleConnectTimeout=120),e=null,t.devicesService.getSimpleConnectStatus().pipe(Object(s.a)(t.ngUnsubscribe),Object(u.a)(function(n){return e=n,t.devicesService.pushbtn()}),Object(u.a)(function(){return Object(i.a)(1e3)}),Object(s.a)(Object(o.a)(t.simpleConnectStatusSubject))).subscribe(function(n){n!=e&&(t.stopUpdateSimpleConnectStatus(),t.simpleConnectInProgress?(t.simpleConnectInProgress=!1,t.simpleConnectTrigger=2,t.setSimpleConnectButtonText("start")):(t.secIdDisable=!0,t.setSimpleConnectButtonText("stop"),t.simpleConnectInProgress=!0,t.simpleConnectTrigger=1),t.updateSimpleConnectStatus())})},e.prototype.checkForNewDevice=function(e,t,n){var r=this,u=t/e,h=0;this.newDeviceSubject.next(!0),Object(i.a)(2500).pipe(Object(c.a)(u),Object(s.a)(Object(o.a)(this.newDeviceSubject)),Object(s.a)(this.ngUnsubscribe),Object(a.a)(function(){return r.devicesService.getDevices()})).subscribe(function(e){h++,Object(l.g)(e)&&e.forEach(function(e){r.oldDevices.find(function(t){return t.mac===e.mac})||(r.newDeviceSubject.next(!1),n?(r.hideSimpleConnectMessage("determineReason"),r.showSimpleConnectMessage("newDeviceFound"),setTimeout(function(){r.hideSimpleConnectMessage("newDeviceFound"),r.setSimpleConnectButtonText("start"),r.updateSimpleConnectStatus(),r.buttonDisable=!1,r.secIdDisable=!1},2e4)):(r.showSimpleConnectMessage("newDeviceFound"),r.hideSimpleConnectMessage("secIdInProgress"),setTimeout(function(){r.hideSimpleConnectMessage("newDeviceFound"),r.updateSimpleConnectStatus(),r.buttonDisable=!1,r.secIdDisable=!1,r.secId=["","","",""],r.delos.form.markAsPristine()},2e4)))})},function(e){r.newDeviceNotFound(n)},function(){r.newDeviceSubject.next(!1),h===u&&r.newDeviceNotFound(n)})},e.prototype.setSimpleConnectButtonText=function(e){this.simpleConnectBtnText="start"===e?Object(l.b)("Start Configuration"):Object(l.b)("Stop Configuration")},e.prototype.stopUpdateSimpleConnectStatus=function(){this.simpleConnectStatusSubject.next(!1)},e.prototype.stopCheckForNewDevices=function(){this.newDeviceSubject.next(!1)},e.prototype.stopUpdateSimpleConnectTimeout=function(){this.updateSimpleConnectTimeoutSubject.next(!1)},e.prototype.showSimpleConnectMessage=function(e){if(Object(l.g)(this.simpleConnectMsg[e])){var t=this.simpleConnectMsg[e];if(!this.simpleConnectMsg[e].guid)return this.simpleConnectMsg[e].guid=Object(l.g)(this.simpleConnectMsg[e].time)?this.notification.notify(t.type,t.msg,{time:t.time,sticky:!0,withId:!0}):this.notification.notify(t.type,t.msg),this.simpleConnectMsg[e].guid}this.spinner.hide()},e.prototype.hideSimpleConnectMessage=function(e){Object(l.g)(this.simpleConnectMsg[e])&&this.simpleConnectMsg[e].guid&&(this.notification.removeNotification(this.simpleConnectMsg[e].guid),this.simpleConnectMsg[e].guid="")},e.prototype.updateSimpleConnectMessage=function(e,t){Object(l.g)(this.simpleConnectMsg[e])&&this.simpleConnectMsg[e].guid&&this.notification.updateNotification(this.simpleConnectMsg[e].guid,t)},e.prototype.newDeviceNotFound=function(e){e?(this.hideSimpleConnectMessage("determineReason"),this.showSimpleConnectMessage("simpleConnectStopped"),this.setSimpleConnectButtonText("start")):(this.hideSimpleConnectMessage("secIdInProgress"),this.showSimpleConnectMessage("secIdNoDeviceFound"),this.secId=["","","",""]),this.buttonDisable=!1,this.secIdDisable=!1,this.delos.form.markAsPristine(),this.updateSimpleConnectStatus(),this.spinner.hide()},e}())},OEhD:function(e,t,n){"use strict";var r=n("hwdV").Buffer,i=n("M2TY"),o=n("tsXx");function s(e){this._table=e||{},this._table.headers=this._table.headers||{},this._table.translations=this._table.translations||{},this._translations=[],this._writeFunc="writeUInt32LE",this._handleCharset()}e.exports=function(e){return new s(e).compile()},s.prototype.MAGIC=2500072158,s.prototype._handleCharset=function(){var e=(this._table.headers["content-type"]||"text/plain").split(";"),t=e.shift(),n=o.formatCharset(this._table.charset),r=[];r=e.map(function(e){var t=e.split("="),r=t.shift().trim(),i=t.join("=");return"charset"===r.toLowerCase()?(n||(n=o.formatCharset(i.trim()||"utf-8")),"charset="+n):e}),n||r.push("charset="+(n=this._table.charset||"utf-8")),this._table.charset=n,this._table.headers["content-type"]=t+"; "+r.join("; "),this._charset=n},s.prototype._generateList=function(){var e=[];return e.push({msgid:r.alloc(0),msgstr:i.convert(o.generateHeader(this._table.headers),this._charset)}),Object.keys(this._table.translations).forEach((function(t){"object"==typeof this._table.translations[t]&&Object.keys(this._table.translations[t]).forEach((function(n){if("object"==typeof this._table.translations[t][n]&&(""!==t||""!==n)){var r,o=this._table.translations[t][n].msgid_plural,s=n;t&&(s=t+"\x04"+s),o&&(s+="\0"+o),r=[].concat(this._table.translations[t][n].msgstr||[]).join("\0"),e.push({msgid:i.convert(s,this._charset),msgstr:i.convert(r,this._charset)})}}).bind(this))}).bind(this)),e},s.prototype._calculateSize=function(e){var t=0,n=0;return e.forEach(function(e){t+=e.msgid.length+1,n+=e.msgstr.length+1}),{msgid:t,msgstr:n,total:28+8*e.length+8*e.length+t+n}},s.prototype._build=function(e,t){var n,i,o=r.alloc(t.total),s=0;for(o[this._writeFunc](this.MAGIC,0),o[this._writeFunc](0,4),o[this._writeFunc](e.length,8),o[this._writeFunc](28,12),o[this._writeFunc](28+8*e.length,16),o[this._writeFunc](0,20),o[this._writeFunc](28+8*e.length*2,24),s=28+16*e.length,n=0,i=e.length;n<i;n++)e[n].msgid.copy(o,s),o[this._writeFunc](e[n].msgid.length,28+8*n),o[this._writeFunc](s,28+8*n+4),o[s+e[n].msgid.length]=0,s+=e[n].msgid.length+1;for(n=0,i=e.length;n<i;n++)e[n].msgstr.copy(o,s),o[this._writeFunc](e[n].msgstr.length,28+8*e.length+8*n),o[this._writeFunc](s,28+8*e.length+8*n+4),o[s+e[n].msgstr.length]=0,s+=e[n].msgstr.length+1;return o},s.prototype.compile=function(){var e=this._generateList(),t=this._calculateSize(e);return e.sort(function(e,t){return e.msgid>t.msgid?1:e.msgid<t.msgid?-1:0}),this._build(e,t)}},Obbf:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("+3se"),i=n("K9Ia"),o=n("DSB1"),s=n("ZYCi"),a=function(){function e(e){var t=this;this.router=e,this.subject=new i.a,this.keepAfterRouteChange=!1,this.updateNotificationSubject=new i.a,this.removeNotificationSubject=new i.a,this.router.events.subscribe(function(e){e instanceof s.d&&(t.keepAfterRouteChange?t.keepAfterRouteChange=!1:t.clear())})}return e.prototype.getNotification=function(){return this.subject.asObservable()},e.prototype.success=function(e,t){return this.notify(o.a.Success,e,t)},e.prototype.error=function(e,t){return this.notify(o.a.Error,e,t)},e.prototype.info=function(e,t){return this.notify(o.a.Info,e,t)},e.prototype.warn=function(e,t){return this.notify(o.a.Warning,e,t)},e.prototype.notify=function(e,t,n){return this.keepAfterRouteChange=!1,n&&n.keepAfterRouteChange&&(this.keepAfterRouteChange=n.keepAfterRouteChange),n&&n.withId&&(n.id=r.a.newGuid()),this.subject.next({type:e,message:t,options:n}),n&&n.id?n.id:null},e.prototype.updateNotification=function(e,t){this.updateNotificationSubject.next({id:e,newMessage:t})},e.prototype.removeNotification=function(e){this.removeNotificationSubject.next(e)},e.prototype.clear=function(){this.subject.next()},e}()},Onz0:function(e,t,n){(function(e){function n(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===n(e)},t.isBoolean=function(e){return"boolean"==typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return"number"==typeof e},t.isString=function(e){return"string"==typeof e},t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return"[object RegExp]"===n(e)},t.isObject=function(e){return"object"==typeof e&&null!==e},t.isDate=function(e){return"[object Date]"===n(e)},t.isError=function(e){return"[object Error]"===n(e)||e instanceof Error},t.isFunction=function(e){return"function"==typeof e},t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=e.isBuffer}).call(this,n("tjlA").Buffer)},"P/o0":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("F/XL"),i=n("67Y/"),o=n("psW0"),s=(n("jGGy"),n("+NEN"),function(){function e(e,t){this.ubusService=e,this.authService=t}return e.prototype.getRadios=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}]}).pipe(Object(i.a)(function(e){return e.result[1].values}))},e.prototype.getDevices=function(e){var t=this,n=this.authService.getSid();return this.ubusService.call({data:[n,"iwinfo","devices",{}]}).pipe(Object(o.a)(function(e){var s=[],a=e.result[1].devices;for(var u in a)a.hasOwnProperty(u)&&s.push([n,"network.info","wifi_state",{device:a[u]}]);return t.ubusService.call({data:s}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1]})})).pipe(Object(o.a)(function(e){var o=[];return e.forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&"wifi"==t.substr(0,4)&&o.push([n,"iwinfo","scan",{device:t}])}),0===o.length?Object(r.a)([]):t.ubusService.call({data:o}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1].results})}))}))}))},e}())},P62w:function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n("+NEN");var r=function(){function e(e){this.ubusService=e}return e.prototype.callUbus=function(e){return this.ubusService.call({data:e,raw:!0})},e}()},P7XM:function(e,t){e.exports="function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},PIxe:function(e,t,n){"use strict";n.d(t,"a",function(){return u}),n("H5ub");var r=n("Vx+w"),i=(n("Obbf"),n("t2rx"),n("+3se")),o=(n("EDOA"),n("ClyA")),s=(n("5Ki+"),n("K9Ia")),a=n("ny24"),u=function(){function e(e,t,n,i,o,a){this.radioService=e,this.pageLoadingService=t,this.modalService=n,this.notification=i,this.wifiConfigService=o,this.router=a,this.ngUnsubscribe=new s.a,this.plcStandby=!1,this.config0=r.a.wireless.devices.radio0,this.config1=r.a.wireless.devices.radio1,this.rescanIntervalPattern=/^[0-9]*$/,this.radioName=this.router.url.split("wifi/")[1]}return e.prototype.ngOnInit=function(){this.radioType&&(this.radioName=this.radioType),this.pageLoadingService.register([this.radioName]),"radio0"==this.radioName?this.radio0=!0:this.radio1=!0,this.config="radio0"==this.radioName?this.config0:this.config1,this.frequency=this.config.frequency,this.getRadio()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.bsModalRef&&this.bsModalRef.hide()},e.prototype.getRadio=function(){var e=this;this.radioService.getRadios().pipe(Object(a.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready(e.radioName),e.radios=t[0],e.bridges=t[1],e.radioCount=Object.keys(e.radios).length,e.deviceName=Object(i.g)(e.radios[e.radioName])?e.radioName:e.radioName.replace("radio","wifi");var n,o,s=e.radios[e.deviceName];if(Object(i.g)(r.a.plc)){var a=t[2];Object(i.g)(a.disabled)&&0==Number(a.disabled)&&Object(i.g)(a.standby)&&0!=Number(a.standby)&&(e.plcStandby=!0)}for(var u in e.mode=s.require_mode||"",e.enable=Number(s.disabled)||0,e.rates=e.config.rates,e.supportedRates=[],s.supported_rates=s.supported_rates||[],n={},s.supported_rates)s.supported_rates.hasOwnProperty(u)&&(n[s.supported_rates[u]]=!0);for(var c=0;c<e.config.rates.length;++c)e.supportedRates.push(n[e.config.rates[c]]||!1);for(e.basicRate=[],s.basic_rate=s.basic_rate||[],o={},c=0;c<s.basic_rate.length;++c)o[s.basic_rate[c]]=!0;for(c=0;c<e.config.rates.length;++c)e.basicRate.push(o[e.config.rates[c]]||!1);e.bandwidth=s.htmode,e.indoorUse={available:e.wifiConfigService.indoor5GAvailable(e.config),enabled:e.wifiConfigService.indoor5GEnabled(s)},e.rescan={on:Number(s.autorescan)||0,interval:Number(s.autorescan_interval)||0},e.updateChannelList(s.channel,!0),e.updateTxPower(s.channel,s.txpower)})},e.prototype.updateChannelListView=function(){this.isChannelAllowed(this.bandwidth,this.channel)||(this.channel="auto"),this.updateChannelList(-1,!1)},e.prototype.updateChannelList=function(e,t){var n=this,r={auto:Object(i.b)("Auto")+" *",1:"(2412 MHz)",2:"(2417 MHz)",3:"(2422 MHz)",4:"(2427 MHz)",5:"(2432 MHz)",6:"(2437 MHz)",7:"(2442 MHz)",8:"(2447 MHz)",9:"(2452 MHz)",10:"(2457 MHz)",11:"(2462 MHz)",12:"(2467 MHz)",13:"(2472 MHz)",36:"(5180 MHz)",40:"(5200 MHz)",44:"(5220 MHz)",48:"(5240 MHz)",52:"(5260 MHz)",56:"(5280 MHz)",60:"(5300 MHz)",64:"(5320 MHz)",100:"(5500 MHz)",104:"(5520 MHz)",108:"(5540 MHz)",112:"(5560 MHz)",116:"(5580 MHz)",120:"(5600 MHz)",124:"(5620 MHz)",128:"(5640 MHz)",132:"(5660 MHz)",136:"(5680 MHz)",140:"(5700 MHz)"};this.channels=[],this.config.groups.forEach(function(i){var o;i.channels.forEach(function(i){o="number"==typeof i?i+" "+r[i]:r[i];var s=!0;n.isChannelAllowed(n.bandwidth,i)||(s=!1),n.channels.push({channel:i,label:o,enabled:s}),t&&i==e&&(n.channel=i)})})},e.prototype.isIndoorUse=function(){return!(this.indoorUse.available&&!this.indoorUse.enabled)},e.prototype.determineForbiddenChannels=function(e){return"VHT20"==e?this.isIndoorUse()?{channels:[]}:{channels:[36,40,44,48,52,56,60,64]}:"VHT40"==e?this.isIndoorUse()?{channels:[140]}:{channels:[36,40,44,48,52,56,60,64,140]}:"VHT80"==e?this.isIndoorUse()?{channels:[132,136,140]}:{channels:[36,40,44,48,52,56,60,64,132,136,140]}:{channels:[]}},e.prototype.isChannelAllowed=function(e,t){var n=this.determineForbiddenChannels(e).channels;for(var r in n.forEach(function(e){if(t==e)return!1}),this.bridges)if(this.bridges[r].device===this.deviceName&&"auto"===t)return!1;return!0},e.prototype.updateTxPower=function(e,t){for(var n,r=0;r<this.config.groups.length;r++)for(var i=this.config.groups[r].channels,o=0;o<i.length;o++)i[o]==e&&(n=this.config.groups[r].txpowers);switch(this.txPowerVeryHigh=n+7,this.txPowerHigh=n,this.txPowerMedium=n-3,this.txPowerLow=n-6,this.txPowerCustomInit=33,this.txPowerCustom=Number(t),Number(t)){case this.txPowerVeryHigh:this.txpower=this.txPowerVeryHigh.toString();break;case this.txPowerHigh:this.txpower=this.txPowerHigh.toString();break;case this.txPowerMedium:this.txpower=this.txPowerMedium.toString();break;case this.txPowerLow:this.txpower=this.txPowerLow.toString();break;default:this.txpower=this.txPowerCustomInit.toString()}},e.prototype.onBasicChange=function(e){this.basicRate[e]&&(this.supportedRates[e]=!0)},e.prototype.onSupportedChange=function(e){this.supportedRates[e]||(this.basicRate[e]=!1)},e.prototype.save=function(){var e=this;this.enable&&this.plcStandby?(this.bsModalRef=this.modalService.show(o.a),this.bsModalRef.content.title=Object(i.b)("Disable Radio?"),this.bsModalRef.content.bodyText=Object(i.b)("Powerline standby is enabled! Disabling all radios will interrupt the connection to this website if the device can only be reached via Powerline and it enters standby mode. Do you really want to disable this radio?"),this.bsModalRef.content.actionButtonText=Object(i.b)("Disable Radio?"),this.bsModalRef.content.closeButtonText=Object(i.b)("Cancel"),this.bsModalRef.content.ok=function(){e.doSave()}):this.doSave()},e.prototype.doSave=function(){var e=this,t={},n=[],r=[],o=[];(this.txpower!=this.txPowerVeryHigh&&this.txpower!=this.txPowerHigh&&this.txpower!=this.txPowerMedium&&this.txpower!=this.txPowerLow||this.txpower==this.txPowerCustomInit)&&(this.txpower=this.txPowerCustom,this.txPowerCustomInit=this.txPowerCustom),t={channel:this.channel,htmode:this.bandwidth,txpower:this.txpower,cfg_disabled:this.enable,disabled:this.enable};var s=[];this.mode?t.require_mode=this.mode:s.push("require_mode");for(var a=0;a<this.rates.length;a++)this.supportedRates[a]&&n.push(this.rates[a]);for(n.length&&(t.supported_rates=n),a=0;a<this.rates.length;a++)this.basicRate[a]&&r.push(this.rates[a]);r.length&&(t.basic_rate=r),5==this.frequency&&(this.isIndoorUse()?(o.push("36-112"),o.push("132-140"),t.acs_chanlist=o):(o.push("100-112"),o.push("132-140"),t.acs_chanlist=o)),this.radioService.save(this.radios,this.rescan.interval,this.deviceName,t,s).subscribe(function(t){e.notification.success(Object(i.b)("You've successfully configured the radio.")),e.delos.form.markAsUntouched(),e.markAsPristine()})},e.prototype.cancel=function(){this.getRadio(),this.markAsPristine()},e.prototype.trackByIndex=function(e){return e},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}()},PQ6H:function(e,t,n){"use strict";e.exports={10029:"maccenteuro",maccenteuro:{type:"_sbcs",chars:"\xc4\u0100\u0101\xc9\u0104\xd6\xdc\xe1\u0105\u010c\xe4\u010d\u0106\u0107\xe9\u0179\u017a\u010e\xed\u010f\u0112\u0113\u0116\xf3\u0117\xf4\xf6\xf5\xfa\u011a\u011b\xfc\u2020\xb0\u0118\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\u0119\xa8\u2260\u0123\u012e\u012f\u012a\u2264\u2265\u012b\u0136\u2202\u2211\u0142\u013b\u013c\u013d\u013e\u0139\u013a\u0145\u0146\u0143\xac\u221a\u0144\u0147\u2206\xab\xbb\u2026\xa0\u0148\u0150\xd5\u0151\u014c\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u25ca\u014d\u0154\u0155\u0158\u2039\u203a\u0159\u0156\u0157\u0160\u201a\u201e\u0161\u015a\u015b\xc1\u0164\u0165\xcd\u017d\u017e\u016a\xd3\xd4\u016b\u016e\xda\u016f\u0170\u0171\u0172\u0173\xdd\xfd\u0137\u017b\u0141\u017c\u0122\u02c7"},808:"cp808",ibm808:"cp808",cp808:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0401\u0451\u0404\u0454\u0407\u0457\u040e\u045e\xb0\u2219\xb7\u221a\u2116\u20ac\u25a0\xa0"},mik:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u2514\u2534\u252c\u251c\u2500\u253c\u2563\u2551\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2510\u2591\u2592\u2593\u2502\u2524\u2116\xa7\u2557\u255d\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ascii8bit:"ascii",usascii:"ascii",ansix34:"ascii",ansix341968:"ascii",ansix341986:"ascii",csascii:"ascii",cp367:"ascii",ibm367:"ascii",isoir6:"ascii",iso646us:"ascii",iso646irv:"ascii",us:"ascii",latin1:"iso88591",latin2:"iso88592",latin3:"iso88593",latin4:"iso88594",latin5:"iso88599",latin6:"iso885910",latin7:"iso885913",latin8:"iso885914",latin9:"iso885915",latin10:"iso885916",csisolatin1:"iso88591",csisolatin2:"iso88592",csisolatin3:"iso88593",csisolatin4:"iso88594",csisolatincyrillic:"iso88595",csisolatinarabic:"iso88596",csisolatingreek:"iso88597",csisolatinhebrew:"iso88598",csisolatin5:"iso88599",csisolatin6:"iso885910",l1:"iso88591",l2:"iso88592",l3:"iso88593",l4:"iso88594",l5:"iso88599",l6:"iso885910",l7:"iso885913",l8:"iso885914",l9:"iso885915",l10:"iso885916",isoir14:"iso646jp",isoir57:"iso646cn",isoir100:"iso88591",isoir101:"iso88592",isoir109:"iso88593",isoir110:"iso88594",isoir144:"iso88595",isoir127:"iso88596",isoir126:"iso88597",isoir138:"iso88598",isoir148:"iso88599",isoir157:"iso885910",isoir166:"tis620",isoir179:"iso885913",isoir199:"iso885914",isoir203:"iso885915",isoir226:"iso885916",cp819:"iso88591",ibm819:"iso88591",cyrillic:"iso88595",arabic:"iso88596",arabic8:"iso88596",ecma114:"iso88596",asmo708:"iso88596",greek:"iso88597",greek8:"iso88597",ecma118:"iso88597",elot928:"iso88597",hebrew:"iso88598",hebrew8:"iso88598",turkish:"iso88599",turkish8:"iso88599",thai:"iso885911",thai8:"iso885911",celtic:"iso885914",celtic8:"iso885914",isoceltic:"iso885914",tis6200:"tis620",tis62025291:"tis620",tis62025330:"tis620",10000:"macroman",10006:"macgreek",10007:"maccyrillic",10079:"maciceland",10081:"macturkish",cspc8codepage437:"cp437",cspc775baltic:"cp775",cspc850multilingual:"cp850",cspcp852:"cp852",cspc862latinhebrew:"cp862",cpgr:"cp869",msee:"cp1250",mscyrl:"cp1251",msansi:"cp1252",msgreek:"cp1253",msturk:"cp1254",mshebr:"cp1255",msarab:"cp1256",winbaltrim:"cp1257",cp20866:"koi8r",20866:"koi8r",ibm878:"koi8r",cskoi8r:"koi8r",cp21866:"koi8u",21866:"koi8u",ibm1168:"koi8u",strk10482002:"rk1048",tcvn5712:"tcvn",tcvn57121:"tcvn",gb198880:"iso646cn",cn:"iso646cn",csiso14jisc6220ro:"iso646jp",jisc62201969ro:"iso646jp",jp:"iso646jp",cshproman8:"hproman8",r8:"hproman8",roman8:"hproman8",xroman8:"hproman8",ibm1051:"hproman8",mac:"macintosh",csmacintosh:"macintosh"}},Phjn:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("psW0");function i(e,t){return Object(r.a)(e,t,1)}},Q2Sk:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){return function(e,t,n){this.nodes=e,this.viewRef=t,this.componentRef=n}}()},QRwJ:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("G5J1"),i=n("67Y/"),o=n("+3se"),s=n("Vx+w"),a=(n("jGGy"),n("+NEN"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getRadios=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}]}).pipe(Object(i.a)(function(e){return e.result[1].values}))},e.prototype.getVaps=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"ap"}}],[this.authService.getSid(),"uci","get",{config:"radius"}],[this.authService.getSid(),"uci","get",{config:"vlan",type:"vlan"}],[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}],[this.authService.getSid(),"uci","get",{config:"wireless",section:"son"}]]}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e.prototype.save=function(e,t,n,i){var a=e.device,u=[],c=[],l=[],h=this.authService.getSid(),f=-1!==a.indexOf("+"),d=0;if(delete e.encryptionName,delete e.deviceName,e.mode="ap",e.wds="1",Object(o.g)(e.maxassoc)&&(e.maxassoc=String(e.maxassoc)),e.new&&null===e.maxassoc&&delete e.maxassoc,"wpa2"===e.encryption||e.new||(delete e.dynamicVLAN,delete e.vlan_tagged_interface,delete e.vlan_bridge,delete e.vlan_naming),e.names&&!f?(e.devices[0]===a?(e.new||l.push(e.names[1]),e[".name"]=e.names[0],e.device=e.devices[0]):e.devices[1]===a&&(e.new||l.push(e.names[0]),e[".name"]=e.names[1],e.device=e.devices[1]),delete e.names,delete e.devices):!e.names&&f&&(e.names=[e[".name"],":"+ ++d],e.devices="radio0"===a?["radio0","radio1"]:["radio1","radio0"]),(e.dynamicVLAN||"lan"!==e.network)&&(e.ieee80211r=0),e.names){var p=Object(o.d)(e);p[".name"]=e.names[1],p.device=e.devices[1],e[".name"]=e.names[0],e.device=e.devices[0],e.ieee80211w="1",p.ieee80211w="1",!0===e.hasMaxassoc&&null===e.maxassoc&&(delete e.maxassoc,delete p.maxassoc,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],option:"maxassoc"}]),c.push([h,"uci","delete",{config:"wireless",section:p[".name"],option:"maxassoc"}])),"none"===e.encryption&&e.maxassoc>127&&(2.4==s.a.wireless.devices[e.device].frequency?e.maxassoc=127:p.maxassoc=127),"none"!==e.encryption&&e.maxassoc>123&&(2.4==s.a.wireless.devices[e.device].frequency?e.maxassoc=123:p.maxassoc=123),e.dynamicVLAN?("lan"===e.network?(e.dynamic_vlan="2",p.dynamic_vlan="2",delete e.network,delete p.network,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["network"]}]),c.push([h,"uci","delete",{config:"wireless",section:p[".name"],options:["network"]}])):(e.dynamic_vlan="1",p.dynamic_vlan="1"),e.vlan_tagged_interface=Object.keys(s.a.network.interfaces)[0],e.vlan_bridge="br-vlan",e.vlan_naming="1",p.vlan_tagged_interface=Object.keys(s.a.network.interfaces)[0],p.vlan_bridge="br-vlan",p.vlan_naming="1"):e.dynamicVLAN||e.new||(delete e.vlan_tagged_interface,delete e.vlan_bridge,delete e.vlan_naming,delete e.dynamic_vlan,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["vlan_tagged_interface","vlan_bridge","vlan_naming","dynamic_vlan"]}]),delete p.vlan_tagged_interface,delete p.vlan_bridge,delete p.vlan_naming,delete p.dynamic_vlan,c.push([h,"uci","delete",{config:"wireless",section:p[".name"],options:["vlan_tagged_interface","vlan_bridge","vlan_naming","dynamic_vlan"]}])),"none"!=e.encryption&&"wpa2"!=e.encryption||e.new||(delete e.key,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],option:"key"}]),delete p.key,c.push([h,"uci","delete",{config:"wireless",section:p[".name"],option:"key"}])),"wpa2"===e.encryption||e.new||(delete e.auth_server,delete e.auth_port,delete e.auth_secret,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["auth_server","auth_port","auth_secret"]}]),delete p.auth_server,delete p.auth_port,delete p.auth_secret,c.push([h,"uci","delete",{config:"wireless",section:p[".name"],options:["auth_server","auth_port","auth_secret"]}]),1!=t||e.new||(delete e.acct_server,delete e.acct_port,delete e.acct_secret,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["acct_server","acct_port","acct_secret"]}]),delete p.acct_server,delete p.acct_port,delete p.acct_secret,c.push([h,"uci","delete",{config:"wireless",section:p[".name"],options:["acct_server","acct_port","acct_secret"]}]))),(("none"==e.encryption||"1"==e.hidden)&&!e.new&&Object(o.g)(e.wps_config)||e.remove_wps_config)&&(delete p.wps_config,delete e.ss,delete p.remove_wps_config,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],option:"wps_config"}]),delete e.wps_config,c.push([h,"uci","delete",{config:"wireless",section:p[".name"],option:"wps_config"}])),delete e.devices,delete e.names,delete e.dynamicVLAN,delete e.hasMaxassoc,delete p.devices,delete p.names,delete p.dynamicVLAN,delete p.hasMaxassoc,u.push(e,p)}else!0===e.hasMaxassoc&&null===e.maxassoc&&(delete e.maxassoc,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],option:"maxassoc"}])),"none"!=e.encryption&&"wpa2"!=e.encryption||e.new||(delete e.key,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],option:"key"}])),"wpa2"===e.encryption||e.new||(delete e.auth_server,delete e.auth_port,delete e.auth_secret,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["auth_server","auth_port","auth_secret"]}]),1==t&&(delete e.acct_server,delete e.acct_port,delete e.acct_secret,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["acct_server","acct_port","acct_secret"]}]))),e.dynamicVLAN?("lan"===e.network?(e.dynamic_vlan="2",delete e.network,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["network"]}])):e.dynamic_vlan="1",e.vlan_tagged_interface=Object.keys(s.a.network.interfaces)[0],e.vlan_bridge="br-vlan",e.vlan_naming="1"):e.dynamicVLAN||e.new||(delete e.vlan_tagged_interface,delete e.vlan_bridge,delete e.vlan_naming,delete e.dynamic_vlan,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],options:["vlan_tagged_interface","vlan_bridge","vlan_naming","dynamic_vlan"]}])),e.ieee80211w="1",delete e.dynamicVLAN,delete e.hasMaxassoc,(("none"==e.encryption||"1"==e.hidden)&&!e.new&&Object(o.g)(e.wps_config)||e.remove_wps_config)&&(delete e.wps_config,delete e.remove_wps_config,c.push([h,"uci","delete",{config:"wireless",section:e[".name"],option:"wps_config"}])),u.push(e);return u.forEach(function(t){f=-1!==t.device.indexOf("+");var r=-1!==t[".name"].indexOf(":"),o=t.new;delete t.new,"radio0"==t.device?t.device=n:"radio1"==t.device&&(t.device=i),o||!e.names&&f?(delete t[".name"],c.push([h,"uci","add",{config:"wireless",type:"wifi-iface",values:t}])):r?(delete t[".name"],c.push([h,"uci","add",{config:"wireless",type:"wifi-iface",values:t}])):c.push([h,"uci","set",{config:"wireless",section:t[".name"],values:t}])}),l.forEach(function(e){c.push([h,"uci","delete",{config:"wireless",section:e}])}),0===c.length?Object(r.b)():(c.push([h,"uci","commit",{config:"wireless"}]),this.ubusService.call({data:c}))},e.prototype.remove=function(e){var t=[],n=this.authService.getSid(),r=[],i=e[".name"].split("+");return e.new||i.forEach(function(e){t.push(e)}),t.forEach(function(e){r.push([n,"uci","delete",{config:"wireless",section:e}])}),r.push([n,"uci","commit",{config:"wireless"}]),this.ubusService.call({data:r})},e.prototype.checkCloneStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.wps","clone",{}]}).pipe(Object(i.a)(function(e){return e.result[1].status}))},e.prototype.getCloneStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","state",{config:"wireless",section:"wps_clone"}]}).pipe(Object(i.a)(function(e){return e.result[1].values}))},e}())},Qgas:function(e,t,n){"use strict";var r=n("mrSG"),i=n("FFOo");function o(e,t){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new s(e,t,n))}}var s=function(){function e(e,t,n){void 0===n&&(n=!1),this.accumulator=e,this.seed=t,this.hasSeed=n}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.accumulator,this.seed,this.hasSeed))},e}(),a=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.c(t,e),Object.defineProperty(t.prototype,"seed",{get:function(){return this._seed},set:function(e){this.hasSeed=!0,this._seed=e},enumerable:!0,configurable:!0}),t.prototype._next=function(e){if(this.hasSeed)return this._tryNext(e);this.seed=e,this.destination.next(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.accumulator(this.seed,e,n)}catch(r){this.destination.error(r)}this.seed=t,this.destination.next(t)},t}(i.a),u=n("AxiF"),c=n("HJBe"),l=n("y3By");function h(e,t){return arguments.length>=2?function(n){return Object(l.a)(o(e,t),Object(u.a)(1),Object(c.a)(t))(n)}:function(t){return Object(l.a)(o(function(t,n,r){return e(t,n,r+1)}),Object(u.a)(1))(t)}}n.d(t,"a",function(){return h})},QpuX:function(e,t,n){e.exports=n("+qE3").EventEmitter},"Qtq/":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("Vx+w"),i=(n("jGGy"),n("Obbf"),n("t2rx"),n("+3se")),o=(n("dcxs"),n("Sxbm"),Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}),s=function(){function e(e,t,n,o,s){this.managementService=e,this.notification=t,this.isRetailService=n,this.pageLoadingService=o,this.authService=s,this.withScheme=Object(i.e)(r.a,"button.leds.schemes"),this.pageLoadingService.register(["buttonsViewInit","getButtons"])}return e.prototype.ngOnInit=function(){this.getButtons()},e.prototype.ngAfterViewInit=function(){this.pageLoadingService.ready("buttonsViewInit")},e.prototype.getButtons=function(){var e=this;this.managementService.getButtons().subscribe(function(t){e.pageLoadingService.ready("getButtons"),e.buttons=Object.values(t).map(function(e){return o({},e)}),e.isRetailService.isDeviceLicenseRetail()&&(e.buttons=e.buttons.filter(function(e){return"button_reset"!==e[".name"]})),e.buttons.forEach(function(n){switch(n.disabled=parseInt(t[n[".name"]].disabled,10)||0,n.name){case"WiFi button":n.label=Object(i.b)("WiFi button"),n.popoverWarning="";break;case"dLAN button":n.label=Object(i.b)("Powerline button"),n.popoverWarning="";break;case"Reset button":n.label=Object(i.b)("Reset/Restart button"),n.popoverWarning=!!n.disabled||"";break;default:n.label=Object(i.b)("unknown button")+" '"+n.name+"'",n.popoverWarning=""}e.fakeButtons=e.buttons.map(function(e){return o({},e)})})})},e.prototype.btnCheckClick=function(e){this.markAsDirty();for(var t=0;t<this.buttons.length;t++)"Reset button"===e.name&&!0===e.popoverWarning?(e.popoverWarning="",this.click=!0):"Reset button"!==e.name||e.popoverWarning||(e.popoverWarning=!0,this.click=!0)},e.prototype.save=function(){var e=this;this.managementService.getButtons().subscribe(function(t){var n=[];e.buttons.forEach(function(r){r.disabled!=parseInt(t[r[".name"]].disabled,10)&&n.push([e.authService.getSid(),"uci","set",{config:"system",section:r[".name"],values:{disabled:r.disabled}}])}),n.length&&(n.push([e.authService.getSid(),"uci","commit",{config:"system"}]),e.managementService.save(n).subscribe(function(){e.notification.success(Object(i.b)("You have successfully changed the configuration for your device's buttons.")),e.fakeButtons=Object(i.d)(e.buttons),e.markAsPristine()},function(e){return console.log(e)}))})},e.prototype.cancel=function(){this.buttons=this.fakeButtons.map(function(e){return o({},e)}),this.markAsPristine()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}()},RYmd:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("K9Ia"),i=n("ny24"),o=n("Vx+w"),s=(n("yeMH"),n("Obbf"),n("UVPe"),n("+3se")),a=(n("+I7i"),function(){function e(e,t,n,i){this.ipService=e,this.router=t,this.notification=n,this.spinner=i,this.ngUnsubscribe=new r.a,this.netmaskPattern=/^(([1-9]|[12][0-9]|3[012])|((128|192|224|240|248|252|254)\.0\.0\.0)|(255\.(((0|128|192|224|240|248|252|254)\.0\.0)|(255\.(((0|128|192|224|240|248|252|254)\.0)|255\.(0|128|192|224|240|248|252|254))))))$/,this.networkName="lan",this.network={},this.step="init",this.netmasks=["0.0.0.0","128.0.0.0","192.0.0.0","224.0.0.0","240.0.0.0","248.0.0.0","252.0.0.0","254.0.0.0","255.0.0.0","255.128.0.0","255.192.0.0","255.224.0.0","255.240.0.0","255.248.0.0","255.252.0.0","255.254.0.0","255.255.0.0","255.255.128.0","255.255.192.0","255.255.224.0","255.255.240.0","255.255.248.0","255.255.252.0","255.255.254.0","255.255.255.0","255.255.255.128","255.255.255.192","255.255.255.224","255.255.255.240","255.255.255.248","255.255.255.252"],this.hasDhcpServer=Object(s.g)(o.a.network.dhcpServer)&&o.a.network.dhcpServer,this.dhcp_server={}}return e.prototype.ngOnInit=function(){this.getVlanDhcp()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.getVlanDhcp=function(){var e=this;this.dhcp_server.mode="off",this.dhcp_server.start_address="0.0.0.0",this.dhcp_server.end_address="0.0.0.0",this.ipService.getVlanDhcp(this.hasDhcpServer).pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){var n,r=t[0].interface,i=t[1].values||[];for(var o in i)if(i.hasOwnProperty(o)&&"1"===i[o].management){e.networkName=o;break}if(n=r.find(function(t){return t.interface==e.networkName}),e.lan6=r.find(function(e){return"lan6"==e.interface}),e.ipv6GlobalAddr=!(!e.lan6.hasOwnProperty("ipv6-address")||!e.lan6["ipv6-address"].length),null!==n){for(var a in n.hasOwnProperty("ipv4-address")?(e.network.ipaddr=n["ipv4-address"][0].address,e.network.netmask=n["ipv4-address"][0].hasOwnProperty("mask")?e.netmasks[n["ipv4-address"][0].mask]:"128.0.0.0"):(e.network.ipaddr="0.0.0.0",e.network.netmask="128.0.0.0"),"static"==n.proto?(e.old_ip=e.network.ipaddr,e.network.proto="static"):(e.network.proto="dhcp",e.old_ip="dhcp"),e.network.netmask=e.netmasks[n["ipv4-address"][0].mask],n.route)if(n.route.hasOwnProperty(a)){var u=n.route[a];if(u.target=0===Number(u.mask)){e.network.gateway=u.nexthop;break}}if(e.network.dns=n["dns-server"][0],e.hasDhcpServer){var c=t[2].values;if(c.hasOwnProperty(e.network)){c[e.network].hasOwnProperty("ignore")?0==c[e.network].ignore&&(e.dhcp_server.mode="on"):e.dhcp_server.mode="on";var l=100;c[e.network].hasOwnProperty("start")&&(l=Number(c[e.network].start));var h=150;c[e.network].hasOwnProperty("limit")&&(h=Number(c[e.network].limit)),e.dhcp_server.start_address=e.ipService.OffsetToIP(e.network.ipaddr,e.network.netmask,l),e.dhcp_server.end_address=e.ipService.OffsetToIP(e.network.ipaddr,e.network.netmask,l+h),e.dhcp_server.leasetime="12h",c[e.network].hasOwnProperty("leasetime")&&(e.dhcp_server.leasetime=c[e.network].leasetime)}}e.spinner.hide()}else e.notification.error(Object(s.b)("Cannot retrieve current network information."))})},e.prototype.save=function(){var e=this;this.ipService.save(this.network,this.hasDhcpServer,this.dhcp_server,this.networkName).subscribe(function(){if(e.step="wait","dhcp"==e.network.proto||e.old_ip===e.network.ipaddr)e.waitPingComponent.wait("lan.ipv4",o.a.lan.ipv4.restart.waitPing,function(){e.notification.success(Object(s.b)("IPv4 configuration successfully updated.")),e.step="init",e.cleanupForm()});else{var t=Object(s.d)(o.a.lan.ipv4.restart.waitPing);t.no_ping=!0,e.waitPingComponent.wait("lan.ipv4",t,function(){e.new_uri="https://"+e.network.ipaddr+"/#"+e.router.url,e.notification.success(Object(s.b)("IPv4 configuration successfully updated.")),e.step="success",e.cleanupForm()})}})},e.prototype.cleanupForm=function(){this.getVlanDhcp(),this.delos.form.markAsPristine()},e.prototype.markAsDirty=function(e){e.control.markAsDirty()},e}())},RZQe:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getVlans=function(e,t){var n=[[this.authService.getSid(),"uci","get",{config:"vlan",type:"vlan"}],[this.authService.getSid(),"uci","get",{config:"network"}],[this.authService.getSid(),"uci","get",{config:"firewall",type:"zone"}]];return e&&n.push([this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface"}]),t&&n.push([this.authService.getSid(),"uci","get",{config:"plc",type:"plc"}]),this.ubusService.call({data:n}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e}())},RoFp:function(e,t,n){"use strict";var r=n("lm0R");function i(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this;return this._readableState&&this._readableState.destroyed||this._writableState&&this._writableState.destroyed?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||r.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?(r.nextTick(i,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},S1nX:function(e,t,n){"use strict";var r=n("mrSG"),i=n("K9Ia"),o=n("6blF"),s=n("FFOo"),a=n("pugT");function u(){return function(e){return e.lift(new c(e))}}var c=function(){function e(e){this.connectable=e}return e.prototype.call=function(e,t){var n=this.connectable;n._refCount++;var r=new l(e,n),i=t.subscribe(r);return r.closed||(r.connection=n.connect()),i},e}(),l=function(e){function t(t,n){var r=e.call(this,t)||this;return r.connectable=n,r}return r.c(t,e),t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._refCount;if(t<=0)this.connection=null;else if(e._refCount=t-1,t>1)this.connection=null;else{var n=this.connection,r=e._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},t}(s.a),h=function(e){function t(t,n){var r=e.call(this)||this;return r.source=t,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.c(t,e),t.prototype._subscribe=function(e){return this.getSubject().subscribe(e)},t.prototype.getSubject=function(){var e=this._subject;return e&&!e.isStopped||(this._subject=this.subjectFactory()),this._subject},t.prototype.connect=function(){var e=this._connection;return e||(this._isComplete=!1,(e=this._connection=new a.a).add(this.source.subscribe(new d(this.getSubject(),this))),e.closed?(this._connection=null,e=a.a.EMPTY):this._connection=e),e},t.prototype.refCount=function(){return u()(this)},t}(o.a).prototype,f={operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:h._subscribe},_isComplete:{value:h._isComplete,writable:!0},getSubject:{value:h.getSubject},connect:{value:h.connect},refCount:{value:h.refCount}},d=function(e){function t(t,n){var r=e.call(this,t)||this;return r.connectable=n,r}return r.c(t,e),t.prototype._error=function(t){this._unsubscribe(),e.prototype._error.call(this,t)},t.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),e.prototype._complete.call(this)},t.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0,e._subject=null,e._connection=null,t&&t.unsubscribe()}},t}(i.b);function p(){return new i.a}function g(){return function(e){return u()((t=p,function(e){var n;n="function"==typeof t?t:function(){return t};var r=Object.create(e,f);return r.source=e,r.subjectFactory=n,r})(e));var t}}n.d(t,"a",function(){return g})},S5XQ:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("DKTb"),i=function(e){return function(t){return e.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,r.a),t}}},S7LP:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("CcnG"),i=n("q0RN"),o=function(){function e(){}return e.prototype.position=function(e){var t=e.element,n=e.target,r=e.attachment,o=e.appendToBody;Object(i.a)(s(n),s(t),r,o)},e}();function s(e){return"string"==typeof e?document.querySelector(e):e instanceof r.k?e.nativeElement:e}},SYHD:function(e){e.exports=[["0","\0",127],["8ea1","\uff61",62],["a1a1","\u3000\u3001\u3002\uff0c\uff0e\u30fb\uff1a\uff1b\uff1f\uff01\u309b\u309c\xb4\uff40\xa8\uff3e\uffe3\uff3f\u30fd\u30fe\u309d\u309e\u3003\u4edd\u3005\u3006\u3007\u30fc\u2015\u2010\uff0f\uff3c\uff5e\u2225\uff5c\u2026\u2025\u2018\u2019\u201c\u201d\uff08\uff09\u3014\u3015\uff3b\uff3d\uff5b\uff5d\u3008",9,"\uff0b\uff0d\xb1\xd7\xf7\uff1d\u2260\uff1c\uff1e\u2266\u2267\u221e\u2234\u2642\u2640\xb0\u2032\u2033\u2103\uffe5\uff04\uffe0\uffe1\uff05\uff03\uff06\uff0a\uff20\xa7\u2606\u2605\u25cb\u25cf\u25ce\u25c7"],["a2a1","\u25c6\u25a1\u25a0\u25b3\u25b2\u25bd\u25bc\u203b\u3012\u2192\u2190\u2191\u2193\u3013"],["a2ba","\u2208\u220b\u2286\u2287\u2282\u2283\u222a\u2229"],["a2ca","\u2227\u2228\uffe2\u21d2\u21d4\u2200\u2203"],["a2dc","\u2220\u22a5\u2312\u2202\u2207\u2261\u2252\u226a\u226b\u221a\u223d\u221d\u2235\u222b\u222c"],["a2f2","\u212b\u2030\u266f\u266d\u266a\u2020\u2021\xb6"],["a2fe","\u25ef"],["a3b0","\uff10",9],["a3c1","\uff21",25],["a3e1","\uff41",25],["a4a1","\u3041",82],["a5a1","\u30a1",85],["a6a1","\u0391",16,"\u03a3",6],["a6c1","\u03b1",16,"\u03c3",6],["a7a1","\u0410",5,"\u0401\u0416",25],["a7d1","\u0430",5,"\u0451\u0436",25],["a8a1","\u2500\u2502\u250c\u2510\u2518\u2514\u251c\u252c\u2524\u2534\u253c\u2501\u2503\u250f\u2513\u251b\u2517\u2523\u2533\u252b\u253b\u254b\u2520\u252f\u2528\u2537\u253f\u251d\u2530\u2525\u2538\u2542"],["ada1","\u2460",19,"\u2160",9],["adc0","\u3349\u3314\u3322\u334d\u3318\u3327\u3303\u3336\u3351\u3357\u330d\u3326\u3323\u332b\u334a\u333b\u339c\u339d\u339e\u338e\u338f\u33c4\u33a1"],["addf","\u337b\u301d\u301f\u2116\u33cd\u2121\u32a4",4,"\u3231\u3232\u3239\u337e\u337d\u337c\u2252\u2261\u222b\u222e\u2211\u221a\u22a5\u2220\u221f\u22bf\u2235\u2229\u222a"],["b0a1","\u4e9c\u5516\u5a03\u963f\u54c0\u611b\u6328\u59f6\u9022\u8475\u831c\u7a50\u60aa\u63e1\u6e25\u65ed\u8466\u82a6\u9bf5\u6893\u5727\u65a1\u6271\u5b9b\u59d0\u867b\u98f4\u7d62\u7dbe\u9b8e\u6216\u7c9f\u88b7\u5b89\u5eb5\u6309\u6697\u6848\u95c7\u978d\u674f\u4ee5\u4f0a\u4f4d\u4f9d\u5049\u56f2\u5937\u59d4\u5a01\u5c09\u60df\u610f\u6170\u6613\u6905\u70ba\u754f\u7570\u79fb\u7dad\u7def\u80c3\u840e\u8863\u8b02\u9055\u907a\u533b\u4e95\u4ea5\u57df\u80b2\u90c1\u78ef\u4e00\u58f1\u6ea2\u9038\u7a32\u8328\u828b\u9c2f\u5141\u5370\u54bd\u54e1\u56e0\u59fb\u5f15\u98f2\u6deb\u80e4\u852d"],["b1a1","\u9662\u9670\u96a0\u97fb\u540b\u53f3\u5b87\u70cf\u7fbd\u8fc2\u96e8\u536f\u9d5c\u7aba\u4e11\u7893\u81fc\u6e26\u5618\u5504\u6b1d\u851a\u9c3b\u59e5\u53a9\u6d66\u74dc\u958f\u5642\u4e91\u904b\u96f2\u834f\u990c\u53e1\u55b6\u5b30\u5f71\u6620\u66f3\u6804\u6c38\u6cf3\u6d29\u745b\u76c8\u7a4e\u9834\u82f1\u885b\u8a60\u92ed\u6db2\u75ab\u76ca\u99c5\u60a6\u8b01\u8d8a\u95b2\u698e\u53ad\u5186\u5712\u5830\u5944\u5bb4\u5ef6\u6028\u63a9\u63f4\u6cbf\u6f14\u708e\u7114\u7159\u71d5\u733f\u7e01\u8276\u82d1\u8597\u9060\u925b\u9d1b\u5869\u65bc\u6c5a\u7525\u51f9\u592e\u5965\u5f80\u5fdc"],["b2a1","\u62bc\u65fa\u6a2a\u6b27\u6bb4\u738b\u7fc1\u8956\u9d2c\u9d0e\u9ec4\u5ca1\u6c96\u837b\u5104\u5c4b\u61b6\u81c6\u6876\u7261\u4e59\u4ffa\u5378\u6069\u6e29\u7a4f\u97f3\u4e0b\u5316\u4eee\u4f55\u4f3d\u4fa1\u4f73\u52a0\u53ef\u5609\u590f\u5ac1\u5bb6\u5be1\u79d1\u6687\u679c\u67b6\u6b4c\u6cb3\u706b\u73c2\u798d\u79be\u7a3c\u7b87\u82b1\u82db\u8304\u8377\u83ef\u83d3\u8766\u8ab2\u5629\u8ca8\u8fe6\u904e\u971e\u868a\u4fc4\u5ce8\u6211\u7259\u753b\u81e5\u82bd\u86fe\u8cc0\u96c5\u9913\u99d5\u4ecb\u4f1a\u89e3\u56de\u584a\u58ca\u5efb\u5feb\u602a\u6094\u6062\u61d0\u6212\u62d0\u6539"],["b3a1","\u9b41\u6666\u68b0\u6d77\u7070\u754c\u7686\u7d75\u82a5\u87f9\u958b\u968e\u8c9d\u51f1\u52be\u5916\u54b3\u5bb3\u5d16\u6168\u6982\u6daf\u788d\u84cb\u8857\u8a72\u93a7\u9ab8\u6d6c\u99a8\u86d9\u57a3\u67ff\u86ce\u920e\u5283\u5687\u5404\u5ed3\u62e1\u64b9\u683c\u6838\u6bbb\u7372\u78ba\u7a6b\u899a\u89d2\u8d6b\u8f03\u90ed\u95a3\u9694\u9769\u5b66\u5cb3\u697d\u984d\u984e\u639b\u7b20\u6a2b\u6a7f\u68b6\u9c0d\u6f5f\u5272\u559d\u6070\u62ec\u6d3b\u6e07\u6ed1\u845b\u8910\u8f44\u4e14\u9c39\u53f6\u691b\u6a3a\u9784\u682a\u515c\u7ac3\u84b2\u91dc\u938c\u565b\u9d28\u6822\u8305\u8431"],["b4a1","\u7ca5\u5208\u82c5\u74e6\u4e7e\u4f83\u51a0\u5bd2\u520a\u52d8\u52e7\u5dfb\u559a\u582a\u59e6\u5b8c\u5b98\u5bdb\u5e72\u5e79\u60a3\u611f\u6163\u61be\u63db\u6562\u67d1\u6853\u68fa\u6b3e\u6b53\u6c57\u6f22\u6f97\u6f45\u74b0\u7518\u76e3\u770b\u7aff\u7ba1\u7c21\u7de9\u7f36\u7ff0\u809d\u8266\u839e\u89b3\u8acc\u8cab\u9084\u9451\u9593\u9591\u95a2\u9665\u97d3\u9928\u8218\u4e38\u542b\u5cb8\u5dcc\u73a9\u764c\u773c\u5ca9\u7feb\u8d0b\u96c1\u9811\u9854\u9858\u4f01\u4f0e\u5371\u559c\u5668\u57fa\u5947\u5b09\u5bc4\u5c90\u5e0c\u5e7e\u5fcc\u63ee\u673a\u65d7\u65e2\u671f\u68cb\u68c4"],["b5a1","\u6a5f\u5e30\u6bc5\u6c17\u6c7d\u757f\u7948\u5b63\u7a00\u7d00\u5fbd\u898f\u8a18\u8cb4\u8d77\u8ecc\u8f1d\u98e2\u9a0e\u9b3c\u4e80\u507d\u5100\u5993\u5b9c\u622f\u6280\u64ec\u6b3a\u72a0\u7591\u7947\u7fa9\u87fb\u8abc\u8b70\u63ac\u83ca\u97a0\u5409\u5403\u55ab\u6854\u6a58\u8a70\u7827\u6775\u9ecd\u5374\u5ba2\u811a\u8650\u9006\u4e18\u4e45\u4ec7\u4f11\u53ca\u5438\u5bae\u5f13\u6025\u6551\u673d\u6c42\u6c72\u6ce3\u7078\u7403\u7a76\u7aae\u7b08\u7d1a\u7cfe\u7d66\u65e7\u725b\u53bb\u5c45\u5de8\u62d2\u62e0\u6319\u6e20\u865a\u8a31\u8ddd\u92f8\u6f01\u79a6\u9b5a\u4ea8\u4eab\u4eac"],["b6a1","\u4f9b\u4fa0\u50d1\u5147\u7af6\u5171\u51f6\u5354\u5321\u537f\u53eb\u55ac\u5883\u5ce1\u5f37\u5f4a\u602f\u6050\u606d\u631f\u6559\u6a4b\u6cc1\u72c2\u72ed\u77ef\u80f8\u8105\u8208\u854e\u90f7\u93e1\u97ff\u9957\u9a5a\u4ef0\u51dd\u5c2d\u6681\u696d\u5c40\u66f2\u6975\u7389\u6850\u7c81\u50c5\u52e4\u5747\u5dfe\u9326\u65a4\u6b23\u6b3d\u7434\u7981\u79bd\u7b4b\u7dca\u82b9\u83cc\u887f\u895f\u8b39\u8fd1\u91d1\u541f\u9280\u4e5d\u5036\u53e5\u533a\u72d7\u7396\u77e9\u82e6\u8eaf\u99c6\u99c8\u99d2\u5177\u611a\u865e\u55b0\u7a7a\u5076\u5bd3\u9047\u9685\u4e32\u6adb\u91e7\u5c51\u5c48"],["b7a1","\u6398\u7a9f\u6c93\u9774\u8f61\u7aaa\u718a\u9688\u7c82\u6817\u7e70\u6851\u936c\u52f2\u541b\u85ab\u8a13\u7fa4\u8ecd\u90e1\u5366\u8888\u7941\u4fc2\u50be\u5211\u5144\u5553\u572d\u73ea\u578b\u5951\u5f62\u5f84\u6075\u6176\u6167\u61a9\u63b2\u643a\u656c\u666f\u6842\u6e13\u7566\u7a3d\u7cfb\u7d4c\u7d99\u7e4b\u7f6b\u830e\u834a\u86cd\u8a08\u8a63\u8b66\u8efd\u981a\u9d8f\u82b8\u8fce\u9be8\u5287\u621f\u6483\u6fc0\u9699\u6841\u5091\u6b20\u6c7a\u6f54\u7a74\u7d50\u8840\u8a23\u6708\u4ef6\u5039\u5026\u5065\u517c\u5238\u5263\u55a7\u570f\u5805\u5acc\u5efa\u61b2\u61f8\u62f3\u6372"],["b8a1","\u691c\u6a29\u727d\u72ac\u732e\u7814\u786f\u7d79\u770c\u80a9\u898b\u8b19\u8ce2\u8ed2\u9063\u9375\u967a\u9855\u9a13\u9e78\u5143\u539f\u53b3\u5e7b\u5f26\u6e1b\u6e90\u7384\u73fe\u7d43\u8237\u8a00\u8afa\u9650\u4e4e\u500b\u53e4\u547c\u56fa\u59d1\u5b64\u5df1\u5eab\u5f27\u6238\u6545\u67af\u6e56\u72d0\u7cca\u88b4\u80a1\u80e1\u83f0\u864e\u8a87\u8de8\u9237\u96c7\u9867\u9f13\u4e94\u4e92\u4f0d\u5348\u5449\u543e\u5a2f\u5f8c\u5fa1\u609f\u68a7\u6a8e\u745a\u7881\u8a9e\u8aa4\u8b77\u9190\u4e5e\u9bc9\u4ea4\u4f7c\u4faf\u5019\u5016\u5149\u516c\u529f\u52b9\u52fe\u539a\u53e3\u5411"],["b9a1","\u540e\u5589\u5751\u57a2\u597d\u5b54\u5b5d\u5b8f\u5de5\u5de7\u5df7\u5e78\u5e83\u5e9a\u5eb7\u5f18\u6052\u614c\u6297\u62d8\u63a7\u653b\u6602\u6643\u66f4\u676d\u6821\u6897\u69cb\u6c5f\u6d2a\u6d69\u6e2f\u6e9d\u7532\u7687\u786c\u7a3f\u7ce0\u7d05\u7d18\u7d5e\u7db1\u8015\u8003\u80af\u80b1\u8154\u818f\u822a\u8352\u884c\u8861\u8b1b\u8ca2\u8cfc\u90ca\u9175\u9271\u783f\u92fc\u95a4\u964d\u9805\u9999\u9ad8\u9d3b\u525b\u52ab\u53f7\u5408\u58d5\u62f7\u6fe0\u8c6a\u8f5f\u9eb9\u514b\u523b\u544a\u56fd\u7a40\u9177\u9d60\u9ed2\u7344\u6f09\u8170\u7511\u5ffd\u60da\u9aa8\u72db\u8fbc"],["baa1","\u6b64\u9803\u4eca\u56f0\u5764\u58be\u5a5a\u6068\u61c7\u660f\u6606\u6839\u68b1\u6df7\u75d5\u7d3a\u826e\u9b42\u4e9b\u4f50\u53c9\u5506\u5d6f\u5de6\u5dee\u67fb\u6c99\u7473\u7802\u8a50\u9396\u88df\u5750\u5ea7\u632b\u50b5\u50ac\u518d\u6700\u54c9\u585e\u59bb\u5bb0\u5f69\u624d\u63a1\u683d\u6b73\u6e08\u707d\u91c7\u7280\u7815\u7826\u796d\u658e\u7d30\u83dc\u88c1\u8f09\u969b\u5264\u5728\u6750\u7f6a\u8ca1\u51b4\u5742\u962a\u583a\u698a\u80b4\u54b2\u5d0e\u57fc\u7895\u9dfa\u4f5c\u524a\u548b\u643e\u6628\u6714\u67f5\u7a84\u7b56\u7d22\u932f\u685c\u9bad\u7b39\u5319\u518a\u5237"],["bba1","\u5bdf\u62f6\u64ae\u64e6\u672d\u6bba\u85a9\u96d1\u7690\u9bd6\u634c\u9306\u9bab\u76bf\u6652\u4e09\u5098\u53c2\u5c71\u60e8\u6492\u6563\u685f\u71e6\u73ca\u7523\u7b97\u7e82\u8695\u8b83\u8cdb\u9178\u9910\u65ac\u66ab\u6b8b\u4ed5\u4ed4\u4f3a\u4f7f\u523a\u53f8\u53f2\u55e3\u56db\u58eb\u59cb\u59c9\u59ff\u5b50\u5c4d\u5e02\u5e2b\u5fd7\u601d\u6307\u652f\u5b5c\u65af\u65bd\u65e8\u679d\u6b62\u6b7b\u6c0f\u7345\u7949\u79c1\u7cf8\u7d19\u7d2b\u80a2\u8102\u81f3\u8996\u8a5e\u8a69\u8a66\u8a8c\u8aee\u8cc7\u8cdc\u96cc\u98fc\u6b6f\u4e8b\u4f3c\u4f8d\u5150\u5b57\u5bfa\u6148\u6301\u6642"],["bca1","\u6b21\u6ecb\u6cbb\u723e\u74bd\u75d4\u78c1\u793a\u800c\u8033\u81ea\u8494\u8f9e\u6c50\u9e7f\u5f0f\u8b58\u9d2b\u7afa\u8ef8\u5b8d\u96eb\u4e03\u53f1\u57f7\u5931\u5ac9\u5ba4\u6089\u6e7f\u6f06\u75be\u8cea\u5b9f\u8500\u7be0\u5072\u67f4\u829d\u5c61\u854a\u7e1e\u820e\u5199\u5c04\u6368\u8d66\u659c\u716e\u793e\u7d17\u8005\u8b1d\u8eca\u906e\u86c7\u90aa\u501f\u52fa\u5c3a\u6753\u707c\u7235\u914c\u91c8\u932b\u82e5\u5bc2\u5f31\u60f9\u4e3b\u53d6\u5b88\u624b\u6731\u6b8a\u72e9\u73e0\u7a2e\u816b\u8da3\u9152\u9996\u5112\u53d7\u546a\u5bff\u6388\u6a39\u7dac\u9700\u56da\u53ce\u5468"],["bda1","\u5b97\u5c31\u5dde\u4fee\u6101\u62fe\u6d32\u79c0\u79cb\u7d42\u7e4d\u7fd2\u81ed\u821f\u8490\u8846\u8972\u8b90\u8e74\u8f2f\u9031\u914b\u916c\u96c6\u919c\u4ec0\u4f4f\u5145\u5341\u5f93\u620e\u67d4\u6c41\u6e0b\u7363\u7e26\u91cd\u9283\u53d4\u5919\u5bbf\u6dd1\u795d\u7e2e\u7c9b\u587e\u719f\u51fa\u8853\u8ff0\u4fca\u5cfb\u6625\u77ac\u7ae3\u821c\u99ff\u51c6\u5faa\u65ec\u696f\u6b89\u6df3\u6e96\u6f64\u76fe\u7d14\u5de1\u9075\u9187\u9806\u51e6\u521d\u6240\u6691\u66d9\u6e1a\u5eb6\u7dd2\u7f72\u66f8\u85af\u85f7\u8af8\u52a9\u53d9\u5973\u5e8f\u5f90\u6055\u92e4\u9664\u50b7\u511f"],["bea1","\u52dd\u5320\u5347\u53ec\u54e8\u5546\u5531\u5617\u5968\u59be\u5a3c\u5bb5\u5c06\u5c0f\u5c11\u5c1a\u5e84\u5e8a\u5ee0\u5f70\u627f\u6284\u62db\u638c\u6377\u6607\u660c\u662d\u6676\u677e\u68a2\u6a1f\u6a35\u6cbc\u6d88\u6e09\u6e58\u713c\u7126\u7167\u75c7\u7701\u785d\u7901\u7965\u79f0\u7ae0\u7b11\u7ca7\u7d39\u8096\u83d6\u848b\u8549\u885d\u88f3\u8a1f\u8a3c\u8a54\u8a73\u8c61\u8cde\u91a4\u9266\u937e\u9418\u969c\u9798\u4e0a\u4e08\u4e1e\u4e57\u5197\u5270\u57ce\u5834\u58cc\u5b22\u5e38\u60c5\u64fe\u6761\u6756\u6d44\u72b6\u7573\u7a63\u84b8\u8b72\u91b8\u9320\u5631\u57f4\u98fe"],["bfa1","\u62ed\u690d\u6b96\u71ed\u7e54\u8077\u8272\u89e6\u98df\u8755\u8fb1\u5c3b\u4f38\u4fe1\u4fb5\u5507\u5a20\u5bdd\u5be9\u5fc3\u614e\u632f\u65b0\u664b\u68ee\u699b\u6d78\u6df1\u7533\u75b9\u771f\u795e\u79e6\u7d33\u81e3\u82af\u85aa\u89aa\u8a3a\u8eab\u8f9b\u9032\u91dd\u9707\u4eba\u4ec1\u5203\u5875\u58ec\u5c0b\u751a\u5c3d\u814e\u8a0a\u8fc5\u9663\u976d\u7b25\u8acf\u9808\u9162\u56f3\u53a8\u9017\u5439\u5782\u5e25\u63a8\u6c34\u708a\u7761\u7c8b\u7fe0\u8870\u9042\u9154\u9310\u9318\u968f\u745e\u9ac4\u5d07\u5d69\u6570\u67a2\u8da8\u96db\u636e\u6749\u6919\u83c5\u9817\u96c0\u88fe"],["c0a1","\u6f84\u647a\u5bf8\u4e16\u702c\u755d\u662f\u51c4\u5236\u52e2\u59d3\u5f81\u6027\u6210\u653f\u6574\u661f\u6674\u68f2\u6816\u6b63\u6e05\u7272\u751f\u76db\u7cbe\u8056\u58f0\u88fd\u897f\u8aa0\u8a93\u8acb\u901d\u9192\u9752\u9759\u6589\u7a0e\u8106\u96bb\u5e2d\u60dc\u621a\u65a5\u6614\u6790\u77f3\u7a4d\u7c4d\u7e3e\u810a\u8cac\u8d64\u8de1\u8e5f\u78a9\u5207\u62d9\u63a5\u6442\u6298\u8a2d\u7a83\u7bc0\u8aac\u96ea\u7d76\u820c\u8749\u4ed9\u5148\u5343\u5360\u5ba3\u5c02\u5c16\u5ddd\u6226\u6247\u64b0\u6813\u6834\u6cc9\u6d45\u6d17\u67d3\u6f5c\u714e\u717d\u65cb\u7a7f\u7bad\u7dda"],["c1a1","\u7e4a\u7fa8\u817a\u821b\u8239\u85a6\u8a6e\u8cce\u8df5\u9078\u9077\u92ad\u9291\u9583\u9bae\u524d\u5584\u6f38\u7136\u5168\u7985\u7e55\u81b3\u7cce\u564c\u5851\u5ca8\u63aa\u66fe\u66fd\u695a\u72d9\u758f\u758e\u790e\u7956\u79df\u7c97\u7d20\u7d44\u8607\u8a34\u963b\u9061\u9f20\u50e7\u5275\u53cc\u53e2\u5009\u55aa\u58ee\u594f\u723d\u5b8b\u5c64\u531d\u60e3\u60f3\u635c\u6383\u633f\u63bb\u64cd\u65e9\u66f9\u5de3\u69cd\u69fd\u6f15\u71e5\u4e89\u75e9\u76f8\u7a93\u7cdf\u7dcf\u7d9c\u8061\u8349\u8358\u846c\u84bc\u85fb\u88c5\u8d70\u9001\u906d\u9397\u971c\u9a12\u50cf\u5897\u618e"],["c2a1","\u81d3\u8535\u8d08\u9020\u4fc3\u5074\u5247\u5373\u606f\u6349\u675f\u6e2c\u8db3\u901f\u4fd7\u5c5e\u8cca\u65cf\u7d9a\u5352\u8896\u5176\u63c3\u5b58\u5b6b\u5c0a\u640d\u6751\u905c\u4ed6\u591a\u592a\u6c70\u8a51\u553e\u5815\u59a5\u60f0\u6253\u67c1\u8235\u6955\u9640\u99c4\u9a28\u4f53\u5806\u5bfe\u8010\u5cb1\u5e2f\u5f85\u6020\u614b\u6234\u66ff\u6cf0\u6ede\u80ce\u817f\u82d4\u888b\u8cb8\u9000\u902e\u968a\u9edb\u9bdb\u4ee3\u53f0\u5927\u7b2c\u918d\u984c\u9df9\u6edd\u7027\u5353\u5544\u5b85\u6258\u629e\u62d3\u6ca2\u6fef\u7422\u8a17\u9438\u6fc1\u8afe\u8338\u51e7\u86f8\u53ea"],["c3a1","\u53e9\u4f46\u9054\u8fb0\u596a\u8131\u5dfd\u7aea\u8fbf\u68da\u8c37\u72f8\u9c48\u6a3d\u8ab0\u4e39\u5358\u5606\u5766\u62c5\u63a2\u65e6\u6b4e\u6de1\u6e5b\u70ad\u77ed\u7aef\u7baa\u7dbb\u803d\u80c6\u86cb\u8a95\u935b\u56e3\u58c7\u5f3e\u65ad\u6696\u6a80\u6bb5\u7537\u8ac7\u5024\u77e5\u5730\u5f1b\u6065\u667a\u6c60\u75f4\u7a1a\u7f6e\u81f4\u8718\u9045\u99b3\u7bc9\u755c\u7af9\u7b51\u84c4\u9010\u79e9\u7a92\u8336\u5ae1\u7740\u4e2d\u4ef2\u5b99\u5fe0\u62bd\u663c\u67f1\u6ce8\u866b\u8877\u8a3b\u914e\u92f3\u99d0\u6a17\u7026\u732a\u82e7\u8457\u8caf\u4e01\u5146\u51cb\u558b\u5bf5"],["c4a1","\u5e16\u5e33\u5e81\u5f14\u5f35\u5f6b\u5fb4\u61f2\u6311\u66a2\u671d\u6f6e\u7252\u753a\u773a\u8074\u8139\u8178\u8776\u8abf\u8adc\u8d85\u8df3\u929a\u9577\u9802\u9ce5\u52c5\u6357\u76f4\u6715\u6c88\u73cd\u8cc3\u93ae\u9673\u6d25\u589c\u690e\u69cc\u8ffd\u939a\u75db\u901a\u585a\u6802\u63b4\u69fb\u4f43\u6f2c\u67d8\u8fbb\u8526\u7db4\u9354\u693f\u6f70\u576a\u58f7\u5b2c\u7d2c\u722a\u540a\u91e3\u9db4\u4ead\u4f4e\u505c\u5075\u5243\u8c9e\u5448\u5824\u5b9a\u5e1d\u5e95\u5ead\u5ef7\u5f1f\u608c\u62b5\u633a\u63d0\u68af\u6c40\u7887\u798e\u7a0b\u7de0\u8247\u8a02\u8ae6\u8e44\u9013"],["c5a1","\u90b8\u912d\u91d8\u9f0e\u6ce5\u6458\u64e2\u6575\u6ef4\u7684\u7b1b\u9069\u93d1\u6eba\u54f2\u5fb9\u64a4\u8f4d\u8fed\u9244\u5178\u586b\u5929\u5c55\u5e97\u6dfb\u7e8f\u751c\u8cbc\u8ee2\u985b\u70b9\u4f1d\u6bbf\u6fb1\u7530\u96fb\u514e\u5410\u5835\u5857\u59ac\u5c60\u5f92\u6597\u675c\u6e21\u767b\u83df\u8ced\u9014\u90fd\u934d\u7825\u783a\u52aa\u5ea6\u571f\u5974\u6012\u5012\u515a\u51ac\u51cd\u5200\u5510\u5854\u5858\u5957\u5b95\u5cf6\u5d8b\u60bc\u6295\u642d\u6771\u6843\u68bc\u68df\u76d7\u6dd8\u6e6f\u6d9b\u706f\u71c8\u5f53\u75d8\u7977\u7b49\u7b54\u7b52\u7cd6\u7d71\u5230"],["c6a1","\u8463\u8569\u85e4\u8a0e\u8b04\u8c46\u8e0f\u9003\u900f\u9419\u9676\u982d\u9a30\u95d8\u50cd\u52d5\u540c\u5802\u5c0e\u61a7\u649e\u6d1e\u77b3\u7ae5\u80f4\u8404\u9053\u9285\u5ce0\u9d07\u533f\u5f97\u5fb3\u6d9c\u7279\u7763\u79bf\u7be4\u6bd2\u72ec\u8aad\u6803\u6a61\u51f8\u7a81\u6934\u5c4a\u9cf6\u82eb\u5bc5\u9149\u701e\u5678\u5c6f\u60c7\u6566\u6c8c\u8c5a\u9041\u9813\u5451\u66c7\u920d\u5948\u90a3\u5185\u4e4d\u51ea\u8599\u8b0e\u7058\u637a\u934b\u6962\u99b4\u7e04\u7577\u5357\u6960\u8edf\u96e3\u6c5d\u4e8c\u5c3c\u5f10\u8fe9\u5302\u8cd1\u8089\u8679\u5eff\u65e5\u4e73\u5165"],["c7a1","\u5982\u5c3f\u97ee\u4efb\u598a\u5fcd\u8a8d\u6fe1\u79b0\u7962\u5be7\u8471\u732b\u71b1\u5e74\u5ff5\u637b\u649a\u71c3\u7c98\u4e43\u5efc\u4e4b\u57dc\u56a2\u60a9\u6fc3\u7d0d\u80fd\u8133\u81bf\u8fb2\u8997\u86a4\u5df4\u628a\u64ad\u8987\u6777\u6ce2\u6d3e\u7436\u7834\u5a46\u7f75\u82ad\u99ac\u4ff3\u5ec3\u62dd\u6392\u6557\u676f\u76c3\u724c\u80cc\u80ba\u8f29\u914d\u500d\u57f9\u5a92\u6885\u6973\u7164\u72fd\u8cb7\u58f2\u8ce0\u966a\u9019\u877f\u79e4\u77e7\u8429\u4f2f\u5265\u535a\u62cd\u67cf\u6cca\u767d\u7b94\u7c95\u8236\u8584\u8feb\u66dd\u6f20\u7206\u7e1b\u83ab\u99c1\u9ea6"],["c8a1","\u51fd\u7bb1\u7872\u7bb8\u8087\u7b48\u6ae8\u5e61\u808c\u7551\u7560\u516b\u9262\u6e8c\u767a\u9197\u9aea\u4f10\u7f70\u629c\u7b4f\u95a5\u9ce9\u567a\u5859\u86e4\u96bc\u4f34\u5224\u534a\u53cd\u53db\u5e06\u642c\u6591\u677f\u6c3e\u6c4e\u7248\u72af\u73ed\u7554\u7e41\u822c\u85e9\u8ca9\u7bc4\u91c6\u7169\u9812\u98ef\u633d\u6669\u756a\u76e4\u78d0\u8543\u86ee\u532a\u5351\u5426\u5983\u5e87\u5f7c\u60b2\u6249\u6279\u62ab\u6590\u6bd4\u6ccc\u75b2\u76ae\u7891\u79d8\u7dcb\u7f77\u80a5\u88ab\u8ab9\u8cbb\u907f\u975e\u98db\u6a0b\u7c38\u5099\u5c3e\u5fae\u6787\u6bd8\u7435\u7709\u7f8e"],["c9a1","\u9f3b\u67ca\u7a17\u5339\u758b\u9aed\u5f66\u819d\u83f1\u8098\u5f3c\u5fc5\u7562\u7b46\u903c\u6867\u59eb\u5a9b\u7d10\u767e\u8b2c\u4ff5\u5f6a\u6a19\u6c37\u6f02\u74e2\u7968\u8868\u8a55\u8c79\u5edf\u63cf\u75c5\u79d2\u82d7\u9328\u92f2\u849c\u86ed\u9c2d\u54c1\u5f6c\u658c\u6d5c\u7015\u8ca7\u8cd3\u983b\u654f\u74f6\u4e0d\u4ed8\u57e0\u592b\u5a66\u5bcc\u51a8\u5e03\u5e9c\u6016\u6276\u6577\u65a7\u666e\u6d6e\u7236\u7b26\u8150\u819a\u8299\u8b5c\u8ca0\u8ce6\u8d74\u961c\u9644\u4fae\u64ab\u6b66\u821e\u8461\u856a\u90e8\u5c01\u6953\u98a8\u847a\u8557\u4f0f\u526f\u5fa9\u5e45\u670d"],["caa1","\u798f\u8179\u8907\u8986\u6df5\u5f17\u6255\u6cb8\u4ecf\u7269\u9b92\u5206\u543b\u5674\u58b3\u61a4\u626e\u711a\u596e\u7c89\u7cde\u7d1b\u96f0\u6587\u805e\u4e19\u4f75\u5175\u5840\u5e63\u5e73\u5f0a\u67c4\u4e26\u853d\u9589\u965b\u7c73\u9801\u50fb\u58c1\u7656\u78a7\u5225\u77a5\u8511\u7b86\u504f\u5909\u7247\u7bc7\u7de8\u8fba\u8fd4\u904d\u4fbf\u52c9\u5a29\u5f01\u97ad\u4fdd\u8217\u92ea\u5703\u6355\u6b69\u752b\u88dc\u8f14\u7a42\u52df\u5893\u6155\u620a\u66ae\u6bcd\u7c3f\u83e9\u5023\u4ff8\u5305\u5446\u5831\u5949\u5b9d\u5cf0\u5cef\u5d29\u5e96\u62b1\u6367\u653e\u65b9\u670b"],["cba1","\u6cd5\u6ce1\u70f9\u7832\u7e2b\u80de\u82b3\u840c\u84ec\u8702\u8912\u8a2a\u8c4a\u90a6\u92d2\u98fd\u9cf3\u9d6c\u4e4f\u4ea1\u508d\u5256\u574a\u59a8\u5e3d\u5fd8\u5fd9\u623f\u66b4\u671b\u67d0\u68d2\u5192\u7d21\u80aa\u81a8\u8b00\u8c8c\u8cbf\u927e\u9632\u5420\u982c\u5317\u50d5\u535c\u58a8\u64b2\u6734\u7267\u7766\u7a46\u91e6\u52c3\u6ca1\u6b86\u5800\u5e4c\u5954\u672c\u7ffb\u51e1\u76c6\u6469\u78e8\u9b54\u9ebb\u57cb\u59b9\u6627\u679a\u6bce\u54e9\u69d9\u5e55\u819c\u6795\u9baa\u67fe\u9c52\u685d\u4ea6\u4fe3\u53c8\u62b9\u672b\u6cab\u8fc4\u4fad\u7e6d\u9ebf\u4e07\u6162\u6e80"],["cca1","\u6f2b\u8513\u5473\u672a\u9b45\u5df3\u7b95\u5cac\u5bc6\u871c\u6e4a\u84d1\u7a14\u8108\u5999\u7c8d\u6c11\u7720\u52d9\u5922\u7121\u725f\u77db\u9727\u9d61\u690b\u5a7f\u5a18\u51a5\u540d\u547d\u660e\u76df\u8ff7\u9298\u9cf4\u59ea\u725d\u6ec5\u514d\u68c9\u7dbf\u7dec\u9762\u9eba\u6478\u6a21\u8302\u5984\u5b5f\u6bdb\u731b\u76f2\u7db2\u8017\u8499\u5132\u6728\u9ed9\u76ee\u6762\u52ff\u9905\u5c24\u623b\u7c7e\u8cb0\u554f\u60b6\u7d0b\u9580\u5301\u4e5f\u51b6\u591c\u723a\u8036\u91ce\u5f25\u77e2\u5384\u5f79\u7d04\u85ac\u8a33\u8e8d\u9756\u67f3\u85ae\u9453\u6109\u6108\u6cb9\u7652"],["cda1","\u8aed\u8f38\u552f\u4f51\u512a\u52c7\u53cb\u5ba5\u5e7d\u60a0\u6182\u63d6\u6709\u67da\u6e67\u6d8c\u7336\u7337\u7531\u7950\u88d5\u8a98\u904a\u9091\u90f5\u96c4\u878d\u5915\u4e88\u4f59\u4e0e\u8a89\u8f3f\u9810\u50ad\u5e7c\u5996\u5bb9\u5eb8\u63da\u63fa\u64c1\u66dc\u694a\u69d8\u6d0b\u6eb6\u7194\u7528\u7aaf\u7f8a\u8000\u8449\u84c9\u8981\u8b21\u8e0a\u9065\u967d\u990a\u617e\u6291\u6b32\u6c83\u6d74\u7fcc\u7ffc\u6dc0\u7f85\u87ba\u88f8\u6765\u83b1\u983c\u96f7\u6d1b\u7d61\u843d\u916a\u4e71\u5375\u5d50\u6b04\u6feb\u85cd\u862d\u89a7\u5229\u540f\u5c65\u674e\u68a8\u7406\u7483"],["cea1","\u75e2\u88cf\u88e1\u91cc\u96e2\u9678\u5f8b\u7387\u7acb\u844e\u63a0\u7565\u5289\u6d41\u6e9c\u7409\u7559\u786b\u7c92\u9686\u7adc\u9f8d\u4fb6\u616e\u65c5\u865c\u4e86\u4eae\u50da\u4e21\u51cc\u5bee\u6599\u6881\u6dbc\u731f\u7642\u77ad\u7a1c\u7ce7\u826f\u8ad2\u907c\u91cf\u9675\u9818\u529b\u7dd1\u502b\u5398\u6797\u6dcb\u71d0\u7433\u81e8\u8f2a\u96a3\u9c57\u9e9f\u7460\u5841\u6d99\u7d2f\u985e\u4ee4\u4f36\u4f8b\u51b7\u52b1\u5dba\u601c\u73b2\u793c\u82d3\u9234\u96b7\u96f6\u970a\u9e97\u9f62\u66a6\u6b74\u5217\u52a3\u70c8\u88c2\u5ec9\u604b\u6190\u6f23\u7149\u7c3e\u7df4\u806f"],["cfa1","\u84ee\u9023\u932c\u5442\u9b6f\u6ad3\u7089\u8cc2\u8def\u9732\u52b4\u5a41\u5eca\u5f04\u6717\u697c\u6994\u6d6a\u6f0f\u7262\u72fc\u7bed\u8001\u807e\u874b\u90ce\u516d\u9e93\u7984\u808b\u9332\u8ad6\u502d\u548c\u8a71\u6b6a\u8cc4\u8107\u60d1\u67a0\u9df2\u4e99\u4e98\u9c10\u8a6b\u85c1\u8568\u6900\u6e7e\u7897\u8155"],["d0a1","\u5f0c\u4e10\u4e15\u4e2a\u4e31\u4e36\u4e3c\u4e3f\u4e42\u4e56\u4e58\u4e82\u4e85\u8c6b\u4e8a\u8212\u5f0d\u4e8e\u4e9e\u4e9f\u4ea0\u4ea2\u4eb0\u4eb3\u4eb6\u4ece\u4ecd\u4ec4\u4ec6\u4ec2\u4ed7\u4ede\u4eed\u4edf\u4ef7\u4f09\u4f5a\u4f30\u4f5b\u4f5d\u4f57\u4f47\u4f76\u4f88\u4f8f\u4f98\u4f7b\u4f69\u4f70\u4f91\u4f6f\u4f86\u4f96\u5118\u4fd4\u4fdf\u4fce\u4fd8\u4fdb\u4fd1\u4fda\u4fd0\u4fe4\u4fe5\u501a\u5028\u5014\u502a\u5025\u5005\u4f1c\u4ff6\u5021\u5029\u502c\u4ffe\u4fef\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505a\u5056\u506c\u5078\u5080\u509a\u5085\u50b4\u50b2"],["d1a1","\u50c9\u50ca\u50b3\u50c2\u50d6\u50de\u50e5\u50ed\u50e3\u50ee\u50f9\u50f5\u5109\u5101\u5102\u5116\u5115\u5114\u511a\u5121\u513a\u5137\u513c\u513b\u513f\u5140\u5152\u514c\u5154\u5162\u7af8\u5169\u516a\u516e\u5180\u5182\u56d8\u518c\u5189\u518f\u5191\u5193\u5195\u5196\u51a4\u51a6\u51a2\u51a9\u51aa\u51ab\u51b3\u51b1\u51b2\u51b0\u51b5\u51bd\u51c5\u51c9\u51db\u51e0\u8655\u51e9\u51ed\u51f0\u51f5\u51fe\u5204\u520b\u5214\u520e\u5227\u522a\u522e\u5233\u5239\u524f\u5244\u524b\u524c\u525e\u5254\u526a\u5274\u5269\u5273\u527f\u527d\u528d\u5294\u5292\u5271\u5288\u5291\u8fa8"],["d2a1","\u8fa7\u52ac\u52ad\u52bc\u52b5\u52c1\u52cd\u52d7\u52de\u52e3\u52e6\u98ed\u52e0\u52f3\u52f5\u52f8\u52f9\u5306\u5308\u7538\u530d\u5310\u530f\u5315\u531a\u5323\u532f\u5331\u5333\u5338\u5340\u5346\u5345\u4e17\u5349\u534d\u51d6\u535e\u5369\u536e\u5918\u537b\u5377\u5382\u5396\u53a0\u53a6\u53a5\u53ae\u53b0\u53b6\u53c3\u7c12\u96d9\u53df\u66fc\u71ee\u53ee\u53e8\u53ed\u53fa\u5401\u543d\u5440\u542c\u542d\u543c\u542e\u5436\u5429\u541d\u544e\u548f\u5475\u548e\u545f\u5471\u5477\u5470\u5492\u547b\u5480\u5476\u5484\u5490\u5486\u54c7\u54a2\u54b8\u54a5\u54ac\u54c4\u54c8\u54a8"],["d3a1","\u54ab\u54c2\u54a4\u54be\u54bc\u54d8\u54e5\u54e6\u550f\u5514\u54fd\u54ee\u54ed\u54fa\u54e2\u5539\u5540\u5563\u554c\u552e\u555c\u5545\u5556\u5557\u5538\u5533\u555d\u5599\u5580\u54af\u558a\u559f\u557b\u557e\u5598\u559e\u55ae\u557c\u5583\u55a9\u5587\u55a8\u55da\u55c5\u55df\u55c4\u55dc\u55e4\u55d4\u5614\u55f7\u5616\u55fe\u55fd\u561b\u55f9\u564e\u5650\u71df\u5634\u5636\u5632\u5638\u566b\u5664\u562f\u566c\u566a\u5686\u5680\u568a\u56a0\u5694\u568f\u56a5\u56ae\u56b6\u56b4\u56c2\u56bc\u56c1\u56c3\u56c0\u56c8\u56ce\u56d1\u56d3\u56d7\u56ee\u56f9\u5700\u56ff\u5704\u5709"],["d4a1","\u5708\u570b\u570d\u5713\u5718\u5716\u55c7\u571c\u5726\u5737\u5738\u574e\u573b\u5740\u574f\u5769\u57c0\u5788\u5761\u577f\u5789\u5793\u57a0\u57b3\u57a4\u57aa\u57b0\u57c3\u57c6\u57d4\u57d2\u57d3\u580a\u57d6\u57e3\u580b\u5819\u581d\u5872\u5821\u5862\u584b\u5870\u6bc0\u5852\u583d\u5879\u5885\u58b9\u589f\u58ab\u58ba\u58de\u58bb\u58b8\u58ae\u58c5\u58d3\u58d1\u58d7\u58d9\u58d8\u58e5\u58dc\u58e4\u58df\u58ef\u58fa\u58f9\u58fb\u58fc\u58fd\u5902\u590a\u5910\u591b\u68a6\u5925\u592c\u592d\u5932\u5938\u593e\u7ad2\u5955\u5950\u594e\u595a\u5958\u5962\u5960\u5967\u596c\u5969"],["d5a1","\u5978\u5981\u599d\u4f5e\u4fab\u59a3\u59b2\u59c6\u59e8\u59dc\u598d\u59d9\u59da\u5a25\u5a1f\u5a11\u5a1c\u5a09\u5a1a\u5a40\u5a6c\u5a49\u5a35\u5a36\u5a62\u5a6a\u5a9a\u5abc\u5abe\u5acb\u5ac2\u5abd\u5ae3\u5ad7\u5ae6\u5ae9\u5ad6\u5afa\u5afb\u5b0c\u5b0b\u5b16\u5b32\u5ad0\u5b2a\u5b36\u5b3e\u5b43\u5b45\u5b40\u5b51\u5b55\u5b5a\u5b5b\u5b65\u5b69\u5b70\u5b73\u5b75\u5b78\u6588\u5b7a\u5b80\u5b83\u5ba6\u5bb8\u5bc3\u5bc7\u5bc9\u5bd4\u5bd0\u5be4\u5be6\u5be2\u5bde\u5be5\u5beb\u5bf0\u5bf6\u5bf3\u5c05\u5c07\u5c08\u5c0d\u5c13\u5c20\u5c22\u5c28\u5c38\u5c39\u5c41\u5c46\u5c4e\u5c53"],["d6a1","\u5c50\u5c4f\u5b71\u5c6c\u5c6e\u4e62\u5c76\u5c79\u5c8c\u5c91\u5c94\u599b\u5cab\u5cbb\u5cb6\u5cbc\u5cb7\u5cc5\u5cbe\u5cc7\u5cd9\u5ce9\u5cfd\u5cfa\u5ced\u5d8c\u5cea\u5d0b\u5d15\u5d17\u5d5c\u5d1f\u5d1b\u5d11\u5d14\u5d22\u5d1a\u5d19\u5d18\u5d4c\u5d52\u5d4e\u5d4b\u5d6c\u5d73\u5d76\u5d87\u5d84\u5d82\u5da2\u5d9d\u5dac\u5dae\u5dbd\u5d90\u5db7\u5dbc\u5dc9\u5dcd\u5dd3\u5dd2\u5dd6\u5ddb\u5deb\u5df2\u5df5\u5e0b\u5e1a\u5e19\u5e11\u5e1b\u5e36\u5e37\u5e44\u5e43\u5e40\u5e4e\u5e57\u5e54\u5e5f\u5e62\u5e64\u5e47\u5e75\u5e76\u5e7a\u9ebc\u5e7f\u5ea0\u5ec1\u5ec2\u5ec8\u5ed0\u5ecf"],["d7a1","\u5ed6\u5ee3\u5edd\u5eda\u5edb\u5ee2\u5ee1\u5ee8\u5ee9\u5eec\u5ef1\u5ef3\u5ef0\u5ef4\u5ef8\u5efe\u5f03\u5f09\u5f5d\u5f5c\u5f0b\u5f11\u5f16\u5f29\u5f2d\u5f38\u5f41\u5f48\u5f4c\u5f4e\u5f2f\u5f51\u5f56\u5f57\u5f59\u5f61\u5f6d\u5f73\u5f77\u5f83\u5f82\u5f7f\u5f8a\u5f88\u5f91\u5f87\u5f9e\u5f99\u5f98\u5fa0\u5fa8\u5fad\u5fbc\u5fd6\u5ffb\u5fe4\u5ff8\u5ff1\u5fdd\u60b3\u5fff\u6021\u6060\u6019\u6010\u6029\u600e\u6031\u601b\u6015\u602b\u6026\u600f\u603a\u605a\u6041\u606a\u6077\u605f\u604a\u6046\u604d\u6063\u6043\u6064\u6042\u606c\u606b\u6059\u6081\u608d\u60e7\u6083\u609a"],["d8a1","\u6084\u609b\u6096\u6097\u6092\u60a7\u608b\u60e1\u60b8\u60e0\u60d3\u60b4\u5ff0\u60bd\u60c6\u60b5\u60d8\u614d\u6115\u6106\u60f6\u60f7\u6100\u60f4\u60fa\u6103\u6121\u60fb\u60f1\u610d\u610e\u6147\u613e\u6128\u6127\u614a\u613f\u613c\u612c\u6134\u613d\u6142\u6144\u6173\u6177\u6158\u6159\u615a\u616b\u6174\u616f\u6165\u6171\u615f\u615d\u6153\u6175\u6199\u6196\u6187\u61ac\u6194\u619a\u618a\u6191\u61ab\u61ae\u61cc\u61ca\u61c9\u61f7\u61c8\u61c3\u61c6\u61ba\u61cb\u7f79\u61cd\u61e6\u61e3\u61f6\u61fa\u61f4\u61ff\u61fd\u61fc\u61fe\u6200\u6208\u6209\u620d\u620c\u6214\u621b"],["d9a1","\u621e\u6221\u622a\u622e\u6230\u6232\u6233\u6241\u624e\u625e\u6263\u625b\u6260\u6268\u627c\u6282\u6289\u627e\u6292\u6293\u6296\u62d4\u6283\u6294\u62d7\u62d1\u62bb\u62cf\u62ff\u62c6\u64d4\u62c8\u62dc\u62cc\u62ca\u62c2\u62c7\u629b\u62c9\u630c\u62ee\u62f1\u6327\u6302\u6308\u62ef\u62f5\u6350\u633e\u634d\u641c\u634f\u6396\u638e\u6380\u63ab\u6376\u63a3\u638f\u6389\u639f\u63b5\u636b\u6369\u63be\u63e9\u63c0\u63c6\u63e3\u63c9\u63d2\u63f6\u63c4\u6416\u6434\u6406\u6413\u6426\u6436\u651d\u6417\u6428\u640f\u6467\u646f\u6476\u644e\u652a\u6495\u6493\u64a5\u64a9\u6488\u64bc"],["daa1","\u64da\u64d2\u64c5\u64c7\u64bb\u64d8\u64c2\u64f1\u64e7\u8209\u64e0\u64e1\u62ac\u64e3\u64ef\u652c\u64f6\u64f4\u64f2\u64fa\u6500\u64fd\u6518\u651c\u6505\u6524\u6523\u652b\u6534\u6535\u6537\u6536\u6538\u754b\u6548\u6556\u6555\u654d\u6558\u655e\u655d\u6572\u6578\u6582\u6583\u8b8a\u659b\u659f\u65ab\u65b7\u65c3\u65c6\u65c1\u65c4\u65cc\u65d2\u65db\u65d9\u65e0\u65e1\u65f1\u6772\u660a\u6603\u65fb\u6773\u6635\u6636\u6634\u661c\u664f\u6644\u6649\u6641\u665e\u665d\u6664\u6667\u6668\u665f\u6662\u6670\u6683\u6688\u668e\u6689\u6684\u6698\u669d\u66c1\u66b9\u66c9\u66be\u66bc"],["dba1","\u66c4\u66b8\u66d6\u66da\u66e0\u663f\u66e6\u66e9\u66f0\u66f5\u66f7\u670f\u6716\u671e\u6726\u6727\u9738\u672e\u673f\u6736\u6741\u6738\u6737\u6746\u675e\u6760\u6759\u6763\u6764\u6789\u6770\u67a9\u677c\u676a\u678c\u678b\u67a6\u67a1\u6785\u67b7\u67ef\u67b4\u67ec\u67b3\u67e9\u67b8\u67e4\u67de\u67dd\u67e2\u67ee\u67b9\u67ce\u67c6\u67e7\u6a9c\u681e\u6846\u6829\u6840\u684d\u6832\u684e\u68b3\u682b\u6859\u6863\u6877\u687f\u689f\u688f\u68ad\u6894\u689d\u689b\u6883\u6aae\u68b9\u6874\u68b5\u68a0\u68ba\u690f\u688d\u687e\u6901\u68ca\u6908\u68d8\u6922\u6926\u68e1\u690c\u68cd"],["dca1","\u68d4\u68e7\u68d5\u6936\u6912\u6904\u68d7\u68e3\u6925\u68f9\u68e0\u68ef\u6928\u692a\u691a\u6923\u6921\u68c6\u6979\u6977\u695c\u6978\u696b\u6954\u697e\u696e\u6939\u6974\u693d\u6959\u6930\u6961\u695e\u695d\u6981\u696a\u69b2\u69ae\u69d0\u69bf\u69c1\u69d3\u69be\u69ce\u5be8\u69ca\u69dd\u69bb\u69c3\u69a7\u6a2e\u6991\u69a0\u699c\u6995\u69b4\u69de\u69e8\u6a02\u6a1b\u69ff\u6b0a\u69f9\u69f2\u69e7\u6a05\u69b1\u6a1e\u69ed\u6a14\u69eb\u6a0a\u6a12\u6ac1\u6a23\u6a13\u6a44\u6a0c\u6a72\u6a36\u6a78\u6a47\u6a62\u6a59\u6a66\u6a48\u6a38\u6a22\u6a90\u6a8d\u6aa0\u6a84\u6aa2\u6aa3"],["dda1","\u6a97\u8617\u6abb\u6ac3\u6ac2\u6ab8\u6ab3\u6aac\u6ade\u6ad1\u6adf\u6aaa\u6ada\u6aea\u6afb\u6b05\u8616\u6afa\u6b12\u6b16\u9b31\u6b1f\u6b38\u6b37\u76dc\u6b39\u98ee\u6b47\u6b43\u6b49\u6b50\u6b59\u6b54\u6b5b\u6b5f\u6b61\u6b78\u6b79\u6b7f\u6b80\u6b84\u6b83\u6b8d\u6b98\u6b95\u6b9e\u6ba4\u6baa\u6bab\u6baf\u6bb2\u6bb1\u6bb3\u6bb7\u6bbc\u6bc6\u6bcb\u6bd3\u6bdf\u6bec\u6beb\u6bf3\u6bef\u9ebe\u6c08\u6c13\u6c14\u6c1b\u6c24\u6c23\u6c5e\u6c55\u6c62\u6c6a\u6c82\u6c8d\u6c9a\u6c81\u6c9b\u6c7e\u6c68\u6c73\u6c92\u6c90\u6cc4\u6cf1\u6cd3\u6cbd\u6cd7\u6cc5\u6cdd\u6cae\u6cb1\u6cbe"],["dea1","\u6cba\u6cdb\u6cef\u6cd9\u6cea\u6d1f\u884d\u6d36\u6d2b\u6d3d\u6d38\u6d19\u6d35\u6d33\u6d12\u6d0c\u6d63\u6d93\u6d64\u6d5a\u6d79\u6d59\u6d8e\u6d95\u6fe4\u6d85\u6df9\u6e15\u6e0a\u6db5\u6dc7\u6de6\u6db8\u6dc6\u6dec\u6dde\u6dcc\u6de8\u6dd2\u6dc5\u6dfa\u6dd9\u6de4\u6dd5\u6dea\u6dee\u6e2d\u6e6e\u6e2e\u6e19\u6e72\u6e5f\u6e3e\u6e23\u6e6b\u6e2b\u6e76\u6e4d\u6e1f\u6e43\u6e3a\u6e4e\u6e24\u6eff\u6e1d\u6e38\u6e82\u6eaa\u6e98\u6ec9\u6eb7\u6ed3\u6ebd\u6eaf\u6ec4\u6eb2\u6ed4\u6ed5\u6e8f\u6ea5\u6ec2\u6e9f\u6f41\u6f11\u704c\u6eec\u6ef8\u6efe\u6f3f\u6ef2\u6f31\u6eef\u6f32\u6ecc"],["dfa1","\u6f3e\u6f13\u6ef7\u6f86\u6f7a\u6f78\u6f81\u6f80\u6f6f\u6f5b\u6ff3\u6f6d\u6f82\u6f7c\u6f58\u6f8e\u6f91\u6fc2\u6f66\u6fb3\u6fa3\u6fa1\u6fa4\u6fb9\u6fc6\u6faa\u6fdf\u6fd5\u6fec\u6fd4\u6fd8\u6ff1\u6fee\u6fdb\u7009\u700b\u6ffa\u7011\u7001\u700f\u6ffe\u701b\u701a\u6f74\u701d\u7018\u701f\u7030\u703e\u7032\u7051\u7063\u7099\u7092\u70af\u70f1\u70ac\u70b8\u70b3\u70ae\u70df\u70cb\u70dd\u70d9\u7109\u70fd\u711c\u7119\u7165\u7155\u7188\u7166\u7162\u714c\u7156\u716c\u718f\u71fb\u7184\u7195\u71a8\u71ac\u71d7\u71b9\u71be\u71d2\u71c9\u71d4\u71ce\u71e0\u71ec\u71e7\u71f5\u71fc"],["e0a1","\u71f9\u71ff\u720d\u7210\u721b\u7228\u722d\u722c\u7230\u7232\u723b\u723c\u723f\u7240\u7246\u724b\u7258\u7274\u727e\u7282\u7281\u7287\u7292\u7296\u72a2\u72a7\u72b9\u72b2\u72c3\u72c6\u72c4\u72ce\u72d2\u72e2\u72e0\u72e1\u72f9\u72f7\u500f\u7317\u730a\u731c\u7316\u731d\u7334\u732f\u7329\u7325\u733e\u734e\u734f\u9ed8\u7357\u736a\u7368\u7370\u7378\u7375\u737b\u737a\u73c8\u73b3\u73ce\u73bb\u73c0\u73e5\u73ee\u73de\u74a2\u7405\u746f\u7425\u73f8\u7432\u743a\u7455\u743f\u745f\u7459\u7441\u745c\u7469\u7470\u7463\u746a\u7476\u747e\u748b\u749e\u74a7\u74ca\u74cf\u74d4\u73f1"],["e1a1","\u74e0\u74e3\u74e7\u74e9\u74ee\u74f2\u74f0\u74f1\u74f8\u74f7\u7504\u7503\u7505\u750c\u750e\u750d\u7515\u7513\u751e\u7526\u752c\u753c\u7544\u754d\u754a\u7549\u755b\u7546\u755a\u7569\u7564\u7567\u756b\u756d\u7578\u7576\u7586\u7587\u7574\u758a\u7589\u7582\u7594\u759a\u759d\u75a5\u75a3\u75c2\u75b3\u75c3\u75b5\u75bd\u75b8\u75bc\u75b1\u75cd\u75ca\u75d2\u75d9\u75e3\u75de\u75fe\u75ff\u75fc\u7601\u75f0\u75fa\u75f2\u75f3\u760b\u760d\u7609\u761f\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763b\u7647\u7648\u7646\u765c\u7658\u7661\u7662\u7668\u7669\u766a\u7667\u766c\u7670"],["e2a1","\u7672\u7676\u7678\u767c\u7680\u7683\u7688\u768b\u768e\u7696\u7693\u7699\u769a\u76b0\u76b4\u76b8\u76b9\u76ba\u76c2\u76cd\u76d6\u76d2\u76de\u76e1\u76e5\u76e7\u76ea\u862f\u76fb\u7708\u7707\u7704\u7729\u7724\u771e\u7725\u7726\u771b\u7737\u7738\u7747\u775a\u7768\u776b\u775b\u7765\u777f\u777e\u7779\u778e\u778b\u7791\u77a0\u779e\u77b0\u77b6\u77b9\u77bf\u77bc\u77bd\u77bb\u77c7\u77cd\u77d7\u77da\u77dc\u77e3\u77ee\u77fc\u780c\u7812\u7926\u7820\u792a\u7845\u788e\u7874\u7886\u787c\u789a\u788c\u78a3\u78b5\u78aa\u78af\u78d1\u78c6\u78cb\u78d4\u78be\u78bc\u78c5\u78ca\u78ec"],["e3a1","\u78e7\u78da\u78fd\u78f4\u7907\u7912\u7911\u7919\u792c\u792b\u7940\u7960\u7957\u795f\u795a\u7955\u7953\u797a\u797f\u798a\u799d\u79a7\u9f4b\u79aa\u79ae\u79b3\u79b9\u79ba\u79c9\u79d5\u79e7\u79ec\u79e1\u79e3\u7a08\u7a0d\u7a18\u7a19\u7a20\u7a1f\u7980\u7a31\u7a3b\u7a3e\u7a37\u7a43\u7a57\u7a49\u7a61\u7a62\u7a69\u9f9d\u7a70\u7a79\u7a7d\u7a88\u7a97\u7a95\u7a98\u7a96\u7aa9\u7ac8\u7ab0\u7ab6\u7ac5\u7ac4\u7abf\u9083\u7ac7\u7aca\u7acd\u7acf\u7ad5\u7ad3\u7ad9\u7ada\u7add\u7ae1\u7ae2\u7ae6\u7aed\u7af0\u7b02\u7b0f\u7b0a\u7b06\u7b33\u7b18\u7b19\u7b1e\u7b35\u7b28\u7b36\u7b50"],["e4a1","\u7b7a\u7b04\u7b4d\u7b0b\u7b4c\u7b45\u7b75\u7b65\u7b74\u7b67\u7b70\u7b71\u7b6c\u7b6e\u7b9d\u7b98\u7b9f\u7b8d\u7b9c\u7b9a\u7b8b\u7b92\u7b8f\u7b5d\u7b99\u7bcb\u7bc1\u7bcc\u7bcf\u7bb4\u7bc6\u7bdd\u7be9\u7c11\u7c14\u7be6\u7be5\u7c60\u7c00\u7c07\u7c13\u7bf3\u7bf7\u7c17\u7c0d\u7bf6\u7c23\u7c27\u7c2a\u7c1f\u7c37\u7c2b\u7c3d\u7c4c\u7c43\u7c54\u7c4f\u7c40\u7c50\u7c58\u7c5f\u7c64\u7c56\u7c65\u7c6c\u7c75\u7c83\u7c90\u7ca4\u7cad\u7ca2\u7cab\u7ca1\u7ca8\u7cb3\u7cb2\u7cb1\u7cae\u7cb9\u7cbd\u7cc0\u7cc5\u7cc2\u7cd8\u7cd2\u7cdc\u7ce2\u9b3b\u7cef\u7cf2\u7cf4\u7cf6\u7cfa\u7d06"],["e5a1","\u7d02\u7d1c\u7d15\u7d0a\u7d45\u7d4b\u7d2e\u7d32\u7d3f\u7d35\u7d46\u7d73\u7d56\u7d4e\u7d72\u7d68\u7d6e\u7d4f\u7d63\u7d93\u7d89\u7d5b\u7d8f\u7d7d\u7d9b\u7dba\u7dae\u7da3\u7db5\u7dc7\u7dbd\u7dab\u7e3d\u7da2\u7daf\u7ddc\u7db8\u7d9f\u7db0\u7dd8\u7ddd\u7de4\u7dde\u7dfb\u7df2\u7de1\u7e05\u7e0a\u7e23\u7e21\u7e12\u7e31\u7e1f\u7e09\u7e0b\u7e22\u7e46\u7e66\u7e3b\u7e35\u7e39\u7e43\u7e37\u7e32\u7e3a\u7e67\u7e5d\u7e56\u7e5e\u7e59\u7e5a\u7e79\u7e6a\u7e69\u7e7c\u7e7b\u7e83\u7dd5\u7e7d\u8fae\u7e7f\u7e88\u7e89\u7e8c\u7e92\u7e90\u7e93\u7e94\u7e96\u7e8e\u7e9b\u7e9c\u7f38\u7f3a"],["e6a1","\u7f45\u7f4c\u7f4d\u7f4e\u7f50\u7f51\u7f55\u7f54\u7f58\u7f5f\u7f60\u7f68\u7f69\u7f67\u7f78\u7f82\u7f86\u7f83\u7f88\u7f87\u7f8c\u7f94\u7f9e\u7f9d\u7f9a\u7fa3\u7faf\u7fb2\u7fb9\u7fae\u7fb6\u7fb8\u8b71\u7fc5\u7fc6\u7fca\u7fd5\u7fd4\u7fe1\u7fe6\u7fe9\u7ff3\u7ff9\u98dc\u8006\u8004\u800b\u8012\u8018\u8019\u801c\u8021\u8028\u803f\u803b\u804a\u8046\u8052\u8058\u805a\u805f\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807d\u807f\u8084\u8086\u8085\u809b\u8093\u809a\u80ad\u5190\u80ac\u80db\u80e5\u80d9\u80dd\u80c4\u80da\u80d6\u8109\u80ef\u80f1\u811b\u8129\u8123\u812f\u814b"],["e7a1","\u968b\u8146\u813e\u8153\u8151\u80fc\u8171\u816e\u8165\u8166\u8174\u8183\u8188\u818a\u8180\u8182\u81a0\u8195\u81a4\u81a3\u815f\u8193\u81a9\u81b0\u81b5\u81be\u81b8\u81bd\u81c0\u81c2\u81ba\u81c9\u81cd\u81d1\u81d9\u81d8\u81c8\u81da\u81df\u81e0\u81e7\u81fa\u81fb\u81fe\u8201\u8202\u8205\u8207\u820a\u820d\u8210\u8216\u8229\u822b\u8238\u8233\u8240\u8259\u8258\u825d\u825a\u825f\u8264\u8262\u8268\u826a\u826b\u822e\u8271\u8277\u8278\u827e\u828d\u8292\u82ab\u829f\u82bb\u82ac\u82e1\u82e3\u82df\u82d2\u82f4\u82f3\u82fa\u8393\u8303\u82fb\u82f9\u82de\u8306\u82dc\u8309\u82d9"],["e8a1","\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832f\u832b\u8317\u8318\u8385\u839a\u83aa\u839f\u83a2\u8396\u8323\u838e\u8387\u838a\u837c\u83b5\u8373\u8375\u83a0\u8389\u83a8\u83f4\u8413\u83eb\u83ce\u83fd\u8403\u83d8\u840b\u83c1\u83f7\u8407\u83e0\u83f2\u840d\u8422\u8420\u83bd\u8438\u8506\u83fb\u846d\u842a\u843c\u855a\u8484\u8477\u846b\u84ad\u846e\u8482\u8469\u8446\u842c\u846f\u8479\u8435\u84ca\u8462\u84b9\u84bf\u849f\u84d9\u84cd\u84bb\u84da\u84d0\u84c1\u84c6\u84d6\u84a1\u8521\u84ff\u84f4\u8517\u8518\u852c\u851f\u8515\u8514\u84fc\u8540\u8563\u8558\u8548"],["e9a1","\u8541\u8602\u854b\u8555\u8580\u85a4\u8588\u8591\u858a\u85a8\u856d\u8594\u859b\u85ea\u8587\u859c\u8577\u857e\u8590\u85c9\u85ba\u85cf\u85b9\u85d0\u85d5\u85dd\u85e5\u85dc\u85f9\u860a\u8613\u860b\u85fe\u85fa\u8606\u8622\u861a\u8630\u863f\u864d\u4e55\u8654\u865f\u8667\u8671\u8693\u86a3\u86a9\u86aa\u868b\u868c\u86b6\u86af\u86c4\u86c6\u86b0\u86c9\u8823\u86ab\u86d4\u86de\u86e9\u86ec\u86df\u86db\u86ef\u8712\u8706\u8708\u8700\u8703\u86fb\u8711\u8709\u870d\u86f9\u870a\u8734\u873f\u8737\u873b\u8725\u8729\u871a\u8760\u875f\u8778\u874c\u874e\u8774\u8757\u8768\u876e\u8759"],["eaa1","\u8753\u8763\u876a\u8805\u87a2\u879f\u8782\u87af\u87cb\u87bd\u87c0\u87d0\u96d6\u87ab\u87c4\u87b3\u87c7\u87c6\u87bb\u87ef\u87f2\u87e0\u880f\u880d\u87fe\u87f6\u87f7\u880e\u87d2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883b\u8844\u8842\u8852\u8859\u885e\u8862\u886b\u8881\u887e\u889e\u8875\u887d\u88b5\u8872\u8882\u8897\u8892\u88ae\u8899\u88a2\u888d\u88a4\u88b0\u88bf\u88b1\u88c3\u88c4\u88d4\u88d8\u88d9\u88dd\u88f9\u8902\u88fc\u88f4\u88e8\u88f2\u8904\u890c\u890a\u8913\u8943\u891e\u8925\u892a\u892b\u8941\u8944\u893b\u8936\u8938\u894c\u891d\u8960\u895e"],["eba1","\u8966\u8964\u896d\u896a\u896f\u8974\u8977\u897e\u8983\u8988\u898a\u8993\u8998\u89a1\u89a9\u89a6\u89ac\u89af\u89b2\u89ba\u89bd\u89bf\u89c0\u89da\u89dc\u89dd\u89e7\u89f4\u89f8\u8a03\u8a16\u8a10\u8a0c\u8a1b\u8a1d\u8a25\u8a36\u8a41\u8a5b\u8a52\u8a46\u8a48\u8a7c\u8a6d\u8a6c\u8a62\u8a85\u8a82\u8a84\u8aa8\u8aa1\u8a91\u8aa5\u8aa6\u8a9a\u8aa3\u8ac4\u8acd\u8ac2\u8ada\u8aeb\u8af3\u8ae7\u8ae4\u8af1\u8b14\u8ae0\u8ae2\u8af7\u8ade\u8adb\u8b0c\u8b07\u8b1a\u8ae1\u8b16\u8b10\u8b17\u8b20\u8b33\u97ab\u8b26\u8b2b\u8b3e\u8b28\u8b41\u8b4c\u8b4f\u8b4e\u8b49\u8b56\u8b5b\u8b5a\u8b6b"],["eca1","\u8b5f\u8b6c\u8b6f\u8b74\u8b7d\u8b80\u8b8c\u8b8e\u8b92\u8b93\u8b96\u8b99\u8b9a\u8c3a\u8c41\u8c3f\u8c48\u8c4c\u8c4e\u8c50\u8c55\u8c62\u8c6c\u8c78\u8c7a\u8c82\u8c89\u8c85\u8c8a\u8c8d\u8c8e\u8c94\u8c7c\u8c98\u621d\u8cad\u8caa\u8cbd\u8cb2\u8cb3\u8cae\u8cb6\u8cc8\u8cc1\u8ce4\u8ce3\u8cda\u8cfd\u8cfa\u8cfb\u8d04\u8d05\u8d0a\u8d07\u8d0f\u8d0d\u8d10\u9f4e\u8d13\u8ccd\u8d14\u8d16\u8d67\u8d6d\u8d71\u8d73\u8d81\u8d99\u8dc2\u8dbe\u8dba\u8dcf\u8dda\u8dd6\u8dcc\u8ddb\u8dcb\u8dea\u8deb\u8ddf\u8de3\u8dfc\u8e08\u8e09\u8dff\u8e1d\u8e1e\u8e10\u8e1f\u8e42\u8e35\u8e30\u8e34\u8e4a"],["eda1","\u8e47\u8e49\u8e4c\u8e50\u8e48\u8e59\u8e64\u8e60\u8e2a\u8e63\u8e55\u8e76\u8e72\u8e7c\u8e81\u8e87\u8e85\u8e84\u8e8b\u8e8a\u8e93\u8e91\u8e94\u8e99\u8eaa\u8ea1\u8eac\u8eb0\u8ec6\u8eb1\u8ebe\u8ec5\u8ec8\u8ecb\u8edb\u8ee3\u8efc\u8efb\u8eeb\u8efe\u8f0a\u8f05\u8f15\u8f12\u8f19\u8f13\u8f1c\u8f1f\u8f1b\u8f0c\u8f26\u8f33\u8f3b\u8f39\u8f45\u8f42\u8f3e\u8f4c\u8f49\u8f46\u8f4e\u8f57\u8f5c\u8f62\u8f63\u8f64\u8f9c\u8f9f\u8fa3\u8fad\u8faf\u8fb7\u8fda\u8fe5\u8fe2\u8fea\u8fef\u9087\u8ff4\u9005\u8ff9\u8ffa\u9011\u9015\u9021\u900d\u901e\u9016\u900b\u9027\u9036\u9035\u9039\u8ff8"],["eea1","\u904f\u9050\u9051\u9052\u900e\u9049\u903e\u9056\u9058\u905e\u9068\u906f\u9076\u96a8\u9072\u9082\u907d\u9081\u9080\u908a\u9089\u908f\u90a8\u90af\u90b1\u90b5\u90e2\u90e4\u6248\u90db\u9102\u9112\u9119\u9132\u9130\u914a\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918b\u9189\u9182\u91a2\u91ab\u91af\u91aa\u91b5\u91b4\u91ba\u91c0\u91c1\u91c9\u91cb\u91d0\u91d6\u91df\u91e1\u91db\u91fc\u91f5\u91f6\u921e\u91ff\u9214\u922c\u9215\u9211\u925e\u9257\u9245\u9249\u9264\u9248\u9295\u923f\u924b\u9250\u929c\u9296\u9293\u929b\u925a\u92cf\u92b9\u92b7\u92e9\u930f\u92fa\u9344\u932e"],["efa1","\u9319\u9322\u931a\u9323\u933a\u9335\u933b\u935c\u9360\u937c\u936e\u9356\u93b0\u93ac\u93ad\u9394\u93b9\u93d6\u93d7\u93e8\u93e5\u93d8\u93c3\u93dd\u93d0\u93c8\u93e4\u941a\u9414\u9413\u9403\u9407\u9410\u9436\u942b\u9435\u9421\u943a\u9441\u9452\u9444\u945b\u9460\u9462\u945e\u946a\u9229\u9470\u9475\u9477\u947d\u945a\u947c\u947e\u9481\u947f\u9582\u9587\u958a\u9594\u9596\u9598\u9599\u95a0\u95a8\u95a7\u95ad\u95bc\u95bb\u95b9\u95be\u95ca\u6ff6\u95c3\u95cd\u95cc\u95d5\u95d4\u95d6\u95dc\u95e1\u95e5\u95e2\u9621\u9628\u962e\u962f\u9642\u964c\u964f\u964b\u9677\u965c\u965e"],["f0a1","\u965d\u965f\u9666\u9672\u966c\u968d\u9698\u9695\u9697\u96aa\u96a7\u96b1\u96b2\u96b0\u96b4\u96b6\u96b8\u96b9\u96ce\u96cb\u96c9\u96cd\u894d\u96dc\u970d\u96d5\u96f9\u9704\u9706\u9708\u9713\u970e\u9711\u970f\u9716\u9719\u9724\u972a\u9730\u9739\u973d\u973e\u9744\u9746\u9748\u9742\u9749\u975c\u9760\u9764\u9766\u9768\u52d2\u976b\u9771\u9779\u9785\u977c\u9781\u977a\u9786\u978b\u978f\u9790\u979c\u97a8\u97a6\u97a3\u97b3\u97b4\u97c3\u97c6\u97c8\u97cb\u97dc\u97ed\u9f4f\u97f2\u7adf\u97f6\u97f5\u980f\u980c\u9838\u9824\u9821\u9837\u983d\u9846\u984f\u984b\u986b\u986f\u9870"],["f1a1","\u9871\u9874\u9873\u98aa\u98af\u98b1\u98b6\u98c4\u98c3\u98c6\u98e9\u98eb\u9903\u9909\u9912\u9914\u9918\u9921\u991d\u991e\u9924\u9920\u992c\u992e\u993d\u993e\u9942\u9949\u9945\u9950\u994b\u9951\u9952\u994c\u9955\u9997\u9998\u99a5\u99ad\u99ae\u99bc\u99df\u99db\u99dd\u99d8\u99d1\u99ed\u99ee\u99f1\u99f2\u99fb\u99f8\u9a01\u9a0f\u9a05\u99e2\u9a19\u9a2b\u9a37\u9a45\u9a42\u9a40\u9a43\u9a3e\u9a55\u9a4d\u9a5b\u9a57\u9a5f\u9a62\u9a65\u9a64\u9a69\u9a6b\u9a6a\u9aad\u9ab0\u9abc\u9ac0\u9acf\u9ad1\u9ad3\u9ad4\u9ade\u9adf\u9ae2\u9ae3\u9ae6\u9aef\u9aeb\u9aee\u9af4\u9af1\u9af7"],["f2a1","\u9afb\u9b06\u9b18\u9b1a\u9b1f\u9b22\u9b23\u9b25\u9b27\u9b28\u9b29\u9b2a\u9b2e\u9b2f\u9b32\u9b44\u9b43\u9b4f\u9b4d\u9b4e\u9b51\u9b58\u9b74\u9b93\u9b83\u9b91\u9b96\u9b97\u9b9f\u9ba0\u9ba8\u9bb4\u9bc0\u9bca\u9bb9\u9bc6\u9bcf\u9bd1\u9bd2\u9be3\u9be2\u9be4\u9bd4\u9be1\u9c3a\u9bf2\u9bf1\u9bf0\u9c15\u9c14\u9c09\u9c13\u9c0c\u9c06\u9c08\u9c12\u9c0a\u9c04\u9c2e\u9c1b\u9c25\u9c24\u9c21\u9c30\u9c47\u9c32\u9c46\u9c3e\u9c5a\u9c60\u9c67\u9c76\u9c78\u9ce7\u9cec\u9cf0\u9d09\u9d08\u9ceb\u9d03\u9d06\u9d2a\u9d26\u9daf\u9d23\u9d1f\u9d44\u9d15\u9d12\u9d41\u9d3f\u9d3e\u9d46\u9d48"],["f3a1","\u9d5d\u9d5e\u9d64\u9d51\u9d50\u9d59\u9d72\u9d89\u9d87\u9dab\u9d6f\u9d7a\u9d9a\u9da4\u9da9\u9db2\u9dc4\u9dc1\u9dbb\u9db8\u9dba\u9dc6\u9dcf\u9dc2\u9dd9\u9dd3\u9df8\u9de6\u9ded\u9def\u9dfd\u9e1a\u9e1b\u9e1e\u9e75\u9e79\u9e7d\u9e81\u9e88\u9e8b\u9e8c\u9e92\u9e95\u9e91\u9e9d\u9ea5\u9ea9\u9eb8\u9eaa\u9ead\u9761\u9ecc\u9ece\u9ecf\u9ed0\u9ed4\u9edc\u9ede\u9edd\u9ee0\u9ee5\u9ee8\u9eef\u9ef4\u9ef6\u9ef7\u9ef9\u9efb\u9efc\u9efd\u9f07\u9f08\u76b7\u9f15\u9f21\u9f2c\u9f3e\u9f4a\u9f52\u9f54\u9f63\u9f5f\u9f60\u9f61\u9f66\u9f67\u9f6c\u9f6a\u9f77\u9f72\u9f76\u9f95\u9f9c\u9fa0"],["f4a1","\u582f\u69c7\u9059\u7464\u51dc\u7199"],["f9a1","\u7e8a\u891c\u9348\u9288\u84dc\u4fc9\u70bb\u6631\u68c8\u92f9\u66fb\u5f45\u4e28\u4ee1\u4efc\u4f00\u4f03\u4f39\u4f56\u4f92\u4f8a\u4f9a\u4f94\u4fcd\u5040\u5022\u4fff\u501e\u5046\u5070\u5042\u5094\u50f4\u50d8\u514a\u5164\u519d\u51be\u51ec\u5215\u529c\u52a6\u52c0\u52db\u5300\u5307\u5324\u5372\u5393\u53b2\u53dd\ufa0e\u549c\u548a\u54a9\u54ff\u5586\u5759\u5765\u57ac\u57c8\u57c7\ufa0f\ufa10\u589e\u58b2\u590b\u5953\u595b\u595d\u5963\u59a4\u59ba\u5b56\u5bc0\u752f\u5bd8\u5bec\u5c1e\u5ca6\u5cba\u5cf5\u5d27\u5d53\ufa11\u5d42\u5d6d\u5db8\u5db9\u5dd0\u5f21\u5f34\u5f67\u5fb7"],["faa1","\u5fde\u605d\u6085\u608a\u60de\u60d5\u6120\u60f2\u6111\u6137\u6130\u6198\u6213\u62a6\u63f5\u6460\u649d\u64ce\u654e\u6600\u6615\u663b\u6609\u662e\u661e\u6624\u6665\u6657\u6659\ufa12\u6673\u6699\u66a0\u66b2\u66bf\u66fa\u670e\uf929\u6766\u67bb\u6852\u67c0\u6801\u6844\u68cf\ufa13\u6968\ufa14\u6998\u69e2\u6a30\u6a6b\u6a46\u6a73\u6a7e\u6ae2\u6ae4\u6bd6\u6c3f\u6c5c\u6c86\u6c6f\u6cda\u6d04\u6d87\u6d6f\u6d96\u6dac\u6dcf\u6df8\u6df2\u6dfc\u6e39\u6e5c\u6e27\u6e3c\u6ebf\u6f88\u6fb5\u6ff5\u7005\u7007\u7028\u7085\u70ab\u710f\u7104\u715c\u7146\u7147\ufa15\u71c1\u71fe\u72b1"],["fba1","\u72be\u7324\ufa16\u7377\u73bd\u73c9\u73d6\u73e3\u73d2\u7407\u73f5\u7426\u742a\u7429\u742e\u7462\u7489\u749f\u7501\u756f\u7682\u769c\u769e\u769b\u76a6\ufa17\u7746\u52af\u7821\u784e\u7864\u787a\u7930\ufa18\ufa19\ufa1a\u7994\ufa1b\u799b\u7ad1\u7ae7\ufa1c\u7aeb\u7b9e\ufa1d\u7d48\u7d5c\u7db7\u7da0\u7dd6\u7e52\u7f47\u7fa1\ufa1e\u8301\u8362\u837f\u83c7\u83f6\u8448\u84b4\u8553\u8559\u856b\ufa1f\u85b0\ufa20\ufa21\u8807\u88f5\u8a12\u8a37\u8a79\u8aa7\u8abe\u8adf\ufa22\u8af6\u8b53\u8b7f\u8cf0\u8cf4\u8d12\u8d76\ufa23\u8ecf\ufa24\ufa25\u9067\u90de\ufa26\u9115\u9127\u91da"],["fca1","\u91d7\u91de\u91ed\u91ee\u91e4\u91e5\u9206\u9210\u920a\u923a\u9240\u923c\u924e\u9259\u9251\u9239\u9267\u92a7\u9277\u9278\u92e7\u92d7\u92d9\u92d0\ufa27\u92d5\u92e0\u92d3\u9325\u9321\u92fb\ufa28\u931e\u92ff\u931d\u9302\u9370\u9357\u93a4\u93c6\u93de\u93f8\u9431\u9445\u9448\u9592\uf9dc\ufa29\u969d\u96af\u9733\u973b\u9743\u974d\u974f\u9751\u9755\u9857\u9865\ufa2a\ufa2b\u9927\ufa2c\u999e\u9a4e\u9ad9\u9adc\u9b75\u9b72\u9b8f\u9bb1\u9bbb\u9c00\u9d70\u9d6b\ufa2d\u9e19\u9ed1"],["fcf1","\u2170",9,"\uffe2\uffe4\uff07\uff02"],["8fa2af","\u02d8\u02c7\xb8\u02d9\u02dd\xaf\u02db\u02da\uff5e\u0384\u0385"],["8fa2c2","\xa1\xa6\xbf"],["8fa2eb","\xba\xaa\xa9\xae\u2122\xa4\u2116"],["8fa6e1","\u0386\u0388\u0389\u038a\u03aa"],["8fa6e7","\u038c"],["8fa6e9","\u038e\u03ab"],["8fa6ec","\u038f"],["8fa6f1","\u03ac\u03ad\u03ae\u03af\u03ca\u0390\u03cc\u03c2\u03cd\u03cb\u03b0\u03ce"],["8fa7c2","\u0402",10,"\u040e\u040f"],["8fa7f2","\u0452",10,"\u045e\u045f"],["8fa9a1","\xc6\u0110"],["8fa9a4","\u0126"],["8fa9a6","\u0132"],["8fa9a8","\u0141\u013f"],["8fa9ab","\u014a\xd8\u0152"],["8fa9af","\u0166\xde"],["8fa9c1","\xe6\u0111\xf0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014b\xf8\u0153\xdf\u0167\xfe"],["8faaa1","\xc1\xc0\xc4\xc2\u0102\u01cd\u0100\u0104\xc5\xc3\u0106\u0108\u010c\xc7\u010a\u010e\xc9\xc8\xcb\xca\u011a\u0116\u0112\u0118"],["8faaba","\u011c\u011e\u0122\u0120\u0124\xcd\xcc\xcf\xce\u01cf\u0130\u012a\u012e\u0128\u0134\u0136\u0139\u013d\u013b\u0143\u0147\u0145\xd1\xd3\xd2\xd6\xd4\u01d1\u0150\u014c\xd5\u0154\u0158\u0156\u015a\u015c\u0160\u015e\u0164\u0162\xda\xd9\xdc\xdb\u016c\u01d3\u0170\u016a\u0172\u016e\u0168\u01d7\u01db\u01d9\u01d5\u0174\xdd\u0178\u0176\u0179\u017d\u017b"],["8faba1","\xe1\xe0\xe4\xe2\u0103\u01ce\u0101\u0105\xe5\xe3\u0107\u0109\u010d\xe7\u010b\u010f\xe9\xe8\xeb\xea\u011b\u0117\u0113\u0119\u01f5\u011d\u011f"],["8fabbd","\u0121\u0125\xed\xec\xef\xee\u01d0"],["8fabc5","\u012b\u012f\u0129\u0135\u0137\u013a\u013e\u013c\u0144\u0148\u0146\xf1\xf3\xf2\xf6\xf4\u01d2\u0151\u014d\xf5\u0155\u0159\u0157\u015b\u015d\u0161\u015f\u0165\u0163\xfa\xf9\xfc\xfb\u016d\u01d4\u0171\u016b\u0173\u016f\u0169\u01d8\u01dc\u01da\u01d6\u0175\xfd\xff\u0177\u017a\u017e\u017c"],["8fb0a1","\u4e02\u4e04\u4e05\u4e0c\u4e12\u4e1f\u4e23\u4e24\u4e28\u4e2b\u4e2e\u4e2f\u4e30\u4e35\u4e40\u4e41\u4e44\u4e47\u4e51\u4e5a\u4e5c\u4e63\u4e68\u4e69\u4e74\u4e75\u4e79\u4e7f\u4e8d\u4e96\u4e97\u4e9d\u4eaf\u4eb9\u4ec3\u4ed0\u4eda\u4edb\u4ee0\u4ee1\u4ee2\u4ee8\u4eef\u4ef1\u4ef3\u4ef5\u4efd\u4efe\u4eff\u4f00\u4f02\u4f03\u4f08\u4f0b\u4f0c\u4f12\u4f15\u4f16\u4f17\u4f19\u4f2e\u4f31\u4f60\u4f33\u4f35\u4f37\u4f39\u4f3b\u4f3e\u4f40\u4f42\u4f48\u4f49\u4f4b\u4f4c\u4f52\u4f54\u4f56\u4f58\u4f5f\u4f63\u4f6a\u4f6c\u4f6e\u4f71\u4f77\u4f78\u4f79\u4f7a\u4f7d\u4f7e\u4f81\u4f82\u4f84"],["8fb1a1","\u4f85\u4f89\u4f8a\u4f8c\u4f8e\u4f90\u4f92\u4f93\u4f94\u4f97\u4f99\u4f9a\u4f9e\u4f9f\u4fb2\u4fb7\u4fb9\u4fbb\u4fbc\u4fbd\u4fbe\u4fc0\u4fc1\u4fc5\u4fc6\u4fc8\u4fc9\u4fcb\u4fcc\u4fcd\u4fcf\u4fd2\u4fdc\u4fe0\u4fe2\u4ff0\u4ff2\u4ffc\u4ffd\u4fff\u5000\u5001\u5004\u5007\u500a\u500c\u500e\u5010\u5013\u5017\u5018\u501b\u501c\u501d\u501e\u5022\u5027\u502e\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504a\u504c\u504e\u5051\u5052\u5053\u5057\u5059\u505f\u5060\u5062\u5063\u5066\u5067\u506a\u506d\u5070\u5071\u503b\u5081\u5083\u5084\u5086\u508a\u508e\u508f\u5090"],["8fb2a1","\u5092\u5093\u5094\u5096\u509b\u509c\u509e",4,"\u50aa\u50af\u50b0\u50b9\u50ba\u50bd\u50c0\u50c3\u50c4\u50c7\u50cc\u50ce\u50d0\u50d3\u50d4\u50d8\u50dc\u50dd\u50df\u50e2\u50e4\u50e6\u50e8\u50e9\u50ef\u50f1\u50f6\u50fa\u50fe\u5103\u5106\u5107\u5108\u510b\u510c\u510d\u510e\u50f2\u5110\u5117\u5119\u511b\u511c\u511d\u511e\u5123\u5127\u5128\u512c\u512d\u512f\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514a\u514f\u5153\u5155\u5157\u5158\u515f\u5164\u5166\u517e\u5183\u5184\u518b\u518e\u5198\u519d\u51a1\u51a3\u51ad\u51b8\u51ba\u51bc\u51be\u51bf\u51c2"],["8fb3a1","\u51c8\u51cf\u51d1\u51d2\u51d3\u51d5\u51d8\u51de\u51e2\u51e5\u51ee\u51f2\u51f3\u51f4\u51f7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523c\u5245\u5249\u5255\u5257\u5258\u525a\u525c\u525f\u5260\u5261\u5266\u526e\u5277\u5278\u5279\u5280\u5282\u5285\u528a\u528c\u5293\u5295\u5296\u5297\u5298\u529a\u529c\u52a4\u52a5\u52a6\u52a7\u52af\u52b0\u52b6\u52b7\u52b8\u52ba\u52bb\u52bd\u52c0\u52c4\u52c6\u52c8\u52cc\u52cf\u52d1\u52d4\u52d6\u52db\u52dc\u52e1\u52e5\u52e8\u52e9\u52ea\u52ec\u52f0\u52f1\u52f4\u52f6\u52f7\u5300\u5303\u530a\u530b"],["8fb4a1","\u530c\u5311\u5313\u5318\u531b\u531c\u531e\u531f\u5325\u5327\u5328\u5329\u532b\u532c\u532d\u5330\u5332\u5335\u533c\u533d\u533e\u5342\u534c\u534b\u5359\u535b\u5361\u5363\u5365\u536c\u536d\u5372\u5379\u537e\u5383\u5387\u5388\u538e\u5393\u5394\u5399\u539d\u53a1\u53a4\u53aa\u53ab\u53af\u53b2\u53b4\u53b5\u53b7\u53b8\u53ba\u53bd\u53c0\u53c5\u53cf\u53d2\u53d3\u53d5\u53da\u53dd\u53de\u53e0\u53e6\u53e7\u53f5\u5402\u5413\u541a\u5421\u5427\u5428\u542a\u542f\u5431\u5434\u5435\u5443\u5444\u5447\u544d\u544f\u545e\u5462\u5464\u5466\u5467\u5469\u546b\u546d\u546e\u5474\u547f"],["8fb5a1","\u5481\u5483\u5485\u5488\u5489\u548d\u5491\u5495\u5496\u549c\u549f\u54a1\u54a6\u54a7\u54a9\u54aa\u54ad\u54ae\u54b1\u54b7\u54b9\u54ba\u54bb\u54bf\u54c6\u54ca\u54cd\u54ce\u54e0\u54ea\u54ec\u54ef\u54f6\u54fc\u54fe\u54ff\u5500\u5501\u5505\u5508\u5509\u550c\u550d\u550e\u5515\u552a\u552b\u5532\u5535\u5536\u553b\u553c\u553d\u5541\u5547\u5549\u554a\u554d\u5550\u5551\u5558\u555a\u555b\u555e\u5560\u5561\u5564\u5566\u557f\u5581\u5582\u5586\u5588\u558e\u558f\u5591\u5592\u5593\u5594\u5597\u55a3\u55a4\u55ad\u55b2\u55bf\u55c1\u55c3\u55c6\u55c9\u55cb\u55cc\u55ce\u55d1\u55d2"],["8fb6a1","\u55d3\u55d7\u55d8\u55db\u55de\u55e2\u55e9\u55f6\u55ff\u5605\u5608\u560a\u560d",5,"\u5619\u562c\u5630\u5633\u5635\u5637\u5639\u563b\u563c\u563d\u563f\u5640\u5641\u5643\u5644\u5646\u5649\u564b\u564d\u564f\u5654\u565e\u5660\u5661\u5662\u5663\u5666\u5669\u566d\u566f\u5671\u5672\u5675\u5684\u5685\u5688\u568b\u568c\u5695\u5699\u569a\u569d\u569e\u569f\u56a6\u56a7\u56a8\u56a9\u56ab\u56ac\u56ad\u56b1\u56b3\u56b7\u56be\u56c5\u56c9\u56ca\u56cb\u56cf\u56d0\u56cc\u56cd\u56d9\u56dc\u56dd\u56df\u56e1\u56e4",4,"\u56f1\u56eb\u56ed"],["8fb7a1","\u56f6\u56f7\u5701\u5702\u5707\u570a\u570c\u5711\u5715\u571a\u571b\u571d\u5720\u5722\u5723\u5724\u5725\u5729\u572a\u572c\u572e\u572f\u5733\u5734\u573d\u573e\u573f\u5745\u5746\u574c\u574d\u5752\u5762\u5765\u5767\u5768\u576b\u576d",4,"\u5773\u5774\u5775\u5777\u5779\u577a\u577b\u577c\u577e\u5781\u5783\u578c\u5794\u5797\u5799\u579a\u579c\u579d\u579e\u579f\u57a1\u5795\u57a7\u57a8\u57a9\u57ac\u57b8\u57bd\u57c7\u57c8\u57cc\u57cf\u57d5\u57dd\u57de\u57e4\u57e6\u57e7\u57e9\u57ed\u57f0\u57f5\u57f6\u57f8\u57fd\u57fe\u57ff\u5803\u5804\u5808\u5809\u57e1"],["8fb8a1","\u580c\u580d\u581b\u581e\u581f\u5820\u5826\u5827\u582d\u5832\u5839\u583f\u5849\u584c\u584d\u584f\u5850\u5855\u585f\u5861\u5864\u5867\u5868\u5878\u587c\u587f\u5880\u5881\u5887\u5888\u5889\u588a\u588c\u588d\u588f\u5890\u5894\u5896\u589d\u58a0\u58a1\u58a2\u58a6\u58a9\u58b1\u58b2\u58c4\u58bc\u58c2\u58c8\u58cd\u58ce\u58d0\u58d2\u58d4\u58d6\u58da\u58dd\u58e1\u58e2\u58e9\u58f3\u5905\u5906\u590b\u590c\u5912\u5913\u5914\u8641\u591d\u5921\u5923\u5924\u5928\u592f\u5930\u5933\u5935\u5936\u593f\u5943\u5946\u5952\u5953\u5959\u595b\u595d\u595e\u595f\u5961\u5963\u596b\u596d"],["8fb9a1","\u596f\u5972\u5975\u5976\u5979\u597b\u597c\u598b\u598c\u598e\u5992\u5995\u5997\u599f\u59a4\u59a7\u59ad\u59ae\u59af\u59b0\u59b3\u59b7\u59ba\u59bc\u59c1\u59c3\u59c4\u59c8\u59ca\u59cd\u59d2\u59dd\u59de\u59df\u59e3\u59e4\u59e7\u59ee\u59ef\u59f1\u59f2\u59f4\u59f7\u5a00\u5a04\u5a0c\u5a0d\u5a0e\u5a12\u5a13\u5a1e\u5a23\u5a24\u5a27\u5a28\u5a2a\u5a2d\u5a30\u5a44\u5a45\u5a47\u5a48\u5a4c\u5a50\u5a55\u5a5e\u5a63\u5a65\u5a67\u5a6d\u5a77\u5a7a\u5a7b\u5a7e\u5a8b\u5a90\u5a93\u5a96\u5a99\u5a9c\u5a9e\u5a9f\u5aa0\u5aa2\u5aa7\u5aac\u5ab1\u5ab2\u5ab3\u5ab5\u5ab8\u5aba\u5abb\u5abf"],["8fbaa1","\u5ac4\u5ac6\u5ac8\u5acf\u5ada\u5adc\u5ae0\u5ae5\u5aea\u5aee\u5af5\u5af6\u5afd\u5b00\u5b01\u5b08\u5b17\u5b34\u5b19\u5b1b\u5b1d\u5b21\u5b25\u5b2d\u5b38\u5b41\u5b4b\u5b4c\u5b52\u5b56\u5b5e\u5b68\u5b6e\u5b6f\u5b7c\u5b7d\u5b7e\u5b7f\u5b81\u5b84\u5b86\u5b8a\u5b8e\u5b90\u5b91\u5b93\u5b94\u5b96\u5ba8\u5ba9\u5bac\u5bad\u5baf\u5bb1\u5bb2\u5bb7\u5bba\u5bbc\u5bc0\u5bc1\u5bcd\u5bcf\u5bd6",4,"\u5be0\u5bef\u5bf1\u5bf4\u5bfd\u5c0c\u5c17\u5c1e\u5c1f\u5c23\u5c26\u5c29\u5c2b\u5c2c\u5c2e\u5c30\u5c32\u5c35\u5c36\u5c59\u5c5a\u5c5c\u5c62\u5c63\u5c67\u5c68\u5c69"],["8fbba1","\u5c6d\u5c70\u5c74\u5c75\u5c7a\u5c7b\u5c7c\u5c7d\u5c87\u5c88\u5c8a\u5c8f\u5c92\u5c9d\u5c9f\u5ca0\u5ca2\u5ca3\u5ca6\u5caa\u5cb2\u5cb4\u5cb5\u5cba\u5cc9\u5ccb\u5cd2\u5cdd\u5cd7\u5cee\u5cf1\u5cf2\u5cf4\u5d01\u5d06\u5d0d\u5d12\u5d2b\u5d23\u5d24\u5d26\u5d27\u5d31\u5d34\u5d39\u5d3d\u5d3f\u5d42\u5d43\u5d46\u5d48\u5d55\u5d51\u5d59\u5d4a\u5d5f\u5d60\u5d61\u5d62\u5d64\u5d6a\u5d6d\u5d70\u5d79\u5d7a\u5d7e\u5d7f\u5d81\u5d83\u5d88\u5d8a\u5d92\u5d93\u5d94\u5d95\u5d99\u5d9b\u5d9f\u5da0\u5da7\u5dab\u5db0\u5db4\u5db8\u5db9\u5dc3\u5dc7\u5dcb\u5dd0\u5dce\u5dd8\u5dd9\u5de0\u5de4"],["8fbca1","\u5de9\u5df8\u5df9\u5e00\u5e07\u5e0d\u5e12\u5e14\u5e15\u5e18\u5e1f\u5e20\u5e2e\u5e28\u5e32\u5e35\u5e3e\u5e4b\u5e50\u5e49\u5e51\u5e56\u5e58\u5e5b\u5e5c\u5e5e\u5e68\u5e6a",4,"\u5e70\u5e80\u5e8b\u5e8e\u5ea2\u5ea4\u5ea5\u5ea8\u5eaa\u5eac\u5eb1\u5eb3\u5ebd\u5ebe\u5ebf\u5ec6\u5ecc\u5ecb\u5ece\u5ed1\u5ed2\u5ed4\u5ed5\u5edc\u5ede\u5ee5\u5eeb\u5f02\u5f06\u5f07\u5f08\u5f0e\u5f19\u5f1c\u5f1d\u5f21\u5f22\u5f23\u5f24\u5f28\u5f2b\u5f2c\u5f2e\u5f30\u5f34\u5f36\u5f3b\u5f3d\u5f3f\u5f40\u5f44\u5f45\u5f47\u5f4d\u5f50\u5f54\u5f58\u5f5b\u5f60\u5f63\u5f64\u5f67"],["8fbda1","\u5f6f\u5f72\u5f74\u5f75\u5f78\u5f7a\u5f7d\u5f7e\u5f89\u5f8d\u5f8f\u5f96\u5f9c\u5f9d\u5fa2\u5fa7\u5fab\u5fa4\u5fac\u5faf\u5fb0\u5fb1\u5fb8\u5fc4\u5fc7\u5fc8\u5fc9\u5fcb\u5fd0",4,"\u5fde\u5fe1\u5fe2\u5fe8\u5fe9\u5fea\u5fec\u5fed\u5fee\u5fef\u5ff2\u5ff3\u5ff6\u5ffa\u5ffc\u6007\u600a\u600d\u6013\u6014\u6017\u6018\u601a\u601f\u6024\u602d\u6033\u6035\u6040\u6047\u6048\u6049\u604c\u6051\u6054\u6056\u6057\u605d\u6061\u6067\u6071\u607e\u607f\u6082\u6086\u6088\u608a\u608e\u6091\u6093\u6095\u6098\u609d\u609e\u60a2\u60a4\u60a5\u60a8\u60b0\u60b1\u60b7"],["8fbea1","\u60bb\u60be\u60c2\u60c4\u60c8\u60c9\u60ca\u60cb\u60ce\u60cf\u60d4\u60d5\u60d9\u60db\u60dd\u60de\u60e2\u60e5\u60f2\u60f5\u60f8\u60fc\u60fd\u6102\u6107\u610a\u610c\u6110",4,"\u6116\u6117\u6119\u611c\u611e\u6122\u612a\u612b\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615e\u6160\u616c\u6172\u6178\u617b\u617c\u617f\u6180\u6181\u6183\u6184\u618b\u618d\u6192\u6193\u6197\u6198\u619c\u619d\u619f\u61a0\u61a5\u61a8\u61aa\u61ad\u61b8\u61b9\u61bc\u61c0\u61c1\u61c2\u61ce\u61cf\u61d5\u61dc\u61dd\u61de\u61df\u61e1\u61e2\u61e7\u61e9\u61e5"],["8fbfa1","\u61ec\u61ed\u61ef\u6201\u6203\u6204\u6207\u6213\u6215\u621c\u6220\u6222\u6223\u6227\u6229\u622b\u6239\u623d\u6242\u6243\u6244\u6246\u624c\u6250\u6251\u6252\u6254\u6256\u625a\u625c\u6264\u626d\u626f\u6273\u627a\u627d\u628d\u628e\u628f\u6290\u62a6\u62a8\u62b3\u62b6\u62b7\u62ba\u62be\u62bf\u62c4\u62ce\u62d5\u62d6\u62da\u62ea\u62f2\u62f4\u62fc\u62fd\u6303\u6304\u630a\u630b\u630d\u6310\u6313\u6316\u6318\u6329\u632a\u632d\u6335\u6336\u6339\u633c\u6341\u6342\u6343\u6344\u6346\u634a\u634b\u634e\u6352\u6353\u6354\u6358\u635b\u6365\u6366\u636c\u636d\u6371\u6374\u6375"],["8fc0a1","\u6378\u637c\u637d\u637f\u6382\u6384\u6387\u638a\u6390\u6394\u6395\u6399\u639a\u639e\u63a4\u63a6\u63ad\u63ae\u63af\u63bd\u63c1\u63c5\u63c8\u63ce\u63d1\u63d3\u63d4\u63d5\u63dc\u63e0\u63e5\u63ea\u63ec\u63f2\u63f3\u63f5\u63f8\u63f9\u6409\u640a\u6410\u6412\u6414\u6418\u641e\u6420\u6422\u6424\u6425\u6429\u642a\u642f\u6430\u6435\u643d\u643f\u644b\u644f\u6451\u6452\u6453\u6454\u645a\u645b\u645c\u645d\u645f\u6460\u6461\u6463\u646d\u6473\u6474\u647b\u647d\u6485\u6487\u648f\u6490\u6491\u6498\u6499\u649b\u649d\u649f\u64a1\u64a3\u64a6\u64a8\u64ac\u64b3\u64bd\u64be\u64bf"],["8fc1a1","\u64c4\u64c9\u64ca\u64cb\u64cc\u64ce\u64d0\u64d1\u64d5\u64d7\u64e4\u64e5\u64e9\u64ea\u64ed\u64f0\u64f5\u64f7\u64fb\u64ff\u6501\u6504\u6508\u6509\u650a\u650f\u6513\u6514\u6516\u6519\u651b\u651e\u651f\u6522\u6526\u6529\u652e\u6531\u653a\u653c\u653d\u6543\u6547\u6549\u6550\u6552\u6554\u655f\u6560\u6567\u656b\u657a\u657d\u6581\u6585\u658a\u6592\u6595\u6598\u659d\u65a0\u65a3\u65a6\u65ae\u65b2\u65b3\u65b4\u65bf\u65c2\u65c8\u65c9\u65ce\u65d0\u65d4\u65d6\u65d8\u65df\u65f0\u65f2\u65f4\u65f5\u65f9\u65fe\u65ff\u6600\u6604\u6608\u6609\u660d\u6611\u6612\u6615\u6616\u661d"],["8fc2a1","\u661e\u6621\u6622\u6623\u6624\u6626\u6629\u662a\u662b\u662c\u662e\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664a\u664c\u6651\u664e\u6657\u6658\u6659\u665b\u665c\u6660\u6661\u66fb\u666a\u666b\u666c\u667e\u6673\u6675\u667f\u6677\u6678\u6679\u667b\u6680\u667c\u668b\u668c\u668d\u6690\u6692\u6699\u669a\u669b\u669c\u669f\u66a0\u66a4\u66ad\u66b1\u66b2\u66b5\u66bb\u66bf\u66c0\u66c2\u66c3\u66c8\u66cc\u66ce\u66cf\u66d4\u66db\u66df\u66e8\u66eb\u66ec\u66ee\u66fa\u6705\u6707\u670e\u6713\u6719\u671c\u6720\u6722\u6733\u673e\u6745\u6747\u6748\u674c\u6754\u6755\u675d"],["8fc3a1","\u6766\u676c\u676e\u6774\u6776\u677b\u6781\u6784\u678e\u678f\u6791\u6793\u6796\u6798\u6799\u679b\u67b0\u67b1\u67b2\u67b5\u67bb\u67bc\u67bd\u67f9\u67c0\u67c2\u67c3\u67c5\u67c8\u67c9\u67d2\u67d7\u67d9\u67dc\u67e1\u67e6\u67f0\u67f2\u67f6\u67f7\u6852\u6814\u6819\u681d\u681f\u6828\u6827\u682c\u682d\u682f\u6830\u6831\u6833\u683b\u683f\u6844\u6845\u684a\u684c\u6855\u6857\u6858\u685b\u686b\u686e",4,"\u6875\u6879\u687a\u687b\u687c\u6882\u6884\u6886\u6888\u6896\u6898\u689a\u689c\u68a1\u68a3\u68a5\u68a9\u68aa\u68ae\u68b2\u68bb\u68c5\u68c8\u68cc\u68cf"],["8fc4a1","\u68d0\u68d1\u68d3\u68d6\u68d9\u68dc\u68dd\u68e5\u68e8\u68ea\u68eb\u68ec\u68ed\u68f0\u68f1\u68f5\u68f6\u68fb\u68fc\u68fd\u6906\u6909\u690a\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693b\u6942\u6945\u6949\u694e\u6957\u695b\u6963\u6964\u6965\u6966\u6968\u6969\u696c\u6970\u6971\u6972\u697a\u697b\u697f\u6980\u698d\u6992\u6996\u6998\u69a1\u69a5\u69a6\u69a8\u69ab\u69ad\u69af\u69b7\u69b8\u69ba\u69bc\u69c5\u69c8\u69d1\u69d6\u69d7\u69e2\u69e5\u69ee\u69ef\u69f1\u69f3\u69f5\u69fe\u6a00\u6a01\u6a03\u6a0f\u6a11\u6a15\u6a1a\u6a1d\u6a20\u6a24\u6a28\u6a30\u6a32"],["8fc5a1","\u6a34\u6a37\u6a3b\u6a3e\u6a3f\u6a45\u6a46\u6a49\u6a4a\u6a4e\u6a50\u6a51\u6a52\u6a55\u6a56\u6a5b\u6a64\u6a67\u6a6a\u6a71\u6a73\u6a7e\u6a81\u6a83\u6a86\u6a87\u6a89\u6a8b\u6a91\u6a9b\u6a9d\u6a9e\u6a9f\u6aa5\u6aab\u6aaf\u6ab0\u6ab1\u6ab4\u6abd\u6abe\u6abf\u6ac6\u6ac9\u6ac8\u6acc\u6ad0\u6ad4\u6ad5\u6ad6\u6adc\u6add\u6ae4\u6ae7\u6aec\u6af0\u6af1\u6af2\u6afc\u6afd\u6b02\u6b03\u6b06\u6b07\u6b09\u6b0f\u6b10\u6b11\u6b17\u6b1b\u6b1e\u6b24\u6b28\u6b2b\u6b2c\u6b2f\u6b35\u6b36\u6b3b\u6b3f\u6b46\u6b4a\u6b4d\u6b52\u6b56\u6b58\u6b5d\u6b60\u6b67\u6b6b\u6b6e\u6b70\u6b75\u6b7d"],["8fc6a1","\u6b7e\u6b82\u6b85\u6b97\u6b9b\u6b9f\u6ba0\u6ba2\u6ba3\u6ba8\u6ba9\u6bac\u6bad\u6bae\u6bb0\u6bb8\u6bb9\u6bbd\u6bbe\u6bc3\u6bc4\u6bc9\u6bcc\u6bd6\u6bda\u6be1\u6be3\u6be6\u6be7\u6bee\u6bf1\u6bf7\u6bf9\u6bff\u6c02\u6c04\u6c05\u6c09\u6c0d\u6c0e\u6c10\u6c12\u6c19\u6c1f\u6c26\u6c27\u6c28\u6c2c\u6c2e\u6c33\u6c35\u6c36\u6c3a\u6c3b\u6c3f\u6c4a\u6c4b\u6c4d\u6c4f\u6c52\u6c54\u6c59\u6c5b\u6c5c\u6c6b\u6c6d\u6c6f\u6c74\u6c76\u6c78\u6c79\u6c7b\u6c85\u6c86\u6c87\u6c89\u6c94\u6c95\u6c97\u6c98\u6c9c\u6c9f\u6cb0\u6cb2\u6cb4\u6cc2\u6cc6\u6ccd\u6ccf\u6cd0\u6cd1\u6cd2\u6cd4\u6cd6"],["8fc7a1","\u6cda\u6cdc\u6ce0\u6ce7\u6ce9\u6ceb\u6cec\u6cee\u6cf2\u6cf4\u6d04\u6d07\u6d0a\u6d0e\u6d0f\u6d11\u6d13\u6d1a\u6d26\u6d27\u6d28\u6c67\u6d2e\u6d2f\u6d31\u6d39\u6d3c\u6d3f\u6d57\u6d5e\u6d5f\u6d61\u6d65\u6d67\u6d6f\u6d70\u6d7c\u6d82\u6d87\u6d91\u6d92\u6d94\u6d96\u6d97\u6d98\u6daa\u6dac\u6db4\u6db7\u6db9\u6dbd\u6dbf\u6dc4\u6dc8\u6dca\u6dce\u6dcf\u6dd6\u6ddb\u6ddd\u6ddf\u6de0\u6de2\u6de5\u6de9\u6def\u6df0\u6df4\u6df6\u6dfc\u6e00\u6e04\u6e1e\u6e22\u6e27\u6e32\u6e36\u6e39\u6e3b\u6e3c\u6e44\u6e45\u6e48\u6e49\u6e4b\u6e4f\u6e51\u6e52\u6e53\u6e54\u6e57\u6e5c\u6e5d\u6e5e"],["8fc8a1","\u6e62\u6e63\u6e68\u6e73\u6e7b\u6e7d\u6e8d\u6e93\u6e99\u6ea0\u6ea7\u6ead\u6eae\u6eb1\u6eb3\u6ebb\u6ebf\u6ec0\u6ec1\u6ec3\u6ec7\u6ec8\u6eca\u6ecd\u6ece\u6ecf\u6eeb\u6eed\u6eee\u6ef9\u6efb\u6efd\u6f04\u6f08\u6f0a\u6f0c\u6f0d\u6f16\u6f18\u6f1a\u6f1b\u6f26\u6f29\u6f2a\u6f2f\u6f30\u6f33\u6f36\u6f3b\u6f3c\u6f2d\u6f4f\u6f51\u6f52\u6f53\u6f57\u6f59\u6f5a\u6f5d\u6f5e\u6f61\u6f62\u6f68\u6f6c\u6f7d\u6f7e\u6f83\u6f87\u6f88\u6f8b\u6f8c\u6f8d\u6f90\u6f92\u6f93\u6f94\u6f96\u6f9a\u6f9f\u6fa0\u6fa5\u6fa6\u6fa7\u6fa8\u6fae\u6faf\u6fb0\u6fb5\u6fb6\u6fbc\u6fc5\u6fc7\u6fc8\u6fca"],["8fc9a1","\u6fda\u6fde\u6fe8\u6fe9\u6ff0\u6ff5\u6ff9\u6ffc\u6ffd\u7000\u7005\u7006\u7007\u700d\u7017\u7020\u7023\u702f\u7034\u7037\u7039\u703c\u7043\u7044\u7048\u7049\u704a\u704b\u7054\u7055\u705d\u705e\u704e\u7064\u7065\u706c\u706e\u7075\u7076\u707e\u7081\u7085\u7086\u7094",4,"\u709b\u70a4\u70ab\u70b0\u70b1\u70b4\u70b7\u70ca\u70d1\u70d3\u70d4\u70d5\u70d6\u70d8\u70dc\u70e4\u70fa\u7103",4,"\u710b\u710c\u710f\u711e\u7120\u712b\u712d\u712f\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714a\u714b\u7150\u7152\u7157\u715a\u715c\u715e\u7160"],["8fcaa1","\u7168\u7179\u7180\u7185\u7187\u718c\u7192\u719a\u719b\u71a0\u71a2\u71af\u71b0\u71b2\u71b3\u71ba\u71bf\u71c0\u71c1\u71c4\u71cb\u71cc\u71d3\u71d6\u71d9\u71da\u71dc\u71f8\u71fe\u7200\u7207\u7208\u7209\u7213\u7217\u721a\u721d\u721f\u7224\u722b\u722f\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724e\u724f\u7250\u7253\u7255\u7256\u725a\u725c\u725e\u7260\u7263\u7268\u726b\u726e\u726f\u7271\u7277\u7278\u727b\u727c\u727f\u7284\u7289\u728d\u728e\u7293\u729b\u72a8\u72ad\u72ae\u72b1\u72b4\u72be\u72c1\u72c7\u72c9\u72cc\u72d5\u72d6\u72d8\u72df\u72e5\u72f3\u72f4\u72fa\u72fb"],["8fcba1","\u72fe\u7302\u7304\u7305\u7307\u730b\u730d\u7312\u7313\u7318\u7319\u731e\u7322\u7324\u7327\u7328\u732c\u7331\u7332\u7335\u733a\u733b\u733d\u7343\u734d\u7350\u7352\u7356\u7358\u735d\u735e\u735f\u7360\u7366\u7367\u7369\u736b\u736c\u736e\u736f\u7371\u7377\u7379\u737c\u7380\u7381\u7383\u7385\u7386\u738e\u7390\u7393\u7395\u7397\u7398\u739c\u739e\u739f\u73a0\u73a2\u73a5\u73a6\u73aa\u73ab\u73ad\u73b5\u73b7\u73b9\u73bc\u73bd\u73bf\u73c5\u73c6\u73c9\u73cb\u73cc\u73cf\u73d2\u73d3\u73d6\u73d9\u73dd\u73e1\u73e3\u73e6\u73e7\u73e9\u73f4\u73f5\u73f7\u73f9\u73fa\u73fb\u73fd"],["8fcca1","\u73ff\u7400\u7401\u7404\u7407\u740a\u7411\u741a\u741b\u7424\u7426\u7428",9,"\u7439\u7440\u7443\u7444\u7446\u7447\u744b\u744d\u7451\u7452\u7457\u745d\u7462\u7466\u7467\u7468\u746b\u746d\u746e\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748f\u7490\u7491\u7492\u7498\u7499\u749a\u749c\u749f\u74a0\u74a1\u74a3\u74a6\u74a8\u74a9\u74aa\u74ab\u74ae\u74af\u74b1\u74b2\u74b5\u74b9\u74bb\u74bf\u74c8\u74c9\u74cc\u74d0\u74d3\u74d8\u74da\u74db\u74de\u74df\u74e4\u74e8\u74ea\u74eb\u74ef\u74f4\u74fa\u74fb\u74fc\u74ff\u7506"],["8fcda1","\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752a\u752f\u7536\u7539\u753d\u753e\u753f\u7540\u7543\u7547\u7548\u754e\u7550\u7552\u7557\u755e\u755f\u7561\u756f\u7571\u7579",5,"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759c\u75a2\u75a4\u75b4\u75ba\u75bf\u75c0\u75c1\u75c4\u75c6\u75cc\u75ce\u75cf\u75d7\u75dc\u75df\u75e0\u75e1\u75e4\u75e7\u75ec\u75ee\u75ef\u75f1\u75f9\u7600\u7602\u7603\u7604\u7607\u7608\u760a\u760c\u760f\u7612\u7613\u7615\u7616\u7619\u761b\u761c\u761d\u761e\u7623\u7625\u7626\u7629\u762d\u7632\u7633\u7635\u7638\u7639"],["8fcea1","\u763a\u763c\u764a\u7640\u7641\u7643\u7644\u7645\u7649\u764b\u7655\u7659\u765f\u7664\u7665\u766d\u766e\u766f\u7671\u7674\u7681\u7685\u768c\u768d\u7695\u769b\u769c\u769d\u769f\u76a0\u76a2",6,"\u76aa\u76ad\u76bd\u76c1\u76c5\u76c9\u76cb\u76cc\u76ce\u76d4\u76d9\u76e0\u76e6\u76e8\u76ec\u76f0\u76f1\u76f6\u76f9\u76fc\u7700\u7706\u770a\u770e\u7712\u7714\u7715\u7717\u7719\u771a\u771c\u7722\u7728\u772d\u772e\u772f\u7734\u7735\u7736\u7739\u773d\u773e\u7742\u7745\u7746\u774a\u774d\u774e\u774f\u7752\u7756\u7757\u775c\u775e\u775f\u7760\u7762"],["8fcfa1","\u7764\u7767\u776a\u776c\u7770\u7772\u7773\u7774\u777a\u777d\u7780\u7784\u778c\u778d\u7794\u7795\u7796\u779a\u779f\u77a2\u77a7\u77aa\u77ae\u77af\u77b1\u77b5\u77be\u77c3\u77c9\u77d1\u77d2\u77d5\u77d9\u77de\u77df\u77e0\u77e4\u77e6\u77ea\u77ec\u77f0\u77f1\u77f4\u77f8\u77fb\u7805\u7806\u7809\u780d\u780e\u7811\u781d\u7821\u7822\u7823\u782d\u782e\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784c\u784e\u7852\u785c\u785e\u7860\u7861\u7863\u7864\u7868\u786a\u786e\u787a\u787e\u788a\u788f\u7894\u7898\u78a1\u789d\u789e\u789f\u78a4\u78a8\u78ac\u78ad\u78b0\u78b1\u78b2\u78b3"],["8fd0a1","\u78bb\u78bd\u78bf\u78c7\u78c8\u78c9\u78cc\u78ce\u78d2\u78d3\u78d5\u78d6\u78e4\u78db\u78df\u78e0\u78e1\u78e6\u78ea\u78f2\u78f3\u7900\u78f6\u78f7\u78fa\u78fb\u78ff\u7906\u790c\u7910\u791a\u791c\u791e\u791f\u7920\u7925\u7927\u7929\u792d\u7931\u7934\u7935\u793b\u793d\u793f\u7944\u7945\u7946\u794a\u794b\u794f\u7951\u7954\u7958\u795b\u795c\u7967\u7969\u796b\u7972\u7979\u797b\u797c\u797e\u798b\u798c\u7991\u7993\u7994\u7995\u7996\u7998\u799b\u799c\u79a1\u79a8\u79a9\u79ab\u79af\u79b1\u79b4\u79b8\u79bb\u79c2\u79c4\u79c7\u79c8\u79ca\u79cf\u79d4\u79d6\u79da\u79dd\u79de"],["8fd1a1","\u79e0\u79e2\u79e5\u79ea\u79eb\u79ed\u79f1\u79f8\u79fc\u7a02\u7a03\u7a07\u7a09\u7a0a\u7a0c\u7a11\u7a15\u7a1b\u7a1e\u7a21\u7a27\u7a2b\u7a2d\u7a2f\u7a30\u7a34\u7a35\u7a38\u7a39\u7a3a\u7a44\u7a45\u7a47\u7a48\u7a4c\u7a55\u7a56\u7a59\u7a5c\u7a5d\u7a5f\u7a60\u7a65\u7a67\u7a6a\u7a6d\u7a75\u7a78\u7a7e\u7a80\u7a82\u7a85\u7a86\u7a8a\u7a8b\u7a90\u7a91\u7a94\u7a9e\u7aa0\u7aa3\u7aac\u7ab3\u7ab5\u7ab9\u7abb\u7abc\u7ac6\u7ac9\u7acc\u7ace\u7ad1\u7adb\u7ae8\u7ae9\u7aeb\u7aec\u7af1\u7af4\u7afb\u7afd\u7afe\u7b07\u7b14\u7b1f\u7b23\u7b27\u7b29\u7b2a\u7b2b\u7b2d\u7b2e\u7b2f\u7b30"],["8fd2a1","\u7b31\u7b34\u7b3d\u7b3f\u7b40\u7b41\u7b47\u7b4e\u7b55\u7b60\u7b64\u7b66\u7b69\u7b6a\u7b6d\u7b6f\u7b72\u7b73\u7b77\u7b84\u7b89\u7b8e\u7b90\u7b91\u7b96\u7b9b\u7b9e\u7ba0\u7ba5\u7bac\u7baf\u7bb0\u7bb2\u7bb5\u7bb6\u7bba\u7bbb\u7bbc\u7bbd\u7bc2\u7bc5\u7bc8\u7bca\u7bd4\u7bd6\u7bd7\u7bd9\u7bda\u7bdb\u7be8\u7bea\u7bf2\u7bf4\u7bf5\u7bf8\u7bf9\u7bfa\u7bfc\u7bfe\u7c01\u7c02\u7c03\u7c04\u7c06\u7c09\u7c0b\u7c0c\u7c0e\u7c0f\u7c19\u7c1b\u7c20\u7c25\u7c26\u7c28\u7c2c\u7c31\u7c33\u7c34\u7c36\u7c39\u7c3a\u7c46\u7c4a\u7c55\u7c51\u7c52\u7c53\u7c59",5],["8fd3a1","\u7c61\u7c63\u7c67\u7c69\u7c6d\u7c6e\u7c70\u7c72\u7c79\u7c7c\u7c7d\u7c86\u7c87\u7c8f\u7c94\u7c9e\u7ca0\u7ca6\u7cb0\u7cb6\u7cb7\u7cba\u7cbb\u7cbc\u7cbf\u7cc4\u7cc7\u7cc8\u7cc9\u7ccd\u7ccf\u7cd3\u7cd4\u7cd5\u7cd7\u7cd9\u7cda\u7cdd\u7ce6\u7ce9\u7ceb\u7cf5\u7d03\u7d07\u7d08\u7d09\u7d0f\u7d11\u7d12\u7d13\u7d16\u7d1d\u7d1e\u7d23\u7d26\u7d2a\u7d2d\u7d31\u7d3c\u7d3d\u7d3e\u7d40\u7d41\u7d47\u7d48\u7d4d\u7d51\u7d53\u7d57\u7d59\u7d5a\u7d5c\u7d5d\u7d65\u7d67\u7d6a\u7d70\u7d78\u7d7a\u7d7b\u7d7f\u7d81\u7d82\u7d83\u7d85\u7d86\u7d88\u7d8b\u7d8c\u7d8d\u7d91\u7d96\u7d97\u7d9d"],["8fd4a1","\u7d9e\u7da6\u7da7\u7daa\u7db3\u7db6\u7db7\u7db9\u7dc2",4,"\u7dcc\u7dcd\u7dce\u7dd7\u7dd9\u7e00\u7de2\u7de5\u7de6\u7dea\u7deb\u7ded\u7df1\u7df5\u7df6\u7df9\u7dfa\u7e08\u7e10\u7e11\u7e15\u7e17\u7e1c\u7e1d\u7e20\u7e27\u7e28\u7e2c\u7e2d\u7e2f\u7e33\u7e36\u7e3f\u7e44\u7e45\u7e47\u7e4e\u7e50\u7e52\u7e58\u7e5f\u7e61\u7e62\u7e65\u7e6b\u7e6e\u7e6f\u7e73\u7e78\u7e7e\u7e81\u7e86\u7e87\u7e8a\u7e8d\u7e91\u7e95\u7e98\u7e9a\u7e9d\u7e9e\u7f3c\u7f3b\u7f3d\u7f3e\u7f3f\u7f43\u7f44\u7f47\u7f4f\u7f52\u7f53\u7f5b\u7f5c\u7f5d\u7f61\u7f63\u7f64\u7f65\u7f66\u7f6d"],["8fd5a1","\u7f71\u7f7d\u7f7e\u7f7f\u7f80\u7f8b\u7f8d\u7f8f\u7f90\u7f91\u7f96\u7f97\u7f9c\u7fa1\u7fa2\u7fa6\u7faa\u7fad\u7fb4\u7fbc\u7fbf\u7fc0\u7fc3\u7fc8\u7fce\u7fcf\u7fdb\u7fdf\u7fe3\u7fe5\u7fe8\u7fec\u7fee\u7fef\u7ff2\u7ffa\u7ffd\u7ffe\u7fff\u8007\u8008\u800a\u800d\u800e\u800f\u8011\u8013\u8014\u8016\u801d\u801e\u801f\u8020\u8024\u8026\u802c\u802e\u8030\u8034\u8035\u8037\u8039\u803a\u803c\u803e\u8040\u8044\u8060\u8064\u8066\u806d\u8071\u8075\u8081\u8088\u808e\u809c\u809e\u80a6\u80a7\u80ab\u80b8\u80b9\u80c8\u80cd\u80cf\u80d2\u80d4\u80d5\u80d7\u80d8\u80e0\u80ed\u80ee"],["8fd6a1","\u80f0\u80f2\u80f3\u80f6\u80f9\u80fa\u80fe\u8103\u810b\u8116\u8117\u8118\u811c\u811e\u8120\u8124\u8127\u812c\u8130\u8135\u813a\u813c\u8145\u8147\u814a\u814c\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816d\u816f\u8177\u8181\u8190\u8184\u8185\u8186\u818b\u818e\u8196\u8198\u819b\u819e\u81a2\u81ae\u81b2\u81b4\u81bb\u81cb\u81c3\u81c5\u81ca\u81ce\u81cf\u81d5\u81d7\u81db\u81dd\u81de\u81e1\u81e4\u81eb\u81ec\u81f0\u81f1\u81f2\u81f5\u81f6\u81f8\u81f9\u81fd\u81ff\u8200\u8203\u820f\u8213\u8214\u8219\u821a\u821d\u8221\u8222\u8228\u8232\u8234\u823a\u8243\u8244\u8245\u8246"],["8fd7a1","\u824b\u824e\u824f\u8251\u8256\u825c\u8260\u8263\u8267\u826d\u8274\u827b\u827d\u827f\u8280\u8281\u8283\u8284\u8287\u8289\u828a\u828e\u8291\u8294\u8296\u8298\u829a\u829b\u82a0\u82a1\u82a3\u82a4\u82a7\u82a8\u82a9\u82aa\u82ae\u82b0\u82b2\u82b4\u82b7\u82ba\u82bc\u82be\u82bf\u82c6\u82d0\u82d5\u82da\u82e0\u82e2\u82e4\u82e8\u82ea\u82ed\u82ef\u82f6\u82f7\u82fd\u82fe\u8300\u8301\u8307\u8308\u830a\u830b\u8354\u831b\u831d\u831e\u831f\u8321\u8322\u832c\u832d\u832e\u8330\u8333\u8337\u833a\u833c\u833d\u8342\u8343\u8344\u8347\u834d\u834e\u8351\u8355\u8356\u8357\u8370\u8378"],["8fd8a1","\u837d\u837f\u8380\u8382\u8384\u8386\u838d\u8392\u8394\u8395\u8398\u8399\u839b\u839c\u839d\u83a6\u83a7\u83a9\u83ac\u83be\u83bf\u83c0\u83c7\u83c9\u83cf\u83d0\u83d1\u83d4\u83dd\u8353\u83e8\u83ea\u83f6\u83f8\u83f9\u83fc\u8401\u8406\u840a\u840f\u8411\u8415\u8419\u83ad\u842f\u8439\u8445\u8447\u8448\u844a\u844d\u844f\u8451\u8452\u8456\u8458\u8459\u845a\u845c\u8460\u8464\u8465\u8467\u846a\u8470\u8473\u8474\u8476\u8478\u847c\u847d\u8481\u8485\u8492\u8493\u8495\u849e\u84a6\u84a8\u84a9\u84aa\u84af\u84b1\u84b4\u84ba\u84bd\u84be\u84c0\u84c2\u84c7\u84c8\u84cc\u84cf\u84d3"],["8fd9a1","\u84dc\u84e7\u84ea\u84ef\u84f0\u84f1\u84f2\u84f7\u8532\u84fa\u84fb\u84fd\u8502\u8503\u8507\u850c\u850e\u8510\u851c\u851e\u8522\u8523\u8524\u8525\u8527\u852a\u852b\u852f\u8533\u8534\u8536\u853f\u8546\u854f",4,"\u8556\u8559\u855c",6,"\u8564\u856b\u856f\u8579\u857a\u857b\u857d\u857f\u8581\u8585\u8586\u8589\u858b\u858c\u858f\u8593\u8598\u859d\u859f\u85a0\u85a2\u85a5\u85a7\u85b4\u85b6\u85b7\u85b8\u85bc\u85bd\u85be\u85bf\u85c2\u85c7\u85ca\u85cb\u85ce\u85ad\u85d8\u85da\u85df\u85e0\u85e6\u85e8\u85ed\u85f3\u85f6\u85fc"],["8fdaa1","\u85ff\u8600\u8604\u8605\u860d\u860e\u8610\u8611\u8612\u8618\u8619\u861b\u861e\u8621\u8627\u8629\u8636\u8638\u863a\u863c\u863d\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865d\u8660",4,"\u8669\u866c\u866f\u8675\u8676\u8677\u867a\u868d\u8691\u8696\u8698\u869a\u869c\u86a1\u86a6\u86a7\u86a8\u86ad\u86b1\u86b3\u86b4\u86b5\u86b7\u86b8\u86b9\u86bf\u86c0\u86c1\u86c3\u86c5\u86d1\u86d2\u86d5\u86d7\u86da\u86dc\u86e0\u86e3\u86e5\u86e7\u8688\u86fa\u86fc\u86fd\u8704\u8705\u8707\u870b\u870e\u870f\u8710\u8713\u8714\u8719\u871e\u871f\u8721\u8723"],["8fdba1","\u8728\u872e\u872f\u8731\u8732\u8739\u873a\u873c\u873d\u873e\u8740\u8743\u8745\u874d\u8758\u875d\u8761\u8764\u8765\u876f\u8771\u8772\u877b\u8783",6,"\u878b\u878c\u8790\u8793\u8795\u8797\u8798\u8799\u879e\u87a0\u87a3\u87a7\u87ac\u87ad\u87ae\u87b1\u87b5\u87be\u87bf\u87c1\u87c8\u87c9\u87ca\u87ce\u87d5\u87d6\u87d9\u87da\u87dc\u87df\u87e2\u87e3\u87e4\u87ea\u87eb\u87ed\u87f1\u87f3\u87f8\u87fa\u87ff\u8801\u8803\u8806\u8809\u880a\u880b\u8810\u8819\u8812\u8813\u8814\u8818\u881a\u881b\u881c\u881e\u881f\u8828\u882d\u882e\u8830\u8832\u8835"],["8fdca1","\u883a\u883c\u8841\u8843\u8845\u8848\u8849\u884a\u884b\u884e\u8851\u8855\u8856\u8858\u885a\u885c\u885f\u8860\u8864\u8869\u8871\u8879\u887b\u8880\u8898\u889a\u889b\u889c\u889f\u88a0\u88a8\u88aa\u88ba\u88bd\u88be\u88c0\u88ca",4,"\u88d1\u88d2\u88d3\u88db\u88de\u88e7\u88ef\u88f0\u88f1\u88f5\u88f7\u8901\u8906\u890d\u890e\u890f\u8915\u8916\u8918\u8919\u891a\u891c\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893a\u893e\u8940\u8942\u8945\u8946\u8949\u894f\u8952\u8957\u895a\u895b\u895c\u8961\u8962\u8963\u896b\u896e\u8970\u8973\u8975\u897a"],["8fdda1","\u897b\u897c\u897d\u8989\u898d\u8990\u8994\u8995\u899b\u899c\u899f\u89a0\u89a5\u89b0\u89b4\u89b5\u89b6\u89b7\u89bc\u89d4",4,"\u89e5\u89e9\u89eb\u89ed\u89f1\u89f3\u89f6\u89f9\u89fd\u89ff\u8a04\u8a05\u8a07\u8a0f\u8a11\u8a12\u8a14\u8a15\u8a1e\u8a20\u8a22\u8a24\u8a26\u8a2b\u8a2c\u8a2f\u8a35\u8a37\u8a3d\u8a3e\u8a40\u8a43\u8a45\u8a47\u8a49\u8a4d\u8a4e\u8a53\u8a56\u8a57\u8a58\u8a5c\u8a5d\u8a61\u8a65\u8a67\u8a75\u8a76\u8a77\u8a79\u8a7a\u8a7b\u8a7e\u8a7f\u8a80\u8a83\u8a86\u8a8b\u8a8f\u8a90\u8a92\u8a96\u8a97\u8a99\u8a9f\u8aa7\u8aa9\u8aae\u8aaf\u8ab3"],["8fdea1","\u8ab6\u8ab7\u8abb\u8abe\u8ac3\u8ac6\u8ac8\u8ac9\u8aca\u8ad1\u8ad3\u8ad4\u8ad5\u8ad7\u8add\u8adf\u8aec\u8af0\u8af4\u8af5\u8af6\u8afc\u8aff\u8b05\u8b06\u8b0b\u8b11\u8b1c\u8b1e\u8b1f\u8b0a\u8b2d\u8b30\u8b37\u8b3c\u8b42",4,"\u8b48\u8b52\u8b53\u8b54\u8b59\u8b4d\u8b5e\u8b63\u8b6d\u8b76\u8b78\u8b79\u8b7c\u8b7e\u8b81\u8b84\u8b85\u8b8b\u8b8d\u8b8f\u8b94\u8b95\u8b9c\u8b9e\u8b9f\u8c38\u8c39\u8c3d\u8c3e\u8c45\u8c47\u8c49\u8c4b\u8c4f\u8c51\u8c53\u8c54\u8c57\u8c58\u8c5b\u8c5d\u8c59\u8c63\u8c64\u8c66\u8c68\u8c69\u8c6d\u8c73\u8c75\u8c76\u8c7b\u8c7e\u8c86"],["8fdfa1","\u8c87\u8c8b\u8c90\u8c92\u8c93\u8c99\u8c9b\u8c9c\u8ca4\u8cb9\u8cba\u8cc5\u8cc6\u8cc9\u8ccb\u8ccf\u8cd6\u8cd5\u8cd9\u8cdd\u8ce1\u8ce8\u8cec\u8cef\u8cf0\u8cf2\u8cf5\u8cf7\u8cf8\u8cfe\u8cff\u8d01\u8d03\u8d09\u8d12\u8d17\u8d1b\u8d65\u8d69\u8d6c\u8d6e\u8d7f\u8d82\u8d84\u8d88\u8d8d\u8d90\u8d91\u8d95\u8d9e\u8d9f\u8da0\u8da6\u8dab\u8dac\u8daf\u8db2\u8db5\u8db7\u8db9\u8dbb\u8dc0\u8dc5\u8dc6\u8dc7\u8dc8\u8dca\u8dce\u8dd1\u8dd4\u8dd5\u8dd7\u8dd9\u8de4\u8de5\u8de7\u8dec\u8df0\u8dbc\u8df1\u8df2\u8df4\u8dfd\u8e01\u8e04\u8e05\u8e06\u8e0b\u8e11\u8e14\u8e16\u8e20\u8e21\u8e22"],["8fe0a1","\u8e23\u8e26\u8e27\u8e31\u8e33\u8e36\u8e37\u8e38\u8e39\u8e3d\u8e40\u8e41\u8e4b\u8e4d\u8e4e\u8e4f\u8e54\u8e5b\u8e5c\u8e5d\u8e5e\u8e61\u8e62\u8e69\u8e6c\u8e6d\u8e6f\u8e70\u8e71\u8e79\u8e7a\u8e7b\u8e82\u8e83\u8e89\u8e90\u8e92\u8e95\u8e9a\u8e9b\u8e9d\u8e9e\u8ea2\u8ea7\u8ea9\u8ead\u8eae\u8eb3\u8eb5\u8eba\u8ebb\u8ec0\u8ec1\u8ec3\u8ec4\u8ec7\u8ecf\u8ed1\u8ed4\u8edc\u8ee8\u8eee\u8ef0\u8ef1\u8ef7\u8ef9\u8efa\u8eed\u8f00\u8f02\u8f07\u8f08\u8f0f\u8f10\u8f16\u8f17\u8f18\u8f1e\u8f20\u8f21\u8f23\u8f25\u8f27\u8f28\u8f2c\u8f2d\u8f2e\u8f34\u8f35\u8f36\u8f37\u8f3a\u8f40\u8f41"],["8fe1a1","\u8f43\u8f47\u8f4f\u8f51",4,"\u8f58\u8f5d\u8f5e\u8f65\u8f9d\u8fa0\u8fa1\u8fa4\u8fa5\u8fa6\u8fb5\u8fb6\u8fb8\u8fbe\u8fc0\u8fc1\u8fc6\u8fca\u8fcb\u8fcd\u8fd0\u8fd2\u8fd3\u8fd5\u8fe0\u8fe3\u8fe4\u8fe8\u8fee\u8ff1\u8ff5\u8ff6\u8ffb\u8ffe\u9002\u9004\u9008\u900c\u9018\u901b\u9028\u9029\u902f\u902a\u902c\u902d\u9033\u9034\u9037\u903f\u9043\u9044\u904c\u905b\u905d\u9062\u9066\u9067\u906c\u9070\u9074\u9079\u9085\u9088\u908b\u908c\u908e\u9090\u9095\u9097\u9098\u9099\u909b\u90a0\u90a1\u90a2\u90a5\u90b0\u90b2\u90b3\u90b4\u90b6\u90bd\u90cc\u90be\u90c3"],["8fe2a1","\u90c4\u90c5\u90c7\u90c8\u90d5\u90d7\u90d8\u90d9\u90dc\u90dd\u90df\u90e5\u90d2\u90f6\u90eb\u90ef\u90f0\u90f4\u90fe\u90ff\u9100\u9104\u9105\u9106\u9108\u910d\u9110\u9114\u9116\u9117\u9118\u911a\u911c\u911e\u9120\u9125\u9122\u9123\u9127\u9129\u912e\u912f\u9131\u9134\u9136\u9137\u9139\u913a\u913c\u913d\u9143\u9147\u9148\u914f\u9153\u9157\u9159\u915a\u915b\u9161\u9164\u9167\u916d\u9174\u9179\u917a\u917b\u9181\u9183\u9185\u9186\u918a\u918e\u9191\u9193\u9194\u9195\u9198\u919e\u91a1\u91a6\u91a8\u91ac\u91ad\u91ae\u91b0\u91b1\u91b2\u91b3\u91b6\u91bb\u91bc\u91bd\u91bf"],["8fe3a1","\u91c2\u91c3\u91c5\u91d3\u91d4\u91d7\u91d9\u91da\u91de\u91e4\u91e5\u91e9\u91ea\u91ec",5,"\u91f7\u91f9\u91fb\u91fd\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920a\u920c\u9210\u9212\u9213\u9216\u9218\u921c\u921d\u9223\u9224\u9225\u9226\u9228\u922e\u922f\u9230\u9233\u9235\u9236\u9238\u9239\u923a\u923c\u923e\u9240\u9242\u9243\u9246\u9247\u924a\u924d\u924e\u924f\u9251\u9258\u9259\u925c\u925d\u9260\u9261\u9265\u9267\u9268\u9269\u926e\u926f\u9270\u9275",4,"\u927b\u927c\u927d\u927f\u9288\u9289\u928a\u928d\u928e\u9292\u9297"],["8fe4a1","\u9299\u929f\u92a0\u92a4\u92a5\u92a7\u92a8\u92ab\u92af\u92b2\u92b6\u92b8\u92ba\u92bb\u92bc\u92bd\u92bf",4,"\u92c5\u92c6\u92c7\u92c8\u92cb\u92cc\u92cd\u92ce\u92d0\u92d3\u92d5\u92d7\u92d8\u92d9\u92dc\u92dd\u92df\u92e0\u92e1\u92e3\u92e5\u92e7\u92e8\u92ec\u92ee\u92f0\u92f9\u92fb\u92ff\u9300\u9302\u9308\u930d\u9311\u9314\u9315\u931c\u931d\u931e\u931f\u9321\u9324\u9325\u9327\u9329\u932a\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935a\u935e\u9364\u9365\u9367\u9369\u936a\u936d\u936f\u9370\u9371\u9373\u9374\u9376"],["8fe5a1","\u937a\u937d\u937f\u9380\u9381\u9382\u9388\u938a\u938b\u938d\u938f\u9392\u9395\u9398\u939b\u939e\u93a1\u93a3\u93a4\u93a6\u93a8\u93ab\u93b4\u93b5\u93b6\u93ba\u93a9\u93c1\u93c4\u93c5\u93c6\u93c7\u93c9",4,"\u93d3\u93d9\u93dc\u93de\u93df\u93e2\u93e6\u93e7\u93f9\u93f7\u93f8\u93fa\u93fb\u93fd\u9401\u9402\u9404\u9408\u9409\u940d\u940e\u940f\u9415\u9416\u9417\u941f\u942e\u942f\u9431\u9432\u9433\u9434\u943b\u943f\u943d\u9443\u9445\u9448\u944a\u944c\u9455\u9459\u945c\u945f\u9461\u9463\u9468\u946b\u946d\u946e\u946f\u9471\u9472\u9484\u9483\u9578\u9579"],["8fe6a1","\u957e\u9584\u9588\u958c\u958d\u958e\u959d\u959e\u959f\u95a1\u95a6\u95a9\u95ab\u95ac\u95b4\u95b6\u95ba\u95bd\u95bf\u95c6\u95c8\u95c9\u95cb\u95d0\u95d1\u95d2\u95d3\u95d9\u95da\u95dd\u95de\u95df\u95e0\u95e4\u95e6\u961d\u961e\u9622\u9624\u9625\u9626\u962c\u9631\u9633\u9637\u9638\u9639\u963a\u963c\u963d\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966e\u9674\u967b\u967c\u967e\u967f\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969a\u969d\u969f\u96a4\u96a5\u96a6\u96a9\u96ae\u96af\u96b3\u96ba\u96ca\u96d2\u5db2\u96d8\u96da\u96dd\u96de\u96df\u96e9\u96ef\u96f1\u96fa\u9702"],["8fe7a1","\u9703\u9705\u9709\u971a\u971b\u971d\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974a\u974e\u974f\u9755\u9757\u9758\u975a\u975b\u9763\u9767\u976a\u976e\u9773\u9776\u9777\u9778\u977b\u977d\u977f\u9780\u9789\u9795\u9796\u9797\u9799\u979a\u979e\u979f\u97a2\u97ac\u97ae\u97b1\u97b2\u97b5\u97b6\u97b8\u97b9\u97ba\u97bc\u97be\u97bf\u97c1\u97c4\u97c5\u97c7\u97c9\u97ca\u97cc\u97cd\u97ce\u97d0\u97d1\u97d4\u97d7\u97d8\u97d9\u97dd\u97de\u97e0\u97db\u97e1\u97e4\u97ef\u97f1\u97f4\u97f7\u97f8\u97fa\u9807\u980a\u9819\u980d\u980e\u9814\u9816\u981c\u981e\u9820\u9823\u9826"],["8fe8a1","\u982b\u982e\u982f\u9830\u9832\u9833\u9835\u9825\u983e\u9844\u9847\u984a\u9851\u9852\u9853\u9856\u9857\u9859\u985a\u9862\u9863\u9865\u9866\u986a\u986c\u98ab\u98ad\u98ae\u98b0\u98b4\u98b7\u98b8\u98ba\u98bb\u98bf\u98c2\u98c5\u98c8\u98cc\u98e1\u98e3\u98e5\u98e6\u98e7\u98ea\u98f3\u98f6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991a\u991b\u991c\u991f\u9922\u9926\u9927\u992b\u9931",4,"\u9939\u993a\u993b\u993c\u9940\u9941\u9946\u9947\u9948\u994d\u994e\u9954\u9958\u9959\u995b\u995c\u995e\u995f\u9960\u999b\u999d\u999f\u99a6\u99b0\u99b1\u99b2\u99b5"],["8fe9a1","\u99b9\u99ba\u99bd\u99bf\u99c3\u99c9\u99d3\u99d4\u99d9\u99da\u99dc\u99de\u99e7\u99ea\u99eb\u99ec\u99f0\u99f4\u99f5\u99f9\u99fd\u99fe\u9a02\u9a03\u9a04\u9a0b\u9a0c\u9a10\u9a11\u9a16\u9a1e\u9a20\u9a22\u9a23\u9a24\u9a27\u9a2d\u9a2e\u9a33\u9a35\u9a36\u9a38\u9a47\u9a41\u9a44\u9a4a\u9a4b\u9a4c\u9a4e\u9a51\u9a54\u9a56\u9a5d\u9aaa\u9aac\u9aae\u9aaf\u9ab2\u9ab4\u9ab5\u9ab6\u9ab9\u9abb\u9abe\u9abf\u9ac1\u9ac3\u9ac6\u9ac8\u9ace\u9ad0\u9ad2\u9ad5\u9ad6\u9ad7\u9adb\u9adc\u9ae0\u9ae4\u9ae5\u9ae7\u9ae9\u9aec\u9af2\u9af3\u9af5\u9af9\u9afa\u9afd\u9aff",4],["8feaa1","\u9b04\u9b05\u9b08\u9b09\u9b0b\u9b0c\u9b0d\u9b0e\u9b10\u9b12\u9b16\u9b19\u9b1b\u9b1c\u9b20\u9b26\u9b2b\u9b2d\u9b33\u9b34\u9b35\u9b37\u9b39\u9b3a\u9b3d\u9b48\u9b4b\u9b4c\u9b55\u9b56\u9b57\u9b5b\u9b5e\u9b61\u9b63\u9b65\u9b66\u9b68\u9b6a",4,"\u9b73\u9b75\u9b77\u9b78\u9b79\u9b7f\u9b80\u9b84\u9b85\u9b86\u9b87\u9b89\u9b8a\u9b8b\u9b8d\u9b8f\u9b90\u9b94\u9b9a\u9b9d\u9b9e\u9ba6\u9ba7\u9ba9\u9bac\u9bb0\u9bb1\u9bb2\u9bb7\u9bb8\u9bbb\u9bbc\u9bbe\u9bbf\u9bc1\u9bc7\u9bc8\u9bce\u9bd0\u9bd7\u9bd8\u9bdd\u9bdf\u9be5\u9be7\u9bea\u9beb\u9bef\u9bf3\u9bf7\u9bf8"],["8feba1","\u9bf9\u9bfa\u9bfd\u9bff\u9c00\u9c02\u9c0b\u9c0f\u9c11\u9c16\u9c18\u9c19\u9c1a\u9c1c\u9c1e\u9c22\u9c23\u9c26",4,"\u9c31\u9c35\u9c36\u9c37\u9c3d\u9c41\u9c43\u9c44\u9c45\u9c49\u9c4a\u9c4e\u9c4f\u9c50\u9c53\u9c54\u9c56\u9c58\u9c5b\u9c5d\u9c5e\u9c5f\u9c63\u9c69\u9c6a\u9c5c\u9c6b\u9c68\u9c6e\u9c70\u9c72\u9c75\u9c77\u9c7b\u9ce6\u9cf2\u9cf7\u9cf9\u9d0b\u9d02\u9d11\u9d17\u9d18\u9d1c\u9d1d\u9d1e\u9d2f\u9d30\u9d32\u9d33\u9d34\u9d3a\u9d3c\u9d45\u9d3d\u9d42\u9d43\u9d47\u9d4a\u9d53\u9d54\u9d5f\u9d63\u9d62\u9d65\u9d69\u9d6a\u9d6b\u9d70\u9d76\u9d77\u9d7b"],["8feca1","\u9d7c\u9d7e\u9d83\u9d84\u9d86\u9d8a\u9d8d\u9d8e\u9d92\u9d93\u9d95\u9d96\u9d97\u9d98\u9da1\u9daa\u9dac\u9dae\u9db1\u9db5\u9db9\u9dbc\u9dbf\u9dc3\u9dc7\u9dc9\u9dca\u9dd4\u9dd5\u9dd6\u9dd7\u9dda\u9dde\u9ddf\u9de0\u9de5\u9de7\u9de9\u9deb\u9dee\u9df0\u9df3\u9df4\u9dfe\u9e0a\u9e02\u9e07\u9e0e\u9e10\u9e11\u9e12\u9e15\u9e16\u9e19\u9e1c\u9e1d\u9e7a\u9e7b\u9e7c\u9e80\u9e82\u9e83\u9e84\u9e85\u9e87\u9e8e\u9e8f\u9e96\u9e98\u9e9b\u9e9e\u9ea4\u9ea8\u9eac\u9eae\u9eaf\u9eb0\u9eb3\u9eb4\u9eb5\u9ec6\u9ec8\u9ecb\u9ed5\u9edf\u9ee4\u9ee7\u9eec\u9eed\u9eee\u9ef0\u9ef1\u9ef2\u9ef5"],["8feda1","\u9ef8\u9eff\u9f02\u9f03\u9f09\u9f0f\u9f10\u9f11\u9f12\u9f14\u9f16\u9f17\u9f19\u9f1a\u9f1b\u9f1f\u9f22\u9f26\u9f2a\u9f2b\u9f2f\u9f31\u9f32\u9f34\u9f37\u9f39\u9f3a\u9f3c\u9f3d\u9f3f\u9f41\u9f43",4,"\u9f53\u9f55\u9f56\u9f57\u9f58\u9f5a\u9f5d\u9f5e\u9f68\u9f69\u9f6d",4,"\u9f73\u9f75\u9f7a\u9f7d\u9f8f\u9f90\u9f91\u9f92\u9f94\u9f96\u9f97\u9f9e\u9fa1\u9fa2\u9fa3\u9fa5"]]},Sxbm:function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n("nbXG");var r=function(){function e(e){this.localStorage=e}return e.prototype.isDeviceLicenseRetail=function(){return"pro"!==this.localStorage.get("mode")},e}()},T1DM:function(e,t,n){"use strict";var r=n("mrSG"),i=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.scheduler=t,r.work=n,r.pending=!1,r}return r.c(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,t)),this.pending=!0,this.delay=t,this.id=this.id||this.requestAsyncId(r,this.id,t),this},t.prototype.requestAsyncId=function(e,t,n){return void 0===n&&(n=0),setInterval(e.flush.bind(e,this),n)},t.prototype.recycleAsyncId=function(e,t,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return t;clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var n=!1,r=void 0;try{this.work(e)}catch(i){n=!0,r=!!i&&i||new Error(i)}if(n)return this.unsubscribe(),r},t.prototype._unsubscribe=function(){var e=this.id,t=this.scheduler,n=t.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null},t}(function(e){function t(t,n){return e.call(this)||this}return r.c(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(n("pugT").a)),o=function(){function e(t,n){void 0===n&&(n=e.now),this.SchedulerAction=t,this.now=n}return e.prototype.schedule=function(e,t,n){return void 0===t&&(t=0),new this.SchedulerAction(this,e).schedule(n,t)},e.now=function(){return Date.now()},e}(),s=function(e){function t(n,r){void 0===r&&(r=o.now);var i=e.call(this,n,function(){return t.delegate&&t.delegate!==i?t.delegate.now():r()})||this;return i.actions=[],i.active=!1,i.scheduled=void 0,i}return r.c(t,e),t.prototype.schedule=function(n,r,i){return void 0===r&&(r=0),t.delegate&&t.delegate!==this?t.delegate.schedule(n,r,i):e.prototype.schedule.call(this,n,r,i)},t.prototype.flush=function(e){var t=this.actions;if(this.active)t.push(e);else{var n;this.active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this.active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}},t}(o);n.d(t,"a",function(){return a});var a=new s(i)},TN6a:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("psW0"),i=n("67Y/"),o=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getWifiDevices=function(){var e=this;return this.ubusService.call({data:[this.authService.getSid(),"iwinfo","devices",{}]}).pipe(Object(r.a)(function(t){var n=t.result[1].devices,r=[];return n.forEach(function(t){r.push([e.authService.getSid(),"iwinfo","info",{device:t}])}),e.ubusService.call({data:r}).pipe(Object(i.a)(function(e){return{interfaces:n,devices:e.result.map(function(e){return e[1]})}}))}))},e.prototype.getPeerStat=function(){return this.ubusService.call({data:[this.authService.getSid(),"ath10k.peerstat","get",{}]}).pipe(Object(i.a)(function(e){return e.result[1]}))},e.prototype.getBridgeStatus=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"sta"}}],[this.authService.getSid(),"uci","get",{config:"vlan",type:"vlan"}]]}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e.prototype.getBridgeDeviceInfo=function(e){return this.ubusService.call({data:[this.authService.getSid(),"iwinfo","info",{device:e}]}).pipe(Object(i.a)(function(e){return e.result[1]}))},e.prototype.getWifiInfo=function(e){var t=this,n=[];return e.forEach(function(e){n.push([t.authService.getSid(),"network.info","clients",{device:e}])}),this.ubusService.call({data:n}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1]})}))},e.prototype.getRadios=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-device"}]}).pipe(Object(i.a)(function(e){return e.result[1].values}))},e.prototype.getVaps=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"ap"}}],[this.authService.getSid(),"uci","get",{config:"vlan",type:"vlan"}]]}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e.prototype.getRadiusStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"radius",type:"radius"}]}).pipe(Object(i.a)(function(e){return e.result[1].values}))},e.prototype.getDisconnectedClients=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.info","unconnected_clients",{}]}).pipe(Object(i.a)(function(e){return e.result[1].clients}))},e}())},Txjg:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("Zn8D");function i(){return Object(r.a)(1)}},"U4A+":function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("pugT"),i=(n("UVPe"),n("jGGy"),n("P62w"),function(){function e(e,t,n){this.ubusTestService=e,this.authService=t,this.spinner=n,this.ubusSubscription=new r.a,this.ubusData=[],this.ubusSection="uci",this.ubusCallee="get",this.ubusParameter='{"config":"network"}',this.sessionid=this.authService.getSid(),this.ubusQueue=[],this.showUbusQueue=!1,this.showUbusData=!1}return e.prototype.ngOnInit=function(){this.spinner.hide()},e.prototype.ubusCall=function(){var e=this,t=this.ubusSection,n=this.ubusCallee,r=null;try{r=JSON.parse(this.ubusParameter)}catch(o){console.log("Problem with the ubusCall of:",this.ubusParameter)}if(this.ubusQueue.length)this.ubusSubscription.unsubscribe(),this.ubusSubscription=this.ubusTestService.callUbus(this.ubusQueue).subscribe(function(t){for(var n in t)t.hasOwnProperty(n)&&e.ubusData.push({response:t[n].result,request:e.ubusQueue[n]})},function(t){e.ubusData.push({response:t,request:e.ubusQueue})});else{var i=[this.sessionid,t,n,r];this.ubusSubscription.unsubscribe(),this.ubusSubscription=this.ubusTestService.callUbus(i).subscribe(function(t){e.ubusData.push({response:t.result,request:i})},function(t){e.ubusData.push({response:t,request:i})})}this.ubusData=[],this.showUbusData=!0},e.prototype.addToUbusQueue=function(){var e=this.ubusSection,t=this.ubusCallee;try{var n=JSON.parse(this.ubusParameter);this.showUbusQueue=!0,this.ubusQueue.push([this.sessionid,e,t,n])}catch(r){console.log("Problem with the addToUbusQueue of:",this.ubusParameter)}},e.prototype.ubusClearQueue=function(){this.ubusQueue=[],this.ubusData=[],this.showUbusQueue=!1,this.showUbusData=!1},e}())},URgk:function(e,t,n){(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(i.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new o(i.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n("YBdB"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n("yLpj"))},UVPe:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("K9Ia"),i=function(){function e(e){if(this.spinnerSubject=new r.a,this.spinnerState=this.spinnerSubject.asObservable(),e)return e}return e.prototype.isShown=function(){return this.spinnerSubject},e.prototype.show=function(){this.spinnerSubject.next({show:!0})},e.prototype.hide=function(){this.spinnerSubject.next({show:!1})},e}()},VEEB:function(e,t,n){"use strict";n.d(t,"a",function(){return a}),n("jGGy"),n("+NEN");var r=n("+3se"),i=n("Vx+w"),o=(n("UVPe"),n("RZQe"),n("K9Ia")),s=n("ny24"),a=function(){function e(e,t,n,s,a){this.vlanService=e,this.translate=t,this.authService=n,this.ubusService=s,this.spinner=a,this.ngUnsubscribe=new o.a,this.objectKeys=Object.keys,this.config=i.a,this.vlans=[],this.calls=[],this.origVLANs=[],this.managementVLAN="lan",this.addingNew=!1,this.orderby="id*1",this.reverse=!1,this.plcAvailable=Object(r.g)(i.a.plc),this.wifiAvailable=!!Object.keys(i.a.wireless.devices).length,this.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e},this.editRow=function(e){this.vlan=Object(r.d)(e),this.editRowName=e.old_id},this.remove=function(e){var t=this;this.vlans=this.vlans.filter(function(e){return e.old_id!==t.editRowName}),this.save()}}return e.prototype.ngOnInit=function(){this.getVlans()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.getVlans=function(){var e=this;this.vlanService.getVlans(this.wifiAvailable,this.plcAvailable).pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){e.spinner.hide(),e.markAsPristine(),e.vlanByName=t[0],e.network=t[1],e.firewall=t[2],e.wireless={},e.plc={},e.wifiAvailable&&e.plcAvailable?(e.wireless=t[3],e.plc=t[4]):e.wifiAvailable&&!e.plcAvailable?e.wireless=t[3]:!e.wifiAvailable&&e.plcAvailable&&(e.plc=t[3]),e.origVLANs=Object(r.d)(e.vlanByName);var n=e.extractVLANs(e.vlanByName);e.setDeletable(n),e.vlans=Object(r.d)(n),e.fakeVlans=Object(r.d)(e.vlans),e.matrix=e.initMatrix(e.vlanByName,e.network),e.radios=e.initRadios(e.wireless)})},e.prototype.extractVLANs=function(e){var t=[];for(var n in e)if(e.hasOwnProperty(n)){var r=e[n],i=r[".name"].replace(/^vlan/,"");r.id=r.old_id=i,"1"===r.management?(this.managementVLAN=r[".name"],r.deletable=!1,r.wasManagement=!0,r.untagged||(r.untagged="0")):r.deletable=!0,t.push(r)}return t},e.prototype.setDeletable=function(e){if(1===e.length)e[0].deletable=!0;else for(var t in e.forEach(function(e){"1"!==e.management&&(e.deletable=!0)}),this.wireless)if(this.wireless.hasOwnProperty(t)){var n=this.wireless[t];this.vlanByName[n.network]&&(this.vlanByName[n.network].deletable=!1)}},e.prototype.initMatrix=function(e,t){var n={};for(var r in i.a.network.interfaces)if(i.a.network.interfaces.hasOwnProperty(r))for(var o in n[r]={},e)e.hasOwnProperty(o)&&o in t&&(n[r][o]=!0);return n},e.prototype.initRadios=function(e){var t=[],n=function(n){if(i.a.wireless.devices.hasOwnProperty(n)){var o=i.a.wireless.devices[n];for(var s in r.translate.get("{frequency} GHz Radio",{frequency:Number(o.frequency)}).subscribe(function(e){o.description=e}),o.name=n,o.vaps=[],t.push(o),r.matrix[n]={},e)if(e.hasOwnProperty(s)){var a=e[s];a.device===n&&(o.vaps.push(a),r.matrix[n][a]={},r.matrix[n][a][a.network]=!0)}}},r=this;for(var o in i.a.wireless.devices)n(o);return t},e.prototype.add=function(){this.addingNew=!0;var e={new:!0,deletable:!1,management:"0",untagged:"0",".type":"vlan"};this.vlan=Object(r.d)(e);var t=this.vlans.map(function(e){return Number(e.id)}),n=this.vlans.sort(function(e,t){return e.vlan-t.vlan}).map(function(e){return Number(e.vlan)});e.id=e.old_id=""+this.findGap(t),this.translate.get("VLAN {id}",{id:e.id}).subscribe(function(t){e.name=t}),e.vlan=""+this.findGap(n),0===this.vlans.length&&(e.management="1",e.untagged="1"),this.vlans.push(e),this.delos.form.markAsDirty(),void 0!==this.searchVlans&&(this.searchVlans=void 0),this.editRowName=e.old_id},e.prototype.findGap=function(e){e.sort(function(e,t){return e>t?1:-1});for(var t=1,n=0;n<e.length&&!(t<e[n]);++n)n>0&&e[n]>Number(e[n-1])+1&&(t=Number(e[n-1])+1),t=Number(e[n])+1;return t},e.prototype.save=function(e){var t=this;this.spinner.show();var n=[];e&&(delete e.frozenOrder,delete e.wasManagement),this.newManagementVLAN=0===this.vlans.length?"lan":e&&"1"===e.management?"vlan"+e.id:this.managementVLAN,this.writeVLANs(n),this.plcAvailable&&this.writePLC(n,e),this.writeFirewall(n,e),this.wifiAvailable&&this.writeWireless(n,e),this.writeNetwork(n,e),this.ubusService.call({data:n}).subscribe(function(e){t.getVlans()})},e.prototype.writeVLANs=function(e){var t=this,n={},i={".name":!0,".type":!0,vlan:!0,untagged:!0,management:!0,name:!0};this.vlans.forEach(function(e){var o="vlan"+e.id;for(var s in o===t.newManagementVLAN?e.management="1":(e.management="0",e.untagged="0"),n[o]=Object(r.d)(e),n[o][".type"]="vlan",n[o])n[o].hasOwnProperty(s)&&(s in i||delete n[o][s])}),this.ubusService.mergeConfig({calls:e,config:"vlan",sid:this.authService.getSid(),wanted:n,got:this.origVLANs,commit:!0})},e.prototype.writePLC=function(e,t){var n,o=Object(r.d)(this.plc);for(var s in n=t&&"1"===t.management&&"0"===t.untagged&&"switch"in i.a&&i.a.switch.vlan?i.a.plc.interface+"."+t.id:i.a.plc.interface,o)o.hasOwnProperty(s)&&(o[s].interface=n);this.ubusService.mergeConfig({calls:e,config:"plc",sid:this.authService.getSid(),wanted:o,got:this.plc,commit:!0})},e.prototype.writeFirewall=function(e,t){var n=Object(r.d)(this.firewall);for(var i in n)if(n.hasOwnProperty(i)){for(var o=n[i].network,s=0;s<o.length;++s)o[s]===this.managementVLAN&&(this.vlans.length?t&&"1"===t.management&&(o[s]="vlan"+t.id):o[s]="lan");n[i].network=o}this.ubusService.mergeConfig({calls:e,config:"firewall",sid:this.authService.getSid(),wanted:n,got:this.firewall,commit:!0})},e.prototype.writeWireless=function(e,t){var n=Object(r.d)(this.wireless);for(var i in n)if(n.hasOwnProperty(i)){var o=n[i].network;o===this.managementVLAN?this.vlans.length?t&&"1"===t.management&&(o="vlan"+t.id):o="lan":o!==this.managementVLAN&&(this.vlans.length?t&&!t.new&&t.id!==t.old_id&&"vlan"+t.old_id===o&&(o="vlan"+t.id):o="lan"),n[i].network=o,this.vlans.length&&(n[i].ieee80211r=0)}this.ubusService.mergeConfig({calls:e,config:"wireless",sid:this.authService.getSid(),wanted:n,got:this.wireless,commit:!0})},e.prototype.writeNetwork=function(e,t){var n=Object(r.d)(this.network),i={};if(this.newManagementVLAN!==this.managementVLAN)n[this.newManagementVLAN]=n[this.managementVLAN],delete n[this.managementVLAN];else if(t&&!t.new&&t.id!==t.old_id){var o="vlan"+t.old_id;n["vlan"+t.id]=n[o],delete n[o]}for(var s=0;s<this.vlans.length;++s){var a="vlan"+this.vlans[s].id;i[a]=!0,n[a]||(n[a]={".type":"interface",proto:"none",force_link:1,type:"bridge",multicast_querier:0,macaddr:"@eth0"}),n[a].ifname=this.getInterfaceName(this.vlans[s])}if(!t)for(var u in n)n.hasOwnProperty(u)&&"interface"===n[u][".type"]&&!i[u]&&u.match(/^vlan[1-9][0-9]*$/)&&delete n[u];n.lan&&(n.lan.ifname=this.getInterfaceName()),n.lan6&&(n.lan6.ifname="br-"+this.newManagementVLAN),this.ubusService.mergeConfig({calls:e,config:"network",sid:this.authService.getSid(),wanted:n,got:this.network,commit:!0})},e.prototype.getInterfaceName=function(e){var t=Object.keys(i.a.network.interfaces).sort();if(e&&"0"===e.untagged)for(var n=0;n<t.length;++n)t[n]+="."+e.id;return t.join(" ")},e.prototype.cancel=function(){this.vlans=Object(r.d)(this.fakeVlans),this.markAsPristine(),this.vlan=null},e.prototype.markAsPristine=function(){this.editRowName=void 0,this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}()},"VnD/":function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(e,t){return function(n){return n.lift(new s(e,t))}}var s=function(){function e(e,t){this.predicate=e,this.thisArg=t}return e.prototype.call=function(e,t){return t.subscribe(new a(e,this.predicate,this.thisArg))},e}(),a=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.c(t,e),t.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(n){return void this.destination.error(n)}t&&this.destination.next(e)},t}(i.a)},"Vx+w":function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r={delos:{productID:"turing-qsdk",deviceDir:"./devices/turing-qsdk/",productName:"DUMMY",noAuth:!1,noForcedPassword:!0,hideFooterLinks:!1,sessionExpiry:900},info:{doc:"https://www.devolo.com/delos/dLAN_1200+_WiFi_ac-user-guide",firmwareUpdate:"https://www.devolo.com/delos/dLAN_1200+_WiFi_ac-fw",license:"http://www.devolo.com/business-solutions-support-license"},ubus:{path:"/ubus"},system:{status:{sysinfo:{refresh:1e4},buttonsleds:{refresh:6e4}},management:{pwStrength:2,pwMinLength:8},config:{restore:{maxSize:1048576,waitPing:{ETA:6e4,gracePeriod:5e4,pingInterval:250}}},reboot:{waitPing:{ETA:6e4,gracePeriod:5e4,pingInterval:250}},factorydefault:{waitPing:{ETA:13e4,gracePeriod:1e5,pingInterval:250}},firmware:{maxImageSize:16777216,waitPing:{ETA:18e4,gracePeriod:14e4,pingInterval:250}}},lan:{ipv4:{restart:{waitPing:{ETA:16e3,gracePeriod:8e3,pingInterval:250}}}},network:{interfaces:{eth0:{description:"Ethernet"}},maxVLANs:16},wireless:{devices:{radio0:{frequency:2.4,maxVapsAllowed:8,groups:[{channels:["auto",1,2,3,4,5,6,7,8,9,10,11,12,13],txpowers:20}],rates:[54e3,48e3,36e3,24e3,18e3,12e3,11e3,9e3,6e3,5500,2e3,1e3]},radio1:{frequency:5,maxVapsAllowed:8,groups:[{channels:["auto",36,40,44,48],txpowers:20},{channels:[52,56,60,64,100,104,108,112,116,120,124,128,132,136,140],txpowers:20}],rates:[54e3,48e3,36e3,24e3,18e3,12e3,9e3,6e3]}},scanner:{refresh:3e4},vaps:{refresh:1e4}},status:{overview:{sysinfo:{refresh:6e4},wifi:{refresh:1e4},networkStatus:{refresh:1e4},interfaceStatus:{refresh:1e4}}},socketman:{available:!0},plc:{interface:"eth0",standby:{available:!0}},switch:{name:"switch0",cpuPort:0,plcPort:2,ethernetPorts:[3,4],vlan:!1},button:{leds:{schemes:[{name:"WLAN",type:"wifitrigger",led:"led_wlan",ledDependencies:["led_wlan"]},{name:"dLAN",type:"plcscheme",ledDependencies:["led_plcw","led_plcr"]}]}},firmwareCommitID:"15a464be7d39beb651cd80aed15cd4771d616cdb",firmwareCommitDateTime:"2019-02-19 16:35:00 +0100",firmwareCommitDate:"2019-02-19",firmwareVersion:"5.2.1",firmwareBuildDate:"2019-02-19"}},WiWG:function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("K9Ia"),i=n("pugT"),o=n("gI3B"),s=n("ny24"),a=n("+3se"),u=(n("EDOA"),n("Vx+w")),c=(n("iIpO"),n("t2rx"),n("TN6a"),function(){function e(e,t,n,o){this.statusService=e,this.formatTimeService=t,this.wifiConfigService=n,this.pageLoadingService=o,this.ngUnsubscribe=new r.a,this.notConfigured=!0,this.bridge={enabled:!1},this.stations=[],this.stationsTemp=[],this.radiosStatic={},this.na=Object(a.b)("n/a"),this.radios=[],this.vaps=[],this.wifiConfig={},this.orderbySta="connected_time",this.reverseSta=!1,this.orderbyVaps="enabled",this.reverseVaps=!0,this.orderbyRadios="enabled",this.reverseRadios=!0,this.getRadiosSubscription=new i.a,this.getWifiInterfacesSubscription=new i.a,this.getRadiusStatusSubscription=new i.a,this.getVapsSubscription=new i.a,this.getWifiInfoSubscription=new i.a,this.getPeerStatSubscription=new i.a,this.getBridgeDeviceInfoSubscription=new i.a,this.getBridgeStatusSubscription=new i.a,this.getWifiDevicesSubscription=new i.a,this.getDisconnectedClientsSubscription=new i.a,this.orderRadios=function(e){this.reverseRadios=this.orderbyRadios===e&&!this.reverseRadios,this.orderbyRadios=e},this.pageLoadingService.register(["getDisconnectedClients","getVaps","getBridgeStatus","getRadiusStatus","getWifiInfo"])}return e.prototype.ngOnInit=function(){var e=this;this.generageWifiConfig(),Object(o.a)(1,1e4).pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(){e.getRadios(),e.getRadiusStatus()})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.orderSta=function(e){this.reverseSta=this.orderbySta===e&&!this.reverseSta,this.orderbySta=e},e.prototype.orderVaps=function(e){this.reverseVaps=this.orderbyVaps===e&&!this.reverseVaps,this.orderbyVaps=e},e.prototype.radarDetected=function(e){return!(5!=this.wifiConfig[e.radio].freq||this.bridge.enabled&&this.bridge.device==this.wifiConfig[e.radio].name||this.wifiConfigService.channelInRange(e.actualChannel,e.configuredChannel,this.radiosStatic.htmode))},e.prototype.generageWifiConfig=function(){for(var e in this.wifiConfig.radioCount=0,u.a.wireless.devices)if(u.a.wireless.devices.hasOwnProperty(e)){var t=u.a.wireless.devices[e],n=e.substr(-1);this.wifiConfig[n]={freq:t.frequency,vaps:{}},this.wifiConfig[n].freqView=5===this.wifiConfig[n].freq?Object(a.b)("5 GHz"):Object(a.b)("2.4 GHz"),this.wifiConfig[n].name=e,this.wifiConfig.radioCount++}},e.prototype.getWifiDevices=function(){var e=this;this.getWifiDevicesSubscription.unsubscribe(),this.getWifiDevicesSubscription=this.statusService.getWifiDevices().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){var n,r=t.interfaces,i=t.devices;e.devices=i;var o={},s=[];for(var u in r)if(r.hasOwnProperty(u)){var c=r[u],l=i[u];if(c!==l.phy&&!c.includes("Clone")){"Client"==l.mode&&(n=c),s.push(c);var h=e.extractRadioFromWlanName(c);if(e.wifiConfig[h].vaps[c]={ssid:l.ssid},!Object(a.g)(o[h]))for(var f in o[h]=!0,e.radios)if(e.radios.hasOwnProperty(f)){var d=e.radios[f];d.radio==h&&(d.txPower=l.txpower,d.frequency=e.na,Object(a.g)(l.channel)&&(d.actualChannel=e.na,l.channel&&(d.actualChannel=l.channel,d.frequency=l.frequency+Object(a.b)("MHz"))))}}}for(var p=0;p<e.vaps.length;p++)for(var g=0;g<e.radios.length;g++)e.vaps[p].radio===e.radios[g].freq&&(e.vaps[p].frequency=e.radios[g].frequency,e.vaps[p].txPower=e.radios[g].txPower,e.vaps[p].configuredChannel=e.radios[g].configuredChannel,e.vaps[p].actualChannel=e.radios[g].actualChannel);e.getWifiInfo(s),e.getBridgeStatus(n)})},e.prototype.getBridgeStatus=function(e){var t=this;this.getBridgeStatusSubscription.unsubscribe(),this.getBridgeStatusSubscription=this.statusService.getBridgeStatus().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(n){t.pageLoadingService.ready("getBridgeStatus");var r,i=n[0],o=n[1];for(var u in i)if(i.hasOwnProperty(u)){var c=i[u];t.bridge.enabled=!0,t.bridge.ssid=c.ssid,t.bridge.device=c.device,Object(a.g)(e)?(t.getBridgeDeviceInfoSubscription.unsubscribe(),t.getBridgeDeviceInfoSubscription=t.statusService.getBridgeDeviceInfo(e).pipe(Object(s.a)(t.ngUnsubscribe)).subscribe(function(e){(r=e.channel||void 0)?t.bridge.connection=Object(a.b)("connected"):r||(t.bridge.connection=Object(a.b)("Not connected"))})):t.bridge.connection=Object(a.b)("pending"),t.bridge.security="wpa2"===c.security?Object(a.b)("WPA2 Enterprise"):Object(a.b)("WPA2 Personal"),c.network in o&&(t.bridge.vlan=o[c.network].name,t.bridge.vlan_id=c.network.replace(/^vlan/,""));break}})},e.prototype.getLabelFromVendor=function(e){return Object(a.g)(e)?Object(a.g)(e.description)?e.description:Object(a.g)(e.name)?e.name:this.na:this.na},e.prototype.getWifiInfo=function(e){var t=this;if(this.stationsTemp=[],!e.length)return this.getDisconnectedClients(),void this.pageLoadingService.ready("getWifiInfo");this.getPeerStatSubscription.unsubscribe(),this.getPeerStatSubscription=this.statusService.getPeerStat().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(n){t.getWifiInfoSubscription.unsubscribe(),t.getWifiInfoSubscription=t.statusService.getWifiInfo(e).pipe(Object(s.a)(t.ngUnsubscribe)).subscribe(function(r){t.pageLoadingService.ready("getWifiInfo");var i=[],o=[];for(var s in t.wifiConfig)t.wifiConfig.hasOwnProperty(s)&&(i[s]=0,o[s]=0);for(var s in t.vaps)if(t.vaps.hasOwnProperty(s)){var u=t.vaps[s];u.stationCount!=t.na&&(u.stationCount=0)}var c={};for(var s in r)if(r.hasOwnProperty(s)){var l=r[s],h=e[s];if("clients"in l)for(var f in l.clients)if(l.clients.hasOwnProperty(f)){var d=l.clients[f];if(c[h]||(c[h]={}),c[h][f.toUpperCase()])for(var p in d)d.hasOwnProperty(p)&&(c[h[0]][f][p]=d[p]);else c[h][f]=d}}var g=function(e){if(c.hasOwnProperty(e)){var r=c[e],s=t.extractRadioFromWlanName(e),u=0,l="",h="";for(var f in r)if(r.hasOwnProperty(f)){var d=r[f];i[s]++,d.connected_time&&(u++,o[s]++),d.mac=f,d.connected_time=d.connected_time,d.disconnected_time=d.disconnected_time,d.connected_time?d.status="online":(d.connected_time=t.na,d.status="offline"),d.disconnected_time||(d.disconnected_time=t.na),d.radio=h=t.wifiConfig[s].freqView,d.ssid=l=t.wifiConfig[s].vaps[e].ssid,d.label=t.getLabelFromVendor(d.vendor),Object(a.g)(n["radio"+s])&&Object(a.g)(n["radio"+s][d.mac])&&Object(a.g)(d.tx)&&(d.tx.rate=n["radio"+s][d.mac].tx_rate),Object(a.g)(d.tx)&&Object(a.g)(d.tx.rate)&&(d.tx.rate=Math.floor(d.tx.rate/1e3),0==d.tx.rate&&(d.tx.rate=t.na)),Object(a.g)(d.rx)&&Object(a.g)(d.rx.rate)&&(d.rx.rate=Math.floor(d.rx.rate/1e3),0==d.rx.rate&&(d.rx.rate=t.na)),t.updateStationItems(d)}t.vaps.forEach(function(e){e.ssid==l&&e.radio==h&&(e.stationCount=u)})}};for(var h in c)g(h);t.radios.forEach(function(e){e.stationCount=o[e.radio]}),t.displayVaps=Object(a.d)(t.vaps),t.displayRadios=Object(a.d)(t.radios),t.getDisconnectedClients()})})},e.prototype.getRadios=function(){var e=this;this.getRadiosSubscription.unsubscribe(),this.getRadiosSubscription=this.statusService.getRadios().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){for(var n in e.radios=[],e.radiosStatic={},t)if(t.hasOwnProperty(n)){var r=t[n],i=parseInt(r.disabled,10)||0;e.radios.push({radio:n.substr(-1),freq:e.wifiConfig[n.substr(-1)].freqView,configuredChannel:r.channel,disabled:i,enabled:0==i,actualChannel:e.na,stationCount:e.na,txPower:e.na,configuredVaps:e.na,enabledVaps:e.na,disabledVaps:e.na}),e.radiosStatic[n]={},e.radiosStatic[n].htmode=r.htmode}e.getVaps(),e.getWifiDevices()})},e.prototype.getVaps=function(){var e=this;this.getVapsSubscription.unsubscribe(),this.getVapsSubscription=this.statusService.getVaps().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("getVaps"),e.vaps=[];for(var n=[],r=[],i=[],o=0;o<e.wifiConfig.radioCount;o++)n[o]=0,r[o]=0,i[o]=0;for(var o in t[0])if(t[0].hasOwnProperty(o)){var s=t[0][o],u=e.extractRadioFromRadioName(s.device);n[u]++;var c={};switch(c.ssid=s.ssid,c.radio=e.wifiConfig[u].freqView,s.encryption){case"psk-mixed+tkip+ccmp":c.security=Object(a.b)("WPA/WPA2 Personal");break;case"psk2":c.security=Object(a.b)("WPA2 Personal");break;case"wpa2":c.security=Object(a.b)("WPA2 Enterprise");break;case"psk3-mixed":c.security=Object(a.b)("WPA3/WPA2 Personal");break;case"owe":c.security=Object(a.b)("Open (OWE)");break;default:c.security=Object(a.b)("Open")}Object(a.g)(s.disabled)?(c.enabled=!parseInt(s.disabled,10),c.enabled?(c.stationCount=0,r[u]++):(c.stationCount=e.na,i[u]++)):(c.enabled=!0,c.stationCount=0,r[u]++),c.vlan="network"in s?s.network in t[1]?t[1][s.network].name+" ("+s.network.replace(/^vlan/,"")+")":"":Object(a.b)("No VLAN"),c.dynamicVlan="dynamic_vlan"in s&&0!=s.dynamic_vlan,e.vaps.push(c)}for(var l=0;l<e.vaps.length;l++)for(var h=0;h<e.radios.length;h++)e.vaps[l].radio===e.radios[h].freq&&1===e.radios[h].disabled&&(e.vaps[l].disabledRadio=!0);for(var o in e.radios)if(e.radios.hasOwnProperty(o)){var f=e.radios[o];f.configuredVaps=n[f.radio],f.enabledVaps=r[f.radio],f.disabledVaps=i[f.radio]}})},e.prototype.getRadiusStatus=function(){var e=this;this.getRadiusStatusSubscription.unsubscribe(),this.getRadiusStatusSubscription=this.statusService.getRadiusStatus().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){for(var n in t)if(t.hasOwnProperty(n)){var r=t[n],i=r.auth_server,o=parseInt(r.auth_port,10),s=r.acct_server,u=parseInt(r.acct_port,10);e.auth_server_and_port=i?i+":"+o:Object(a.b)("Not configured"),e.acct_server_and_port=s?s+":"+u:Object(a.b)("Not configured"),i||s||(e.notConfigured=!0)}e.pageLoadingService.ready("getRadiusStatus")})},e.prototype.getDisconnectedClients=function(){var e=this;this.getDisconnectedClientsSubscription.unsubscribe(),this.getDisconnectedClientsSubscription=this.statusService.getDisconnectedClients().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){for(var n=0,r=Object.keys(t);n<r.length;n++){var i=r[n],o=t[i],s="radio"+o.radio;if(o.disconnected_time){var c={};c.mac=i,c.ssid=o.ssid,c.status="offline",c.rx={rate:Object(a.b)("n/a")},c.tx={rate:Object(a.b)("n/a")},c.radio=Object(a.b)(u.a.wireless.devices[s].frequency+" GHz"),c.disconnected_time=o.disconnected_time,c.vendor=o.vendor,c.label=e.getLabelFromVendor(c.vendor),e.updateStationItems(c)}}e.stations=Object(a.d)(e.stationsTemp),e.pageLoadingService.ready("getDisconnectedClients")})},e.prototype.updateStationItems=function(e){var t=this.stationsTemp.findIndex(function(t){return t.mac===e.mac&&t.radio===e.radio});t>=0?this.stationsTemp[t]=e:this.stationsTemp.push(e)},e.prototype.extractRadioFromWlanName=function(e){return e.split(/wlan|ath/)[1].substring(0,1)},e.prototype.extractRadioFromRadioName=function(e){return e.split(/radio|wifi/)[1]},e.prototype.formatSince=function(e){return this.formatTimeService.toDays("online"===e.status?e.connected_time:e.disconnected_time)},e}())},XD9u:function(e,t,n){"use strict";n("q0RN");var r=n("S7LP");n.d(t,"a",function(){return r.a})},Xhqo:function(e,t,n){"use strict";var r=n("hwdV").Buffer,i=n(4);e.exports=function(){function e(){!function(t,n){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return this.head=1===this.length?this.tail=null:this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;for(var t=r.allocUnsafe(e>>>0),n=this.head,i=0;n;)n.data.copy(t,i),i+=n.data.length,n=n.next;return t},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e})},XlPw:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("6blF");function i(e,t){return new r.a(t?function(n){return t.schedule(o,0,{error:e,subscriber:n})}:function(t){return t.error(e)})}function o(e){e.subscriber.error(e.error)}},Xpm8:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("jGGy"),n("Obbf"),n("+NEN"),n("dcxs");var r=n("+3se"),i=(n("t2rx"),function(){function e(e,t,n,r,i){this.managementService=e,this.ubusService=t,this.notification=n,this.authService=r,this.pageLoadingService=i,this.securityPassType="password",this.pageLoadingService.register(["sysInfoViewInit","getSystemInformation"])}return e.prototype.ngOnInit=function(){this.sid=this.authService.getSid(),this.getSystemInformation()},e.prototype.ngAfterViewInit=function(){this.pageLoadingService.ready("sysInfoViewInit")},e.prototype.getSystemInformation=function(){var e=this;this.managementService.getSystemInformation().subscribe(function(t){e.pageLoadingService.ready("getSystemInformation"),e.origConfig=t,e.sysConf=Object(r.d)(e.origConfig),e.fakeSysConf=Object(r.d)(e.origConfig),e.sysConf.log_port=e.sysConf.log_port||514,e.sysConf.log_remote=parseInt(e.sysConf.log_remote,10)||0})},e.prototype.save=function(){var e=this,t=[];for(var n in this.sysConf)this.sysConf.hasOwnProperty(n)&&" "===this.sysConf[n]&&delete this.sysConf[n];this.ubusService.mergeOptions({calls:t,sid:this.sid,config:"system",section:"@system[0]",wanted:this.sysConf,got:this.origConfig}),t.push([this.sid,"uci","commit",{config:"system"}]),this.managementService.save(t).subscribe(function(t){e.notification.success(Object(r.b)("You have successfully updated your system management configuration")),e.fakeSysConf=Object(r.d)(e.sysConf),e.markAsPristine()})},e.prototype.reset=function(){this.sysConf=Object(r.d)(this.fakeSysConf),this.markAsPristine()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.cancel=function(){this.reset()},e}())},XzGN:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("67Y/"),i=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getServices=function(){var e=[];return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"upnpd",section:"config"}],[this.authService.getSid(),"uci","get",{config:"snmpd"}],[this.authService.getSid(),"uci","get",{config:"avahi"}],[this.authService.getSid(),"uci","get",{config:"dropbear",type:"dropbear"}],[this.authService.getSid(),"uci","get",{config:"system",type:"system"}]]}).pipe(Object(r.a)(function(e){return e.result.map(function(e){return e[1].values})})).pipe(Object(r.a)(function(t){return t.map(function(t){var n=Object.values(t).filter(function(e){return"object"==typeof e}).length;e.push(1==n?t[Object.keys(t)[0]]:t)}),e}))},e.prototype.saveService=function(e){return this.ubusService.call({data:e})},e}())},"Y/Uj":function(e,t,n){"use strict";n.d(t,"a",function(){return o}),n("EDOA"),n("Obbf"),n("UVPe");var r=n("Vx+w"),i=(n("FV9V"),n("+3se")),o=(n("CPDd"),function(){function e(e,t,n,r,i,o){this.bridgeService=e,this.spinner=t,this.notification=n,this.translate=r,this.addressCheckService=i,this.wifiConfigService=o,this.calls=[],this.frequency=0,this.regExSsid=/^[-a-zA-Z0-9 !@#$%^&*)([\]{}|,:;'"+=._\/?<>]{1,32}$/,this.regExPass=this.addressCheckService.vapRegExPass,this.wpa2KeyInputType="password",this.radiusPassInputType="password",this.bridge={mode:"sta",encryption:"psk2",wds:"1"},this.hasVLANs=!1,this.devices=[]}return e.prototype.ngOnInit=function(){this.getDevices()},e.prototype.getDevices=function(){var e=this;for(var t in r.a.wireless.devices)if(r.a.wireless.devices.hasOwnProperty(t)){var n=r.a.wireless.devices[t];n.frequency>this.frequency&&(this.bridge.device=t,this.frequency=n.frequency),n.id=t;var o="2.4"==n.frequency?Object(i.b)("2.4 GHz"):Object(i.b)("5 GHz");n.description=o,this.devices.push(n),this.radioNamePrefix="radio",this.bridgeService.getDevices().subscribe(function(t){var n=t[1];for(var r in e.radios=t[2],Object(i.g)(e.radios.wifi0)&&(e.radioNamePrefix="wifi"),t[0])if(t[0].hasOwnProperty(r)){e.existingBridge=t[0][r],e.bridge=Object(i.d)(e.existingBridge),e.bridge.device=e.bridge.device.replace(e.radioNamePrefix,"radio"),e.bridgeEnabled=!0,delete e.bridge.ieee80211w;break}for(var o in e.vlans=[],e.hasVLANs=Object.keys(n).length>0,n)n.hasOwnProperty(o)&&(e.vlans.push(n[o]),e.hasVLANs&&!e.bridge.network&&"1"===n[o].management&&(e.bridge.network=o),n[o].vlan_id=o,n[o].id=o.replace(/^vlan/,""));for(var s in e.bridge.network||(e.bridge.network="lan"),e.radios)if(e.radios.hasOwnProperty(s)){var a=e.radios[s];e.bridge.device===a[".name"]&&(e.radioChannel=a.channel)}e.spinner.hide()})}this.fakeBridgeEnabled=this.bridgeEnabled,this.fakeBridge=Object(i.d)(this.bridge)},e.prototype.save=function(){var e=this;this.bridgeEnabled&&(this.bridge.ieee80211w="1",this.newBridge=Object(i.d)(this.bridge),this.newBridge.device=this.newBridge.device.replace("radio",this.radioNamePrefix)),this.bridgeService.save(this.bridgeEnabled,this.existingBridge,this.newBridge).subscribe(function(){e.notification.success(Object(i.b)("WDS bridge configuration updated.")),e.cleanupForm(),e.fakeBridgeEnabled=e.bridgeEnabled,e.fakeBridge=Object(i.d)(e.bridge)})},e.prototype.onStateChange=function(){var e=this,t=this.bridge.device;for(var n in!1===this.bridgeEnabled&&(this.channelIsAuto=!1),this.notification.removeNotification(this.notificationMsgId),this.radios)if(this.radios.hasOwnProperty(n)){var o=this.radios[n];if(this.bridge.device===o[".name"]&&(this.radioChannel=o.channel),this.bridge.device===o[".name"]&&"auto"===o.channel&&!0===this.bridgeEnabled){this.channelIsAuto=!0;var s='<a href="#/wifi/'+t+'">here</a>',a=void 0;switch(r.a.wireless.devices[this.bridge.device].frequency){case 5:a=this.wifiConfigService.indoor5GUse(r.a.wireless.devices[this.bridge.device],o)?Object(i.b)("Please configure a static wifi channel {here}. Be aware that the other access points in your network need to be configured accordingly. Recommendation: select a channel between 36 and 48 to avoid channel changes because of DFS."):Object(i.b)("Please configure a static wifi channel {here}. Be aware that the other access points in your network need to be configured accordingly. Recommendation: select channel 100 to avoid channel changes because of DFS.");break;case 2.4:a=Object(i.b)("Please configure a static wifi channel {here}. Be aware that the other access points in your network need to be configured accordingly.")}this.translate.get(a,{here:s}).subscribe(function(t){e.notificationMsgId=e.notification.info(t,{time:6e5,html:!0})})}}},e.prototype.onRadioChange=function(){this.notification.removeNotification(this.notificationMsgId),this.channelIsAuto=!1,this.onStateChange()},e.prototype.onEncryptionChange=function(){delete this.bridge.identity,delete this.bridge.password,delete this.bridge.key,"psk2"===this.bridge.encryption?(delete this.bridge.eap_type,delete this.bridge.auth,delete this.bridge.disabled):(this.bridge.eap_type="ttls",this.bridge.auth="PAP",this.bridge.disabled=0),this.wpa2KeyInputType="password",this.radiusPassInputType="password"},e.prototype.wpa2KeyInputTypeVisibility=function(){this.wpa2KeyInputType="password"===this.wpa2KeyInputType?"text":"password"},e.prototype.radiusPassInputTypeVisibility=function(){this.radiusPassInputType="password"===this.radiusPassInputType?"text":"password"},e.prototype.cancel=function(){this.bridgeEnabled=this.fakeBridgeEnabled,this.bridge=Object(i.d)(this.fakeBridge),this.cleanupForm()},e.prototype.cleanupForm=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity(),this.delos.form.markAsUntouched()},e}())},YBdB:function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var r,i,o,s,a,u=1,c={},l=!1,h=e.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(e);f=f&&f.setTimeout?f:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick(function(){p(e)})}:function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?(s="setImmediate$"+Math.random()+"$",a=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(s)&&p(+t.data.slice(s.length))},e.addEventListener?e.addEventListener("message",a,!1):e.attachEvent("onmessage",a),r=function(t){e.postMessage(s+t,"*")}):e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){p(e.data)},r=function(e){o.port2.postMessage(e)}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,r=function(e){var t=h.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):r=function(e){setTimeout(p,0,e)},f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];return c[u]={callback:e,args:t},r(u),u++},f.clearImmediate=d}function d(e){delete c[e]}function p(e){if(l)setTimeout(p,0,e);else{var t=c[e];if(t){l=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{d(e),l=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n("yLpj"),n("8oxB"))},YuTi:function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},Z5Gg:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("+3se"),i=(n("bO+w"),function(){function e(e,t){this.service=e,this.translateService=t,this.text=Object(r.b)("Disable guest network {duration}"),this.enabled=!1}return e.prototype.getTimestamp=function(){return Math.floor(this.timeout.getTime()/1e3)},e.prototype.update=function(){var e=this;this.service.getAutoSwitchOffTime().subscribe(function(t){if(e.timeout=t,e.enabled=null!=t,e.timestamp=e.enabled?e.getTimestamp():-1,clearTimeout(e.timer),e.enabled){var n=e.timeout.getTime()-(new Date).getTime();e.timer=window.setTimeout(function(){e.enabled=!1},n)}})},e.prototype.ngOnInit=function(){this.update()},e}())},ZLSo:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){return function(){}}()},ZNe7:function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("K9Ia"),i=n("ny24"),o=(n("UVPe"),n("+3se")),s=n("Cf0Y"),a=n("Vx+w"),u=(n("Obbf"),Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}),c=function(){function e(e,t,n){this.spinner=e,this.configSyncService=t,this.notification=n,this.copyConfigSync=new s.b,this.settings=new s.b,this.ngUnsubscribe=new r.a}return e.prototype.ngOnInit=function(){this.getConfigSync()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.getConfigSync=function(){var e=this;this.configSyncService.getConfigSync().pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){e.settings=t,e.copyConfigSync=u({},t),e.spinner.hide()})},e.prototype.save=function(){var e=this;this.spinner.show(),this.configSyncService.saveConfigSync(this.settings).subscribe(function(){e.notification.success(Object(o.b)("You have successfully updated your Config sync settings"))}),this.copyConfigSync=u({},this.settings),this.spinner.hide(),this.cleanupForm()},e.prototype.cleanupForm=function(){this.delos.form.markAsUntouched(),this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.cancel=function(){this.cleanupForm(),this.settings.domain=this.copyConfigSync.domain,this.settings.enabled=this.copyConfigSync.enabled},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.isDomainConfigurable=function(){return 0!=this.settings.domain||a.a.firmwareVersion.includes(".N")||a.a.firmwareVersion.includes(".D0")},e}()},ZTy4:function(e,t,n){"use strict";n.d(t,"a",function(){return d}),n("H5ub");var r=n("K9Ia"),i=n("909l"),o=n("ny24"),s=n("VnD/"),a=n("vubp"),u=n("xMyE"),c=n("Vx+w"),l=n("ClyA"),h=(n("Obbf"),n("t2rx"),n("UVPe"),n("+3se")),f=(n("5Ki+"),n("QRwJ"),n("EDOA"),n("CPDd"),Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}),d=function(){function e(e,t,n,i,o,s,a,u){this.spinner=e,this.notification=t,this.wifiConfigService=n,this.vapsService=i,this.modalService=o,this.addressCheckService=s,this.radioService=a,this.pageLoadingService=u,this.savingInProgress=!1,this.keyInputTypeRadio0="password",this.keyInputTypeRadio1="password",this.regExSsid=this.addressCheckService.vapRegExSsid,this.regExPass=this.addressCheckService.vapRegExPass,this.regExPassphrase=this.addressCheckService.vapRegExPassphrase,this.regExPSK=this.addressCheckService.vapRegExPSK,this.vaps=[],this.radioDevice0="radio0",this.radioDevice1="radio1",this.channels_labels={auto:Object(h.b)("Auto"),1:"(2412 MHz)",2:"(2417 MHz)",3:"(2422 MHz)",4:"(2427 MHz)",5:"(2432 MHz)",6:"(2437 MHz)",7:"(2442 MHz)",8:"(2447 MHz)",9:"(2452 MHz)",10:"(2457 MHz)",11:"(2462 MHz)",12:"(2467 MHz)",13:"(2472 MHz)",36:"(5180 MHz)",40:"(5200 MHz)",44:"(5220 MHz)",48:"(5240 MHz)",52:"(5260 MHz)",56:"(5280 MHz)",60:"(5300 MHz)",64:"(5320 MHz)",100:"(5500 MHz)",104:"(5520 MHz)",108:"(5540 MHz)",112:"(5560 MHz)",116:"(5580 MHz)",120:"(5600 MHz)",124:"(5620 MHz)",128:"(5640 MHz)",132:"(5660 MHz)",136:"(5680 MHz)",140:"(5700 MHz)"},this.radio0Name="radio0",this.radio1Name="radio1",this.config0=c.a.wireless.devices.radio0,this.config1=c.a.wireless.devices.radio1,this.ngUnsubscribe=new r.a,this.radio0Available=Object(h.e)(c.a,"wireless.devices.radio0"),this.radio1Available=Object(h.e)(c.a,"wireless.devices.radio1"),this.dualRadio=this.radio0Available&&this.radio1Available,this.pageLoadingService.register(["vapsLoaded","radiosLoaded"])}return e.prototype.ngOnInit=function(){this.getRadios(),this.getVaps()},e.prototype.ngAfterViewInit=function(){var e=this;this.spinner.spinnerState.pipe(Object(o.a)(this.ngUnsubscribe),Object(s.a)(function(e){return!e.show}),Object(a.a)(0)).subscribe(function(){e.registerVisibleForms()})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.bsModalRef&&this.bsModalRef.hide()},e.prototype.getVaps=function(){var e=this;this.vapsService.getVaps().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){var n=t[0];for(var r in Object(h.g)(t[3].wifi0)&&(e.radioDevice0="wifi0",e.radioDevice1="wifi1"),n)if(n.hasOwnProperty(r)){if((o=n[r]).device=o.device.replace("wifi","radio"),!Object(h.g)(c.a.wireless.devices[o.device]))continue;o.name="radio0"==o.device?Object(h.b)("2.4 GHz"):Object(h.b)("5 GHz"),delete o.dynamic_vlan,o.maxassoc&&(o.hasMaxassoc=!0,o.maxassoc=Number(o.maxassoc))}for(var i in e.vaps=Object.values(n).filter(function(e){return!e.dvl_guest||"1"!==e.dvl_guest}).map(function(e){return f({},e)}),e.vaps){var o;e.vaps.hasOwnProperty(i)&&delete(o=e.vaps[i]).ieee80211w}e.vaps.forEach(function(e){e.disabled=isNaN(Number(e.disabled))?0:Number(e.disabled),e.isolate=isNaN(Number(e.isolate))?0:Number(e.isolate),e.uapsd=isNaN(Number(e.uapsd))?1:Number(e.uapsd),e.hidden=isNaN(Number(e.hidden))?0:Number(e.hidden),e.ieee80211r=isNaN(Number(e.ieee80211r))?0:Number(e.ieee80211r),e.network||(e.network="lan")}),e.radio0Vap=e.vaps.find(function(e){return"radio0"==e.device}),e.dualRadio&&(e.radio1Vap=e.vaps.find(function(e){return"radio1"==e.device}),e.useCommonSettings=e.radio0Vap&&e.radio1Vap&&e.radio0Vap.hidden==e.radio1Vap.hidden&&e.radio0Vap.ssid==e.radio1Vap.ssid&&e.radio0Vap.encryption==e.radio1Vap.encryption&&e.radio0Vap.key==e.radio1Vap.key),e.useCommonSettingsFake=e.useCommonSettings,e.radio0VapFake=Object(h.d)(e.radio0Vap),e.dualRadio&&(e.radio1VapFake=Object(h.d)(e.radio1Vap)),e.pageLoadingService.ready("vapsLoaded")})},e.prototype.getRadios=function(){var e=this;this.radioService.getRadios().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){if(e.radios=t[0],e.bridges=t[1],e.radioCount=Object.keys(e.radios).length,e.radio0=Object.values(e.radios).find(function(e){return"wifi0"==e[".name"]}),e.radio1=Object.values(e.radios).find(function(e){return"wifi1"==e[".name"]}),Object(h.g)(c.a.plc)||Object(h.g)(c.a.ghn)){var n=t[2];Object(h.g)(n.disabled)&&0==Number(n.disabled)&&Object(h.g)(n.standby)&&0!=Number(n.standby)&&(e.plcStandby=!0)}if(e.radio0){e.device0Name=Object(h.g)(e.radios[e.radio0Name])?e.radio0Name:e.radio0Name.replace("radio","wifi");var r=e.radios[e.device0Name],i=void 0,o=void 0;for(var s in e.radio0TxPower=r.txpower,e.radio0mode=e.radio0.require_mode||"",e.radio0enable=Number(r.disabled)||0,e.radio0rates=e.config0.rates,e.supported0Rates=[],r.supported_rates=r.supported_rates||[],i={},r.supported_rates)r.supported_rates.hasOwnProperty(s)&&(i[r.supported_rates[s]]=!0);for(var a=0;a<e.config0.rates.length;++a)e.supported0Rates.push(i[e.config0.rates[a]]||!1);for(e.basic0Rate=[],r.basic_rate=r.basic_rate||[],o={},a=0;a<r.basic_rate.length;++a)o[r.basic_rate[a]]=!0;for(a=0;a<e.config0.rates.length;++a)e.basic0Rate.push(o[e.config0.rates[a]]||!1);e.radio0Bandwidth=r.htmode,e.radio0rescan={on:Number(r.autorescan)||0,interval:Number(r.autorescan_interval)||0},e.channels0=[],e.config0.groups.forEach(function(t){var n;t.channels.forEach(function(t){n="number"==typeof t?t+" "+e.channels_labels[t]:e.channels_labels[t];var i=!0;e.isChannelAllowed(e.radio0Bandwidth,t,e.device0Name)||(i=!1),e.channels0.push({channel:t,label:n,enabled:i}),t==r.channel&&(e.channel0=t)})}),e.channel0Fake=Object(h.d)(e.channel0),e.radio0modeFake=Object(h.d)(e.radio0mode)}if(e.radio1){e.device1Name=Object(h.g)(e.radios[e.radio1Name])?e.radio1Name:e.radio1Name.replace("radio","wifi");var u=e.radios[e.device1Name];for(var s in i=void 0,o=void 0,e.radio1TxPower=u.txpower,e.radio1mode=e.radio1.require_mode||"",e.radio1enable=Number(u.disabled)||1,e.radio1rates=e.config1.rates,e.supported1Rates=[],u.supported_rates=u.supported_rates||[],i={},u.supported_rates)u.supported_rates.hasOwnProperty(s)&&(i[u.supported_rates[s]]=!0);for(a=0;a<e.config1.rates.length;++a)e.supported1Rates.push(i[e.config1.rates[a]]||!1);for(e.basic1Rate=[],u.basic_rate=u.basic_rate||[],o={},a=0;a<u.basic_rate.length;++a)o[u.basic_rate[a]]=!0;for(a=0;a<e.config1.rates.length;++a)e.basic1Rate.push(o[e.config1.rates[a]]||!1);e.radio1Bandwidth=u.htmode,e.indoorUse={available:e.wifiConfigService.indoor5GAvailable(e.config1),enabled:e.wifiConfigService.indoor5GEnabled(u)},e.radio1rescan={on:Number(u.autorescan)||0,interval:Number(u.autorescan_interval)||0},e.channels1=[],e.config1.groups.forEach(function(t){var n;t.channels.forEach(function(t){n="number"==typeof t?t+" "+e.channels_labels[t]:e.channels_labels[t];var r=!0;e.isChannelAllowed(e.radio1Bandwidth,t,e.device1Name)||(r=!1),e.channels1.push({channel:t,label:n,enabled:r}),t==u.channel&&(e.channel1=t)})}),e.channel1Fake=Object(h.d)(e.channel1),e.radio1modeFake=Object(h.d)(e.radio1mode)}e.radio0Enabled=Number(e.radio0.disabled)||0,e.radio1Enabled=e.radio1?Number(e.radio1.disabled)||0:null,e.radioNotEnabled=0!==e.radio0Enabled&&0!==e.radio1Enabled,e.radio01Enabled=0==e.radio0Enabled&&0==e.radio1Enabled,0==e.radio0Enabled&&(e.radioMode="2,4Ghz"),0==e.radio1Enabled&&(e.radioMode="5Ghz"),e.radioNotEnabled&&(e.radioMode="off"),e.radio01Enabled&&(e.radioMode="2,4+5 GHz"),e.radioModeFake=e.radioMode,e.pageLoadingService.ready("radiosLoaded")})},e.prototype.save=function(){var e=this;this.showCancel=!1,this.showSave=!1;var t=function(){e.notification.success(Object(h.b)("You've successfully configured the WiFi network.")),e.radioModeFake=e.radioMode,e.channel0Fake=Object(h.d)(e.channel0),e.radio0modeFake=Object(h.d)(e.radio0mode),e.savingInProgress=!1,e.dualRadio&&(e.channel1Fake=Object(h.d)(e.channel1),e.radio1modeFake=Object(h.d)(e.radio1mode)),e.markAsPristine()};"off"==this.radioMode&&this.plcStandby?(this.bsModalRef=this.modalService.show(l.a),this.bsModalRef.content.title=Object(h.b)("Warning"),this.bsModalRef.content.bodyText=Object(h.b)("Powerline standby is enabled! Disabling all radios will interrupt the connection to this website if the device can only be reached via Powerline and it enters standby mode. Do you really want to disable this radio?"),this.bsModalRef.content.actionButtonText=Object(h.b)("Confirm"),this.bsModalRef.content.closeButtonText=Object(h.b)("Cancel"),this.bsModalRef.content.ok=function(){e.doSave().subscribe(function(){t()},function(t){e.savingInProgress=!1})}):this.doSave().subscribe(function(){t()},function(t){e.savingInProgress=!1})},e.prototype.doSave=function(){var e=this;this.savingInProgress=!0;var t={},n=[],r=[];t={channel:this.channel0,htmode:this.radio0Bandwidth,txpower:this.radio0TxPower,cfg_disabled:this.radio0Enabled,disabled:this.radio0Enabled};var o=[];this.radio0mode?t.require_mode=this.radio0mode:o.push("require_mode");for(var s=0;s<this.radio0rates.length;s++)this.supported0Rates[s]&&n.push(this.radio0rates[s]);for(n.length&&(t.supported_rates=n),s=0;s<this.radio0rates.length;s++)this.basic0Rate[s]&&r.push(this.radio0rates[s]);if(r.length&&(t.basic_rate=r),this.dualRadio){var a={},c=[],l=[],f=[];a={channel:this.channel1,htmode:this.radio1Bandwidth,txpower:this.radio1TxPower,cfg_disabled:this.radio1Enabled,disabled:this.radio1Enabled};var d=[];for(this.radio1mode?a.require_mode=this.radio1mode:d.push("require_mode"),s=0;s<this.radio1rates.length;s++)this.supported1Rates[s]&&c.push(this.radio1rates[s]);for(c.length&&(a.supported_rates=c),s=0;s<this.radio1rates.length;s++)this.basic1Rate[s]&&l.push(this.radio1rates[s]);if(l.length&&(a.basic_rate=l),this.isIndoorUse(this.device1Name)?(f.push("36-112"),f.push("132-140"),a.acs_chanlist=f):(f.push("100-112"),f.push("132-140"),a.acs_chanlist=f),"2,4+5 GHz"===this.radioMode&&this.useCommonSettings){Object.assign(this.radio1Vap,{disabled:this.radio0Vap.disabled,hidden:this.radio0Vap.hidden,ssid:this.radio0Vap.ssid,key:this.radio0Vap.key,encryption:this.radio0Vap.encryption});var p=Object(h.d)(this.radio0Vap);return p[".name"]=this.radio0Vap[".name"]+"+"+this.radio1Vap[".name"],p.device=this.radio0Vap.device+"+"+this.radio1Vap.device,p.names=p[".name"].split("+"),p.devices=p.device.split("+"),Object(i.a)(this.vapsService.save(p,!1,this.radioDevice0,this.radioDevice1),this.radioService.save(this.radios,this.radio0rescan.interval,this.device0Name,t,o),this.radioService.save(this.radios,this.radio1rescan.interval,this.device1Name,a,d)).pipe(Object(u.a)(function(){return e.getVaps()}))}return"2,4Ghz"===this.radioMode?this.radio1Vap.remove_wps_config=!0:"5Ghz"===this.radioMode&&(this.radio0Vap.remove_wps_config=!0),Object(i.a)(this.vapsService.save(this.radio0Vap,!1,this.radioDevice0,this.radioDevice1),this.vapsService.save(this.radio1Vap,!1,this.radioDevice0,this.radioDevice1),this.radioService.save(this.radios,this.radio0rescan.interval,this.device0Name,t,o),this.radioService.save(this.radios,this.radio1rescan.interval,this.device1Name,a,d)).pipe(Object(u.a)(function(){return e.getVaps()}))}return Object(i.a)(this.vapsService.save(this.radio0Vap,!1,this.radioDevice0,this.radioDevice1),this.radioService.save(this.radios,this.radio0rescan.interval,this.device0Name,t,o)).pipe(Object(u.a)(function(){return e.getVaps()}))},e.prototype.toggleKeyVisibility=function(e){e.device.includes(0)?this.keyInputTypeRadio0="password"===this.keyInputTypeRadio0?"text":"password":this.keyInputTypeRadio1="password"===this.keyInputTypeRadio1?"text":"password"},e.prototype.onEncryptionChange=function(e){e.device.includes("0")?this.keyInputTypeRadio0="password":this.keyInputTypeRadio1="password"},e.prototype.selectRadioMode=function(e){var t=this;switch(e){case"2,4+5 GHz":this.radio0Enabled=0,this.radio1Enabled=0;break;case"2,4Ghz":this.radio0Enabled=0,this.radio1Enabled=1;break;case"5Ghz":this.radio0Enabled=1,this.radio1Enabled=0,this.ssidCheck(this.radio1Vap);break;default:this.radio0Enabled=1,this.radio1Enabled=1}setTimeout(function(){t.registerVisibleForms()},0),this.markAsDirty()},e.prototype.determineForbiddenChannels=function(e,t){return"VHT20"==e?this.isIndoorUse(t)?{channels:[]}:{channels:[36,40,44,48,52,56,60,64]}:"VHT40"==e?this.isIndoorUse(t)?{channels:[140]}:{channels:[36,40,44,48,52,56,60,64,140]}:"VHT80"==e?this.isIndoorUse(t)?{channels:[132,136,140]}:{channels:[36,40,44,48,52,56,60,64,132,136,140]}:{channels:[]}},e.prototype.isIndoorUse=function(e){return!(this.indoorUse.available&&e.includes("1")&&!this.indoorUse.enabled)},e.prototype.isChannelAllowed=function(e,t,n){var r=this.determineForbiddenChannels(e,n).channels;for(var i in r.forEach(function(e){if(t==e)return!1}),this.bridges)if(this.bridges[i].device===n&&"auto"===t)return!1;return!0},e.prototype.ssidCheck=function(e){var t=this;return Object(h.g)(e.ssid)&&!e.ssid.match(this.regExSsid)?(this.ssid_error=Object(h.b)("Invalid SSID! Please enter between 1 and 32 characters. Allowed special characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"),this.invalid=!0,this.markAsInvalid(),!1):""!=e.ssid&&(this.ssid_error="",void setTimeout(function(){t.delos.controls.radio0name&&t.delos.controls.radio0name.setErrors(null),t.delos.controls.radi10name&&t.delos.controls.radi10name.setErrors(null)},0))},e.prototype.keySsidCheck=function(e){var t=this;if(Object(h.g)(e.key))if(64==e.key.length){if(!e.key.match(this.regExPSK))return this.key_ssid_error=Object(h.b)("Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"),!1}else if(!e.key.match(this.regExPassphrase))return this.key_ssid_error=Object(h.b)("Invalid Key! Please enter between 8 and 63 characters. Allowed special characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"),!1;if(""==e.key)return!1;this.key_ssid_error="",setTimeout(function(){t.delos.controls.radio1key&&t.delos.controls.radio1key.setErrors(null),t.delos.controls.radio0key&&t.delos.controls.radio0key.setErrors(null)},0)},e.prototype.registerVisibleForms=function(){var e=this;this.forms=[this.dualNotSharedForm,this.radio0Form,this.radio1Form].filter(function(e){return e}),this.forms.forEach(function(t){Object.values(t.controls).some(function(e){return e.invalid})&&e.markAsInvalid(),t.statusChanges.subscribe(function(){e.dirty=e.forms.some(function(e){return e.dirty}),e.invalid=e.forms.some(function(e){return e.invalid}),e.dirty&&e.markAsDirty(),e.invalid&&e.markAsInvalid()})})},e.prototype.changeCommonSettings=function(){var e=this;this.useCommonSettings=!this.useCommonSettings,this.useCommonSettings?this.markAsDirty():(setTimeout(function(){e.registerVisibleForms()},0),this.showCancel=!0,this.showSave=!0)},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.registerVisibleForms(),this.forms.forEach(function(e){e.form.markAsPristine(),e.form.updateValueAndValidity()}),this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.markAsInvalid=function(){this.invalid=!0,this.delos.form.setErrors({incorrect:!0})},e.prototype.cancel=function(){this.showCancel=!1,this.showSave=!1,this.keyInputTypeRadio0="password",this.keyInputTypeRadio1="password",this.channel0=Object(h.d)(this.channel0Fake),this.radio0mode=Object(h.d)(this.radio0modeFake),this.useCommonSettings=this.useCommonSettingsFake,this.radio0Vap=Object(h.d)(this.radio0VapFake),this.dualRadio&&(this.channel1=Object(h.d)(this.channel1Fake),this.radio1mode=Object(h.d)(this.radio1modeFake),this.radio1Vap=Object(h.d)(this.radio1VapFake)),this.radioMode=this.radioModeFake,this.selectRadioMode(this.radioModeFake),this.markAsPristine()},e}()},ZYCi:function(e,t,n){"use strict";var r=n("mrSG"),i=n("CcnG"),o=n("F/XL"),s=n("0/uQ"),a=n("6blF");function u(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}u.prototype=Object.create(Error.prototype);var c=u,l=n("26FU"),h=n("K9Ia"),f=n("67Y/"),d=n("Txjg"),p=n("VnD/"),g=n("AxiF"),b=n("xMyE"),v=function(e){return void 0===e&&(e=y),Object(b.a)({hasValue:!1,next:function(){this.hasValue=!0},complete:function(){if(!this.hasValue)throw e()}})};function y(){return new c}var m=n("HJBe"),w=n("mChF");function _(e,t){var n=arguments.length>=2;return function(r){return r.pipe(e?Object(p.a)(function(t,n){return e(t,n,r)}):w.a,Object(g.a)(1),n?Object(m.a)(t):v(function(){return new c}))}}var S=n("Zn8D"),O=n("FFOo");function C(e,t){return function(n){return n.lift(new j(e,t,n))}}var j=function(){function e(e,t,n){this.predicate=e,this.thisArg=t,this.source=n}return e.prototype.call=function(e,t){return t.subscribe(new k(e,this.predicate,this.thisArg,this.source))},e}(),k=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o.predicate=n,o.thisArg=r,o.source=i,o.index=0,o.thisArg=r||o,o}return r.c(t,e),t.prototype.notifyComplete=function(e){this.destination.next(e),this.destination.complete()},t.prototype._next=function(e){var t=!1;try{t=this.predicate.call(this.thisArg,e,this.index++,this.source)}catch(n){return void this.destination.error(n)}t||this.notifyComplete(!1)},t.prototype._complete=function(){this.notifyComplete(!0)},t}(O.a),E=n("9Z1F"),x=n("t9fZ");function P(e,t){var n=arguments.length>=2;return function(r){return r.pipe(e?Object(p.a)(function(t,n){return e(t,n,r)}):w.a,Object(x.a)(1),n?Object(m.a)(t):v(function(){return new c}))}}var T=n("psW0"),A=n("Phjn"),I=n("Qgas"),M=n("Ip0R"),N=n("ZYjt");n.d(t,"v",function(){return tn}),n.d(t,"C",function(){return fn}),n.d(t,"x",function(){return sn}),n.d(t,"D",function(){return dn}),n.d(t,"E",function(){return pn}),n.d(t,"z",function(){return un}),n.d(t,"y",function(){return an}),n.d(t,"B",function(){return hn}),n.d(t,"w",function(){return rn}),n.d(t,"A",function(){return ln}),n.d(t,"F",function(){return Xt}),n.d(t,"o",function(){return zt}),n.d(t,"n",function(){return qt}),n.d(t,"q",function(){return Kt}),n.d(t,"d",function(){return D}),n.d(t,"k",function(){return q}),n.d(t,"l",function(){return Tt}),n.d(t,"m",function(){return Ut}),n.d(t,"j",function(){return It}),n.d(t,"h",function(){return en}),n.d(t,"i",function(){return gn}),n.d(t,"p",function(){return on}),n.d(t,"b",function(){return Wt}),n.d(t,"e",function(){return Qt}),n.d(t,"f",function(){return $t}),n.d(t,"g",function(){return Yt}),n.d(t,"r",function(){return Jt}),n.d(t,"a",function(){return Je}),n.d(t,"s",function(){return Nt}),n.d(t,"c",function(){return _e}),n.d(t,"t",function(){return we}),n.d(t,"u",function(){return J});var R=function(){return function(e,t){this.id=e,this.url=t}}(),D=function(e){function t(t,n,r,i){void 0===r&&(r="imperative"),void 0===i&&(i=null);var o=e.call(this,t,n)||this;return o.navigationTrigger=r,o.restoredState=i,o}return Object(r.c)(t,e),t.prototype.toString=function(){return"NavigationStart(id: "+this.id+", url: '"+this.url+"')"},t}(R),V=function(e){function t(t,n,r){var i=e.call(this,t,n)||this;return i.urlAfterRedirects=r,i}return Object(r.c)(t,e),t.prototype.toString=function(){return"NavigationEnd(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"')"},t}(R),L=function(e){function t(t,n,r){var i=e.call(this,t,n)||this;return i.reason=r,i}return Object(r.c)(t,e),t.prototype.toString=function(){return"NavigationCancel(id: "+this.id+", url: '"+this.url+"')"},t}(R),U=function(e){function t(t,n,r){var i=e.call(this,t,n)||this;return i.error=r,i}return Object(r.c)(t,e),t.prototype.toString=function(){return"NavigationError(id: "+this.id+", url: '"+this.url+"', error: "+this.error+")"},t}(R),F=function(e){function t(t,n,r,i){var o=e.call(this,t,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.c)(t,e),t.prototype.toString=function(){return"RoutesRecognized(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},t}(R),B=function(e){function t(t,n,r,i){var o=e.call(this,t,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.c)(t,e),t.prototype.toString=function(){return"GuardsCheckStart(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},t}(R),z=function(e){function t(t,n,r,i,o){var s=e.call(this,t,n)||this;return s.urlAfterRedirects=r,s.state=i,s.shouldActivate=o,s}return Object(r.c)(t,e),t.prototype.toString=function(){return"GuardsCheckEnd(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+", shouldActivate: "+this.shouldActivate+")"},t}(R),H=function(e){function t(t,n,r,i){var o=e.call(this,t,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.c)(t,e),t.prototype.toString=function(){return"ResolveStart(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},t}(R),q=function(e){function t(t,n,r,i){var o=e.call(this,t,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.c)(t,e),t.prototype.toString=function(){return"ResolveEnd(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},t}(R),G=function(){function e(e){this.route=e}return e.prototype.toString=function(){return"RouteConfigLoadStart(path: "+this.route.path+")"},e}(),W=function(){function e(e){this.route=e}return e.prototype.toString=function(){return"RouteConfigLoadEnd(path: "+this.route.path+")"},e}(),K=function(){function e(e){this.snapshot=e}return e.prototype.toString=function(){return"ChildActivationStart(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},e}(),Z=function(){function e(e){this.snapshot=e}return e.prototype.toString=function(){return"ChildActivationEnd(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},e}(),Y=function(){function e(e){this.snapshot=e}return e.prototype.toString=function(){return"ActivationStart(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},e}(),$=function(){function e(e){this.snapshot=e}return e.prototype.toString=function(){return"ActivationEnd(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},e}(),Q=function(){function e(e,t,n){this.routerEvent=e,this.position=t,this.anchor=n}return e.prototype.toString=function(){return"Scroll(anchor: '"+this.anchor+"', position: '"+(this.position?this.position[0]+", "+this.position[1]:null)+"')"},e}(),J=function(){return function(){}}(),X="primary",ee=function(){function e(e){this.params=e||{}}return e.prototype.has=function(e){return this.params.hasOwnProperty(e)},e.prototype.get=function(e){if(this.has(e)){var t=this.params[e];return Array.isArray(t)?t[0]:t}return null},e.prototype.getAll=function(e){if(this.has(e)){var t=this.params[e];return Array.isArray(t)?t:[t]}return[]},Object.defineProperty(e.prototype,"keys",{get:function(){return Object.keys(this.params)},enumerable:!0,configurable:!0}),e}();function te(e){return new ee(e)}function ne(e,t,n){var r=n.path.split("/");if(r.length>e.length)return null;if("full"===n.pathMatch&&(t.hasChildren()||r.length<e.length))return null;for(var i={},o=0;o<r.length;o++){var s=r[o],a=e[o];if(s.startsWith(":"))i[s.substring(1)]=a;else if(s!==a.path)return null}return{consumed:e.slice(0,r.length),posParams:i}}var re=function(){return function(e,t){this.routes=e,this.module=t}}();function ie(e,t){void 0===t&&(t="");for(var n=0;n<e.length;n++){var r=e[n];oe(r,se(t,r))}}function oe(e,t){if(!e)throw new Error("\n      Invalid configuration of route '"+t+"': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    ");if(Array.isArray(e))throw new Error("Invalid configuration of route '"+t+"': Array cannot be specified");if(!e.component&&!e.children&&!e.loadChildren&&e.outlet&&e.outlet!==X)throw new Error("Invalid configuration of route '"+t+"': a componentless route without children or loadChildren cannot have a named outlet set");if(e.redirectTo&&e.children)throw new Error("Invalid configuration of route '"+t+"': redirectTo and children cannot be used together");if(e.redirectTo&&e.loadChildren)throw new Error("Invalid configuration of route '"+t+"': redirectTo and loadChildren cannot be used together");if(e.children&&e.loadChildren)throw new Error("Invalid configuration of route '"+t+"': children and loadChildren cannot be used together");if(e.redirectTo&&e.component)throw new Error("Invalid configuration of route '"+t+"': redirectTo and component cannot be used together");if(e.path&&e.matcher)throw new Error("Invalid configuration of route '"+t+"': path and matcher cannot be used together");if(void 0===e.redirectTo&&!e.component&&!e.children&&!e.loadChildren)throw new Error("Invalid configuration of route '"+t+"'. One of the following must be provided: component, redirectTo, children or loadChildren");if(void 0===e.path&&void 0===e.matcher)throw new Error("Invalid configuration of route '"+t+"': routes must have either a path or a matcher specified");if("string"==typeof e.path&&"/"===e.path.charAt(0))throw new Error("Invalid configuration of route '"+t+"': path cannot start with a slash");if(""===e.path&&void 0!==e.redirectTo&&void 0===e.pathMatch)throw new Error("Invalid configuration of route '{path: \""+t+'", redirectTo: "'+e.redirectTo+"\"}': please provide 'pathMatch'. The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.");if(void 0!==e.pathMatch&&"full"!==e.pathMatch&&"prefix"!==e.pathMatch)throw new Error("Invalid configuration of route '"+t+"': pathMatch can only be set to 'prefix' or 'full'");e.children&&ie(e.children,t)}function se(e,t){return t?e||t.path?e&&!t.path?e+"/":!e&&t.path?t.path:e+"/"+t.path:"":e}function ae(e){var t=e.children&&e.children.map(ae),n=t?Object(r.a)({},e,{children:t}):Object(r.a)({},e);return!n.component&&(t||n.loadChildren)&&n.outlet&&n.outlet!==X&&(n.component=J),n}function ue(e,t){var n,r=Object.keys(e),i=Object.keys(t);if(r.length!=i.length)return!1;for(var o=0;o<r.length;o++)if(e[n=r[o]]!==t[n])return!1;return!0}function ce(e){return Array.prototype.concat.apply([],e)}function le(e){return e.length>0?e[e.length-1]:null}function he(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n)}function fe(e){return e.pipe(Object(S.a)(),C(function(e){return!0===e}))}function de(e){return Object(i.ub)(e)?e:Object(i.vb)(e)?Object(s.a)(Promise.resolve(e)):Object(o.a)(e)}function pe(e,t,n){return n?function(e,t){return ue(e,t)}(e.queryParams,t.queryParams)&&function e(t,n){if(!ye(t.segments,n.segments))return!1;if(t.numberOfChildren!==n.numberOfChildren)return!1;for(var r in n.children){if(!t.children[r])return!1;if(!e(t.children[r],n.children[r]))return!1}return!0}(e.root,t.root):function(e,t){return Object.keys(t).length<=Object.keys(e).length&&Object.keys(t).every(function(n){return t[n]===e[n]})}(e.queryParams,t.queryParams)&&function e(t,n){return function t(n,r,i){if(n.segments.length>i.length)return!!ye(s=n.segments.slice(0,i.length),i)&&!r.hasChildren();if(n.segments.length===i.length){if(!ye(n.segments,i))return!1;for(var o in r.children){if(!n.children[o])return!1;if(!e(n.children[o],r.children[o]))return!1}return!0}var s=i.slice(0,n.segments.length),a=i.slice(n.segments.length);return!!ye(n.segments,s)&&!!n.children[X]&&t(n.children[X],r,a)}(t,n,n.segments)}(e.root,t.root)}var ge=function(){function e(e,t,n){this.root=e,this.queryParams=t,this.fragment=n}return Object.defineProperty(e.prototype,"queryParamMap",{get:function(){return this._queryParamMap||(this._queryParamMap=te(this.queryParams)),this._queryParamMap},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return Se.serialize(this)},e}(),be=function(){function e(e,t){var n=this;this.segments=e,this.children=t,this.parent=null,he(t,function(e,t){return e.parent=n})}return e.prototype.hasChildren=function(){return this.numberOfChildren>0},Object.defineProperty(e.prototype,"numberOfChildren",{get:function(){return Object.keys(this.children).length},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return Oe(this)},e}(),ve=function(){function e(e,t){this.path=e,this.parameters=t}return Object.defineProperty(e.prototype,"parameterMap",{get:function(){return this._parameterMap||(this._parameterMap=te(this.parameters)),this._parameterMap},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return Pe(this)},e}();function ye(e,t){return e.length===t.length&&e.every(function(e,n){return e.path===t[n].path})}function me(e,t){var n=[];return he(e.children,function(e,r){r===X&&(n=n.concat(t(e,r)))}),he(e.children,function(e,r){r!==X&&(n=n.concat(t(e,r)))}),n}var we=function(){return function(){}}(),_e=function(){function e(){}return e.prototype.parse=function(e){var t=new Ne(e);return new ge(t.parseRootSegment(),t.parseQueryParams(),t.parseFragment())},e.prototype.serialize=function(e){var t,n;return"/"+function e(t,n){if(!t.hasChildren())return Oe(t);if(n){var r=t.children[X]?e(t.children[X],!1):"",i=[];return he(t.children,function(t,n){n!==X&&i.push(n+":"+e(t,!1))}),i.length>0?r+"("+i.join("//")+")":r}var o=me(t,function(n,r){return r===X?[e(t.children[X],!1)]:[r+":"+e(n,!1)]});return Oe(t)+"/("+o.join("//")+")"}(e.root,!0)+(t=e.queryParams,(n=Object.keys(t).map(function(e){var n=t[e];return Array.isArray(n)?n.map(function(t){return je(e)+"="+je(t)}).join("&"):je(e)+"="+je(n)})).length?"?"+n.join("&"):"")+("string"==typeof e.fragment?"#"+encodeURI(e.fragment):"")},e}(),Se=new _e;function Oe(e){return e.segments.map(function(e){return Pe(e)}).join("/")}function Ce(e){return encodeURIComponent(e).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function je(e){return Ce(e).replace(/%3B/gi,";")}function ke(e){return Ce(e).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Ee(e){return decodeURIComponent(e)}function xe(e){return Ee(e.replace(/\+/g,"%20"))}function Pe(e){return""+ke(e.path)+(t=e.parameters,Object.keys(t).map(function(e){return";"+ke(e)+"="+ke(t[e])}).join(""));var t}var Te=/^[^\/()?;=#]+/;function Ae(e){var t=e.match(Te);return t?t[0]:""}var Ie=/^[^=?&#]+/,Me=/^[^?&#]+/,Ne=function(){function e(e){this.url=e,this.remaining=e}return e.prototype.parseRootSegment=function(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new be([],{}):new be([],this.parseChildren())},e.prototype.parseQueryParams=function(){var e={};if(this.consumeOptional("?"))do{this.parseQueryParam(e)}while(this.consumeOptional("&"));return e},e.prototype.parseFragment=function(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null},e.prototype.parseChildren=function(){if(""===this.remaining)return{};this.consumeOptional("/");var e=[];for(this.peekStartsWith("(")||e.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),e.push(this.parseSegment());var t={};this.peekStartsWith("/(")&&(this.capture("/"),t=this.parseParens(!0));var n={};return this.peekStartsWith("(")&&(n=this.parseParens(!1)),(e.length>0||Object.keys(t).length>0)&&(n[X]=new be(e,t)),n},e.prototype.parseSegment=function(){var e=Ae(this.remaining);if(""===e&&this.peekStartsWith(";"))throw new Error("Empty path url segment cannot have parameters: '"+this.remaining+"'.");return this.capture(e),new ve(Ee(e),this.parseMatrixParams())},e.prototype.parseMatrixParams=function(){for(var e={};this.consumeOptional(";");)this.parseParam(e);return e},e.prototype.parseParam=function(e){var t=Ae(this.remaining);if(t){this.capture(t);var n="";if(this.consumeOptional("=")){var r=Ae(this.remaining);r&&this.capture(n=r)}e[Ee(t)]=Ee(n)}},e.prototype.parseQueryParam=function(e){var t,n=(t=this.remaining.match(Ie))?t[0]:"";if(n){this.capture(n);var r="";if(this.consumeOptional("=")){var i=function(e){var t=e.match(Me);return t?t[0]:""}(this.remaining);i&&this.capture(r=i)}var o=xe(n),s=xe(r);if(e.hasOwnProperty(o)){var a=e[o];Array.isArray(a)||(e[o]=a=[a]),a.push(s)}else e[o]=s}},e.prototype.parseParens=function(e){var t={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){var n=Ae(this.remaining),r=this.remaining[n.length];if("/"!==r&&")"!==r&&";"!==r)throw new Error("Cannot parse url '"+this.url+"'");var i=void 0;n.indexOf(":")>-1?(i=n.substr(0,n.indexOf(":")),this.capture(i),this.capture(":")):e&&(i=X);var o=this.parseChildren();t[i]=1===Object.keys(o).length?o[X]:new be([],o),this.consumeOptional("//")}return t},e.prototype.peekStartsWith=function(e){return this.remaining.startsWith(e)},e.prototype.consumeOptional=function(e){return!!this.peekStartsWith(e)&&(this.remaining=this.remaining.substring(e.length),!0)},e.prototype.capture=function(e){if(!this.consumeOptional(e))throw new Error('Expected "'+e+'".')},e}(),Re=function(){return function(e){this.segmentGroup=e||null}}(),De=function(){return function(e){this.urlTree=e}}();function Ve(e){return new a.a(function(t){return t.error(new Re(e))})}function Le(e){return new a.a(function(t){return t.error(new De(e))})}function Ue(e){return new a.a(function(t){return t.error(new Error("Only absolute redirects can have named outlets. redirectTo: '"+e+"'"))})}var Fe=function(){function e(e,t,n,r,o){this.configLoader=t,this.urlSerializer=n,this.urlTree=r,this.config=o,this.allowRedirects=!0,this.ngModule=e.get(i.x)}return e.prototype.apply=function(){var e=this;return this.expandSegmentGroup(this.ngModule,this.config,this.urlTree.root,X).pipe(Object(f.a)(function(t){return e.createUrlTree(t,e.urlTree.queryParams,e.urlTree.fragment)})).pipe(Object(E.a)(function(t){if(t instanceof De)return e.allowRedirects=!1,e.match(t.urlTree);if(t instanceof Re)throw e.noMatchError(t);throw t}))},e.prototype.match=function(e){var t=this;return this.expandSegmentGroup(this.ngModule,this.config,e.root,X).pipe(Object(f.a)(function(n){return t.createUrlTree(n,e.queryParams,e.fragment)})).pipe(Object(E.a)(function(e){if(e instanceof Re)throw t.noMatchError(e);throw e}))},e.prototype.noMatchError=function(e){return new Error("Cannot match any routes. URL Segment: '"+e.segmentGroup+"'")},e.prototype.createUrlTree=function(e,t,n){var r,i=e.segments.length>0?new be([],((r={})[X]=e,r)):e;return new ge(i,t,n)},e.prototype.expandSegmentGroup=function(e,t,n,r){return 0===n.segments.length&&n.hasChildren()?this.expandChildren(e,t,n).pipe(Object(f.a)(function(e){return new be([],e)})):this.expandSegment(e,n,t,n.segments,r,!0)},e.prototype.expandChildren=function(e,t,n){var r=this;return function(n,i){if(0===Object.keys(n).length)return Object(o.a)({});var s=[],a=[],u={};return he(n,function(n,i){var o,c,l=(o=i,c=n,r.expandSegmentGroup(e,t,c,o)).pipe(Object(f.a)(function(e){return u[i]=e}));i===X?s.push(l):a.push(l)}),o.a.apply(null,s.concat(a)).pipe(Object(d.a)(),_(),Object(f.a)(function(){return u}))}(n.children)},e.prototype.expandSegment=function(e,t,n,i,s,a){var u=this;return o.a.apply(void 0,Object(r.g)(n)).pipe(Object(f.a)(function(r){return u.expandSegmentAgainstRoute(e,t,n,r,i,s,a).pipe(Object(E.a)(function(e){if(e instanceof Re)return Object(o.a)(null);throw e}))}),Object(d.a)(),P(function(e){return!!e}),Object(E.a)(function(e,n){if(e instanceof c||"EmptyError"===e.name){if(u.noLeftoversInUrl(t,i,s))return Object(o.a)(new be([],{}));throw new Re(t)}throw e}))},e.prototype.noLeftoversInUrl=function(e,t,n){return 0===t.length&&!e.children[n]},e.prototype.expandSegmentAgainstRoute=function(e,t,n,r,i,o,s){return qe(r)!==o?Ve(t):void 0===r.redirectTo?this.matchSegmentAgainstRoute(e,t,r,i):s&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(e,t,n,r,i,o):Ve(t)},e.prototype.expandSegmentAgainstRouteUsingRedirect=function(e,t,n,r,i,o){return"**"===r.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(e,n,r,o):this.expandRegularSegmentAgainstRouteUsingRedirect(e,t,n,r,i,o)},e.prototype.expandWildCardWithParamsAgainstRouteUsingRedirect=function(e,t,n,r){var i=this,o=this.applyRedirectCommands([],n.redirectTo,{});return n.redirectTo.startsWith("/")?Le(o):this.lineralizeSegments(n,o).pipe(Object(T.a)(function(n){var o=new be(n,{});return i.expandSegment(e,o,t,n,r,!1)}))},e.prototype.expandRegularSegmentAgainstRouteUsingRedirect=function(e,t,n,r,i,o){var s=this,a=Be(t,r,i),u=a.consumedSegments,c=a.lastChild,l=a.positionalParamSegments;if(!a.matched)return Ve(t);var h=this.applyRedirectCommands(u,r.redirectTo,l);return r.redirectTo.startsWith("/")?Le(h):this.lineralizeSegments(r,h).pipe(Object(T.a)(function(r){return s.expandSegment(e,t,n,r.concat(i.slice(c)),o,!1)}))},e.prototype.matchSegmentAgainstRoute=function(e,t,n,i){var s=this;if("**"===n.path)return n.loadChildren?this.configLoader.load(e.injector,n).pipe(Object(f.a)(function(e){return n._loadedConfig=e,new be(i,{})})):Object(o.a)(new be(i,{}));var a=Be(t,n,i),u=a.consumedSegments,c=a.lastChild;if(!a.matched)return Ve(t);var l=i.slice(c);return this.getChildConfig(e,n).pipe(Object(T.a)(function(e){var n=e.module,i=e.routes,a=function(e,t,n,i){return n.length>0&&function(e,t,n){return i.some(function(n){return He(e,t,n)&&qe(n)!==X})}(e,n)?{segmentGroup:ze(new be(t,function(e,t){var n,i,o={};o[X]=t;try{for(var s=Object(r.h)(e),a=s.next();!a.done;a=s.next()){var u=a.value;""===u.path&&qe(u)!==X&&(o[qe(u)]=new be([],{}))}}catch(c){n={error:c}}finally{try{a&&!a.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}return o}(i,new be(n,e.children)))),slicedSegments:[]}:0===n.length&&function(e,t,n){return i.some(function(n){return He(e,t,n)})}(e,n)?{segmentGroup:ze(new be(e.segments,function(e,t,n,i){var o,s,a={};try{for(var u=Object(r.h)(n),c=u.next();!c.done;c=u.next()){var l=c.value;He(e,t,l)&&!i[qe(l)]&&(a[qe(l)]=new be([],{}))}}catch(h){o={error:h}}finally{try{c&&!c.done&&(s=u.return)&&s.call(u)}finally{if(o)throw o.error}}return Object(r.a)({},i,a)}(e,n,i,e.children))),slicedSegments:n}:{segmentGroup:e,slicedSegments:n}}(t,u,l,i),c=a.segmentGroup,h=a.slicedSegments;return 0===h.length&&c.hasChildren()?s.expandChildren(n,i,c).pipe(Object(f.a)(function(e){return new be(u,e)})):0===i.length&&0===h.length?Object(o.a)(new be(u,{})):s.expandSegment(n,c,i,h,X,!0).pipe(Object(f.a)(function(e){return new be(u.concat(e.segments),e.children)}))}))},e.prototype.getChildConfig=function(e,t){var n=this;return t.children?Object(o.a)(new re(t.children,e)):t.loadChildren?void 0!==t._loadedConfig?Object(o.a)(t._loadedConfig):function(e,t){var n=t.canLoad;return n&&0!==n.length?fe(Object(s.a)(n).pipe(Object(f.a)(function(n){var r=e.get(n);return de(r.canLoad?r.canLoad(t):r(t))}))):Object(o.a)(!0)}(e.injector,t).pipe(Object(T.a)(function(r){return r?n.configLoader.load(e.injector,t).pipe(Object(f.a)(function(e){return t._loadedConfig=e,e})):function(e){return new a.a(function(t){return t.error(((n=Error("NavigationCancelingError: Cannot load children because the guard of the route \"path: '"+e.path+"'\" returned false")).ngNavigationCancelingError=!0,n));var n})}(t)})):Object(o.a)(new re([],e))},e.prototype.lineralizeSegments=function(e,t){for(var n=[],r=t.root;;){if(n=n.concat(r.segments),0===r.numberOfChildren)return Object(o.a)(n);if(r.numberOfChildren>1||!r.children[X])return Ue(e.redirectTo);r=r.children[X]}},e.prototype.applyRedirectCommands=function(e,t,n){return this.applyRedirectCreatreUrlTree(t,this.urlSerializer.parse(t),e,n)},e.prototype.applyRedirectCreatreUrlTree=function(e,t,n,r){var i=this.createSegmentGroup(e,t.root,n,r);return new ge(i,this.createQueryParams(t.queryParams,this.urlTree.queryParams),t.fragment)},e.prototype.createQueryParams=function(e,t){var n={};return he(e,function(e,r){if("string"==typeof e&&e.startsWith(":")){var i=e.substring(1);n[r]=t[i]}else n[r]=e}),n},e.prototype.createSegmentGroup=function(e,t,n,r){var i=this,o=this.createSegments(e,t.segments,n,r),s={};return he(t.children,function(t,o){s[o]=i.createSegmentGroup(e,t,n,r)}),new be(o,s)},e.prototype.createSegments=function(e,t,n,r){var i=this;return t.map(function(t){return t.path.startsWith(":")?i.findPosParam(e,t,r):i.findOrReturn(t,n)})},e.prototype.findPosParam=function(e,t,n){var r=n[t.path.substring(1)];if(!r)throw new Error("Cannot redirect to '"+e+"'. Cannot find '"+t.path+"'.");return r},e.prototype.findOrReturn=function(e,t){var n,i,o=0;try{for(var s=Object(r.h)(t),a=s.next();!a.done;a=s.next()){var u=a.value;if(u.path===e.path)return t.splice(o),u;o++}}catch(c){n={error:c}}finally{try{a&&!a.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}return e},e}();function Be(e,t,n){if(""===t.path)return"full"===t.pathMatch&&(e.hasChildren()||n.length>0)?{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}:{matched:!0,consumedSegments:[],lastChild:0,positionalParamSegments:{}};var r=(t.matcher||ne)(n,e,t);return r?{matched:!0,consumedSegments:r.consumed,lastChild:r.consumed.length,positionalParamSegments:r.posParams}:{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}}function ze(e){if(1===e.numberOfChildren&&e.children[X]){var t=e.children[X];return new be(e.segments.concat(t.segments),t.children)}return e}function He(e,t,n){return(!(e.hasChildren()||t.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0!==n.redirectTo}function qe(e){return e.outlet||X}var Ge=function(){function e(e){this._root=e}return Object.defineProperty(e.prototype,"root",{get:function(){return this._root.value},enumerable:!0,configurable:!0}),e.prototype.parent=function(e){var t=this.pathFromRoot(e);return t.length>1?t[t.length-2]:null},e.prototype.children=function(e){var t=We(e,this._root);return t?t.children.map(function(e){return e.value}):[]},e.prototype.firstChild=function(e){var t=We(e,this._root);return t&&t.children.length>0?t.children[0].value:null},e.prototype.siblings=function(e){var t=Ke(e,this._root);return t.length<2?[]:t[t.length-2].children.map(function(e){return e.value}).filter(function(t){return t!==e})},e.prototype.pathFromRoot=function(e){return Ke(e,this._root).map(function(e){return e.value})},e}();function We(e,t){var n,i;if(e===t.value)return t;try{for(var o=Object(r.h)(t.children),s=o.next();!s.done;s=o.next()){var a=We(e,s.value);if(a)return a}}catch(u){n={error:u}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}return null}function Ke(e,t){var n,i;if(e===t.value)return[t];try{for(var o=Object(r.h)(t.children),s=o.next();!s.done;s=o.next()){var a=Ke(e,s.value);if(a.length)return a.unshift(t),a}}catch(u){n={error:u}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}return[]}var Ze=function(){function e(e,t){this.value=e,this.children=t}return e.prototype.toString=function(){return"TreeNode("+this.value+")"},e}();function Ye(e){var t={};return e&&e.children.forEach(function(e){return t[e.value.outlet]=e}),t}var $e=function(e){function t(t,n){var r=e.call(this,t)||this;return r.snapshot=n,nt(r,t),r}return Object(r.c)(t,e),t.prototype.toString=function(){return this.snapshot.toString()},t}(Ge);function Qe(e,t){var n=function(e,t){var n=new et([],{},{},"",{},X,t,null,e.root,-1,{});return new tt("",new Ze(n,[]))}(e,t),r=new l.a([new ve("",{})]),i=new l.a({}),o=new l.a({}),s=new l.a({}),a=new l.a(""),u=new Je(r,i,s,a,o,X,t,n.root);return u.snapshot=n.root,new $e(new Ze(u,[]),n)}var Je=function(){function e(e,t,n,r,i,o,s,a){this.url=e,this.params=t,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=o,this.component=s,this._futureSnapshot=a}return Object.defineProperty(e.prototype,"routeConfig",{get:function(){return this._futureSnapshot.routeConfig},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"root",{get:function(){return this._routerState.root},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"parent",{get:function(){return this._routerState.parent(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"firstChild",{get:function(){return this._routerState.firstChild(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"children",{get:function(){return this._routerState.children(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pathFromRoot",{get:function(){return this._routerState.pathFromRoot(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"paramMap",{get:function(){return this._paramMap||(this._paramMap=this.params.pipe(Object(f.a)(function(e){return te(e)}))),this._paramMap},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"queryParamMap",{get:function(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(Object(f.a)(function(e){return te(e)}))),this._queryParamMap},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.snapshot?this.snapshot.toString():"Future("+this._futureSnapshot+")"},e}();function Xe(e,t){void 0===t&&(t="emptyOnly");var n=e.pathFromRoot,i=0;if("always"!==t)for(i=n.length-1;i>=1;){var o=n[i],s=n[i-1];if(o.routeConfig&&""===o.routeConfig.path)i--;else{if(s.component)break;i--}}return function(e){return e.reduce(function(e,t){return{params:Object(r.a)({},e.params,t.params),data:Object(r.a)({},e.data,t.data),resolve:Object(r.a)({},e.resolve,t._resolvedData)}},{params:{},data:{},resolve:{}})}(n.slice(i))}var et=function(){function e(e,t,n,r,i,o,s,a,u,c,l){this.url=e,this.params=t,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=o,this.component=s,this.routeConfig=a,this._urlSegment=u,this._lastPathIndex=c,this._resolve=l}return Object.defineProperty(e.prototype,"root",{get:function(){return this._routerState.root},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"parent",{get:function(){return this._routerState.parent(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"firstChild",{get:function(){return this._routerState.firstChild(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"children",{get:function(){return this._routerState.children(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pathFromRoot",{get:function(){return this._routerState.pathFromRoot(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"paramMap",{get:function(){return this._paramMap||(this._paramMap=te(this.params)),this._paramMap},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"queryParamMap",{get:function(){return this._queryParamMap||(this._queryParamMap=te(this.queryParams)),this._queryParamMap},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return"Route(url:'"+this.url.map(function(e){return e.toString()}).join("/")+"', path:'"+(this.routeConfig?this.routeConfig.path:"")+"')"},e}(),tt=function(e){function t(t,n){var r=e.call(this,n)||this;return r.url=t,nt(r,n),r}return Object(r.c)(t,e),t.prototype.toString=function(){return rt(this._root)},t}(Ge);function nt(e,t){t.value._routerState=e,t.children.forEach(function(t){return nt(e,t)})}function rt(e){var t=e.children.length>0?" { "+e.children.map(rt).join(", ")+" } ":"";return""+e.value+t}function it(e){if(e.snapshot){var t=e.snapshot,n=e._futureSnapshot;e.snapshot=n,ue(t.queryParams,n.queryParams)||e.queryParams.next(n.queryParams),t.fragment!==n.fragment&&e.fragment.next(n.fragment),ue(t.params,n.params)||e.params.next(n.params),function(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;++n)if(!ue(e[n],t[n]))return!1;return!0}(t.url,n.url)||e.url.next(n.url),ue(t.data,n.data)||e.data.next(n.data)}else e.snapshot=e._futureSnapshot,e.data.next(e._futureSnapshot.data)}function ot(e,t){var n,r;return ue(e.params,t.params)&&ye(n=e.url,r=t.url)&&n.every(function(e,t){return ue(e.parameters,r[t].parameters)})&&!(!e.parent!=!t.parent)&&(!e.parent||ot(e.parent,t.parent))}function st(e,t,n){if(n&&e.shouldReuseRoute(t.value,n.value.snapshot)){(u=n.value)._futureSnapshot=t.value;var i=function(e,t,n){return t.children.map(function(t){var i,o;try{for(var s=Object(r.h)(n.children),a=s.next();!a.done;a=s.next()){var u=a.value;if(e.shouldReuseRoute(u.value.snapshot,t.value))return st(e,t,u)}}catch(c){i={error:c}}finally{try{a&&!a.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}return st(e,t)})}(e,t,n);return new Ze(u,i)}var o=e.retrieve(t.value);if(o){var s=o.route;return function e(t,n){if(t.value.routeConfig!==n.value.routeConfig)throw new Error("Cannot reattach ActivatedRouteSnapshot created from a different route");if(t.children.length!==n.children.length)throw new Error("Cannot reattach ActivatedRouteSnapshot with a different number of children");n.value._futureSnapshot=t.value;for(var r=0;r<t.children.length;++r)e(t.children[r],n.children[r])}(t,s),s}var a,u=new Je(new l.a((a=t.value).url),new l.a(a.params),new l.a(a.queryParams),new l.a(a.fragment),new l.a(a.data),a.outlet,a.component,a);return i=t.children.map(function(t){return st(e,t)}),new Ze(u,i)}function at(e){return"object"==typeof e&&null!=e&&!e.outlets&&!e.segmentPath}function ut(e,t,n,r,i){var o={};return r&&he(r,function(e,t){o[t]=Array.isArray(e)?e.map(function(e){return""+e}):""+e}),new ge(n.root===e?t:function e(t,n,r){var i={};return he(t.children,function(t,o){i[o]=t===n?r:e(t,n,r)}),new be(t.segments,i)}(n.root,e,t),o,i)}var ct=function(){function e(e,t,n){if(this.isAbsolute=e,this.numberOfDoubleDots=t,this.commands=n,e&&n.length>0&&at(n[0]))throw new Error("Root segment cannot have matrix parameters");var r=n.find(function(e){return"object"==typeof e&&null!=e&&e.outlets});if(r&&r!==le(n))throw new Error("{outlets:{}} has to be the last command")}return e.prototype.toRoot=function(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]},e}(),lt=function(){return function(e,t,n){this.segmentGroup=e,this.processChildren=t,this.index=n}}();function ht(e){return"object"==typeof e&&null!=e&&e.outlets?e.outlets[X]:""+e}function ft(e,t,n){if(e||(e=new be([],{})),0===e.segments.length&&e.hasChildren())return dt(e,t,n);var r=function(e,t,n){for(var r=0,i=t,o={match:!1,pathIndex:0,commandIndex:0};i<e.segments.length;){if(r>=n.length)return o;var s=e.segments[i],a=ht(n[r]),u=r<n.length-1?n[r+1]:null;if(i>0&&void 0===a)break;if(a&&u&&"object"==typeof u&&void 0===u.outlets){if(!vt(a,u,s))return o;r+=2}else{if(!vt(a,{},s))return o;r++}i++}return{match:!0,pathIndex:i,commandIndex:r}}(e,t,n),i=n.slice(r.commandIndex);if(r.match&&r.pathIndex<e.segments.length){var o=new be(e.segments.slice(0,r.pathIndex),{});return o.children[X]=new be(e.segments.slice(r.pathIndex),e.children),dt(o,0,i)}return r.match&&0===i.length?new be(e.segments,{}):r.match&&!e.hasChildren()?pt(e,t,n):r.match?dt(e,0,i):pt(e,t,n)}function dt(e,t,n){if(0===n.length)return new be(e.segments,{});var r=function(e){var t,n;return"object"!=typeof e[0]?((t={})[X]=e,t):void 0===e[0].outlets?((n={})[X]=e,n):e[0].outlets}(n),i={};return he(r,function(n,r){null!==n&&(i[r]=ft(e.children[r],t,n))}),he(e.children,function(e,t){void 0===r[t]&&(i[t]=e)}),new be(e.segments,i)}function pt(e,t,n){for(var r=e.segments.slice(0,t),i=0;i<n.length;){if("object"==typeof n[i]&&void 0!==n[i].outlets){var o=gt(n[i].outlets);return new be(r,o)}if(0===i&&at(n[0]))r.push(new ve(e.segments[t].path,n[0])),i++;else{var s=ht(n[i]),a=i<n.length-1?n[i+1]:null;s&&a&&at(a)?(r.push(new ve(s,bt(a))),i+=2):(r.push(new ve(s,{})),i++)}}return new be(r,{})}function gt(e){var t={};return he(e,function(e,n){null!==e&&(t[n]=pt(new be([],{}),0,e))}),t}function bt(e){var t={};return he(e,function(e,n){return t[n]=""+e}),t}function vt(e,t,n){return e==n.path&&ue(t,n.parameters)}var yt=function(){return function(e){this.path=e,this.route=this.path[this.path.length-1]}}(),mt=function(){return function(e,t){this.component=e,this.route=t}}(),wt=function(){function e(e,t,n,r){this.future=e,this.curr=t,this.moduleInjector=n,this.forwardEvent=r,this.canActivateChecks=[],this.canDeactivateChecks=[]}return e.prototype.initialize=function(e){var t=this.future._root;this.setupChildRouteGuards(t,this.curr?this.curr._root:null,e,[t.value])},e.prototype.checkGuards=function(){var e=this;return this.isDeactivating()||this.isActivating()?this.runCanDeactivateChecks().pipe(Object(T.a)(function(t){return t?e.runCanActivateChecks():Object(o.a)(!1)})):Object(o.a)(!0)},e.prototype.resolveData=function(e){var t=this;return this.isActivating()?Object(s.a)(this.canActivateChecks).pipe(Object(A.a)(function(n){return t.runResolve(n.route,e)}),Object(I.a)(function(e,t){return e})):Object(o.a)(null)},e.prototype.isDeactivating=function(){return 0!==this.canDeactivateChecks.length},e.prototype.isActivating=function(){return 0!==this.canActivateChecks.length},e.prototype.setupChildRouteGuards=function(e,t,n,r){var i=this,o=Ye(t);e.children.forEach(function(e){i.setupRouteGuards(e,o[e.value.outlet],n,r.concat([e.value])),delete o[e.value.outlet]}),he(o,function(e,t){return i.deactivateRouteAndItsChildren(e,n.getContext(t))})},e.prototype.setupRouteGuards=function(e,t,n,r){var i=e.value,o=t?t.value:null,s=n?n.getContext(e.value.outlet):null;if(o&&i.routeConfig===o.routeConfig){var a=this.shouldRunGuardsAndResolvers(o,i,i.routeConfig.runGuardsAndResolvers);a?this.canActivateChecks.push(new yt(r)):(i.data=o.data,i._resolvedData=o._resolvedData),this.setupChildRouteGuards(e,t,i.component?s?s.children:null:n,r),a&&this.canDeactivateChecks.push(new mt(s.outlet.component,o))}else o&&this.deactivateRouteAndItsChildren(t,s),this.canActivateChecks.push(new yt(r)),this.setupChildRouteGuards(e,null,i.component?s?s.children:null:n,r)},e.prototype.shouldRunGuardsAndResolvers=function(e,t,n){switch(n){case"always":return!0;case"paramsOrQueryParamsChange":return!ot(e,t)||!ue(e.queryParams,t.queryParams);case"paramsChange":default:return!ot(e,t)}},e.prototype.deactivateRouteAndItsChildren=function(e,t){var n=this,r=Ye(e),i=e.value;he(r,function(e,r){n.deactivateRouteAndItsChildren(e,i.component?t?t.children.getContext(r):null:t)}),this.canDeactivateChecks.push(new mt(i.component&&t&&t.outlet&&t.outlet.isActivated?t.outlet.component:null,i))},e.prototype.runCanDeactivateChecks=function(){var e=this;return Object(s.a)(this.canDeactivateChecks).pipe(Object(T.a)(function(t){return e.runCanDeactivate(t.component,t.route)}),C(function(e){return!0===e}))},e.prototype.runCanActivateChecks=function(){var e=this;return Object(s.a)(this.canActivateChecks).pipe(Object(A.a)(function(t){return fe(Object(s.a)([e.fireChildActivationStart(t.route.parent),e.fireActivationStart(t.route),e.runCanActivateChild(t.path),e.runCanActivate(t.route)]))}),C(function(e){return!0===e}))},e.prototype.fireActivationStart=function(e){return null!==e&&this.forwardEvent&&this.forwardEvent(new Y(e)),Object(o.a)(!0)},e.prototype.fireChildActivationStart=function(e){return null!==e&&this.forwardEvent&&this.forwardEvent(new K(e)),Object(o.a)(!0)},e.prototype.runCanActivate=function(e){var t=this,n=e.routeConfig?e.routeConfig.canActivate:null;return n&&0!==n.length?fe(Object(s.a)(n).pipe(Object(f.a)(function(n){var r=t.getToken(n,e);return de(r.canActivate?r.canActivate(e,t.future):r(e,t.future)).pipe(P())}))):Object(o.a)(!0)},e.prototype.runCanActivateChild=function(e){var t=this,n=e[e.length-1],r=e.slice(0,e.length-1).reverse().map(function(e){return t.extractCanActivateChild(e)}).filter(function(e){return null!==e});return fe(Object(s.a)(r).pipe(Object(f.a)(function(e){return fe(Object(s.a)(e.guards).pipe(Object(f.a)(function(r){var i=t.getToken(r,e.node);return de(i.canActivateChild?i.canActivateChild(n,t.future):i(n,t.future)).pipe(P())})))})))},e.prototype.extractCanActivateChild=function(e){var t=e.routeConfig?e.routeConfig.canActivateChild:null;return t&&0!==t.length?{node:e,guards:t}:null},e.prototype.runCanDeactivate=function(e,t){var n=this,r=t&&t.routeConfig?t.routeConfig.canDeactivate:null;return r&&0!==r.length?Object(s.a)(r).pipe(Object(T.a)(function(r){var i=n.getToken(r,t);return de(i.canDeactivate?i.canDeactivate(e,t,n.curr,n.future):i(e,t,n.curr,n.future)).pipe(P())})).pipe(C(function(e){return!0===e})):Object(o.a)(!0)},e.prototype.runResolve=function(e,t){return this.resolveNode(e._resolve,e).pipe(Object(f.a)(function(n){return e._resolvedData=n,e.data=Object(r.a)({},e.data,Xe(e,t).resolve),null}))},e.prototype.resolveNode=function(e,t){var n=this,r=Object.keys(e);if(0===r.length)return Object(o.a)({});if(1===r.length){var i=r[0];return this.getResolver(e[i],t).pipe(Object(f.a)(function(e){var t;return(t={})[i]=e,t}))}var a={};return Object(s.a)(r).pipe(Object(T.a)(function(r){return n.getResolver(e[r],t).pipe(Object(f.a)(function(e){return a[r]=e,e}))})).pipe(_(),Object(f.a)(function(){return a}))},e.prototype.getResolver=function(e,t){var n=this.getToken(e,t);return de(n.resolve?n.resolve(t,this.future):n(t,this.future))},e.prototype.getToken=function(e,t){var n=function(e){if(!e)return null;for(var t=e.parent;t;t=t.parent){var n=t.routeConfig;if(n&&n._loadedConfig)return n._loadedConfig}return null}(t);return(n?n.module.injector:this.moduleInjector).get(e)},e}(),_t=function(){return function(){}}(),St=function(){function e(e,t,n,r,i,o){this.rootComponentType=e,this.config=t,this.urlTree=n,this.url=r,this.paramsInheritanceStrategy=i,this.relativeLinkResolution=o}return e.prototype.recognize=function(){try{var e=jt(this.urlTree.root,[],[],this.config,this.relativeLinkResolution).segmentGroup,t=this.processSegmentGroup(this.config,e,X),n=new et([],Object.freeze({}),Object.freeze(Object(r.a)({},this.urlTree.queryParams)),this.urlTree.fragment,{},X,this.rootComponentType,null,this.urlTree.root,-1,{}),i=new Ze(n,t),s=new tt(this.url,i);return this.inheritParamsAndData(s._root),Object(o.a)(s)}catch(u){return new a.a(function(e){return e.error(u)})}},e.prototype.inheritParamsAndData=function(e){var t=this,n=e.value,r=Xe(n,this.paramsInheritanceStrategy);n.params=Object.freeze(r.params),n.data=Object.freeze(r.data),e.children.forEach(function(e){return t.inheritParamsAndData(e)})},e.prototype.processSegmentGroup=function(e,t,n){return 0===t.segments.length&&t.hasChildren()?this.processChildren(e,t):this.processSegment(e,t,t.segments,n)},e.prototype.processChildren=function(e,t){var n,r=this,i=me(t,function(t,n){return r.processSegmentGroup(e,t,n)});return n={},i.forEach(function(e){var t=n[e.value.outlet];if(t){var r=t.url.map(function(e){return e.toString()}).join("/"),i=e.value.url.map(function(e){return e.toString()}).join("/");throw new Error("Two segments cannot have the same outlet name: '"+r+"' and '"+i+"'.")}n[e.value.outlet]=e.value}),i.sort(function(e,t){return e.value.outlet===X?-1:t.value.outlet===X?1:e.value.outlet.localeCompare(t.value.outlet)}),i},e.prototype.processSegment=function(e,t,n,i){var o,s;try{for(var a=Object(r.h)(e),u=a.next();!u.done;u=a.next()){var c=u.value;try{return this.processSegmentAgainstRoute(c,t,n,i)}catch(l){if(!(l instanceof _t))throw l}}}catch(h){o={error:h}}finally{try{u&&!u.done&&(s=a.return)&&s.call(a)}finally{if(o)throw o.error}}if(this.noLeftoversInUrl(t,n,i))return[];throw new _t},e.prototype.noLeftoversInUrl=function(e,t,n){return 0===t.length&&!e.children[n]},e.prototype.processSegmentAgainstRoute=function(e,t,n,i){if(e.redirectTo)throw new _t;if((e.outlet||X)!==i)throw new _t;var o,s=[],a=[];if("**"===e.path){var u=n.length>0?le(n).parameters:{};o=new et(n,u,Object.freeze(Object(r.a)({},this.urlTree.queryParams)),this.urlTree.fragment,xt(e),i,e.component,e,Ot(t),Ct(t)+n.length,Pt(e))}else{var c=function(e,t,n){if(""===t.path){if("full"===t.pathMatch&&(e.hasChildren()||n.length>0))throw new _t;return{consumedSegments:[],lastChild:0,parameters:{}}}var i=(t.matcher||ne)(n,e,t);if(!i)throw new _t;var o={};he(i.posParams,function(e,t){o[t]=e.path});var s=i.consumed.length>0?Object(r.a)({},o,i.consumed[i.consumed.length-1].parameters):o;return{consumedSegments:i.consumed,lastChild:i.consumed.length,parameters:s}}(t,e,n);s=c.consumedSegments,a=n.slice(c.lastChild),o=new et(s,c.parameters,Object.freeze(Object(r.a)({},this.urlTree.queryParams)),this.urlTree.fragment,xt(e),i,e.component,e,Ot(t),Ct(t)+s.length,Pt(e))}var l=function(e){return e.children?e.children:e.loadChildren?e._loadedConfig.routes:[]}(e),h=jt(t,s,a,l,this.relativeLinkResolution),f=h.segmentGroup,d=h.slicedSegments;if(0===d.length&&f.hasChildren()){var p=this.processChildren(l,f);return[new Ze(o,p)]}if(0===l.length&&0===d.length)return[new Ze(o,[])];var g=this.processSegment(l,f,d,X);return[new Ze(o,g)]},e}();function Ot(e){for(var t=e;t._sourceSegment;)t=t._sourceSegment;return t}function Ct(e){for(var t=e,n=t._segmentIndexShift?t._segmentIndexShift:0;t._sourceSegment;)n+=(t=t._sourceSegment)._segmentIndexShift?t._segmentIndexShift:0;return n-1}function jt(e,t,n,i,o){if(n.length>0&&function(e,t,n){return i.some(function(n){return kt(e,t,n)&&Et(n)!==X})}(e,n)){var s=new be(t,function(e,t,n,i){var o,s,a={};a[X]=i,i._sourceSegment=e,i._segmentIndexShift=t.length;try{for(var u=Object(r.h)(n),c=u.next();!c.done;c=u.next()){var l=c.value;if(""===l.path&&Et(l)!==X){var h=new be([],{});h._sourceSegment=e,h._segmentIndexShift=t.length,a[Et(l)]=h}}}catch(f){o={error:f}}finally{try{c&&!c.done&&(s=u.return)&&s.call(u)}finally{if(o)throw o.error}}return a}(e,t,i,new be(n,e.children)));return s._sourceSegment=e,s._segmentIndexShift=t.length,{segmentGroup:s,slicedSegments:[]}}if(0===n.length&&function(e,t,n){return i.some(function(n){return kt(e,t,n)})}(e,n)){var a=new be(e.segments,function(e,t,n,i,o,s){var a,u,c={};try{for(var l=Object(r.h)(i),h=l.next();!h.done;h=l.next()){var f=h.value;if(kt(e,n,f)&&!o[Et(f)]){var d=new be([],{});d._sourceSegment=e,d._segmentIndexShift="legacy"===s?e.segments.length:t.length,c[Et(f)]=d}}}catch(p){a={error:p}}finally{try{h&&!h.done&&(u=l.return)&&u.call(l)}finally{if(a)throw a.error}}return Object(r.a)({},o,c)}(e,t,n,i,e.children,o));return a._sourceSegment=e,a._segmentIndexShift=t.length,{segmentGroup:a,slicedSegments:n}}var u=new be(e.segments,e.children);return u._sourceSegment=e,u._segmentIndexShift=t.length,{segmentGroup:u,slicedSegments:n}}function kt(e,t,n){return(!(e.hasChildren()||t.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0===n.redirectTo}function Et(e){return e.outlet||X}function xt(e){return e.data||{}}function Pt(e){return e.resolve||{}}var Tt=function(){return function(){}}(),At=function(){function e(){}return e.prototype.shouldDetach=function(e){return!1},e.prototype.store=function(e,t){},e.prototype.shouldAttach=function(e){return!1},e.prototype.retrieve=function(e){return null},e.prototype.shouldReuseRoute=function(e,t){return e.routeConfig===t.routeConfig},e}(),It=new i.p("ROUTES"),Mt=function(){function e(e,t,n,r){this.loader=e,this.compiler=t,this.onLoadStartListener=n,this.onLoadEndListener=r}return e.prototype.load=function(e,t){var n=this;return this.onLoadStartListener&&this.onLoadStartListener(t),this.loadModuleFactory(t.loadChildren).pipe(Object(f.a)(function(r){n.onLoadEndListener&&n.onLoadEndListener(t);var i=r.create(e);return new re(ce(i.injector.get(It)).map(ae),i)}))},e.prototype.loadModuleFactory=function(e){var t=this;return"string"==typeof e?Object(s.a)(this.loader.load(e)):de(e()).pipe(Object(T.a)(function(e){return e instanceof i.v?Object(o.a)(e):Object(s.a)(t.compiler.compileModuleAsync(e))}))},e}(),Nt=function(){return function(){}}(),Rt=function(){function e(){}return e.prototype.shouldProcessUrl=function(e){return!0},e.prototype.extract=function(e){return e},e.prototype.merge=function(e,t){return e},e}();function Dt(e){throw e}function Vt(e,t,n){return t.parse("/")}function Lt(e,t){return Object(o.a)(null)}var Ut=function(){function e(e,t,n,r,o,s,a,u){var c=this;this.rootComponentType=e,this.urlSerializer=t,this.rootContexts=n,this.location=r,this.config=u,this.navigations=new l.a(null),this.navigationId=0,this.isNgZoneEnabled=!1,this.events=new h.a,this.errorHandler=Dt,this.malformedUriErrorHandler=Vt,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:Lt,afterPreactivation:Lt},this.urlHandlingStrategy=new Rt,this.routeReuseStrategy=new At,this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.relativeLinkResolution="legacy",this.ngModule=o.get(i.x),this.console=o.get(i.db);var f=o.get(i.z);this.isNgZoneEnabled=f instanceof i.z,this.resetConfig(u),this.currentUrlTree=new ge(new be([],{}),{},null),this.rawUrlTree=this.currentUrlTree,this.configLoader=new Mt(s,a,function(e){return c.triggerEvent(new G(e))},function(e){return c.triggerEvent(new W(e))}),this.routerState=Qe(this.currentUrlTree,this.rootComponentType),this.processNavigations()}return e.prototype.resetRootComponentType=function(e){this.rootComponentType=e,this.routerState.root.component=this.rootComponentType},e.prototype.initialNavigation=function(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})},e.prototype.setUpLocationChangeListener=function(){var e=this;this.locationSubscription||(this.locationSubscription=this.location.subscribe(function(t){var n=e.parseUrl(t.url),r="popstate"===t.type?"popstate":"hashchange",i=t.state&&t.state.navigationId?{navigationId:t.state.navigationId}:null;setTimeout(function(){e.scheduleNavigation(n,r,i,{replaceUrl:!0})},0)}))},Object.defineProperty(e.prototype,"url",{get:function(){return this.serializeUrl(this.currentUrlTree)},enumerable:!0,configurable:!0}),e.prototype.triggerEvent=function(e){this.events.next(e)},e.prototype.resetConfig=function(e){ie(e),this.config=e.map(ae),this.navigated=!1,this.lastSuccessfulId=-1},e.prototype.ngOnDestroy=function(){this.dispose()},e.prototype.dispose=function(){this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=null)},e.prototype.createUrlTree=function(e,t){void 0===t&&(t={});var n=t.relativeTo,o=t.queryParams,s=t.fragment,a=t.preserveQueryParams,u=t.queryParamsHandling,c=t.preserveFragment;Object(i.Y)()&&a&&console&&console.warn&&console.warn("preserveQueryParams is deprecated, use queryParamsHandling instead.");var l=n||this.routerState.root,h=c?this.currentUrlTree.fragment:s,f=null;if(u)switch(u){case"merge":f=Object(r.a)({},this.currentUrlTree.queryParams,o);break;case"preserve":f=this.currentUrlTree.queryParams;break;default:f=o||null}else f=a?this.currentUrlTree.queryParams:o||null;return null!==f&&(f=this.removeEmptyProps(f)),function(e,t,n,i,o){if(0===n.length)return ut(t.root,t.root,t,i,o);var s=function(e){if("string"==typeof e[0]&&1===e.length&&"/"===e[0])return new ct(!0,0,e);var t=0,n=!1,i=e.reduce(function(e,i,o){if("object"==typeof i&&null!=i){if(i.outlets){var s={};return he(i.outlets,function(e,t){s[t]="string"==typeof e?e.split("/"):e}),Object(r.g)(e,[{outlets:s}])}if(i.segmentPath)return Object(r.g)(e,[i.segmentPath])}return"string"!=typeof i?Object(r.g)(e,[i]):0===o?(i.split("/").forEach(function(r,i){0==i&&"."===r||(0==i&&""===r?n=!0:".."===r?t++:""!=r&&e.push(r))}),e):Object(r.g)(e,[i])},[]);return new ct(n,t,i)}(n);if(s.toRoot())return ut(t.root,new be([],{}),t,i,o);var a=function(e,n,r){if(e.isAbsolute)return new lt(t.root,!0,0);if(-1===r.snapshot._lastPathIndex)return new lt(r.snapshot._urlSegment,!0,0);var i=at(e.commands[0])?0:1;return function(t,n,o){for(var s=r.snapshot._urlSegment,a=r.snapshot._lastPathIndex+i,u=e.numberOfDoubleDots;u>a;){if(u-=a,!(s=s.parent))throw new Error("Invalid number of '../'");a=s.segments.length}return new lt(s,!1,a-u)}()}(s,0,e),u=a.processChildren?dt(a.segmentGroup,a.index,s.commands):ft(a.segmentGroup,a.index,s.commands);return ut(a.segmentGroup,u,t,i,o)}(l,this.currentUrlTree,e,f,h)},e.prototype.navigateByUrl=function(e,t){void 0===t&&(t={skipLocationChange:!1}),Object(i.Y)()&&this.isNgZoneEnabled&&!i.z.isInAngularZone()&&this.console.warn("Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?");var n=e instanceof ge?e:this.parseUrl(e),r=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(r,"imperative",null,t)},e.prototype.navigate=function(e,t){return void 0===t&&(t={skipLocationChange:!1}),function(e){for(var t=0;t<e.length;t++){var n=e[t];if(null==n)throw new Error("The requested path contains "+n+" segment at index "+t)}}(e),this.navigateByUrl(this.createUrlTree(e,t),t)},e.prototype.serializeUrl=function(e){return this.urlSerializer.serialize(e)},e.prototype.parseUrl=function(e){var t;try{t=this.urlSerializer.parse(e)}catch(n){t=this.malformedUriErrorHandler(n,this.urlSerializer,e)}return t},e.prototype.isActive=function(e,t){if(e instanceof ge)return pe(this.currentUrlTree,e,t);var n=this.parseUrl(e);return pe(this.currentUrlTree,n,t)},e.prototype.removeEmptyProps=function(e){return Object.keys(e).reduce(function(t,n){var r=e[n];return null!=r&&(t[n]=r),t},{})},e.prototype.processNavigations=function(){var e=this;this.navigations.pipe(Object(A.a)(function(t){return t?(e.executeScheduledNavigation(t),t.promise.catch(function(){})):Object(o.a)(null)})).subscribe(function(){})},e.prototype.scheduleNavigation=function(e,t,n,r){var i=this.navigations.value;if(i&&"imperative"!==t&&"imperative"===i.source&&i.rawUrl.toString()===e.toString())return Promise.resolve(!0);if(i&&"hashchange"==t&&"popstate"===i.source&&i.rawUrl.toString()===e.toString())return Promise.resolve(!0);if(i&&"popstate"==t&&"hashchange"===i.source&&i.rawUrl.toString()===e.toString())return Promise.resolve(!0);var o=null,s=null,a=new Promise(function(e,t){o=e,s=t}),u=++this.navigationId;return this.navigations.next({id:u,source:t,state:n,rawUrl:e,extras:r,resolve:o,reject:s,promise:a}),a.catch(function(e){return Promise.reject(e)})},e.prototype.executeScheduledNavigation=function(e){var t=this,n=e.id,r=e.rawUrl,i=e.extras,o=e.resolve,s=e.reject,a=e.source,u=e.state,c=this.urlHandlingStrategy.extract(r),l=!this.navigated||c.toString()!==this.currentUrlTree.toString();("reload"===this.onSameUrlNavigation||l)&&this.urlHandlingStrategy.shouldProcessUrl(r)?("eager"!==this.urlUpdateStrategy||i.skipLocationChange||this.setBrowserUrl(r,!!i.replaceUrl,n),this.events.next(new D(n,this.serializeUrl(c),a,u)),Promise.resolve().then(function(e){return t.runNavigate(c,r,!!i.skipLocationChange,!!i.replaceUrl,n,null)}).then(o,s)):l&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)?(this.events.next(new D(n,this.serializeUrl(c),a,u)),Promise.resolve().then(function(e){return t.runNavigate(c,r,!1,!1,n,Qe(c,t.rootComponentType).snapshot)}).then(o,s)):(this.rawUrlTree=r,o(null))},e.prototype.runNavigate=function(e,t,n,r,i,s){var a=this;return i!==this.navigationId?(this.events.next(new L(i,this.serializeUrl(e),"Navigation ID "+i+" is not equal to the current navigation id "+this.navigationId)),Promise.resolve(!1)):new Promise(function(u,c){var l,h=(s?Object(o.a)({appliedUrl:e,snapshot:s}):new Fe(a.ngModule.injector,a.configLoader,a.urlSerializer,e,a.config).apply().pipe(Object(T.a)(function(t){return function(e,t,n,r,i,o){return void 0===i&&(i="emptyOnly"),void 0===o&&(o="legacy"),new St(e,t,n,r,i,o).recognize()}(a.rootComponentType,a.config,t,a.serializeUrl(t),a.paramsInheritanceStrategy,a.relativeLinkResolution).pipe(Object(f.a)(function(n){return a.events.next(new F(i,a.serializeUrl(e),a.serializeUrl(t),n)),{appliedUrl:t,snapshot:n}}))}))).pipe(Object(T.a)(function(s){return"boolean"==typeof s?Object(o.a)(s):a.hooks.beforePreactivation(s.snapshot,{navigationId:i,appliedUrlTree:e,rawUrlTree:t,skipLocationChange:n,replaceUrl:r}).pipe(Object(f.a)(function(){return s}))})).pipe(Object(f.a)(function(e){if("boolean"==typeof e)return e;var t=e.appliedUrl,n=e.snapshot;return(l=new wt(n,a.routerState.snapshot,a.ngModule.injector,function(e){return a.triggerEvent(e)})).initialize(a.rootContexts),{appliedUrl:t,snapshot:n}})).pipe(Object(T.a)(function(t){if("boolean"==typeof t||a.navigationId!==i)return Object(o.a)(!1);var n=t.appliedUrl,r=t.snapshot;return a.triggerEvent(new B(i,a.serializeUrl(e),a.serializeUrl(n),r)),l.checkGuards().pipe(Object(f.a)(function(t){return a.triggerEvent(new z(i,a.serializeUrl(e),a.serializeUrl(n),r,t)),{appliedUrl:n,snapshot:r,shouldActivate:t}}))})).pipe(Object(T.a)(function(t){return"boolean"==typeof t||a.navigationId!==i?Object(o.a)(!1):t.shouldActivate&&l.isActivating()?(a.triggerEvent(new H(i,a.serializeUrl(e),a.serializeUrl(t.appliedUrl),t.snapshot)),l.resolveData(a.paramsInheritanceStrategy).pipe(Object(f.a)(function(){return a.triggerEvent(new q(i,a.serializeUrl(e),a.serializeUrl(t.appliedUrl),t.snapshot)),t}))):Object(o.a)(t)})).pipe(Object(T.a)(function(s){return"boolean"==typeof s||a.navigationId!==i?Object(o.a)(!1):a.hooks.afterPreactivation(s.snapshot,{navigationId:i,appliedUrlTree:e,rawUrlTree:t,skipLocationChange:n,replaceUrl:r}).pipe(Object(f.a)(function(){return s}))})).pipe(Object(f.a)(function(e){if("boolean"==typeof e||a.navigationId!==i)return!1;var t,n,r,o=e.appliedUrl,s=e.shouldActivate;return s?{appliedUrl:o,state:(r=st(a.routeReuseStrategy,(t=e.snapshot)._root,(n=a.routerState)?n._root:void 0),new $e(r,t)),shouldActivate:s}:{appliedUrl:o,state:null,shouldActivate:s}}));a.activateRoutes(h,a.routerState,a.currentUrlTree,i,e,t,n,r,u,c)})},e.prototype.activateRoutes=function(e,t,n,r,i,o,s,a,u,c){var l,h=this;e.forEach(function(e){if("boolean"!=typeof e&&e.shouldActivate&&r===h.navigationId&&e.state){var n=e.state;h.currentUrlTree=e.appliedUrl,h.rawUrlTree=h.urlHandlingStrategy.merge(h.currentUrlTree,o),h.routerState=n,"deferred"!==h.urlUpdateStrategy||s||h.setBrowserUrl(h.rawUrlTree,a,r),new Ft(h.routeReuseStrategy,n,t,function(e){return h.triggerEvent(e)}).activate(h.rootContexts),l=!0}else l=!1}).then(function(){l?(h.navigated=!0,h.lastSuccessfulId=r,h.events.next(new V(r,h.serializeUrl(i),h.serializeUrl(h.currentUrlTree))),u(!0)):(h.resetUrlToCurrentUrlTree(),h.events.next(new L(r,h.serializeUrl(i),"")),u(!1))},function(e){if((s=e)&&s.ngNavigationCancelingError)h.navigated=!0,h.resetStateAndUrl(t,n,o),h.events.next(new L(r,h.serializeUrl(i),e.message)),u(!1);else{h.resetStateAndUrl(t,n,o),h.events.next(new U(r,h.serializeUrl(i),e));try{u(h.errorHandler(e))}catch(a){c(a)}}var s})},e.prototype.setBrowserUrl=function(e,t,n){var r=this.urlSerializer.serialize(e);this.location.isCurrentPathEqualTo(r)||t?this.location.replaceState(r,"",{navigationId:n}):this.location.go(r,"",{navigationId:n})},e.prototype.resetStateAndUrl=function(e,t,n){this.routerState=e,this.currentUrlTree=t,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n),this.resetUrlToCurrentUrlTree()},e.prototype.resetUrlToCurrentUrlTree=function(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",{navigationId:this.lastSuccessfulId})},e}(),Ft=function(){function e(e,t,n,r){this.routeReuseStrategy=e,this.futureState=t,this.currState=n,this.forwardEvent=r}return e.prototype.activate=function(e){var t=this.futureState._root,n=this.currState?this.currState._root:null;this.deactivateChildRoutes(t,n,e),it(this.futureState.root),this.activateChildRoutes(t,n,e)},e.prototype.deactivateChildRoutes=function(e,t,n){var r=this,i=Ye(t);e.children.forEach(function(e){var t=e.value.outlet;r.deactivateRoutes(e,i[t],n),delete i[t]}),he(i,function(e,t){r.deactivateRouteAndItsChildren(e,n)})},e.prototype.deactivateRoutes=function(e,t,n){var r=e.value,i=t?t.value:null;if(r===i)if(r.component){var o=n.getContext(r.outlet);o&&this.deactivateChildRoutes(e,t,o.children)}else this.deactivateChildRoutes(e,t,n);else i&&this.deactivateRouteAndItsChildren(t,n)},e.prototype.deactivateRouteAndItsChildren=function(e,t){this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,t):this.deactivateRouteAndOutlet(e,t)},e.prototype.detachAndStoreRouteSubtree=function(e,t){var n=t.getContext(e.value.outlet);if(n&&n.outlet){var r=n.outlet.detach(),i=n.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:r,route:e,contexts:i})}},e.prototype.deactivateRouteAndOutlet=function(e,t){var n=this,r=t.getContext(e.value.outlet);if(r){var i=Ye(e),o=e.value.component?r.children:t;he(i,function(e,t){return n.deactivateRouteAndItsChildren(e,o)}),r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated())}},e.prototype.activateChildRoutes=function(e,t,n){var r=this,i=Ye(t);e.children.forEach(function(e){r.activateRoutes(e,i[e.value.outlet],n),r.forwardEvent(new $(e.value.snapshot))}),e.children.length&&this.forwardEvent(new Z(e.value.snapshot))},e.prototype.activateRoutes=function(e,t,n){var r=e.value,i=t?t.value:null;if(it(r),r===i)if(r.component){var o=n.getOrCreateContext(r.outlet);this.activateChildRoutes(e,t,o.children)}else this.activateChildRoutes(e,t,n);else if(r.component)if(o=n.getOrCreateContext(r.outlet),this.routeReuseStrategy.shouldAttach(r.snapshot)){var s=this.routeReuseStrategy.retrieve(r.snapshot);this.routeReuseStrategy.store(r.snapshot,null),o.children.onOutletReAttached(s.contexts),o.attachRef=s.componentRef,o.route=s.route.value,o.outlet&&o.outlet.attach(s.componentRef,s.route.value),Bt(s.route)}else{var a=function(e){for(var t=r.snapshot.parent;t;t=t.parent){var n=t.routeConfig;if(n&&n._loadedConfig)return n._loadedConfig;if(n&&n.component)return null}return null}(),u=a?a.module.componentFactoryResolver:null;o.attachRef=null,o.route=r,o.resolver=u,o.outlet&&o.outlet.activateWith(r,u),this.activateChildRoutes(e,null,o.children)}else this.activateChildRoutes(e,null,n)},e}();function Bt(e){it(e.value),e.children.forEach(Bt)}var zt=function(){function e(e,t,n){var r=this;this.router=e,this.route=t,this.locationStrategy=n,this.commands=[],this.subscription=e.events.subscribe(function(e){e instanceof V&&r.updateTargetUrlAndHref()})}return Object.defineProperty(e.prototype,"routerLink",{set:function(e){this.commands=null!=e?Array.isArray(e)?e:[e]:[]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"preserveQueryParams",{set:function(e){Object(i.Y)()&&console&&console.warn&&console.warn("preserveQueryParams is deprecated, use queryParamsHandling instead."),this.preserve=e},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(e){this.updateTargetUrlAndHref()},e.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},e.prototype.onClick=function(e,t,n,r){if(0!==e||t||n||r)return!0;if("string"==typeof this.target&&"_self"!=this.target)return!0;var i={skipLocationChange:Ht(this.skipLocationChange),replaceUrl:Ht(this.replaceUrl)};return this.router.navigateByUrl(this.urlTree,i),!1},e.prototype.updateTargetUrlAndHref=function(){this.href=this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree))},Object.defineProperty(e.prototype,"urlTree",{get:function(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:Ht(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:Ht(this.preserveFragment)})},enumerable:!0,configurable:!0}),Object(r.b)([Object(i.n)("attr.target"),Object(i.r)(),Object(r.d)("design:type",String)],e.prototype,"target",void 0),e}();function Ht(e){return""===e||!!e}var qt=function(){function e(e,t,n,r){var i=this;this.router=e,this.element=t,this.renderer=n,this.cdr=r,this.classes=[],this.isActive=!1,this.routerLinkActiveOptions={exact:!1},this.subscription=e.events.subscribe(function(e){e instanceof V&&i.update()})}return e.prototype.ngAfterContentInit=function(){var e=this;this.links.changes.subscribe(function(t){return e.update()}),this.linksWithHrefs.changes.subscribe(function(t){return e.update()}),this.update()},Object.defineProperty(e.prototype,"routerLinkActive",{set:function(e){var t=Array.isArray(e)?e:e.split(" ");this.classes=t.filter(function(e){return!!e})},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(e){this.update()},e.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},e.prototype.update=function(){var e=this;this.links&&this.linksWithHrefs&&this.router.navigated&&Promise.resolve().then(function(){var t=e.hasActiveLinks();e.isActive!==t&&(e.isActive=t,e.classes.forEach(function(n){t?e.renderer.addClass(e.element.nativeElement,n):e.renderer.removeClass(e.element.nativeElement,n)}))})},e.prototype.isLinkActive=function(e){var t=this;return function(n){return e.isActive(n.urlTree,t.routerLinkActiveOptions.exact)}},e.prototype.hasActiveLinks=function(){return this.links.some(this.isLinkActive(this.router))||this.linksWithHrefs.some(this.isLinkActive(this.router))},e}(),Gt=function(){return function(){this.outlet=null,this.route=null,this.resolver=null,this.children=new Wt,this.attachRef=null}}(),Wt=function(){function e(){this.contexts=new Map}return e.prototype.onChildOutletCreated=function(e,t){var n=this.getOrCreateContext(e);n.outlet=t,this.contexts.set(e,n)},e.prototype.onChildOutletDestroyed=function(e){var t=this.getContext(e);t&&(t.outlet=null)},e.prototype.onOutletDeactivated=function(){var e=this.contexts;return this.contexts=new Map,e},e.prototype.onOutletReAttached=function(e){this.contexts=e},e.prototype.getOrCreateContext=function(e){var t=this.getContext(e);return t||(t=new Gt,this.contexts.set(e,t)),t},e.prototype.getContext=function(e){return this.contexts.get(e)||null},e}(),Kt=function(){function e(e,t,n,r,o){this.parentContexts=e,this.location=t,this.resolver=n,this.changeDetector=o,this.activated=null,this._activatedRoute=null,this.activateEvents=new i.m,this.deactivateEvents=new i.m,this.name=r||X,e.onChildOutletCreated(this.name,this)}return e.prototype.ngOnDestroy=function(){this.parentContexts.onChildOutletDestroyed(this.name)},e.prototype.ngOnInit=function(){if(!this.activated){var e=this.parentContexts.getContext(this.name);e&&e.route&&(e.attachRef?this.attach(e.attachRef,e.route):this.activateWith(e.route,e.resolver||null))}},Object.defineProperty(e.prototype,"isActivated",{get:function(){return!!this.activated},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"component",{get:function(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"activatedRoute",{get:function(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"activatedRouteData",{get:function(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}},enumerable:!0,configurable:!0}),e.prototype.detach=function(){if(!this.activated)throw new Error("Outlet is not activated");this.location.detach();var e=this.activated;return this.activated=null,this._activatedRoute=null,e},e.prototype.attach=function(e,t){this.activated=e,this._activatedRoute=t,this.location.insert(e.hostView)},e.prototype.deactivate=function(){if(this.activated){var e=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(e)}},e.prototype.activateWith=function(e,t){if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=e;var n=(t=t||this.resolver).resolveComponentFactory(e._futureSnapshot.routeConfig.component),r=this.parentContexts.getOrCreateContext(this.name).children,i=new Zt(e,r,this.location.injector);this.activated=this.location.createComponent(n,this.location.length,i),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)},e}(),Zt=function(){function e(e,t,n){this.route=e,this.childContexts=t,this.parent=n}return e.prototype.get=function(e,t){return e===Je?this.route:e===Wt?this.childContexts:this.parent.get(e,t)},e}(),Yt=function(){return function(){}}(),$t=function(){function e(){}return e.prototype.preload=function(e,t){return t().pipe(Object(E.a)(function(){return Object(o.a)(null)}))},e}(),Qt=function(){function e(){}return e.prototype.preload=function(e,t){return Object(o.a)(null)},e}(),Jt=function(){function e(e,t,n,r,i){this.router=e,this.injector=r,this.preloadingStrategy=i,this.loader=new Mt(t,n,function(t){return e.triggerEvent(new G(t))},function(t){return e.triggerEvent(new W(t))})}return e.prototype.setUpPreloading=function(){var e=this;this.subscription=this.router.events.pipe(Object(p.a)(function(e){return e instanceof V}),Object(A.a)(function(){return e.preload()})).subscribe(function(){})},e.prototype.preload=function(){var e=this.injector.get(i.x);return this.processRoutes(e,this.router.config)},e.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},e.prototype.processRoutes=function(e,t){var n,i,o=[];try{for(var a=Object(r.h)(t),u=a.next();!u.done;u=a.next()){var c=u.value;if(c.loadChildren&&!c.canLoad&&c._loadedConfig){var l=c._loadedConfig;o.push(this.processRoutes(l.module,l.routes))}else c.loadChildren&&!c.canLoad?o.push(this.preloadConfig(e,c)):c.children&&o.push(this.processRoutes(e,c.children))}}catch(h){n={error:h}}finally{try{u&&!u.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}return Object(s.a)(o).pipe(Object(S.a)(),Object(f.a)(function(e){}))},e.prototype.preloadConfig=function(e,t){var n=this;return this.preloadingStrategy.preload(t,function(){return n.loader.load(e.injector,t).pipe(Object(T.a)(function(e){return t._loadedConfig=e,n.processRoutes(e.module,e.routes)}))})},e}(),Xt=function(){function e(e,t,n){void 0===n&&(n={}),this.router=e,this.viewportScroller=t,this.options=n,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},n.scrollPositionRestoration=n.scrollPositionRestoration||"disabled",n.anchorScrolling=n.anchorScrolling||"disabled"}return e.prototype.init=function(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()},e.prototype.createScrollEvents=function(){var e=this;return this.router.events.subscribe(function(t){t instanceof D?(e.store[e.lastId]=e.viewportScroller.getScrollPosition(),e.lastSource=t.navigationTrigger,e.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof V&&(e.lastId=t.id,e.scheduleScrollEvent(t,e.router.parseUrl(t.urlAfterRedirects).fragment))})},e.prototype.consumeScrollEvents=function(){var e=this;return this.router.events.subscribe(function(t){t instanceof Q&&(t.position?"top"===e.options.scrollPositionRestoration?e.viewportScroller.scrollToPosition([0,0]):"enabled"===e.options.scrollPositionRestoration&&e.viewportScroller.scrollToPosition(t.position):t.anchor&&"enabled"===e.options.anchorScrolling?e.viewportScroller.scrollToAnchor(t.anchor):"disabled"!==e.options.scrollPositionRestoration&&e.viewportScroller.scrollToPosition([0,0]))})},e.prototype.scheduleScrollEvent=function(e,t){this.router.triggerEvent(new Q(e,"popstate"===this.lastSource?this.store[this.restoredId]:null,t))},e.prototype.ngOnDestroy=function(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()},e}(),en=new i.p("ROUTER_CONFIGURATION"),tn=new i.p("ROUTER_FORROOT_GUARD"),nn=[M.j,{provide:we,useClass:_e},{provide:Ut,useFactory:ln,deps:[i.g,we,Wt,M.j,i.q,i.w,i.i,It,en,[Nt,new i.A],[Tt,new i.A]]},Wt,{provide:Je,useFactory:hn,deps:[Ut]},{provide:i.w,useClass:i.K},Jt,Qt,$t,{provide:en,useValue:{enableTracing:!1}}];function rn(){return new i.y("Router",Ut)}var on=function(){function e(e,t){}var t;return t=e,e.forRoot=function(e,n){return{ngModule:t,providers:[nn,cn(e),{provide:tn,useFactory:un,deps:[[Ut,new i.A,new i.J]]},{provide:en,useValue:n||{}},{provide:M.k,useFactory:an,deps:[M.x,[new i.o(M.a),new i.A],en]},{provide:Xt,useFactory:sn,deps:[Ut,M.y,en]},{provide:Yt,useExisting:n&&n.preloadingStrategy?n.preloadingStrategy:Qt},{provide:i.y,multi:!0,useFactory:rn},[fn,{provide:i.d,multi:!0,useFactory:dn,deps:[fn]},{provide:gn,useFactory:pn,deps:[fn]},{provide:i.b,multi:!0,useExisting:gn}]]}},e.forChild=function(e){return{ngModule:t,providers:[cn(e)]}},e}();function sn(e,t,n){return n.scrollOffset&&t.setOffset(n.scrollOffset),new Xt(e,t,n)}function an(e,t,n){return void 0===n&&(n={}),n.useHash?new M.g(e,t):new M.w(e,t)}function un(e){if(e)throw new Error("RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.");return"guarded"}function cn(e){return[{provide:i.a,multi:!0,useValue:e},{provide:It,multi:!0,useValue:e}]}function ln(e,t,n,r,i,o,s,a,u,c,l){void 0===u&&(u={});var h=new Ut(null,t,n,r,i,o,s,ce(a));if(c&&(h.urlHandlingStrategy=c),l&&(h.routeReuseStrategy=l),u.errorHandler&&(h.errorHandler=u.errorHandler),u.malformedUriErrorHandler&&(h.malformedUriErrorHandler=u.malformedUriErrorHandler),u.enableTracing){var f=Object(N.r)();h.events.subscribe(function(e){f.logGroup("Router Event: "+e.constructor.name),f.log(e.toString()),f.log(e),f.logGroupEnd()})}return u.onSameUrlNavigation&&(h.onSameUrlNavigation=u.onSameUrlNavigation),u.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=u.paramsInheritanceStrategy),u.urlUpdateStrategy&&(h.urlUpdateStrategy=u.urlUpdateStrategy),u.relativeLinkResolution&&(h.relativeLinkResolution=u.relativeLinkResolution),h}function hn(e){return e.routerState.root}var fn=function(){function e(e){this.injector=e,this.initNavigation=!1,this.resultOfPreactivationDone=new h.a}return e.prototype.appInitializer=function(){var e=this;return this.injector.get(M.i,Promise.resolve(null)).then(function(){var t=null,n=new Promise(function(e){return t=e}),r=e.injector.get(Ut),i=e.injector.get(en);if(e.isLegacyDisabled(i)||e.isLegacyEnabled(i))t(!0);else if("disabled"===i.initialNavigation)r.setUpLocationChangeListener(),t(!0);else{if("enabled"!==i.initialNavigation)throw new Error("Invalid initialNavigation options: '"+i.initialNavigation+"'");r.hooks.afterPreactivation=function(){return e.initNavigation?Object(o.a)(null):(e.initNavigation=!0,t(!0),e.resultOfPreactivationDone)},r.initialNavigation()}return n})},e.prototype.bootstrapListener=function(e){var t=this.injector.get(en),n=this.injector.get(Jt),r=this.injector.get(Xt),o=this.injector.get(Ut),s=this.injector.get(i.g);e===s.components[0]&&(this.isLegacyEnabled(t)?o.initialNavigation():this.isLegacyDisabled(t)&&o.setUpLocationChangeListener(),n.setUpPreloading(),r.init(),o.resetRootComponentType(s.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())},e.prototype.isLegacyEnabled=function(e){return"legacy_enabled"===e.initialNavigation||!0===e.initialNavigation||void 0===e.initialNavigation},e.prototype.isLegacyDisabled=function(e){return"legacy_disabled"===e.initialNavigation||!1===e.initialNavigation},e}();function dn(e){return e.appInitializer.bind(e)}function pn(e){return e.bootstrapListener.bind(e)}var gn=new i.p("Router Initializer")},ZYjt:function(e,t,n){"use strict";n.d(t,"p",function(){return ve}),n.d(t,"q",function(){return k}),n.d(t,"a",function(){return ye}),n.d(t,"h",function(){return be}),n.d(t,"c",function(){return E}),n.d(t,"d",function(){return x}),n.d(t,"e",function(){return ee}),n.d(t,"f",function(){return te}),n.d(t,"g",function(){return ne}),n.d(t,"b",function(){return ae}),n.d(t,"r",function(){return a}),n.d(t,"j",function(){return L}),n.d(t,"i",function(){return J}),n.d(t,"m",function(){return re}),n.d(t,"n",function(){return se}),n.d(t,"l",function(){return A}),n.d(t,"o",function(){return T}),n.d(t,"k",function(){return ue});var r=n("mrSG"),i=n("Ip0R"),o=n("CcnG"),s=null;function a(){return s}var u,c={class:"className",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"},l={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},h={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"};o.rb.Node&&(u=o.rb.Node.prototype.contains||function(e){return!!(16&this.compareDocumentPosition(e))});var f,d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.parse=function(e){throw new Error("parse not implemented")},t.makeCurrent=function(){var e;e=new t,s||(s=e)},t.prototype.hasProperty=function(e,t){return t in e},t.prototype.setProperty=function(e,t,n){e[t]=n},t.prototype.getProperty=function(e,t){return e[t]},t.prototype.invoke=function(e,t,n){var i;(i=e)[t].apply(i,Object(r.g)(n))},t.prototype.logError=function(e){window.console&&(console.error?console.error(e):console.log(e))},t.prototype.log=function(e){window.console&&window.console.log&&window.console.log(e)},t.prototype.logGroup=function(e){window.console&&window.console.group&&window.console.group(e)},t.prototype.logGroupEnd=function(){window.console&&window.console.groupEnd&&window.console.groupEnd()},Object.defineProperty(t.prototype,"attrToPropMap",{get:function(){return c},enumerable:!0,configurable:!0}),t.prototype.contains=function(e,t){return u.call(e,t)},t.prototype.querySelector=function(e,t){return e.querySelector(t)},t.prototype.querySelectorAll=function(e,t){return e.querySelectorAll(t)},t.prototype.on=function(e,t,n){e.addEventListener(t,n,!1)},t.prototype.onAndCancel=function(e,t,n){return e.addEventListener(t,n,!1),function(){e.removeEventListener(t,n,!1)}},t.prototype.dispatchEvent=function(e,t){e.dispatchEvent(t)},t.prototype.createMouseEvent=function(e){var t=this.getDefaultDocument().createEvent("MouseEvent");return t.initEvent(e,!0,!0),t},t.prototype.createEvent=function(e){var t=this.getDefaultDocument().createEvent("Event");return t.initEvent(e,!0,!0),t},t.prototype.preventDefault=function(e){e.preventDefault(),e.returnValue=!1},t.prototype.isPrevented=function(e){return e.defaultPrevented||null!=e.returnValue&&!e.returnValue},t.prototype.getInnerHTML=function(e){return e.innerHTML},t.prototype.getTemplateContent=function(e){return"content"in e&&this.isTemplateElement(e)?e.content:null},t.prototype.getOuterHTML=function(e){return e.outerHTML},t.prototype.nodeName=function(e){return e.nodeName},t.prototype.nodeValue=function(e){return e.nodeValue},t.prototype.type=function(e){return e.type},t.prototype.content=function(e){return this.hasProperty(e,"content")?e.content:e},t.prototype.firstChild=function(e){return e.firstChild},t.prototype.nextSibling=function(e){return e.nextSibling},t.prototype.parentElement=function(e){return e.parentNode},t.prototype.childNodes=function(e){return e.childNodes},t.prototype.childNodesAsList=function(e){for(var t=e.childNodes,n=new Array(t.length),r=0;r<t.length;r++)n[r]=t[r];return n},t.prototype.clearNodes=function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},t.prototype.appendChild=function(e,t){e.appendChild(t)},t.prototype.removeChild=function(e,t){e.removeChild(t)},t.prototype.replaceChild=function(e,t,n){e.replaceChild(t,n)},t.prototype.remove=function(e){return e.parentNode&&e.parentNode.removeChild(e),e},t.prototype.insertBefore=function(e,t,n){e.insertBefore(n,t)},t.prototype.insertAllBefore=function(e,t,n){n.forEach(function(n){return e.insertBefore(n,t)})},t.prototype.insertAfter=function(e,t,n){e.insertBefore(n,t.nextSibling)},t.prototype.setInnerHTML=function(e,t){e.innerHTML=t},t.prototype.getText=function(e){return e.textContent},t.prototype.setText=function(e,t){e.textContent=t},t.prototype.getValue=function(e){return e.value},t.prototype.setValue=function(e,t){e.value=t},t.prototype.getChecked=function(e){return e.checked},t.prototype.setChecked=function(e,t){e.checked=t},t.prototype.createComment=function(e){return this.getDefaultDocument().createComment(e)},t.prototype.createTemplate=function(e){var t=this.getDefaultDocument().createElement("template");return t.innerHTML=e,t},t.prototype.createElement=function(e,t){return(t=t||this.getDefaultDocument()).createElement(e)},t.prototype.createElementNS=function(e,t,n){return(n=n||this.getDefaultDocument()).createElementNS(e,t)},t.prototype.createTextNode=function(e,t){return(t=t||this.getDefaultDocument()).createTextNode(e)},t.prototype.createScriptTag=function(e,t,n){var r=(n=n||this.getDefaultDocument()).createElement("SCRIPT");return r.setAttribute(e,t),r},t.prototype.createStyleElement=function(e,t){var n=(t=t||this.getDefaultDocument()).createElement("style");return this.appendChild(n,this.createTextNode(e,t)),n},t.prototype.createShadowRoot=function(e){return e.createShadowRoot()},t.prototype.getShadowRoot=function(e){return e.shadowRoot},t.prototype.getHost=function(e){return e.host},t.prototype.clone=function(e){return e.cloneNode(!0)},t.prototype.getElementsByClassName=function(e,t){return e.getElementsByClassName(t)},t.prototype.getElementsByTagName=function(e,t){return e.getElementsByTagName(t)},t.prototype.classList=function(e){return Array.prototype.slice.call(e.classList,0)},t.prototype.addClass=function(e,t){e.classList.add(t)},t.prototype.removeClass=function(e,t){e.classList.remove(t)},t.prototype.hasClass=function(e,t){return e.classList.contains(t)},t.prototype.setStyle=function(e,t,n){e.style[t]=n},t.prototype.removeStyle=function(e,t){e.style[t]=""},t.prototype.getStyle=function(e,t){return e.style[t]},t.prototype.hasStyle=function(e,t,n){var r=this.getStyle(e,t)||"";return n?r==n:r.length>0},t.prototype.tagName=function(e){return e.tagName},t.prototype.attributeMap=function(e){for(var t=new Map,n=e.attributes,r=0;r<n.length;r++){var i=n.item(r);t.set(i.name,i.value)}return t},t.prototype.hasAttribute=function(e,t){return e.hasAttribute(t)},t.prototype.hasAttributeNS=function(e,t,n){return e.hasAttributeNS(t,n)},t.prototype.getAttribute=function(e,t){return e.getAttribute(t)},t.prototype.getAttributeNS=function(e,t,n){return e.getAttributeNS(t,n)},t.prototype.setAttribute=function(e,t,n){e.setAttribute(t,n)},t.prototype.setAttributeNS=function(e,t,n,r){e.setAttributeNS(t,n,r)},t.prototype.removeAttribute=function(e,t){e.removeAttribute(t)},t.prototype.removeAttributeNS=function(e,t,n){e.removeAttributeNS(t,n)},t.prototype.templateAwareRoot=function(e){return this.isTemplateElement(e)?this.content(e):e},t.prototype.createHtmlDocument=function(){return document.implementation.createHTMLDocument("fakeTitle")},t.prototype.getDefaultDocument=function(){return document},t.prototype.getBoundingClientRect=function(e){try{return e.getBoundingClientRect()}catch(t){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}},t.prototype.getTitle=function(e){return e.title},t.prototype.setTitle=function(e,t){e.title=t||""},t.prototype.elementMatches=function(e,t){return!!this.isElementNode(e)&&(e.matches&&e.matches(t)||e.msMatchesSelector&&e.msMatchesSelector(t)||e.webkitMatchesSelector&&e.webkitMatchesSelector(t))},t.prototype.isTemplateElement=function(e){return this.isElementNode(e)&&"TEMPLATE"===e.nodeName},t.prototype.isTextNode=function(e){return e.nodeType===Node.TEXT_NODE},t.prototype.isCommentNode=function(e){return e.nodeType===Node.COMMENT_NODE},t.prototype.isElementNode=function(e){return e.nodeType===Node.ELEMENT_NODE},t.prototype.hasShadowRoot=function(e){return null!=e.shadowRoot&&e instanceof HTMLElement},t.prototype.isShadowRoot=function(e){return e instanceof DocumentFragment},t.prototype.importIntoDoc=function(e){return document.importNode(this.templateAwareRoot(e),!0)},t.prototype.adoptNode=function(e){return document.adoptNode(e)},t.prototype.getHref=function(e){return e.getAttribute("href")},t.prototype.getEventKey=function(e){var t=e.key;if(null==t){if(null==(t=e.keyIdentifier))return"Unidentified";t.startsWith("U+")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&h.hasOwnProperty(t)&&(t=h[t]))}return l[t]||t},t.prototype.getGlobalEventTarget=function(e,t){return"window"===t?window:"document"===t?e:"body"===t?e.body:null},t.prototype.getHistory=function(){return window.history},t.prototype.getLocation=function(){return window.location},t.prototype.getBaseHref=function(e){var t,n=p||(p=document.querySelector("base"))?p.getAttribute("href"):null;return null==n?null:(t=n,f||(f=document.createElement("a")),f.setAttribute("href",t),"/"===f.pathname.charAt(0)?f.pathname:"/"+f.pathname)},t.prototype.resetBaseElement=function(){p=null},t.prototype.getUserAgent=function(){return window.navigator.userAgent},t.prototype.setData=function(e,t,n){this.setAttribute(e,"data-"+t,n)},t.prototype.getData=function(e,t){return this.getAttribute(e,"data-"+t)},t.prototype.getComputedStyle=function(e){return getComputedStyle(e)},t.prototype.supportsWebAnimation=function(){return"function"==typeof Element.prototype.animate},t.prototype.performanceNow=function(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()},t.prototype.supportsCookies=function(){return!0},t.prototype.getCookie=function(e){return Object(i.C)(document.cookie,e)},t.prototype.setCookie=function(e,t){document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)},t}(function(e){function t(){var t=e.call(this)||this;t._animationPrefix=null,t._transitionEnd=null;try{var n=t.createElement("div",document);if(null!=t.getStyle(n,"animationName"))t._animationPrefix="";else for(var r=["Webkit","Moz","O","ms"],i=0;i<r.length;i++)if(null!=t.getStyle(n,r[i]+"AnimationName")){t._animationPrefix="-"+r[i].toLowerCase()+"-";break}var o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};Object.keys(o).forEach(function(e){null!=t.getStyle(n,e)&&(t._transitionEnd=o[e])})}catch(s){t._animationPrefix=null,t._transitionEnd=null}return t}return Object(r.c)(t,e),t.prototype.getDistributedNodes=function(e){return e.getDistributedNodes()},t.prototype.resolveAndSetHref=function(e,t,n){e.href=null==n?t:t+"/../"+n},t.prototype.supportsDOMEvents=function(){return!0},t.prototype.supportsNativeShadowDOM=function(){return"function"==typeof document.body.createShadowRoot},t.prototype.getAnimationPrefix=function(){return this._animationPrefix?this._animationPrefix:""},t.prototype.getTransitionEnd=function(){return this._transitionEnd?this._transitionEnd:""},t.prototype.supportsAnimation=function(){return null!=this._animationPrefix&&null!=this._transitionEnd},t}(function(){function e(){this.resourceLoaderType=null}return Object.defineProperty(e.prototype,"attrToPropMap",{get:function(){return this._attrToPropMap},set:function(e){this._attrToPropMap=e},enumerable:!0,configurable:!0}),e}())),p=null,g=i.d;function b(){return!!window.history.pushState}var v=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n._init(),n}return Object(r.c)(t,e),t.prototype._init=function(){this.location=a().getLocation(),this._history=a().getHistory()},t.prototype.getBaseHrefFromDOM=function(){return a().getBaseHref(this._doc)},t.prototype.onPopState=function(e){a().getGlobalEventTarget(this._doc,"window").addEventListener("popstate",e,!1)},t.prototype.onHashChange=function(e){a().getGlobalEventTarget(this._doc,"window").addEventListener("hashchange",e,!1)},Object.defineProperty(t.prototype,"pathname",{get:function(){return this.location.pathname},set:function(e){this.location.pathname=e},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"search",{get:function(){return this.location.search},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hash",{get:function(){return this.location.hash},enumerable:!0,configurable:!0}),t.prototype.pushState=function(e,t,n){b()?this._history.pushState(e,t,n):this.location.hash=n},t.prototype.replaceState=function(e,t,n){b()?this._history.replaceState(e,t,n):this.location.hash=n},t.prototype.forward=function(){this._history.forward()},t.prototype.back=function(){this._history.back()},Object(r.b)([Object(r.e)(0,Object(o.o)(g)),Object(r.d)("design:paramtypes",[Object])],t)}(i.x),y=new o.p("TRANSITION_ID"),m=[{provide:o.d,useFactory:function(e,t,n){return function(){n.get(o.e).donePromise.then(function(){var n=a();Array.prototype.slice.apply(n.querySelectorAll(t,"style[ng-transition]")).filter(function(t){return n.getAttribute(t,"ng-transition")===e}).forEach(function(e){return n.remove(e)})})}},deps:[y,g,o.q],multi:!0}],w=function(){function e(){}return e.init=function(){Object(o.ab)(new e)},e.prototype.addToWindow=function(e){o.rb.getAngularTestability=function(t,n){void 0===n&&(n=!0);var r=e.findTestabilityInTree(t,n);if(null==r)throw new Error("Could not find testability for element.");return r},o.rb.getAllAngularTestabilities=function(){return e.getAllTestabilities()},o.rb.getAllAngularRootElements=function(){return e.getAllRootElements()},o.rb.frameworkStabilizers||(o.rb.frameworkStabilizers=[]),o.rb.frameworkStabilizers.push(function(e){var t=o.rb.getAllAngularTestabilities(),n=t.length,r=!1,i=function(t){r=r||t,0==--n&&e(r)};t.forEach(function(e){e.whenStable(i)})})},e.prototype.findTestabilityInTree=function(e,t,n){if(null==t)return null;var r=e.getTestability(t);return null!=r?r:n?a().isShadowRoot(t)?this.findTestabilityInTree(e,a().getHost(t),!0):this.findTestabilityInTree(e,a().parentElement(t),!0):null},e}();function _(e,t){"undefined"!=typeof COMPILED&&COMPILED||((o.rb.ng=o.rb.ng||{})[e]=t)}var S={ApplicationRef:o.g,NgZone:o.z},O="probe",C="coreTokens";function j(e){return Object(o.W)(e)}function k(e){return _(O,j),_(C,Object(r.a)({},S,(e||[]).reduce(function(e,t){return e[t.name]=t.token,e},{}))),function(){return j}}var E=new o.p("EventManagerPlugins"),x=function(){function e(e,t){var n=this;this._zone=t,this._eventNameToPlugin=new Map,e.forEach(function(e){return e.manager=n}),this._plugins=e.slice().reverse()}return e.prototype.addEventListener=function(e,t,n){return this._findPluginFor(t).addEventListener(e,t,n)},e.prototype.addGlobalEventListener=function(e,t,n){return this._findPluginFor(t).addGlobalEventListener(e,t,n)},e.prototype.getZone=function(){return this._zone},e.prototype._findPluginFor=function(e){var t=this._eventNameToPlugin.get(e);if(t)return t;for(var n=this._plugins,r=0;r<n.length;r++){var i=n[r];if(i.supports(e))return this._eventNameToPlugin.set(e,i),i}throw new Error("No event manager plugin found for event "+e)},e}(),P=function(){function e(e){this._doc=e}return e.prototype.addGlobalEventListener=function(e,t,n){var r=a().getGlobalEventTarget(this._doc,e);if(!r)throw new Error("Unsupported event target "+r+" for event "+t);return this.addEventListener(r,t,n)},e}(),T=function(){function e(){this._stylesSet=new Set}return e.prototype.addStyles=function(e){var t=this,n=new Set;e.forEach(function(e){t._stylesSet.has(e)||(t._stylesSet.add(e),n.add(e))}),this.onStylesAdded(n)},e.prototype.onStylesAdded=function(e){},e.prototype.getAllStyles=function(){return Array.from(this._stylesSet)},e}(),A=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n._hostNodes=new Set,n._styleNodes=new Set,n._hostNodes.add(t.head),n}return Object(r.c)(t,e),t.prototype._addStylesToHost=function(e,t){var n=this;e.forEach(function(e){var r=n._doc.createElement("style");r.textContent=e,n._styleNodes.add(t.appendChild(r))})},t.prototype.addHost=function(e){this._addStylesToHost(this._stylesSet,e),this._hostNodes.add(e)},t.prototype.removeHost=function(e){this._hostNodes.delete(e)},t.prototype.onStylesAdded=function(e){var t=this;this._hostNodes.forEach(function(n){return t._addStylesToHost(e,n)})},t.prototype.ngOnDestroy=function(){this._styleNodes.forEach(function(e){return a().remove(e)})},t}(T),I={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/"},M=/%COMP%/g,N="_nghost-%COMP%",R="_ngcontent-%COMP%";function D(e,t,n){for(var r=0;r<t.length;r++){var i=t[r];Array.isArray(i)?D(e,i,n):(i=i.replace(M,e),n.push(i))}return n}function V(e){return function(t){!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}var L=function(){function e(e,t){this.eventManager=e,this.sharedStylesHost=t,this.rendererByCompId=new Map,this.defaultRenderer=new U(e)}return e.prototype.createRenderer=function(e,t){if(!e||!t)return this.defaultRenderer;switch(t.encapsulation){case o.Q.Emulated:var n=this.rendererByCompId.get(t.id);return n||(n=new H(this.eventManager,this.sharedStylesHost,t),this.rendererByCompId.set(t.id,n)),n.applyToHost(e),n;case o.Q.Native:case o.Q.ShadowDom:return new q(this.eventManager,this.sharedStylesHost,e,t);default:if(!this.rendererByCompId.has(t.id)){var r=D(t.id,t.styles,[]);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(t.id,this.defaultRenderer)}return this.defaultRenderer}},e.prototype.begin=function(){},e.prototype.end=function(){},e}(),U=function(){function e(e){this.eventManager=e,this.data=Object.create(null)}return e.prototype.destroy=function(){},e.prototype.createElement=function(e,t){return t?document.createElementNS(I[t],e):document.createElement(e)},e.prototype.createComment=function(e){return document.createComment(e)},e.prototype.createText=function(e){return document.createTextNode(e)},e.prototype.appendChild=function(e,t){e.appendChild(t)},e.prototype.insertBefore=function(e,t,n){e&&e.insertBefore(t,n)},e.prototype.removeChild=function(e,t){e&&e.removeChild(t)},e.prototype.selectRootElement=function(e){var t="string"==typeof e?document.querySelector(e):e;if(!t)throw new Error('The selector "'+e+'" did not match any elements');return t.textContent="",t},e.prototype.parentNode=function(e){return e.parentNode},e.prototype.nextSibling=function(e){return e.nextSibling},e.prototype.setAttribute=function(e,t,n,r){if(r){t=r+":"+t;var i=I[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)},e.prototype.removeAttribute=function(e,t,n){if(n){var r=I[n];r?e.removeAttributeNS(r,t):e.removeAttribute(n+":"+t)}else e.removeAttribute(t)},e.prototype.addClass=function(e,t){e.classList.add(t)},e.prototype.removeClass=function(e,t){e.classList.remove(t)},e.prototype.setStyle=function(e,t,n,r){r&o.G.DashCase?e.style.setProperty(t,n,r&o.G.Important?"important":""):e.style[t]=n},e.prototype.removeStyle=function(e,t,n){n&o.G.DashCase?e.style.removeProperty(t):e.style[t]=""},e.prototype.setProperty=function(e,t,n){B(t,"property"),e[t]=n},e.prototype.setValue=function(e,t){e.nodeValue=t},e.prototype.listen=function(e,t,n){return B(t,"listener"),"string"==typeof e?this.eventManager.addGlobalEventListener(e,t,V(n)):this.eventManager.addEventListener(e,t,V(n))},e}(),F="@".charCodeAt(0);function B(e,t){if(e.charCodeAt(0)===F)throw new Error("Found the synthetic "+t+" "+e+'. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.')}var z,H=function(e){function t(t,n,r){var i=e.call(this,t)||this;i.component=r;var o=D(r.id,r.styles,[]);return n.addStyles(o),i.contentAttr=R.replace(M,r.id),i.hostAttr=N.replace(M,r.id),i}return Object(r.c)(t,e),t.prototype.applyToHost=function(t){e.prototype.setAttribute.call(this,t,this.hostAttr,"")},t.prototype.createElement=function(t,n){var r=e.prototype.createElement.call(this,t,n);return e.prototype.setAttribute.call(this,r,this.contentAttr,""),r},t}(U),q=function(e){function t(t,n,r,i){var s=e.call(this,t)||this;s.sharedStylesHost=n,s.hostEl=r,s.component=i,s.shadowRoot=i.encapsulation===o.Q.ShadowDom?r.attachShadow({mode:"open"}):r.createShadowRoot(),s.sharedStylesHost.addHost(s.shadowRoot);for(var a=D(i.id,i.styles,[]),u=0;u<a.length;u++){var c=document.createElement("style");c.textContent=a[u],s.shadowRoot.appendChild(c)}return s}return Object(r.c)(t,e),t.prototype.nodeOrShadowRoot=function(e){return e===this.hostEl?this.shadowRoot:e},t.prototype.destroy=function(){this.sharedStylesHost.removeHost(this.shadowRoot)},t.prototype.appendChild=function(t,n){return e.prototype.appendChild.call(this,this.nodeOrShadowRoot(t),n)},t.prototype.insertBefore=function(t,n,r){return e.prototype.insertBefore.call(this,this.nodeOrShadowRoot(t),n,r)},t.prototype.removeChild=function(t,n){return e.prototype.removeChild.call(this,this.nodeOrShadowRoot(t),n)},t.prototype.parentNode=function(t){return this.nodeOrShadowRoot(e.prototype.parentNode.call(this,this.nodeOrShadowRoot(t)))},t}(U),G="undefined"!=typeof Zone&&Zone.__symbol__||function(e){return"__zone_symbol__"+e},W=G("addEventListener"),K=G("removeEventListener"),Z={},Y="__zone_symbol__propagationStopped";"undefined"!=typeof Zone&&Zone[G("BLACK_LISTED_EVENTS")]&&(z={});var $=function(e){return!!z&&z.hasOwnProperty(e)},Q=function(e){var t=Z[e.type];if(t){var n=this[t];if(n){var r=[e];if(1===n.length)return(s=n[0]).zone!==Zone.current?s.zone.run(s.handler,this,r):s.handler.apply(this,r);for(var i=n.slice(),o=0;o<i.length&&!0!==e[Y];o++){var s;(s=i[o]).zone!==Zone.current?s.zone.run(s.handler,this,r):s.handler.apply(this,r)}}}},J=function(e){function t(t,n,r){var o=e.call(this,t)||this;return o.ngZone=n,r&&Object(i.z)(r)||o.patchEvent(),o}return Object(r.c)(t,e),t.prototype.patchEvent=function(){if("undefined"!=typeof Event&&Event&&Event.prototype&&!Event.prototype.__zone_symbol__stopImmediatePropagation){var e=Event.prototype.__zone_symbol__stopImmediatePropagation=Event.prototype.stopImmediatePropagation;Event.prototype.stopImmediatePropagation=function(){this&&(this[Y]=!0),e&&e.apply(this,arguments)}}},t.prototype.supports=function(e){return!0},t.prototype.addEventListener=function(e,t,n){var r=this,i=n;if(!e[W]||o.z.isInAngularZone()&&!$(t))e.addEventListener(t,i,!1);else{var s=Z[t];s||(s=Z[t]=G("ANGULAR"+t+"FALSE"));var a=e[s],u=a&&a.length>0;a||(a=e[s]=[]);var c=$(t)?Zone.root:Zone.current;if(0===a.length)a.push({zone:c,handler:i});else{for(var l=!1,h=0;h<a.length;h++)if(a[h].handler===i){l=!0;break}l||a.push({zone:c,handler:i})}u||e[W](t,Q,!1)}return function(){return r.removeEventListener(e,t,i)}},t.prototype.removeEventListener=function(e,t,n){var r=e[K];if(!r)return e.removeEventListener.apply(e,[t,n,!1]);var i=Z[t],o=i&&e[i];if(!o)return e.removeEventListener.apply(e,[t,n,!1]);for(var s=!1,a=0;a<o.length;a++)if(o[a].handler===n){s=!0,o.splice(a,1);break}s?0===o.length&&r.apply(e,[t,Q,!1]):e.removeEventListener.apply(e,[t,n,!1])},t}(P),X={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},ee=new o.p("HammerGestureConfig"),te=new o.p("HammerLoader"),ne=function(){function e(){this.events=[],this.overrides={}}return e.prototype.buildHammer=function(e){var t=new Hammer(e,this.options);for(var n in t.get("pinch").set({enable:!0}),t.get("rotate").set({enable:!0}),this.overrides)t.get(n).set(this.overrides[n]);return t},e}(),re=function(e){function t(t,n,r,i){var o=e.call(this,t)||this;return o._config=n,o.console=r,o.loader=i,o}return Object(r.c)(t,e),t.prototype.supports=function(e){return!(!X.hasOwnProperty(e.toLowerCase())&&!this.isCustomEvent(e)||!window.Hammer&&!this.loader&&(this.console.warn('The "'+e+'" event cannot be bound because Hammer.JS is not loaded and no custom loader has been specified.'),1))},t.prototype.addEventListener=function(e,t,n){var r=this,i=this.manager.getZone();if(t=t.toLowerCase(),!window.Hammer&&this.loader){var o=!1,s=function(){o=!0};return this.loader().then(function(){if(!window.Hammer)return r.console.warn("The custom HAMMER_LOADER completed, but Hammer.JS is not present."),void(s=function(){});o||(s=r.addEventListener(e,t,n))}).catch(function(){r.console.warn('The "'+t+'" event cannot be bound because the custom Hammer.JS loader failed.'),s=function(){}}),function(){s()}}return i.runOutsideAngular(function(){var o=r._config.buildHammer(e),s=function(e){i.runGuarded(function(){n(e)})};return o.on(t,s),function(){return o.off(t,s)}})},t.prototype.isCustomEvent=function(e){return this._config.events.indexOf(e)>-1},t}(P),ie=["alt","control","meta","shift"],oe={alt:function(e){return e.altKey},control:function(e){return e.ctrlKey},meta:function(e){return e.metaKey},shift:function(e){return e.shiftKey}},se=function(e){function t(t){return e.call(this,t)||this}var n;return Object(r.c)(t,e),n=t,t.prototype.supports=function(e){return null!=n.parseEventName(e)},t.prototype.addEventListener=function(e,t,r){var i=n.parseEventName(t),o=n.eventCallback(i.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(function(){return a().onAndCancel(e,i.domEventName,o)})},t.parseEventName=function(e){var t=e.toLowerCase().split("."),r=t.shift();if(0===t.length||"keydown"!==r&&"keyup"!==r)return null;var i=n._normalizeKey(t.pop()),o="";if(ie.forEach(function(e){var n=t.indexOf(e);n>-1&&(t.splice(n,1),o+=e+".")}),o+=i,0!=t.length||0===i.length)return null;var s={};return s.domEventName=r,s.fullKey=o,s},t.getEventFullKey=function(e){var t="",n=a().getEventKey(e);return" "===(n=n.toLowerCase())?n="space":"."===n&&(n="dot"),ie.forEach(function(r){r!=n&&(0,oe[r])(e)&&(t+=r+".")}),t+=n},t.eventCallback=function(e,t,r){return function(i){n.getEventFullKey(i)===e&&r.runGuarded(function(){return t(i)})}},t._normalizeKey=function(e){switch(e){case"esc":return"escape";default:return e}},t}(P),ae=function(){return function(){}}(),ue=function(e){function t(t){var n=e.call(this)||this;return n._doc=t,n}return Object(r.c)(t,e),t.prototype.sanitize=function(e,t){if(null==t)return null;switch(e){case o.I.NONE:return t;case o.I.HTML:return t instanceof le?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"HTML"),Object(o.eb)(this._doc,String(t)));case o.I.STYLE:return t instanceof he?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"Style"),Object(o.fb)(t));case o.I.SCRIPT:if(t instanceof fe)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"Script"),new Error("unsafe value used in a script context");case o.I.URL:return t instanceof pe||t instanceof de?t.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(t,"URL"),Object(o.gb)(String(t)));case o.I.RESOURCE_URL:if(t instanceof pe)return t.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(t,"ResourceURL"),new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)");default:throw new Error("Unexpected SecurityContext "+e+" (see http://g.co/ng/security#xss)")}},t.prototype.checkNotSafeValue=function(e,t){if(e instanceof ce)throw new Error("Required a safe "+t+", got a "+e.getTypeName()+" (see http://g.co/ng/security#xss)")},t.prototype.bypassSecurityTrustHtml=function(e){return new le(e)},t.prototype.bypassSecurityTrustStyle=function(e){return new he(e)},t.prototype.bypassSecurityTrustScript=function(e){return new fe(e)},t.prototype.bypassSecurityTrustUrl=function(e){return new de(e)},t.prototype.bypassSecurityTrustResourceUrl=function(e){return new pe(e)},t}(ae),ce=function(){function e(e){this.changingThisBreaksApplicationSecurity=e}return e.prototype.toString=function(){return"SafeValue must use [property]=binding: "+this.changingThisBreaksApplicationSecurity+" (see http://g.co/ng/security#xss)"},e}(),le=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.getTypeName=function(){return"HTML"},t}(ce),he=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.getTypeName=function(){return"Style"},t}(ce),fe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.getTypeName=function(){return"Script"},t}(ce),de=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.getTypeName=function(){return"URL"},t}(ce),pe=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.getTypeName=function(){return"ResourceURL"},t}(ce),ge=[{provide:o.B,useValue:i.A},{provide:o.C,useValue:function(){d.makeCurrent(),w.init()},multi:!0},{provide:i.x,useClass:v,deps:[g]},{provide:g,useFactory:function(){return document},deps:[]}],be=Object(o.S)(o.Z,"browser",ge);function ve(){return new o.l}var ye=function(){function e(e){if(e)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}var t;return t=e,e.withServerTransition=function(e){return{ngModule:t,providers:[{provide:o.c,useValue:e.appId},{provide:y,useExisting:o.c},m]}},e}();"undefined"!=typeof window&&window},Zn8D:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("psW0"),i=n("mChF");function o(e){return void 0===e&&(e=Number.POSITIVE_INFINITY),Object(r.a)(i.a,e)}},ZqrO:function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("mrSG"),i=n("K9Ia"),o=n("Ehmk"),s=n("eihs"),a=n("MGBS"),u=n("zotm");function c(e){return function(t){return t.lift(new l(e,t))}}var l=function(){function e(e,t){this.notifier=e,this.source=t}return e.prototype.call=function(e,t){return t.subscribe(new h(e,this.notifier,this.source))},e}(),h=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.notifier=n,i.source=r,i}return r.c(t,e),t.prototype.error=function(t){if(!this.isStopped){var n=this.errors,r=this.retries,a=this.retriesSubscription;if(r)this.errors=null,this.retriesSubscription=null;else{if(n=new i.a,(r=Object(o.a)(this.notifier)(n))===s.a)return e.prototype.error.call(this,s.a.e);a=Object(u.a)(this,r)}this._unsubscribeAndRecycle(),this.errors=n,this.retries=r,this.retriesSubscription=a,n.next(t)}},t.prototype._unsubscribe=function(){var e=this.errors,t=this.retriesSubscription;e&&(e.unsubscribe(),this.errors=null),t&&(t.unsubscribe(),this.retriesSubscription=null),this.retries=null},t.prototype.notifyNext=function(e,t,n,r,i){var o=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=o,this.source.subscribe(this)},t}(a.a)},a2IU:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("+NEN"),n("jGGy");var r=n("67Y/"),i=function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getSchedules=function(){var e=this;return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"wifi_schedule"}]}).pipe(Object(r.a)(function(e){return e.result[1].values})).pipe(Object(r.a)(function(t){var n=[],r=[];for(var i in t)if("entry"==t[i][".type"]){var o=t[i].starttime,s=t[i].stoptime,a=t[i].daysofweek;t[i].leftPos=e.calcLeftPos(o),t[i].rightPos=e.calcRightPos(s),t[i].duration=e.durationType(a),t[i].daysofweek=e.daysofweekToType(a),"singleday"==t[i].daysofweek?(t[i].weekday=a,t[i].showWeekdays=!0):t[i].showWeekdays=!1,t[i].starthour=e.formatStringToTime(o)[0].toString(),t[i].startmins=e.formatStringToTime(o)[1].toString(),t[i].endhour=e.formatStringToTime(s)[0].toString(),t[i].endmins=e.formatStringToTime(s)[1].toString(),n.push(Object.assign({},t[i]))}else r.push(Object.assign({},t[i]));return[n,r]}))},e.prototype.saveGlobalSettings=function(e,t,n){return this.ubusService.call({data:[[this.authService.getSid(),"uci","add",{config:"wifi_schedule",section:e,type:"global",name:e,values:{enabled:t.toString(),forcewifidown:n.toString()}}],[this.authService.getSid(),"uci","commit",{config:"wifi_schedule"}]]})},e.prototype.delete=function(e){var t=e[".name"],n=[];return n.push([this.authService.getSid(),"uci","delete",{config:"wifi_schedule",section:t}]),n.push([this.authService.getSid(),"uci","commit",{config:"wifi_schedule"}]),this.ubusService.call({data:n})},e.prototype.saveSchedule=function(e,t,n,r){var i={config:"wifi_schedule",type:"entry",values:{daysofweek:t,starttime:this.formatTimeToString(e.starthour,e.startmins),stoptime:this.formatTimeToString(e.endhour,e.endmins),enabled:n}};r||(i.section=e[".name"],i.name=e[".name"]);var o=[[this.authService.getSid(),"uci","add",i],[this.authService.getSid(),"uci","commit",{config:"wifi_schedule"}]];return this.ubusService.call({data:o})},e.prototype.formatTimeToString=function(e,t){return e=e.toString(),t=t.toString(),(e=("00"+e).slice(-2))+":"+("00"+t).slice(-2)},e.prototype.validateStartEndTime=function(e,t,n,r){var i="2000-01-01T"+this.formatTimeToString(e,t)+":00Z",o="2000-01-01T"+this.formatTimeToString(n,r)+":00Z";return[Date.parse(i),Date.parse(o)]},e.prototype.formatStringToTime=function(e){return e.split(":").map(function(e){return Number(e)})},e.prototype.calcLeftPos=function(e){var t,n,r;return r=e.split(":"),t=parseInt(r[0],10),n=parseInt(r[1],10),this.starttimePosition(t,n)},e.prototype.calcRightPos=function(e){var t,n,r;return r=e.split(":"),t=parseInt(r[0],10),n=parseInt(r[1],10),this.endtimePosition(t,n)},e.prototype.starttimePosition=function(e,t){var n;return n=.0693*(60*(e*=1)+(t*=1)),Math.round(100*n)/100},e.prototype.endtimePosition=function(e,t){var n;return n=100-.0693*(60*(e=Number(e))+(t=Number(t))),Math.round(100*n)/100},e.prototype.durationType=function(e){return"Saturday Sunday"==e?"weekend":"Monday Tuesday Wednesday Thursday Friday"==e?"business":"Monday Tuesday Wednesday Thursday Friday Saturday Sunday"==e?"daily":e},e.prototype.daysofweekToType=function(e){return"Monday"==e||"Tuesday"==e||"Wednesday"==e||"Thursday"==e||"Friday"==e||"Saturday"==e||"Sunday"==e?"singleday":e},e}()},a9ph:function(e,t,n){"use strict";var r=n("xZGU").Buffer;function i(e,t){if(!e)throw new Error("SBCS codec is called without the data.");if(!e.chars||128!==e.chars.length&&256!==e.chars.length)throw new Error("Encoding '"+e.type+"' has incorrect 'chars' (must be of len 128 or 256)");if(128===e.chars.length){for(var n="",i=0;i<128;i++)n+=String.fromCharCode(i);e.chars=n+e.chars}this.decodeBuf=r.from(e.chars,"ucs2");var o=r.alloc(65536,t.defaultCharSingleByte.charCodeAt(0));for(i=0;i<e.chars.length;i++)o[e.chars.charCodeAt(i)]=i;this.encodeBuf=o}function o(e,t){this.encodeBuf=t.encodeBuf}function s(e,t){this.decodeBuf=t.decodeBuf}t._sbcs=i,i.prototype.encoder=o,i.prototype.decoder=s,o.prototype.write=function(e){for(var t=r.alloc(e.length),n=0;n<e.length;n++)t[n]=this.encodeBuf[e.charCodeAt(n)];return t},o.prototype.end=function(){},s.prototype.write=function(e){for(var t=this.decodeBuf,n=r.alloc(2*e.length),i=0,o=0,s=0;s<e.length;s++)n[o=2*s]=t[i=2*e[s]],n[o+1]=t[i+1];return n.toString("ucs2")},s.prototype.end=function(){}},b7mW:function(e,t,n){"use strict";function r(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}n.d(t,"a",function(){return i}),r.prototype=Object.create(Error.prototype);var i=r},bKdQ:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){return function(){}}()},"bO+w":function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("67Y/"),i=n("+3se"),o=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.intervalToSeconds=function(e){var t=e.split(":");return 3600*Number(t[0])+60*Number(t[1])},e.prototype.getAutoSwitchOffTime=function(){var e=this;return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"wireless",section:"guest_wifi"}],[this.authService.getSid(),"system","info",{}]]}).pipe(Object(r.a)(function(e){return[e.result[0][1].values,e.result[1][1].localtime]})).pipe(Object(r.a)(function(t){if(!t[0].auto_switch_off||Object(i.h)(t[0].starttime))return null;var n=Number(t[0].starttime)+e.intervalToSeconds(t[0].interval)-Number(t[1]),r=new Date;return r.setSeconds(r.getSeconds()+n),r}))},e}())},cfAG:function(e){e.exports=[["8740","\u43f0\u4c32\u4603\u45a6\u4578\ud85c\ude67\u4d77\u45b3\ud85f\udcb1\u4ce2\ud85f\udcc5\u3b95\u4736\u4744\u4c47\u4c40\ud850\udebf\ud84d\ude17\ud85c\udf52\ud85b\ude8b\ud85c\udcd2\u4c57\ud868\udf51\u474f\u45da\u4c85\ud85f\udc6c\u4d07\u4aa4\u46a1\ud85a\udf23\u7225\ud856\ude54\ud846\ude63\ud84f\ude06\ud84f\udf61\u664d\u56fb"],["8767","\u7d95\u591d\ud862\udfb9\u3df4\u9734\ud85e\udfef\u5bdb\ud847\udd5e\u5aa4\u3625\ud867\udeb0\u5ad1\u5bb7\u5cfc\u676e\u8593\ud866\udd45\u7461\u749d\u3875\ud847\udd53\ud84d\ude9e\ud858\udc21\u3eec"],["87a1","\ud856\udcde\u3af5\u7afc\u9f97\ud850\udd61\ud862\udd0d\ud84c\uddea\ud842\ude8a\ud84c\ude5e\u430a\u8484\u9f96\u942f\u4930\u8613\u5896\u974a\u9218\u79d0\u7a32\u6660\u6a29\u889d\u744c\u7bc5\u6782\u7a2c\u524f\u9046\u34e6\u73c4\ud857\uddb9\u74c6\u9fc7\u57b3\u492f\u544c\u4131\ud84d\ude8e\u5818\u7a72\ud85e\udf65\u8b8f\u46ae\ud85b\ude88\u4181\ud857\udd99\u7bae\ud849\udcbc\u9fc8\ud849\udcc1\ud849\udcc9\ud849\udccc\u9fc9\u8504\ud84d\uddbb\u40b4\u9fca\u44e1\ud86b\uddff\u62c1\u706e\u9fcb"],["8840","\u31c0",4,"\ud840\udd0c\u31c5\ud840\udcd1\ud840\udccd\u31c6\u31c7\ud840\udccb\ud847\udfe8\u31c8\ud840\udcca\u31c9\u31ca\u31cb\u31cc\ud840\udd0e\u31cd\u31ce\u0100\xc1\u01cd\xc0\u0112\xc9\u011a\xc8\u014c\xd3\u01d1\xd2\u0fff\xca\u0304\u1ebe\u0fff\xca\u030c\u1ec0\xca\u0101\xe1\u01ce\xe0\u0251\u0113\xe9\u011b\xe8\u012b\xed\u01d0\xec\u014d\xf3\u01d2\xf2\u016b\xfa\u01d4\xf9\u01d6\u01d8\u01da"],["88a1","\u01dc\xfc\u0fff\xea\u0304\u1ebf\u0fff\xea\u030c\u1ec1\xea\u0261\u23da\u23db"],["8940","\ud868\udfa9\ud844\udd45"],["8943","\u650a"],["8946","\u4e3d\u6edd\u9d4e\u91df"],["894c","\ud85d\udf35\u6491\u4f1a\u4f28\u4fa8\u5156\u5174\u519c\u51e4\u52a1\u52a8\u533b\u534e\u53d1\u53d8\u56e2\u58f0\u5904\u5907\u5932\u5934\u5b66\u5b9e\u5b9f\u5c9a\u5e86\u603b\u6589\u67fe\u6804\u6865\u6d4e\u70bc\u7535\u7ea4\u7eac\u7eba\u7ec7\u7ecf\u7edf\u7f06\u7f37\u827a\u82cf\u836f\u89c6\u8bbe\u8be2\u8f66\u8f67\u8f6e"],["89a1","\u7411\u7cfc\u7dcd\u6946\u7ac9\u5227"],["89ab","\u918c\u78b8\u915e\u80bc"],["89b0","\u8d0b\u80f6\ud842\udde7"],["89b5","\u809f\u9ec7\u4ccd\u9dc9\u9e0c\u4c3e\ud867\uddf6\ud85c\udc0e\u9e0a\ud868\udd33\u35c1"],["89c1","\u6e9a\u823e\u7519"],["89c5","\u4911\u9a6c\u9a8f\u9f99\u7987\ud861\udc6c\ud847\uddca\ud841\uddd0\ud84a\udee6\u4e24\u4e81\u4e80\u4e87\u4ebf\u4eeb\u4f37\u344c\u4fbd\u3e48\u5003\u5088\u347d\u3493\u34a5\u5186\u5905\u51db\u51fc\u5205\u4e89\u5279\u5290\u5327\u35c7\u53a9\u3551\u53b0\u3553\u53c2\u5423\u356d\u3572\u3681\u5493\u54a3\u54b4\u54b9\u54d0\u54ef\u5518\u5523\u5528\u3598\u553f\u35a5\u35bf\u55d7\u35c5"],["8a40","\ud85f\udd84\u5525"],["8a43","\ud843\udc42\ud843\udd15\ud854\udd2b\u5590\ud84b\udcc6\u39ec\ud840\udf41\u8e46\ud853\uddb8\ud865\udce5\u4053\ud860\udcbe\u777a\ud84b\udc38\u3a34\u47d5\ud860\udd5d\ud85a\uddf2\ud853\uddea\u64dd\ud843\udd7c\ud843\udfb4\ud843\udcd5\ud844\udcf4\u648d\u8e7e\ud843\ude96\ud843\udc0b\ud843\udf64\ud84b\udca9\ud860\ude56\ud851\udcd3"],["8a64","\ud843\udd46\ud866\ude4d\ud860\udce9\u47f4\ud853\udea7\ud84b\udcc2\u9ab2\u3a67\ud865\uddf4\u3fed\u3506\ud854\udec7\ud865\udfd4\ud85e\udcc8\ud84b\udd44\u9d6e\u9815"],["8a76","\u43d9\ud858\udca5\u64b4\u54e3\ud84b\udd4c\ud84a\udfca\ud844\udc77\u39fb\ud844\udc6f"],["8aa1","\ud859\udeda\ud859\udf16\ud85e\udda0\u64ea\ud854\udc52\ud843\udc43\u8e68\ud848\udda1\ud862\udf4c\ud841\udf31"],["8aac","\u480b\ud840\udda9\u3ffa\u5873\ud84b\udd8d"],["8ab2","\ud851\uddc8\ud841\udcfc\ud858\udc97\ud843\udf4c\ud843\udd96\u5579\u40bb\u43ba"],["8abb","\u4ab4\ud84a\ude66\ud844\udc9d\u81aa\u98f5\ud843\udd9c\u6379\u39fe\ud849\udf75\u8dc0\u56a1\u647c\u3e43"],["8ac9","\ud869\ude01\ud843\ude09\ud84a\udecf\ud84b\udcc9"],["8ace","\ud844\udcc8\ud84e\uddc2\u3992\u3a06\ud860\ude9b\u3578\ud857\ude49\ud848\udcc7\u5652\ud843\udf31\ud84b\udcb2\ud865\udf20\u34bc\u6c3d\ud853\ude3b"],["8adf","\ud85d\udd74\ud84b\ude8b\ud848\ude08\ud869\ude5b\ud863\udccd\ud843\ude7a\ud843\udc34\ud85a\udc1c\u7f93\ud844\udccf\ud84a\udc03\ud84a\udd39\u35fb\ud854\udde3\ud843\ude8c\ud843\udf8d\ud843\udeaa\u3f93\ud843\udf30\ud843\udd47\ud844\udd4f\ud843\ude4c"],["8af6","\ud843\udeab\ud842\udfa9\ud843\udd48\ud844\udcc0\ud844\udd3d\u3ff9\ud849\ude96\u6432\ud843\udfad"],["8b40","\ud84c\udff4\ud85d\ude39\ud84a\udfce\ud843\udd7e\ud843\udd7f\ud84b\udc51\ud84b\udc55\u3a18\ud843\ude98\ud844\udcc7\ud843\udf2e\ud869\ude32\ud85a\udf50\ud863\udcd2\ud863\udd99\ud863\udcca\u95aa\u54cc\u82c4\u55b9"],["8b55","\ud867\udec3\u9c26\u9ab6\ud85d\udf5e\ud84b\uddee\u7140\u816d\u80ec\u5c1c\ud859\udd72\u8134\u3797\u535f\ud860\udcbd\u91b6\ud843\udefa\ud843\ude0f\ud843\ude77\ud843\udefb\u35dd\ud853\uddeb\u3609\ud843\udcd6\u56af\ud849\udfb5\ud844\udcc9\ud843\ude10\ud843\ude78\ud844\udc78\ud844\udd48\ud860\ude07\ud845\udc55\ud843\ude79\ud853\ude50\ud84b\udda4\u5a54\ud844\udc1d\ud844\udc1e\ud844\udcf5\ud844\udcf6\u579c\ud843\ude11"],["8ba1","\ud85d\ude94\ud860\udecd\ud843\udfb5\ud843\ude7b\ud854\udd7e\u3703\ud843\udfb6\ud844\udd80\ud854\uded8\ud868\udebd\ud852\uddda\ud846\udc3a\ud850\udd77\ud860\ude7c\u5899\u5268\u361a\ud855\udf3d\u7bb2\u5b68\u4800\u4b2c\u9f27\u49e7\u9c1f\u9b8d\ud856\udf74\ud84c\udd3d\u55fb\u35f2\u5689\u4e28\u5902\ud846\udfc1\ud87e\udc78\u9751\ud840\udc86\u4e5b\u4ebb\u353e\u5c23\u5f51\u5fc4\u38fa\u624c\u6535\u6b7a\u6c35\u6c3a\u706c\u722b\u4e2c\u72ad\ud852\udce9\u7f52\u793b\u7cf9\u7f53\ud858\ude6a\u34c1"],["8bde","\ud858\udf4b\u8002\u8080\ud859\ude12\ud85a\udd51\u535d\u8864\u89c1\ud85e\udcb2\u8ba0\u8d1d\u9485\u9578\u957f\u95e8\ud863\ude0f\u97e6\u9875\u98ce\u98de\u9963\ud866\udc10\u9c7c\u9e1f\u9ec4\u6b6f\uf907\u4e37\ud840\udc87\u961d\u6237\u94a2"],["8c40","\u503b\u6dfe\ud867\udc73\u9fa6\u3dc9\u888f\ud850\udd4e\u7077\u5cf5\u4b20\ud854\uddcd\u3559\ud857\udd30\u6122\ud862\ude32\u8fa7\u91f6\u7191\u6719\u73ba\ud84c\ude81\ud868\udd07\u3c8b\ud846\udd80\u4b10\u78e4\u7402\u51ae\ud861\udf0f\u4009\u6a63\ud868\udeba\u4223\u860f\ud842\ude6f\u7a2a\ud866\udd47\ud862\udeea\u9755\u704d\u5324\ud848\udc7e\u93f4\u76d9\ud862\udde3\u9fa7\u77dd\u4ea3\u4ff0\u50bc\u4e2f\u4f17\u9fa8\u5434\u7d8b\u5892\u58d0\ud847\uddb6\u5e92\u5e99\u5fc2\ud849\udf12\u658b"],["8ca1","\ud84c\udff9\u6919\u6a43\ud84f\udc63\u6cff"],["8ca7","\u7200\ud851\udd05\u738c\u3edb\ud852\ude13\u5b15\u74b9\u8b83\ud857\udca4\ud855\ude95\u7a93\u7bec\u7cc3\u7e6c\u82f8\u8597\u9fa9\u8890\u9faa\u8eb9\u9fab\u8fcf\u855f\u99e0\u9221\u9fac\ud863\uddb9\ud845\udc3f\u4071\u42a2\u5a1a"],["8cc9","\u9868\u676b\u4276\u573d"],["8cce","\u85d6\ud852\udd7b\u82bf\ud85c\udd0d\u4c81\ud85b\udd74\u5d7b\ud85a\udf15\ud85b\udfbe\u9fad\u9fae\u5b96\u9faf\u66e7\u7e5b\u6e57\u79ca\u3d88\u44c3\ud84c\ude56\ud849\udf96\u439a\u4536"],["8ce6","\u5cd5\ud84e\udf1a\u8af9\u5c78\u3d12\ud84d\udd51\u5d78\u9fb2\u7157\u4558\ud850\udcec\ud847\ude23\u4c77\u3978\u344a\ud840\udda4\ud85b\udc41\u8acc\u4fb4\ud840\ude39\u59bf\u816c\u9856\ud866\udcfa\u5f3b"],["8d40","\ud842\udf9f"],["8d42","\ud848\uddc1\ud862\udd6d\u4102\u46bb\ud864\udc79\u3f07\u9fb3\ud868\uddb5\u40f8\u37d6\u46f7\ud85b\udc46\u417c\ud861\udeb2\ud85c\udfff\u456d\u38d4\ud855\udc9a\u4561\u451b\u4d89\u4c7b\u4d76\u45ea\u3fc8\ud852\udf0f\u3661\u44de\u44bd\u41ed\u5d3e\u5d48\u5d56\u3dfc\u380f\u5da4\u5db9\u3820\u3838\u5e42\u5ebd\u5f25\u5f83\u3908\u3914\u393f\u394d\u60d7\u613d\u5ce5\u3989\u61b7\u61b9\u61cf\u39b8\u622c\u6290\u62e5\u6318\u39f8\u56b1"],["8da1","\u3a03\u63e2\u63fb\u6407\u645a\u3a4b\u64c0\u5d15\u5621\u9f9f\u3a97\u6586\u3abd\u65ff\u6653\u3af2\u6692\u3b22\u6716\u3b42\u67a4\u6800\u3b58\u684a\u6884\u3b72\u3b71\u3b7b\u6909\u6943\u725c\u6964\u699f\u6985\u3bbc\u69d6\u3bdd\u6a65\u6a74\u6a71\u6a82\u3bec\u6a99\u3bf2\u6aab\u6ab5\u6ad4\u6af6\u6b81\u6bc1\u6bea\u6c75\u6caa\u3ccb\u6d02\u6d06\u6d26\u6d81\u3cef\u6da4\u6db1\u6e15\u6e18\u6e29\u6e86\ud862\uddc0\u6ebb\u6ee2\u6eda\u9f7f\u6ee8\u6ee9\u6f24\u6f34\u3d46\ud84f\udf41\u6f81\u6fbe\u3d6a\u3d75\u71b7\u5c99\u3d8a\u702c\u3d91\u7050\u7054\u706f\u707f\u7089\ud840\udf25\u43c1\u35f1\ud843\uded8"],["8e40","\ud84f\uded7\u57be\ud85b\uded3\u713e\ud855\udfe0\u364e\u69a2\ud862\udfe9\u5b74\u7a49\ud856\udce1\ud865\udcd9\u7a65\u7a7d\ud856\uddac\u7abb\u7ab0\u7ac2\u7ac3\u71d1\ud859\udc8d\u41ca\u7ada\u7add\u7aea\u41ef\u54b2\ud857\udc01\u7b0b\u7b55\u7b29\ud854\udf0e\ud857\udcfe\u7ba2\u7b6f\u839c\ud856\udfb4\ud85b\udc7f\u7bd0\u8421\u7b92\u7bb8\ud857\udd20\u3dad\ud857\udc65\u8492\u7bfa\u7c06\u7c35\ud857\udcc1\u7c44\u7c83\ud852\udc82\u7ca6\u667d\ud851\udd78\u7cc9\u7cc7\u7ce6\u7c74\u7cf3\u7cf5\u7cce"],["8ea1","\u7e67\u451d\ud85b\ude44\u7d5d\ud85b\uded6\u748d\u7d89\u7dab\u7135\u7db3\u7dd2\ud850\udc57\ud858\udc29\u7de4\u3d13\u7df5\ud845\udff9\u7de5\ud860\udf6d\u7e1d\ud858\udd21\ud858\udd5a\u7e6e\u7e92\u432b\u946c\u7e27\u7f40\u7f41\u7f47\u7936\ud858\uded0\u99e1\u7f97\ud858\udf51\u7fa3\ud845\ude61\ud840\udc68\u455c\ud84d\udf66\u4503\ud860\udf3a\u7ffa\ud859\udc89\u8005\u8008\u801d\u8028\u802f\ud868\udc87\ud85b\udcc3\u803b\u803c\u8061\ud849\udf14\u4989\ud859\ude26\ud84f\udde3\ud859\udee8\u6725\u80a7\ud862\ude48\u8107\u811a\u58b0\ud849\udef6\u6c7f\ud859\udc98\ud853\udfb8\u64e7\ud845\udc8a\u8218\ud846\udc5e\u6a53\ud852\ude65\ud852\ude95\u447a\u8229\ud842\udf0d\ud85a\ude52\ud84f\udd7e\u4ff9\ud845\udcfd\u84e2\u8362\ud85a\udf0a\ud852\udda7\ud84d\udd30\ud845\udf73\ud84f\uddf8\u82aa\u691b\ud87e\udd94\u41db"],["8f40","\u854b\u82d0\u831a\ud843\ude16\ud845\udfb4\u36c1\ud84c\udd7d\ud84d\udd5a\u827b\u82e2\u8318\ud84f\ude8b\ud85b\udda3\ud85a\udf05\ud85a\udf97\ud84d\uddce\u3dbf\u831d\u55ec\u8385\u450b\ud85b\udda5\u83ac\u83c1\u83d3\u347e\ud85b\uded4\u6a57\u855a\u3496\ud85b\ude42\ud84b\udeef\u8458\ud856\udfe4\u8471\u3dd3\u44e4\u6aa7\u844a\ud84f\udcb5\u7958\u84a8\ud85a\udf96\ud85b\ude77\ud85b\ude43\u84de\u840f\u8391\u44a0\u8493\u84e4\ud857\udc91\u4240\ud857\udcc0\u4543\u8534\u5af2\ud85b\ude99\u4527\u8573\u4516\u67bf\u8616"],["8fa1","\ud861\ude25\ud861\ude3b\u85c1\ud85c\udc88\u8602\ud845\udd82\ud85c\udccd\ud87e\uddb2\u456a\u8628\u3648\ud846\udca2\u53f7\ud85c\udf9a\u867e\u8771\ud868\udcf8\u87ee\ud84b\udc27\u87b1\u87da\u880f\u5661\u866c\u6856\u460f\u8845\u8846\ud85d\udde0\ud84f\uddb9\ud85d\udde4\u885e\u889c\u465b\u88b4\u88b5\u63c1\u88c5\u7777\ud85d\udf0f\u8987\u898a\u89a6\u89a9\u89a7\u89bc\ud862\ude25\u89e7\ud85e\udd24\ud85e\udebd\u8a9c\u7793\u91fe\u8a90\ud85e\ude59\u7ae9\ud85e\udf3a\ud84f\udf8f\u4713\ud85e\udf38\u717c\u8b0c\u8b1f\ud855\udc30\ud855\udd65\u8b3f\u8b4c\u8b4d\u8aa9\ud852\ude7a\u8b90\u8b9b\u8aaf\ud845\udedf\u4615\u884f\u8c9b\ud85f\udd54\ud85f\udd8f\ud87e\uddd4\u3725\ud85f\udd53\u8cd6\ud85f\udd98\ud85f\uddbd\u8d12\u8d03\ud846\udd10\u8cdb\u705c\u8d11\ud853\udcc9\u3ed0\u8d77"],["9040","\u8da9\ud860\udc02\ud844\udc14\ud852\udd8a\u3b7c\ud860\uddbc\ud85c\udd0c\u7ae7\u8ead\u8eb6\u8ec3\u92d4\u8f19\u8f2d\ud860\udf65\ud861\udc12\u8fa5\u9303\ud868\ude9f\ud842\ude50\u8fb3\u492a\ud862\uddde\ud861\udd3d\ud84f\uddbb\u5ef8\ud84c\ude62\u8ff9\ud868\udc14\ud861\udebc\ud861\udd01\ud848\udf25\u3980\ud85b\uded7\u9037\ud861\udd3c\ud85e\udebe\u9061\ud861\udd6c\ud861\ude0b\u90a8\ud861\udf13\u90c4\ud861\udee6\u90ae\u90fd\u9167\u3af0\u91a9\u91c4\u7cac\ud862\udd33\ud847\ude89\u920e\u6c9f\u9241\u9262\ud855\uddb9\u92b9\ud862\udec6\ud84f\udc9b\ud862\udf0c\ud855\udddb"],["90a1","\ud843\udd31\u932c\u936b\ud862\udee1\ud862\udfeb\u708f\u5ac3\ud862\udee2\ud862\udee5\u4965\u9244\ud862\udfec\ud863\udc39\ud862\udfff\u9373\u945b\u8ebc\u9585\u95a6\u9426\u95a0\u6ff6\u42b9\ud849\ude7a\ud861\uded8\ud844\ude7c\ud84f\ude2e\u49df\u6c1c\u967b\u9696\u416c\u96a3\ud85b\uded5\u61da\u96b6\u78f5\ud862\udee0\u96bd\u53cc\u49a1\ud85b\udcb8\ud840\ude74\ud859\udc10\ud864\udcaf\ud864\udce5\ud852\uded1\ud846\udd15\ud84c\udf0a\u9731\u8642\u9736\u4a0f\u453d\u4585\ud852\udee9\u7075\u5b41\u971b\u975c\ud864\uddd5\u9757\u5b4a\ud864\uddeb\u975f\u9425\u50d0\ud84c\udcb7\ud84c\udcbc\u9789\u979f\u97b1\u97be\u97c0\u97d2\u97e0\ud855\udc6c\u97ee\u741c\ud865\udc33\u97ff\u97f5\ud865\udc1d\ud85e\udd7a\u4ad1\u9834\u9833\u984b\u9866\u3b0e\ud85c\udd75\u3d51\ud841\ude30\ud850\udd5c"],["9140","\ud855\udf06\u98ca\u98b7\u98c8\u98c7\u4aff\ud85b\udd27\ud845\uded3\u55b0\u98e1\u98e6\u98ec\u9378\u9939\ud852\ude29\u4b72\ud866\udc57\ud866\udd05\u99f5\u9a0c\u9a3b\u9a10\u9a58\ud855\udf25\u36c4\ud864\udcb1\ud866\udfd5\u9ae0\u9ae2\ud866\udf05\u9af4\u4c0e\u9b14\u9b2d\ud861\ude00\u5034\u9b34\ud85a\udda8\u38c3\ud84c\udc7d\u9b50\u9b40\ud867\udd3e\u5a45\ud846\udc63\u9b8e\ud850\ude4b\u9c02\u9bff\u9c0c\ud867\ude68\u9dd4\ud867\udfb7\ud868\udd92\ud868\uddab\ud868\udce1\ud868\udd23\ud868\udddf\u9d7e\u9d83\ud868\udd34\u9e0e\u6888"],["91a1","\u9dc4\ud848\udd5b\ud868\udd93\ud868\ude20\ud846\udd3b\ud868\ude33\u9d39\ud868\udcb9\ud868\udeb4\u9e90\u9e95\u9e9e\u9ea2\u4d34\u9eaa\u9eaf\ud850\udf64\u9ec1\u3b60\u39e5\u3d1d\u4f32\u37be\ud863\udc2b\u9f02\u9f08\u4b96\u9424\ud85b\udda2\u9f17\u9f16\u9f39\u569f\u568a\u9f45\u99b8\ud864\udc8b\u97f2\u847f\u9f62\u9f69\u7adc\u9f8e\u7216\u4bbe\ud852\udd75\ud852\uddbb\u7177\ud852\uddf8\ud850\udf48\ud852\ude51\u739e\ud862\udfda\ud846\udcfa\u799f\ud862\udd7e\ud863\ude36\u9369\u93f3\ud862\ude44\u92ec\u9381\u93cb\ud862\udd6c\ud851\udcb9\u7217\u3eeb\u7772\u7a43\u70d0\ud851\udc73\ud850\udff8\u717e\ud845\udfef\u70a3\ud846\udcbe\ud84d\udd99\u3ec7\ud846\udc85\ud855\udc2f\ud845\udff8\u3722\ud845\udefb\ud846\udc39\u36e1\ud845\udf74\ud846\udcd1\ud857\udf4b\u3723\ud845\udec0\u575b\ud852\ude25\ud844\udffe\ud844\udea8"],["9240","\ud844\udfc6\ud845\udcb6\u8503\ud84d\udea6\u8503\u8455\ud852\udd94\ud85c\udd65\ud84f\ude31\ud855\udd5c\ud84f\udefb\ud85c\udc52\u44f4\ud84d\udeee\ud866\udd9d\ud85b\udf26\u67f9\u3733\u3c15\u3de7\u586c\ud846\udd22\u6810\u4057\ud84d\udf3f\ud850\udce1\ud850\udc8b\ud850\udd0f\ud85b\udc21\u54cb\u569e\ud859\udeb1\u5692\ud843\udfdf\ud842\udfa8\ud843\ude0d\u93c6\ud862\udf13\u939c\u4ef8\u512b\u3819\ud851\udc36\u4ebc\ud841\udc65\ud840\udf7f\u4f4b\u4f8a\ud855\ude51\u5a68\ud840\uddab\ud840\udfcb\u3999\ud840\udf0a\ud841\udc14\u3435\u4f29\ud840\udec0\ud863\udeb3\ud840\ude75\u8ada\ud840\ude0c\u4e98"],["92a1","\u50cd\u510d\u4fa2\u4f03\ud852\ude0e\ud84f\ude8a\u4f42\u502e\u506c\u5081\u4fcc\u4fe5\u5058\u50fc\u5159\u515b\u515d\u515e\u6e76\ud84d\udd95\ud84f\ude39\ud84f\udebf\u6d72\ud846\udc84\ud84f\ude89\u51a8\u51c3\ud841\udde0\u44dd\ud841\udca3\ud841\udc92\ud841\udc91\u8d7a\ud862\ude9c\ud841\udf0e\u5259\u52a4\ud842\udc73\u52e1\u936e\u467a\u718c\ud850\udf8c\ud843\udc20\ud852\uddac\ud844\udce4\u69d1\ud843\ude1d\u7479\u3ede\u7499\u7414\u7456\u7398\u4b8e\ud852\udebc\ud850\udc8d\u53d0\u3584\u720f\ud850\udcc9\u55b4\ud840\udf45\u54cd\ud842\udfc6\u571d\u925d\u96f4\u9366\u57dd\u578d\u577f\u363e\u58cb\u5a99\ud862\ude46\ud845\udefa\ud845\udf6f\ud845\udf10\u5a2c\u59b8\u928f\u5a7e\u5acf\u5a12\ud856\udd46\ud846\uddf3\ud846\udc61\ud850\ude95\u36f5\u6d05\u7443\u5a21\ud857\ude83"],["9340","\u5a81\ud862\udfd7\ud841\udc13\u93e0\u748c\ud844\udf03\u7105\u4972\u9408\ud862\uddfb\u93bd\u37a0\u5c1e\u5c9e\u5e5e\u5e48\ud846\udd96\ud846\udd7c\ud84e\udeee\u5ecd\u5b4f\ud846\udd03\ud846\udd04\u3701\ud846\udca0\u36dd\ud845\udefe\u36d3\u812a\ud862\ude47\ud847\uddba\ud84d\udc72\ud862\udda8\u5f0c\u5f0e\ud846\udd27\ud845\udfab\u5a6b\ud845\udf3b\u5b44\u8614\ud85d\uddfd\u8860\u607e\ud84a\udc60\ud849\ude2b\u5fdb\u3eb8\ud849\uddaf\ud849\uddbe\ud864\udc88\ud85b\udf73\u61c0\ud840\udc3e\ud840\udc46\ud849\ude1b\u6199\u6198\u6075\ud84b\udc9b\ud84b\udd07\ud851\uded4\ud864\udd4d"],["93a1","\u6471\ud851\ude65\ud84a\udf6a\u3a29\ud84a\udf22\ud84d\udc50\ud866\udcea\ud84b\ude78\u6337\ud869\udc5b\u64b6\u6331\u63d1\ud852\udde3\ud84b\udd67\u62a4\ud84b\udca1\u643b\u656b\u6972\u3bf4\ud84c\udc8e\ud84c\udead\ud852\udd89\ud84c\udeab\u550d\ud84c\udee0\ud846\udcd9\ud865\udc3f\u66ce\ud84c\ude89\ud84c\uddb3\u3ae0\u4190\ud855\udd84\ud862\udf22\ud855\udd8f\ud845\udefc\ud855\udd5b\ud855\udc25\u78ee\ud84c\udd03\ud846\udc2a\ud84c\ude34\u3464\ud84c\ude0f\ud84c\udd82\ud850\udec9\u668e\ud85b\udd24\u666b\u4b93\u6630\ud85e\udc70\ud847\uddeb\u6663\ud84c\uded2\ud84c\udee1\u661e\ud856\udc72\u38d1\ud84e\udc3a\ud84d\udfbc\u3b99\ud84d\udfa2\ud84c\udffe\u74d0\u3b96\u678f\ud851\ude2a\u68b6\u681e\u3bc4\u6abe\u3863\ud84d\udfd5\ud851\udc87\u6a33\u6a52\u6ac9\u6b05\ud846\udd12\u6511\u6898\u6a4c\u3bd7\u6a7a\u6b57\ud84f\udfc0\ud84f\udc9a\u93a0\u92f2\ud862\udfea\ud862\udecb"],["9440","\u9289\ud860\udc1e\ud862\udddc\u9467\u6da5\u6f0b\ud852\uddec\u6d67\ud84f\udf7f\u3d8f\u6e04\ud850\udc3c\u5a3d\u6e0a\u5847\u6d24\u7842\u713b\ud850\udf1a\ud850\ude76\u70f1\u7250\u7287\u7294\ud851\udf8f\ud851\udf25\u5179\ud852\udea4\ud841\uddeb\u747a\ud84f\udef8\ud84d\ude5f\ud852\ude4a\ud852\udd17\ud857\udfe1\u3f06\u3eb1\ud852\udedf\ud863\udc23\ud84f\udf35\u60a7\u3ef3\u74cc\u743c\u9387\u7437\u449f\ud85b\uddea\u4551\u7583\u3f63\ud853\udcd9\ud853\udd06\u3f58\u7555\u7673\ud869\uddc6\u3b19\u7468\ud862\udecc\ud852\uddab\ud852\udd8e\u3afb"],["94a1","\u3dcd\ud852\ude4e\u3eff\ud852\uddc5\ud852\udcf3\u91fa\u5732\u9342\ud862\udee3\ud846\udc64\u50df\ud854\ude21\ud854\udde7\u7778\ud84c\ude32\u770e\u770f\u777b\ud851\ude97\ud84d\udf81\u3a5e\ud852\udcf0\u7438\u749b\u3ebf\ud852\udeba\ud852\udec7\u40c8\ud852\ude96\ud858\uddae\u9307\ud855\udd81\u781e\u788d\u7888\u78d2\u73d0\u7959\ud85d\udf41\ud855\udee3\u410e\u799b\u8496\u79a5\u6a2d\ud84f\udefa\u7a3a\u79f4\u416e\ud845\udee6\u4132\u9235\u79f1\ud843\udd4c\ud852\udd8c\ud840\ude99\ud84f\uddba\ud845\udf6e\u3597\u556b\u3570\u36aa\ud840\uddd4\ud843\udc0d\u7ae2\u5a59\ud849\udef5\ud856\udeaf\ud856\ude9c\u5a0d\ud840\ude5b\u78f0\u5a2a\ud856\udfc6\u7afe\u41f9\u7c5d\u7c6d\u4211\ud856\udfb3\ud857\udebc\ud857\udea6\u7ccd\ud852\uddf9\ud845\udfb0\u7c8e\u7c7c\u7cae\u6ab2\u7ddc\u7e07\u7dd3\u7f4e\ud858\ude61"],["9540","\ud858\udd5c\ud85e\udf48\u7d97\ud857\ude82\u426a\ud85a\udf75\ud842\udd16\u67d6\ud840\udc4e\ud84d\uddcf\u57c4\ud859\udc12\ud858\udff8\ud852\udd62\u7fdd\u7b27\ud842\udc2c\ud856\udee9\ud857\udd43\u7b0c\ud857\ude0e\u99e6\u8645\u9a63\u6a1c\ud84d\udc3f\u39e2\ud852\uddf7\ud859\uddad\u9a1f\ud859\udda0\u8480\ud85c\udd27\ud85b\udcd1\u44ea\u8137\u4402\u80c6\u8109\u8142\ud859\udfb4\u98c3\ud85a\ude42\u8262\u8265\ud85a\ude51\u8453\ud85b\udda7\u8610\ud85c\ude1b\u5a86\u417f\ud846\udc40\u5b2b\ud846\udca1\u5ae4\ud846\udcd8\u86a0\ud87e\uddbc\ud84f\udd8f\u882d\ud85d\udc22\u5a02"],["95a1","\u886e\u4f45\u8887\u88bf\u88e6\u8965\u894d\ud855\ude83\u8954\ud85d\udf85\ud85d\udf84\ud862\udff5\ud862\udfd9\ud862\udf9c\ud862\uddf9\u3ead\u84a3\u46f5\u46cf\u37f2\u8a3d\u8a1c\ud865\udc48\u5f4d\u922b\ud850\ude84\u65d4\u7129\u70c4\ud846\udc45\u9d6d\u8c9f\u8ce9\ud85f\udddc\u599a\u77c3\u59f0\u436e\u36d4\u8e2a\u8ea7\ud853\udc09\u8f30\u8f4a\u42f4\u6c58\u6fbb\ud848\udf21\u489b\u6f79\u6e8b\ud845\udfda\u9be9\u36b5\ud852\udd2f\u90bb\u9097\u5571\u4906\u91bb\u9404\ud862\ude4b\u4062\ud862\udefc\u9427\ud863\udc1d\ud863\udc3b\u84e5\u8a2b\u9599\u95a7\u9597\u9596\ud863\udd34\u7445\u3ec2\ud852\udcff\ud852\ude42\ud850\udfea\u3ee7\ud84c\ude25\u968f\ud863\udee7\ud863\ude66\ud863\ude65\u3ecc\ud852\udded\ud852\ude78\ud84f\udfee\u7412\u746b\u3efc\u9741\ud864\udcb0"],["9640","\u6847\u4a1d\ud864\udc93\ud855\udfdf\u975d\u9368\ud862\udd89\ud863\udc26\ud862\udf2f\ud858\udfbe\u92ba\u5b11\u8b69\u493c\u73f9\ud850\ude1b\u979b\u9771\u9938\ud843\udf26\u5dc1\ud862\udfc5\ud852\udeb2\u981f\ud865\udcda\u92f6\ud865\uddd7\u91e5\u44c0\ud862\udf50\ud852\ude67\ud862\udf64\u98dc\ud862\ude45\u3f00\u922a\u4925\u8414\u993b\u994d\ud85e\udf06\u3dfd\u999b\u4b6f\u99aa\u9a5c\ud862\udf65\ud856\udcc8\u6a8f\u9a21\u5afe\u9a2f\ud866\udcf1\u4b90\ud866\udd48\u99bc\u4bbd\u4b97\u937d\u5872\ud844\udf02\u5822\ud852\uddb8"],["96a1","\ud845\udce8\u7844\ud849\udf1f\ud84f\uddb8\u68c5\u3d7d\u9458\u3927\u6150\ud849\udf81\ud84a\udd6b\u6107\u9c4f\u9c53\u9c7b\u9c35\u9c10\u9b7f\u9bcf\ud867\ude2d\u9b9f\ud868\uddf5\ud868\udcfe\u9d21\u4cae\ud850\udd04\u9e18\u4cb0\u9d0c\ud868\uddb4\ud868\udced\ud868\udcf3\ud866\udd2f\u9da5\u84bd\ud85b\ude12\ud85b\udfdf\ud85a\udf82\u85fc\u4533\ud85b\udda4\ud85b\ude84\ud85b\uddf0\u8420\u85ee\ud85b\ude00\ud84d\udfd7\ud858\udc64\u79e2\ud84d\udd9c\ud84d\ude40\u492d\ud852\uddde\u3d62\u93db\u92be\u9348\ud840\udebf\u78b9\u9277\u944d\u4fe4\u3440\u9064\ud855\udd5d\u783d\u7854\u78b6\u784b\ud845\udf57\ud84c\uddc9\ud852\udd41\u369a\u4f72\u6fda\u6fd9\u701e\u701e\u5414\ud850\uddb5\u57bb\u58f3\u578a\u9d16\u57d7\u7134\u34af\ud850\uddac\u71eb\ud85b\udc40\ud853\udf97\u5b28\ud845\udfb5\ud862\ude49"],["9740","\u610c\u5ace\u5a0b\u42bc\ud851\udc88\u372c\u4b7b\ud862\uddfc\u93bb\u93b8\ud846\udcd6\ud843\udf1d\u8472\ud85b\udcc0\ud845\udc13\ud850\udefa\ud84b\udc26\ud850\udfc1\u5994\ud84f\uddb7\ud859\udf41\u7da8\ud858\udd5b\ud858\udca4\ud852\uddb9\ud852\udd8b\ud862\uddfa\u92e5\u73e2\u3ee9\u74b4\ud862\udf63\ud846\udc9f\u3ee1\ud852\udeb3\u6ad8\u73f3\u73fb\u3ed6\ud852\ude3e\ud852\ude94\ud845\udfd9\ud852\ude66\ud840\udfa7\ud845\udc24\ud852\udde5\u7448\ud852\udd16\u70a5\ud852\udd76\u9284\u73e6\u935f\ud841\udcfe\u9331\ud862\udece\ud862\ude16\u9386\ud862\udfe7\ud855\uddd5\u4935\ud862\ude82\u716b"],["97a1","\ud852\udd43\ud843\udcff\u56a4\ud841\ude1a\ud842\udfeb\ud843\udcb8\u5502\u79c4\ud845\udffa\u7dfe\ud845\udec2\ud852\ude50\ud846\udc52\u452e\u9401\u370a\ud862\udec0\ud852\uddad\u59b0\ud846\udcbf\ud846\udc83\ud85d\udc84\u5aa1\u36e2\ud84f\udd5b\u36b0\u925f\u5a79\ud862\ude81\ud846\udc62\u9374\u3ccd\ud842\udeb4\u4a96\u398a\u50f4\u3d69\u3d4c\ud844\udf9c\u7175\u42fb\ud860\ude18\u6e0f\ud864\udce4\u44eb\u6d57\ud85f\ude4f\u7067\u6caf\u3cd6\ud84f\udfed\ud84f\ude2d\u6e02\u6f0c\u3d6f\ud840\udff5\u7551\u36bc\u34c8\u4680\u3eda\u4871\u59c4\u926e\u493e\u8f41\ud863\udc1c\ud85a\udfc0\u5812\u57c8\u36d6\ud845\udc52\u70fe\ud850\udf62\ud852\ude71\ud84b\udfe3\ud844\udeb0\ud848\udfbd\u68b9\u6967\ud844\udf98\ud84d\udce5\ud85e\udff4\ud84d\udedf\ud862\ude83\ud84d\udfd6\ud84c\udffa\ud853\udc9f\u6a1a\ud84d\udead\ud85b\udcb7\u843e\u44df\u44ce"],["9840","\ud85b\udd26\ud85b\udd51\ud85b\udc82\ud85b\udfde\u6f17\ud85c\udd09\u833d\ud845\udf3a\u83ed\ud85b\udc80\ud85c\udc53\ud845\udfdb\u5989\u5a82\ud845\udfb3\u5a61\u5a71\ud846\udd05\ud850\uddfc\u372d\u59ef\ud845\udf3c\u36c7\u718e\u9390\u669a\ud850\udea5\u5a6e\u5a2b\ud850\ude93\u6a2b\ud84f\udef9\ud85d\udf36\ud851\udc5b\ud850\udeca\u711d\ud850\ude59\ud862\udde1\u4fb0\ud85b\udd28\u5cc2\ud851\udcce\ud85f\ude4d\ud850\udfbd\u6a0c\ud850\ude56\ud844\udf04\u70a6\u7133\ud850\udfe9\u3da5\u6cdf\ud87e\udc25\ud852\ude4f\u7e65\u59eb\u5d2f\u3df3\u5f5c\ud852\ude5d\ud845\udfdf\u7da4\u8426"],["98a1","\u5485\ud84e\udefa\ud84c\udf00\ud840\ude14\u577e\ud842\udcd5\ud841\ude19\u3fe5\ud847\udf9e\ud868\udeb6\u7003\ud864\udd5b\u5d70\u738f\u7cd3\ud862\ude59\ud865\udc20\u4fc8\u7fe7\u72cd\u7310\ud85e\udef4\u7338\u7339\ud855\udef6\u7341\u7348\u3ea9\ud85e\udf18\u906c\u71f5\ud852\udcf2\u73e1\u81f6\u3eca\u770c\u3ed1\u6ca2\u56fd\u7419\u741e\u741f\u3ee2\u3ef0\u3ef4\u3efa\u74d3\u3f0e\u3f53\u7542\u756d\u7572\u758d\u3f7c\u75c8\u75dc\u3fc0\u764d\u3fd7\u7674\u3fdc\u767a\ud853\udf5c\u7188\u5623\u8980\u5869\u401d\u7743\u4039\u6761\u4045\u35db\u7798\u406a\u406f\u5c5e\u77be\u77cb\u58f2\u7818\u70b9\u781c\u40a8\u7839\u7847\u7851\u7866\u8448\ud855\udd35\u7933\u6803\u7932\u4103"],["9940","\u4109\u7991\u7999\u8fbb\u7a06\u8fbc\u4167\u7a91\u41b2\u7abc\u8279\u41c4\u7acf\u7adb\u41cf\u4e21\u7b62\u7b6c\u7b7b\u7c12\u7c1b\u4260\u427a\u7c7b\u7c9c\u428c\u7cb8\u4294\u7ced\u8f93\u70c0\ud843\udccf\u7dcf\u7dd4\u7dd0\u7dfd\u7fae\u7fb4\u729f\u4397\u8020\u8025\u7b39\u802e\u8031\u8054\u3dcc\u57b4\u70a0\u80b7\u80e9\u43ed\u810c\u732a\u810e\u8112\u7560\u8114\u4401\u3b39\u8156\u8159\u815a"],["99a1","\u4413\u583a\u817c\u8184\u4425\u8193\u442d\u81a5\u57ef\u81c1\u81e4\u8254\u448f\u82a6\u8276\u82ca\u82d8\u82ff\u44b0\u8357\u9669\u698a\u8405\u70f5\u8464\u60e3\u8488\u4504\u84be\u84e1\u84f8\u8510\u8538\u8552\u453b\u856f\u8570\u85e0\u4577\u8672\u8692\u86b2\u86ef\u9645\u878b\u4606\u4617\u88ae\u88ff\u8924\u8947\u8991\ud85e\udd67\u8a29\u8a38\u8a94\u8ab4\u8c51\u8cd4\u8cf2\u8d1c\u4798\u585f\u8dc3\u47ed\u4eee\u8e3a\u55d8\u5754\u8e71\u55f5\u8eb0\u4837\u8ece\u8ee2\u8ee4\u8eed\u8ef2\u8fb7\u8fc1\u8fca\u8fcc\u9033\u99c4\u48ad\u98e0\u9213\u491e\u9228\u9258\u926b\u92b1\u92ae\u92bf"],["9a40","\u92e3\u92eb\u92f3\u92f4\u92fd\u9343\u9384\u93ad\u4945\u4951\u9ebf\u9417\u5301\u941d\u942d\u943e\u496a\u9454\u9479\u952d\u95a2\u49a7\u95f4\u9633\u49e5\u67a0\u4a24\u9740\u4a35\u97b2\u97c2\u5654\u4ae4\u60e8\u98b9\u4b19\u98f1\u5844\u990e\u9919\u51b4\u991c\u9937\u9942\u995d\u9962\u4b70\u99c5\u4b9d\u9a3c\u9b0f\u7a83\u9b69\u9b81\u9bdd\u9bf1\u9bf4\u4c6d\u9c20\u376f\ud846\udfc2\u9d49\u9c3a"],["9aa1","\u9efe\u5650\u9d93\u9dbd\u9dc0\u9dfc\u94f6\u8fb6\u9e7b\u9eac\u9eb1\u9ebd\u9ec6\u94dc\u9ee2\u9ef1\u9ef8\u7ac8\u9f44\ud840\udc94\ud840\udeb7\ud840\udfa0\u691a\u94c3\u59ac\ud841\udcd7\u5840\u94c1\u37b9\ud841\uddd5\ud841\ude15\ud841\ude76\ud845\udeba\u5757\u7173\ud842\udec2\ud842\udecd\ud842\udfbf\u546a\ud87e\udc3b\ud842\udfcb\u549e\ud842\udffb\ud843\udc3b\ud843\udc53\ud843\udc65\ud843\udc7c\u60e7\ud843\udc8d\u567a\ud843\udcb5\ud843\udcdd\ud843\udced\ud843\udd6f\ud843\uddb2\ud843\uddc8\u6955\u9c2f\u87a5\ud843\ude04\ud843\ude0e\ud843\uded7\ud843\udf90\ud843\udf2d\ud843\ude73\u5c20\ud843\udfbc\u5e0b\ud844\udc5c\ud844\udc4f\ud844\udc76\u671e\ud844\udc7b\ud844\udc88\ud844\udc96\u3647\ud844\udcbf\ud844\udcd3\ud844\udd2f\ud844\udd3b\u5364\u84ad\ud844\udee3\ud844\udf75\ud844\udf36\u8b81\ud845\udd77\ud845\ude19\ud845\udfc3\ud845\udfc7\u4e78\u70bb\ud846\udc2d\ud846\udd6a"],["9b40","\ud846\ude2d\ud846\ude45\ud847\udc2a\ud847\udc70\ud847\udcac\ud847\udec8\u62c3\ud847\uded5\ud847\udf15\u7198\u6855\ud848\udc45\u69e9\u36c8\ud848\ude7c\ud848\udfd7\ud848\udffa\ud849\udf2a\ud84a\udc71\ud84a\udd4f\u82fd\ud84a\udd67\ud84a\udd93\ud84a\uded5\u89a5\ud84a\udee8\u8fa0\ud84a\udf0e\u97b8\ud84a\udf3f\u9847\u9abd\ud84b\udc4c"],["9b62","\ud84b\udc88\ud84b\udcb7\ud856\udfe8\ud84b\udd08\ud84b\udd12\ud84b\uddb7\ud84b\udd95\ud84b\ude42\ud84b\udf74\ud84b\udfcc\ud84c\udc33\ud84c\udc66\ud84c\udf1f\ud84c\udfde\u5fb1\u6648\u66bf\ud85e\ude79\ud84d\udd67\ud84d\uddf3\u7201\ud852\uddba\u77d7\ud84d\ude1a\ud84d\udf16\u7e87\ud840\udf46\u58b5\u670e"],["9ba1","\u6918\ud84e\udea7\ud85d\ude57\ud857\udfe2\ud84f\ude11\ud84f\udeb9\ud85d\uddfe\ud848\udc9a\u48d0\u4ab8\ud850\udd19\ud862\ude9a\ud850\udeee\ud850\udf0d\ud850\udc3b\ud850\udf34\ud850\udf96\ud852\ude45\ud841\uddca\u51d2\ud841\ude11\u599f\ud847\udea8\u3bbe\ud84f\udcff\ud851\udc04\ud851\udcd6\u5788\ud851\ude74\u399b\ud851\udf2f\ud861\udde8\ud866\uddc9\u3762\ud848\uddc3\u8b5e\ud862\udf4e\u99d6\ud852\udc12\ud852\udcfb\ud852\ude15\u7209\ud852\udec0\ud843\udc78\u5965\ud853\udea5\ud853\udf86\ud841\udf79\u8eda\ud854\udc2c\u528f\u573f\u7171\ud854\ude99\ud855\udc19\ud84f\udf4a\ud852\udea7\u55bc\ud855\udc46\ud855\udc6e\ud85a\udf52\u91d4\u3473\ud855\udd3f\ud85d\ude32\ud855\udd5e\u4718\ud855\udd62\ud855\udd66\ud855\udfc7\ud852\udd3f\ud856\udc5d\u5066\u34fb\ud84c\udfcc\u60de\ud856\udd03\u477c\ud862\udd48\ud856\udeae\ud856\udf89\ud857\udc06\ud847\udd90\u57a1\u7151\u6fb6\ud858\udd02\ud85f\udc12\u9056\ud858\uddb2\ud853\udf9a\u8b62\ud859\udc02\ud859\udc4a"],["9c40","\u5d5b\ud85a\udff7\u8f36\ud859\udc84\ud846\udd1c\u8aea\ud852\uddf6\ud859\udc88\ud84f\udfef\ud859\udd12\u4bc0\ud859\uddbf\ud859\udeb5\ud849\udf1b\u9465\ud855\udfe1\u6195\u5a27\ud87e\udccd\u4fbb\u56b9\ud851\udd21\ud859\udefc\u4e6a\ud852\udd34\u9656\u6d8f\ud85b\udcbd\u3618\u8977\ud859\udf99\ud85a\udc6e\ud859\udc11\ud85a\udc5e\u71df\ud85a\udcc7\u7b42\ud864\udcc0\ud842\ude11\ud85a\udd26\u9104\ud85a\udd39\u7a45\u9df0\ud85a\uddfa\u9a26\ud85a\ude2d\u365f\ud859\udc69\ud840\udc21\u7983\ud85a\ude34\ud85a\udf5b\u5d2c\ud84d\udd19\u83cf\ud85a\udf9d\u46d0\ud85b\udca4\u753b\u8865\ud85b\uddae\u58b6"],["9ca1","\u371c\ud849\udd8d\ud85c\udc4b\ud85c\uddcd\u3c54\ud85c\ude80\ud85c\ude85\u9281\ud848\udd7a\ud85c\ude8b\u9330\ud85c\udee6\ud852\uddd0\u6c39\u949f\ud85d\udc50\ud843\udef8\u8827\u88f5\ud84a\udd26\ud861\udc73\ud845\udfb1\u6eb8\ud852\ude2a\ud846\udc20\u39a4\u36b9\u5c10\u79e3\u453f\u66b6\ud867\udcad\ud866\udca4\u8943\ud85d\udfcc\ud85e\udc58\u56d6\u40df\ud845\ude0a\u39a1\ud84d\udf2f\ud860\udce8\ud844\udfc5\u71ad\u8366\ud85e\udddd\ud864\udda8\u5a67\u4cb7\ud85c\udcaf\ud862\uddab\ud85e\uddfd\ud85e\ude0a\ud85e\udf0b\ud85f\udd66\ud850\udd7a\u7b43\u797e\ud860\udc09\u6fb5\ud868\udedf\u6a03\ud860\udf18\u53a2\ud85b\ude07\u93bf\u6836\u975d\ud860\udd6f\ud860\udc23\ud85a\uddb5\ud844\udfed\ud84c\ude2f\ud860\udc48\u5d85\ud863\udc30\ud860\udc83\u5715\u9823\ud862\udd49\u5dab\ud852\udd88\u65be\u69d5\u53d2\ud852\udea5\ud84f\udf81\u3c11\u6736\ud860\udc90\ud860\udcf4\ud860\udd2e\ud847\udfa1\ud860\udd4f"],["9d40","\ud860\udd89\ud860\uddaf\ud860\ude1a\ud860\udf06\ud860\udf2f\ud860\udf8a\u35ca\ud861\udc68\ud861\udeaa\u48fa\u63e6\ud862\udd56\u7808\u9255\ud862\uddb8\u43f2\ud862\udde7\u43df\ud862\udde8\ud862\udf46\ud862\udfd4\u59f8\ud863\udc09\u8f0b\ud863\udfc5\ud864\udcec\u7b51\ud864\udd10\ud864\udd3c\u3df7\ud864\udd5e\ud852\udeca\u8fd0\u728f\u568b\ud865\udce7\ud865\udde9\ud865\uddb0\ud865\uddb8\ud865\udf32\ud866\udcd1\ud866\udd49\ud866\udd6a\ud866\uddc3\ud866\ude28\ud866\udf0e\ud867\udd5a\ud867\udd9b\u7e9f\ud867\udef8\ud867\udf23\u4ca4\u9547\ud868\ude93\u71a2\ud868\udeff\u4d91\u9012\ud869\uddcb\u4d9c\ud843\udc9c\u8fbe\u55c1"],["9da1","\u8fba\ud849\udcb0\u8fb9\ud852\ude93\u4509\u7e7f\u6f56\u6ab1\u4eea\u34e4\ud862\udf2c\ud85e\udc9d\u373a\u8e80\ud845\udff5\ud860\udc24\ud862\udf6c\ud862\udf99\ud85e\ude3e\ud859\udeaf\u3deb\ud85d\ude55\ud84f\udcb7\ud855\ude35\ud856\udd56\u4e9a\ud857\ude81\ud858\ude58\u56bf\ud843\ude6d\u8e0e\u5b6d\ud84f\ude88\ud853\udc9e\u63de\u62d0\ud845\udff6\ud846\udc7b\u6530\u562d\ud857\udc4a\u541a\ud854\udf11\u3dc6\ud867\udd98\u4c7d\u5622\u561e\u7f49\ud857\uded8\u5975\ud84f\udd40\u8770\u4e1c\ud843\udfea\ud843\udd49\ud84d\udeba\u8117\u9d5e\u8d18\u763b\u9c45\u764e\u77b9\u9345\u5432\u8148\u82f7\u5625\u8132\u8418\u80bd\u55ea\u7962\u5643\u5416\ud843\ude9d\u35ce\u5605\u55f1\u66f1\ud860\udee2\u362d\u7534\u55f0\u55ba\u5497\u5572\ud843\udc41\ud843\udc96\u5ed0\ud854\udd48\ud843\ude76\ud84b\udc62"],["9e40","\ud843\udea2\u9eab\u7d5a\u55de\ud844\udc75\u629d\u976d\u5494\u8ccd\u71f6\u9176\u63fc\u63b9\u63fe\u5569\ud84a\udf43\u9c72\ud84b\udeb3\u519a\u34df\ud843\udda7\u51a7\u544d\u551e\u5513\u7666\u8e2d\ud85a\udc8a\u75b1\u80b6\u8804\u8786\u88c7\u81b6\u841c\ud844\udcc1\u44ec\u7304\ud851\udf06\u5b90\u830b\ud85a\udc93\u567b\ud849\udef4\ud85f\udd2f\ud850\udda3\ud85f\udd73\ud85b\uded0\ud85c\udeb6\u9170\ud844\uddd9\u9208\ud84f\udcfc\ud869\udea9\ud843\udeac\ud843\udef9\u7266\ud847\udca2\u474e\ud853\udfc2\ud85f\udff9\ud843\udfeb\u40fa"],["9ea1","\u9c5d\u651f\ud84b\udda0\u48f3\ud851\udfe0\ud867\udd7c\ud843\udfec\ud843\ude0a\u6062\ud85d\udda3\ud843\udfed"],["9ead","\ud858\udc48\ud844\udd87\u71a3\u7e8e\u9d50\u4e1a\u4e04\u3577\u5b0d\u6cb2\u5367\u36ac\u39dc\u537d\u36a5\ud851\ude18\u589a\ud852\udf6e\u822d\u544b\u57aa\ud856\ude95\ud842\udd79"],["9ec5","\u3a52\ud849\udc65\u7374\ud867\udeac\u4d09\u9bed\ud84f\udcfe\ud867\udf30\u4c5b\ud853\udfa9\ud865\udd9e\ud867\udfde\u845c\ud84f\uddb6\ud85c\udeb2\ud859\udfb3\ud84d\udf20\u632e\u7d25\ud84f\udef7\ud84f\ude2c\u3a2a\u9008\u52cc\u3e74\u367a\u45e9\ud841\udc8e\u7640\u5af0\ud843\udeb6\u787a\ud85f\udf2e\u58a7\u40bf\u567c\u9b8b\u5d74\u7654\ud869\udc34\u9e85\u4ce1\u75f9\u37fb\u6119\ud84c\udcda\ud850\udff2"],["9ef5","\u565d\ud844\udea9\u57a7\ud852\udd63\ud867\ude06\u5234\ud85c\udcae\u35ad\u6c4a\u9d7c"],["9f40","\u7c56\u9b39\u57de\ud845\udf6c\u5c53\u64d3\ud865\udcd0\ud858\udf35\ud85c\udd64\u86ad\ud843\udd28\ud85b\udd22\ud852\udee2\ud843\udd71"],["9f4f","\u51fe\ud847\udf0f\u5d8e\u9703\ud847\uddd1\u9e81\u904c\u7b1f\u9b02\u5cd1\u7ba3\u6268\u6335\u9aff\u7bcf\u9b2a\u7c7e\u9b2e\u7c42\u7c86\u9c15\u7bfc\u9b09\u9f17\u9c1b\ud852\udd3e\u9f5a\u5573\u5bc3\u4ffd\u9e98\u4ff2\u5260\u3e06\u52d1\u5767\u5056\u59b7\u5e12\u97c8\u9dab\u8f5c\u5469\u97b4\u9940\u97ba\u532c\u6130"],["9fa1","\u692c\u53da\u9c0a\u9d02\u4c3b\u9641\u6980\u50a6\u7546\ud845\udf6d\u99da\u5273"],["9fae","\u9159\u9681\u915c"],["9fb2","\u9151\ud863\ude97\u637f\ud85b\udd23\u6aca\u5611\u918e\u757a\u6285\ud840\udffc\u734f\u7c70\ud857\udc21\ud84f\udcfd"],["9fc1","\ud852\udd19\u76d6\u9b9d\u4e2a\ud843\udcd4\u83be\u8842"],["9fc9","\u5c4a\u69c0\u50ed\u577a\u521f\u5df5\u4ece\u6c31\ud840\uddf2\u4f39\u549c\u54da\u529a\u8d82\u35fe\u5f0c\u35f3"],["9fdb","\u6b52\u917c\u9fa5\u9b97\u982e\u98b4\u9aba\u9ea8\u9e84\u717a\u7b14"],["9fe7","\u6bfa\u8818\u7f78"],["9feb","\u5620\ud869\ude4a\u8e77\u9f53"],["9ff0","\u8dd4\u8e4f\u9e1c\u8e01\u6282\ud860\udf7d\u8e28\u8e75\u7ad3\ud852\ude77\u7a3e\u78d8\u6cea\u8a67\u7607"],["a040","\ud862\ude5a\u9f26\u6cce\u87d6\u75c3\ud868\udeb2\u7853\ud87e\udc40\u8d0c\u72e2\u7371\u8b2d\u7302\u74f1\u8ceb\ud852\udebb\u862f\u5fba\u88a0\u44b7"],["a055","\ud846\udc3b\ud85b\ude05"],["a058","\u8a7e\ud849\udd1b"],["a05b","\u60fd\u7667\u9ad7\u9d44\u936e\u9b8f\u87f5"],["a063","\u880f\u8cf7\u732c\u9721\u9bb0\u35d6\u72b2\u4c07\u7c51\u994a\ud858\udd59\u6159\u4c04\u9e96\u617d"],["a073","\u575f\u616f\u62a6\u6239\u62ce\u3a5c\u61e2\u53aa\ud84c\udff5\u6364\u6802\u35d2"],["a0a1","\u5d57\ud862\udfc2\u8fda\ud863\ude39"],["a0a6","\u50d9\ud847\udd46\u7906\u5332\u9638\ud843\udf3b\u4065"],["a0ae","\u77fe"],["a0b0","\u7cc2\ud857\udf1a\u7cda\u7a2d\u8066\u8063\u7d4d\u7505\u74f2\u8994\u821a\u670c\u8062\ud85d\udc86\u805b\u74f0\u8103\u7724\u8989\ud859\udfcc\u7553\ud85b\uded1\u87a9\u87ce\u81c8\u878c\u8a49\u8cad\u8b43\u772b\u74f8\u84da\u3635\u69b2\u8da6"],["a0d4","\u89a9\u7468\u6db9\u87c1\ud850\udc11\u74e7\u3ddb\u7176\u60a4\u619c\u3cd1\u7162\u6077"],["a0e2","\u7f71\ud862\udf2d\u7250\u60e9\u4b7e\u5220\u3c18\ud84f\udcc7\ud857\uded7\ud85d\ude56\ud855\udd31\ud846\udd44\ud844\udefe\ud866\udd03\ud85b\udddc\ud85c\udcad\u5cc1\ud858\uddad\ud862\ude0f\ud84d\ude77\ud840\udcee\ud85a\udc46\ud853\udf0e\u4562\u5b1f\ud858\udf4c\u9f50\u9ea6\ud858\ude6b"],["a3c0","\u2400",31,"\u2421"],["c6a1","\u2460",9,"\u2474",9,"\u2170",9,"\u4e36\u4e3f\u4e85\u4ea0\u5182\u5196\u51ab\u52f9\u5338\u5369\u53b6\u590a\u5b80\u5ddb\u2f33\u5e7f\u5ef4\u5f50\u5f61\u6534\u65e0\u7592\u7676\u8fb5\u96b6\xa8\u02c6\u30fd\u30fe\u309d\u309e\u3003\u4edd\u3005\u3006\u3007\u30fc\uff3b\uff3d\u273d\u3041",23],["c740","\u3059",58,"\u30a1\u30a2\u30a3\u30a4"],["c7a1","\u30a5",81,"\u0410",5,"\u0401\u0416",4],["c840","\u041b",26,"\u0451\u0436",25,"\u21e7\u21b8\u21b9\u31cf\ud840\udccc\u4e5a\ud840\udc8a\u5202\u4491"],["c8a1","\u9fb0\u5188\u9fb1\ud85d\ude07"],["c8cd","\uffe2\uffe4\uff07\uff02\u3231\u2116\u2121\u309b\u309c\u2e80\u2e84\u2e86\u2e87\u2e88\u2e8a\u2e8c\u2e8d\u2e95\u2e9c\u2e9d\u2ea5\u2ea7\u2eaa\u2eac\u2eae\u2eb6\u2ebc\u2ebe\u2ec6\u2eca\u2ecc\u2ecd\u2ecf\u2ed6\u2ed7\u2ede\u2ee3"],["c8f5","\u0283\u0250\u025b\u0254\u0275\u0153\xf8\u014b\u028a\u026a"],["f9fe","\uffed"],["fa40","\ud841\udd47\u92db\ud841\udddf\ud84f\udfc5\u854c\u42b5\u73ef\u51b5\u3649\ud852\udd42\ud862\udde4\u9344\ud846\udddb\u82ee\ud84f\udcc8\u783c\u6744\u62df\ud852\udd33\ud862\uddaa\ud840\udea0\ud85a\udfb3\ud844\udf05\u4fab\ud849\udced\u5008\ud85b\udd29\ud85e\ude84\ud84d\ude00\ud852\udeb1\ud849\udd13\u5029\ud840\udf7e\u5fa4\ud840\udf80\ud840\udf47\u6edb\ud841\udc1f\u507d\u5101\u347a\u510e\u986c\u3743\u8416\ud852\udda4\ud841\udc87\u5160\ud84c\udfb4\u516a\ud842\udfff\ud848\udcfc\ud840\udee5\ud849\udd30\ud841\udd8e\ud84c\ude33\ud846\udd83\u5b82\u877d\ud841\uddb3\ud84f\udc99\u51b2\u51b8"],["faa1","\u9d34\u51c9\u51cf\u51d1\u3cdc\u51d3\ud852\udea6\u51b3\u51e2\u5342\u51ed\u83cd\u693e\ud84d\udf2d\u5f7b\u520b\u5226\u523c\u52b5\u5257\u5294\u52b9\u52c5\u7c15\u8542\u52e0\u860d\ud85a\udf13\u5305\ud862\udede\u5549\u6ed9\ud84f\udf80\ud842\udd54\ud84f\udfec\u5333\u5344\ud842\udfe2\u6ccb\ud845\udf26\u681b\u73d5\u604a\u3eaa\u38cc\ud845\udee8\u71dd\u44a2\u536d\u5374\ud861\udeab\u537e\u537f\ud845\udd96\ud845\ude13\u77e6\u5393\ud862\ude9b\u53a0\u53ab\u53ae\u73a7\ud855\udf72\u3f59\u739c\u53c1\u53c5\u6c49\u4e49\u57fe\u53d9\u3aab\ud842\udf8f\u53e0\ud84f\udfeb\ud84b\udda3\u53f6\ud843\udc77\u5413\u7079\u552b\u6657\u6d5b\u546d\ud85a\udf53\ud843\udd74\u555d\u548f\u54a4\u47a6\ud845\udf0d\ud843\udedd\u3db4\ud843\udd4d"],["fb40","\ud862\uddbc\ud849\ude98\u5547\u4ced\u542f\u7417\u5586\u55a9\u5605\ud846\udcd7\ud850\udc3a\u4552\ud851\udc35\u66b3\ud844\udcb4\u5637\u66cd\ud84c\ude8a\u66a4\u66ad\u564d\u564f\u78f1\u56f1\u9787\u53fe\u5700\u56ef\u56ed\ud862\udf66\u3623\ud844\ude4f\u5746\ud850\udda5\u6c6e\u708b\u5742\u36b1\ud85b\udc7e\u57e6\ud845\udc16\u5803\ud845\udc54\ud850\udf63\u5826\ud852\udff5\u585c\u58aa\u3561\u58e0\u58dc\ud844\ude3c\u58fb\u5bff\u5743\ud868\udd50\ud850\ude78\u93d3\u35a1\u591f\u68a6\u36c3\u6e59"],["fba1","\ud845\ude3e\u5a24\u5553\ud845\ude92\u8505\u59c9\ud843\udd4e\ud85b\udc81\ud85b\udd2a\ud845\udfdc\u59d9\ud845\udffb\ud845\udfb2\ud85b\udda6\u6d71\ud846\udc28\ud845\uded5\u59f9\ud85b\ude45\u5aab\u5a63\u36e6\ud852\udda9\u5a77\u3708\u5a96\u7465\u5ad3\ud85b\udfa1\ud849\udd54\u3d85\ud846\udd11\u3732\ud845\udeb8\u5e83\u52d0\u5b76\u6588\u5b7c\ud85e\ude0e\u4004\u485d\ud840\ude04\u5bd5\u6160\ud846\ude34\ud856\uddcc\ud841\udda5\u5bf3\u5b9d\u4d10\u5c05\ud846\udf44\u5c13\u73ce\u5c14\ud847\udca5\ud85a\udf28\u5c49\u48dd\u5c85\u5ce9\u5cef\u5d8b\ud847\uddf9\ud847\ude37\u5d10\u5d18\u5d46\ud847\udea4\u5cba\u5dd7\u82fc\u382d\ud852\udd01\ud848\udc49\ud848\udd73\u8287\u3836\u3bc2\u5e2e\u6a8a\u5e75\u5e7a\ud851\udcbc\ud843\udcd3\u53a6\u4eb7\u5ed0\u53a8\ud845\udf71\u5e09\u5ef4\ud861\udc82"],["fc40","\u5ef9\u5efb\u38a0\u5efc\u683e\u941b\u5f0d\ud840\uddc1\ud87e\udc94\u3ade\u48ae\ud844\udf3a\u5f3a\ud85a\udc88\ud848\udfd0\u5f58\ud849\udc71\u5f63\u97bd\ud85b\ude6e\u5f72\u9340\ud862\ude36\u5fa7\u5db6\u3d5f\ud854\ude50\ud847\udf6a\ud85c\udcf8\ud849\ude68\u91d6\ud840\ude9e\ud862\ude29\u6031\u6685\ud846\udc77\u3963\u3dc7\u3639\u5790\ud849\udfb4\u7971\u3e40\u609e\u60a4\u60b3\ud852\udd82\ud852\udd8f\ud85e\ude53\u74a4\u50e1\u5aa0\u6164\u8424\u6142\ud87e\udca6\ud85b\uded2\u6181\u51f4\ud841\ude56\u6187\u5baa\ud84f\udfb7"],["fca1","\ud84a\udc5f\u61d3\ud862\udf9d\ud866\udd5d\u61d0\u3932\ud84a\udd80\ud84a\udcc1\u6023\u615c\u651e\u638b\ud840\udd18\u62c5\ud845\udf70\u62d5\ud84b\ude0d\u636c\ud852\udddf\u3a17\u6438\u63f8\ud844\udf8e\ud845\udffc\u6490\u6f8a\ud84b\ude36\u9814\ud850\udc8c\ud855\udf1d\u64e1\u64e5\u947b\u3a66\u643a\u3a57\u654d\u6f16\ud852\ude28\ud852\ude23\u6585\u656d\u655f\ud84c\udc7e\u65b5\ud852\udd40\u4b37\u65d1\u40d8\ud846\udc29\u65e0\u65e3\u5fdf\ud84d\udc00\u6618\ud84c\uddf7\ud84c\uddf8\u6644\ud84c\udda4\ud84c\udda5\u664b\ud843\ude75\u6667\ud854\udde6\u6673\u6674\ud847\ude3d\ud84c\ude31\ud861\uddf4\ud84c\uddc8\ud854\udf13\u77c5\ud84a\udcf7\u99a4\u6702\ud850\udf9c\ud852\ude21\u3b2b\u69fa\ud84d\udfc2\u675e\u6767\u6762\ud850\uddcd\ud864\udced\u67d7\u44e9\u6822\u6e50\u923c\u6801\ud84c\udfe6\ud85b\udda0\u685d"],["fd40","\ud84d\udc6f\u69e1\u6a0b\ud862\udedf\u6973\u68c3\ud84d\uddcd\u6901\u6900\u3d32\u3a01\ud84d\ude3c\u3b80\u67ac\u6961\ud862\ude4a\u42fc\u6936\u6998\u3ba1\ud840\udfc9\u8363\u5090\u69f9\ud84d\ude59\ud848\udd2a\u6a45\ud84d\udf03\u6a9d\u3bf3\u67b1\u6ac8\ud864\udd9c\u3c0d\u6b1d\ud842\udd23\u60de\u6b35\u6b74\ud849\udfcd\u6eb5\ud84e\udedb\ud840\udfb5\ud846\udd58\u3740\u5421\ud84e\udf5a\u6be1\ud84f\udefc\u6bdc\u6c37\ud849\udc8b\ud852\udcf1\ud85a\udf51\u6c5a\u8226\u6c79\ud84f\uddbc\u44c5\ud84f\uddbd\ud850\udda4\ud852\udd0c\ud852\udd00"],["fda1","\ud84f\udcc9\u36e5\u3ceb\ud843\udd32\u9b83\ud84c\uddf9\ud849\udc91\u7f8f\u6837\ud85b\udd25\ud85b\udda1\ud85b\uddeb\u6d96\u6d5c\u6e7c\u6f04\ud852\udd7f\ud850\udc85\ud85b\ude72\u8533\ud85b\udf74\u51c7\u6c9c\u6e1d\u842e\ud862\udf21\u6e2f\ud84f\ude2f\u7453\ud84f\udf82\u79cc\u6e4f\u5a91\ud84c\udc4b\u6ff8\u370d\u6f9d\ud84f\ude30\u6efa\ud845\udc97\ud850\udc3d\u4555\u93f0\u6f44\u6f5c\u3d4e\u6f74\ud864\udd70\u3d3b\u6f9f\ud850\udd44\u6fd3\ud850\udc91\ud850\udd55\ud850\udc39\ud84f\udff0\ud84f\udfb4\ud850\udd3f\u51df\ud850\udd56\ud850\udd57\ud850\udd40\ud858\udddd\u704b\u707e\u70a7\u7081\u70cc\u70d5\u70d6\u70df\u4104\u3de8\u71b4\u7196\ud850\ude77\u712b\u7145\u5a88\u714a\u716e\u5c9c\ud850\udf65\u714f\u9362\ud850\udec1\u712c\ud851\udc5a\ud852\ude27\ud852\ude22\u71ba\ud862\udfe8\u70bd\u720e"],["fe40","\u9442\u7215\u5911\u9443\u7224\u9341\ud855\ude05\u722e\u7240\ud852\udd74\u68bd\u7255\u7257\u3e55\ud84c\udc44\u680d\u6f3d\u7282\u732a\u732b\ud852\udc23\ud862\udc2b\u48ed\ud862\udc04\u7328\u732e\u73cf\u73aa\ud843\udc3a\ud85a\ude2e\u73c9\u7449\ud850\udde2\ud845\udee7\ud852\ude24\u6623\u36c5\ud852\uddb7\ud852\udd8d\ud852\uddfb\u73f7\u7415\u6903\ud852\ude26\u7439\ud841\uddc3\u3ed7\u745c\ud84a\udcad\u7460\ud863\udeb2\u7447\u73e4\u7476\u83b9\u746c\u3730\u7474\u93f1\u6a2c\u7482\u4953\ud852\ude8c"],["fea1","\ud850\udd5f\ud852\ude79\ud862\udf8f\u5b46\ud863\udc03\ud846\udc9e\u74c8\ud846\udd88\u750e\u74e9\u751e\ud863\uded9\ud846\ude4b\u5bd7\ud863\udeac\u9385\u754d\u754a\u7567\u756e\ud853\udf82\u3f04\ud853\udd13\u758e\u745d\u759e\u75b4\u7602\u762c\u7651\u764f\u766f\u7676\ud858\udff5\u7690\u81ef\u37f8\ud85a\udd11\ud85a\udd0e\u76a1\u76a5\u76b7\u76cc\ud85b\udf9f\u8462\ud854\udc9d\ud854\udd7d\ud847\ude1c\u771e\u7726\u7740\u64af\ud854\ude20\u7758\ud84c\udeac\u77af\ud862\udd64\ud862\udd68\ud845\udec1\u77f4\u7809\ud844\udf76\ud852\ude12\u68ca\u78af\u78c7\u78d3\u96a5\u792e\ud855\udde0\u78d7\u7934\u78b1\ud85d\ude0c\u8fb8\u8884\ud862\udf2b\ud858\udc83\ud849\ude1c\u7986\u8900\u6902\u7980\ud856\udc57\u799d\ud85e\udf39\u793c\u79a9\u6e2a\ud85c\udd26\u3ea8\u79c6\ud864\udd0d\u79d4"]]},clF7:function(e,t,n){"use strict";n.d(t,"a",function(){return a}),n("9NBF"),n("UVPe");var r=n("+3se"),i=n("K9Ia"),o=n("gI3B"),s=n("ny24"),a=(n("Obbf"),function(){function e(e,t,n,o){this.spinner=e,this.notification=t,this.parentalControlService=n,this.translateService=o,this.ngUnsubscribe=new i.a,this.globalEnabled=0,this.macAddressPattern=/^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$/,this.activeQuotas=[],this.errorIntervalQuotaCombination=Object(r.b)("You cannot combine the time period and time limit for a WiFi device!"),this.errorOverlappingQuota=Object(r.b)("You can't have overlapping quotas for the same station!"),this.days=[Object(r.b)("Monday"),Object(r.b)("Tuesday"),Object(r.b)("Wednesday"),Object(r.b)("Thursday"),Object(r.b)("Friday"),Object(r.b)("Saturday"),Object(r.b)("Sunday")],this.hours=[{key:Object(r.b)("12AM"),value:0},{key:Object(r.b)("01AM"),value:1},{key:Object(r.b)("02AM"),value:2},{key:Object(r.b)("03AM"),value:3},{key:Object(r.b)("04AM"),value:4},{key:Object(r.b)("05AM"),value:5},{key:Object(r.b)("06AM"),value:6},{key:Object(r.b)("07AM"),value:7},{key:Object(r.b)("08AM"),value:8},{key:Object(r.b)("09AM"),value:9},{key:Object(r.b)("10AM"),value:10},{key:Object(r.b)("11AM"),value:11},{key:Object(r.b)("12PM"),value:12},{key:Object(r.b)("01PM"),value:13},{key:Object(r.b)("02PM"),value:14},{key:Object(r.b)("03PM"),value:15},{key:Object(r.b)("04PM"),value:16},{key:Object(r.b)("05PM"),value:17},{key:Object(r.b)("06PM"),value:18},{key:Object(r.b)("07PM"),value:19},{key:Object(r.b)("08PM"),value:20},{key:Object(r.b)("09PM"),value:21},{key:Object(r.b)("10PM"),value:22},{key:Object(r.b)("11PM"),value:23},{key:Object(r.b)("00PM"),value:24}],this.mins=[{key:"00",value:0},{key:"05",value:5},{key:"10",value:10},{key:"15",value:15},{key:"20",value:20},{key:"25",value:25},{key:"30",value:30},{key:"35",value:35},{key:"40",value:40},{key:"45",value:45},{key:"50",value:50},{key:"55",value:55}],this.ranges=[{key:Object(r.b)("daily"),value:"Monday Tuesday Wednesday Thursday Friday Saturday Sunday"},{key:Object(r.b)("Mon-Fri"),value:"Monday Tuesday Wednesday Thursday Friday"},{key:Object(r.b)("Sat+Sun"),value:"Saturday Sunday"},{key:Object(r.b)("Select day"),value:"singleday"}],this.quotas=[]}return e.prototype.ngOnInit=function(){var e=this;this.clearEditFlags(),this.timeValidationError=!1,this.timeValidationErrorMsg=!1,this.schedules=[],this.globalQuote=[],this.globalInterval=[],this.macAddressesList=[],this.newConfigType="interval",this.getSchedules(),this.getQuotas(),Object(o.a)(1,5e3).pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(){e.getQuotaStatus()})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.clearEditFlags=function(){this.addNew=!1,this.editSchedule=!1,this.currentRow=!1},e.prototype.getQuotaStatus=function(){var e=this;this.parentalControlService.getQuotaStatus().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){e.quotaStatus=t,e.activeQuotas=Array.from(t.keys())})},e.prototype.makeUnique=function(e){return Array.from(new Set(e))},e.prototype.getQuotas=function(){var e=this;this.parentalControlService.getQuotas().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){var n;n=t.slice(),e.quotas=n[0],e.globalQuote=n[1],e.spinner.hide(),e.markAsPristine()})},e.prototype.getSchedules=function(){var e=this;this.parentalControlService.getSchedules().pipe(Object(s.a)(this.ngUnsubscribe)).subscribe(function(t){var n;n=t.slice(),e.schedules=n[0],e.globalInterval=n[1],e.schedules.sort(function(e,t){return e.stations.localeCompare(t.stations)}),e.globalEnabled=Number(e.globalInterval[0].enabled)||0,e.globalName=e.globalInterval[0][".name"],e.spinner.hide(),e.markAsPristine(),e.macAddressesList=[],e.schedules.forEach(function(t){-1===e.macAddressesList.indexOf(t.stations)&&e.macAddressesList.push(t.stations)})})},e.prototype.saveGlobalSettings=function(e){var t=this;this.spinner.show(),this.parentalControlService.saveGlobalSettings(this.globalName,this.globalEnabled).subscribe(function(){for(var n in t.schedules)t.schedules.hasOwnProperty(n)&&(t.schedules[n].enabled=t.globalEnabled.toString());t.getSchedules(),e||t.notification.success(Object(r.b)("Schedule configuration successfully saved."))})},e.prototype.delete=function(e){var t=this;this.spinner.show(),this.parentalControlService.delete(e,!e.starttime,this.quotas.length>1).subscribe(function(){t.notification.success(Object(r.b)("Successfully deleted.")),t.clearEditFlags(),t.saveGlobalSettings(!0),e.starttime?t.getSchedules():t.getQuotas()})},e.prototype.edit=function(e){var t,n=this;if("quota"==e.configType&&(t="singleday"==e.daysofweek?e.weekday:e.daysofweek),"interval"==e.configType)this.parentalControlService.saveSchedule(e,t,this.globalEnabled).subscribe(function(){n.clearEditFlags(),n.saveGlobalSettings()});else{if(this.hasOverlappingQuotas(e.station,this.quotas))return this.timeValidationError=!0,void(this.timeValidationErrorMsg=this.errorOverlappingQuota);this.parentalControlService.saveQuota(e,t,!1).subscribe(function(){n.clearEditFlags(),n.getQuotas(),n.saveGlobalSettings()})}},e.prototype.getQuotasByStation=function(e,t){return e.filter(function(e){return e.station===t})},e.prototype.getDaysOfQuota=function(e){return"singleday"===e.daysofweek?[e.weekday]:e.daysofweek.split(" ")},e.prototype.hasOverlappingQuotas=function(e,t){for(var n=this.getQuotasByStation(t,e).map(this.getDaysOfQuota),r=0;r<n.length;r++)for(var i=function(e){if(n[r].filter(function(t){return n[e].includes(t)}).length>0)return{value:!0}},o=r+1;o<n.length;o++){var s=i(o);if("object"==typeof s)return s.value}return!1},e.prototype.hasIntervalSetting=function(e){return this.schedules.filter(function(t){return t.stations.includes(e)}).length>0},e.prototype.hasQuotaSetting=function(e){return this.getQuotasByStation(this.quotas,e).length>0},e.prototype.saveNew=function(){var e,t=this;if("interval"!=this.newConfigType){if(this.hasOverlappingQuotas(this.newSchedule.station,this.quotas.concat(this.newSchedule)))return this.timeValidationError=!0,void(this.timeValidationErrorMsg=this.errorOverlappingQuota);if(this.hasIntervalSetting(this.newSchedule.station))return this.timeValidationError=!0,void(this.timeValidationErrorMsg=this.errorIntervalQuotaCombination)}else if(this.hasQuotaSetting(this.newSchedule.stations))return this.timeValidationError=!0,void(this.timeValidationErrorMsg=this.errorIntervalQuotaCombination);this.saveGlobalSettings(),this.validateStartEndTime(this.newSchedule),this.spinner.show(),"interval"==this.newConfigType&&this.timeValidationError?this.spinner.hide():(e="singleday"==this.newSchedule.daysofweek?this.newSchedule.weekday:this.newSchedule.daysofweek,"interval"==this.newConfigType?this.parentalControlService.saveSchedule(this.newSchedule,e,this.globalEnabled,!0).subscribe(function(){t.clearEditFlags(),t.saveGlobalSettings()}):this.parentalControlService.saveQuota(this.newSchedule,e,!0).subscribe(function(){t.clearEditFlags(),t.getQuotas()}))},e.prototype.addNewSchedule=function(){this.nullNewSchedule(),this.delos.form.markAsDirty(),this.addNew=!0},e.prototype.editRow=function(e){this.currentRow=e,this.editSchedule=!0},e.prototype.synchMins=function(e,t){"starthour"==t&&(e.startmins||(e.startmins="0")),"endhour"==t&&(e.endmins&&"24"!=e.endhour||(e.endmins="0"))},e.prototype.synchWeekday=function(e){var t=e;"singleday"==e.daysofweek?(e.showWeekdays=!0,t.weekday="Monday"):(e.showWeekdays=!1,t.weekday="")},e.prototype.validateStartEndTime=function(e){if("interval"!=this.newConfigType)return this.timeValidationError=!1,void(this.timeValidationErrorMsg=!1);var t=this.parentalControlService.validateStartEndTime(e.starthour,e.startmins,e.endhour,e.endmins),n=t[0],i=t[1];if(!(n<i))return n==i?(this.timeValidationError=!0,void(this.timeValidationErrorMsg=Object(r.b)("Start time and end time cannot be equal! Please correct your time quotas!"))):(this.timeValidationError=!0,void(this.timeValidationErrorMsg=Object(r.b)("Stop time must be after start time! Please correct your time quotas!")));this.timeValidationError=!1,this.timeValidationErrorMsg=!1},e.prototype.formatMacAddress=function(e,t,n){var r=t;r=(r.toUpperCase().replace(/[^\d|A-F]/g,"").match(/.{1,2}/g)||[]).join(":").substring(0,17),n?e.station=r:e.stations=r},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.cancel=function(){this.clearEditFlags(),this.newConfigType="interval",this.timeValidationError=!1,this.timeValidationErrorMsg=!1,this.getSchedules(),this.getQuotas(),this.markAsPristine()},e.prototype.resetOpenRows=function(){1!=this.globalEnabled&&this.clearEditFlags()},e.prototype.nullNewSchedule=function(){this.newConfigType="interval",this.newSchedule={daysofweek:"",weekday:"",starthour:"",startmins:"",endhour:"",endmins:"",time:"",quota:""}},e.prototype.changeType=function(e){"quota"==e?this.newSchedule.station=this.newSchedule.stations:this.newSchedule.stations=this.newSchedule.station},e}())},crnd:function(e,t,n){var r={"app/components/lan/lan.module.ngfactory":["npmK",3,0,9],"app/components/overview/overview.module.ngfactory":["SnfS",2,3,0,12],"app/components/powerline/powerline.module.ngfactory":["0VpC",0,10],"app/components/support/support.module.ngfactory":["1QHZ",0,11],"app/components/system/system.module.ngfactory":["Hiu+",0,8],"app/components/wifi/wifi.module.ngfactory":["QEHt",2,0,7]};function i(e){var t=r[e];return t?Promise.all(t.slice(1).map(n.e)).then(function(){return n(t[0])}):Promise.resolve().then(function(){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t})}i.keys=function(){return Object.keys(r)},i.id="crnd",e.exports=i},dEwP:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("nkY7"),i=n("F/XL"),o=n("0/uQ"),s=n("Txjg");function a(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return 1===e.length||2===e.length&&Object(r.a)(e[1])?Object(o.a)(e[0]):Object(s.a)()(i.a.apply(void 0,e))}},dcxs:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("67Y/"),i=(n("jGGy"),n("+3se")),o=(n("+NEN"),function(){function e(e,t){this.ubusService=e,this.authService=t}return e.prototype.getSystemInformation=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"system",section:"@system[0]"}]]}).pipe(Object(r.a)(function(e){return e.result[0][1].values}))},e.prototype.save=function(e){return this.ubusService.call({data:e})},e.prototype.getButtons=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"system",type:"button"}]}).pipe(Object(r.a)(function(e){return e.result[1].values}))},e.prototype.ledsGet=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"system",type:"led"}]}).pipe(Object(r.a)(function(e){return e.result[1].values}))},e.prototype.prepareLedScope=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(e[n]);for(var r=0;r<t.length;r++)t[r].disabled=parseInt(e[t[r][".name"]].disabled,10)||0,t[r].type=-1!=t[r].sysfs.indexOf("error")?Object(i.b)("Type error"):Object(i.b)("Type status"),t[r].label=this.getSysfsName(t[r].name);return t},e.prototype.getSysfsName=function(e){switch(e){case"WLAN":return Object(i.b)("WiFi LED");case"dLAN":return Object(i.b)("Powerline LED");case"WLAN2G":return Object(i.b)("2.4 GHz WiFi LED");case"WLAN5G":return Object(i.b)("5 GHz WiFi LED");default:return Object(i.b)("unknown LED")+" '"+e+"'"}},e.prototype.getPlc=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"plc",section:"plc",option:"led_scheme"}]})},e.prototype.getGhn=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"ghn",section:"ghn",option:"led_scheme"}]})},e.prototype.changePassword=function(e,t,n){var r=n||this.authService.getSid();return this.ubusService.call({data:[r,"system.accounts","password_set",{user:"root",password:e,oldpassword:t}]})},e.prototype.saveTimeServer=function(e){return this.ubusService.call({data:[[this.authService.getSid(),"uci","set",{config:"system",section:"ntp",values:e}],[this.authService.getSid(),"uci","commit",{config:"system",section:"ntp"}]]})},e.prototype.getTimeServers=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"system",section:"ntp"}]]}).pipe(Object(r.a)(function(e){return e.result[0][1].values}))},e.prototype.getTimeZone=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"system",section:"@system[0]"}]]}).pipe(Object(r.a)(function(e){return e.result[0][1].values}))},e.prototype.saveTimezone=function(e){return this.ubusService.call({data:[[this.authService.getSid(),"uci","set",{config:"system",section:"@system[0]",values:e}],[this.authService.getSid(),"uci","commit",{config:"system",section:"@system[0]"}]]})},e.prototype.getPowerSavingSettingsGhn=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"ghn",section:"ghn"}]]}).pipe(Object(r.a)(function(e){return e.result[0][1].values}))},e.prototype.getPowerSavingSettingsPlc=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"plc",section:"plc"}]]}).pipe(Object(r.a)(function(e){return e.result[0][1]&&e.result[0][1].values}))},e.prototype.savePowerSavingSettingsGhn=function(e,t){return this.ubusService.call({data:[[this.authService.getSid(),"uci","set",{config:"ghn",section:"ghn",values:{standby:e.enabled.toString(),powersave:t.enabled.toString()}}],[this.authService.getSid(),"uci","commit",{config:"ghn"}]]})},e.prototype.savePowerSavingSettingsPlc=function(e){return this.ubusService.call({data:[[this.authService.getSid(),"uci","set",{config:"plc",section:"plc",values:{standby:e.enabled.toString()}}],[this.authService.getSid(),"uci","commit",{config:"plc"}]]})},e}())},dzgT:function(e,t,n){"use strict";n.d(t,"a",function(){return l});var r=n("mrSG"),i=n("nkY7"),o=n("isby"),s=n("MGBS"),a=n("zotm"),u=n("IUTb"),c={};function l(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=null,r=null;return Object(i.a)(e[e.length-1])&&(r=e.pop()),"function"==typeof e[e.length-1]&&(n=e.pop()),1===e.length&&Object(o.a)(e[0])&&(e=e[0]),Object(u.a)(e,r).lift(new h(n))}var h=function(){function e(e){this.resultSelector=e}return e.prototype.call=function(e,t){return t.subscribe(new f(e,this.resultSelector))},e}(),f=function(e){function t(t,n){var r=e.call(this,t)||this;return r.resultSelector=n,r.active=0,r.values=[],r.observables=[],r}return r.c(t,e),t.prototype._next=function(e){this.values.push(c),this.observables.push(e)},t.prototype._complete=function(){var e=this.observables,t=e.length;if(0===t)this.destination.complete();else{this.active=t,this.toRespond=t;for(var n=0;n<t;n++){var r=e[n];this.add(Object(a.a)(this,r,r,n))}}},t.prototype.notifyComplete=function(e){0==(this.active-=1)&&this.destination.complete()},t.prototype.notifyNext=function(e,t,n,r,i){var o=this.values,s=this.toRespond?o[n]===c?--this.toRespond:this.toRespond:0;o[n]=t,0===s&&(this.resultSelector?this._tryResultSelector(o):this.destination.next(o.slice()))},t.prototype._tryResultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(n){return void this.destination.error(n)}this.destination.next(t)},t}(s.a)},"eA/Y":function(e,t,n){"use strict";e.exports=o;var r=n("J78i"),i=n("Onz0");function o(e){if(!(this instanceof o))return new o(e);r.call(this,e)}i.inherits=n("P7XM"),i.inherits(o,r),o.prototype._transform=function(e,t,n){n(null,e)}},eihs:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r={e:{}}},ew9u:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("zIf0"),i=n("yZXx"),o=n("IJ1v"),s=function(){function e(e,t){this._isShown=!1,this.element=e,this.renderer=t}return Object.defineProperty(e.prototype,"isAnimated",{get:function(){return this._isAnimated},set:function(e){this._isAnimated=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isShown",{get:function(){return this._isShown},set:function(e){this._isShown=e,e?this.renderer.addClass(this.element.nativeElement,""+r.a.IN):this.renderer.removeClass(this.element.nativeElement,""+r.a.IN),Object(i.a)()||(e?this.renderer.addClass(this.element.nativeElement,""+r.a.SHOW):this.renderer.removeClass(this.element.nativeElement,""+r.a.SHOW))},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.isAnimated&&(this.renderer.addClass(this.element.nativeElement,""+r.a.FADE),o.a.reflow(this.element.nativeElement)),this.isShown=!0},e}()},fPfv:function(e){e.exports={uChars:[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],gbChars:[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189e3]}},fS8q:function(e,t,n){"use strict";n.d(t,"a",function(){return u});var r=n("t/Na"),i=n("K9Ia"),o=n("ny24"),s=n("+3se"),a=n("Vx+w"),u=(n("jGGy"),n("yeMH"),n("Obbf"),n("UVPe"),n("+NEN"),n("GMPP"),n("0KIB"),n("Gci6"),function(){function e(e,t,n,r,o,u,c,l,h,f){this.cdr=e,this.ubusService=t,this.firmwareService=n,this.spinner=r,this.router=o,this.translate=u,this.authService=c,this.notification=l,this.updateSuggestionService=h,this.customizationService=f,this.hereText=Object(s.b)("Here"),this.ngUnsubscribe=new i.a,this.firmwareVersion=a.a.firmwareVersion,this.firmwareBuildDate=a.a.firmwareBuildDate,this.firmwareLink=a.a.info.firmwareUpdate,this.pingPending=!1,this.step="select",this.firmwareFile=Object(s.b)("No file selected."),this.newVersionOfFirmware=!1,this.updatingFirmware=!1,this.showFileUploadInput=document.cookie.includes("fwupdate")}return e.prototype.ngOnInit=function(){var e=this;this.showButtons=!1,this.getFWUpdateStatus(),this.updateSuggestionService.getDeployment().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.newVersionOfFirmware=void 0!==t})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.waitPingComponent&&this.waitPingComponent.ngUnsubscribe.next(!1)},e.prototype.getFWUpdateStatus=function(){var e=this;this.firmwareService.getFWUpdateStatus().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.autoFWUdisabled=t.service.disabled,e.autoUpdatesEnabled=t.service.automatic_update,e.fakeAutoFWUdisabled=e.autoFWUdisabled,e.fakeAutoUpdatesEnabled=e.autoUpdatesEnabled,e.spinner.hide()})},e.prototype.cancel=function(){this.cancelled=!0,this.step="failure",this.notification.error(Object(s.b)("Cancelled!"))},e.prototype.onFileSelected=function(e){this.files=e.target.files,this.firmwareFile=e.target.value,this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.uploadFile=function(){var e=this;if(this.cancelled=!1,null!=this.files){if(!this.files[0])return this.files=null,void(this.file=null);this.file=this.files[0];var t=a.a.system.firmware.maxImageSize;if(this.file.size>t)return this.translate.get("Firmware image too large (maximum {maxSize} bytes)!",{maxSize:t}).subscribe(function(t){return e.notification.error(t)}),void this.cancel();this.step="session-check",this.firmwareService.checkSession().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(){if(!e.cancelled){e.step="upload";var t=new FormData;t.append("sessionid",e.authService.getSid()),t.append("filename","/tmp/firmware.bin"),t.append("filedata",e.file,"/tmp/firmware.bin"),e.firmwareService.uploadFile(t).pipe(Object(o.a)(e.ngUnsubscribe)).subscribe(function(t){if(t.type===r.f.UploadProgress){var n=Math.round(100*t.loaded/t.total);e.progress=n}else t instanceof r.i&&e.onImageUploaded()},function(t){e.notification.error("Error occured while uploading file. Please try again!")})}})}},e.prototype.onImageUploaded=function(){var e=this;this.cancelled||(this.step="wait",this.firmwareService.testImage().subscribe(function(t){e.onImageTested(t)},function(){e.notification.error("Error occured! Please check if the firmware is compatible with your device!"),e.step="failure"}))},e.prototype.onImageTested=function(e){if(0!=e)return this.notification.error(Object(s.b)("The selected firmware file is not valid, please select a firmware file dedicated for this device.")),void(this.step="failure");this.showUpdateProgress()},e.prototype.updateFirmwareToLatest=function(){var e=this;this.updatingFirmware=!0,this.updateSuggestionService.acceptDeployment().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.updatingFirmware=!1,e.newVersionOfFirmware=!1,e.showUpdateProgress()})},e.prototype.showUpdateProgress=function(){var e=this;this.step="wait",this.cancelSave(),this.updatingFirmware=!0,this.cdr.detectChanges(),this.waitPingComponent.waitPingDescription=Object(s.b)("Programming firmware image..."),this.authService.setDisableGetTimeout(!0),this.ubusService.setUpdateState(!0),this.firmwareService.upgrade().subscribe(function(){},function(){}),this.waitPingComponent.wait("system.upgrade.waitPing",a.a.system.firmware.waitPing,function(){e.step="success",e.delos.form.markAsPristine(),e.notification.success(Object(s.b)("Firmware updated successfully.")),setTimeout(function(){e.markAsPristine(),e.ubusService.setUpdateState(!1),e.router.navigateByUrl("/login")},5e3)})},e.prototype.save=function(){var e=this;this.spinner.show(),this.firmwareService.saveFWUpdateStatus({disabled:this.autoFWUdisabled,automatic_update:this.autoUpdatesEnabled}).subscribe(function(){e.cleanupForm(),e.spinner.hide(),e.getFWUpdateStatus()})},e.prototype.cancelSave=function(){this.autoFWUdisabled=this.fakeAutoFWUdisabled,this.autoUpdatesEnabled=this.fakeAutoUpdatesEnabled,this.cleanupForm()},e.prototype.cleanupForm=function(){this.showButtons=!1,this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.markAsDirty=function(){var e=this;setTimeout(function(){e.showButtons=!0,e.delos.form.markAsDirty(),e.delos.form.updateValueAndValidity()},0)},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}())},fXKp:function(e,t,n){"use strict";var r=n("hwdV").Buffer,i=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===i||!i(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=u,this.end=c,t=4;break;case"utf8":this.fillLast=a,t=4;break;case"base64":this.text=l,this.end=h,t=3;break;default:return this.write=f,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function s(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"\ufffd";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"\ufffd";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"\ufffd"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function u(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("utf16le",0,this.lastTotal-this.lastNeed):t}function l(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function f(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):""}t.StringDecoder=o,o.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n<e.length?t?t+this.text(e,n):this.text(e,n):t||""},o.prototype.end=function(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+"\ufffd":t},o.prototype.text=function(e,t){var n=function(e,t,n){var r=t.length-1;if(r<n)return 0;var i=s(t[r]);return i>=0?(i>0&&(e.lastNeed=i-1),i):--r<n||-2===i?0:(i=s(t[r]))>=0?(i>0&&(e.lastNeed=i-2),i):--r<n||-2===i?0:(i=s(t[r]))>=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},o.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},gI3B:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("6blF"),i=n("T1DM"),o=n("/21U"),s=n("nkY7");function a(e,t,n){void 0===e&&(e=0);var a=-1;return Object(o.a)(t)?a=Number(t)<1?1:Number(t):Object(s.a)(t)&&(n=t),Object(s.a)(n)||(n=i.a),new r.a(function(t){var r=Object(o.a)(e)?e:+e-n.now();return n.schedule(u,r,{index:0,period:a,subscriber:t})})}function u(e){var t=e.index,n=e.period,r=e.subscriber;if(r.next(t),!r.closed){if(-1===n)return r.complete();e.index=t+1,this.schedule(e,n)}}},gIcY:function(e,t,n){"use strict";var r=n("mrSG"),i=n("CcnG"),o=n("6blF"),s=n("isby"),a=n("G5J1"),u=n("zotm"),c=n("MGBS"),l=n("67Y/"),h=function(e){function t(t,n){var r=e.call(this,t)||this;r.sources=n,r.completed=0,r.haveValues=0;var i=n.length;r.values=new Array(i);for(var o=0;o<i;o++){var s=n[o],a=Object(u.a)(r,s,null,o);a&&r.add(a)}return r}return r.c(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.values[n]=t,i._hasValue||(i._hasValue=!0,this.haveValues++)},t.prototype.notifyComplete=function(e){var t=this.destination,n=this.haveValues,r=this.values,i=r.length;e._hasValue?(this.completed++,this.completed===i&&(n===i&&t.next(r),t.complete())):t.complete()},t}(c.a),f=n("0/uQ"),d=n("ZYjt");n.d(t,"t",function(){return ye}),n.d(t,"w",function(){return ve}),n.d(t,"u",function(){return P}),n.d(t,"x",function(){return I}),n.d(t,"v",function(){return N}),n.d(t,"y",function(){return z}),n.d(t,"b",function(){return C}),n.d(t,"c",function(){return g}),n.d(t,"i",function(){return O}),n.d(t,"a",function(){return j}),n.d(t,"d",function(){return k}),n.d(t,"j",function(){return A}),n.d(t,"k",function(){return J}),n.d(t,"l",function(){return X}),n.d(t,"m",function(){return ue}),n.d(t,"n",function(){return fe}),n.d(t,"o",function(){return U}),n.d(t,"r",function(){return L}),n.d(t,"f",function(){return ge}),n.d(t,"g",function(){return pe}),n.d(t,"p",function(){return be}),n.d(t,"q",function(){return de}),n.d(t,"h",function(){return v}),n.d(t,"s",function(){return m}),n.d(t,"e",function(){return me});var p=function(){function e(){}return Object.defineProperty(e.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"status",{get:function(){return this.control?this.control.status:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),e.prototype.reset=function(e){void 0===e&&(e=void 0),this.control&&this.control.reset(e)},e.prototype.hasError=function(e,t){return!!this.control&&this.control.hasError(e,t)},e.prototype.getError=function(e,t){return this.control?this.control.getError(e,t):null},e}(),g=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),Object.defineProperty(t.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),t}(p);function b(e){return null==e||0===e.length}var v=new i.p("NgValidators"),y=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,m=function(){function e(){}return e.min=function(e){return function(t){if(b(t.value)||b(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n<e?{min:{min:e,actual:t.value}}:null}},e.max=function(e){return function(t){if(b(t.value)||b(e))return null;var n=parseFloat(t.value);return!isNaN(n)&&n>e?{max:{max:e,actual:t.value}}:null}},e.required=function(e){return b(e.value)?{required:!0}:null},e.requiredTrue=function(e){return!0===e.value?null:{required:!0}},e.email=function(e){return b(e.value)?null:y.test(e.value)?null:{email:!0}},e.minLength=function(e){return function(t){if(b(t.value))return null;var n=t.value?t.value.length:0;return n<e?{minlength:{requiredLength:e,actualLength:n}}:null}},e.maxLength=function(e){return function(t){var n=t.value?t.value.length:0;return n>e?{maxlength:{requiredLength:e,actualLength:n}}:null}},e.pattern=function(t){return t?("string"==typeof t?(r="","^"!==t.charAt(0)&&(r+="^"),r+=t,"$"!==t.charAt(t.length-1)&&(r+="$"),n=new RegExp(r)):(r=t.toString(),n=t),function(e){if(b(e.value))return null;var t=e.value;return n.test(t)?null:{pattern:{requiredPattern:r,actualValue:t}}}):e.nullValidator;var n,r},e.nullValidator=function(e){return null},e.compose=function(e){if(!e)return null;var t=e.filter(w);return 0==t.length?null:function(e){return S(function(e,n){return t.map(function(t){return t(e)})}(e))}},e.composeAsync=function(e){if(!e)return null;var t=e.filter(w);return 0==t.length?null:function(e){return function e(){for(var t,n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return"function"==typeof n[n.length-1]&&(t=n.pop()),1===n.length&&Object(s.a)(n[0])&&(n=n[0]),0===n.length?a.a:t?e(n).pipe(Object(l.a)(function(e){return t.apply(void 0,e)})):new o.a(function(e){return new h(e,n)})}(function(e,n){return t.map(function(t){return t(e)})}(e).map(_)).pipe(Object(l.a)(S))}},e}();function w(e){return null!=e}function _(e){var t=Object(i.vb)(e)?Object(f.a)(e):e;if(!Object(i.ub)(t))throw new Error("Expected validator to return Promise or Observable.");return t}function S(e){var t=e.reduce(function(e,t){return null!=t?Object(r.a)({},e,t):e},{});return 0===Object.keys(t).length?null:t}var O=new i.p("NgValueAccessor"),C=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"checked",e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),j=new i.p("CompositionEventMode"),k=function(){function e(e,t,n){var r;this._renderer=e,this._elementRef=t,this._compositionMode=n,this.onChange=function(e){},this.onTouched=function(){},this._composing=!1,null==this._compositionMode&&(this._compositionMode=(r=Object(d.r)()?Object(d.r)().getUserAgent():"",!/android (\d+)/.test(r.toLowerCase())))}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=e},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._handleInput=function(e){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(e)},e.prototype._compositionStart=function(){this._composing=!0},e.prototype._compositionEnd=function(e){this._composing=!1,this._compositionMode&&this.onChange(e)},e}();function E(e){return e.validate?function(t){return e.validate(t)}:e}function x(e){return e.validate?function(t){return e.validate(t)}:e}var P=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",null==e?"":e)},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}();function T(){throw new Error("unimplemented")}var A=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._parent=null,t.name=null,t.valueAccessor=null,t._rawValidators=[],t._rawAsyncValidators=[],t}return Object(r.c)(t,e),Object.defineProperty(t.prototype,"validator",{get:function(){return T()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return T()},enumerable:!0,configurable:!0}),t}(p),I=function(){function e(){this._accessors=[]}return e.prototype.add=function(e,t){this._accessors.push([e,t])},e.prototype.remove=function(e){for(var t=this._accessors.length-1;t>=0;--t)if(this._accessors[t][1]===e)return void this._accessors.splice(t,1)},e.prototype.select=function(e){var t=this;this._accessors.forEach(function(n){t._isSameGroup(n,e)&&n[1]!==e&&n[1].fireUncheck(e.value)})},e.prototype._isSameGroup=function(e,t){return!!e[0].control&&e[0]._parent===t._control._parent&&e[1].name===t.name},e}(),M=function(){function e(e,t,n,r){this._renderer=e,this._elementRef=t,this._registry=n,this._injector=r,this.onChange=function(){},this.onTouched=function(){}}return e.prototype.ngOnInit=function(){this._control=this._injector.get(A),this._checkName(),this._registry.add(this._control,this)},e.prototype.ngOnDestroy=function(){this._registry.remove(this)},e.prototype.writeValue=function(e){this._state=e===this.value,this._renderer.setProperty(this._elementRef.nativeElement,"checked",this._state)},e.prototype.registerOnChange=function(e){var t=this;this._fn=e,this.onChange=function(){e(t.value),t._registry.select(t)}},e.prototype.fireUncheck=function(e){this.writeValue(e)},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._checkName=function(){this.name&&this.formControlName&&this.name!==this.formControlName&&this._throwNameError(),!this.name&&this.formControlName&&(this.name=this.formControlName)},e.prototype._throwNameError=function(){throw new Error('\n      If you define both a name and a formControlName attribute on your radio button, their values\n      must match. Ex: <input type="radio" formControlName="food" name="food">\n    ')},e}(),N=function(){function e(e,t){this._renderer=e,this._elementRef=t,this.onChange=function(e){},this.onTouched=function(){}}return e.prototype.writeValue=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"value",parseFloat(e))},e.prototype.registerOnChange=function(e){this.onChange=function(t){e(""==t?null:parseFloat(t))}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e}(),R='\n    <div [formGroup]="myGroup">\n       <div formGroupName="person">\n          <input formControlName="firstName">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });',D='\n    <form>\n       <div ngModelGroup="person">\n          <input [(ngModel)]="person.name" name="firstName">\n       </div>\n    </form>';function V(e,t){return null==e?""+t:(t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}var L=function(){function e(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=i.wb}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){this.value=e;var t=this._getOptionId(e);null==t&&this._renderer.setProperty(this._elementRef.nativeElement,"selectedIndex",-1);var n=V(t,e);this._renderer.setProperty(this._elementRef.nativeElement,"value",n)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){t.value=t._getOptionValue(n),e(t.value)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(){return(this._idCounter++).toString()},e.prototype._getOptionId=function(e){var t,n;try{for(var i=Object(r.h)(Array.from(this._optionMap.keys())),o=i.next();!o.done;o=i.next()){var s=o.value;if(this._compareWith(this._optionMap.get(s),e))return s}}catch(a){t={error:a}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return null},e.prototype._getOptionValue=function(e){var t=function(e){return e.split(":")[0]}(e);return this._optionMap.has(t)?this._optionMap.get(t):e},e}(),U=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption())}return Object.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._select._optionMap.set(this.id,e),this._setElementValue(V(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._setElementValue(e),this._select&&this._select.writeValue(this._select.value)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}();function F(e,t){return null==e?""+t:("string"==typeof t&&(t="'"+t+"'"),t&&"object"==typeof t&&(t="Object"),(e+": "+t).slice(0,50))}var B=function(){function e(e,t){this._renderer=e,this._elementRef=t,this._optionMap=new Map,this._idCounter=0,this.onChange=function(e){},this.onTouched=function(){},this._compareWith=i.wb}return Object.defineProperty(e.prototype,"compareWith",{set:function(e){if("function"!=typeof e)throw new Error("compareWith must be a function, but received "+JSON.stringify(e));this._compareWith=e},enumerable:!0,configurable:!0}),e.prototype.writeValue=function(e){var t,n=this;if(this.value=e,Array.isArray(e)){var r=e.map(function(e){return n._getOptionId(e)});t=function(e,t){e._setSelected(r.indexOf(t.toString())>-1)}}else t=function(e,t){e._setSelected(!1)};this._optionMap.forEach(t)},e.prototype.registerOnChange=function(e){var t=this;this.onChange=function(n){var r=[];if(n.hasOwnProperty("selectedOptions"))for(var i=n.selectedOptions,o=0;o<i.length;o++){var s=i.item(o),a=t._getOptionValue(s.value);r.push(a)}else for(i=n.options,o=0;o<i.length;o++)(s=i.item(o)).selected&&(a=t._getOptionValue(s.value),r.push(a));t.value=r,e(r)}},e.prototype.registerOnTouched=function(e){this.onTouched=e},e.prototype.setDisabledState=function(e){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",e)},e.prototype._registerOption=function(e){var t=(this._idCounter++).toString();return this._optionMap.set(t,e),t},e.prototype._getOptionId=function(e){var t,n;try{for(var i=Object(r.h)(Array.from(this._optionMap.keys())),o=i.next();!o.done;o=i.next()){var s=o.value;if(this._compareWith(this._optionMap.get(s)._value,e))return s}}catch(a){t={error:a}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return null},e.prototype._getOptionValue=function(e){var t=function(e){return e.split(":")[0]}(e);return this._optionMap.has(t)?this._optionMap.get(t)._value:e},e}(),z=function(){function e(e,t,n){this._element=e,this._renderer=t,this._select=n,this._select&&(this.id=this._select._registerOption(this))}return Object.defineProperty(e.prototype,"ngValue",{set:function(e){null!=this._select&&(this._value=e,this._setElementValue(F(this.id,e)),this._select.writeValue(this._select.value))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{set:function(e){this._select?(this._value=e,this._setElementValue(F(this.id,e)),this._select.writeValue(this._select.value)):this._setElementValue(e)},enumerable:!0,configurable:!0}),e.prototype._setElementValue=function(e){this._renderer.setProperty(this._element.nativeElement,"value",e)},e.prototype._setSelected=function(e){this._renderer.setProperty(this._element.nativeElement,"selected",e)},e.prototype.ngOnDestroy=function(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))},e}();function H(e,t){return Object(r.g)(t.path,[e])}function q(e,t){e||W(t,"Cannot find control with"),t.valueAccessor||W(t,"No value accessor for form control with"),e.validator=m.compose([e.validator,t.validator]),e.asyncValidator=m.composeAsync([e.asyncValidator,t.asyncValidator]),t.valueAccessor.writeValue(e.value),function(e,t){t.valueAccessor.registerOnChange(function(n){e._pendingValue=n,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&G(e,t)})}(e,t),function(e,t){e.registerOnChange(function(e,n){t.valueAccessor.writeValue(e),n&&t.viewToModelUpdate(e)})}(e,t),function(e,t){t.valueAccessor.registerOnTouched(function(){e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&G(e,t),"submit"!==e.updateOn&&e.markAsTouched()})}(e,t),t.valueAccessor.setDisabledState&&e.registerOnDisabledChange(function(e){t.valueAccessor.setDisabledState(e)}),t._rawValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(function(){return e.updateValueAndValidity()})}),t._rawAsyncValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(function(){return e.updateValueAndValidity()})})}function G(e,t){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function W(e,t){var n;throw n=e.path.length>1?"path: '"+e.path.join(" -> ")+"'":e.path[0]?"name: '"+e.path+"'":"unspecified name attribute",new Error(t+" "+n)}function K(e){return null!=e?m.compose(e.map(E)):null}function Z(e){return null!=e?m.composeAsync(e.map(x)):null}var Y=[C,N,P,L,B,M],$=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Object(r.c)(t,e),t.prototype.ngOnInit=function(){this._checkParentType(),this.formDirective.addFormGroup(this)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeFormGroup(this)},Object.defineProperty(t.prototype,"control",{get:function(){return this.formDirective.getFormGroup(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return H(this.name,this._parent)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return K(this._validators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return Z(this._asyncValidators)},enumerable:!0,configurable:!0}),t.prototype._checkParentType=function(){},t}(g),Q=function(){function e(e){this._cd=e}return Object.defineProperty(e.prototype,"ngClassUntouched",{get:function(){return!!this._cd.control&&this._cd.control.untouched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassTouched",{get:function(){return!!this._cd.control&&this._cd.control.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPristine",{get:function(){return!!this._cd.control&&this._cd.control.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassDirty",{get:function(){return!!this._cd.control&&this._cd.control.dirty},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassValid",{get:function(){return!!this._cd.control&&this._cd.control.valid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassInvalid",{get:function(){return!!this._cd.control&&this._cd.control.invalid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ngClassPending",{get:function(){return!!this._cd.control&&this._cd.control.pending},enumerable:!0,configurable:!0}),e}(),J=function(e){function t(t){return e.call(this,t)||this}return Object(r.c)(t,e),t}(Q),X=function(e){function t(t){return e.call(this,t)||this}return Object(r.c)(t,e),t}(Q);function ee(e){var t=ne(e)?e.validators:e;return Array.isArray(t)?K(t):t||null}function te(e,t){var n=ne(t)?t.asyncValidators:e;return Array.isArray(n)?Z(n):n||null}function ne(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}var re=function(){function e(e,t){this.validator=e,this.asyncValidator=t,this._onCollectionChange=function(){},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}return Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"valid",{get:function(){return"VALID"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"invalid",{get:function(){return"INVALID"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"pending",{get:function(){return"PENDING"==this.status},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return"DISABLED"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"enabled",{get:function(){return"DISABLED"!==this.status},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dirty",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"untouched",{get:function(){return!this.touched},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"updateOn",{get:function(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"},enumerable:!0,configurable:!0}),e.prototype.setValidators=function(e){this.validator=ee(e)},e.prototype.setAsyncValidators=function(e){this.asyncValidator=te(e)},e.prototype.clearValidators=function(){this.validator=null},e.prototype.clearAsyncValidators=function(){this.asyncValidator=null},e.prototype.markAsTouched=function(e){void 0===e&&(e={}),this.touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)},e.prototype.markAsUntouched=function(e){void 0===e&&(e={}),this.touched=!1,this._pendingTouched=!1,this._forEachChild(function(e){e.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype.markAsDirty=function(e){void 0===e&&(e={}),this.pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)},e.prototype.markAsPristine=function(e){void 0===e&&(e={}),this.pristine=!0,this._pendingDirty=!1,this._forEachChild(function(e){e.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype.markAsPending=function(e){void 0===e&&(e={}),this.status="PENDING",!1!==e.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!e.onlySelf&&this._parent.markAsPending(e)},e.prototype.disable=function(e){void 0===e&&(e={}),this.status="DISABLED",this.errors=null,this._forEachChild(function(t){t.disable(Object(r.a)({},e,{onlySelf:!0}))}),this._updateValue(),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(e),this._onDisabledChange.forEach(function(e){return e(!0)})},e.prototype.enable=function(e){void 0===e&&(e={}),this.status="VALID",this._forEachChild(function(t){t.enable(Object(r.a)({},e,{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors(e),this._onDisabledChange.forEach(function(e){return e(!1)})},e.prototype._updateAncestors=function(e){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),this._parent._updatePristine(),this._parent._updateTouched())},e.prototype.setParent=function(e){this._parent=e},e.prototype.updateValueAndValidity=function(e){void 0===e&&(e={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),"VALID"!==this.status&&"PENDING"!==this.status||this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)},e.prototype._updateTreeValidity=function(e){void 0===e&&(e={emitEvent:!0}),this._forEachChild(function(t){return t._updateTreeValidity(e)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})},e.prototype._setInitialStatus=function(){this.status=this._allControlsDisabled()?"DISABLED":"VALID"},e.prototype._runValidator=function(){return this.validator?this.validator(this):null},e.prototype._runAsyncValidator=function(e){var t=this;if(this.asyncValidator){this.status="PENDING";var n=_(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return t.setErrors(n,{emitEvent:e})})}},e.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},e.prototype.setErrors=function(e,t){void 0===t&&(t={}),this.errors=e,this._updateControlsErrors(!1!==t.emitEvent)},e.prototype.get=function(e){return function(e,t,n){return null==t?null:(t instanceof Array||(t=t.split(".")),t instanceof Array&&0===t.length?null:t.reduce(function(e,t){return e instanceof oe?e.controls.hasOwnProperty(t)?e.controls[t]:null:e instanceof se&&e.at(t)||null},e))}(this,e)},e.prototype.getError=function(e,t){var n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null},e.prototype.hasError=function(e,t){return!!this.getError(e,t)},Object.defineProperty(e.prototype,"root",{get:function(){for(var e=this;e._parent;)e=e._parent;return e},enumerable:!0,configurable:!0}),e.prototype._updateControlsErrors=function(e){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(e)},e.prototype._initObservables=function(){this.valueChanges=new i.m,this.statusChanges=new i.m},e.prototype._calculateStatus=function(){return this._allControlsDisabled()?"DISABLED":this.errors?"INVALID":this._anyControlsHaveStatus("PENDING")?"PENDING":this._anyControlsHaveStatus("INVALID")?"INVALID":"VALID"},e.prototype._anyControlsHaveStatus=function(e){return this._anyControls(function(t){return t.status===e})},e.prototype._anyControlsDirty=function(){return this._anyControls(function(e){return e.dirty})},e.prototype._anyControlsTouched=function(){return this._anyControls(function(e){return e.touched})},e.prototype._updatePristine=function(e){void 0===e&&(e={}),this.pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)},e.prototype._updateTouched=function(e){void 0===e&&(e={}),this.touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)},e.prototype._isBoxedValue=function(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e},e.prototype._registerOnCollectionChange=function(e){this._onCollectionChange=e},e.prototype._setUpdateStrategy=function(e){ne(e)&&null!=e.updateOn&&(this._updateOn=e.updateOn)},e}(),ie=function(e){function t(t,n,r){void 0===t&&(t=null);var i=e.call(this,ee(n),te(r,n))||this;return i._onChange=[],i._applyFormState(t),i._setUpdateStrategy(n),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i._initObservables(),i}return Object(r.c)(t,e),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this.value=this._pendingValue=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(function(e){return e(n.value,!1!==t.emitViewToModelChange)}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){void 0===t&&(t={}),this.setValue(e,t)},t.prototype.reset=function(e,t){void 0===e&&(e=null),void 0===t&&(t={}),this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1},t.prototype._updateValue=function(){},t.prototype._anyControls=function(e){return!1},t.prototype._allControlsDisabled=function(){return this.disabled},t.prototype.registerOnChange=function(e){this._onChange.push(e)},t.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},t.prototype.registerOnDisabledChange=function(e){this._onDisabledChange.push(e)},t.prototype._forEachChild=function(e){},t.prototype._syncPendingControls=function(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))},t.prototype._applyFormState=function(e){this._isBoxedValue(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e},t}(re),oe=function(e){function t(t,n,r){var i=e.call(this,ee(n),te(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(r.c)(t,e),t.prototype.registerControl=function(e,t){return this.controls[e]?this.controls[e]:(this.controls[e]=t,t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange),t)},t.prototype.addControl=function(e,t){this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.removeControl=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),delete this.controls[e],t&&this.registerControl(e,t),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.contains=function(e){return this.controls.hasOwnProperty(e)&&this.controls[e].enabled},t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),Object.keys(e).forEach(function(r){n._throwIfControlMissing(r),n.controls[r].setValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),Object.keys(e).forEach(function(r){n.controls[r]&&n.controls[r].patchValue(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this._reduceChildren({},function(e,t,n){return e[n]=t instanceof ie?t.value:t.getRawValue(),e})},t.prototype._syncPendingControls=function(){var e=this._reduceChildren(!1,function(e,t){return!!t._syncPendingControls()||e});return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!Object.keys(this.controls).length)throw new Error("\n        There are no form controls registered with this group yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.controls[e])throw new Error("Cannot find form control with name: "+e+".")},t.prototype._forEachChild=function(e){var t=this;Object.keys(this.controls).forEach(function(n){return e(t.controls[n],n)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){t.setParent(e),t._registerOnCollectionChange(e._onCollectionChange)})},t.prototype._updateValue=function(){this.value=this._reduceValue()},t.prototype._anyControls=function(e){var t=this,n=!1;return this._forEachChild(function(r,i){n=n||t.contains(i)&&e(r)}),n},t.prototype._reduceValue=function(){var e=this;return this._reduceChildren({},function(t,n,r){return(n.enabled||e.disabled)&&(t[r]=n.value),t})},t.prototype._reduceChildren=function(e,t){var n=e;return this._forEachChild(function(e,r){n=t(n,e,r)}),n},t.prototype._allControlsDisabled=function(){var e,t;try{for(var n=Object(r.h)(Object.keys(this.controls)),i=n.next();!i.done;i=n.next())if(this.controls[i.value].enabled)return!1}catch(o){e={error:o}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return Object.keys(this.controls).length>0||this.disabled},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},t}(re),se=function(e){function t(t,n,r){var i=e.call(this,ee(n),te(r,n))||this;return i.controls=t,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(r.c)(t,e),t.prototype.at=function(e){return this.controls[e]},t.prototype.push=function(e){this.controls.push(e),this._registerControl(e),this.updateValueAndValidity(),this._onCollectionChange()},t.prototype.insert=function(e,t){this.controls.splice(e,0,t),this._registerControl(t),this.updateValueAndValidity()},t.prototype.removeAt=function(e){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),this.updateValueAndValidity()},t.prototype.setControl=function(e,t){this.controls[e]&&this.controls[e]._registerOnCollectionChange(function(){}),this.controls.splice(e,1),t&&(this.controls.splice(e,0,t),this._registerControl(t)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(t.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),t.prototype.setValue=function(e,t){var n=this;void 0===t&&(t={}),this._checkAllValuesPresent(e),e.forEach(function(e,r){n._throwIfControlMissing(r),n.at(r).setValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.patchValue=function(e,t){var n=this;void 0===t&&(t={}),e.forEach(function(e,r){n.at(r)&&n.at(r).patchValue(e,{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t)},t.prototype.reset=function(e,t){void 0===e&&(e=[]),void 0===t&&(t={}),this._forEachChild(function(n,r){n.reset(e[r],{onlySelf:!0,emitEvent:t.emitEvent})}),this.updateValueAndValidity(t),this._updatePristine(t),this._updateTouched(t)},t.prototype.getRawValue=function(){return this.controls.map(function(e){return e instanceof ie?e.value:e.getRawValue()})},t.prototype._syncPendingControls=function(){var e=this.controls.reduce(function(e,t){return!!t._syncPendingControls()||e},!1);return e&&this.updateValueAndValidity({onlySelf:!0}),e},t.prototype._throwIfControlMissing=function(e){if(!this.controls.length)throw new Error("\n        There are no form controls registered with this array yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.at(e))throw new Error("Cannot find form control at index "+e)},t.prototype._forEachChild=function(e){this.controls.forEach(function(t,n){e(t,n)})},t.prototype._updateValue=function(){var e=this;this.value=this.controls.filter(function(t){return t.enabled||e.disabled}).map(function(e){return e.value})},t.prototype._anyControls=function(e){return this.controls.some(function(t){return t.enabled&&e(t)})},t.prototype._setUpControls=function(){var e=this;this._forEachChild(function(t){return e._registerControl(t)})},t.prototype._checkAllValuesPresent=function(e){this._forEachChild(function(t,n){if(void 0===e[n])throw new Error("Must supply a value for form control at index: "+n+".")})},t.prototype._allControlsDisabled=function(){var e,t;try{for(var n=Object(r.h)(this.controls),i=n.next();!i.done;i=n.next())if(i.value.enabled)return!1}catch(o){e={error:o}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return this.controls.length>0||this.disabled},t.prototype._registerControl=function(e){e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange)},t}(re),ae=Promise.resolve(null),ue=function(e){function t(t,n){var r=e.call(this)||this;return r.submitted=!1,r._directives=[],r.ngSubmit=new i.m,r.form=new oe({},K(t),Z(n)),r}return Object(r.c)(t,e),t.prototype.ngAfterViewInit=function(){this._setUpdateStrategy()},Object.defineProperty(t.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),t.prototype.addControl=function(e){var t=this;ae.then(function(){var n=t._findContainer(e.path);e.control=n.registerControl(e.name,e.control),q(e.control,e),e.control.updateValueAndValidity({emitEvent:!1}),t._directives.push(e)})},t.prototype.getControl=function(e){return this.form.get(e.path)},t.prototype.removeControl=function(e){var t=this;ae.then(function(){var n,r,i=t._findContainer(e.path);i&&i.removeControl(e.name),(r=(n=t._directives).indexOf(e))>-1&&n.splice(r,1)})},t.prototype.addFormGroup=function(e){var t=this;ae.then(function(){var n=t._findContainer(e.path),r=new oe({});(function(e,t){null==e&&W(t,"Cannot find control with"),e.validator=m.compose([e.validator,t.validator]),e.asyncValidator=m.composeAsync([e.asyncValidator,t.asyncValidator])})(r,e),n.registerControl(e.name,r),r.updateValueAndValidity({emitEvent:!1})})},t.prototype.removeFormGroup=function(e){var t=this;ae.then(function(){var n=t._findContainer(e.path);n&&n.removeControl(e.name)})},t.prototype.getFormGroup=function(e){return this.form.get(e.path)},t.prototype.updateModel=function(e,t){var n=this;ae.then(function(){n.form.get(e.path).setValue(t)})},t.prototype.setValue=function(e){this.control.setValue(e)},t.prototype.onSubmit=function(e){return this.submitted=!0,t=this._directives,this.form._syncPendingControls(),t.forEach(function(e){var t=e.control;"submit"===t.updateOn&&t._pendingChange&&(e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1)}),this.ngSubmit.emit(e),!1;var t},t.prototype.onReset=function(){this.resetForm()},t.prototype.resetForm=function(e){void 0===e&&(e=void 0),this.form.reset(e),this.submitted=!1},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)},t.prototype._findContainer=function(e){return e.pop(),e.length?this.form.get(e):this.form},t}(g),ce=function(){function e(){}return e.modelParentException=function(){throw new Error('\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\n      formGroup\'s partner directive "formControlName" instead.  Example:\n\n      \n    <div [formGroup]="myGroup">\n      <input formControlName="firstName">\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });\n\n      Or, if you\'d like to avoid registering this form control, indicate that it\'s standalone in ngModelOptions:\n\n      Example:\n\n      \n    <div [formGroup]="myGroup">\n       <input formControlName="firstName">\n       <input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">\n    </div>\n  ')},e.formGroupNameException=function(){throw new Error("\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n      "+R+"\n\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n      "+D)},e.missingNameException=function(){throw new Error('If ngModel is used within a form tag, either the name attribute must be set or the form\n      control must be defined as \'standalone\' in ngModelOptions.\n\n      Example 1: <input [(ngModel)]="person.firstName" name="first">\n      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">')},e.modelGroupParentException=function(){throw new Error("\n      ngModelGroup cannot be used with a parent formGroup directive.\n\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n      "+R+"\n\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n      "+D)},e}(),le=function(e){function t(t,n,r){var i=e.call(this)||this;return i._parent=t,i._validators=n,i._asyncValidators=r,i}var n;return Object(r.c)(t,e),n=t,t.prototype._checkParentType=function(){this._parent instanceof n||this._parent instanceof ue||ce.modelGroupParentException()},t}($),he=Promise.resolve(null),fe=function(e){function t(t,n,r,o){var s=e.call(this)||this;return s.control=new ie,s._registered=!1,s.update=new i.m,s._parent=t,s._rawValidators=n||[],s._rawAsyncValidators=r||[],s.valueAccessor=function(e,t){if(!t)return null;Array.isArray(t)||W(e,"Value accessor was not provided as an array for form control with");var n=void 0,r=void 0,i=void 0;return t.forEach(function(t){var o;t.constructor===k?n=t:(o=t,Y.some(function(e){return o.constructor===e})?(r&&W(e,"More than one built-in value accessor matches form control with"),r=t):(i&&W(e,"More than one custom value accessor matches form control with"),i=t))}),i||r||n||(W(e,"No valid value accessor for form control with"),null)}(s,o),s}return Object(r.c)(t,e),t.prototype.ngOnChanges=function(e){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in e&&this._updateDisabled(e),function(e,t){if(!e.hasOwnProperty("model"))return!1;var n=e.model;return!!n.isFirstChange()||!Object(i.wb)(t,n.currentValue)}(e,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)},t.prototype.ngOnDestroy=function(){this.formDirective&&this.formDirective.removeControl(this)},Object.defineProperty(t.prototype,"path",{get:function(){return this._parent?H(this.name,this._parent):[this.name]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"formDirective",{get:function(){return this._parent?this._parent.formDirective:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"validator",{get:function(){return K(this._rawValidators)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"asyncValidator",{get:function(){return Z(this._rawAsyncValidators)},enumerable:!0,configurable:!0}),t.prototype.viewToModelUpdate=function(e){this.viewModel=e,this.update.emit(e)},t.prototype._setUpControl=function(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0},t.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)},t.prototype._isStandalone=function(){return!this._parent||!(!this.options||!this.options.standalone)},t.prototype._setUpStandalone=function(){q(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})},t.prototype._checkForErrors=function(){this._isStandalone()||this._checkParentType(),this._checkName()},t.prototype._checkParentType=function(){!(this._parent instanceof le)&&this._parent instanceof $?ce.formGroupNameException():this._parent instanceof le||this._parent instanceof ue||ce.modelParentException()},t.prototype._checkName=function(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()||this.name||ce.missingNameException()},t.prototype._updateValue=function(e){var t=this;he.then(function(){t.control.setValue(e,{emitViewToModelChange:!1})})},t.prototype._updateDisabled=function(e){var t=this,n=e.isDisabled.currentValue,r=""===n||n&&"false"!==n;he.then(function(){r&&!t.control.disabled?t.control.disable():!r&&t.control.disabled&&t.control.enable()})},t}(A),de=function(){function e(){}return Object.defineProperty(e.prototype,"required",{get:function(){return this._required},set:function(e){this._required=null!=e&&!1!==e&&""+e!="false",this._onChange&&this._onChange()},enumerable:!0,configurable:!0}),e.prototype.validate=function(e){return this.required?m.required(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e}(),pe=function(){function e(){}return e.prototype.ngOnChanges=function(e){"minlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null==this.minlength?null:this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=m.minLength(parseInt(this.minlength,10))},e}(),ge=function(){function e(){}return e.prototype.ngOnChanges=function(e){"maxlength"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return null!=this.maxlength?this._validator(e):null},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=m.maxLength(parseInt(this.maxlength,10))},e}(),be=function(){function e(){}return e.prototype.ngOnChanges=function(e){"pattern"in e&&(this._createValidator(),this._onChange&&this._onChange())},e.prototype.validate=function(e){return this._validator(e)},e.prototype.registerOnValidatorChange=function(e){this._onChange=e},e.prototype._createValidator=function(){this._validator=m.pattern(this.pattern)},e}(),ve=function(){return function(){}}(),ye=function(){return function(){}}(),me=function(){return function(){}}()},gLwZ:function(e,t,n){"use strict";e.exports={437:"cp437",737:"cp737",775:"cp775",850:"cp850",852:"cp852",855:"cp855",856:"cp856",857:"cp857",858:"cp858",860:"cp860",861:"cp861",862:"cp862",863:"cp863",864:"cp864",865:"cp865",866:"cp866",869:"cp869",874:"windows874",922:"cp922",1046:"cp1046",1124:"cp1124",1125:"cp1125",1129:"cp1129",1133:"cp1133",1161:"cp1161",1162:"cp1162",1163:"cp1163",1250:"windows1250",1251:"windows1251",1252:"windows1252",1253:"windows1253",1254:"windows1254",1255:"windows1255",1256:"windows1256",1257:"windows1257",1258:"windows1258",28591:"iso88591",28592:"iso88592",28593:"iso88593",28594:"iso88594",28595:"iso88595",28596:"iso88596",28597:"iso88597",28598:"iso88598",28599:"iso88599",28600:"iso885910",28601:"iso885911",28603:"iso885913",28604:"iso885914",28605:"iso885915",28606:"iso885916",windows874:{type:"_sbcs",chars:"\u20ac\ufffd\ufffd\ufffd\ufffd\u2026\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\xa0\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\ufffd\ufffd\ufffd\ufffd\u0e3f\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0e4f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0e5a\u0e5b\ufffd\ufffd\ufffd\ufffd"},win874:"windows874",cp874:"windows874",windows1250:{type:"_sbcs",chars:"\u20ac\ufffd\u201a\ufffd\u201e\u2026\u2020\u2021\ufffd\u2030\u0160\u2039\u015a\u0164\u017d\u0179\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\ufffd\u2122\u0161\u203a\u015b\u0165\u017e\u017a\xa0\u02c7\u02d8\u0141\xa4\u0104\xa6\xa7\xa8\xa9\u015e\xab\xac\xad\xae\u017b\xb0\xb1\u02db\u0142\xb4\xb5\xb6\xb7\xb8\u0105\u015f\xbb\u013d\u02dd\u013e\u017c\u0154\xc1\xc2\u0102\xc4\u0139\u0106\xc7\u010c\xc9\u0118\xcb\u011a\xcd\xce\u010e\u0110\u0143\u0147\xd3\xd4\u0150\xd6\xd7\u0158\u016e\xda\u0170\xdc\xdd\u0162\xdf\u0155\xe1\xe2\u0103\xe4\u013a\u0107\xe7\u010d\xe9\u0119\xeb\u011b\xed\xee\u010f\u0111\u0144\u0148\xf3\xf4\u0151\xf6\xf7\u0159\u016f\xfa\u0171\xfc\xfd\u0163\u02d9"},win1250:"windows1250",cp1250:"windows1250",windows1251:{type:"_sbcs",chars:"\u0402\u0403\u201a\u0453\u201e\u2026\u2020\u2021\u20ac\u2030\u0409\u2039\u040a\u040c\u040b\u040f\u0452\u2018\u2019\u201c\u201d\u2022\u2013\u2014\ufffd\u2122\u0459\u203a\u045a\u045c\u045b\u045f\xa0\u040e\u045e\u0408\xa4\u0490\xa6\xa7\u0401\xa9\u0404\xab\xac\xad\xae\u0407\xb0\xb1\u0406\u0456\u0491\xb5\xb6\xb7\u0451\u2116\u0454\xbb\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f"},win1251:"windows1251",cp1251:"windows1251",windows1252:{type:"_sbcs",chars:"\u20ac\ufffd\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\ufffd\u017d\ufffd\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\ufffd\u017e\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},win1252:"windows1252",cp1252:"windows1252",windows1253:{type:"_sbcs",chars:"\u20ac\ufffd\u201a\u0192\u201e\u2026\u2020\u2021\ufffd\u2030\ufffd\u2039\ufffd\ufffd\ufffd\ufffd\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\ufffd\u2122\ufffd\u203a\ufffd\ufffd\ufffd\ufffd\xa0\u0385\u0386\xa3\xa4\xa5\xa6\xa7\xa8\xa9\ufffd\xab\xac\xad\xae\u2015\xb0\xb1\xb2\xb3\u0384\xb5\xb6\xb7\u0388\u0389\u038a\xbb\u038c\xbd\u038e\u038f\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\ufffd\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\ufffd"},win1253:"windows1253",cp1253:"windows1253",windows1254:{type:"_sbcs",chars:"\u20ac\ufffd\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\ufffd\ufffd\ufffd\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\ufffd\ufffd\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\u011e\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\u0130\u015e\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\u011f\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\u0131\u015f\xff"},win1254:"windows1254",cp1254:"windows1254",windows1255:{type:"_sbcs",chars:"\u20ac\ufffd\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\ufffd\u2039\ufffd\ufffd\ufffd\ufffd\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\ufffd\u203a\ufffd\ufffd\ufffd\ufffd\xa0\xa1\xa2\xa3\u20aa\xa5\xa6\xa7\xa8\xa9\xd7\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xf7\xbb\xbc\xbd\xbe\xbf\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05b9\u05ba\u05bb\u05bc\u05bd\u05be\u05bf\u05c0\u05c1\u05c2\u05c3\u05f0\u05f1\u05f2\u05f3\u05f4\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\ufffd\ufffd\u200e\u200f\ufffd"},win1255:"windows1255",cp1255:"windows1255",windows1256:{type:"_sbcs",chars:"\u20ac\u067e\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06af\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u06a9\u2122\u0691\u203a\u0153\u200c\u200d\u06ba\xa0\u060c\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\u06be\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\u061b\xbb\xbc\xbd\xbe\u061f\u06c1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\xd7\u0637\u0638\u0639\u063a\u0640\u0641\u0642\u0643\xe0\u0644\xe2\u0645\u0646\u0647\u0648\xe7\xe8\xe9\xea\xeb\u0649\u064a\xee\xef\u064b\u064c\u064d\u064e\xf4\u064f\u0650\xf7\u0651\xf9\u0652\xfb\xfc\u200e\u200f\u06d2"},win1256:"windows1256",cp1256:"windows1256",windows1257:{type:"_sbcs",chars:"\u20ac\ufffd\u201a\ufffd\u201e\u2026\u2020\u2021\ufffd\u2030\ufffd\u2039\ufffd\xa8\u02c7\xb8\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\ufffd\u2122\ufffd\u203a\ufffd\xaf\u02db\ufffd\xa0\ufffd\xa2\xa3\xa4\ufffd\xa6\xa7\xd8\xa9\u0156\xab\xac\xad\xae\xc6\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xf8\xb9\u0157\xbb\xbc\xbd\xbe\xe6\u0104\u012e\u0100\u0106\xc4\xc5\u0118\u0112\u010c\xc9\u0179\u0116\u0122\u0136\u012a\u013b\u0160\u0143\u0145\xd3\u014c\xd5\xd6\xd7\u0172\u0141\u015a\u016a\xdc\u017b\u017d\xdf\u0105\u012f\u0101\u0107\xe4\xe5\u0119\u0113\u010d\xe9\u017a\u0117\u0123\u0137\u012b\u013c\u0161\u0144\u0146\xf3\u014d\xf5\xf6\xf7\u0173\u0142\u015b\u016b\xfc\u017c\u017e\u02d9"},win1257:"windows1257",cp1257:"windows1257",windows1258:{type:"_sbcs",chars:"\u20ac\ufffd\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\ufffd\u2039\u0152\ufffd\ufffd\ufffd\ufffd\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\ufffd\u203a\u0153\ufffd\ufffd\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\u0102\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\u0300\xcd\xce\xcf\u0110\xd1\u0309\xd3\xd4\u01a0\xd6\xd7\xd8\xd9\xda\xdb\xdc\u01af\u0303\xdf\xe0\xe1\xe2\u0103\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\u0301\xed\xee\xef\u0111\xf1\u0323\xf3\xf4\u01a1\xf6\xf7\xf8\xf9\xfa\xfb\xfc\u01b0\u20ab\xff"},win1258:"windows1258",cp1258:"windows1258",iso88591:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},cp28591:"iso88591",iso88592:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0104\u02d8\u0141\xa4\u013d\u015a\xa7\xa8\u0160\u015e\u0164\u0179\xad\u017d\u017b\xb0\u0105\u02db\u0142\xb4\u013e\u015b\u02c7\xb8\u0161\u015f\u0165\u017a\u02dd\u017e\u017c\u0154\xc1\xc2\u0102\xc4\u0139\u0106\xc7\u010c\xc9\u0118\xcb\u011a\xcd\xce\u010e\u0110\u0143\u0147\xd3\xd4\u0150\xd6\xd7\u0158\u016e\xda\u0170\xdc\xdd\u0162\xdf\u0155\xe1\xe2\u0103\xe4\u013a\u0107\xe7\u010d\xe9\u0119\xeb\u011b\xed\xee\u010f\u0111\u0144\u0148\xf3\xf4\u0151\xf6\xf7\u0159\u016f\xfa\u0171\xfc\xfd\u0163\u02d9"},cp28592:"iso88592",iso88593:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0126\u02d8\xa3\xa4\ufffd\u0124\xa7\xa8\u0130\u015e\u011e\u0134\xad\ufffd\u017b\xb0\u0127\xb2\xb3\xb4\xb5\u0125\xb7\xb8\u0131\u015f\u011f\u0135\xbd\ufffd\u017c\xc0\xc1\xc2\ufffd\xc4\u010a\u0108\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\ufffd\xd1\xd2\xd3\xd4\u0120\xd6\xd7\u011c\xd9\xda\xdb\xdc\u016c\u015c\xdf\xe0\xe1\xe2\ufffd\xe4\u010b\u0109\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\ufffd\xf1\xf2\xf3\xf4\u0121\xf6\xf7\u011d\xf9\xfa\xfb\xfc\u016d\u015d\u02d9"},cp28593:"iso88593",iso88594:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0104\u0138\u0156\xa4\u0128\u013b\xa7\xa8\u0160\u0112\u0122\u0166\xad\u017d\xaf\xb0\u0105\u02db\u0157\xb4\u0129\u013c\u02c7\xb8\u0161\u0113\u0123\u0167\u014a\u017e\u014b\u0100\xc1\xc2\xc3\xc4\xc5\xc6\u012e\u010c\xc9\u0118\xcb\u0116\xcd\xce\u012a\u0110\u0145\u014c\u0136\xd4\xd5\xd6\xd7\xd8\u0172\xda\xdb\xdc\u0168\u016a\xdf\u0101\xe1\xe2\xe3\xe4\xe5\xe6\u012f\u010d\xe9\u0119\xeb\u0117\xed\xee\u012b\u0111\u0146\u014d\u0137\xf4\xf5\xf6\xf7\xf8\u0173\xfa\xfb\xfc\u0169\u016b\u02d9"},cp28594:"iso88594",iso88595:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\xad\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\xa7\u045e\u045f"},cp28595:"iso88595",iso88596:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\ufffd\ufffd\ufffd\xa4\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u060c\xad\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u061b\ufffd\ufffd\ufffd\u061f\ufffd\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\ufffd\ufffd\ufffd\ufffd\ufffd\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd"},cp28596:"iso88596",iso88597:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u2018\u2019\xa3\u20ac\u20af\xa6\xa7\xa8\xa9\u037a\xab\xac\xad\ufffd\u2015\xb0\xb1\xb2\xb3\u0384\u0385\u0386\xb7\u0388\u0389\u038a\xbb\u038c\xbd\u038e\u038f\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\ufffd\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\ufffd"},cp28597:"iso88597",iso88598:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\ufffd\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xd7\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xf7\xbb\xbc\xbd\xbe\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u2017\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\ufffd\ufffd\u200e\u200f\ufffd"},cp28598:"iso88598",iso88599:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\u011e\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\u0130\u015e\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\u011f\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\u0131\u015f\xff"},cp28599:"iso88599",iso885910:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0104\u0112\u0122\u012a\u0128\u0136\xa7\u013b\u0110\u0160\u0166\u017d\xad\u016a\u014a\xb0\u0105\u0113\u0123\u012b\u0129\u0137\xb7\u013c\u0111\u0161\u0167\u017e\u2015\u016b\u014b\u0100\xc1\xc2\xc3\xc4\xc5\xc6\u012e\u010c\xc9\u0118\xcb\u0116\xcd\xce\xcf\xd0\u0145\u014c\xd3\xd4\xd5\xd6\u0168\xd8\u0172\xda\xdb\xdc\xdd\xde\xdf\u0101\xe1\xe2\xe3\xe4\xe5\xe6\u012f\u010d\xe9\u0119\xeb\u0117\xed\xee\xef\xf0\u0146\u014d\xf3\xf4\xf5\xf6\u0169\xf8\u0173\xfa\xfb\xfc\xfd\xfe\u0138"},cp28600:"iso885910",iso885911:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\ufffd\ufffd\ufffd\ufffd\u0e3f\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0e4f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0e5a\u0e5b\ufffd\ufffd\ufffd\ufffd"},cp28601:"iso885911",iso885913:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u201d\xa2\xa3\xa4\u201e\xa6\xa7\xd8\xa9\u0156\xab\xac\xad\xae\xc6\xb0\xb1\xb2\xb3\u201c\xb5\xb6\xb7\xf8\xb9\u0157\xbb\xbc\xbd\xbe\xe6\u0104\u012e\u0100\u0106\xc4\xc5\u0118\u0112\u010c\xc9\u0179\u0116\u0122\u0136\u012a\u013b\u0160\u0143\u0145\xd3\u014c\xd5\xd6\xd7\u0172\u0141\u015a\u016a\xdc\u017b\u017d\xdf\u0105\u012f\u0101\u0107\xe4\xe5\u0119\u0113\u010d\xe9\u017a\u0117\u0123\u0137\u012b\u013c\u0161\u0144\u0146\xf3\u014d\xf5\xf6\xf7\u0173\u0142\u015b\u016b\xfc\u017c\u017e\u2019"},cp28603:"iso885913",iso885914:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u1e02\u1e03\xa3\u010a\u010b\u1e0a\xa7\u1e80\xa9\u1e82\u1e0b\u1ef2\xad\xae\u0178\u1e1e\u1e1f\u0120\u0121\u1e40\u1e41\xb6\u1e56\u1e81\u1e57\u1e83\u1e60\u1ef3\u1e84\u1e85\u1e61\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\u0174\xd1\xd2\xd3\xd4\xd5\xd6\u1e6a\xd8\xd9\xda\xdb\xdc\xdd\u0176\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\u0175\xf1\xf2\xf3\xf4\xf5\xf6\u1e6b\xf8\xf9\xfa\xfb\xfc\xfd\u0177\xff"},cp28604:"iso885914",iso885915:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\u20ac\xa5\u0160\xa7\u0161\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\u017d\xb5\xb6\xb7\u017e\xb9\xba\xbb\u0152\u0153\u0178\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},cp28605:"iso885915",iso885916:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0104\u0105\u0141\u20ac\u201e\u0160\xa7\u0161\xa9\u0218\xab\u0179\xad\u017a\u017b\xb0\xb1\u010c\u0142\u017d\u201d\xb6\xb7\u017e\u010d\u0219\xbb\u0152\u0153\u0178\u017c\xc0\xc1\xc2\u0102\xc4\u0106\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\u0110\u0143\xd2\xd3\xd4\u0150\xd6\u015a\u0170\xd9\xda\xdb\xdc\u0118\u021a\xdf\xe0\xe1\xe2\u0103\xe4\u0107\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\u0111\u0144\xf2\xf3\xf4\u0151\xf6\u015b\u0171\xf9\xfa\xfb\xfc\u0119\u021b\xff"},cp28606:"iso885916",cp437:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7\xea\xeb\xe8\xef\xee\xec\xc4\xc5\xc9\xe6\xc6\xf4\xf6\xf2\xfb\xf9\xff\xd6\xdc\xa2\xa3\xa5\u20a7\u0192\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba\xbf\u2310\xac\xbd\xbc\xa1\xab\xbb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ibm437:"cp437",csibm437:"cp437",cp737:{type:"_sbcs",chars:"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c2\u03c4\u03c5\u03c6\u03c7\u03c8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03c9\u03ac\u03ad\u03ae\u03ca\u03af\u03cc\u03cd\u03cb\u03ce\u0386\u0388\u0389\u038a\u038c\u038e\u038f\xb1\u2265\u2264\u03aa\u03ab\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ibm737:"cp737",csibm737:"cp737",cp775:{type:"_sbcs",chars:"\u0106\xfc\xe9\u0101\xe4\u0123\xe5\u0107\u0142\u0113\u0156\u0157\u012b\u0179\xc4\xc5\xc9\xe6\xc6\u014d\xf6\u0122\xa2\u015a\u015b\xd6\xdc\xf8\xa3\xd8\xd7\xa4\u0100\u012a\xf3\u017b\u017c\u017a\u201d\xa6\xa9\xae\xac\xbd\xbc\u0141\xab\xbb\u2591\u2592\u2593\u2502\u2524\u0104\u010c\u0118\u0116\u2563\u2551\u2557\u255d\u012e\u0160\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u0172\u016a\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u017d\u0105\u010d\u0119\u0117\u012f\u0161\u0173\u016b\u017e\u2518\u250c\u2588\u2584\u258c\u2590\u2580\xd3\xdf\u014c\u0143\xf5\xd5\xb5\u0144\u0136\u0137\u013b\u013c\u0146\u0112\u0145\u2019\xad\xb1\u201c\xbe\xb6\xa7\xf7\u201e\xb0\u2219\xb7\xb9\xb3\xb2\u25a0\xa0"},ibm775:"cp775",csibm775:"cp775",cp850:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7\xea\xeb\xe8\xef\xee\xec\xc4\xc5\xc9\xe6\xc6\xf4\xf6\xf2\xfb\xf9\xff\xd6\xdc\xf8\xa3\xd8\xd7\u0192\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba\xbf\xae\xac\xbd\xbc\xa1\xab\xbb\u2591\u2592\u2593\u2502\u2524\xc1\xc2\xc0\xa9\u2563\u2551\u2557\u255d\xa2\xa5\u2510\u2514\u2534\u252c\u251c\u2500\u253c\xe3\xc3\u255a\u2554\u2569\u2566\u2560\u2550\u256c\xa4\xf0\xd0\xca\xcb\xc8\u0131\xcd\xce\xcf\u2518\u250c\u2588\u2584\xa6\xcc\u2580\xd3\xdf\xd4\xd2\xf5\xd5\xb5\xfe\xde\xda\xdb\xd9\xfd\xdd\xaf\xb4\xad\xb1\u2017\xbe\xb6\xa7\xf7\xb8\xb0\xa8\xb7\xb9\xb3\xb2\u25a0\xa0"},ibm850:"cp850",csibm850:"cp850",cp852:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe4\u016f\u0107\xe7\u0142\xeb\u0150\u0151\xee\u0179\xc4\u0106\xc9\u0139\u013a\xf4\xf6\u013d\u013e\u015a\u015b\xd6\xdc\u0164\u0165\u0141\xd7\u010d\xe1\xed\xf3\xfa\u0104\u0105\u017d\u017e\u0118\u0119\xac\u017a\u010c\u015f\xab\xbb\u2591\u2592\u2593\u2502\u2524\xc1\xc2\u011a\u015e\u2563\u2551\u2557\u255d\u017b\u017c\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u0102\u0103\u255a\u2554\u2569\u2566\u2560\u2550\u256c\xa4\u0111\u0110\u010e\xcb\u010f\u0147\xcd\xce\u011b\u2518\u250c\u2588\u2584\u0162\u016e\u2580\xd3\xdf\xd4\u0143\u0144\u0148\u0160\u0161\u0154\xda\u0155\u0170\xfd\xdd\u0163\xb4\xad\u02dd\u02db\u02c7\u02d8\xa7\xf7\xb8\xb0\xa8\u02d9\u0171\u0158\u0159\u25a0\xa0"},ibm852:"cp852",csibm852:"cp852",cp855:{type:"_sbcs",chars:"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045a\u040a\u045b\u040b\u045c\u040c\u045e\u040e\u045f\u040f\u044e\u042e\u044a\u042a\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xab\xbb\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255d\u0439\u0419\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u043a\u041a\u255a\u2554\u2569\u2566\u2560\u2550\u256c\xa4\u043b\u041b\u043c\u041c\u043d\u041d\u043e\u041e\u043f\u2518\u250c\u2588\u2584\u041f\u044f\u2580\u042f\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044c\u042c\u2116\xad\u044b\u042b\u0437\u0417\u0448\u0428\u044d\u042d\u0449\u0429\u0447\u0427\xa7\u25a0\xa0"},ibm855:"cp855",csibm855:"cp855",cp856:{type:"_sbcs",chars:"\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\ufffd\xa3\ufffd\xd7\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\xae\xac\xbd\xbc\ufffd\xab\xbb\u2591\u2592\u2593\u2502\u2524\ufffd\ufffd\ufffd\xa9\u2563\u2551\u2557\u255d\xa2\xa5\u2510\u2514\u2534\u252c\u251c\u2500\u253c\ufffd\ufffd\u255a\u2554\u2569\u2566\u2560\u2550\u256c\xa4\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u2518\u250c\u2588\u2584\xa6\ufffd\u2580\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\xb5\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\xaf\xb4\xad\xb1\u2017\xbe\xb6\xa7\xf7\xb8\xb0\xa8\xb7\xb9\xb3\xb2\u25a0\xa0"},ibm856:"cp856",csibm856:"cp856",cp857:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7\xea\xeb\xe8\xef\xee\u0131\xc4\xc5\xc9\xe6\xc6\xf4\xf6\xf2\xfb\xf9\u0130\xd6\xdc\xf8\xa3\xd8\u015e\u015f\xe1\xed\xf3\xfa\xf1\xd1\u011e\u011f\xbf\xae\xac\xbd\xbc\xa1\xab\xbb\u2591\u2592\u2593\u2502\u2524\xc1\xc2\xc0\xa9\u2563\u2551\u2557\u255d\xa2\xa5\u2510\u2514\u2534\u252c\u251c\u2500\u253c\xe3\xc3\u255a\u2554\u2569\u2566\u2560\u2550\u256c\xa4\xba\xaa\xca\xcb\xc8\ufffd\xcd\xce\xcf\u2518\u250c\u2588\u2584\xa6\xcc\u2580\xd3\xdf\xd4\xd2\xf5\xd5\xb5\ufffd\xd7\xda\xdb\xd9\xec\xff\xaf\xb4\xad\xb1\ufffd\xbe\xb6\xa7\xf7\xb8\xb0\xa8\xb7\xb9\xb3\xb2\u25a0\xa0"},ibm857:"cp857",csibm857:"cp857",cp858:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7\xea\xeb\xe8\xef\xee\xec\xc4\xc5\xc9\xe6\xc6\xf4\xf6\xf2\xfb\xf9\xff\xd6\xdc\xf8\xa3\xd8\xd7\u0192\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba\xbf\xae\xac\xbd\xbc\xa1\xab\xbb\u2591\u2592\u2593\u2502\u2524\xc1\xc2\xc0\xa9\u2563\u2551\u2557\u255d\xa2\xa5\u2510\u2514\u2534\u252c\u251c\u2500\u253c\xe3\xc3\u255a\u2554\u2569\u2566\u2560\u2550\u256c\xa4\xf0\xd0\xca\xcb\xc8\u20ac\xcd\xce\xcf\u2518\u250c\u2588\u2584\xa6\xcc\u2580\xd3\xdf\xd4\xd2\xf5\xd5\xb5\xfe\xde\xda\xdb\xd9\xfd\xdd\xaf\xb4\xad\xb1\u2017\xbe\xb6\xa7\xf7\xb8\xb0\xa8\xb7\xb9\xb3\xb2\u25a0\xa0"},ibm858:"cp858",csibm858:"cp858",cp860:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe3\xe0\xc1\xe7\xea\xca\xe8\xcd\xd4\xec\xc3\xc2\xc9\xc0\xc8\xf4\xf5\xf2\xda\xf9\xcc\xd5\xdc\xa2\xa3\xd9\u20a7\xd3\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba\xbf\xd2\xac\xbd\xbc\xa1\xab\xbb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ibm860:"cp860",csibm860:"cp860",cp861:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7\xea\xeb\xe8\xd0\xf0\xde\xc4\xc5\xc9\xe6\xc6\xf4\xf6\xfe\xfb\xdd\xfd\xd6\xdc\xf8\xa3\xd8\u20a7\u0192\xe1\xed\xf3\xfa\xc1\xcd\xd3\xda\xbf\u2310\xac\xbd\xbc\xa1\xab\xbb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ibm861:"cp861",csibm861:"cp861",cp862:{type:"_sbcs",chars:"\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\xa2\xa3\xa5\u20a7\u0192\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba\xbf\u2310\xac\xbd\xbc\xa1\xab\xbb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ibm862:"cp862",csibm862:"cp862",cp863:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xc2\xe0\xb6\xe7\xea\xeb\xe8\xef\xee\u2017\xc0\xa7\xc9\xc8\xca\xf4\xcb\xcf\xfb\xf9\xa4\xd4\xdc\xa2\xa3\xd9\xdb\u0192\xa6\xb4\xf3\xfa\xa8\xb8\xb3\xaf\xce\u2310\xac\xbd\xbc\xbe\xab\xbb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ibm863:"cp863",csibm863:"cp863",cp864:{type:"_sbcs",chars:"\0\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$\u066a&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\xb0\xb7\u2219\u221a\u2592\u2500\u2502\u253c\u2524\u252c\u251c\u2534\u2510\u250c\u2514\u2518\u03b2\u221e\u03c6\xb1\xbd\xbc\u2248\xab\xbb\ufef7\ufef8\ufffd\ufffd\ufefb\ufefc\ufffd\xa0\xad\ufe82\xa3\xa4\ufe84\ufffd\ufffd\ufe8e\ufe8f\ufe95\ufe99\u060c\ufe9d\ufea1\ufea5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\ufed1\u061b\ufeb1\ufeb5\ufeb9\u061f\xa2\ufe80\ufe81\ufe83\ufe85\ufeca\ufe8b\ufe8d\ufe91\ufe93\ufe97\ufe9b\ufe9f\ufea3\ufea7\ufea9\ufeab\ufead\ufeaf\ufeb3\ufeb7\ufebb\ufebf\ufec1\ufec5\ufecb\ufecf\xa6\xac\xf7\xd7\ufec9\u0640\ufed3\ufed7\ufedb\ufedf\ufee3\ufee7\ufeeb\ufeed\ufeef\ufef3\ufebd\ufecc\ufece\ufecd\ufee1\ufe7d\u0651\ufee5\ufee9\ufeec\ufef0\ufef2\ufed0\ufed5\ufef5\ufef6\ufedd\ufed9\ufef1\u25a0\ufffd"},ibm864:"cp864",csibm864:"cp864",cp865:{type:"_sbcs",chars:"\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7\xea\xeb\xe8\xef\xee\xec\xc4\xc5\xc9\xe6\xc6\xf4\xf6\xf2\xfb\xf9\xff\xd6\xdc\xf8\xa3\xd8\u20a7\u0192\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba\xbf\u2310\xac\xbd\xbc\xa1\xab\xa4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0"},ibm865:"cp865",csibm865:"cp865",cp866:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0401\u0451\u0404\u0454\u0407\u0457\u040e\u045e\xb0\u2219\xb7\u221a\u2116\xa4\u25a0\xa0"},ibm866:"cp866",csibm866:"cp866",cp869:{type:"_sbcs",chars:"\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0386\ufffd\xb7\xac\xa6\u2018\u2019\u0388\u2015\u0389\u038a\u03aa\u038c\ufffd\ufffd\u038e\u03ab\xa9\u038f\xb2\xb3\u03ac\xa3\u03ad\u03ae\u03af\u03ca\u0390\u03cc\u03cd\u0391\u0392\u0393\u0394\u0395\u0396\u0397\xbd\u0398\u0399\xab\xbb\u2591\u2592\u2593\u2502\u2524\u039a\u039b\u039c\u039d\u2563\u2551\u2557\u255d\u039e\u039f\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u03a0\u03a1\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03b1\u03b2\u03b3\u2518\u250c\u2588\u2584\u03b4\u03b5\u2580\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c2\u03c4\u0384\xad\xb1\u03c5\u03c6\u03c7\xa7\u03c8\u0385\xb0\xa8\u03c9\u03cb\u03b0\u03ce\u25a0\xa0"},ibm869:"cp869",csibm869:"cp869",cp922:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\u203e\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\u0160\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\u017d\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\u0161\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\u017e\xff"},ibm922:"cp922",csibm922:"cp922",cp1046:{type:"_sbcs",chars:"\ufe88\xd7\xf7\uf8f6\uf8f5\uf8f4\uf8f7\ufe71\x88\u25a0\u2502\u2500\u2510\u250c\u2514\u2518\ufe79\ufe7b\ufe7d\ufe7f\ufe77\ufe8a\ufef0\ufef3\ufef2\ufece\ufecf\ufed0\ufef6\ufef8\ufefa\ufefc\xa0\uf8fa\uf8f9\uf8f8\xa4\uf8fb\ufe8b\ufe91\ufe97\ufe9b\ufe9f\ufea3\u060c\xad\ufea7\ufeb3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\ufeb7\u061b\ufebb\ufebf\ufeca\u061f\ufecb\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\ufec7\u0639\u063a\ufecc\ufe82\ufe84\ufe8e\ufed3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\ufed7\ufedb\ufedf\uf8fc\ufef5\ufef7\ufef9\ufefb\ufee3\ufee7\ufeec\ufee9\ufffd"},ibm1046:"cp1046",csibm1046:"cp1046",cp1124:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\xad\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\xa7\u045e\u045f"},ibm1124:"cp1124",csibm1124:"cp1124",cp1125:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\xb7\u221a\u2116\xa4\u25a0\xa0"},ibm1125:"cp1125",csibm1125:"cp1125",cp1129:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\u0153\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\u0178\xb5\xb6\xb7\u0152\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\u0102\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\u0300\xcd\xce\xcf\u0110\xd1\u0309\xd3\xd4\u01a0\xd6\xd7\xd8\xd9\xda\xdb\xdc\u01af\u0303\xdf\xe0\xe1\xe2\u0103\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\u0301\xed\xee\xef\u0111\xf1\u0323\xf3\xf4\u01a1\xf6\xf7\xf8\xf9\xfa\xfb\xfc\u01b0\u20ab\xff"},ibm1129:"cp1129",csibm1129:"cp1129",cp1133:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0e81\u0e82\u0e84\u0e87\u0e88\u0eaa\u0e8a\u0e8d\u0e94\u0e95\u0e96\u0e97\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea1\u0ea2\u0ea3\u0ea5\u0ea7\u0eab\u0ead\u0eae\ufffd\ufffd\ufffd\u0eaf\u0eb0\u0eb2\u0eb3\u0eb4\u0eb5\u0eb6\u0eb7\u0eb8\u0eb9\u0ebc\u0eb1\u0ebb\u0ebd\ufffd\ufffd\ufffd\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\u0ec8\u0ec9\u0eca\u0ecb\u0ecc\u0ecd\u0ec6\ufffd\u0edc\u0edd\u20ad\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9\ufffd\ufffd\xa2\xac\xa6\ufffd"},ibm1133:"cp1133",csibm1133:"cp1133",cp1161:{type:"_sbcs",chars:"\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0e48\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\u0e49\u0e4a\u0e4b\u20ac\u0e3f\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0e4f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0e5a\u0e5b\xa2\xac\xa6\xa0"},ibm1161:"cp1161",csibm1161:"cp1161",cp1162:{type:"_sbcs",chars:"\u20ac\x81\x82\x83\x84\u2026\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\u2018\u2019\u201c\u201d\u2022\u2013\u2014\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\ufffd\ufffd\ufffd\ufffd\u0e3f\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0e4f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0e5a\u0e5b\ufffd\ufffd\ufffd\ufffd"},ibm1162:"cp1162",csibm1162:"cp1162",cp1163:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\u20ac\xa5\xa6\xa7\u0153\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\u0178\xb5\xb6\xb7\u0152\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\u0102\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\u0300\xcd\xce\xcf\u0110\xd1\u0309\xd3\xd4\u01a0\xd6\xd7\xd8\xd9\xda\xdb\xdc\u01af\u0303\xdf\xe0\xe1\xe2\u0103\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\u0301\xed\xee\xef\u0111\xf1\u0323\xf3\xf4\u01a1\xf6\xf7\xf8\xf9\xfa\xfb\xfc\u01b0\u20ab\xff"},ibm1163:"cp1163",csibm1163:"cp1163",maccroatian:{type:"_sbcs",chars:"\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\u0160\u2122\xb4\xa8\u2260\u017d\xd8\u221e\xb1\u2264\u2265\u2206\xb5\u2202\u2211\u220f\u0161\u222b\xaa\xba\u2126\u017e\xf8\xbf\xa1\xac\u221a\u0192\u2248\u0106\xab\u010c\u2026\xa0\xc0\xc3\xd5\u0152\u0153\u0110\u2014\u201c\u201d\u2018\u2019\xf7\u25ca\ufffd\xa9\u2044\xa4\u2039\u203a\xc6\xbb\u2013\xb7\u201a\u201e\u2030\xc2\u0107\xc1\u010d\xc8\xcd\xce\xcf\xcc\xd3\xd4\u0111\xd2\xda\xdb\xd9\u0131\u02c6\u02dc\xaf\u03c0\xcb\u02da\xb8\xca\xe6\u02c7"},maccyrillic:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u2020\xb0\xa2\xa3\xa7\u2022\xb6\u0406\xae\xa9\u2122\u0402\u0452\u2260\u0403\u0453\u221e\xb1\u2264\u2265\u0456\xb5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040a\u045a\u0458\u0405\xac\u221a\u0192\u2248\u2206\xab\xbb\u2026\xa0\u040b\u045b\u040c\u045c\u0455\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u201e\u040e\u045e\u040f\u045f\u2116\u0401\u0451\u044f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\xa4"},macgreek:{type:"_sbcs",chars:"\xc4\xb9\xb2\xc9\xb3\xd6\xdc\u0385\xe0\xe2\xe4\u0384\xa8\xe7\xe9\xe8\xea\xeb\xa3\u2122\xee\xef\u2022\xbd\u2030\xf4\xf6\xa6\xad\xf9\xfb\xfc\u2020\u0393\u0394\u0398\u039b\u039e\u03a0\xdf\xae\xa9\u03a3\u03aa\xa7\u2260\xb0\u0387\u0391\xb1\u2264\u2265\xa5\u0392\u0395\u0396\u0397\u0399\u039a\u039c\u03a6\u03ab\u03a8\u03a9\u03ac\u039d\xac\u039f\u03a1\u2248\u03a4\xab\xbb\u2026\xa0\u03a5\u03a7\u0386\u0388\u0153\u2013\u2015\u201c\u201d\u2018\u2019\xf7\u0389\u038a\u038c\u038e\u03ad\u03ae\u03af\u03cc\u038f\u03cd\u03b1\u03b2\u03c8\u03b4\u03b5\u03c6\u03b3\u03b7\u03b9\u03be\u03ba\u03bb\u03bc\u03bd\u03bf\u03c0\u03ce\u03c1\u03c3\u03c4\u03b8\u03c9\u03c2\u03c7\u03c5\u03b6\u03ca\u03cb\u0390\u03b0\ufffd"},maciceland:{type:"_sbcs",chars:"\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xdd\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221e\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220f\u03c0\u222b\xaa\xba\u2126\xe6\xf8\xbf\xa1\xac\u221a\u0192\u2248\u2206\xab\xbb\u2026\xa0\xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u25ca\xff\u0178\u2044\xa4\xd0\xf0\xde\xfe\xfd\xb7\u201a\u201e\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\ufffd\xd2\xda\xdb\xd9\u0131\u02c6\u02dc\xaf\u02d8\u02d9\u02da\xb8\u02dd\u02db\u02c7"},macroman:{type:"_sbcs",chars:"\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221e\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220f\u03c0\u222b\xaa\xba\u2126\xe6\xf8\xbf\xa1\xac\u221a\u0192\u2248\u2206\xab\xbb\u2026\xa0\xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u25ca\xff\u0178\u2044\xa4\u2039\u203a\ufb01\ufb02\u2021\xb7\u201a\u201e\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\ufffd\xd2\xda\xdb\xd9\u0131\u02c6\u02dc\xaf\u02d8\u02d9\u02da\xb8\u02dd\u02db\u02c7"},macromania:{type:"_sbcs",chars:"\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\u0102\u015e\u221e\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220f\u03c0\u222b\xaa\xba\u2126\u0103\u015f\xbf\xa1\xac\u221a\u0192\u2248\u2206\xab\xbb\u2026\xa0\xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u25ca\xff\u0178\u2044\xa4\u2039\u203a\u0162\u0163\u2021\xb7\u201a\u201e\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\ufffd\xd2\xda\xdb\xd9\u0131\u02c6\u02dc\xaf\u02d8\u02d9\u02da\xb8\u02dd\u02db\u02c7"},macthai:{type:"_sbcs",chars:"\xab\xbb\u2026\uf88c\uf88f\uf892\uf895\uf898\uf88b\uf88e\uf891\uf894\uf897\u201c\u201d\uf899\ufffd\u2022\uf884\uf889\uf885\uf886\uf887\uf888\uf88a\uf88d\uf890\uf893\uf896\u2018\u2019\ufffd\xa0\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\ufeff\u200b\u2013\u2014\u0e3f\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u2122\u0e4f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\xae\xa9\ufffd\ufffd\ufffd\ufffd"},macturkish:{type:"_sbcs",chars:"\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221e\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220f\u03c0\u222b\xaa\xba\u2126\xe6\xf8\xbf\xa1\xac\u221a\u0192\u2248\u2206\xab\xbb\u2026\xa0\xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u25ca\xff\u0178\u011e\u011f\u0130\u0131\u015e\u015f\u2021\xb7\u201a\u201e\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\ufffd\xd2\xda\xdb\xd9\ufffd\u02c6\u02dc\xaf\u02d8\u02d9\u02da\xb8\u02dd\u02db\u02c7"},macukraine:{type:"_sbcs",chars:"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u2020\xb0\u0490\xa3\xa7\u2022\xb6\u0406\xae\xa9\u2122\u0402\u0452\u2260\u0403\u0453\u221e\xb1\u2264\u2265\u0456\xb5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040a\u045a\u0458\u0405\xac\u221a\u0192\u2248\u2206\xab\xbb\u2026\xa0\u040b\u045b\u040c\u045c\u0455\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u201e\u040e\u045e\u040f\u045f\u2116\u0401\u0451\u044f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\xa4"},koi8r:{type:"_sbcs",chars:"\u2500\u2502\u250c\u2510\u2514\u2518\u251c\u2524\u252c\u2534\u253c\u2580\u2584\u2588\u258c\u2590\u2591\u2592\u2593\u2320\u25a0\u2219\u221a\u2248\u2264\u2265\xa0\u2321\xb0\xb2\xb7\xf7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255a\u255b\u255c\u255d\u255e\u255f\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256a\u256b\u256c\xa9\u044e\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u044f\u0440\u0441\u0442\u0443\u0436\u0432\u044c\u044b\u0437\u0448\u044d\u0449\u0447\u044a\u042e\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u042f\u0420\u0421\u0422\u0423\u0416\u0412\u042c\u042b\u0417\u0428\u042d\u0429\u0427\u042a"},koi8u:{type:"_sbcs",chars:"\u2500\u2502\u250c\u2510\u2514\u2518\u251c\u2524\u252c\u2534\u253c\u2580\u2584\u2588\u258c\u2590\u2591\u2592\u2593\u2320\u25a0\u2219\u221a\u2248\u2264\u2265\xa0\u2321\xb0\xb2\xb7\xf7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255a\u255b\u0491\u255d\u255e\u255f\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256a\u0490\u256c\xa9\u044e\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u044f\u0440\u0441\u0442\u0443\u0436\u0432\u044c\u044b\u0437\u0448\u044d\u0449\u0447\u044a\u042e\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u042f\u0420\u0421\u0422\u0423\u0416\u0412\u042c\u042b\u0417\u0428\u042d\u0429\u0427\u042a"},koi8ru:{type:"_sbcs",chars:"\u2500\u2502\u250c\u2510\u2514\u2518\u251c\u2524\u252c\u2534\u253c\u2580\u2584\u2588\u258c\u2590\u2591\u2592\u2593\u2320\u25a0\u2219\u221a\u2248\u2264\u2265\xa0\u2321\xb0\xb2\xb7\xf7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255a\u255b\u0491\u045e\u255e\u255f\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256a\u0490\u040e\xa9\u044e\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u044f\u0440\u0441\u0442\u0443\u0436\u0432\u044c\u044b\u0437\u0448\u044d\u0449\u0447\u044a\u042e\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u042f\u0420\u0421\u0422\u0423\u0416\u0412\u042c\u042b\u0417\u0428\u042d\u0429\u0427\u042a"},koi8t:{type:"_sbcs",chars:"\u049b\u0493\u201a\u0492\u201e\u2026\u2020\u2021\ufffd\u2030\u04b3\u2039\u04b2\u04b7\u04b6\ufffd\u049a\u2018\u2019\u201c\u201d\u2022\u2013\u2014\ufffd\u2122\ufffd\u203a\ufffd\ufffd\ufffd\ufffd\ufffd\u04ef\u04ee\u0451\xa4\u04e3\xa6\xa7\ufffd\ufffd\ufffd\xab\xac\xad\xae\ufffd\xb0\xb1\xb2\u0401\ufffd\u04e2\xb6\xb7\ufffd\u2116\ufffd\xbb\ufffd\ufffd\ufffd\xa9\u044e\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u044f\u0440\u0441\u0442\u0443\u0436\u0432\u044c\u044b\u0437\u0448\u044d\u0449\u0447\u044a\u042e\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u042f\u0420\u0421\u0422\u0423\u0416\u0412\u042c\u042b\u0417\u0428\u042d\u0429\u0427\u042a"},armscii8:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\ufffd\u0587\u0589)(\xbb\xab\u2014.\u055d,-\u058a\u2026\u055c\u055b\u055e\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053a\u056a\u053b\u056b\u053c\u056c\u053d\u056d\u053e\u056e\u053f\u056f\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054a\u057a\u054b\u057b\u054c\u057c\u054d\u057d\u054e\u057e\u054f\u057f\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055a\ufffd"},rk1048:{type:"_sbcs",chars:"\u0402\u0403\u201a\u0453\u201e\u2026\u2020\u2021\u20ac\u2030\u0409\u2039\u040a\u049a\u04ba\u040f\u0452\u2018\u2019\u201c\u201d\u2022\u2013\u2014\ufffd\u2122\u0459\u203a\u045a\u049b\u04bb\u045f\xa0\u04b0\u04b1\u04d8\xa4\u04e8\xa6\xa7\u0401\xa9\u0492\xab\xac\xad\xae\u04ae\xb0\xb1\u0406\u0456\u04e9\xb5\xb6\xb7\u0451\u2116\u0493\xbb\u04d9\u04a2\u04a3\u04af\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f"},tcvn:{type:"_sbcs",chars:"\0\xda\u1ee4\x03\u1eea\u1eec\u1eee\x07\b\t\n\v\f\r\x0e\x0f\x10\u1ee8\u1ef0\u1ef2\u1ef6\u1ef8\xdd\u1ef4\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\xc0\u1ea2\xc3\xc1\u1ea0\u1eb6\u1eac\xc8\u1eba\u1ebc\xc9\u1eb8\u1ec6\xcc\u1ec8\u0128\xcd\u1eca\xd2\u1ece\xd5\xd3\u1ecc\u1ed8\u1edc\u1ede\u1ee0\u1eda\u1ee2\xd9\u1ee6\u0168\xa0\u0102\xc2\xca\xd4\u01a0\u01af\u0110\u0103\xe2\xea\xf4\u01a1\u01b0\u0111\u1eb0\u0300\u0309\u0303\u0301\u0323\xe0\u1ea3\xe3\xe1\u1ea1\u1eb2\u1eb1\u1eb3\u1eb5\u1eaf\u1eb4\u1eae\u1ea6\u1ea8\u1eaa\u1ea4\u1ec0\u1eb7\u1ea7\u1ea9\u1eab\u1ea5\u1ead\xe8\u1ec2\u1ebb\u1ebd\xe9\u1eb9\u1ec1\u1ec3\u1ec5\u1ebf\u1ec7\xec\u1ec9\u1ec4\u1ebe\u1ed2\u0129\xed\u1ecb\xf2\u1ed4\u1ecf\xf5\xf3\u1ecd\u1ed3\u1ed5\u1ed7\u1ed1\u1ed9\u1edd\u1edf\u1ee1\u1edb\u1ee3\xf9\u1ed6\u1ee7\u0169\xfa\u1ee5\u1eeb\u1eed\u1eef\u1ee9\u1ef1\u1ef3\u1ef7\u1ef9\xfd\u1ef5\u1ed0"},georgianacademy:{type:"_sbcs",chars:"\x80\x81\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\x8d\x8e\x8f\x90\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\x9d\x9e\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10e3\u10e4\u10e5\u10e6\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10ef\u10f0\u10f1\u10f2\u10f3\u10f4\u10f5\u10f6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},georgianps:{type:"_sbcs",chars:"\x80\x81\u201a\u0192\u201e\u2026\u2020\u2021\u02c6\u2030\u0160\u2039\u0152\x8d\x8e\x8f\x90\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u02dc\u2122\u0161\u203a\u0153\x9d\x9e\u0178\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6\u10f1\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10f2\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10f3\u10e3\u10e4\u10e5\u10e6\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10f4\u10ef\u10f0\u10f5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"},pt154:{type:"_sbcs",chars:"\u0496\u0492\u04ee\u0493\u201e\u2026\u04b6\u04ae\u04b2\u04af\u04a0\u04e2\u04a2\u049a\u04ba\u04b8\u0497\u2018\u2019\u201c\u201d\u2022\u2013\u2014\u04b3\u04b7\u04a1\u04e3\u04a3\u049b\u04bb\u04b9\xa0\u040e\u045e\u0408\u04e8\u0498\u04b0\xa7\u0401\xa9\u04d8\xab\xac\u04ef\xae\u049c\xb0\u04b1\u0406\u0456\u0499\u04e9\xb6\xb7\u0451\u2116\u04d9\xbb\u0458\u04aa\u04ab\u049d\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f"},viscii:{type:"_sbcs",chars:"\0\x01\u1eb2\x03\x04\u1eb4\u1eaa\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\u1ef6\x15\x16\x17\x18\u1ef8\x1a\x1b\x1c\x1d\u1ef4\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\u1ea0\u1eae\u1eb0\u1eb6\u1ea4\u1ea6\u1ea8\u1eac\u1ebc\u1eb8\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1ee2\u1eda\u1edc\u1ede\u1eca\u1ece\u1ecc\u1ec8\u1ee6\u0168\u1ee4\u1ef2\xd5\u1eaf\u1eb1\u1eb7\u1ea5\u1ea7\u1ea9\u1ead\u1ebd\u1eb9\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ed1\u1ed3\u1ed5\u1ed7\u1ee0\u01a0\u1ed9\u1edd\u1edf\u1ecb\u1ef0\u1ee8\u1eea\u1eec\u01a1\u1edb\u01af\xc0\xc1\xc2\xc3\u1ea2\u0102\u1eb3\u1eb5\xc8\xc9\xca\u1eba\xcc\xcd\u0128\u1ef3\u0110\u1ee9\xd2\xd3\xd4\u1ea1\u1ef7\u1eeb\u1eed\xd9\xda\u1ef9\u1ef5\xdd\u1ee1\u01b0\xe0\xe1\xe2\xe3\u1ea3\u0103\u1eef\u1eab\xe8\xe9\xea\u1ebb\xec\xed\u0129\u1ec9\u0111\u1ef1\xf2\xf3\xf4\xf5\u1ecf\u1ecd\u1ee5\xf9\xfa\u0169\u1ee7\xfd\u1ee3\u1eee"},iso646cn:{type:"_sbcs",chars:"\0\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#\xa5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203e\x7f\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd"},iso646jp:{type:"_sbcs",chars:"\0\x01\x02\x03\x04\x05\x06\x07\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\xa5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203e\x7f\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd"},hproman8:{type:"_sbcs",chars:"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xc0\xc2\xc8\xca\xcb\xce\xcf\xb4\u02cb\u02c6\xa8\u02dc\xd9\xdb\u20a4\xaf\xdd\xfd\xb0\xc7\xe7\xd1\xf1\xa1\xbf\xa4\xa3\xa5\xa7\u0192\xa2\xe2\xea\xf4\xfb\xe1\xe9\xf3\xfa\xe0\xe8\xf2\xf9\xe4\xeb\xf6\xfc\xc5\xee\xd8\xc6\xe5\xed\xf8\xe6\xc4\xec\xd6\xdc\xc9\xef\xdf\xd4\xc1\xc3\xe3\xd0\xf0\xcd\xcc\xd3\xd2\xd5\xf5\u0160\u0161\xda\u0178\xff\xde\xfe\xb7\xb5\xb6\xbe\u2014\xbc\xbd\xaa\xba\xab\u25a0\xbb\xb1\ufffd"},macintosh:{type:"_sbcs",chars:"\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221e\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220f\u03c0\u222b\xaa\xba\u2126\xe6\xf8\xbf\xa1\xac\u221a\u0192\u2248\u2206\xab\xbb\u2026\xa0\xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201c\u201d\u2018\u2019\xf7\u25ca\xff\u0178\u2044\xa4\u2039\u203a\ufb01\ufb02\u2021\xb7\u201a\u201e\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\ufffd\xd2\xda\xdb\xd9\u0131\u02c6\u02dc\xaf\u02d8\u02d9\u02da\xb8\u02dd\u02db\u02c7"},ascii:{type:"_sbcs",chars:"\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd"},tis620:{type:"_sbcs",chars:"\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\ufffd\ufffd\ufffd\ufffd\u0e3f\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0e4f\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0e5a\u0e5b\ufffd\ufffd\ufffd\ufffd"}}},gOaY:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("K9Ia"),i=n("ny24"),o=n("Vx+w"),s=(n("UVPe"),n("+3se")),a=(n("CMBB"),n("CPDd"),n("Z5Gg"),function(){function e(e,t,n){this.guestService=e,this.addressCheckService=t,this.spinner=n,this.wifiEnabled=!0,this.ngUnsubscribe=new r.a,this.radioPrefix="radio",this.enable=!1,this.keyInputType="password",this.guest_key="pink-unicorn",this.guest_ssid="devolo-guest",this.guest_device="",this.current_guest_radio="",this.regExSsid=this.addressCheckService.vapRegExSsid,this.regExPass=this.addressCheckService.vapRegExPass,this.regExPassphrase=this.addressCheckService.vapRegExPassphrase,this.regExPSK=this.addressCheckService.vapRegExPSK,this.hasRadio0=Object(s.g)(o.a.wireless.devices.radio0),this.hasRadio1=Object(s.g)(o.a.wireless.devices.radio1),this.radio0Band=this.hasRadio0&&5==o.a.wireless.devices.radio0.frequency?Object(s.b)("5 GHz"):Object(s.b)("2.4 GHz"),this.radio1Band=this.hasRadio1&&5==o.a.wireless.devices.radio1.frequency?Object(s.b)("5 GHz"):Object(s.b)("2.4 GHz"),this.encryptionOptions={"psk-mixed+tkip+ccmp":"WPA/WPA2",psk2:"WPA2",wpa2:"WPA2",none:"open"},this.enableWifiTimeout=!1,this.wifiTimeout="06:00",this.fake_enableWifiTimeout=!1,this.fake_wifiTimeout="06:00",this.serverTimeDifference=0,this.checkKeyLength=function(){return!Object(s.h)(this.guest_key)&&this.guest_key.length>=8}}return e.prototype.ngOnInit=function(){var e=this;this.spinner.show(),this.getGuests(),this.guestService.getServerTime().subscribe(function(t){e.serverTimeDifference=Math.floor((new Date).getTime()/1e3)-t}),this.guestService.getAutoSwitchOffConfig().subscribe(function(t){e.enableWifiTimeout=t.auto_switch_off,e.wifiTimeout=t.interval||"06:00",e.fake_enableWifiTimeout=e.enableWifiTimeout,e.fake_wifiTimeout=e.wifiTimeout})},e.prototype.getGuests=function(){var e=this;this.guestService.getGuests().pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){e._vaps=t.result[0][1].values,e._radios=t.result[1][1].values,e.guestNetworks=t.result[2][1].values;var n=!1,r=!1;for(var i in 0==t.result[1][0]&&Object(s.g)(t.result[1][1].values.wifi0)&&(e.radioPrefix="wifi"),e._vaps)"1"==e._vaps[i].dvl_guest&&(e._vaps[i].device===e.radioPrefix.concat("0")&&(n=Object(s.h)(e._vaps[i].disabled)||"0"==e._vaps[i].disabled),e._vaps[i].device===e.radioPrefix.concat("1")&&(r=Object(s.h)(e._vaps[i].disabled)||"0"==e._vaps[i].disabled),e.guest_ssid=e._vaps[i].ssid,e.guest_key=e._vaps[i].key,(Object(s.h)(e._vaps[i].disabled)||"0"==e._vaps[i].disabled)&&(e.enable=!0),e.guestEncription=e._vaps[i].encryption,e.guestEncriptionLabel=e.encryptionOptions[e._vaps[i].encryption],e.qr="WIFI:S:"+e.guest_ssid+";T:"+e.guestEncriptionLabel+";P:"+e.guest_key+";");for(var o in n&&!r?(e.guest_device="radio0",e.current_guest_radio="radio0"):r&&!n?(e.guest_device="radio1",e.current_guest_radio="radio1"):e.hasRadio0&&e.hasRadio1?(e.guest_device="radio1+radio0",e.current_guest_radio="radio1+radio0"):(e.guest_device="radio0",e.current_guest_radio="radio0"),e.wifiEnabled=!1,e.radio1Enabled=!1,e.radio0Enabled=!1,e._radios)e._radios.hasOwnProperty(o)&&((0==e._radios[o].disabled||Object(s.h)(e._radios[o].disabled))&&(e.wifiEnabled=!0),"wifi0"==o&&(0==e._radios[o].disabled||Object(s.h)(e._radios[o].disabled))&&(e.radio0Enabled=!0),"wifi1"==o&&(0==e._radios[o].disabled||Object(s.h)(e._radios[o].disabled))&&(e.radio1Enabled=!0));"radio0"!=e.current_guest_radio||e.radio0Enabled||(e.enable=!1,e.radio1Enabled&&(e.guest_device="radio1")),"radio1"!=e.current_guest_radio||e.radio1Enabled||(e.enable=!1,e.radio0Enabled&&(e.guest_device="radio0")),"radio1+radio0"!=e.current_guest_radio||e.radio0Enabled&&e.radio1Enabled||0!=e.enable&&(e.radio0Enabled?(e.enable=!0,e.guest_device="radio0"):e.radio1Enabled?(e.enable=!0,e.guest_device="radio1"):e.enable=!1),e.setRequiredSsidKey(),e.setFakeData(),e.spinner.hide()})},e.prototype.save=function(){var e=this;this.spinner.show();var t,n={disabled:!this.guest_device.includes("radio0")||!this.enable,ssid:this.guest_ssid,key:this.guest_key,encryption:this.guestEncription},r={disabled:!this.guest_device.includes("radio1")||!this.enable,ssid:this.guest_ssid,key:this.guest_key,encryption:this.guestEncription};this.isTimeoutModified()&&(t={auto_switch_off:this.enableWifiTimeout,interval:this.wifiTimeout},this.enableWifiTimeout&&this.enable&&(t.starttime=Math.floor(Date.now()/1e3)-this.serverTimeDifference)),this.guestService.saveGuestNetworks(this.guestNetworks,n,r,t).subscribe(function(){e.getGuests(),e.setFakeData(),e.cleanupForm(),e.timeoutHint.update()})},e.prototype.setFakeData=function(){this.fake_guest_key=this.guest_key,this.fake_guest_ssid=this.guest_ssid,this.fake_enable=this.enable,this.fake_guest_device=this.guest_device,this.fake_enableWifiTimeout=this.enableWifiTimeout,this.fake_wifiTimeout=this.wifiTimeout,this.fake_guestEncription=this.guestEncription},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.cleanupForm=function(){this.delos.form.markAsUntouched(),this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity(),this.guest_key=this.fake_guest_key,this.guest_ssid=this.fake_guest_ssid,this.keyInputType="password",this.enable=this.fake_enable,this.guest_device=this.fake_guest_device,this.enableWifiTimeout=this.fake_enableWifiTimeout,this.wifiTimeout=this.fake_wifiTimeout,this.guestEncription=this.fake_guestEncription},e.prototype.ssidCheck=function(e){var t=this;return Object(s.g)(e)&&!e.match(this.regExSsid)?(this.ssid_error=Object(s.b)("Invalid SSID! Please enter between 1 and 32 characters. Allowed special characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"),this.markAsInvalid(),!1):""!=e&&(this.ssid_error="",void setTimeout(function(){t.delos.controls.radio0name&&t.delos.controls.radio0name.setErrors(null),t.delos.controls.radi10name&&t.delos.controls.radi10name.setErrors(null)},0))},e.prototype.keySsidCheck=function(e){var t=this;if(Object(s.g)(e))if(64==e.length){if(!e.match(this.regExPSK))return this.key_ssid_error=Object(s.b)("Invalid pre-shared key! Please enter 64 hexadecimal characters. Allowed characters: 0 1 2 3 4 5 6 7 8 9 a b c d e f"),!1}else if(!e.match(this.regExPassphrase))return this.key_ssid_error=Object(s.b)("Invalid Key! Please enter between 8 and 63 characters. Allowed special characters: ! @ # $ % ^ & * ) ( [ ] { } | , : ; ' \"  ` ~ + = . _ / ? \\ < >"),!1;if(""==e)return!1;this.key_ssid_error="",setTimeout(function(){t.delos.controls.keySsid&&t.delos.controls.keySsid.setErrors(null),t.delos.controls.keySsid&&t.delos.controls.keySsid.setErrors(null)},0)},e.prototype.toggleKeyVisibility=function(){this.keyInputType="password"===this.keyInputType?"text":"password"},e.prototype.onEncryptionChange=function(e){this.keyInputType="password",!e.key||"psk-mixed+tkip+ccmp"===e.encryption&&"psk2"===e.encryption||(e.key=void 0),this.setRequiredSsidKey()},e.prototype.setRequiredSsidKey=function(){this.guest_key_required=1==this.enable&&"none"!=this.guestEncription},e.prototype.synchRadio=function(){1==this.enable&&(this.radio0Enabled&&!this.radio1Enabled&&(this.guest_device="radio0"),!this.radio0Enabled&&this.radio1Enabled&&(this.guest_device="radio1"))},e.prototype.markAsInvalid=function(){this.delos.form.setErrors({incorrect:!0})},e.prototype.isTimeoutModified=function(){return this.fake_enable!=this.enable||this.fake_enableWifiTimeout!=this.enableWifiTimeout||this.fake_wifiTimeout!=this.wifiTimeout},e}())},hHSr:function(e){e.exports=[["a140","\ue4c6",62],["a180","\ue505",32],["a240","\ue526",62],["a280","\ue565",32],["a2ab","\ue766",5],["a2e3","\u20ac\ue76d"],["a2ef","\ue76e\ue76f"],["a2fd","\ue770\ue771"],["a340","\ue586",62],["a380","\ue5c5",31,"\u3000"],["a440","\ue5e6",62],["a480","\ue625",32],["a4f4","\ue772",10],["a540","\ue646",62],["a580","\ue685",32],["a5f7","\ue77d",7],["a640","\ue6a6",62],["a680","\ue6e5",32],["a6b9","\ue785",7],["a6d9","\ue78d",6],["a6ec","\ue794\ue795"],["a6f3","\ue796"],["a6f6","\ue797",8],["a740","\ue706",62],["a780","\ue745",32],["a7c2","\ue7a0",14],["a7f2","\ue7af",12],["a896","\ue7bc",10],["a8bc","\ue7c7"],["a8bf","\u01f9"],["a8c1","\ue7c9\ue7ca\ue7cb\ue7cc"],["a8ea","\ue7cd",20],["a958","\ue7e2"],["a95b","\ue7e3"],["a95d","\ue7e4\ue7e5\ue7e6"],["a989","\u303e\u2ff0",11],["a997","\ue7f4",12],["a9f0","\ue801",14],["aaa1","\ue000",93],["aba1","\ue05e",93],["aca1","\ue0bc",93],["ada1","\ue11a",93],["aea1","\ue178",93],["afa1","\ue1d6",93],["d7fa","\ue810",4],["f8a1","\ue234",93],["f9a1","\ue292",93],["faa1","\ue2f0",93],["fba1","\ue34e",93],["fca1","\ue3ac",93],["fda1","\ue40a",93],["fe50","\u2e81\ue816\ue817\ue818\u2e84\u3473\u3447\u2e88\u2e8b\ue81e\u359e\u361a\u360e\u2e8c\u2e97\u396e\u3918\ue826\u39cf\u39df\u3a73\u39d0\ue82b\ue82c\u3b4e\u3c6e\u3ce0\u2ea7\ue831\ue832\u2eaa\u4056\u415f\u2eae\u4337\u2eb3\u2eb6\u2eb7\ue83b\u43b1\u43ac\u2ebb\u43dd\u44d6\u4661\u464c\ue843"],["fe80","\u4723\u4729\u477c\u478d\u2eca\u4947\u497a\u497d\u4982\u4983\u4985\u4986\u499f\u499b\u49b7\u49b6\ue854\ue855\u4ca3\u4c9f\u4ca0\u4ca1\u4c77\u4ca2\u4d13",6,"\u4dae\ue864\ue468",93]]},hjjD:function(e,t,n){"use strict";var r=function(){function e(e,t){this.open=e,this.close=t||e}return e.prototype.isManual=function(){return"manual"===this.open||"manual"===this.close},e}();n.d(t,"b",function(){return o}),n.d(t,"a",function(){return s}),n.d(t,"c",function(){return a});var i={hover:["mouseover","mouseout"],focus:["focusin","focusout"]};function o(e,t){void 0===t&&(t=i);var n=(e||"").trim();if(0===n.length)return[];var o=n.split(/\s+/).map(function(e){return e.split(":")}).map(function(e){var n=t[e[0]]||e;return new r(n[0],n[1])}),s=o.filter(function(e){return e.isManual()});if(s.length>1)throw new Error("Triggers parse error: only one manual trigger is allowed");if(1===s.length&&o.length>1)throw new Error("Triggers parse error: manual trigger can't be mixed with other triggers");return o}function s(e,t){var n=o(t.triggers),r=t.target;if(1===n.length&&n[0].isManual())return Function.prototype;var i=[],s=[],a=function(){s.forEach(function(e){return i.push(e())}),s.length=0};return n.forEach(function(n){var o=n.open===n.close,u=o?t.toggle:t.show;o||s.push(function(){return e.listen(r,n.close,t.hide)}),i.push(e.listen(r,n.open,function(){return u(a)}))}),function(){i.forEach(function(e){return e()})}}function a(e,t){return t.outsideClick?e.listen("document","click",function(e){t.target&&t.target.contains(e.target)||t.targets&&t.targets.some(function(t){return t.contains(e.target)})||t.hide()}):Function.prototype}},htfN:function(e){e.exports=[["0","\0",127],["a140","\u3000\uff0c\u3001\u3002\uff0e\u2027\uff1b\uff1a\uff1f\uff01\ufe30\u2026\u2025\ufe50\ufe51\ufe52\xb7\ufe54\ufe55\ufe56\ufe57\uff5c\u2013\ufe31\u2014\ufe33\u2574\ufe34\ufe4f\uff08\uff09\ufe35\ufe36\uff5b\uff5d\ufe37\ufe38\u3014\u3015\ufe39\ufe3a\u3010\u3011\ufe3b\ufe3c\u300a\u300b\ufe3d\ufe3e\u3008\u3009\ufe3f\ufe40\u300c\u300d\ufe41\ufe42\u300e\u300f\ufe43\ufe44\ufe59\ufe5a"],["a1a1","\ufe5b\ufe5c\ufe5d\ufe5e\u2018\u2019\u201c\u201d\u301d\u301e\u2035\u2032\uff03\uff06\uff0a\u203b\xa7\u3003\u25cb\u25cf\u25b3\u25b2\u25ce\u2606\u2605\u25c7\u25c6\u25a1\u25a0\u25bd\u25bc\u32a3\u2105\xaf\uffe3\uff3f\u02cd\ufe49\ufe4a\ufe4d\ufe4e\ufe4b\ufe4c\ufe5f\ufe60\ufe61\uff0b\uff0d\xd7\xf7\xb1\u221a\uff1c\uff1e\uff1d\u2266\u2267\u2260\u221e\u2252\u2261\ufe62",4,"\uff5e\u2229\u222a\u22a5\u2220\u221f\u22bf\u33d2\u33d1\u222b\u222e\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uff0f"],["a240","\uff3c\u2215\ufe68\uff04\uffe5\u3012\uffe0\uffe1\uff05\uff20\u2103\u2109\ufe69\ufe6a\ufe6b\u33d5\u339c\u339d\u339e\u33ce\u33a1\u338e\u338f\u33c4\xb0\u5159\u515b\u515e\u515d\u5161\u5163\u55e7\u74e9\u7cce\u2581",7,"\u258f\u258e\u258d\u258c\u258b\u258a\u2589\u253c\u2534\u252c\u2524\u251c\u2594\u2500\u2502\u2595\u250c\u2510\u2514\u2518\u256d"],["a2a1","\u256e\u2570\u256f\u2550\u255e\u256a\u2561\u25e2\u25e3\u25e5\u25e4\u2571\u2572\u2573\uff10",9,"\u2160",9,"\u3021",8,"\u5341\u5344\u5345\uff21",25,"\uff41",21],["a340","\uff57\uff58\uff59\uff5a\u0391",16,"\u03a3",6,"\u03b1",16,"\u03c3",6,"\u3105",10],["a3a1","\u3110",25,"\u02d9\u02c9\u02ca\u02c7\u02cb"],["a3e1","\u20ac"],["a440","\u4e00\u4e59\u4e01\u4e03\u4e43\u4e5d\u4e86\u4e8c\u4eba\u513f\u5165\u516b\u51e0\u5200\u5201\u529b\u5315\u5341\u535c\u53c8\u4e09\u4e0b\u4e08\u4e0a\u4e2b\u4e38\u51e1\u4e45\u4e48\u4e5f\u4e5e\u4e8e\u4ea1\u5140\u5203\u52fa\u5343\u53c9\u53e3\u571f\u58eb\u5915\u5927\u5973\u5b50\u5b51\u5b53\u5bf8\u5c0f\u5c22\u5c38\u5c71\u5ddd\u5de5\u5df1\u5df2\u5df3\u5dfe\u5e72\u5efe\u5f0b\u5f13\u624d"],["a4a1","\u4e11\u4e10\u4e0d\u4e2d\u4e30\u4e39\u4e4b\u5c39\u4e88\u4e91\u4e95\u4e92\u4e94\u4ea2\u4ec1\u4ec0\u4ec3\u4ec6\u4ec7\u4ecd\u4eca\u4ecb\u4ec4\u5143\u5141\u5167\u516d\u516e\u516c\u5197\u51f6\u5206\u5207\u5208\u52fb\u52fe\u52ff\u5316\u5339\u5348\u5347\u5345\u535e\u5384\u53cb\u53ca\u53cd\u58ec\u5929\u592b\u592a\u592d\u5b54\u5c11\u5c24\u5c3a\u5c6f\u5df4\u5e7b\u5eff\u5f14\u5f15\u5fc3\u6208\u6236\u624b\u624e\u652f\u6587\u6597\u65a4\u65b9\u65e5\u66f0\u6708\u6728\u6b20\u6b62\u6b79\u6bcb\u6bd4\u6bdb\u6c0f\u6c34\u706b\u722a\u7236\u723b\u7247\u7259\u725b\u72ac\u738b\u4e19"],["a540","\u4e16\u4e15\u4e14\u4e18\u4e3b\u4e4d\u4e4f\u4e4e\u4ee5\u4ed8\u4ed4\u4ed5\u4ed6\u4ed7\u4ee3\u4ee4\u4ed9\u4ede\u5145\u5144\u5189\u518a\u51ac\u51f9\u51fa\u51f8\u520a\u52a0\u529f\u5305\u5306\u5317\u531d\u4edf\u534a\u5349\u5361\u5360\u536f\u536e\u53bb\u53ef\u53e4\u53f3\u53ec\u53ee\u53e9\u53e8\u53fc\u53f8\u53f5\u53eb\u53e6\u53ea\u53f2\u53f1\u53f0\u53e5\u53ed\u53fb\u56db\u56da\u5916"],["a5a1","\u592e\u5931\u5974\u5976\u5b55\u5b83\u5c3c\u5de8\u5de7\u5de6\u5e02\u5e03\u5e73\u5e7c\u5f01\u5f18\u5f17\u5fc5\u620a\u6253\u6254\u6252\u6251\u65a5\u65e6\u672e\u672c\u672a\u672b\u672d\u6b63\u6bcd\u6c11\u6c10\u6c38\u6c41\u6c40\u6c3e\u72af\u7384\u7389\u74dc\u74e6\u7518\u751f\u7528\u7529\u7530\u7531\u7532\u7533\u758b\u767d\u76ae\u76bf\u76ee\u77db\u77e2\u77f3\u793a\u79be\u7a74\u7acb\u4e1e\u4e1f\u4e52\u4e53\u4e69\u4e99\u4ea4\u4ea6\u4ea5\u4eff\u4f09\u4f19\u4f0a\u4f15\u4f0d\u4f10\u4f11\u4f0f\u4ef2\u4ef6\u4efb\u4ef0\u4ef3\u4efd\u4f01\u4f0b\u5149\u5147\u5146\u5148\u5168"],["a640","\u5171\u518d\u51b0\u5217\u5211\u5212\u520e\u5216\u52a3\u5308\u5321\u5320\u5370\u5371\u5409\u540f\u540c\u540a\u5410\u5401\u540b\u5404\u5411\u540d\u5408\u5403\u540e\u5406\u5412\u56e0\u56de\u56dd\u5733\u5730\u5728\u572d\u572c\u572f\u5729\u5919\u591a\u5937\u5938\u5984\u5978\u5983\u597d\u5979\u5982\u5981\u5b57\u5b58\u5b87\u5b88\u5b85\u5b89\u5bfa\u5c16\u5c79\u5dde\u5e06\u5e76\u5e74"],["a6a1","\u5f0f\u5f1b\u5fd9\u5fd6\u620e\u620c\u620d\u6210\u6263\u625b\u6258\u6536\u65e9\u65e8\u65ec\u65ed\u66f2\u66f3\u6709\u673d\u6734\u6731\u6735\u6b21\u6b64\u6b7b\u6c16\u6c5d\u6c57\u6c59\u6c5f\u6c60\u6c50\u6c55\u6c61\u6c5b\u6c4d\u6c4e\u7070\u725f\u725d\u767e\u7af9\u7c73\u7cf8\u7f36\u7f8a\u7fbd\u8001\u8003\u800c\u8012\u8033\u807f\u8089\u808b\u808c\u81e3\u81ea\u81f3\u81fc\u820c\u821b\u821f\u826e\u8272\u827e\u866b\u8840\u884c\u8863\u897f\u9621\u4e32\u4ea8\u4f4d\u4f4f\u4f47\u4f57\u4f5e\u4f34\u4f5b\u4f55\u4f30\u4f50\u4f51\u4f3d\u4f3a\u4f38\u4f43\u4f54\u4f3c\u4f46\u4f63"],["a740","\u4f5c\u4f60\u4f2f\u4f4e\u4f36\u4f59\u4f5d\u4f48\u4f5a\u514c\u514b\u514d\u5175\u51b6\u51b7\u5225\u5224\u5229\u522a\u5228\u52ab\u52a9\u52aa\u52ac\u5323\u5373\u5375\u541d\u542d\u541e\u543e\u5426\u544e\u5427\u5446\u5443\u5433\u5448\u5442\u541b\u5429\u544a\u5439\u543b\u5438\u542e\u5435\u5436\u5420\u543c\u5440\u5431\u542b\u541f\u542c\u56ea\u56f0\u56e4\u56eb\u574a\u5751\u5740\u574d"],["a7a1","\u5747\u574e\u573e\u5750\u574f\u573b\u58ef\u593e\u599d\u5992\u59a8\u599e\u59a3\u5999\u5996\u598d\u59a4\u5993\u598a\u59a5\u5b5d\u5b5c\u5b5a\u5b5b\u5b8c\u5b8b\u5b8f\u5c2c\u5c40\u5c41\u5c3f\u5c3e\u5c90\u5c91\u5c94\u5c8c\u5deb\u5e0c\u5e8f\u5e87\u5e8a\u5ef7\u5f04\u5f1f\u5f64\u5f62\u5f77\u5f79\u5fd8\u5fcc\u5fd7\u5fcd\u5ff1\u5feb\u5ff8\u5fea\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626d\u628a\u627c\u627e\u6279\u6273\u6292\u626f\u6298\u626e\u6295\u6293\u6291\u6286\u6539\u653b\u6538\u65f1\u66f4\u675f\u674e\u674f\u6750\u6751\u675c\u6756\u675e\u6749\u6746\u6760"],["a840","\u6753\u6757\u6b65\u6bcf\u6c42\u6c5e\u6c99\u6c81\u6c88\u6c89\u6c85\u6c9b\u6c6a\u6c7a\u6c90\u6c70\u6c8c\u6c68\u6c96\u6c92\u6c7d\u6c83\u6c72\u6c7e\u6c74\u6c86\u6c76\u6c8d\u6c94\u6c98\u6c82\u7076\u707c\u707d\u7078\u7262\u7261\u7260\u72c4\u72c2\u7396\u752c\u752b\u7537\u7538\u7682\u76ef\u77e3\u79c1\u79c0\u79bf\u7a76\u7cfb\u7f55\u8096\u8093\u809d\u8098\u809b\u809a\u80b2\u826f\u8292"],["a8a1","\u828b\u828d\u898b\u89d2\u8a00\u8c37\u8c46\u8c55\u8c9d\u8d64\u8d70\u8db3\u8eab\u8eca\u8f9b\u8fb0\u8fc2\u8fc6\u8fc5\u8fc4\u5de1\u9091\u90a2\u90aa\u90a6\u90a3\u9149\u91c6\u91cc\u9632\u962e\u9631\u962a\u962c\u4e26\u4e56\u4e73\u4e8b\u4e9b\u4e9e\u4eab\u4eac\u4f6f\u4f9d\u4f8d\u4f73\u4f7f\u4f6c\u4f9b\u4f8b\u4f86\u4f83\u4f70\u4f75\u4f88\u4f69\u4f7b\u4f96\u4f7e\u4f8f\u4f91\u4f7a\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51bd\u51fd\u523b\u5238\u5237\u523a\u5230\u522e\u5236\u5241\u52be\u52bb\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53d6\u53d4\u53d7\u5473\u5475"],["a940","\u5496\u5478\u5495\u5480\u547b\u5477\u5484\u5492\u5486\u547c\u5490\u5471\u5476\u548c\u549a\u5462\u5468\u548b\u547d\u548e\u56fa\u5783\u5777\u576a\u5769\u5761\u5766\u5764\u577c\u591c\u5949\u5947\u5948\u5944\u5954\u59be\u59bb\u59d4\u59b9\u59ae\u59d1\u59c6\u59d0\u59cd\u59cb\u59d3\u59ca\u59af\u59b3\u59d2\u59c5\u5b5f\u5b64\u5b63\u5b97\u5b9a\u5b98\u5b9c\u5b99\u5b9b\u5c1a\u5c48\u5c45"],["a9a1","\u5c46\u5cb7\u5ca1\u5cb8\u5ca9\u5cab\u5cb1\u5cb3\u5e18\u5e1a\u5e16\u5e15\u5e1b\u5e11\u5e78\u5e9a\u5e97\u5e9c\u5e95\u5e96\u5ef6\u5f26\u5f27\u5f29\u5f80\u5f81\u5f7f\u5f7c\u5fdd\u5fe0\u5ffd\u5ff5\u5fff\u600f\u6014\u602f\u6035\u6016\u602a\u6015\u6021\u6027\u6029\u602b\u601b\u6216\u6215\u623f\u623e\u6240\u627f\u62c9\u62cc\u62c4\u62bf\u62c2\u62b9\u62d2\u62db\u62ab\u62d3\u62d4\u62cb\u62c8\u62a8\u62bd\u62bc\u62d0\u62d9\u62c7\u62cd\u62b5\u62da\u62b1\u62d8\u62d6\u62d7\u62c6\u62ac\u62ce\u653e\u65a7\u65bc\u65fa\u6614\u6613\u660c\u6606\u6602\u660e\u6600\u660f\u6615\u660a"],["aa40","\u6607\u670d\u670b\u676d\u678b\u6795\u6771\u679c\u6773\u6777\u6787\u679d\u6797\u676f\u6770\u677f\u6789\u677e\u6790\u6775\u679a\u6793\u677c\u676a\u6772\u6b23\u6b66\u6b67\u6b7f\u6c13\u6c1b\u6ce3\u6ce8\u6cf3\u6cb1\u6ccc\u6ce5\u6cb3\u6cbd\u6cbe\u6cbc\u6ce2\u6cab\u6cd5\u6cd3\u6cb8\u6cc4\u6cb9\u6cc1\u6cae\u6cd7\u6cc5\u6cf1\u6cbf\u6cbb\u6ce1\u6cdb\u6cca\u6cac\u6cef\u6cdc\u6cd6\u6ce0"],["aaa1","\u7095\u708e\u7092\u708a\u7099\u722c\u722d\u7238\u7248\u7267\u7269\u72c0\u72ce\u72d9\u72d7\u72d0\u73a9\u73a8\u739f\u73ab\u73a5\u753d\u759d\u7599\u759a\u7684\u76c2\u76f2\u76f4\u77e5\u77fd\u793e\u7940\u7941\u79c9\u79c8\u7a7a\u7a79\u7afa\u7cfe\u7f54\u7f8c\u7f8b\u8005\u80ba\u80a5\u80a2\u80b1\u80a1\u80ab\u80a9\u80b4\u80aa\u80af\u81e5\u81fe\u820d\u82b3\u829d\u8299\u82ad\u82bd\u829f\u82b9\u82b1\u82ac\u82a5\u82af\u82b8\u82a3\u82b0\u82be\u82b7\u864e\u8671\u521d\u8868\u8ecb\u8fce\u8fd4\u8fd1\u90b5\u90b8\u90b1\u90b6\u91c7\u91d1\u9577\u9580\u961c\u9640\u963f\u963b\u9644"],["ab40","\u9642\u96b9\u96e8\u9752\u975e\u4e9f\u4ead\u4eae\u4fe1\u4fb5\u4faf\u4fbf\u4fe0\u4fd1\u4fcf\u4fdd\u4fc3\u4fb6\u4fd8\u4fdf\u4fca\u4fd7\u4fae\u4fd0\u4fc4\u4fc2\u4fda\u4fce\u4fde\u4fb7\u5157\u5192\u5191\u51a0\u524e\u5243\u524a\u524d\u524c\u524b\u5247\u52c7\u52c9\u52c3\u52c1\u530d\u5357\u537b\u539a\u53db\u54ac\u54c0\u54a8\u54ce\u54c9\u54b8\u54a6\u54b3\u54c7\u54c2\u54bd\u54aa\u54c1"],["aba1","\u54c4\u54c8\u54af\u54ab\u54b1\u54bb\u54a9\u54a7\u54bf\u56ff\u5782\u578b\u57a0\u57a3\u57a2\u57ce\u57ae\u5793\u5955\u5951\u594f\u594e\u5950\u59dc\u59d8\u59ff\u59e3\u59e8\u5a03\u59e5\u59ea\u59da\u59e6\u5a01\u59fb\u5b69\u5ba3\u5ba6\u5ba4\u5ba2\u5ba5\u5c01\u5c4e\u5c4f\u5c4d\u5c4b\u5cd9\u5cd2\u5df7\u5e1d\u5e25\u5e1f\u5e7d\u5ea0\u5ea6\u5efa\u5f08\u5f2d\u5f65\u5f88\u5f85\u5f8a\u5f8b\u5f87\u5f8c\u5f89\u6012\u601d\u6020\u6025\u600e\u6028\u604d\u6070\u6068\u6062\u6046\u6043\u606c\u606b\u606a\u6064\u6241\u62dc\u6316\u6309\u62fc\u62ed\u6301\u62ee\u62fd\u6307\u62f1\u62f7"],["ac40","\u62ef\u62ec\u62fe\u62f4\u6311\u6302\u653f\u6545\u65ab\u65bd\u65e2\u6625\u662d\u6620\u6627\u662f\u661f\u6628\u6631\u6624\u66f7\u67ff\u67d3\u67f1\u67d4\u67d0\u67ec\u67b6\u67af\u67f5\u67e9\u67ef\u67c4\u67d1\u67b4\u67da\u67e5\u67b8\u67cf\u67de\u67f3\u67b0\u67d9\u67e2\u67dd\u67d2\u6b6a\u6b83\u6b86\u6bb5\u6bd2\u6bd7\u6c1f\u6cc9\u6d0b\u6d32\u6d2a\u6d41\u6d25\u6d0c\u6d31\u6d1e\u6d17"],["aca1","\u6d3b\u6d3d\u6d3e\u6d36\u6d1b\u6cf5\u6d39\u6d27\u6d38\u6d29\u6d2e\u6d35\u6d0e\u6d2b\u70ab\u70ba\u70b3\u70ac\u70af\u70ad\u70b8\u70ae\u70a4\u7230\u7272\u726f\u7274\u72e9\u72e0\u72e1\u73b7\u73ca\u73bb\u73b2\u73cd\u73c0\u73b3\u751a\u752d\u754f\u754c\u754e\u754b\u75ab\u75a4\u75a5\u75a2\u75a3\u7678\u7686\u7687\u7688\u76c8\u76c6\u76c3\u76c5\u7701\u76f9\u76f8\u7709\u770b\u76fe\u76fc\u7707\u77dc\u7802\u7814\u780c\u780d\u7946\u7949\u7948\u7947\u79b9\u79ba\u79d1\u79d2\u79cb\u7a7f\u7a81\u7aff\u7afd\u7c7d\u7d02\u7d05\u7d00\u7d09\u7d07\u7d04\u7d06\u7f38\u7f8e\u7fbf\u8004"],["ad40","\u8010\u800d\u8011\u8036\u80d6\u80e5\u80da\u80c3\u80c4\u80cc\u80e1\u80db\u80ce\u80de\u80e4\u80dd\u81f4\u8222\u82e7\u8303\u8305\u82e3\u82db\u82e6\u8304\u82e5\u8302\u8309\u82d2\u82d7\u82f1\u8301\u82dc\u82d4\u82d1\u82de\u82d3\u82df\u82ef\u8306\u8650\u8679\u867b\u867a\u884d\u886b\u8981\u89d4\u8a08\u8a02\u8a03\u8c9e\u8ca0\u8d74\u8d73\u8db4\u8ecd\u8ecc\u8ff0\u8fe6\u8fe2\u8fea\u8fe5"],["ada1","\u8fed\u8feb\u8fe4\u8fe8\u90ca\u90ce\u90c1\u90c3\u914b\u914a\u91cd\u9582\u9650\u964b\u964c\u964d\u9762\u9769\u97cb\u97ed\u97f3\u9801\u98a8\u98db\u98df\u9996\u9999\u4e58\u4eb3\u500c\u500d\u5023\u4fef\u5026\u5025\u4ff8\u5029\u5016\u5006\u503c\u501f\u501a\u5012\u5011\u4ffa\u5000\u5014\u5028\u4ff1\u5021\u500b\u5019\u5018\u4ff3\u4fee\u502d\u502a\u4ffe\u502b\u5009\u517c\u51a4\u51a5\u51a2\u51cd\u51cc\u51c6\u51cb\u5256\u525c\u5254\u525b\u525d\u532a\u537f\u539f\u539d\u53df\u54e8\u5510\u5501\u5537\u54fc\u54e5\u54f2\u5506\u54fa\u5514\u54e9\u54ed\u54e1\u5509\u54ee\u54ea"],["ae40","\u54e6\u5527\u5507\u54fd\u550f\u5703\u5704\u57c2\u57d4\u57cb\u57c3\u5809\u590f\u5957\u5958\u595a\u5a11\u5a18\u5a1c\u5a1f\u5a1b\u5a13\u59ec\u5a20\u5a23\u5a29\u5a25\u5a0c\u5a09\u5b6b\u5c58\u5bb0\u5bb3\u5bb6\u5bb4\u5bae\u5bb5\u5bb9\u5bb8\u5c04\u5c51\u5c55\u5c50\u5ced\u5cfd\u5cfb\u5cea\u5ce8\u5cf0\u5cf6\u5d01\u5cf4\u5dee\u5e2d\u5e2b\u5eab\u5ead\u5ea7\u5f31\u5f92\u5f91\u5f90\u6059"],["aea1","\u6063\u6065\u6050\u6055\u606d\u6069\u606f\u6084\u609f\u609a\u608d\u6094\u608c\u6085\u6096\u6247\u62f3\u6308\u62ff\u634e\u633e\u632f\u6355\u6342\u6346\u634f\u6349\u633a\u6350\u633d\u632a\u632b\u6328\u634d\u634c\u6548\u6549\u6599\u65c1\u65c5\u6642\u6649\u664f\u6643\u6652\u664c\u6645\u6641\u66f8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68b3\u6817\u684c\u6851\u683d\u67f4\u6850\u6840\u683c\u6843\u682a\u6845\u6813\u6818\u6841\u6b8a\u6b89\u6bb7\u6c23\u6c27\u6c28\u6c26\u6c24\u6cf0\u6d6a\u6d95\u6d88\u6d87\u6d66\u6d78\u6d77\u6d59\u6d93"],["af40","\u6d6c\u6d89\u6d6e\u6d5a\u6d74\u6d69\u6d8c\u6d8a\u6d79\u6d85\u6d65\u6d94\u70ca\u70d8\u70e4\u70d9\u70c8\u70cf\u7239\u7279\u72fc\u72f9\u72fd\u72f8\u72f7\u7386\u73ed\u7409\u73ee\u73e0\u73ea\u73de\u7554\u755d\u755c\u755a\u7559\u75be\u75c5\u75c7\u75b2\u75b3\u75bd\u75bc\u75b9\u75c2\u75b8\u768b\u76b0\u76ca\u76cd\u76ce\u7729\u771f\u7720\u7728\u77e9\u7830\u7827\u7838\u781d\u7834\u7837"],["afa1","\u7825\u782d\u7820\u781f\u7832\u7955\u7950\u7960\u795f\u7956\u795e\u795d\u7957\u795a\u79e4\u79e3\u79e7\u79df\u79e6\u79e9\u79d8\u7a84\u7a88\u7ad9\u7b06\u7b11\u7c89\u7d21\u7d17\u7d0b\u7d0a\u7d20\u7d22\u7d14\u7d10\u7d15\u7d1a\u7d1c\u7d0d\u7d19\u7d1b\u7f3a\u7f5f\u7f94\u7fc5\u7fc1\u8006\u8018\u8015\u8019\u8017\u803d\u803f\u80f1\u8102\u80f0\u8105\u80ed\u80f4\u8106\u80f8\u80f3\u8108\u80fd\u810a\u80fc\u80ef\u81ed\u81ec\u8200\u8210\u822a\u822b\u8228\u822c\u82bb\u832b\u8352\u8354\u834a\u8338\u8350\u8349\u8335\u8334\u834f\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343"],["b040","\u8654\u868a\u86aa\u8693\u86a4\u86a9\u868c\u86a3\u869c\u8870\u8877\u8881\u8882\u887d\u8879\u8a18\u8a10\u8a0e\u8a0c\u8a15\u8a0a\u8a17\u8a13\u8a16\u8a0f\u8a11\u8c48\u8c7a\u8c79\u8ca1\u8ca2\u8d77\u8eac\u8ed2\u8ed4\u8ecf\u8fb1\u9001\u9006\u8ff7\u9000\u8ffa\u8ff4\u9003\u8ffd\u9005\u8ff8\u9095\u90e1\u90dd\u90e2\u9152\u914d\u914c\u91d8\u91dd\u91d7\u91dc\u91d9\u9583\u9662\u9663\u9661"],["b0a1","\u965b\u965d\u9664\u9658\u965e\u96bb\u98e2\u99ac\u9aa8\u9ad8\u9b25\u9b32\u9b3c\u4e7e\u507a\u507d\u505c\u5047\u5043\u504c\u505a\u5049\u5065\u5076\u504e\u5055\u5075\u5074\u5077\u504f\u500f\u506f\u506d\u515c\u5195\u51f0\u526a\u526f\u52d2\u52d9\u52d8\u52d5\u5310\u530f\u5319\u533f\u5340\u533e\u53c3\u66fc\u5546\u556a\u5566\u5544\u555e\u5561\u5543\u554a\u5531\u5556\u554f\u5555\u552f\u5564\u5538\u552e\u555c\u552c\u5563\u5533\u5541\u5557\u5708\u570b\u5709\u57df\u5805\u580a\u5806\u57e0\u57e4\u57fa\u5802\u5835\u57f7\u57f9\u5920\u5962\u5a36\u5a41\u5a49\u5a66\u5a6a\u5a40"],["b140","\u5a3c\u5a62\u5a5a\u5a46\u5a4a\u5b70\u5bc7\u5bc5\u5bc4\u5bc2\u5bbf\u5bc6\u5c09\u5c08\u5c07\u5c60\u5c5c\u5c5d\u5d07\u5d06\u5d0e\u5d1b\u5d16\u5d22\u5d11\u5d29\u5d14\u5d19\u5d24\u5d27\u5d17\u5de2\u5e38\u5e36\u5e33\u5e37\u5eb7\u5eb8\u5eb6\u5eb5\u5ebe\u5f35\u5f37\u5f57\u5f6c\u5f69\u5f6b\u5f97\u5f99\u5f9e\u5f98\u5fa1\u5fa0\u5f9c\u607f\u60a3\u6089\u60a0\u60a8\u60cb\u60b4\u60e6\u60bd"],["b1a1","\u60c5\u60bb\u60b5\u60dc\u60bc\u60d8\u60d5\u60c6\u60df\u60b8\u60da\u60c7\u621a\u621b\u6248\u63a0\u63a7\u6372\u6396\u63a2\u63a5\u6377\u6367\u6398\u63aa\u6371\u63a9\u6389\u6383\u639b\u636b\u63a8\u6384\u6388\u6399\u63a1\u63ac\u6392\u638f\u6380\u637b\u6369\u6368\u637a\u655d\u6556\u6551\u6559\u6557\u555f\u654f\u6558\u6555\u6554\u659c\u659b\u65ac\u65cf\u65cb\u65cc\u65ce\u665d\u665a\u6664\u6668\u6666\u665e\u66f9\u52d7\u671b\u6881\u68af\u68a2\u6893\u68b5\u687f\u6876\u68b1\u68a7\u6897\u68b0\u6883\u68c4\u68ad\u6886\u6885\u6894\u689d\u68a8\u689f\u68a1\u6882\u6b32\u6bba"],["b240","\u6beb\u6bec\u6c2b\u6d8e\u6dbc\u6df3\u6dd9\u6db2\u6de1\u6dcc\u6de4\u6dfb\u6dfa\u6e05\u6dc7\u6dcb\u6daf\u6dd1\u6dae\u6dde\u6df9\u6db8\u6df7\u6df5\u6dc5\u6dd2\u6e1a\u6db5\u6dda\u6deb\u6dd8\u6dea\u6df1\u6dee\u6de8\u6dc6\u6dc4\u6daa\u6dec\u6dbf\u6de6\u70f9\u7109\u710a\u70fd\u70ef\u723d\u727d\u7281\u731c\u731b\u7316\u7313\u7319\u7387\u7405\u740a\u7403\u7406\u73fe\u740d\u74e0\u74f6"],["b2a1","\u74f7\u751c\u7522\u7565\u7566\u7562\u7570\u758f\u75d4\u75d5\u75b5\u75ca\u75cd\u768e\u76d4\u76d2\u76db\u7737\u773e\u773c\u7736\u7738\u773a\u786b\u7843\u784e\u7965\u7968\u796d\u79fb\u7a92\u7a95\u7b20\u7b28\u7b1b\u7b2c\u7b26\u7b19\u7b1e\u7b2e\u7c92\u7c97\u7c95\u7d46\u7d43\u7d71\u7d2e\u7d39\u7d3c\u7d40\u7d30\u7d33\u7d44\u7d2f\u7d42\u7d32\u7d31\u7f3d\u7f9e\u7f9a\u7fcc\u7fce\u7fd2\u801c\u804a\u8046\u812f\u8116\u8123\u812b\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838e\u839e\u8398\u8378\u83a2\u8396\u83bd\u83ab\u8392\u838a\u8393\u8389\u83a0\u8377\u837b\u837c"],["b340","\u8386\u83a7\u8655\u5f6a\u86c7\u86c0\u86b6\u86c4\u86b5\u86c6\u86cb\u86b1\u86af\u86c9\u8853\u889e\u8888\u88ab\u8892\u8896\u888d\u888b\u8993\u898f\u8a2a\u8a1d\u8a23\u8a25\u8a31\u8a2d\u8a1f\u8a1b\u8a22\u8c49\u8c5a\u8ca9\u8cac\u8cab\u8ca8\u8caa\u8ca7\u8d67\u8d66\u8dbe\u8dba\u8edb\u8edf\u9019\u900d\u901a\u9017\u9023\u901f\u901d\u9010\u9015\u901e\u9020\u900f\u9022\u9016\u901b\u9014"],["b3a1","\u90e8\u90ed\u90fd\u9157\u91ce\u91f5\u91e6\u91e3\u91e7\u91ed\u91e9\u9589\u966a\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966c\u96c0\u96ea\u96e9\u7ae0\u7adf\u9802\u9803\u9b5a\u9ce5\u9e75\u9e7f\u9ea5\u9ebb\u50a2\u508d\u5085\u5099\u5091\u5080\u5096\u5098\u509a\u6700\u51f1\u5272\u5274\u5275\u5269\u52de\u52dd\u52db\u535a\u53a5\u557b\u5580\u55a7\u557c\u558a\u559d\u5598\u5582\u559c\u55aa\u5594\u5587\u558b\u5583\u55b3\u55ae\u559f\u553e\u55b2\u559a\u55bb\u55ac\u55b1\u557e\u5589\u55ab\u5599\u570d\u582f\u582a\u5834\u5824\u5830\u5831\u5821\u581d\u5820\u58f9\u58fa\u5960"],["b440","\u5a77\u5a9a\u5a7f\u5a92\u5a9b\u5aa7\u5b73\u5b71\u5bd2\u5bcc\u5bd3\u5bd0\u5c0a\u5c0b\u5c31\u5d4c\u5d50\u5d34\u5d47\u5dfd\u5e45\u5e3d\u5e40\u5e43\u5e7e\u5eca\u5ec1\u5ec2\u5ec4\u5f3c\u5f6d\u5fa9\u5faa\u5fa8\u60d1\u60e1\u60b2\u60b6\u60e0\u611c\u6123\u60fa\u6115\u60f0\u60fb\u60f4\u6168\u60f1\u610e\u60f6\u6109\u6100\u6112\u621f\u6249\u63a3\u638c\u63cf\u63c0\u63e9\u63c9\u63c6\u63cd"],["b4a1","\u63d2\u63e3\u63d0\u63e1\u63d6\u63ed\u63ee\u6376\u63f4\u63ea\u63db\u6452\u63da\u63f9\u655e\u6566\u6562\u6563\u6591\u6590\u65af\u666e\u6670\u6674\u6676\u666f\u6691\u667a\u667e\u6677\u66fe\u66ff\u671f\u671d\u68fa\u68d5\u68e0\u68d8\u68d7\u6905\u68df\u68f5\u68ee\u68e7\u68f9\u68d2\u68f2\u68e3\u68cb\u68cd\u690d\u6912\u690e\u68c9\u68da\u696e\u68fb\u6b3e\u6b3a\u6b3d\u6b98\u6b96\u6bbc\u6bef\u6c2e\u6c2f\u6c2c\u6e2f\u6e38\u6e54\u6e21\u6e32\u6e67\u6e4a\u6e20\u6e25\u6e23\u6e1b\u6e5b\u6e58\u6e24\u6e56\u6e6e\u6e2d\u6e26\u6e6f\u6e34\u6e4d\u6e3a\u6e2c\u6e43\u6e1d\u6e3e\u6ecb"],["b540","\u6e89\u6e19\u6e4e\u6e63\u6e44\u6e72\u6e69\u6e5f\u7119\u711a\u7126\u7130\u7121\u7136\u716e\u711c\u724c\u7284\u7280\u7336\u7325\u7334\u7329\u743a\u742a\u7433\u7422\u7425\u7435\u7436\u7434\u742f\u741b\u7426\u7428\u7525\u7526\u756b\u756a\u75e2\u75db\u75e3\u75d9\u75d8\u75de\u75e0\u767b\u767c\u7696\u7693\u76b4\u76dc\u774f\u77ed\u785d\u786c\u786f\u7a0d\u7a08\u7a0b\u7a05\u7a00\u7a98"],["b5a1","\u7a97\u7a96\u7ae5\u7ae3\u7b49\u7b56\u7b46\u7b50\u7b52\u7b54\u7b4d\u7b4b\u7b4f\u7b51\u7c9f\u7ca5\u7d5e\u7d50\u7d68\u7d55\u7d2b\u7d6e\u7d72\u7d61\u7d66\u7d62\u7d70\u7d73\u5584\u7fd4\u7fd5\u800b\u8052\u8085\u8155\u8154\u814b\u8151\u814e\u8139\u8146\u813e\u814c\u8153\u8174\u8212\u821c\u83e9\u8403\u83f8\u840d\u83e0\u83c5\u840b\u83c1\u83ef\u83f1\u83f4\u8457\u840a\u83f0\u840c\u83cc\u83fd\u83f2\u83ca\u8438\u840e\u8404\u83dc\u8407\u83d4\u83df\u865b\u86df\u86d9\u86ed\u86d4\u86db\u86e4\u86d0\u86de\u8857\u88c1\u88c2\u88b1\u8983\u8996\u8a3b\u8a60\u8a55\u8a5e\u8a3c\u8a41"],["b640","\u8a54\u8a5b\u8a50\u8a46\u8a34\u8a3a\u8a36\u8a56\u8c61\u8c82\u8caf\u8cbc\u8cb3\u8cbd\u8cc1\u8cbb\u8cc0\u8cb4\u8cb7\u8cb6\u8cbf\u8cb8\u8d8a\u8d85\u8d81\u8dce\u8ddd\u8dcb\u8dda\u8dd1\u8dcc\u8ddb\u8dc6\u8efb\u8ef8\u8efc\u8f9c\u902e\u9035\u9031\u9038\u9032\u9036\u9102\u90f5\u9109\u90fe\u9163\u9165\u91cf\u9214\u9215\u9223\u9209\u921e\u920d\u9210\u9207\u9211\u9594\u958f\u958b\u9591"],["b6a1","\u9593\u9592\u958e\u968a\u968e\u968b\u967d\u9685\u9686\u968d\u9672\u9684\u96c1\u96c5\u96c4\u96c6\u96c7\u96ef\u96f2\u97cc\u9805\u9806\u9808\u98e7\u98ea\u98ef\u98e9\u98f2\u98ed\u99ae\u99ad\u9ec3\u9ecd\u9ed1\u4e82\u50ad\u50b5\u50b2\u50b3\u50c5\u50be\u50ac\u50b7\u50bb\u50af\u50c7\u527f\u5277\u527d\u52df\u52e6\u52e4\u52e2\u52e3\u532f\u55df\u55e8\u55d3\u55e6\u55ce\u55dc\u55c7\u55d1\u55e3\u55e4\u55ef\u55da\u55e1\u55c5\u55c6\u55e5\u55c9\u5712\u5713\u585e\u5851\u5858\u5857\u585a\u5854\u586b\u584c\u586d\u584a\u5862\u5852\u584b\u5967\u5ac1\u5ac9\u5acc\u5abe\u5abd\u5abc"],["b740","\u5ab3\u5ac2\u5ab2\u5d69\u5d6f\u5e4c\u5e79\u5ec9\u5ec8\u5f12\u5f59\u5fac\u5fae\u611a\u610f\u6148\u611f\u60f3\u611b\u60f9\u6101\u6108\u614e\u614c\u6144\u614d\u613e\u6134\u6127\u610d\u6106\u6137\u6221\u6222\u6413\u643e\u641e\u642a\u642d\u643d\u642c\u640f\u641c\u6414\u640d\u6436\u6416\u6417\u6406\u656c\u659f\u65b0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668d\u6703\u6994\u696d"],["b7a1","\u695a\u6977\u6960\u6954\u6975\u6930\u6982\u694a\u6968\u696b\u695e\u6953\u6979\u6986\u695d\u6963\u695b\u6b47\u6b72\u6bc0\u6bbf\u6bd3\u6bfd\u6ea2\u6eaf\u6ed3\u6eb6\u6ec2\u6e90\u6e9d\u6ec7\u6ec5\u6ea5\u6e98\u6ebc\u6eba\u6eab\u6ed1\u6e96\u6e9c\u6ec4\u6ed4\u6eaa\u6ea7\u6eb4\u714e\u7159\u7169\u7164\u7149\u7167\u715c\u716c\u7166\u714c\u7165\u715e\u7146\u7168\u7156\u723a\u7252\u7337\u7345\u733f\u733e\u746f\u745a\u7455\u745f\u745e\u7441\u743f\u7459\u745b\u745c\u7576\u7578\u7600\u75f0\u7601\u75f2\u75f1\u75fa\u75ff\u75f4\u75f3\u76de\u76df\u775b\u776b\u7766\u775e\u7763"],["b840","\u7779\u776a\u776c\u775c\u7765\u7768\u7762\u77ee\u788e\u78b0\u7897\u7898\u788c\u7889\u787c\u7891\u7893\u787f\u797a\u797f\u7981\u842c\u79bd\u7a1c\u7a1a\u7a20\u7a14\u7a1f\u7a1e\u7a9f\u7aa0\u7b77\u7bc0\u7b60\u7b6e\u7b67\u7cb1\u7cb3\u7cb5\u7d93\u7d79\u7d91\u7d81\u7d8f\u7d5b\u7f6e\u7f69\u7f6a\u7f72\u7fa9\u7fa8\u7fa4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816e\u8173\u816b"],["b8a1","\u8179\u817a\u8166\u8205\u8247\u8482\u8477\u843d\u8431\u8475\u8466\u846b\u8449\u846c\u845b\u843c\u8435\u8461\u8463\u8469\u846d\u8446\u865e\u865c\u865f\u86f9\u8713\u8708\u8707\u8700\u86fe\u86fb\u8702\u8703\u8706\u870a\u8859\u88df\u88d4\u88d9\u88dc\u88d8\u88dd\u88e1\u88ca\u88d5\u88d2\u899c\u89e3\u8a6b\u8a72\u8a73\u8a66\u8a69\u8a70\u8a87\u8a7c\u8a63\u8aa0\u8a71\u8a85\u8a6d\u8a62\u8a6e\u8a6c\u8a79\u8a7b\u8a3e\u8a68\u8c62\u8c8a\u8c89\u8cca\u8cc7\u8cc8\u8cc4\u8cb2\u8cc3\u8cc2\u8cc5\u8de1\u8ddf\u8de8\u8def\u8df3\u8dfa\u8dea\u8de4\u8de6\u8eb2\u8f03\u8f09\u8efe\u8f0a"],["b940","\u8f9f\u8fb2\u904b\u904a\u9053\u9042\u9054\u903c\u9055\u9050\u9047\u904f\u904e\u904d\u9051\u903e\u9041\u9112\u9117\u916c\u916a\u9169\u91c9\u9237\u9257\u9238\u923d\u9240\u923e\u925b\u924b\u9264\u9251\u9234\u9249\u924d\u9245\u9239\u923f\u925a\u9598\u9698\u9694\u9695\u96cd\u96cb\u96c9\u96ca\u96f7\u96fb\u96f9\u96f6\u9756\u9774\u9776\u9810\u9811\u9813\u980a\u9812\u980c\u98fc\u98f4"],["b9a1","\u98fd\u98fe\u99b3\u99b1\u99b4\u9ae1\u9ce9\u9e82\u9f0e\u9f13\u9f20\u50e7\u50ee\u50e5\u50d6\u50ed\u50da\u50d5\u50cf\u50d1\u50f1\u50ce\u50e9\u5162\u51f3\u5283\u5282\u5331\u53ad\u55fe\u5600\u561b\u5617\u55fd\u5614\u5606\u5609\u560d\u560e\u55f7\u5616\u561f\u5608\u5610\u55f6\u5718\u5716\u5875\u587e\u5883\u5893\u588a\u5879\u5885\u587d\u58fd\u5925\u5922\u5924\u596a\u5969\u5ae1\u5ae6\u5ae9\u5ad7\u5ad6\u5ad8\u5ae3\u5b75\u5bde\u5be7\u5be1\u5be5\u5be6\u5be8\u5be2\u5be4\u5bdf\u5c0d\u5c62\u5d84\u5d87\u5e5b\u5e63\u5e55\u5e57\u5e54\u5ed3\u5ed6\u5f0a\u5f46\u5f70\u5fb9\u6147"],["ba40","\u613f\u614b\u6177\u6162\u6163\u615f\u615a\u6158\u6175\u622a\u6487\u6458\u6454\u64a4\u6478\u645f\u647a\u6451\u6467\u6434\u646d\u647b\u6572\u65a1\u65d7\u65d6\u66a2\u66a8\u669d\u699c\u69a8\u6995\u69c1\u69ae\u69d3\u69cb\u699b\u69b7\u69bb\u69ab\u69b4\u69d0\u69cd\u69ad\u69cc\u69a6\u69c3\u69a3\u6b49\u6b4c\u6c33\u6f33\u6f14\u6efe\u6f13\u6ef4\u6f29\u6f3e\u6f20\u6f2c\u6f0f\u6f02\u6f22"],["baa1","\u6eff\u6eef\u6f06\u6f31\u6f38\u6f32\u6f23\u6f15\u6f2b\u6f2f\u6f88\u6f2a\u6eec\u6f01\u6ef2\u6ecc\u6ef7\u7194\u7199\u717d\u718a\u7184\u7192\u723e\u7292\u7296\u7344\u7350\u7464\u7463\u746a\u7470\u746d\u7504\u7591\u7627\u760d\u760b\u7609\u7613\u76e1\u76e3\u7784\u777d\u777f\u7761\u78c1\u789f\u78a7\u78b3\u78a9\u78a3\u798e\u798f\u798d\u7a2e\u7a31\u7aaa\u7aa9\u7aed\u7aef\u7ba1\u7b95\u7b8b\u7b75\u7b97\u7b9d\u7b94\u7b8f\u7bb8\u7b87\u7b84\u7cb9\u7cbd\u7cbe\u7dbb\u7db0\u7d9c\u7dbd\u7dbe\u7da0\u7dca\u7db4\u7db2\u7db1\u7dba\u7da2\u7dbf\u7db5\u7db8\u7dad\u7dd2\u7dc7\u7dac"],["bb40","\u7f70\u7fe0\u7fe1\u7fdf\u805e\u805a\u8087\u8150\u8180\u818f\u8188\u818a\u817f\u8182\u81e7\u81fa\u8207\u8214\u821e\u824b\u84c9\u84bf\u84c6\u84c4\u8499\u849e\u84b2\u849c\u84cb\u84b8\u84c0\u84d3\u8490\u84bc\u84d1\u84ca\u873f\u871c\u873b\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88f3\u8902\u88f4\u88f9\u88f8\u88fd\u88e8\u891a\u88ef\u8aa6\u8a8c\u8a9e\u8aa3\u8a8d\u8aa1\u8a93\u8aa4"],["bba1","\u8aaa\u8aa5\u8aa8\u8a98\u8a91\u8a9a\u8aa7\u8c6a\u8c8d\u8c8c\u8cd3\u8cd1\u8cd2\u8d6b\u8d99\u8d95\u8dfc\u8f14\u8f12\u8f15\u8f13\u8fa3\u9060\u9058\u905c\u9063\u9059\u905e\u9062\u905d\u905b\u9119\u9118\u911e\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927b\u9293\u929c\u92a8\u927c\u9291\u95a1\u95a8\u95a9\u95a3\u95a5\u95a4\u9699\u969c\u969b\u96cc\u96d2\u9700\u977c\u9785\u97f6\u9817\u9818\u98af\u98b1\u9903\u9905\u990c\u9909\u99c1\u9aaf\u9ab0\u9ae6\u9b41\u9b42\u9cf4\u9cf6\u9cf3\u9ebc\u9f3b\u9f4a\u5104\u5100\u50fb\u50f5\u50f9\u5102\u5108\u5109\u5105\u51dc"],["bc40","\u5287\u5288\u5289\u528d\u528a\u52f0\u53b2\u562e\u563b\u5639\u5632\u563f\u5634\u5629\u5653\u564e\u5657\u5674\u5636\u562f\u5630\u5880\u589f\u589e\u58b3\u589c\u58ae\u58a9\u58a6\u596d\u5b09\u5afb\u5b0b\u5af5\u5b0c\u5b08\u5bee\u5bec\u5be9\u5beb\u5c64\u5c65\u5d9d\u5d94\u5e62\u5e5f\u5e61\u5ee2\u5eda\u5edf\u5edd\u5ee3\u5ee0\u5f48\u5f71\u5fb7\u5fb5\u6176\u6167\u616e\u615d\u6155\u6182"],["bca1","\u617c\u6170\u616b\u617e\u61a7\u6190\u61ab\u618e\u61ac\u619a\u61a4\u6194\u61ae\u622e\u6469\u646f\u6479\u649e\u64b2\u6488\u6490\u64b0\u64a5\u6493\u6495\u64a9\u6492\u64ae\u64ad\u64ab\u649a\u64ac\u6499\u64a2\u64b3\u6575\u6577\u6578\u66ae\u66ab\u66b4\u66b1\u6a23\u6a1f\u69e8\u6a01\u6a1e\u6a19\u69fd\u6a21\u6a13\u6a0a\u69f3\u6a02\u6a05\u69ed\u6a11\u6b50\u6b4e\u6ba4\u6bc5\u6bc6\u6f3f\u6f7c\u6f84\u6f51\u6f66\u6f54\u6f86\u6f6d\u6f5b\u6f78\u6f6e\u6f8e\u6f7a\u6f70\u6f64\u6f97\u6f58\u6ed5\u6f6f\u6f60\u6f5f\u719f\u71ac\u71b1\u71a8\u7256\u729b\u734e\u7357\u7469\u748b\u7483"],["bd40","\u747e\u7480\u757f\u7620\u7629\u761f\u7624\u7626\u7621\u7622\u769a\u76ba\u76e4\u778e\u7787\u778c\u7791\u778b\u78cb\u78c5\u78ba\u78ca\u78be\u78d5\u78bc\u78d0\u7a3f\u7a3c\u7a40\u7a3d\u7a37\u7a3b\u7aaf\u7aae\u7bad\u7bb1\u7bc4\u7bb4\u7bc6\u7bc7\u7bc1\u7ba0\u7bcc\u7cca\u7de0\u7df4\u7def\u7dfb\u7dd8\u7dec\u7ddd\u7de8\u7de3\u7dda\u7dde\u7de9\u7d9e\u7dd9\u7df2\u7df9\u7f75\u7f77\u7faf"],["bda1","\u7fe9\u8026\u819b\u819c\u819d\u81a0\u819a\u8198\u8517\u853d\u851a\u84ee\u852c\u852d\u8513\u8511\u8523\u8521\u8514\u84ec\u8525\u84ff\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874c\u8753\u885b\u885d\u8910\u8907\u8912\u8913\u8915\u890a\u8abc\u8ad2\u8ac7\u8ac4\u8a95\u8acb\u8af8\u8ab2\u8ac9\u8ac2\u8abf\u8ab0\u8ad6\u8acd\u8ab6\u8ab9\u8adb\u8c4c\u8c4e\u8c6c\u8ce0\u8cde\u8ce6\u8ce4\u8cec\u8ced\u8ce2\u8ce3\u8cdc\u8cea\u8ce1\u8d6d\u8d9f\u8da3\u8e2b\u8e10\u8e1d\u8e22\u8e0f\u8e29\u8e1f\u8e21\u8e1e\u8eba\u8f1d\u8f1b\u8f1f\u8f29\u8f26\u8f2a\u8f1c\u8f1e"],["be40","\u8f25\u9069\u906e\u9068\u906d\u9077\u9130\u912d\u9127\u9131\u9187\u9189\u918b\u9183\u92c5\u92bb\u92b7\u92ea\u92ac\u92e4\u92c1\u92b3\u92bc\u92d2\u92c7\u92f0\u92b2\u95ad\u95b1\u9704\u9706\u9707\u9709\u9760\u978d\u978b\u978f\u9821\u982b\u981c\u98b3\u990a\u9913\u9912\u9918\u99dd\u99d0\u99df\u99db\u99d1\u99d5\u99d2\u99d9\u9ab7\u9aee\u9aef\u9b27\u9b45\u9b44\u9b77\u9b6f\u9d06\u9d09"],["bea1","\u9d03\u9ea9\u9ebe\u9ece\u58a8\u9f52\u5112\u5118\u5114\u5110\u5115\u5180\u51aa\u51dd\u5291\u5293\u52f3\u5659\u566b\u5679\u5669\u5664\u5678\u566a\u5668\u5665\u5671\u566f\u566c\u5662\u5676\u58c1\u58be\u58c7\u58c5\u596e\u5b1d\u5b34\u5b78\u5bf0\u5c0e\u5f4a\u61b2\u6191\u61a9\u618a\u61cd\u61b6\u61be\u61ca\u61c8\u6230\u64c5\u64c1\u64cb\u64bb\u64bc\u64da\u64c4\u64c7\u64c2\u64cd\u64bf\u64d2\u64d4\u64be\u6574\u66c6\u66c9\u66b9\u66c4\u66c7\u66b8\u6a3d\u6a38\u6a3a\u6a59\u6a6b\u6a58\u6a39\u6a44\u6a62\u6a61\u6a4b\u6a47\u6a35\u6a5f\u6a48\u6b59\u6b77\u6c05\u6fc2\u6fb1\u6fa1"],["bf40","\u6fc3\u6fa4\u6fc1\u6fa7\u6fb3\u6fc0\u6fb9\u6fb6\u6fa6\u6fa0\u6fb4\u71be\u71c9\u71d0\u71d2\u71c8\u71d5\u71b9\u71ce\u71d9\u71dc\u71c3\u71c4\u7368\u749c\u74a3\u7498\u749f\u749e\u74e2\u750c\u750d\u7634\u7638\u763a\u76e7\u76e5\u77a0\u779e\u779f\u77a5\u78e8\u78da\u78ec\u78e7\u79a6\u7a4d\u7a4e\u7a46\u7a4c\u7a4b\u7aba\u7bd9\u7c11\u7bc9\u7be4\u7bdb\u7be1\u7be9\u7be6\u7cd5\u7cd6\u7e0a"],["bfa1","\u7e11\u7e08\u7e1b\u7e23\u7e1e\u7e1d\u7e09\u7e10\u7f79\u7fb2\u7ff0\u7ff1\u7fee\u8028\u81b3\u81a9\u81a8\u81fb\u8208\u8258\u8259\u854a\u8559\u8548\u8568\u8569\u8543\u8549\u856d\u856a\u855e\u8783\u879f\u879e\u87a2\u878d\u8861\u892a\u8932\u8925\u892b\u8921\u89aa\u89a6\u8ae6\u8afa\u8aeb\u8af1\u8b00\u8adc\u8ae7\u8aee\u8afe\u8b01\u8b02\u8af7\u8aed\u8af3\u8af6\u8afc\u8c6b\u8c6d\u8c93\u8cf4\u8e44\u8e31\u8e34\u8e42\u8e39\u8e35\u8f3b\u8f2f\u8f38\u8f33\u8fa8\u8fa6\u9075\u9074\u9078\u9072\u907c\u907a\u9134\u9192\u9320\u9336\u92f8\u9333\u932f\u9322\u92fc\u932b\u9304\u931a"],["c040","\u9310\u9326\u9321\u9315\u932e\u9319\u95bb\u96a7\u96a8\u96aa\u96d5\u970e\u9711\u9716\u970d\u9713\u970f\u975b\u975c\u9766\u9798\u9830\u9838\u983b\u9837\u982d\u9839\u9824\u9910\u9928\u991e\u991b\u9921\u991a\u99ed\u99e2\u99f1\u9ab8\u9abc\u9afb\u9aed\u9b28\u9b91\u9d15\u9d23\u9d26\u9d28\u9d12\u9d1b\u9ed8\u9ed4\u9f8d\u9f9c\u512a\u511f\u5121\u5132\u52f5\u568e\u5680\u5690\u5685\u5687"],["c0a1","\u568f\u58d5\u58d3\u58d1\u58ce\u5b30\u5b2a\u5b24\u5b7a\u5c37\u5c68\u5dbc\u5dba\u5dbd\u5db8\u5e6b\u5f4c\u5fbd\u61c9\u61c2\u61c7\u61e6\u61cb\u6232\u6234\u64ce\u64ca\u64d8\u64e0\u64f0\u64e6\u64ec\u64f1\u64e2\u64ed\u6582\u6583\u66d9\u66d6\u6a80\u6a94\u6a84\u6aa2\u6a9c\u6adb\u6aa3\u6a7e\u6a97\u6a90\u6aa0\u6b5c\u6bae\u6bda\u6c08\u6fd8\u6ff1\u6fdf\u6fe0\u6fdb\u6fe4\u6feb\u6fef\u6f80\u6fec\u6fe1\u6fe9\u6fd5\u6fee\u6ff0\u71e7\u71df\u71ee\u71e6\u71e5\u71ed\u71ec\u71f4\u71e0\u7235\u7246\u7370\u7372\u74a9\u74b0\u74a6\u74a8\u7646\u7642\u764c\u76ea\u77b3\u77aa\u77b0\u77ac"],["c140","\u77a7\u77ad\u77ef\u78f7\u78fa\u78f4\u78ef\u7901\u79a7\u79aa\u7a57\u7abf\u7c07\u7c0d\u7bfe\u7bf7\u7c0c\u7be0\u7ce0\u7cdc\u7cde\u7ce2\u7cdf\u7cd9\u7cdd\u7e2e\u7e3e\u7e46\u7e37\u7e32\u7e43\u7e2b\u7e3d\u7e31\u7e45\u7e41\u7e34\u7e39\u7e48\u7e35\u7e3f\u7e2f\u7f44\u7ff3\u7ffc\u8071\u8072\u8070\u806f\u8073\u81c6\u81c3\u81ba\u81c2\u81c0\u81bf\u81bd\u81c9\u81be\u81e8\u8209\u8271\u85aa"],["c1a1","\u8584\u857e\u859c\u8591\u8594\u85af\u859b\u8587\u85a8\u858a\u8667\u87c0\u87d1\u87b3\u87d2\u87c6\u87ab\u87bb\u87ba\u87c8\u87cb\u893b\u8936\u8944\u8938\u893d\u89ac\u8b0e\u8b17\u8b19\u8b1b\u8b0a\u8b20\u8b1d\u8b04\u8b10\u8c41\u8c3f\u8c73\u8cfa\u8cfd\u8cfc\u8cf8\u8cfb\u8da8\u8e49\u8e4b\u8e48\u8e4a\u8f44\u8f3e\u8f42\u8f45\u8f3f\u907f\u907d\u9084\u9081\u9082\u9080\u9139\u91a3\u919e\u919c\u934d\u9382\u9328\u9375\u934a\u9365\u934b\u9318\u937e\u936c\u935b\u9370\u935a\u9354\u95ca\u95cb\u95cc\u95c8\u95c6\u96b1\u96b8\u96d6\u971c\u971e\u97a0\u97d3\u9846\u98b6\u9935\u9a01"],["c240","\u99ff\u9bae\u9bab\u9baa\u9bad\u9d3b\u9d3f\u9e8b\u9ecf\u9ede\u9edc\u9edd\u9edb\u9f3e\u9f4b\u53e2\u5695\u56ae\u58d9\u58d8\u5b38\u5f5d\u61e3\u6233\u64f4\u64f2\u64fe\u6506\u64fa\u64fb\u64f7\u65b7\u66dc\u6726\u6ab3\u6aac\u6ac3\u6abb\u6ab8\u6ac2\u6aae\u6aaf\u6b5f\u6b78\u6baf\u7009\u700b\u6ffe\u7006\u6ffa\u7011\u700f\u71fb\u71fc\u71fe\u71f8\u7377\u7375\u74a7\u74bf\u7515\u7656\u7658"],["c2a1","\u7652\u77bd\u77bf\u77bb\u77bc\u790e\u79ae\u7a61\u7a62\u7a60\u7ac4\u7ac5\u7c2b\u7c27\u7c2a\u7c1e\u7c23\u7c21\u7ce7\u7e54\u7e55\u7e5e\u7e5a\u7e61\u7e52\u7e59\u7f48\u7ff9\u7ffb\u8077\u8076\u81cd\u81cf\u820a\u85cf\u85a9\u85cd\u85d0\u85c9\u85b0\u85ba\u85b9\u85a6\u87ef\u87ec\u87f2\u87e0\u8986\u89b2\u89f4\u8b28\u8b39\u8b2c\u8b2b\u8c50\u8d05\u8e59\u8e63\u8e66\u8e64\u8e5f\u8e55\u8ec0\u8f49\u8f4d\u9087\u9083\u9088\u91ab\u91ac\u91d0\u9394\u938a\u9396\u93a2\u93b3\u93ae\u93ac\u93b0\u9398\u939a\u9397\u95d4\u95d6\u95d0\u95d5\u96e2\u96dc\u96d9\u96db\u96de\u9724\u97a3\u97a6"],["c340","\u97ad\u97f9\u984d\u984f\u984c\u984e\u9853\u98ba\u993e\u993f\u993d\u992e\u99a5\u9a0e\u9ac1\u9b03\u9b06\u9b4f\u9b4e\u9b4d\u9bca\u9bc9\u9bfd\u9bc8\u9bc0\u9d51\u9d5d\u9d60\u9ee0\u9f15\u9f2c\u5133\u56a5\u58de\u58df\u58e2\u5bf5\u9f90\u5eec\u61f2\u61f7\u61f6\u61f5\u6500\u650f\u66e0\u66dd\u6ae5\u6add\u6ada\u6ad3\u701b\u701f\u7028\u701a\u701d\u7015\u7018\u7206\u720d\u7258\u72a2\u7378"],["c3a1","\u737a\u74bd\u74ca\u74e3\u7587\u7586\u765f\u7661\u77c7\u7919\u79b1\u7a6b\u7a69\u7c3e\u7c3f\u7c38\u7c3d\u7c37\u7c40\u7e6b\u7e6d\u7e79\u7e69\u7e6a\u7f85\u7e73\u7fb6\u7fb9\u7fb8\u81d8\u85e9\u85dd\u85ea\u85d5\u85e4\u85e5\u85f7\u87fb\u8805\u880d\u87f9\u87fe\u8960\u895f\u8956\u895e\u8b41\u8b5c\u8b58\u8b49\u8b5a\u8b4e\u8b4f\u8b46\u8b59\u8d08\u8d0a\u8e7c\u8e72\u8e87\u8e76\u8e6c\u8e7a\u8e74\u8f54\u8f4e\u8fad\u908a\u908b\u91b1\u91ae\u93e1\u93d1\u93df\u93c3\u93c8\u93dc\u93dd\u93d6\u93e2\u93cd\u93d8\u93e4\u93d7\u93e8\u95dc\u96b4\u96e3\u972a\u9727\u9761\u97dc\u97fb\u985e"],["c440","\u9858\u985b\u98bc\u9945\u9949\u9a16\u9a19\u9b0d\u9be8\u9be7\u9bd6\u9bdb\u9d89\u9d61\u9d72\u9d6a\u9d6c\u9e92\u9e97\u9e93\u9eb4\u52f8\u56a8\u56b7\u56b6\u56b4\u56bc\u58e4\u5b40\u5b43\u5b7d\u5bf6\u5dc9\u61f8\u61fa\u6518\u6514\u6519\u66e6\u6727\u6aec\u703e\u7030\u7032\u7210\u737b\u74cf\u7662\u7665\u7926\u792a\u792c\u792b\u7ac7\u7af6\u7c4c\u7c43\u7c4d\u7cef\u7cf0\u8fae\u7e7d\u7e7c"],["c4a1","\u7e82\u7f4c\u8000\u81da\u8266\u85fb\u85f9\u8611\u85fa\u8606\u860b\u8607\u860a\u8814\u8815\u8964\u89ba\u89f8\u8b70\u8b6c\u8b66\u8b6f\u8b5f\u8b6b\u8d0f\u8d0d\u8e89\u8e81\u8e85\u8e82\u91b4\u91cb\u9418\u9403\u93fd\u95e1\u9730\u98c4\u9952\u9951\u99a8\u9a2b\u9a30\u9a37\u9a35\u9c13\u9c0d\u9e79\u9eb5\u9ee8\u9f2f\u9f5f\u9f63\u9f61\u5137\u5138\u56c1\u56c0\u56c2\u5914\u5c6c\u5dcd\u61fc\u61fe\u651d\u651c\u6595\u66e9\u6afb\u6b04\u6afa\u6bb2\u704c\u721b\u72a7\u74d6\u74d4\u7669\u77d3\u7c50\u7e8f\u7e8c\u7fbc\u8617\u862d\u861a\u8823\u8822\u8821\u881f\u896a\u896c\u89bd\u8b74"],["c540","\u8b77\u8b7d\u8d13\u8e8a\u8e8d\u8e8b\u8f5f\u8faf\u91ba\u942e\u9433\u9435\u943a\u9438\u9432\u942b\u95e2\u9738\u9739\u9732\u97ff\u9867\u9865\u9957\u9a45\u9a43\u9a40\u9a3e\u9acf\u9b54\u9b51\u9c2d\u9c25\u9daf\u9db4\u9dc2\u9db8\u9e9d\u9eef\u9f19\u9f5c\u9f66\u9f67\u513c\u513b\u56c8\u56ca\u56c9\u5b7f\u5dd4\u5dd2\u5f4e\u61ff\u6524\u6b0a\u6b61\u7051\u7058\u7380\u74e4\u758a\u766e\u766c"],["c5a1","\u79b3\u7c60\u7c5f\u807e\u807d\u81df\u8972\u896f\u89fc\u8b80\u8d16\u8d17\u8e91\u8e93\u8f61\u9148\u9444\u9451\u9452\u973d\u973e\u97c3\u97c1\u986b\u9955\u9a55\u9a4d\u9ad2\u9b1a\u9c49\u9c31\u9c3e\u9c3b\u9dd3\u9dd7\u9f34\u9f6c\u9f6a\u9f94\u56cc\u5dd6\u6200\u6523\u652b\u652a\u66ec\u6b10\u74da\u7aca\u7c64\u7c63\u7c65\u7e93\u7e96\u7e94\u81e2\u8638\u863f\u8831\u8b8a\u9090\u908f\u9463\u9460\u9464\u9768\u986f\u995c\u9a5a\u9a5b\u9a57\u9ad3\u9ad4\u9ad1\u9c54\u9c57\u9c56\u9de5\u9e9f\u9ef4\u56d1\u58e9\u652c\u705e\u7671\u7672\u77d7\u7f50\u7f88\u8836\u8839\u8862\u8b93\u8b92"],["c640","\u8b96\u8277\u8d1b\u91c0\u946a\u9742\u9748\u9744\u97c6\u9870\u9a5f\u9b22\u9b58\u9c5f\u9df9\u9dfa\u9e7c\u9e7d\u9f07\u9f77\u9f72\u5ef3\u6b16\u7063\u7c6c\u7c6e\u883b\u89c0\u8ea1\u91c1\u9472\u9470\u9871\u995e\u9ad6\u9b23\u9ecc\u7064\u77da\u8b9a\u9477\u97c9\u9a62\u9a65\u7e9c\u8b9c\u8eaa\u91c5\u947d\u947e\u947c\u9c77\u9c78\u9ef7\u8c54\u947f\u9e1a\u7228\u9a6a\u9b31\u9e1b\u9e1e\u7c72"],["c940","\u4e42\u4e5c\u51f5\u531a\u5382\u4e07\u4e0c\u4e47\u4e8d\u56d7\ufa0c\u5c6e\u5f73\u4e0f\u5187\u4e0e\u4e2e\u4e93\u4ec2\u4ec9\u4ec8\u5198\u52fc\u536c\u53b9\u5720\u5903\u592c\u5c10\u5dff\u65e1\u6bb3\u6bcc\u6c14\u723f\u4e31\u4e3c\u4ee8\u4edc\u4ee9\u4ee1\u4edd\u4eda\u520c\u531c\u534c\u5722\u5723\u5917\u592f\u5b81\u5b84\u5c12\u5c3b\u5c74\u5c73\u5e04\u5e80\u5e82\u5fc9\u6209\u6250\u6c15"],["c9a1","\u6c36\u6c43\u6c3f\u6c3b\u72ae\u72b0\u738a\u79b8\u808a\u961e\u4f0e\u4f18\u4f2c\u4ef5\u4f14\u4ef1\u4f00\u4ef7\u4f08\u4f1d\u4f02\u4f05\u4f22\u4f13\u4f04\u4ef4\u4f12\u51b1\u5213\u5209\u5210\u52a6\u5322\u531f\u534d\u538a\u5407\u56e1\u56df\u572e\u572a\u5734\u593c\u5980\u597c\u5985\u597b\u597e\u5977\u597f\u5b56\u5c15\u5c25\u5c7c\u5c7a\u5c7b\u5c7e\u5ddf\u5e75\u5e84\u5f02\u5f1a\u5f74\u5fd5\u5fd4\u5fcf\u625c\u625e\u6264\u6261\u6266\u6262\u6259\u6260\u625a\u6265\u65ef\u65ee\u673e\u6739\u6738\u673b\u673a\u673f\u673c\u6733\u6c18\u6c46\u6c52\u6c5c\u6c4f\u6c4a\u6c54\u6c4b"],["ca40","\u6c4c\u7071\u725e\u72b4\u72b5\u738e\u752a\u767f\u7a75\u7f51\u8278\u827c\u8280\u827d\u827f\u864d\u897e\u9099\u9097\u9098\u909b\u9094\u9622\u9624\u9620\u9623\u4f56\u4f3b\u4f62\u4f49\u4f53\u4f64\u4f3e\u4f67\u4f52\u4f5f\u4f41\u4f58\u4f2d\u4f33\u4f3f\u4f61\u518f\u51b9\u521c\u521e\u5221\u52ad\u52ae\u5309\u5363\u5372\u538e\u538f\u5430\u5437\u542a\u5454\u5445\u5419\u541c\u5425\u5418"],["caa1","\u543d\u544f\u5441\u5428\u5424\u5447\u56ee\u56e7\u56e5\u5741\u5745\u574c\u5749\u574b\u5752\u5906\u5940\u59a6\u5998\u59a0\u5997\u598e\u59a2\u5990\u598f\u59a7\u59a1\u5b8e\u5b92\u5c28\u5c2a\u5c8d\u5c8f\u5c88\u5c8b\u5c89\u5c92\u5c8a\u5c86\u5c93\u5c95\u5de0\u5e0a\u5e0e\u5e8b\u5e89\u5e8c\u5e88\u5e8d\u5f05\u5f1d\u5f78\u5f76\u5fd2\u5fd1\u5fd0\u5fed\u5fe8\u5fee\u5ff3\u5fe1\u5fe4\u5fe3\u5ffa\u5fef\u5ff7\u5ffb\u6000\u5ff4\u623a\u6283\u628c\u628e\u628f\u6294\u6287\u6271\u627b\u627a\u6270\u6281\u6288\u6277\u627d\u6272\u6274\u6537\u65f0\u65f4\u65f3\u65f2\u65f5\u6745\u6747"],["cb40","\u6759\u6755\u674c\u6748\u675d\u674d\u675a\u674b\u6bd0\u6c19\u6c1a\u6c78\u6c67\u6c6b\u6c84\u6c8b\u6c8f\u6c71\u6c6f\u6c69\u6c9a\u6c6d\u6c87\u6c95\u6c9c\u6c66\u6c73\u6c65\u6c7b\u6c8e\u7074\u707a\u7263\u72bf\u72bd\u72c3\u72c6\u72c1\u72ba\u72c5\u7395\u7397\u7393\u7394\u7392\u753a\u7539\u7594\u7595\u7681\u793d\u8034\u8095\u8099\u8090\u8092\u809c\u8290\u828f\u8285\u828e\u8291\u8293"],["cba1","\u828a\u8283\u8284\u8c78\u8fc9\u8fbf\u909f\u90a1\u90a5\u909e\u90a7\u90a0\u9630\u9628\u962f\u962d\u4e33\u4f98\u4f7c\u4f85\u4f7d\u4f80\u4f87\u4f76\u4f74\u4f89\u4f84\u4f77\u4f4c\u4f97\u4f6a\u4f9a\u4f79\u4f81\u4f78\u4f90\u4f9c\u4f94\u4f9e\u4f92\u4f82\u4f95\u4f6b\u4f6e\u519e\u51bc\u51be\u5235\u5232\u5233\u5246\u5231\u52bc\u530a\u530b\u533c\u5392\u5394\u5487\u547f\u5481\u5491\u5482\u5488\u546b\u547a\u547e\u5465\u546c\u5474\u5466\u548d\u546f\u5461\u5460\u5498\u5463\u5467\u5464\u56f7\u56f9\u576f\u5772\u576d\u576b\u5771\u5770\u5776\u5780\u5775\u577b\u5773\u5774\u5762"],["cc40","\u5768\u577d\u590c\u5945\u59b5\u59ba\u59cf\u59ce\u59b2\u59cc\u59c1\u59b6\u59bc\u59c3\u59d6\u59b1\u59bd\u59c0\u59c8\u59b4\u59c7\u5b62\u5b65\u5b93\u5b95\u5c44\u5c47\u5cae\u5ca4\u5ca0\u5cb5\u5caf\u5ca8\u5cac\u5c9f\u5ca3\u5cad\u5ca2\u5caa\u5ca7\u5c9d\u5ca5\u5cb6\u5cb0\u5ca6\u5e17\u5e14\u5e19\u5f28\u5f22\u5f23\u5f24\u5f54\u5f82\u5f7e\u5f7d\u5fde\u5fe5\u602d\u6026\u6019\u6032\u600b"],["cca1","\u6034\u600a\u6017\u6033\u601a\u601e\u602c\u6022\u600d\u6010\u602e\u6013\u6011\u600c\u6009\u601c\u6214\u623d\u62ad\u62b4\u62d1\u62be\u62aa\u62b6\u62ca\u62ae\u62b3\u62af\u62bb\u62a9\u62b0\u62b8\u653d\u65a8\u65bb\u6609\u65fc\u6604\u6612\u6608\u65fb\u6603\u660b\u660d\u6605\u65fd\u6611\u6610\u66f6\u670a\u6785\u676c\u678e\u6792\u6776\u677b\u6798\u6786\u6784\u6774\u678d\u678c\u677a\u679f\u6791\u6799\u6783\u677d\u6781\u6778\u6779\u6794\u6b25\u6b80\u6b7e\u6bde\u6c1d\u6c93\u6cec\u6ceb\u6cee\u6cd9\u6cb6\u6cd4\u6cad\u6ce7\u6cb7\u6cd0\u6cc2\u6cba\u6cc3\u6cc6\u6ced\u6cf2"],["cd40","\u6cd2\u6cdd\u6cb4\u6c8a\u6c9d\u6c80\u6cde\u6cc0\u6d30\u6ccd\u6cc7\u6cb0\u6cf9\u6ccf\u6ce9\u6cd1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709a\u7083\u726a\u72d6\u72cb\u72d8\u72c9\u72dc\u72d2\u72d4\u72da\u72cc\u72d1\u73a4\u73a1\u73ad\u73a6\u73a2\u73a0\u73ac\u739d\u74dd\u74e8\u753f\u7540\u753e\u758c\u7598\u76af\u76f3\u76f1\u76f0\u76f5\u77f8\u77fc\u77f9\u77fb\u77fa"],["cda1","\u77f7\u7942\u793f\u79c5\u7a78\u7a7b\u7afb\u7c75\u7cfd\u8035\u808f\u80ae\u80a3\u80b8\u80b5\u80ad\u8220\u82a0\u82c0\u82ab\u829a\u8298\u829b\u82b5\u82a7\u82ae\u82bc\u829e\u82ba\u82b4\u82a8\u82a1\u82a9\u82c2\u82a4\u82c3\u82b6\u82a2\u8670\u866f\u866d\u866e\u8c56\u8fd2\u8fcb\u8fd3\u8fcd\u8fd6\u8fd5\u8fd7\u90b2\u90b4\u90af\u90b3\u90b0\u9639\u963d\u963c\u963a\u9643\u4fcd\u4fc5\u4fd3\u4fb2\u4fc9\u4fcb\u4fc1\u4fd4\u4fdc\u4fd9\u4fbb\u4fb3\u4fdb\u4fc7\u4fd6\u4fba\u4fc0\u4fb9\u4fec\u5244\u5249\u52c0\u52c2\u533d\u537c\u5397\u5396\u5399\u5398\u54ba\u54a1\u54ad\u54a5\u54cf"],["ce40","\u54c3\u830d\u54b7\u54ae\u54d6\u54b6\u54c5\u54c6\u54a0\u5470\u54bc\u54a2\u54be\u5472\u54de\u54b0\u57b5\u579e\u579f\u57a4\u578c\u5797\u579d\u579b\u5794\u5798\u578f\u5799\u57a5\u579a\u5795\u58f4\u590d\u5953\u59e1\u59de\u59ee\u5a00\u59f1\u59dd\u59fa\u59fd\u59fc\u59f6\u59e4\u59f2\u59f7\u59db\u59e9\u59f3\u59f5\u59e0\u59fe\u59f4\u59ed\u5ba8\u5c4c\u5cd0\u5cd8\u5ccc\u5cd7\u5ccb\u5cdb"],["cea1","\u5cde\u5cda\u5cc9\u5cc7\u5cca\u5cd6\u5cd3\u5cd4\u5ccf\u5cc8\u5cc6\u5cce\u5cdf\u5cf8\u5df9\u5e21\u5e22\u5e23\u5e20\u5e24\u5eb0\u5ea4\u5ea2\u5e9b\u5ea3\u5ea5\u5f07\u5f2e\u5f56\u5f86\u6037\u6039\u6054\u6072\u605e\u6045\u6053\u6047\u6049\u605b\u604c\u6040\u6042\u605f\u6024\u6044\u6058\u6066\u606e\u6242\u6243\u62cf\u630d\u630b\u62f5\u630e\u6303\u62eb\u62f9\u630f\u630c\u62f8\u62f6\u6300\u6313\u6314\u62fa\u6315\u62fb\u62f0\u6541\u6543\u65aa\u65bf\u6636\u6621\u6632\u6635\u661c\u6626\u6622\u6633\u662b\u663a\u661d\u6634\u6639\u662e\u670f\u6710\u67c1\u67f2\u67c8\u67ba"],["cf40","\u67dc\u67bb\u67f8\u67d8\u67c0\u67b7\u67c5\u67eb\u67e4\u67df\u67b5\u67cd\u67b3\u67f7\u67f6\u67ee\u67e3\u67c2\u67b9\u67ce\u67e7\u67f0\u67b2\u67fc\u67c6\u67ed\u67cc\u67ae\u67e6\u67db\u67fa\u67c9\u67ca\u67c3\u67ea\u67cb\u6b28\u6b82\u6b84\u6bb6\u6bd6\u6bd8\u6be0\u6c20\u6c21\u6d28\u6d34\u6d2d\u6d1f\u6d3c\u6d3f\u6d12\u6d0a\u6cda\u6d33\u6d04\u6d19\u6d3a\u6d1a\u6d11\u6d00\u6d1d\u6d42"],["cfa1","\u6d01\u6d18\u6d37\u6d03\u6d0f\u6d40\u6d07\u6d20\u6d2c\u6d08\u6d22\u6d09\u6d10\u70b7\u709f\u70be\u70b1\u70b0\u70a1\u70b4\u70b5\u70a9\u7241\u7249\u724a\u726c\u7270\u7273\u726e\u72ca\u72e4\u72e8\u72eb\u72df\u72ea\u72e6\u72e3\u7385\u73cc\u73c2\u73c8\u73c5\u73b9\u73b6\u73b5\u73b4\u73eb\u73bf\u73c7\u73be\u73c3\u73c6\u73b8\u73cb\u74ec\u74ee\u752e\u7547\u7548\u75a7\u75aa\u7679\u76c4\u7708\u7703\u7704\u7705\u770a\u76f7\u76fb\u76fa\u77e7\u77e8\u7806\u7811\u7812\u7805\u7810\u780f\u780e\u7809\u7803\u7813\u794a\u794c\u794b\u7945\u7944\u79d5\u79cd\u79cf\u79d6\u79ce\u7a80"],["d040","\u7a7e\u7ad1\u7b00\u7b01\u7c7a\u7c78\u7c79\u7c7f\u7c80\u7c81\u7d03\u7d08\u7d01\u7f58\u7f91\u7f8d\u7fbe\u8007\u800e\u800f\u8014\u8037\u80d8\u80c7\u80e0\u80d1\u80c8\u80c2\u80d0\u80c5\u80e3\u80d9\u80dc\u80ca\u80d5\u80c9\u80cf\u80d7\u80e6\u80cd\u81ff\u8221\u8294\u82d9\u82fe\u82f9\u8307\u82e8\u8300\u82d5\u833a\u82eb\u82d6\u82f4\u82ec\u82e1\u82f2\u82f5\u830c\u82fb\u82f6\u82f0\u82ea"],["d0a1","\u82e4\u82e0\u82fa\u82f3\u82ed\u8677\u8674\u867c\u8673\u8841\u884e\u8867\u886a\u8869\u89d3\u8a04\u8a07\u8d72\u8fe3\u8fe1\u8fee\u8fe0\u90f1\u90bd\u90bf\u90d5\u90c5\u90be\u90c7\u90cb\u90c8\u91d4\u91d3\u9654\u964f\u9651\u9653\u964a\u964e\u501e\u5005\u5007\u5013\u5022\u5030\u501b\u4ff5\u4ff4\u5033\u5037\u502c\u4ff6\u4ff7\u5017\u501c\u5020\u5027\u5035\u502f\u5031\u500e\u515a\u5194\u5193\u51ca\u51c4\u51c5\u51c8\u51ce\u5261\u525a\u5252\u525e\u525f\u5255\u5262\u52cd\u530e\u539e\u5526\u54e2\u5517\u5512\u54e7\u54f3\u54e4\u551a\u54ff\u5504\u5508\u54eb\u5511\u5505\u54f1"],["d140","\u550a\u54fb\u54f7\u54f8\u54e0\u550e\u5503\u550b\u5701\u5702\u57cc\u5832\u57d5\u57d2\u57ba\u57c6\u57bd\u57bc\u57b8\u57b6\u57bf\u57c7\u57d0\u57b9\u57c1\u590e\u594a\u5a19\u5a16\u5a2d\u5a2e\u5a15\u5a0f\u5a17\u5a0a\u5a1e\u5a33\u5b6c\u5ba7\u5bad\u5bac\u5c03\u5c56\u5c54\u5cec\u5cff\u5cee\u5cf1\u5cf7\u5d00\u5cf9\u5e29\u5e28\u5ea8\u5eae\u5eaa\u5eac\u5f33\u5f30\u5f67\u605d\u605a\u6067"],["d1a1","\u6041\u60a2\u6088\u6080\u6092\u6081\u609d\u6083\u6095\u609b\u6097\u6087\u609c\u608e\u6219\u6246\u62f2\u6310\u6356\u632c\u6344\u6345\u6336\u6343\u63e4\u6339\u634b\u634a\u633c\u6329\u6341\u6334\u6358\u6354\u6359\u632d\u6347\u6333\u635a\u6351\u6338\u6357\u6340\u6348\u654a\u6546\u65c6\u65c3\u65c4\u65c2\u664a\u665f\u6647\u6651\u6712\u6713\u681f\u681a\u6849\u6832\u6833\u683b\u684b\u684f\u6816\u6831\u681c\u6835\u682b\u682d\u682f\u684e\u6844\u6834\u681d\u6812\u6814\u6826\u6828\u682e\u684d\u683a\u6825\u6820\u6b2c\u6b2f\u6b2d\u6b31\u6b34\u6b6d\u8082\u6b88\u6be6\u6be4"],["d240","\u6be8\u6be3\u6be2\u6be7\u6c25\u6d7a\u6d63\u6d64\u6d76\u6d0d\u6d61\u6d92\u6d58\u6d62\u6d6d\u6d6f\u6d91\u6d8d\u6def\u6d7f\u6d86\u6d5e\u6d67\u6d60\u6d97\u6d70\u6d7c\u6d5f\u6d82\u6d98\u6d2f\u6d68\u6d8b\u6d7e\u6d80\u6d84\u6d16\u6d83\u6d7b\u6d7d\u6d75\u6d90\u70dc\u70d3\u70d1\u70dd\u70cb\u7f39\u70e2\u70d7\u70d2\u70de\u70e0\u70d4\u70cd\u70c5\u70c6\u70c7\u70da\u70ce\u70e1\u7242\u7278"],["d2a1","\u7277\u7276\u7300\u72fa\u72f4\u72fe\u72f6\u72f3\u72fb\u7301\u73d3\u73d9\u73e5\u73d6\u73bc\u73e7\u73e3\u73e9\u73dc\u73d2\u73db\u73d4\u73dd\u73da\u73d7\u73d8\u73e8\u74de\u74df\u74f4\u74f5\u7521\u755b\u755f\u75b0\u75c1\u75bb\u75c4\u75c0\u75bf\u75b6\u75ba\u768a\u76c9\u771d\u771b\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771a\u7722\u7727\u7823\u782c\u7822\u7835\u782f\u7828\u782e\u782b\u7821\u7829\u7833\u782a\u7831\u7954\u795b\u794f\u795c\u7953\u7952\u7951\u79eb\u79ec\u79e0\u79ee\u79ed\u79ea\u79dc\u79de\u79dd\u7a86\u7a89\u7a85\u7a8b\u7a8c\u7a8a\u7a87\u7ad8\u7b10"],["d340","\u7b04\u7b13\u7b05\u7b0f\u7b08\u7b0a\u7b0e\u7b09\u7b12\u7c84\u7c91\u7c8a\u7c8c\u7c88\u7c8d\u7c85\u7d1e\u7d1d\u7d11\u7d0e\u7d18\u7d16\u7d13\u7d1f\u7d12\u7d0f\u7d0c\u7f5c\u7f61\u7f5e\u7f60\u7f5d\u7f5b\u7f96\u7f92\u7fc3\u7fc2\u7fc0\u8016\u803e\u8039\u80fa\u80f2\u80f9\u80f5\u8101\u80fb\u8100\u8201\u822f\u8225\u8333\u832d\u8344\u8319\u8351\u8325\u8356\u833f\u8341\u8326\u831c\u8322"],["d3a1","\u8342\u834e\u831b\u832a\u8308\u833c\u834d\u8316\u8324\u8320\u8337\u832f\u8329\u8347\u8345\u834c\u8353\u831e\u832c\u834b\u8327\u8348\u8653\u8652\u86a2\u86a8\u8696\u868d\u8691\u869e\u8687\u8697\u8686\u868b\u869a\u8685\u86a5\u8699\u86a1\u86a7\u8695\u8698\u868e\u869d\u8690\u8694\u8843\u8844\u886d\u8875\u8876\u8872\u8880\u8871\u887f\u886f\u8883\u887e\u8874\u887c\u8a12\u8c47\u8c57\u8c7b\u8ca4\u8ca3\u8d76\u8d78\u8db5\u8db7\u8db6\u8ed1\u8ed3\u8ffe\u8ff5\u9002\u8fff\u8ffb\u9004\u8ffc\u8ff6\u90d6\u90e0\u90d9\u90da\u90e3\u90df\u90e5\u90d8\u90db\u90d7\u90dc\u90e4\u9150"],["d440","\u914e\u914f\u91d5\u91e2\u91da\u965c\u965f\u96bc\u98e3\u9adf\u9b2f\u4e7f\u5070\u506a\u5061\u505e\u5060\u5053\u504b\u505d\u5072\u5048\u504d\u5041\u505b\u504a\u5062\u5015\u5045\u505f\u5069\u506b\u5063\u5064\u5046\u5040\u506e\u5073\u5057\u5051\u51d0\u526b\u526d\u526c\u526e\u52d6\u52d3\u532d\u539c\u5575\u5576\u553c\u554d\u5550\u5534\u552a\u5551\u5562\u5536\u5535\u5530\u5552\u5545"],["d4a1","\u550c\u5532\u5565\u554e\u5539\u5548\u552d\u553b\u5540\u554b\u570a\u5707\u57fb\u5814\u57e2\u57f6\u57dc\u57f4\u5800\u57ed\u57fd\u5808\u57f8\u580b\u57f3\u57cf\u5807\u57ee\u57e3\u57f2\u57e5\u57ec\u57e1\u580e\u57fc\u5810\u57e7\u5801\u580c\u57f1\u57e9\u57f0\u580d\u5804\u595c\u5a60\u5a58\u5a55\u5a67\u5a5e\u5a38\u5a35\u5a6d\u5a50\u5a5f\u5a65\u5a6c\u5a53\u5a64\u5a57\u5a43\u5a5d\u5a52\u5a44\u5a5b\u5a48\u5a8e\u5a3e\u5a4d\u5a39\u5a4c\u5a70\u5a69\u5a47\u5a51\u5a56\u5a42\u5a5c\u5b72\u5b6e\u5bc1\u5bc0\u5c59\u5d1e\u5d0b\u5d1d\u5d1a\u5d20\u5d0c\u5d28\u5d0d\u5d26\u5d25\u5d0f"],["d540","\u5d30\u5d12\u5d23\u5d1f\u5d2e\u5e3e\u5e34\u5eb1\u5eb4\u5eb9\u5eb2\u5eb3\u5f36\u5f38\u5f9b\u5f96\u5f9f\u608a\u6090\u6086\u60be\u60b0\u60ba\u60d3\u60d4\u60cf\u60e4\u60d9\u60dd\u60c8\u60b1\u60db\u60b7\u60ca\u60bf\u60c3\u60cd\u60c0\u6332\u6365\u638a\u6382\u637d\u63bd\u639e\u63ad\u639d\u6397\u63ab\u638e\u636f\u6387\u6390\u636e\u63af\u6375\u639c\u636d\u63ae\u637c\u63a4\u633b\u639f"],["d5a1","\u6378\u6385\u6381\u6391\u638d\u6370\u6553\u65cd\u6665\u6661\u665b\u6659\u665c\u6662\u6718\u6879\u6887\u6890\u689c\u686d\u686e\u68ae\u68ab\u6956\u686f\u68a3\u68ac\u68a9\u6875\u6874\u68b2\u688f\u6877\u6892\u687c\u686b\u6872\u68aa\u6880\u6871\u687e\u689b\u6896\u688b\u68a0\u6889\u68a4\u6878\u687b\u6891\u688c\u688a\u687d\u6b36\u6b33\u6b37\u6b38\u6b91\u6b8f\u6b8d\u6b8e\u6b8c\u6c2a\u6dc0\u6dab\u6db4\u6db3\u6e74\u6dac\u6de9\u6de2\u6db7\u6df6\u6dd4\u6e00\u6dc8\u6de0\u6ddf\u6dd6\u6dbe\u6de5\u6ddc\u6ddd\u6ddb\u6df4\u6dca\u6dbd\u6ded\u6df0\u6dba\u6dd5\u6dc2\u6dcf\u6dc9"],["d640","\u6dd0\u6df2\u6dd3\u6dfd\u6dd7\u6dcd\u6de3\u6dbb\u70fa\u710d\u70f7\u7117\u70f4\u710c\u70f0\u7104\u70f3\u7110\u70fc\u70ff\u7106\u7113\u7100\u70f8\u70f6\u710b\u7102\u710e\u727e\u727b\u727c\u727f\u731d\u7317\u7307\u7311\u7318\u730a\u7308\u72ff\u730f\u731e\u7388\u73f6\u73f8\u73f5\u7404\u7401\u73fd\u7407\u7400\u73fa\u73fc\u73ff\u740c\u740b\u73f4\u7408\u7564\u7563\u75ce\u75d2\u75cf"],["d6a1","\u75cb\u75cc\u75d1\u75d0\u768f\u7689\u76d3\u7739\u772f\u772d\u7731\u7732\u7734\u7733\u773d\u7725\u773b\u7735\u7848\u7852\u7849\u784d\u784a\u784c\u7826\u7845\u7850\u7964\u7967\u7969\u796a\u7963\u796b\u7961\u79bb\u79fa\u79f8\u79f6\u79f7\u7a8f\u7a94\u7a90\u7b35\u7b47\u7b34\u7b25\u7b30\u7b22\u7b24\u7b33\u7b18\u7b2a\u7b1d\u7b31\u7b2b\u7b2d\u7b2f\u7b32\u7b38\u7b1a\u7b23\u7c94\u7c98\u7c96\u7ca3\u7d35\u7d3d\u7d38\u7d36\u7d3a\u7d45\u7d2c\u7d29\u7d41\u7d47\u7d3e\u7d3f\u7d4a\u7d3b\u7d28\u7f63\u7f95\u7f9c\u7f9d\u7f9b\u7fca\u7fcb\u7fcd\u7fd0\u7fd1\u7fc7\u7fcf\u7fc9\u801f"],["d740","\u801e\u801b\u8047\u8043\u8048\u8118\u8125\u8119\u811b\u812d\u811f\u812c\u811e\u8121\u8115\u8127\u811d\u8122\u8211\u8238\u8233\u823a\u8234\u8232\u8274\u8390\u83a3\u83a8\u838d\u837a\u8373\u83a4\u8374\u838f\u8381\u8395\u8399\u8375\u8394\u83a9\u837d\u8383\u838c\u839d\u839b\u83aa\u838b\u837e\u83a5\u83af\u8388\u8397\u83b0\u837f\u83a6\u8387\u83ae\u8376\u839a\u8659\u8656\u86bf\u86b7"],["d7a1","\u86c2\u86c1\u86c5\u86ba\u86b0\u86c8\u86b9\u86b3\u86b8\u86cc\u86b4\u86bb\u86bc\u86c3\u86bd\u86be\u8852\u8889\u8895\u88a8\u88a2\u88aa\u889a\u8891\u88a1\u889f\u8898\u88a7\u8899\u889b\u8897\u88a4\u88ac\u888c\u8893\u888e\u8982\u89d6\u89d9\u89d5\u8a30\u8a27\u8a2c\u8a1e\u8c39\u8c3b\u8c5c\u8c5d\u8c7d\u8ca5\u8d7d\u8d7b\u8d79\u8dbc\u8dc2\u8db9\u8dbf\u8dc1\u8ed8\u8ede\u8edd\u8edc\u8ed7\u8ee0\u8ee1\u9024\u900b\u9011\u901c\u900c\u9021\u90ef\u90ea\u90f0\u90f4\u90f2\u90f3\u90d4\u90eb\u90ec\u90e9\u9156\u9158\u915a\u9153\u9155\u91ec\u91f4\u91f1\u91f3\u91f8\u91e4\u91f9\u91ea"],["d840","\u91eb\u91f7\u91e8\u91ee\u957a\u9586\u9588\u967c\u966d\u966b\u9671\u966f\u96bf\u976a\u9804\u98e5\u9997\u509b\u5095\u5094\u509e\u508b\u50a3\u5083\u508c\u508e\u509d\u5068\u509c\u5092\u5082\u5087\u515f\u51d4\u5312\u5311\u53a4\u53a7\u5591\u55a8\u55a5\u55ad\u5577\u5645\u55a2\u5593\u5588\u558f\u55b5\u5581\u55a3\u5592\u55a4\u557d\u558c\u55a6\u557f\u5595\u55a1\u558e\u570c\u5829\u5837"],["d8a1","\u5819\u581e\u5827\u5823\u5828\u57f5\u5848\u5825\u581c\u581b\u5833\u583f\u5836\u582e\u5839\u5838\u582d\u582c\u583b\u5961\u5aaf\u5a94\u5a9f\u5a7a\u5aa2\u5a9e\u5a78\u5aa6\u5a7c\u5aa5\u5aac\u5a95\u5aae\u5a37\u5a84\u5a8a\u5a97\u5a83\u5a8b\u5aa9\u5a7b\u5a7d\u5a8c\u5a9c\u5a8f\u5a93\u5a9d\u5bea\u5bcd\u5bcb\u5bd4\u5bd1\u5bca\u5bce\u5c0c\u5c30\u5d37\u5d43\u5d6b\u5d41\u5d4b\u5d3f\u5d35\u5d51\u5d4e\u5d55\u5d33\u5d3a\u5d52\u5d3d\u5d31\u5d59\u5d42\u5d39\u5d49\u5d38\u5d3c\u5d32\u5d36\u5d40\u5d45\u5e44\u5e41\u5f58\u5fa6\u5fa5\u5fab\u60c9\u60b9\u60cc\u60e2\u60ce\u60c4\u6114"],["d940","\u60f2\u610a\u6116\u6105\u60f5\u6113\u60f8\u60fc\u60fe\u60c1\u6103\u6118\u611d\u6110\u60ff\u6104\u610b\u624a\u6394\u63b1\u63b0\u63ce\u63e5\u63e8\u63ef\u63c3\u649d\u63f3\u63ca\u63e0\u63f6\u63d5\u63f2\u63f5\u6461\u63df\u63be\u63dd\u63dc\u63c4\u63d8\u63d3\u63c2\u63c7\u63cc\u63cb\u63c8\u63f0\u63d7\u63d9\u6532\u6567\u656a\u6564\u655c\u6568\u6565\u658c\u659d\u659e\u65ae\u65d0\u65d2"],["d9a1","\u667c\u666c\u667b\u6680\u6671\u6679\u666a\u6672\u6701\u690c\u68d3\u6904\u68dc\u692a\u68ec\u68ea\u68f1\u690f\u68d6\u68f7\u68eb\u68e4\u68f6\u6913\u6910\u68f3\u68e1\u6907\u68cc\u6908\u6970\u68b4\u6911\u68ef\u68c6\u6914\u68f8\u68d0\u68fd\u68fc\u68e8\u690b\u690a\u6917\u68ce\u68c8\u68dd\u68de\u68e6\u68f4\u68d1\u6906\u68d4\u68e9\u6915\u6925\u68c7\u6b39\u6b3b\u6b3f\u6b3c\u6b94\u6b97\u6b99\u6b95\u6bbd\u6bf0\u6bf2\u6bf3\u6c30\u6dfc\u6e46\u6e47\u6e1f\u6e49\u6e88\u6e3c\u6e3d\u6e45\u6e62\u6e2b\u6e3f\u6e41\u6e5d\u6e73\u6e1c\u6e33\u6e4b\u6e40\u6e51\u6e3b\u6e03\u6e2e\u6e5e"],["da40","\u6e68\u6e5c\u6e61\u6e31\u6e28\u6e60\u6e71\u6e6b\u6e39\u6e22\u6e30\u6e53\u6e65\u6e27\u6e78\u6e64\u6e77\u6e55\u6e79\u6e52\u6e66\u6e35\u6e36\u6e5a\u7120\u711e\u712f\u70fb\u712e\u7131\u7123\u7125\u7122\u7132\u711f\u7128\u713a\u711b\u724b\u725a\u7288\u7289\u7286\u7285\u728b\u7312\u730b\u7330\u7322\u7331\u7333\u7327\u7332\u732d\u7326\u7323\u7335\u730c\u742e\u742c\u7430\u742b\u7416"],["daa1","\u741a\u7421\u742d\u7431\u7424\u7423\u741d\u7429\u7420\u7432\u74fb\u752f\u756f\u756c\u75e7\u75da\u75e1\u75e6\u75dd\u75df\u75e4\u75d7\u7695\u7692\u76da\u7746\u7747\u7744\u774d\u7745\u774a\u774e\u774b\u774c\u77de\u77ec\u7860\u7864\u7865\u785c\u786d\u7871\u786a\u786e\u7870\u7869\u7868\u785e\u7862\u7974\u7973\u7972\u7970\u7a02\u7a0a\u7a03\u7a0c\u7a04\u7a99\u7ae6\u7ae4\u7b4a\u7b3b\u7b44\u7b48\u7b4c\u7b4e\u7b40\u7b58\u7b45\u7ca2\u7c9e\u7ca8\u7ca1\u7d58\u7d6f\u7d63\u7d53\u7d56\u7d67\u7d6a\u7d4f\u7d6d\u7d5c\u7d6b\u7d52\u7d54\u7d69\u7d51\u7d5f\u7d4e\u7f3e\u7f3f\u7f65"],["db40","\u7f66\u7fa2\u7fa0\u7fa1\u7fd7\u8051\u804f\u8050\u80fe\u80d4\u8143\u814a\u8152\u814f\u8147\u813d\u814d\u813a\u81e6\u81ee\u81f7\u81f8\u81f9\u8204\u823c\u823d\u823f\u8275\u833b\u83cf\u83f9\u8423\u83c0\u83e8\u8412\u83e7\u83e4\u83fc\u83f6\u8410\u83c6\u83c8\u83eb\u83e3\u83bf\u8401\u83dd\u83e5\u83d8\u83ff\u83e1\u83cb\u83ce\u83d6\u83f5\u83c9\u8409\u840f\u83de\u8411\u8406\u83c2\u83f3"],["dba1","\u83d5\u83fa\u83c7\u83d1\u83ea\u8413\u83c3\u83ec\u83ee\u83c4\u83fb\u83d7\u83e2\u841b\u83db\u83fe\u86d8\u86e2\u86e6\u86d3\u86e3\u86da\u86ea\u86dd\u86eb\u86dc\u86ec\u86e9\u86d7\u86e8\u86d1\u8848\u8856\u8855\u88ba\u88d7\u88b9\u88b8\u88c0\u88be\u88b6\u88bc\u88b7\u88bd\u88b2\u8901\u88c9\u8995\u8998\u8997\u89dd\u89da\u89db\u8a4e\u8a4d\u8a39\u8a59\u8a40\u8a57\u8a58\u8a44\u8a45\u8a52\u8a48\u8a51\u8a4a\u8a4c\u8a4f\u8c5f\u8c81\u8c80\u8cba\u8cbe\u8cb0\u8cb9\u8cb5\u8d84\u8d80\u8d89\u8dd8\u8dd3\u8dcd\u8dc7\u8dd6\u8ddc\u8dcf\u8dd5\u8dd9\u8dc8\u8dd7\u8dc5\u8eef\u8ef7\u8efa"],["dc40","\u8ef9\u8ee6\u8eee\u8ee5\u8ef5\u8ee7\u8ee8\u8ef6\u8eeb\u8ef1\u8eec\u8ef4\u8ee9\u902d\u9034\u902f\u9106\u912c\u9104\u90ff\u90fc\u9108\u90f9\u90fb\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915f\u9162\u9160\u9201\u920a\u9225\u9203\u921a\u9226\u920f\u920c\u9200\u9212\u91ff\u91fd\u9206\u9204\u9227\u9202\u921c\u9224\u9219\u9217\u9205\u9216\u957b\u958d\u958c\u9590\u9687\u967e\u9688"],["dca1","\u9689\u9683\u9680\u96c2\u96c8\u96c3\u96f1\u96f0\u976c\u9770\u976e\u9807\u98a9\u98eb\u9ce6\u9ef9\u4e83\u4e84\u4eb6\u50bd\u50bf\u50c6\u50ae\u50c4\u50ca\u50b4\u50c8\u50c2\u50b0\u50c1\u50ba\u50b1\u50cb\u50c9\u50b6\u50b8\u51d7\u527a\u5278\u527b\u527c\u55c3\u55db\u55cc\u55d0\u55cb\u55ca\u55dd\u55c0\u55d4\u55c4\u55e9\u55bf\u55d2\u558d\u55cf\u55d5\u55e2\u55d6\u55c8\u55f2\u55cd\u55d9\u55c2\u5714\u5853\u5868\u5864\u584f\u584d\u5849\u586f\u5855\u584e\u585d\u5859\u5865\u585b\u583d\u5863\u5871\u58fc\u5ac7\u5ac4\u5acb\u5aba\u5ab8\u5ab1\u5ab5\u5ab0\u5abf\u5ac8\u5abb\u5ac6"],["dd40","\u5ab7\u5ac0\u5aca\u5ab4\u5ab6\u5acd\u5ab9\u5a90\u5bd6\u5bd8\u5bd9\u5c1f\u5c33\u5d71\u5d63\u5d4a\u5d65\u5d72\u5d6c\u5d5e\u5d68\u5d67\u5d62\u5df0\u5e4f\u5e4e\u5e4a\u5e4d\u5e4b\u5ec5\u5ecc\u5ec6\u5ecb\u5ec7\u5f40\u5faf\u5fad\u60f7\u6149\u614a\u612b\u6145\u6136\u6132\u612e\u6146\u612f\u614f\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63c5\u63f1\u63eb\u6410\u6412\u6409\u6420\u6424"],["dda1","\u6433\u6443\u641f\u6415\u6418\u6439\u6437\u6422\u6423\u640c\u6426\u6430\u6428\u6441\u6435\u642f\u640a\u641a\u6440\u6425\u6427\u640b\u63e7\u641b\u642e\u6421\u640e\u656f\u6592\u65d3\u6686\u668c\u6695\u6690\u668b\u668a\u6699\u6694\u6678\u6720\u6966\u695f\u6938\u694e\u6962\u6971\u693f\u6945\u696a\u6939\u6942\u6957\u6959\u697a\u6948\u6949\u6935\u696c\u6933\u693d\u6965\u68f0\u6978\u6934\u6969\u6940\u696f\u6944\u6976\u6958\u6941\u6974\u694c\u693b\u694b\u6937\u695c\u694f\u6951\u6932\u6952\u692f\u697b\u693c\u6b46\u6b45\u6b43\u6b42\u6b48\u6b41\u6b9b\ufa0d\u6bfb\u6bfc"],["de40","\u6bf9\u6bf7\u6bf8\u6e9b\u6ed6\u6ec8\u6e8f\u6ec0\u6e9f\u6e93\u6e94\u6ea0\u6eb1\u6eb9\u6ec6\u6ed2\u6ebd\u6ec1\u6e9e\u6ec9\u6eb7\u6eb0\u6ecd\u6ea6\u6ecf\u6eb2\u6ebe\u6ec3\u6edc\u6ed8\u6e99\u6e92\u6e8e\u6e8d\u6ea4\u6ea1\u6ebf\u6eb3\u6ed0\u6eca\u6e97\u6eae\u6ea3\u7147\u7154\u7152\u7163\u7160\u7141\u715d\u7162\u7172\u7178\u716a\u7161\u7142\u7158\u7143\u714b\u7170\u715f\u7150\u7153"],["dea1","\u7144\u714d\u715a\u724f\u728d\u728c\u7291\u7290\u728e\u733c\u7342\u733b\u733a\u7340\u734a\u7349\u7444\u744a\u744b\u7452\u7451\u7457\u7440\u744f\u7450\u744e\u7442\u7446\u744d\u7454\u74e1\u74ff\u74fe\u74fd\u751d\u7579\u7577\u6983\u75ef\u760f\u7603\u75f7\u75fe\u75fc\u75f9\u75f8\u7610\u75fb\u75f6\u75ed\u75f5\u75fd\u7699\u76b5\u76dd\u7755\u775f\u7760\u7752\u7756\u775a\u7769\u7767\u7754\u7759\u776d\u77e0\u7887\u789a\u7894\u788f\u7884\u7895\u7885\u7886\u78a1\u7883\u7879\u7899\u7880\u7896\u787b\u797c\u7982\u797d\u7979\u7a11\u7a18\u7a19\u7a12\u7a17\u7a15\u7a22\u7a13"],["df40","\u7a1b\u7a10\u7aa3\u7aa2\u7a9e\u7aeb\u7b66\u7b64\u7b6d\u7b74\u7b69\u7b72\u7b65\u7b73\u7b71\u7b70\u7b61\u7b78\u7b76\u7b63\u7cb2\u7cb4\u7caf\u7d88\u7d86\u7d80\u7d8d\u7d7f\u7d85\u7d7a\u7d8e\u7d7b\u7d83\u7d7c\u7d8c\u7d94\u7d84\u7d7d\u7d92\u7f6d\u7f6b\u7f67\u7f68\u7f6c\u7fa6\u7fa5\u7fa7\u7fdb\u7fdc\u8021\u8164\u8160\u8177\u815c\u8169\u815b\u8162\u8172\u6721\u815e\u8176\u8167\u816f"],["dfa1","\u8144\u8161\u821d\u8249\u8244\u8240\u8242\u8245\u84f1\u843f\u8456\u8476\u8479\u848f\u848d\u8465\u8451\u8440\u8486\u8467\u8430\u844d\u847d\u845a\u8459\u8474\u8473\u845d\u8507\u845e\u8437\u843a\u8434\u847a\u8443\u8478\u8432\u8445\u8429\u83d9\u844b\u842f\u8442\u842d\u845f\u8470\u8439\u844e\u844c\u8452\u846f\u84c5\u848e\u843b\u8447\u8436\u8433\u8468\u847e\u8444\u842b\u8460\u8454\u846e\u8450\u870b\u8704\u86f7\u870c\u86fa\u86d6\u86f5\u874d\u86f8\u870e\u8709\u8701\u86f6\u870d\u8705\u88d6\u88cb\u88cd\u88ce\u88de\u88db\u88da\u88cc\u88d0\u8985\u899b\u89df\u89e5\u89e4"],["e040","\u89e1\u89e0\u89e2\u89dc\u89e6\u8a76\u8a86\u8a7f\u8a61\u8a3f\u8a77\u8a82\u8a84\u8a75\u8a83\u8a81\u8a74\u8a7a\u8c3c\u8c4b\u8c4a\u8c65\u8c64\u8c66\u8c86\u8c84\u8c85\u8ccc\u8d68\u8d69\u8d91\u8d8c\u8d8e\u8d8f\u8d8d\u8d93\u8d94\u8d90\u8d92\u8df0\u8de0\u8dec\u8df1\u8dee\u8dd0\u8de9\u8de3\u8de2\u8de7\u8df2\u8deb\u8df4\u8f06\u8eff\u8f01\u8f00\u8f05\u8f07\u8f08\u8f02\u8f0b\u9052\u903f"],["e0a1","\u9044\u9049\u903d\u9110\u910d\u910f\u9111\u9116\u9114\u910b\u910e\u916e\u916f\u9248\u9252\u9230\u923a\u9266\u9233\u9265\u925e\u9283\u922e\u924a\u9246\u926d\u926c\u924f\u9260\u9267\u926f\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924e\u9253\u924c\u9256\u9232\u959f\u959c\u959e\u959b\u9692\u9693\u9691\u9697\u96ce\u96fa\u96fd\u96f8\u96f5\u9773\u9777\u9778\u9772\u980f\u980d\u980e\u98ac\u98f6\u98f9\u99af\u99b2\u99b0\u99b5\u9aad\u9aab\u9b5b\u9cea\u9ced\u9ce7\u9e80\u9efd\u50e6\u50d4\u50d7\u50e8\u50f3\u50db\u50ea\u50dd\u50e4\u50d3\u50ec\u50f0\u50ef\u50e3\u50e0"],["e140","\u51d8\u5280\u5281\u52e9\u52eb\u5330\u53ac\u5627\u5615\u560c\u5612\u55fc\u560f\u561c\u5601\u5613\u5602\u55fa\u561d\u5604\u55ff\u55f9\u5889\u587c\u5890\u5898\u5886\u5881\u587f\u5874\u588b\u587a\u5887\u5891\u588e\u5876\u5882\u5888\u587b\u5894\u588f\u58fe\u596b\u5adc\u5aee\u5ae5\u5ad5\u5aea\u5ada\u5aed\u5aeb\u5af3\u5ae2\u5ae0\u5adb\u5aec\u5ade\u5add\u5ad9\u5ae8\u5adf\u5b77\u5be0"],["e1a1","\u5be3\u5c63\u5d82\u5d80\u5d7d\u5d86\u5d7a\u5d81\u5d77\u5d8a\u5d89\u5d88\u5d7e\u5d7c\u5d8d\u5d79\u5d7f\u5e58\u5e59\u5e53\u5ed8\u5ed1\u5ed7\u5ece\u5edc\u5ed5\u5ed9\u5ed2\u5ed4\u5f44\u5f43\u5f6f\u5fb6\u612c\u6128\u6141\u615e\u6171\u6173\u6152\u6153\u6172\u616c\u6180\u6174\u6154\u617a\u615b\u6165\u613b\u616a\u6161\u6156\u6229\u6227\u622b\u642b\u644d\u645b\u645d\u6474\u6476\u6472\u6473\u647d\u6475\u6466\u64a6\u644e\u6482\u645e\u645c\u644b\u6453\u6460\u6450\u647f\u643f\u646c\u646b\u6459\u6465\u6477\u6573\u65a0\u66a1\u66a0\u669f\u6705\u6704\u6722\u69b1\u69b6\u69c9"],["e240","\u69a0\u69ce\u6996\u69b0\u69ac\u69bc\u6991\u6999\u698e\u69a7\u698d\u69a9\u69be\u69af\u69bf\u69c4\u69bd\u69a4\u69d4\u69b9\u69ca\u699a\u69cf\u69b3\u6993\u69aa\u69a1\u699e\u69d9\u6997\u6990\u69c2\u69b5\u69a5\u69c6\u6b4a\u6b4d\u6b4b\u6b9e\u6b9f\u6ba0\u6bc3\u6bc4\u6bfe\u6ece\u6ef5\u6ef1\u6f03\u6f25\u6ef8\u6f37\u6efb\u6f2e\u6f09\u6f4e\u6f19\u6f1a\u6f27\u6f18\u6f3b\u6f12\u6eed\u6f0a"],["e2a1","\u6f36\u6f73\u6ef9\u6eee\u6f2d\u6f40\u6f30\u6f3c\u6f35\u6eeb\u6f07\u6f0e\u6f43\u6f05\u6efd\u6ef6\u6f39\u6f1c\u6efc\u6f3a\u6f1f\u6f0d\u6f1e\u6f08\u6f21\u7187\u7190\u7189\u7180\u7185\u7182\u718f\u717b\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734d\u7351\u734c\u7462\u7473\u7471\u7475\u7472\u7467\u746e\u7500\u7502\u7503\u757d\u7590\u7616\u7608\u760c\u7615\u7611\u760a\u7614\u76b8\u7781\u777c\u7785\u7782\u776e\u7780\u776f\u777e\u7783\u78b2\u78aa\u78b4\u78ad\u78a8\u787e\u78ab\u789e\u78a5\u78a0\u78ac\u78a2\u78a4\u7998\u798a\u798b\u7996\u7995\u7994\u7993"],["e340","\u7997\u7988\u7992\u7990\u7a2b\u7a4a\u7a30\u7a2f\u7a28\u7a26\u7aa8\u7aab\u7aac\u7aee\u7b88\u7b9c\u7b8a\u7b91\u7b90\u7b96\u7b8d\u7b8c\u7b9b\u7b8e\u7b85\u7b98\u5284\u7b99\u7ba4\u7b82\u7cbb\u7cbf\u7cbc\u7cba\u7da7\u7db7\u7dc2\u7da3\u7daa\u7dc1\u7dc0\u7dc5\u7d9d\u7dce\u7dc4\u7dc6\u7dcb\u7dcc\u7daf\u7db9\u7d96\u7dbc\u7d9f\u7da6\u7dae\u7da9\u7da1\u7dc9\u7f73\u7fe2\u7fe3\u7fe5\u7fde"],["e3a1","\u8024\u805d\u805c\u8189\u8186\u8183\u8187\u818d\u818c\u818b\u8215\u8497\u84a4\u84a1\u849f\u84ba\u84ce\u84c2\u84ac\u84ae\u84ab\u84b9\u84b4\u84c1\u84cd\u84aa\u849a\u84b1\u84d0\u849d\u84a7\u84bb\u84a2\u8494\u84c7\u84cc\u849b\u84a9\u84af\u84a8\u84d6\u8498\u84b6\u84cf\u84a0\u84d7\u84d4\u84d2\u84db\u84b0\u8491\u8661\u8733\u8723\u8728\u876b\u8740\u872e\u871e\u8721\u8719\u871b\u8743\u872c\u8741\u873e\u8746\u8720\u8732\u872a\u872d\u873c\u8712\u873a\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871a\u8730\u8711\u88f7\u88e7\u88f1\u88f2\u88fa\u88fe\u88ee\u88fc\u88f6\u88fb"],["e440","\u88f0\u88ec\u88eb\u899d\u89a1\u899f\u899e\u89e9\u89eb\u89e8\u8aab\u8a99\u8a8b\u8a92\u8a8f\u8a96\u8c3d\u8c68\u8c69\u8cd5\u8ccf\u8cd7\u8d96\u8e09\u8e02\u8dff\u8e0d\u8dfd\u8e0a\u8e03\u8e07\u8e06\u8e05\u8dfe\u8e00\u8e04\u8f10\u8f11\u8f0e\u8f0d\u9123\u911c\u9120\u9122\u911f\u911d\u911a\u9124\u9121\u911b\u917a\u9172\u9179\u9173\u92a5\u92a4\u9276\u929b\u927a\u92a0\u9294\u92aa\u928d"],["e4a1","\u92a6\u929a\u92ab\u9279\u9297\u927f\u92a3\u92ee\u928e\u9282\u9295\u92a2\u927d\u9288\u92a1\u928a\u9286\u928c\u9299\u92a7\u927e\u9287\u92a9\u929d\u928b\u922d\u969e\u96a1\u96ff\u9758\u977d\u977a\u977e\u9783\u9780\u9782\u977b\u9784\u9781\u977f\u97ce\u97cd\u9816\u98ad\u98ae\u9902\u9900\u9907\u999d\u999c\u99c3\u99b9\u99bb\u99ba\u99c2\u99bd\u99c7\u9ab1\u9ae3\u9ae7\u9b3e\u9b3f\u9b60\u9b61\u9b5f\u9cf1\u9cf2\u9cf5\u9ea7\u50ff\u5103\u5130\u50f8\u5106\u5107\u50f6\u50fe\u510b\u510c\u50fd\u510a\u528b\u528c\u52f1\u52ef\u5648\u5642\u564c\u5635\u5641\u564a\u5649\u5646\u5658"],["e540","\u565a\u5640\u5633\u563d\u562c\u563e\u5638\u562a\u563a\u571a\u58ab\u589d\u58b1\u58a0\u58a3\u58af\u58ac\u58a5\u58a1\u58ff\u5aff\u5af4\u5afd\u5af7\u5af6\u5b03\u5af8\u5b02\u5af9\u5b01\u5b07\u5b05\u5b0f\u5c67\u5d99\u5d97\u5d9f\u5d92\u5da2\u5d93\u5d95\u5da0\u5d9c\u5da1\u5d9a\u5d9e\u5e69\u5e5d\u5e60\u5e5c\u7df3\u5edb\u5ede\u5ee1\u5f49\u5fb2\u618b\u6183\u6179\u61b1\u61b0\u61a2\u6189"],["e5a1","\u619b\u6193\u61af\u61ad\u619f\u6192\u61aa\u61a1\u618d\u6166\u61b3\u622d\u646e\u6470\u6496\u64a0\u6485\u6497\u649c\u648f\u648b\u648a\u648c\u64a3\u649f\u6468\u64b1\u6498\u6576\u657a\u6579\u657b\u65b2\u65b3\u66b5\u66b0\u66a9\u66b2\u66b7\u66aa\u66af\u6a00\u6a06\u6a17\u69e5\u69f8\u6a15\u69f1\u69e4\u6a20\u69ff\u69ec\u69e2\u6a1b\u6a1d\u69fe\u6a27\u69f2\u69ee\u6a14\u69f7\u69e7\u6a40\u6a08\u69e6\u69fb\u6a0d\u69fc\u69eb\u6a09\u6a04\u6a18\u6a25\u6a0f\u69f6\u6a26\u6a07\u69f4\u6a16\u6b51\u6ba5\u6ba3\u6ba2\u6ba6\u6c01\u6c00\u6bff\u6c02\u6f41\u6f26\u6f7e\u6f87\u6fc6\u6f92"],["e640","\u6f8d\u6f89\u6f8c\u6f62\u6f4f\u6f85\u6f5a\u6f96\u6f76\u6f6c\u6f82\u6f55\u6f72\u6f52\u6f50\u6f57\u6f94\u6f93\u6f5d\u6f00\u6f61\u6f6b\u6f7d\u6f67\u6f90\u6f53\u6f8b\u6f69\u6f7f\u6f95\u6f63\u6f77\u6f6a\u6f7b\u71b2\u71af\u719b\u71b0\u71a0\u719a\u71a9\u71b5\u719d\u71a5\u719e\u71a4\u71a1\u71aa\u719c\u71a7\u71b3\u7298\u729a\u7358\u7352\u735e\u735f\u7360\u735d\u735b\u7361\u735a\u7359"],["e6a1","\u7362\u7487\u7489\u748a\u7486\u7481\u747d\u7485\u7488\u747c\u7479\u7508\u7507\u757e\u7625\u761e\u7619\u761d\u761c\u7623\u761a\u7628\u761b\u769c\u769d\u769e\u769b\u778d\u778f\u7789\u7788\u78cd\u78bb\u78cf\u78cc\u78d1\u78ce\u78d4\u78c8\u78c3\u78c4\u78c9\u799a\u79a1\u79a0\u799c\u79a2\u799b\u6b76\u7a39\u7ab2\u7ab4\u7ab3\u7bb7\u7bcb\u7bbe\u7bac\u7bce\u7baf\u7bb9\u7bca\u7bb5\u7cc5\u7cc8\u7ccc\u7ccb\u7df7\u7ddb\u7dea\u7de7\u7dd7\u7de1\u7e03\u7dfa\u7de6\u7df6\u7df1\u7df0\u7dee\u7ddf\u7f76\u7fac\u7fb0\u7fad\u7fed\u7feb\u7fea\u7fec\u7fe6\u7fe8\u8064\u8067\u81a3\u819f"],["e740","\u819e\u8195\u81a2\u8199\u8197\u8216\u824f\u8253\u8252\u8250\u824e\u8251\u8524\u853b\u850f\u8500\u8529\u850e\u8509\u850d\u851f\u850a\u8527\u851c\u84fb\u852b\u84fa\u8508\u850c\u84f4\u852a\u84f2\u8515\u84f7\u84eb\u84f3\u84fc\u8512\u84ea\u84e9\u8516\u84fe\u8528\u851d\u852e\u8502\u84fd\u851e\u84f6\u8531\u8526\u84e7\u84e8\u84f0\u84ef\u84f9\u8518\u8520\u8530\u850b\u8519\u852f\u8662"],["e7a1","\u8756\u8763\u8764\u8777\u87e1\u8773\u8758\u8754\u875b\u8752\u8761\u875a\u8751\u875e\u876d\u876a\u8750\u874e\u875f\u875d\u876f\u876c\u877a\u876e\u875c\u8765\u874f\u877b\u8775\u8762\u8767\u8769\u885a\u8905\u890c\u8914\u890b\u8917\u8918\u8919\u8906\u8916\u8911\u890e\u8909\u89a2\u89a4\u89a3\u89ed\u89f0\u89ec\u8acf\u8ac6\u8ab8\u8ad3\u8ad1\u8ad4\u8ad5\u8abb\u8ad7\u8abe\u8ac0\u8ac5\u8ad8\u8ac3\u8aba\u8abd\u8ad9\u8c3e\u8c4d\u8c8f\u8ce5\u8cdf\u8cd9\u8ce8\u8cda\u8cdd\u8ce7\u8da0\u8d9c\u8da1\u8d9b\u8e20\u8e23\u8e25\u8e24\u8e2e\u8e15\u8e1b\u8e16\u8e11\u8e19\u8e26\u8e27"],["e840","\u8e14\u8e12\u8e18\u8e13\u8e1c\u8e17\u8e1a\u8f2c\u8f24\u8f18\u8f1a\u8f20\u8f23\u8f16\u8f17\u9073\u9070\u906f\u9067\u906b\u912f\u912b\u9129\u912a\u9132\u9126\u912e\u9185\u9186\u918a\u9181\u9182\u9184\u9180\u92d0\u92c3\u92c4\u92c0\u92d9\u92b6\u92cf\u92f1\u92df\u92d8\u92e9\u92d7\u92dd\u92cc\u92ef\u92c2\u92e8\u92ca\u92c8\u92ce\u92e6\u92cd\u92d5\u92c9\u92e0\u92de\u92e7\u92d1\u92d3"],["e8a1","\u92b5\u92e1\u92c6\u92b4\u957c\u95ac\u95ab\u95ae\u95b0\u96a4\u96a2\u96d3\u9705\u9708\u9702\u975a\u978a\u978e\u9788\u97d0\u97cf\u981e\u981d\u9826\u9829\u9828\u9820\u981b\u9827\u98b2\u9908\u98fa\u9911\u9914\u9916\u9917\u9915\u99dc\u99cd\u99cf\u99d3\u99d4\u99ce\u99c9\u99d6\u99d8\u99cb\u99d7\u99cc\u9ab3\u9aec\u9aeb\u9af3\u9af2\u9af1\u9b46\u9b43\u9b67\u9b74\u9b71\u9b66\u9b76\u9b75\u9b70\u9b68\u9b64\u9b6c\u9cfc\u9cfa\u9cfd\u9cff\u9cf7\u9d07\u9d00\u9cf9\u9cfb\u9d08\u9d05\u9d04\u9e83\u9ed3\u9f0f\u9f10\u511c\u5113\u5117\u511a\u5111\u51de\u5334\u53e1\u5670\u5660\u566e"],["e940","\u5673\u5666\u5663\u566d\u5672\u565e\u5677\u571c\u571b\u58c8\u58bd\u58c9\u58bf\u58ba\u58c2\u58bc\u58c6\u5b17\u5b19\u5b1b\u5b21\u5b14\u5b13\u5b10\u5b16\u5b28\u5b1a\u5b20\u5b1e\u5bef\u5dac\u5db1\u5da9\u5da7\u5db5\u5db0\u5dae\u5daa\u5da8\u5db2\u5dad\u5daf\u5db4\u5e67\u5e68\u5e66\u5e6f\u5ee9\u5ee7\u5ee6\u5ee8\u5ee5\u5f4b\u5fbc\u619d\u61a8\u6196\u61c5\u61b4\u61c6\u61c1\u61cc\u61ba"],["e9a1","\u61bf\u61b8\u618c\u64d7\u64d6\u64d0\u64cf\u64c9\u64bd\u6489\u64c3\u64db\u64f3\u64d9\u6533\u657f\u657c\u65a2\u66c8\u66be\u66c0\u66ca\u66cb\u66cf\u66bd\u66bb\u66ba\u66cc\u6723\u6a34\u6a66\u6a49\u6a67\u6a32\u6a68\u6a3e\u6a5d\u6a6d\u6a76\u6a5b\u6a51\u6a28\u6a5a\u6a3b\u6a3f\u6a41\u6a6a\u6a64\u6a50\u6a4f\u6a54\u6a6f\u6a69\u6a60\u6a3c\u6a5e\u6a56\u6a55\u6a4d\u6a4e\u6a46\u6b55\u6b54\u6b56\u6ba7\u6baa\u6bab\u6bc8\u6bc7\u6c04\u6c03\u6c06\u6fad\u6fcb\u6fa3\u6fc7\u6fbc\u6fce\u6fc8\u6f5e\u6fc4\u6fbd\u6f9e\u6fca\u6fa8\u7004\u6fa5\u6fae\u6fba\u6fac\u6faa\u6fcf\u6fbf\u6fb8"],["ea40","\u6fa2\u6fc9\u6fab\u6fcd\u6faf\u6fb2\u6fb0\u71c5\u71c2\u71bf\u71b8\u71d6\u71c0\u71c1\u71cb\u71d4\u71ca\u71c7\u71cf\u71bd\u71d8\u71bc\u71c6\u71da\u71db\u729d\u729e\u7369\u7366\u7367\u736c\u7365\u736b\u736a\u747f\u749a\u74a0\u7494\u7492\u7495\u74a1\u750b\u7580\u762f\u762d\u7631\u763d\u7633\u763c\u7635\u7632\u7630\u76bb\u76e6\u779a\u779d\u77a1\u779c\u779b\u77a2\u77a3\u7795\u7799"],["eaa1","\u7797\u78dd\u78e9\u78e5\u78ea\u78de\u78e3\u78db\u78e1\u78e2\u78ed\u78df\u78e0\u79a4\u7a44\u7a48\u7a47\u7ab6\u7ab8\u7ab5\u7ab1\u7ab7\u7bde\u7be3\u7be7\u7bdd\u7bd5\u7be5\u7bda\u7be8\u7bf9\u7bd4\u7bea\u7be2\u7bdc\u7beb\u7bd8\u7bdf\u7cd2\u7cd4\u7cd7\u7cd0\u7cd1\u7e12\u7e21\u7e17\u7e0c\u7e1f\u7e20\u7e13\u7e0e\u7e1c\u7e15\u7e1a\u7e22\u7e0b\u7e0f\u7e16\u7e0d\u7e14\u7e25\u7e24\u7f43\u7f7b\u7f7c\u7f7a\u7fb1\u7fef\u802a\u8029\u806c\u81b1\u81a6\u81ae\u81b9\u81b5\u81ab\u81b0\u81ac\u81b4\u81b2\u81b7\u81a7\u81f2\u8255\u8256\u8257\u8556\u8545\u856b\u854d\u8553\u8561\u8558"],["eb40","\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853e\u855b\u8571\u854e\u856e\u8575\u8555\u8567\u8560\u858c\u8566\u855d\u8554\u8565\u856c\u8663\u8665\u8664\u879b\u878f\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87a3\u8785\u8790\u8791\u879d\u8784\u8794\u879c\u879a\u8789\u891e\u8926\u8930\u892d\u892e\u8927\u8931\u8922\u8929\u8923\u892f\u892c\u891f\u89f1\u8ae0"],["eba1","\u8ae2\u8af2\u8af4\u8af5\u8add\u8b14\u8ae4\u8adf\u8af0\u8ac8\u8ade\u8ae1\u8ae8\u8aff\u8aef\u8afb\u8c91\u8c92\u8c90\u8cf5\u8cee\u8cf1\u8cf0\u8cf3\u8d6c\u8d6e\u8da5\u8da7\u8e33\u8e3e\u8e38\u8e40\u8e45\u8e36\u8e3c\u8e3d\u8e41\u8e30\u8e3f\u8ebd\u8f36\u8f2e\u8f35\u8f32\u8f39\u8f37\u8f34\u9076\u9079\u907b\u9086\u90fa\u9133\u9135\u9136\u9193\u9190\u9191\u918d\u918f\u9327\u931e\u9308\u931f\u9306\u930f\u937a\u9338\u933c\u931b\u9323\u9312\u9301\u9346\u932d\u930e\u930d\u92cb\u931d\u92fa\u9325\u9313\u92f9\u92f7\u9334\u9302\u9324\u92ff\u9329\u9339\u9335\u932a\u9314\u930c"],["ec40","\u930b\u92fe\u9309\u9300\u92fb\u9316\u95bc\u95cd\u95be\u95b9\u95ba\u95b6\u95bf\u95b5\u95bd\u96a9\u96d4\u970b\u9712\u9710\u9799\u9797\u9794\u97f0\u97f8\u9835\u982f\u9832\u9924\u991f\u9927\u9929\u999e\u99ee\u99ec\u99e5\u99e4\u99f0\u99e3\u99ea\u99e9\u99e7\u9ab9\u9abf\u9ab4\u9abb\u9af6\u9afa\u9af9\u9af7\u9b33\u9b80\u9b85\u9b87\u9b7c\u9b7e\u9b7b\u9b82\u9b93\u9b92\u9b90\u9b7a\u9b95"],["eca1","\u9b7d\u9b88\u9d25\u9d17\u9d20\u9d1e\u9d14\u9d29\u9d1d\u9d18\u9d22\u9d10\u9d19\u9d1f\u9e88\u9e86\u9e87\u9eae\u9ead\u9ed5\u9ed6\u9efa\u9f12\u9f3d\u5126\u5125\u5122\u5124\u5120\u5129\u52f4\u5693\u568c\u568d\u5686\u5684\u5683\u567e\u5682\u567f\u5681\u58d6\u58d4\u58cf\u58d2\u5b2d\u5b25\u5b32\u5b23\u5b2c\u5b27\u5b26\u5b2f\u5b2e\u5b7b\u5bf1\u5bf2\u5db7\u5e6c\u5e6a\u5fbe\u5fbb\u61c3\u61b5\u61bc\u61e7\u61e0\u61e5\u61e4\u61e8\u61de\u64ef\u64e9\u64e3\u64eb\u64e4\u64e8\u6581\u6580\u65b6\u65da\u66d2\u6a8d\u6a96\u6a81\u6aa5\u6a89\u6a9f\u6a9b\u6aa1\u6a9e\u6a87\u6a93\u6a8e"],["ed40","\u6a95\u6a83\u6aa8\u6aa4\u6a91\u6a7f\u6aa6\u6a9a\u6a85\u6a8c\u6a92\u6b5b\u6bad\u6c09\u6fcc\u6fa9\u6ff4\u6fd4\u6fe3\u6fdc\u6fed\u6fe7\u6fe6\u6fde\u6ff2\u6fdd\u6fe2\u6fe8\u71e1\u71f1\u71e8\u71f2\u71e4\u71f0\u71e2\u7373\u736e\u736f\u7497\u74b2\u74ab\u7490\u74aa\u74ad\u74b1\u74a5\u74af\u7510\u7511\u7512\u750f\u7584\u7643\u7648\u7649\u7647\u76a4\u76e9\u77b5\u77ab\u77b2\u77b7\u77b6"],["eda1","\u77b4\u77b1\u77a8\u77f0\u78f3\u78fd\u7902\u78fb\u78fc\u78f2\u7905\u78f9\u78fe\u7904\u79ab\u79a8\u7a5c\u7a5b\u7a56\u7a58\u7a54\u7a5a\u7abe\u7ac0\u7ac1\u7c05\u7c0f\u7bf2\u7c00\u7bff\u7bfb\u7c0e\u7bf4\u7c0b\u7bf3\u7c02\u7c09\u7c03\u7c01\u7bf8\u7bfd\u7c06\u7bf0\u7bf1\u7c10\u7c0a\u7ce8\u7e2d\u7e3c\u7e42\u7e33\u9848\u7e38\u7e2a\u7e49\u7e40\u7e47\u7e29\u7e4c\u7e30\u7e3b\u7e36\u7e44\u7e3a\u7f45\u7f7f\u7f7e\u7f7d\u7ff4\u7ff2\u802c\u81bb\u81c4\u81cc\u81ca\u81c5\u81c7\u81bc\u81e9\u825b\u825a\u825c\u8583\u8580\u858f\u85a7\u8595\u85a0\u858b\u85a3\u857b\u85a4\u859a\u859e"],["ee40","\u8577\u857c\u8589\u85a1\u857a\u8578\u8557\u858e\u8596\u8586\u858d\u8599\u859d\u8581\u85a2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859f\u8668\u87be\u87aa\u87ad\u87c5\u87b0\u87ac\u87b9\u87b5\u87bc\u87ae\u87c9\u87c3\u87c2\u87cc\u87b7\u87af\u87c4\u87ca\u87b4\u87b6\u87bf\u87b8\u87bd\u87de\u87b2\u8935\u8933\u893c\u893e\u8941\u8952\u8937\u8942\u89ad\u89af\u89ae\u89f2\u89f3\u8b1e"],["eea1","\u8b18\u8b16\u8b11\u8b05\u8b0b\u8b22\u8b0f\u8b12\u8b15\u8b07\u8b0d\u8b08\u8b06\u8b1c\u8b13\u8b1a\u8c4f\u8c70\u8c72\u8c71\u8c6f\u8c95\u8c94\u8cf9\u8d6f\u8e4e\u8e4d\u8e53\u8e50\u8e4c\u8e47\u8f43\u8f40\u9085\u907e\u9138\u919a\u91a2\u919b\u9199\u919f\u91a1\u919d\u91a0\u93a1\u9383\u93af\u9364\u9356\u9347\u937c\u9358\u935c\u9376\u9349\u9350\u9351\u9360\u936d\u938f\u934c\u936a\u9379\u9357\u9355\u9352\u934f\u9371\u9377\u937b\u9361\u935e\u9363\u9367\u9380\u934e\u9359\u95c7\u95c0\u95c9\u95c3\u95c5\u95b7\u96ae\u96b0\u96ac\u9720\u971f\u9718\u971d\u9719\u979a\u97a1\u979c"],["ef40","\u979e\u979d\u97d5\u97d4\u97f1\u9841\u9844\u984a\u9849\u9845\u9843\u9925\u992b\u992c\u992a\u9933\u9932\u992f\u992d\u9931\u9930\u9998\u99a3\u99a1\u9a02\u99fa\u99f4\u99f7\u99f9\u99f8\u99f6\u99fb\u99fd\u99fe\u99fc\u9a03\u9abe\u9afe\u9afd\u9b01\u9afc\u9b48\u9b9a\u9ba8\u9b9e\u9b9b\u9ba6\u9ba1\u9ba5\u9ba4\u9b86\u9ba2\u9ba0\u9baf\u9d33\u9d41\u9d67\u9d36\u9d2e\u9d2f\u9d31\u9d38\u9d30"],["efa1","\u9d45\u9d42\u9d43\u9d3e\u9d37\u9d40\u9d3d\u7ff5\u9d2d\u9e8a\u9e89\u9e8d\u9eb0\u9ec8\u9eda\u9efb\u9eff\u9f24\u9f23\u9f22\u9f54\u9fa0\u5131\u512d\u512e\u5698\u569c\u5697\u569a\u569d\u5699\u5970\u5b3c\u5c69\u5c6a\u5dc0\u5e6d\u5e6e\u61d8\u61df\u61ed\u61ee\u61f1\u61ea\u61f0\u61eb\u61d6\u61e9\u64ff\u6504\u64fd\u64f8\u6501\u6503\u64fc\u6594\u65db\u66da\u66db\u66d8\u6ac5\u6ab9\u6abd\u6ae1\u6ac6\u6aba\u6ab6\u6ab7\u6ac7\u6ab4\u6aad\u6b5e\u6bc9\u6c0b\u7007\u700c\u700d\u7001\u7005\u7014\u700e\u6fff\u7000\u6ffb\u7026\u6ffc\u6ff7\u700a\u7201\u71ff\u71f9\u7203\u71fd\u7376"],["f040","\u74b8\u74c0\u74b5\u74c1\u74be\u74b6\u74bb\u74c2\u7514\u7513\u765c\u7664\u7659\u7650\u7653\u7657\u765a\u76a6\u76bd\u76ec\u77c2\u77ba\u78ff\u790c\u7913\u7914\u7909\u7910\u7912\u7911\u79ad\u79ac\u7a5f\u7c1c\u7c29\u7c19\u7c20\u7c1f\u7c2d\u7c1d\u7c26\u7c28\u7c22\u7c25\u7c30\u7e5c\u7e50\u7e56\u7e63\u7e58\u7e62\u7e5f\u7e51\u7e60\u7e57\u7e53\u7fb5\u7fb3\u7ff7\u7ff8\u8075\u81d1\u81d2"],["f0a1","\u81d0\u825f\u825e\u85b4\u85c6\u85c0\u85c3\u85c2\u85b3\u85b5\u85bd\u85c7\u85c4\u85bf\u85cb\u85ce\u85c8\u85c5\u85b1\u85b6\u85d2\u8624\u85b8\u85b7\u85be\u8669\u87e7\u87e6\u87e2\u87db\u87eb\u87ea\u87e5\u87df\u87f3\u87e4\u87d4\u87dc\u87d3\u87ed\u87d8\u87e3\u87a4\u87d7\u87d9\u8801\u87f4\u87e8\u87dd\u8953\u894b\u894f\u894c\u8946\u8950\u8951\u8949\u8b2a\u8b27\u8b23\u8b33\u8b30\u8b35\u8b47\u8b2f\u8b3c\u8b3e\u8b31\u8b25\u8b37\u8b26\u8b36\u8b2e\u8b24\u8b3b\u8b3d\u8b3a\u8c42\u8c75\u8c99\u8c98\u8c97\u8cfe\u8d04\u8d02\u8d00\u8e5c\u8e62\u8e60\u8e57\u8e56\u8e5e\u8e65\u8e67"],["f140","\u8e5b\u8e5a\u8e61\u8e5d\u8e69\u8e54\u8f46\u8f47\u8f48\u8f4b\u9128\u913a\u913b\u913e\u91a8\u91a5\u91a7\u91af\u91aa\u93b5\u938c\u9392\u93b7\u939b\u939d\u9389\u93a7\u938e\u93aa\u939e\u93a6\u9395\u9388\u9399\u939f\u938d\u93b1\u9391\u93b2\u93a4\u93a8\u93b4\u93a3\u93a5\u95d2\u95d3\u95d1\u96b3\u96d7\u96da\u5dc2\u96df\u96d8\u96dd\u9723\u9722\u9725\u97ac\u97ae\u97a8\u97ab\u97a4\u97aa"],["f1a1","\u97a2\u97a5\u97d7\u97d9\u97d6\u97d8\u97fa\u9850\u9851\u9852\u98b8\u9941\u993c\u993a\u9a0f\u9a0b\u9a09\u9a0d\u9a04\u9a11\u9a0a\u9a05\u9a07\u9a06\u9ac0\u9adc\u9b08\u9b04\u9b05\u9b29\u9b35\u9b4a\u9b4c\u9b4b\u9bc7\u9bc6\u9bc3\u9bbf\u9bc1\u9bb5\u9bb8\u9bd3\u9bb6\u9bc4\u9bb9\u9bbd\u9d5c\u9d53\u9d4f\u9d4a\u9d5b\u9d4b\u9d59\u9d56\u9d4c\u9d57\u9d52\u9d54\u9d5f\u9d58\u9d5a\u9e8e\u9e8c\u9edf\u9f01\u9f00\u9f16\u9f25\u9f2b\u9f2a\u9f29\u9f28\u9f4c\u9f55\u5134\u5135\u5296\u52f7\u53b4\u56ab\u56ad\u56a6\u56a7\u56aa\u56ac\u58da\u58dd\u58db\u5912\u5b3d\u5b3e\u5b3f\u5dc3\u5e70"],["f240","\u5fbf\u61fb\u6507\u6510\u650d\u6509\u650c\u650e\u6584\u65de\u65dd\u66de\u6ae7\u6ae0\u6acc\u6ad1\u6ad9\u6acb\u6adf\u6adc\u6ad0\u6aeb\u6acf\u6acd\u6ade\u6b60\u6bb0\u6c0c\u7019\u7027\u7020\u7016\u702b\u7021\u7022\u7023\u7029\u7017\u7024\u701c\u702a\u720c\u720a\u7207\u7202\u7205\u72a5\u72a6\u72a4\u72a3\u72a1\u74cb\u74c5\u74b7\u74c3\u7516\u7660\u77c9\u77ca\u77c4\u77f1\u791d\u791b"],["f2a1","\u7921\u791c\u7917\u791e\u79b0\u7a67\u7a68\u7c33\u7c3c\u7c39\u7c2c\u7c3b\u7cec\u7cea\u7e76\u7e75\u7e78\u7e70\u7e77\u7e6f\u7e7a\u7e72\u7e74\u7e68\u7f4b\u7f4a\u7f83\u7f86\u7fb7\u7ffd\u7ffe\u8078\u81d7\u81d5\u8264\u8261\u8263\u85eb\u85f1\u85ed\u85d9\u85e1\u85e8\u85da\u85d7\u85ec\u85f2\u85f8\u85d8\u85df\u85e3\u85dc\u85d1\u85f0\u85e6\u85ef\u85de\u85e2\u8800\u87fa\u8803\u87f6\u87f7\u8809\u880c\u880b\u8806\u87fc\u8808\u87ff\u880a\u8802\u8962\u895a\u895b\u8957\u8961\u895c\u8958\u895d\u8959\u8988\u89b7\u89b6\u89f6\u8b50\u8b48\u8b4a\u8b40\u8b53\u8b56\u8b54\u8b4b\u8b55"],["f340","\u8b51\u8b42\u8b52\u8b57\u8c43\u8c77\u8c76\u8c9a\u8d06\u8d07\u8d09\u8dac\u8daa\u8dad\u8dab\u8e6d\u8e78\u8e73\u8e6a\u8e6f\u8e7b\u8ec2\u8f52\u8f51\u8f4f\u8f50\u8f53\u8fb4\u9140\u913f\u91b0\u91ad\u93de\u93c7\u93cf\u93c2\u93da\u93d0\u93f9\u93ec\u93cc\u93d9\u93a9\u93e6\u93ca\u93d4\u93ee\u93e3\u93d5\u93c4\u93ce\u93c0\u93d2\u93e7\u957d\u95da\u95db\u96e1\u9729\u972b\u972c\u9728\u9726"],["f3a1","\u97b3\u97b7\u97b6\u97dd\u97de\u97df\u985c\u9859\u985d\u9857\u98bf\u98bd\u98bb\u98be\u9948\u9947\u9943\u99a6\u99a7\u9a1a\u9a15\u9a25\u9a1d\u9a24\u9a1b\u9a22\u9a20\u9a27\u9a23\u9a1e\u9a1c\u9a14\u9ac2\u9b0b\u9b0a\u9b0e\u9b0c\u9b37\u9bea\u9beb\u9be0\u9bde\u9be4\u9be6\u9be2\u9bf0\u9bd4\u9bd7\u9bec\u9bdc\u9bd9\u9be5\u9bd5\u9be1\u9bda\u9d77\u9d81\u9d8a\u9d84\u9d88\u9d71\u9d80\u9d78\u9d86\u9d8b\u9d8c\u9d7d\u9d6b\u9d74\u9d75\u9d70\u9d69\u9d85\u9d73\u9d7b\u9d82\u9d6f\u9d79\u9d7f\u9d87\u9d68\u9e94\u9e91\u9ec0\u9efc\u9f2d\u9f40\u9f41\u9f4d\u9f56\u9f57\u9f58\u5337\u56b2"],["f440","\u56b5\u56b3\u58e3\u5b45\u5dc6\u5dc7\u5eee\u5eef\u5fc0\u5fc1\u61f9\u6517\u6516\u6515\u6513\u65df\u66e8\u66e3\u66e4\u6af3\u6af0\u6aea\u6ae8\u6af9\u6af1\u6aee\u6aef\u703c\u7035\u702f\u7037\u7034\u7031\u7042\u7038\u703f\u703a\u7039\u7040\u703b\u7033\u7041\u7213\u7214\u72a8\u737d\u737c\u74ba\u76ab\u76aa\u76be\u76ed\u77cc\u77ce\u77cf\u77cd\u77f2\u7925\u7923\u7927\u7928\u7924\u7929"],["f4a1","\u79b2\u7a6e\u7a6c\u7a6d\u7af7\u7c49\u7c48\u7c4a\u7c47\u7c45\u7cee\u7e7b\u7e7e\u7e81\u7e80\u7fba\u7fff\u8079\u81db\u81d9\u820b\u8268\u8269\u8622\u85ff\u8601\u85fe\u861b\u8600\u85f6\u8604\u8609\u8605\u860c\u85fd\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89b9\u89f7\u8b60\u8b6a\u8b5d\u8b68\u8b63\u8b65\u8b67\u8b6d\u8dae\u8e86\u8e88\u8e84\u8f59\u8f56\u8f57\u8f55\u8f58\u8f5a\u908d\u9143\u9141\u91b7\u91b5\u91b2\u91b3\u940b\u9413\u93fb\u9420\u940f\u9414\u93fe\u9415\u9410\u9428\u9419\u940d\u93f5\u9400\u93f7\u9407\u940e\u9416\u9412\u93fa\u9409\u93f8\u940a\u93ff"],["f540","\u93fc\u940c\u93f6\u9411\u9406\u95de\u95e0\u95df\u972e\u972f\u97b9\u97bb\u97fd\u97fe\u9860\u9862\u9863\u985f\u98c1\u98c2\u9950\u994e\u9959\u994c\u994b\u9953\u9a32\u9a34\u9a31\u9a2c\u9a2a\u9a36\u9a29\u9a2e\u9a38\u9a2d\u9ac7\u9aca\u9ac6\u9b10\u9b12\u9b11\u9c0b\u9c08\u9bf7\u9c05\u9c12\u9bf8\u9c40\u9c07\u9c0e\u9c06\u9c17\u9c14\u9c09\u9d9f\u9d99\u9da4\u9d9d\u9d92\u9d98\u9d90\u9d9b"],["f5a1","\u9da0\u9d94\u9d9c\u9daa\u9d97\u9da1\u9d9a\u9da2\u9da8\u9d9e\u9da3\u9dbf\u9da9\u9d96\u9da6\u9da7\u9e99\u9e9b\u9e9a\u9ee5\u9ee4\u9ee7\u9ee6\u9f30\u9f2e\u9f5b\u9f60\u9f5e\u9f5d\u9f59\u9f91\u513a\u5139\u5298\u5297\u56c3\u56bd\u56be\u5b48\u5b47\u5dcb\u5dcf\u5ef1\u61fd\u651b\u6b02\u6afc\u6b03\u6af8\u6b00\u7043\u7044\u704a\u7048\u7049\u7045\u7046\u721d\u721a\u7219\u737e\u7517\u766a\u77d0\u792d\u7931\u792f\u7c54\u7c53\u7cf2\u7e8a\u7e87\u7e88\u7e8b\u7e86\u7e8d\u7f4d\u7fbb\u8030\u81dd\u8618\u862a\u8626\u861f\u8623\u861c\u8619\u8627\u862e\u8621\u8620\u8629\u861e\u8625"],["f640","\u8829\u881d\u881b\u8820\u8824\u881c\u882b\u884a\u896d\u8969\u896e\u896b\u89fa\u8b79\u8b78\u8b45\u8b7a\u8b7b\u8d10\u8d14\u8daf\u8e8e\u8e8c\u8f5e\u8f5b\u8f5d\u9146\u9144\u9145\u91b9\u943f\u943b\u9436\u9429\u943d\u943c\u9430\u9439\u942a\u9437\u942c\u9440\u9431\u95e5\u95e4\u95e3\u9735\u973a\u97bf\u97e1\u9864\u98c9\u98c6\u98c0\u9958\u9956\u9a39\u9a3d\u9a46\u9a44\u9a42\u9a41\u9a3a"],["f6a1","\u9a3f\u9acd\u9b15\u9b17\u9b18\u9b16\u9b3a\u9b52\u9c2b\u9c1d\u9c1c\u9c2c\u9c23\u9c28\u9c29\u9c24\u9c21\u9db7\u9db6\u9dbc\u9dc1\u9dc7\u9dca\u9dcf\u9dbe\u9dc5\u9dc3\u9dbb\u9db5\u9dce\u9db9\u9dba\u9dac\u9dc8\u9db1\u9dad\u9dcc\u9db3\u9dcd\u9db2\u9e7a\u9e9c\u9eeb\u9eee\u9eed\u9f1b\u9f18\u9f1a\u9f31\u9f4e\u9f65\u9f64\u9f92\u4eb9\u56c6\u56c5\u56cb\u5971\u5b4b\u5b4c\u5dd5\u5dd1\u5ef2\u6521\u6520\u6526\u6522\u6b0b\u6b08\u6b09\u6c0d\u7055\u7056\u7057\u7052\u721e\u721f\u72a9\u737f\u74d8\u74d5\u74d9\u74d7\u766d\u76ad\u7935\u79b4\u7a70\u7a71\u7c57\u7c5c\u7c59\u7c5b\u7c5a"],["f740","\u7cf4\u7cf1\u7e91\u7f4f\u7f87\u81de\u826b\u8634\u8635\u8633\u862c\u8632\u8636\u882c\u8828\u8826\u882a\u8825\u8971\u89bf\u89be\u89fb\u8b7e\u8b84\u8b82\u8b86\u8b85\u8b7f\u8d15\u8e95\u8e94\u8e9a\u8e92\u8e90\u8e96\u8e97\u8f60\u8f62\u9147\u944c\u9450\u944a\u944b\u944f\u9447\u9445\u9448\u9449\u9446\u973f\u97e3\u986a\u9869\u98cb\u9954\u995b\u9a4e\u9a53\u9a54\u9a4c\u9a4f\u9a48\u9a4a"],["f7a1","\u9a49\u9a52\u9a50\u9ad0\u9b19\u9b2b\u9b3b\u9b56\u9b55\u9c46\u9c48\u9c3f\u9c44\u9c39\u9c33\u9c41\u9c3c\u9c37\u9c34\u9c32\u9c3d\u9c36\u9ddb\u9dd2\u9dde\u9dda\u9dcb\u9dd0\u9ddc\u9dd1\u9ddf\u9de9\u9dd9\u9dd8\u9dd6\u9df5\u9dd5\u9ddd\u9eb6\u9ef0\u9f35\u9f33\u9f32\u9f42\u9f6b\u9f95\u9fa2\u513d\u5299\u58e8\u58e7\u5972\u5b4d\u5dd8\u882f\u5f4f\u6201\u6203\u6204\u6529\u6525\u6596\u66eb\u6b11\u6b12\u6b0f\u6bca\u705b\u705a\u7222\u7382\u7381\u7383\u7670\u77d4\u7c67\u7c66\u7e95\u826c\u863a\u8640\u8639\u863c\u8631\u863b\u863e\u8830\u8832\u882e\u8833\u8976\u8974\u8973\u89fe"],["f840","\u8b8c\u8b8e\u8b8b\u8b88\u8c45\u8d19\u8e98\u8f64\u8f63\u91bc\u9462\u9455\u945d\u9457\u945e\u97c4\u97c5\u9800\u9a56\u9a59\u9b1e\u9b1f\u9b20\u9c52\u9c58\u9c50\u9c4a\u9c4d\u9c4b\u9c55\u9c59\u9c4c\u9c4e\u9dfb\u9df7\u9def\u9de3\u9deb\u9df8\u9de4\u9df6\u9de1\u9dee\u9de6\u9df2\u9df0\u9de2\u9dec\u9df4\u9df3\u9de8\u9ded\u9ec2\u9ed0\u9ef2\u9ef3\u9f06\u9f1c\u9f38\u9f37\u9f36\u9f43\u9f4f"],["f8a1","\u9f71\u9f70\u9f6e\u9f6f\u56d3\u56cd\u5b4e\u5c6d\u652d\u66ed\u66ee\u6b13\u705f\u7061\u705d\u7060\u7223\u74db\u74e5\u77d5\u7938\u79b7\u79b6\u7c6a\u7e97\u7f89\u826d\u8643\u8838\u8837\u8835\u884b\u8b94\u8b95\u8e9e\u8e9f\u8ea0\u8e9d\u91be\u91bd\u91c2\u946b\u9468\u9469\u96e5\u9746\u9743\u9747\u97c7\u97e5\u9a5e\u9ad5\u9b59\u9c63\u9c67\u9c66\u9c62\u9c5e\u9c60\u9e02\u9dfe\u9e07\u9e03\u9e06\u9e05\u9e00\u9e01\u9e09\u9dff\u9dfd\u9e04\u9ea0\u9f1e\u9f46\u9f74\u9f75\u9f76\u56d4\u652e\u65b8\u6b18\u6b19\u6b17\u6b1a\u7062\u7226\u72aa\u77d8\u77d9\u7939\u7c69\u7c6b\u7cf6\u7e9a"],["f940","\u7e98\u7e9b\u7e99\u81e0\u81e1\u8646\u8647\u8648\u8979\u897a\u897c\u897b\u89ff\u8b98\u8b99\u8ea5\u8ea4\u8ea3\u946e\u946d\u946f\u9471\u9473\u9749\u9872\u995f\u9c68\u9c6e\u9c6d\u9e0b\u9e0d\u9e10\u9e0f\u9e12\u9e11\u9ea1\u9ef5\u9f09\u9f47\u9f78\u9f7b\u9f7a\u9f79\u571e\u7066\u7c6f\u883c\u8db2\u8ea6\u91c3\u9474\u9478\u9476\u9475\u9a60\u9c74\u9c73\u9c71\u9c75\u9e14\u9e13\u9ef6\u9f0a"],["f9a1","\u9fa4\u7068\u7065\u7cf7\u866a\u883e\u883d\u883f\u8b9e\u8c9c\u8ea9\u8ec9\u974b\u9873\u9874\u98cc\u9961\u99ab\u9a64\u9a66\u9a67\u9b24\u9e15\u9e17\u9f48\u6207\u6b1e\u7227\u864c\u8ea8\u9482\u9480\u9481\u9a69\u9a68\u9b2e\u9e19\u7229\u864b\u8b9f\u9483\u9c79\u9eb7\u7675\u9a6b\u9c7a\u9e1d\u7069\u706a\u9ea4\u9f7e\u9f49\u9f98\u7881\u92b9\u88cf\u58bb\u6052\u7ca7\u5afa\u2554\u2566\u2557\u2560\u256c\u2563\u255a\u2569\u255d\u2552\u2564\u2555\u255e\u256a\u2561\u2558\u2567\u255b\u2553\u2565\u2556\u255f\u256b\u2562\u2559\u2568\u255c\u2551\u2550\u256d\u256e\u2570\u256f\u2593"]]},hwdV:function(e,t,n){var r=n("tjlA"),i=r.Buffer;function o(e,t){for(var n in e)t[n]=e[n]}function s(e,t,n){return i(e,t,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=r:(o(r,t),t.Buffer=s),o(i,s),s.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,n)},s.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=i(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},s.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},s.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},iIpO:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("G5J1"),i=function(){function e(e){this.translate=e}return e.prototype.toDays=function(e){if(!isNaN(parseFloat(e))&&isFinite(e)){var t=Math.floor(e/86400),n=Math.floor(e%86400/3600),i=Math.floor(e%86400%3600/60),o=e%86400%3600%60;return n<10&&(n="0"+n),i<10&&(i="0"+i),o<10&&(o="0"+o),e=1==t?this.translate.get("one day, {hours}:{minutes}:{seconds}",{hours:n,minutes:i,seconds:o}):this.translate.get("{days} days, {hours}:{minutes}:{seconds}",{days:t,hours:n,minutes:i,seconds:o}),"fr"===this.translate.currentLang&&0==t&&(e=this.translate.get("{days} days, {hours}:{minutes}:{seconds}",{days:t,hours:n,minutes:i,seconds:o})),e}return Object(r.b)()},e}()},iLxQ:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=!1,i={Promise:void 0,set useDeprecatedSynchronousErrorHandling(e){r=e},get useDeprecatedSynchronousErrorHandling(){return r}}},ilcq:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("K9Ia"),i=(n("Sxbm"),function(){function e(e,t,n){this.templateRef=e,this.viewContainer=t,this.isRetailService=n,this.isRetail$=new r.a}return e.prototype.ngOnInit=function(){this.isRetailService.isDeviceLicenseRetail()||this.renderTemplate?this.viewContainer.createEmbeddedView(this.templateRef):this.viewContainer.clear()},e.prototype.ngOnDestroy=function(){},e}())},isby:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=Array.isArray||function(e){return e&&"number"==typeof e.length}},jFtu:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){return function(){this.hide=Function}}()},jGGy:function(e,t,n){"use strict";n.d(t,"a",function(){return p});var r=n("26FU"),i=n("K9Ia"),o=n("gI3B"),s=n("XlPw"),a=n("ny24"),u=n("ZqrO"),c=n("vubp"),l=n("t9fZ"),h=n("wbK0"),f=n("+3se"),d=(n("nbXG"),n("+NEN"),n("Vx+w")),p=(n("Obbf"),function(){function e(e,t,n,o){this.ubusService=e,this.localStorage=t,this.notification=n,this.router=o,this.noForcedPasswordLoginSubject$=new r.a(!1),this.noForcedPassword$=this.noForcedPasswordLoginSubject$.asObservable(),this.timerSubject=new i.a,this.defaultSid="00000000000000000000000000000000",this.isLoggedInSubject$=new r.a(!1),this.checkAuthStatus()}return e.prototype.checkAuthStatus=function(){var e=this;d.a.delos.noForcedPassword&&this.loginWithoutPassword().subscribe(function(t){0===t.result[0]&&e.noForcedPasswordSet(!0)}),this.isLoggedInSubject$.next(!!this.getSid())},e.prototype.checkSessionExpirity=function(){var e=this;this.ubusService.call({data:[this.getSid(),"session","get_timeout",{ubus_rpc_session2:this.getSid()}]}).subscribe(function(t){e.isLoggedIn=!0;var n=t.result[1].expires;Object(o.a)(0,1e3).pipe(Object(a.a)(e.timerSubject)).subscribe(function(t){t>=n&&(e.timerSubject.next(!1),e.checkSessionExpirity())})},function(t){e.timerSubject.next(!1),e.router.url.startsWith("/login")||e.notification.error(Object(f.b)("You have been logged out automatically for security reasons! Please log in again!"),{sticky:!0,keepAfterRouteChange:!0}),e.isLoggedIn=!1,e.relogIn()})},e.prototype.getSid=function(){var e=this,t=this.localStorage.get("sid");return t?(this.isLoggedIn=!0,t):(setTimeout(function(){return e.relogIn()},100),this.isLoggedIn=!1,null)},e.prototype.setSid=function(e){e?(this.isLoggedIn=!0,this.localStorage.set("sid",e)):this.deleteSid()},e.prototype.getLoginTime=function(){var e=this.localStorage.get("exp");return e?Number(e):(this.relogIn(),null)},e.prototype.login=function(e){return this.deleteSid(),this.ubusService.call({data:[this.defaultSid,"session","login",{username:"root",password:e,timeout:d.a.delos.sessionExpiry}]})},e.prototype.logout=function(){var e=this;return this.isLoggedInSubject$.next(!1),this.ubusService.call({data:[this.getSid(),"session","destroy",{}],raw:!0}).subscribe(function(){e.isLoggedInSubject$.next(!1),e.relogIn()})},e.prototype.relogIn=function(){this.isLoggedIn=!1,this.deleteSid(),this.isLoggedInSubject$.next(!1),this.router.navigate(["/login"],{queryParams:{redirectTo:this.router.url}})},e.prototype.deleteSid=function(){this.localStorage.remove("sid")},e.prototype.setDisableGetTimeout=function(e){this.getTimeoutDisabled=e},e.prototype.loginWithoutPassword=function(){return this.ubusService.call({data:[this.defaultSid,"session","login",{username:"root",password:"",timeout:d.a.delos.sessionExpiry}],raw:!0}).pipe(Object(u.a)(function(e){return e.pipe(Object(c.a)(2e3),Object(l.a)(60),Object(h.a)(Object(s.a)(new Error)))}))},e.prototype.noForcedPasswordSet=function(e){this.noForcedPasswordLoginSubject$.next(e)},e}())},k1Yr:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("CcnG"),i=function(){function e(){this.valueChange=new r.m}return e.prototype.onInput=function(e){null!==this.trueValue&&null!==this.falseValue?(this.trueValue="true"==this.trueValue||this.trueValue,this.falseValue="false"!=this.falseValue&&this.falseValue,this.valueChange.emit(e.target.checked?this.trueValue:this.falseValue)):this.valueChange.emit(0==Number(e.target.value)?1:0)},e}()},kMlu:function(e,t,n){"use strict";var r=n("xZGU").Buffer;t._dbcs=c;for(var i=-1,o=-2,s=-1e3,a=new Array(256),u=0;u<256;u++)a[u]=i;function c(e,t){if(this.encodingName=e.encodingName,!e)throw new Error("DBCS codec is called without the data.");if(!e.table)throw new Error("Encoding '"+this.encodingName+"' has no data.");var n=e.table();this.decodeTables=[],this.decodeTables[0]=a.slice(0),this.decodeTableSeq=[];for(var r=0;r<n.length;r++)this._addDecodeChunk(n[r]);this.defaultCharUnicode=t.defaultCharUnicode,this.encodeTable=[],this.encodeTableSeq=[];var u={};if(e.encodeSkipVals)for(r=0;r<e.encodeSkipVals.length;r++){var c=e.encodeSkipVals[r];if("number"==typeof c)u[c]=!0;else for(var l=c.from;l<=c.to;l++)u[l]=!0}if(this._fillEncodeTable(0,0,u),e.encodeAdd)for(var h in e.encodeAdd)Object.prototype.hasOwnProperty.call(e.encodeAdd,h)&&this._setEncodeChar(h.charCodeAt(0),e.encodeAdd[h]);if(this.defCharSB=this.encodeTable[0][t.defaultCharSingleByte.charCodeAt(0)],this.defCharSB===i&&(this.defCharSB=this.encodeTable[0]["?"]),this.defCharSB===i&&(this.defCharSB="?".charCodeAt(0)),"function"==typeof e.gb18030){this.gb18030=e.gb18030();var f=this.decodeTables.length,d=this.decodeTables[f]=a.slice(0),p=this.decodeTables.length,g=this.decodeTables[p]=a.slice(0);for(r=129;r<=254;r++){var b=this.decodeTables[s-this.decodeTables[0][r]];for(l=48;l<=57;l++)b[l]=s-f}for(r=129;r<=254;r++)d[r]=s-p;for(r=48;r<=57;r++)g[r]=o}}function l(e,t){this.leadSurrogate=-1,this.seqObj=void 0,this.encodeTable=t.encodeTable,this.encodeTableSeq=t.encodeTableSeq,this.defaultCharSingleByte=t.defCharSB,this.gb18030=t.gb18030}function h(e,t){this.nodeIdx=0,this.prevBuf=r.alloc(0),this.decodeTables=t.decodeTables,this.decodeTableSeq=t.decodeTableSeq,this.defaultCharUnicode=t.defaultCharUnicode,this.gb18030=t.gb18030}function f(e,t){if(e[0]>t)return-1;for(var n=0,r=e.length;n<r-1;){var i=n+Math.floor((r-n+1)/2);e[i]<=t?n=i:r=i}return n}c.prototype.encoder=l,c.prototype.decoder=h,c.prototype._getDecodeTrieNode=function(e){for(var t=[];e>0;e>>=8)t.push(255&e);0==t.length&&t.push(0);for(var n=this.decodeTables[0],r=t.length-1;r>0;r--){var o=n[t[r]];if(o==i)n[t[r]]=s-this.decodeTables.length,this.decodeTables.push(n=a.slice(0));else{if(!(o<=s))throw new Error("Overwrite byte in "+this.encodingName+", addr: "+e.toString(16));n=this.decodeTables[s-o]}}return n},c.prototype._addDecodeChunk=function(e){var t=parseInt(e[0],16),n=this._getDecodeTrieNode(t);t&=255;for(var r=1;r<e.length;r++){var i=e[r];if("string"==typeof i)for(var o=0;o<i.length;){var s=i.charCodeAt(o++);if(55296<=s&&s<56320){var a=i.charCodeAt(o++);if(!(56320<=a&&a<57344))throw new Error("Incorrect surrogate pair in "+this.encodingName+" at chunk "+e[0]);n[t++]=65536+1024*(s-55296)+(a-56320)}else if(4080<s&&s<=4095){for(var u=4095-s+2,c=[],l=0;l<u;l++)c.push(i.charCodeAt(o++));n[t++]=-10-this.decodeTableSeq.length,this.decodeTableSeq.push(c)}else n[t++]=s}else{if("number"!=typeof i)throw new Error("Incorrect type '"+typeof i+"' given in "+this.encodingName+" at chunk "+e[0]);var h=n[t-1]+1;for(o=0;o<i;o++)n[t++]=h++}}if(t>255)throw new Error("Incorrect chunk in "+this.encodingName+" at addr "+e[0]+": too long"+t)},c.prototype._getEncodeBucket=function(e){var t=e>>8;return void 0===this.encodeTable[t]&&(this.encodeTable[t]=a.slice(0)),this.encodeTable[t]},c.prototype._setEncodeChar=function(e,t){var n=this._getEncodeBucket(e),r=255&e;n[r]<=-10?this.encodeTableSeq[-10-n[r]][-1]=t:n[r]==i&&(n[r]=t)},c.prototype._setEncodeSequence=function(e,t){var n,r=e[0],o=this._getEncodeBucket(r),s=255&r;o[s]<=-10?n=this.encodeTableSeq[-10-o[s]]:(n={},o[s]!==i&&(n[-1]=o[s]),o[s]=-10-this.encodeTableSeq.length,this.encodeTableSeq.push(n));for(var a=1;a<e.length-1;a++){var u=n[r];"object"==typeof u?n=u:(n=n[r]={},void 0!==u&&(n[-1]=u))}n[r=e[e.length-1]]=t},c.prototype._fillEncodeTable=function(e,t,n){for(var r=this.decodeTables[e],i=0;i<256;i++){var o=r[i],a=t+i;n[a]||(o>=0?this._setEncodeChar(o,a):o<=s?this._fillEncodeTable(s-o,a<<8,n):o<=-10&&this._setEncodeSequence(this.decodeTableSeq[-10-o],a))}},l.prototype.write=function(e){for(var t=r.alloc(e.length*(this.gb18030?4:3)),n=this.leadSurrogate,o=this.seqObj,s=-1,a=0,u=0;;){if(-1===s){if(a==e.length)break;var c=e.charCodeAt(a++)}else c=s,s=-1;if(55296<=c&&c<57344)if(c<56320){if(-1===n){n=c;continue}n=c,c=i}else-1!==n?(c=65536+1024*(n-55296)+(c-56320),n=-1):c=i;else-1!==n&&(s=c,c=i,n=-1);var l=i;if(void 0!==o&&c!=i){var h=o[c];if("object"==typeof h){o=h;continue}"number"==typeof h?l=h:null==h&&void 0!==(h=o[-1])&&(l=h,s=c),o=void 0}else if(c>=0){var d=this.encodeTable[c>>8];if(void 0!==d&&(l=d[255&c]),l<=-10){o=this.encodeTableSeq[-10-l];continue}if(l==i&&this.gb18030){var p=f(this.gb18030.uChars,c);if(-1!=p){l=this.gb18030.gbChars[p]+(c-this.gb18030.uChars[p]),t[u++]=129+Math.floor(l/12600),l%=12600,t[u++]=48+Math.floor(l/1260),l%=1260,t[u++]=129+Math.floor(l/10),t[u++]=48+(l%=10);continue}}}l===i&&(l=this.defaultCharSingleByte),l<256?t[u++]=l:l<65536?(t[u++]=l>>8,t[u++]=255&l):(t[u++]=l>>16,t[u++]=l>>8&255,t[u++]=255&l)}return this.seqObj=o,this.leadSurrogate=n,t.slice(0,u)},l.prototype.end=function(){if(-1!==this.leadSurrogate||void 0!==this.seqObj){var e=r.alloc(10),t=0;if(this.seqObj){var n=this.seqObj[-1];void 0!==n&&(n<256?e[t++]=n:(e[t++]=n>>8,e[t++]=255&n)),this.seqObj=void 0}return-1!==this.leadSurrogate&&(e[t++]=this.defaultCharSingleByte,this.leadSurrogate=-1),e.slice(0,t)}},l.prototype.findIdx=f,h.prototype.write=function(e){var t=r.alloc(2*e.length),n=this.nodeIdx,a=this.prevBuf,u=this.prevBuf.length,c=-this.prevBuf.length;u>0&&(a=r.concat([a,e.slice(0,10)]));for(var l=0,h=0;l<e.length;l++){var d,p=l>=0?e[l]:a[l+u];if((d=this.decodeTables[n][p])>=0);else if(d===i)l=c,d=this.defaultCharUnicode.charCodeAt(0);else if(d===o){var g=c>=0?e.slice(c,l+1):a.slice(c+u,l+1+u),b=12600*(g[0]-129)+1260*(g[1]-48)+10*(g[2]-129)+(g[3]-48),v=f(this.gb18030.gbChars,b);d=this.gb18030.uChars[v]+b-this.gb18030.gbChars[v]}else{if(d<=s){n=s-d;continue}if(!(d<=-10))throw new Error("iconv-lite internal error: invalid decoding table value "+d+" at "+n+"/"+p);for(var y=this.decodeTableSeq[-10-d],m=0;m<y.length-1;m++)t[h++]=255&(d=y[m]),t[h++]=d>>8;d=y[y.length-1]}if(d>65535){d-=65536;var w=55296+Math.floor(d/1024);t[h++]=255&w,t[h++]=w>>8,d=56320+d%1024}t[h++]=255&d,t[h++]=d>>8,n=0,c=l+1}return this.nodeIdx=n,this.prevBuf=c>=0?e.slice(c):a.slice(c+u),t.slice(0,h).toString("ucs2")},h.prototype.end=function(){for(var e="";this.prevBuf.length>0;){e+=this.defaultCharUnicode;var t=this.prevBuf.slice(1);this.prevBuf=r.alloc(0),this.nodeIdx=0,t.length>0&&(e+=this.write(t))}return this.nodeIdx=0,e}},"kVK+":function(e,t){t.read=function(e,t,n,r,i){var o,s,a=8*i-r-1,u=(1<<a)-1,c=u>>1,l=-7,h=n?i-1:0,f=n?-1:1,d=e[t+h];for(h+=f,o=d&(1<<-l)-1,d>>=-l,l+=a;l>0;o=256*o+e[t+h],h+=f,l-=8);for(s=o&(1<<-l)-1,o>>=-l,l+=r;l>0;s=256*s+e[t+h],h+=f,l-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=c}return(d?-1:1)*s*Math.pow(2,o-r)},t.write=function(e,t,n,r,i,o){var s,a,u,c=8*o-i-1,l=(1<<c)-1,h=l>>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,p=r?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=l):(s=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-s))<1&&(s--,u*=2),(t+=s+h>=1?f/u:f*Math.pow(2,1-h))*u>=2&&(s++,u/=2),s+h>=l?(a=0,s=l):s+h>=1?(a=(t*u-1)*Math.pow(2,i),s+=h):(a=t*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;e[n+d]=255&a,d+=p,a/=256,i-=8);for(s=s<<i|a,c+=i;c>0;e[n+d]=255&s,d+=p,s/=256,c-=8);e[n+d-p]|=128*g}},krbb:function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("XlPw"),i=n("67Y/"),o=n("ZqrO"),s=n("vubp"),a=n("t9fZ"),u=n("wbK0"),c=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getNetworkSettings=function(){return this.ubusService.call({data:[[this.authService.getSid(),"uci","get",{config:"plc",section:"plc"}],[this.authService.getSid(),"network.plctool","get_pibsettings",{}]]}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1]})}))},e.prototype.saveNetworkConfig=function(e){return this.ubusService.call({data:[[this.authService.getSid(),"uci","set",{config:"plc",section:"plc",values:{disabled:e.toString()}}],[this.authService.getSid(),"uci","commit",{config:"plc"}]]})},e.prototype.plcAccessible=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.plctool","avlninfo",{}]}).pipe(Object(i.a)(function(e){if(e.result[1].devices.length)return e.result[1].devices.length;throw new Error("ex")})).pipe(Object(o.a)(function(e){return e.pipe(Object(s.a)(2e3),Object(a.a)(10),Object(u.a)(Object(r.a)(new Error)))}))},e.prototype.changeLocalPassword=function(e){return this.ubusService.call({data:[this.authService.getSid(),"network.plctool","set_npw",{password:e}]})},e.prototype.changeLocalPibSettings=function(e){return this.ubusService.call({data:[this.authService.getSid(),"network.plctool","set_pibsettings",e]})},e}())},lLtp:function(e,t,n){"use strict";for(var r=[n("01QI"),n("pY1j"),n("xkKp"),n("a9ph"),n("PQ6H"),n("gLwZ"),n("kMlu"),n("HEcb")],i=0;i<r.length;i++)for(var o in e=r[i])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])},lOTE:function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("CcnG"),i=n("uwht"),o=n("zIf0"),s=r.ob({encapsulation:2,styles:[],data:{}});function a(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,2,"div",[["role","document"]],[[8,"className",0]],null,null,null,null)),(e()(),r.qb(1,0,null,null,1,"div",[["class","modal-content"]],null,null,null,null,null)),r.zb(null,0)],null,function(e,t){var n=t.component;e(t,0,0,"modal-dialog"+(n.config.class?" "+n.config.class:""))})}function u(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"modal-container",[["class","modal"],["role","dialog"],["tabindex","-1"]],[[1,"aria-modal",0]],[[null,"click"],["window","keydown.esc"]],function(e,t,n){var i=!0;return"click"===t&&(i=!1!==r.Ab(e,1).onClick(n)&&i),"window:keydown.esc"===t&&(i=!1!==r.Ab(e,1).onEsc(n)&&i),i},a,s)),r.pb(1,245760,null,0,i.a,[o.c,r.k,r.E],null,null)],function(e,t){e(t,1,0)},function(e,t){e(t,0,0,!0)})}var c=r.mb("modal-container",i.a,u,{},{},["*"])},lPSh:function(e){e.exports=[["0","\0",128],["a1","\uff61",62],["8140","\u3000\u3001\u3002\uff0c\uff0e\u30fb\uff1a\uff1b\uff1f\uff01\u309b\u309c\xb4\uff40\xa8\uff3e\uffe3\uff3f\u30fd\u30fe\u309d\u309e\u3003\u4edd\u3005\u3006\u3007\u30fc\u2015\u2010\uff0f\uff3c\uff5e\u2225\uff5c\u2026\u2025\u2018\u2019\u201c\u201d\uff08\uff09\u3014\u3015\uff3b\uff3d\uff5b\uff5d\u3008",9,"\uff0b\uff0d\xb1\xd7"],["8180","\xf7\uff1d\u2260\uff1c\uff1e\u2266\u2267\u221e\u2234\u2642\u2640\xb0\u2032\u2033\u2103\uffe5\uff04\uffe0\uffe1\uff05\uff03\uff06\uff0a\uff20\xa7\u2606\u2605\u25cb\u25cf\u25ce\u25c7\u25c6\u25a1\u25a0\u25b3\u25b2\u25bd\u25bc\u203b\u3012\u2192\u2190\u2191\u2193\u3013"],["81b8","\u2208\u220b\u2286\u2287\u2282\u2283\u222a\u2229"],["81c8","\u2227\u2228\uffe2\u21d2\u21d4\u2200\u2203"],["81da","\u2220\u22a5\u2312\u2202\u2207\u2261\u2252\u226a\u226b\u221a\u223d\u221d\u2235\u222b\u222c"],["81f0","\u212b\u2030\u266f\u266d\u266a\u2020\u2021\xb6"],["81fc","\u25ef"],["824f","\uff10",9],["8260","\uff21",25],["8281","\uff41",25],["829f","\u3041",82],["8340","\u30a1",62],["8380","\u30e0",22],["839f","\u0391",16,"\u03a3",6],["83bf","\u03b1",16,"\u03c3",6],["8440","\u0410",5,"\u0401\u0416",25],["8470","\u0430",5,"\u0451\u0436",7],["8480","\u043e",17],["849f","\u2500\u2502\u250c\u2510\u2518\u2514\u251c\u252c\u2524\u2534\u253c\u2501\u2503\u250f\u2513\u251b\u2517\u2523\u2533\u252b\u253b\u254b\u2520\u252f\u2528\u2537\u253f\u251d\u2530\u2525\u2538\u2542"],["8740","\u2460",19,"\u2160",9],["875f","\u3349\u3314\u3322\u334d\u3318\u3327\u3303\u3336\u3351\u3357\u330d\u3326\u3323\u332b\u334a\u333b\u339c\u339d\u339e\u338e\u338f\u33c4\u33a1"],["877e","\u337b"],["8780","\u301d\u301f\u2116\u33cd\u2121\u32a4",4,"\u3231\u3232\u3239\u337e\u337d\u337c\u2252\u2261\u222b\u222e\u2211\u221a\u22a5\u2220\u221f\u22bf\u2235\u2229\u222a"],["889f","\u4e9c\u5516\u5a03\u963f\u54c0\u611b\u6328\u59f6\u9022\u8475\u831c\u7a50\u60aa\u63e1\u6e25\u65ed\u8466\u82a6\u9bf5\u6893\u5727\u65a1\u6271\u5b9b\u59d0\u867b\u98f4\u7d62\u7dbe\u9b8e\u6216\u7c9f\u88b7\u5b89\u5eb5\u6309\u6697\u6848\u95c7\u978d\u674f\u4ee5\u4f0a\u4f4d\u4f9d\u5049\u56f2\u5937\u59d4\u5a01\u5c09\u60df\u610f\u6170\u6613\u6905\u70ba\u754f\u7570\u79fb\u7dad\u7def\u80c3\u840e\u8863\u8b02\u9055\u907a\u533b\u4e95\u4ea5\u57df\u80b2\u90c1\u78ef\u4e00\u58f1\u6ea2\u9038\u7a32\u8328\u828b\u9c2f\u5141\u5370\u54bd\u54e1\u56e0\u59fb\u5f15\u98f2\u6deb\u80e4\u852d"],["8940","\u9662\u9670\u96a0\u97fb\u540b\u53f3\u5b87\u70cf\u7fbd\u8fc2\u96e8\u536f\u9d5c\u7aba\u4e11\u7893\u81fc\u6e26\u5618\u5504\u6b1d\u851a\u9c3b\u59e5\u53a9\u6d66\u74dc\u958f\u5642\u4e91\u904b\u96f2\u834f\u990c\u53e1\u55b6\u5b30\u5f71\u6620\u66f3\u6804\u6c38\u6cf3\u6d29\u745b\u76c8\u7a4e\u9834\u82f1\u885b\u8a60\u92ed\u6db2\u75ab\u76ca\u99c5\u60a6\u8b01\u8d8a\u95b2\u698e\u53ad\u5186"],["8980","\u5712\u5830\u5944\u5bb4\u5ef6\u6028\u63a9\u63f4\u6cbf\u6f14\u708e\u7114\u7159\u71d5\u733f\u7e01\u8276\u82d1\u8597\u9060\u925b\u9d1b\u5869\u65bc\u6c5a\u7525\u51f9\u592e\u5965\u5f80\u5fdc\u62bc\u65fa\u6a2a\u6b27\u6bb4\u738b\u7fc1\u8956\u9d2c\u9d0e\u9ec4\u5ca1\u6c96\u837b\u5104\u5c4b\u61b6\u81c6\u6876\u7261\u4e59\u4ffa\u5378\u6069\u6e29\u7a4f\u97f3\u4e0b\u5316\u4eee\u4f55\u4f3d\u4fa1\u4f73\u52a0\u53ef\u5609\u590f\u5ac1\u5bb6\u5be1\u79d1\u6687\u679c\u67b6\u6b4c\u6cb3\u706b\u73c2\u798d\u79be\u7a3c\u7b87\u82b1\u82db\u8304\u8377\u83ef\u83d3\u8766\u8ab2\u5629\u8ca8\u8fe6\u904e\u971e\u868a\u4fc4\u5ce8\u6211\u7259\u753b\u81e5\u82bd\u86fe\u8cc0\u96c5\u9913\u99d5\u4ecb\u4f1a\u89e3\u56de\u584a\u58ca\u5efb\u5feb\u602a\u6094\u6062\u61d0\u6212\u62d0\u6539"],["8a40","\u9b41\u6666\u68b0\u6d77\u7070\u754c\u7686\u7d75\u82a5\u87f9\u958b\u968e\u8c9d\u51f1\u52be\u5916\u54b3\u5bb3\u5d16\u6168\u6982\u6daf\u788d\u84cb\u8857\u8a72\u93a7\u9ab8\u6d6c\u99a8\u86d9\u57a3\u67ff\u86ce\u920e\u5283\u5687\u5404\u5ed3\u62e1\u64b9\u683c\u6838\u6bbb\u7372\u78ba\u7a6b\u899a\u89d2\u8d6b\u8f03\u90ed\u95a3\u9694\u9769\u5b66\u5cb3\u697d\u984d\u984e\u639b\u7b20\u6a2b"],["8a80","\u6a7f\u68b6\u9c0d\u6f5f\u5272\u559d\u6070\u62ec\u6d3b\u6e07\u6ed1\u845b\u8910\u8f44\u4e14\u9c39\u53f6\u691b\u6a3a\u9784\u682a\u515c\u7ac3\u84b2\u91dc\u938c\u565b\u9d28\u6822\u8305\u8431\u7ca5\u5208\u82c5\u74e6\u4e7e\u4f83\u51a0\u5bd2\u520a\u52d8\u52e7\u5dfb\u559a\u582a\u59e6\u5b8c\u5b98\u5bdb\u5e72\u5e79\u60a3\u611f\u6163\u61be\u63db\u6562\u67d1\u6853\u68fa\u6b3e\u6b53\u6c57\u6f22\u6f97\u6f45\u74b0\u7518\u76e3\u770b\u7aff\u7ba1\u7c21\u7de9\u7f36\u7ff0\u809d\u8266\u839e\u89b3\u8acc\u8cab\u9084\u9451\u9593\u9591\u95a2\u9665\u97d3\u9928\u8218\u4e38\u542b\u5cb8\u5dcc\u73a9\u764c\u773c\u5ca9\u7feb\u8d0b\u96c1\u9811\u9854\u9858\u4f01\u4f0e\u5371\u559c\u5668\u57fa\u5947\u5b09\u5bc4\u5c90\u5e0c\u5e7e\u5fcc\u63ee\u673a\u65d7\u65e2\u671f\u68cb\u68c4"],["8b40","\u6a5f\u5e30\u6bc5\u6c17\u6c7d\u757f\u7948\u5b63\u7a00\u7d00\u5fbd\u898f\u8a18\u8cb4\u8d77\u8ecc\u8f1d\u98e2\u9a0e\u9b3c\u4e80\u507d\u5100\u5993\u5b9c\u622f\u6280\u64ec\u6b3a\u72a0\u7591\u7947\u7fa9\u87fb\u8abc\u8b70\u63ac\u83ca\u97a0\u5409\u5403\u55ab\u6854\u6a58\u8a70\u7827\u6775\u9ecd\u5374\u5ba2\u811a\u8650\u9006\u4e18\u4e45\u4ec7\u4f11\u53ca\u5438\u5bae\u5f13\u6025\u6551"],["8b80","\u673d\u6c42\u6c72\u6ce3\u7078\u7403\u7a76\u7aae\u7b08\u7d1a\u7cfe\u7d66\u65e7\u725b\u53bb\u5c45\u5de8\u62d2\u62e0\u6319\u6e20\u865a\u8a31\u8ddd\u92f8\u6f01\u79a6\u9b5a\u4ea8\u4eab\u4eac\u4f9b\u4fa0\u50d1\u5147\u7af6\u5171\u51f6\u5354\u5321\u537f\u53eb\u55ac\u5883\u5ce1\u5f37\u5f4a\u602f\u6050\u606d\u631f\u6559\u6a4b\u6cc1\u72c2\u72ed\u77ef\u80f8\u8105\u8208\u854e\u90f7\u93e1\u97ff\u9957\u9a5a\u4ef0\u51dd\u5c2d\u6681\u696d\u5c40\u66f2\u6975\u7389\u6850\u7c81\u50c5\u52e4\u5747\u5dfe\u9326\u65a4\u6b23\u6b3d\u7434\u7981\u79bd\u7b4b\u7dca\u82b9\u83cc\u887f\u895f\u8b39\u8fd1\u91d1\u541f\u9280\u4e5d\u5036\u53e5\u533a\u72d7\u7396\u77e9\u82e6\u8eaf\u99c6\u99c8\u99d2\u5177\u611a\u865e\u55b0\u7a7a\u5076\u5bd3\u9047\u9685\u4e32\u6adb\u91e7\u5c51\u5c48"],["8c40","\u6398\u7a9f\u6c93\u9774\u8f61\u7aaa\u718a\u9688\u7c82\u6817\u7e70\u6851\u936c\u52f2\u541b\u85ab\u8a13\u7fa4\u8ecd\u90e1\u5366\u8888\u7941\u4fc2\u50be\u5211\u5144\u5553\u572d\u73ea\u578b\u5951\u5f62\u5f84\u6075\u6176\u6167\u61a9\u63b2\u643a\u656c\u666f\u6842\u6e13\u7566\u7a3d\u7cfb\u7d4c\u7d99\u7e4b\u7f6b\u830e\u834a\u86cd\u8a08\u8a63\u8b66\u8efd\u981a\u9d8f\u82b8\u8fce\u9be8"],["8c80","\u5287\u621f\u6483\u6fc0\u9699\u6841\u5091\u6b20\u6c7a\u6f54\u7a74\u7d50\u8840\u8a23\u6708\u4ef6\u5039\u5026\u5065\u517c\u5238\u5263\u55a7\u570f\u5805\u5acc\u5efa\u61b2\u61f8\u62f3\u6372\u691c\u6a29\u727d\u72ac\u732e\u7814\u786f\u7d79\u770c\u80a9\u898b\u8b19\u8ce2\u8ed2\u9063\u9375\u967a\u9855\u9a13\u9e78\u5143\u539f\u53b3\u5e7b\u5f26\u6e1b\u6e90\u7384\u73fe\u7d43\u8237\u8a00\u8afa\u9650\u4e4e\u500b\u53e4\u547c\u56fa\u59d1\u5b64\u5df1\u5eab\u5f27\u6238\u6545\u67af\u6e56\u72d0\u7cca\u88b4\u80a1\u80e1\u83f0\u864e\u8a87\u8de8\u9237\u96c7\u9867\u9f13\u4e94\u4e92\u4f0d\u5348\u5449\u543e\u5a2f\u5f8c\u5fa1\u609f\u68a7\u6a8e\u745a\u7881\u8a9e\u8aa4\u8b77\u9190\u4e5e\u9bc9\u4ea4\u4f7c\u4faf\u5019\u5016\u5149\u516c\u529f\u52b9\u52fe\u539a\u53e3\u5411"],["8d40","\u540e\u5589\u5751\u57a2\u597d\u5b54\u5b5d\u5b8f\u5de5\u5de7\u5df7\u5e78\u5e83\u5e9a\u5eb7\u5f18\u6052\u614c\u6297\u62d8\u63a7\u653b\u6602\u6643\u66f4\u676d\u6821\u6897\u69cb\u6c5f\u6d2a\u6d69\u6e2f\u6e9d\u7532\u7687\u786c\u7a3f\u7ce0\u7d05\u7d18\u7d5e\u7db1\u8015\u8003\u80af\u80b1\u8154\u818f\u822a\u8352\u884c\u8861\u8b1b\u8ca2\u8cfc\u90ca\u9175\u9271\u783f\u92fc\u95a4\u964d"],["8d80","\u9805\u9999\u9ad8\u9d3b\u525b\u52ab\u53f7\u5408\u58d5\u62f7\u6fe0\u8c6a\u8f5f\u9eb9\u514b\u523b\u544a\u56fd\u7a40\u9177\u9d60\u9ed2\u7344\u6f09\u8170\u7511\u5ffd\u60da\u9aa8\u72db\u8fbc\u6b64\u9803\u4eca\u56f0\u5764\u58be\u5a5a\u6068\u61c7\u660f\u6606\u6839\u68b1\u6df7\u75d5\u7d3a\u826e\u9b42\u4e9b\u4f50\u53c9\u5506\u5d6f\u5de6\u5dee\u67fb\u6c99\u7473\u7802\u8a50\u9396\u88df\u5750\u5ea7\u632b\u50b5\u50ac\u518d\u6700\u54c9\u585e\u59bb\u5bb0\u5f69\u624d\u63a1\u683d\u6b73\u6e08\u707d\u91c7\u7280\u7815\u7826\u796d\u658e\u7d30\u83dc\u88c1\u8f09\u969b\u5264\u5728\u6750\u7f6a\u8ca1\u51b4\u5742\u962a\u583a\u698a\u80b4\u54b2\u5d0e\u57fc\u7895\u9dfa\u4f5c\u524a\u548b\u643e\u6628\u6714\u67f5\u7a84\u7b56\u7d22\u932f\u685c\u9bad\u7b39\u5319\u518a\u5237"],["8e40","\u5bdf\u62f6\u64ae\u64e6\u672d\u6bba\u85a9\u96d1\u7690\u9bd6\u634c\u9306\u9bab\u76bf\u6652\u4e09\u5098\u53c2\u5c71\u60e8\u6492\u6563\u685f\u71e6\u73ca\u7523\u7b97\u7e82\u8695\u8b83\u8cdb\u9178\u9910\u65ac\u66ab\u6b8b\u4ed5\u4ed4\u4f3a\u4f7f\u523a\u53f8\u53f2\u55e3\u56db\u58eb\u59cb\u59c9\u59ff\u5b50\u5c4d\u5e02\u5e2b\u5fd7\u601d\u6307\u652f\u5b5c\u65af\u65bd\u65e8\u679d\u6b62"],["8e80","\u6b7b\u6c0f\u7345\u7949\u79c1\u7cf8\u7d19\u7d2b\u80a2\u8102\u81f3\u8996\u8a5e\u8a69\u8a66\u8a8c\u8aee\u8cc7\u8cdc\u96cc\u98fc\u6b6f\u4e8b\u4f3c\u4f8d\u5150\u5b57\u5bfa\u6148\u6301\u6642\u6b21\u6ecb\u6cbb\u723e\u74bd\u75d4\u78c1\u793a\u800c\u8033\u81ea\u8494\u8f9e\u6c50\u9e7f\u5f0f\u8b58\u9d2b\u7afa\u8ef8\u5b8d\u96eb\u4e03\u53f1\u57f7\u5931\u5ac9\u5ba4\u6089\u6e7f\u6f06\u75be\u8cea\u5b9f\u8500\u7be0\u5072\u67f4\u829d\u5c61\u854a\u7e1e\u820e\u5199\u5c04\u6368\u8d66\u659c\u716e\u793e\u7d17\u8005\u8b1d\u8eca\u906e\u86c7\u90aa\u501f\u52fa\u5c3a\u6753\u707c\u7235\u914c\u91c8\u932b\u82e5\u5bc2\u5f31\u60f9\u4e3b\u53d6\u5b88\u624b\u6731\u6b8a\u72e9\u73e0\u7a2e\u816b\u8da3\u9152\u9996\u5112\u53d7\u546a\u5bff\u6388\u6a39\u7dac\u9700\u56da\u53ce\u5468"],["8f40","\u5b97\u5c31\u5dde\u4fee\u6101\u62fe\u6d32\u79c0\u79cb\u7d42\u7e4d\u7fd2\u81ed\u821f\u8490\u8846\u8972\u8b90\u8e74\u8f2f\u9031\u914b\u916c\u96c6\u919c\u4ec0\u4f4f\u5145\u5341\u5f93\u620e\u67d4\u6c41\u6e0b\u7363\u7e26\u91cd\u9283\u53d4\u5919\u5bbf\u6dd1\u795d\u7e2e\u7c9b\u587e\u719f\u51fa\u8853\u8ff0\u4fca\u5cfb\u6625\u77ac\u7ae3\u821c\u99ff\u51c6\u5faa\u65ec\u696f\u6b89\u6df3"],["8f80","\u6e96\u6f64\u76fe\u7d14\u5de1\u9075\u9187\u9806\u51e6\u521d\u6240\u6691\u66d9\u6e1a\u5eb6\u7dd2\u7f72\u66f8\u85af\u85f7\u8af8\u52a9\u53d9\u5973\u5e8f\u5f90\u6055\u92e4\u9664\u50b7\u511f\u52dd\u5320\u5347\u53ec\u54e8\u5546\u5531\u5617\u5968\u59be\u5a3c\u5bb5\u5c06\u5c0f\u5c11\u5c1a\u5e84\u5e8a\u5ee0\u5f70\u627f\u6284\u62db\u638c\u6377\u6607\u660c\u662d\u6676\u677e\u68a2\u6a1f\u6a35\u6cbc\u6d88\u6e09\u6e58\u713c\u7126\u7167\u75c7\u7701\u785d\u7901\u7965\u79f0\u7ae0\u7b11\u7ca7\u7d39\u8096\u83d6\u848b\u8549\u885d\u88f3\u8a1f\u8a3c\u8a54\u8a73\u8c61\u8cde\u91a4\u9266\u937e\u9418\u969c\u9798\u4e0a\u4e08\u4e1e\u4e57\u5197\u5270\u57ce\u5834\u58cc\u5b22\u5e38\u60c5\u64fe\u6761\u6756\u6d44\u72b6\u7573\u7a63\u84b8\u8b72\u91b8\u9320\u5631\u57f4\u98fe"],["9040","\u62ed\u690d\u6b96\u71ed\u7e54\u8077\u8272\u89e6\u98df\u8755\u8fb1\u5c3b\u4f38\u4fe1\u4fb5\u5507\u5a20\u5bdd\u5be9\u5fc3\u614e\u632f\u65b0\u664b\u68ee\u699b\u6d78\u6df1\u7533\u75b9\u771f\u795e\u79e6\u7d33\u81e3\u82af\u85aa\u89aa\u8a3a\u8eab\u8f9b\u9032\u91dd\u9707\u4eba\u4ec1\u5203\u5875\u58ec\u5c0b\u751a\u5c3d\u814e\u8a0a\u8fc5\u9663\u976d\u7b25\u8acf\u9808\u9162\u56f3\u53a8"],["9080","\u9017\u5439\u5782\u5e25\u63a8\u6c34\u708a\u7761\u7c8b\u7fe0\u8870\u9042\u9154\u9310\u9318\u968f\u745e\u9ac4\u5d07\u5d69\u6570\u67a2\u8da8\u96db\u636e\u6749\u6919\u83c5\u9817\u96c0\u88fe\u6f84\u647a\u5bf8\u4e16\u702c\u755d\u662f\u51c4\u5236\u52e2\u59d3\u5f81\u6027\u6210\u653f\u6574\u661f\u6674\u68f2\u6816\u6b63\u6e05\u7272\u751f\u76db\u7cbe\u8056\u58f0\u88fd\u897f\u8aa0\u8a93\u8acb\u901d\u9192\u9752\u9759\u6589\u7a0e\u8106\u96bb\u5e2d\u60dc\u621a\u65a5\u6614\u6790\u77f3\u7a4d\u7c4d\u7e3e\u810a\u8cac\u8d64\u8de1\u8e5f\u78a9\u5207\u62d9\u63a5\u6442\u6298\u8a2d\u7a83\u7bc0\u8aac\u96ea\u7d76\u820c\u8749\u4ed9\u5148\u5343\u5360\u5ba3\u5c02\u5c16\u5ddd\u6226\u6247\u64b0\u6813\u6834\u6cc9\u6d45\u6d17\u67d3\u6f5c\u714e\u717d\u65cb\u7a7f\u7bad\u7dda"],["9140","\u7e4a\u7fa8\u817a\u821b\u8239\u85a6\u8a6e\u8cce\u8df5\u9078\u9077\u92ad\u9291\u9583\u9bae\u524d\u5584\u6f38\u7136\u5168\u7985\u7e55\u81b3\u7cce\u564c\u5851\u5ca8\u63aa\u66fe\u66fd\u695a\u72d9\u758f\u758e\u790e\u7956\u79df\u7c97\u7d20\u7d44\u8607\u8a34\u963b\u9061\u9f20\u50e7\u5275\u53cc\u53e2\u5009\u55aa\u58ee\u594f\u723d\u5b8b\u5c64\u531d\u60e3\u60f3\u635c\u6383\u633f\u63bb"],["9180","\u64cd\u65e9\u66f9\u5de3\u69cd\u69fd\u6f15\u71e5\u4e89\u75e9\u76f8\u7a93\u7cdf\u7dcf\u7d9c\u8061\u8349\u8358\u846c\u84bc\u85fb\u88c5\u8d70\u9001\u906d\u9397\u971c\u9a12\u50cf\u5897\u618e\u81d3\u8535\u8d08\u9020\u4fc3\u5074\u5247\u5373\u606f\u6349\u675f\u6e2c\u8db3\u901f\u4fd7\u5c5e\u8cca\u65cf\u7d9a\u5352\u8896\u5176\u63c3\u5b58\u5b6b\u5c0a\u640d\u6751\u905c\u4ed6\u591a\u592a\u6c70\u8a51\u553e\u5815\u59a5\u60f0\u6253\u67c1\u8235\u6955\u9640\u99c4\u9a28\u4f53\u5806\u5bfe\u8010\u5cb1\u5e2f\u5f85\u6020\u614b\u6234\u66ff\u6cf0\u6ede\u80ce\u817f\u82d4\u888b\u8cb8\u9000\u902e\u968a\u9edb\u9bdb\u4ee3\u53f0\u5927\u7b2c\u918d\u984c\u9df9\u6edd\u7027\u5353\u5544\u5b85\u6258\u629e\u62d3\u6ca2\u6fef\u7422\u8a17\u9438\u6fc1\u8afe\u8338\u51e7\u86f8\u53ea"],["9240","\u53e9\u4f46\u9054\u8fb0\u596a\u8131\u5dfd\u7aea\u8fbf\u68da\u8c37\u72f8\u9c48\u6a3d\u8ab0\u4e39\u5358\u5606\u5766\u62c5\u63a2\u65e6\u6b4e\u6de1\u6e5b\u70ad\u77ed\u7aef\u7baa\u7dbb\u803d\u80c6\u86cb\u8a95\u935b\u56e3\u58c7\u5f3e\u65ad\u6696\u6a80\u6bb5\u7537\u8ac7\u5024\u77e5\u5730\u5f1b\u6065\u667a\u6c60\u75f4\u7a1a\u7f6e\u81f4\u8718\u9045\u99b3\u7bc9\u755c\u7af9\u7b51\u84c4"],["9280","\u9010\u79e9\u7a92\u8336\u5ae1\u7740\u4e2d\u4ef2\u5b99\u5fe0\u62bd\u663c\u67f1\u6ce8\u866b\u8877\u8a3b\u914e\u92f3\u99d0\u6a17\u7026\u732a\u82e7\u8457\u8caf\u4e01\u5146\u51cb\u558b\u5bf5\u5e16\u5e33\u5e81\u5f14\u5f35\u5f6b\u5fb4\u61f2\u6311\u66a2\u671d\u6f6e\u7252\u753a\u773a\u8074\u8139\u8178\u8776\u8abf\u8adc\u8d85\u8df3\u929a\u9577\u9802\u9ce5\u52c5\u6357\u76f4\u6715\u6c88\u73cd\u8cc3\u93ae\u9673\u6d25\u589c\u690e\u69cc\u8ffd\u939a\u75db\u901a\u585a\u6802\u63b4\u69fb\u4f43\u6f2c\u67d8\u8fbb\u8526\u7db4\u9354\u693f\u6f70\u576a\u58f7\u5b2c\u7d2c\u722a\u540a\u91e3\u9db4\u4ead\u4f4e\u505c\u5075\u5243\u8c9e\u5448\u5824\u5b9a\u5e1d\u5e95\u5ead\u5ef7\u5f1f\u608c\u62b5\u633a\u63d0\u68af\u6c40\u7887\u798e\u7a0b\u7de0\u8247\u8a02\u8ae6\u8e44\u9013"],["9340","\u90b8\u912d\u91d8\u9f0e\u6ce5\u6458\u64e2\u6575\u6ef4\u7684\u7b1b\u9069\u93d1\u6eba\u54f2\u5fb9\u64a4\u8f4d\u8fed\u9244\u5178\u586b\u5929\u5c55\u5e97\u6dfb\u7e8f\u751c\u8cbc\u8ee2\u985b\u70b9\u4f1d\u6bbf\u6fb1\u7530\u96fb\u514e\u5410\u5835\u5857\u59ac\u5c60\u5f92\u6597\u675c\u6e21\u767b\u83df\u8ced\u9014\u90fd\u934d\u7825\u783a\u52aa\u5ea6\u571f\u5974\u6012\u5012\u515a\u51ac"],["9380","\u51cd\u5200\u5510\u5854\u5858\u5957\u5b95\u5cf6\u5d8b\u60bc\u6295\u642d\u6771\u6843\u68bc\u68df\u76d7\u6dd8\u6e6f\u6d9b\u706f\u71c8\u5f53\u75d8\u7977\u7b49\u7b54\u7b52\u7cd6\u7d71\u5230\u8463\u8569\u85e4\u8a0e\u8b04\u8c46\u8e0f\u9003\u900f\u9419\u9676\u982d\u9a30\u95d8\u50cd\u52d5\u540c\u5802\u5c0e\u61a7\u649e\u6d1e\u77b3\u7ae5\u80f4\u8404\u9053\u9285\u5ce0\u9d07\u533f\u5f97\u5fb3\u6d9c\u7279\u7763\u79bf\u7be4\u6bd2\u72ec\u8aad\u6803\u6a61\u51f8\u7a81\u6934\u5c4a\u9cf6\u82eb\u5bc5\u9149\u701e\u5678\u5c6f\u60c7\u6566\u6c8c\u8c5a\u9041\u9813\u5451\u66c7\u920d\u5948\u90a3\u5185\u4e4d\u51ea\u8599\u8b0e\u7058\u637a\u934b\u6962\u99b4\u7e04\u7577\u5357\u6960\u8edf\u96e3\u6c5d\u4e8c\u5c3c\u5f10\u8fe9\u5302\u8cd1\u8089\u8679\u5eff\u65e5\u4e73\u5165"],["9440","\u5982\u5c3f\u97ee\u4efb\u598a\u5fcd\u8a8d\u6fe1\u79b0\u7962\u5be7\u8471\u732b\u71b1\u5e74\u5ff5\u637b\u649a\u71c3\u7c98\u4e43\u5efc\u4e4b\u57dc\u56a2\u60a9\u6fc3\u7d0d\u80fd\u8133\u81bf\u8fb2\u8997\u86a4\u5df4\u628a\u64ad\u8987\u6777\u6ce2\u6d3e\u7436\u7834\u5a46\u7f75\u82ad\u99ac\u4ff3\u5ec3\u62dd\u6392\u6557\u676f\u76c3\u724c\u80cc\u80ba\u8f29\u914d\u500d\u57f9\u5a92\u6885"],["9480","\u6973\u7164\u72fd\u8cb7\u58f2\u8ce0\u966a\u9019\u877f\u79e4\u77e7\u8429\u4f2f\u5265\u535a\u62cd\u67cf\u6cca\u767d\u7b94\u7c95\u8236\u8584\u8feb\u66dd\u6f20\u7206\u7e1b\u83ab\u99c1\u9ea6\u51fd\u7bb1\u7872\u7bb8\u8087\u7b48\u6ae8\u5e61\u808c\u7551\u7560\u516b\u9262\u6e8c\u767a\u9197\u9aea\u4f10\u7f70\u629c\u7b4f\u95a5\u9ce9\u567a\u5859\u86e4\u96bc\u4f34\u5224\u534a\u53cd\u53db\u5e06\u642c\u6591\u677f\u6c3e\u6c4e\u7248\u72af\u73ed\u7554\u7e41\u822c\u85e9\u8ca9\u7bc4\u91c6\u7169\u9812\u98ef\u633d\u6669\u756a\u76e4\u78d0\u8543\u86ee\u532a\u5351\u5426\u5983\u5e87\u5f7c\u60b2\u6249\u6279\u62ab\u6590\u6bd4\u6ccc\u75b2\u76ae\u7891\u79d8\u7dcb\u7f77\u80a5\u88ab\u8ab9\u8cbb\u907f\u975e\u98db\u6a0b\u7c38\u5099\u5c3e\u5fae\u6787\u6bd8\u7435\u7709\u7f8e"],["9540","\u9f3b\u67ca\u7a17\u5339\u758b\u9aed\u5f66\u819d\u83f1\u8098\u5f3c\u5fc5\u7562\u7b46\u903c\u6867\u59eb\u5a9b\u7d10\u767e\u8b2c\u4ff5\u5f6a\u6a19\u6c37\u6f02\u74e2\u7968\u8868\u8a55\u8c79\u5edf\u63cf\u75c5\u79d2\u82d7\u9328\u92f2\u849c\u86ed\u9c2d\u54c1\u5f6c\u658c\u6d5c\u7015\u8ca7\u8cd3\u983b\u654f\u74f6\u4e0d\u4ed8\u57e0\u592b\u5a66\u5bcc\u51a8\u5e03\u5e9c\u6016\u6276\u6577"],["9580","\u65a7\u666e\u6d6e\u7236\u7b26\u8150\u819a\u8299\u8b5c\u8ca0\u8ce6\u8d74\u961c\u9644\u4fae\u64ab\u6b66\u821e\u8461\u856a\u90e8\u5c01\u6953\u98a8\u847a\u8557\u4f0f\u526f\u5fa9\u5e45\u670d\u798f\u8179\u8907\u8986\u6df5\u5f17\u6255\u6cb8\u4ecf\u7269\u9b92\u5206\u543b\u5674\u58b3\u61a4\u626e\u711a\u596e\u7c89\u7cde\u7d1b\u96f0\u6587\u805e\u4e19\u4f75\u5175\u5840\u5e63\u5e73\u5f0a\u67c4\u4e26\u853d\u9589\u965b\u7c73\u9801\u50fb\u58c1\u7656\u78a7\u5225\u77a5\u8511\u7b86\u504f\u5909\u7247\u7bc7\u7de8\u8fba\u8fd4\u904d\u4fbf\u52c9\u5a29\u5f01\u97ad\u4fdd\u8217\u92ea\u5703\u6355\u6b69\u752b\u88dc\u8f14\u7a42\u52df\u5893\u6155\u620a\u66ae\u6bcd\u7c3f\u83e9\u5023\u4ff8\u5305\u5446\u5831\u5949\u5b9d\u5cf0\u5cef\u5d29\u5e96\u62b1\u6367\u653e\u65b9\u670b"],["9640","\u6cd5\u6ce1\u70f9\u7832\u7e2b\u80de\u82b3\u840c\u84ec\u8702\u8912\u8a2a\u8c4a\u90a6\u92d2\u98fd\u9cf3\u9d6c\u4e4f\u4ea1\u508d\u5256\u574a\u59a8\u5e3d\u5fd8\u5fd9\u623f\u66b4\u671b\u67d0\u68d2\u5192\u7d21\u80aa\u81a8\u8b00\u8c8c\u8cbf\u927e\u9632\u5420\u982c\u5317\u50d5\u535c\u58a8\u64b2\u6734\u7267\u7766\u7a46\u91e6\u52c3\u6ca1\u6b86\u5800\u5e4c\u5954\u672c\u7ffb\u51e1\u76c6"],["9680","\u6469\u78e8\u9b54\u9ebb\u57cb\u59b9\u6627\u679a\u6bce\u54e9\u69d9\u5e55\u819c\u6795\u9baa\u67fe\u9c52\u685d\u4ea6\u4fe3\u53c8\u62b9\u672b\u6cab\u8fc4\u4fad\u7e6d\u9ebf\u4e07\u6162\u6e80\u6f2b\u8513\u5473\u672a\u9b45\u5df3\u7b95\u5cac\u5bc6\u871c\u6e4a\u84d1\u7a14\u8108\u5999\u7c8d\u6c11\u7720\u52d9\u5922\u7121\u725f\u77db\u9727\u9d61\u690b\u5a7f\u5a18\u51a5\u540d\u547d\u660e\u76df\u8ff7\u9298\u9cf4\u59ea\u725d\u6ec5\u514d\u68c9\u7dbf\u7dec\u9762\u9eba\u6478\u6a21\u8302\u5984\u5b5f\u6bdb\u731b\u76f2\u7db2\u8017\u8499\u5132\u6728\u9ed9\u76ee\u6762\u52ff\u9905\u5c24\u623b\u7c7e\u8cb0\u554f\u60b6\u7d0b\u9580\u5301\u4e5f\u51b6\u591c\u723a\u8036\u91ce\u5f25\u77e2\u5384\u5f79\u7d04\u85ac\u8a33\u8e8d\u9756\u67f3\u85ae\u9453\u6109\u6108\u6cb9\u7652"],["9740","\u8aed\u8f38\u552f\u4f51\u512a\u52c7\u53cb\u5ba5\u5e7d\u60a0\u6182\u63d6\u6709\u67da\u6e67\u6d8c\u7336\u7337\u7531\u7950\u88d5\u8a98\u904a\u9091\u90f5\u96c4\u878d\u5915\u4e88\u4f59\u4e0e\u8a89\u8f3f\u9810\u50ad\u5e7c\u5996\u5bb9\u5eb8\u63da\u63fa\u64c1\u66dc\u694a\u69d8\u6d0b\u6eb6\u7194\u7528\u7aaf\u7f8a\u8000\u8449\u84c9\u8981\u8b21\u8e0a\u9065\u967d\u990a\u617e\u6291\u6b32"],["9780","\u6c83\u6d74\u7fcc\u7ffc\u6dc0\u7f85\u87ba\u88f8\u6765\u83b1\u983c\u96f7\u6d1b\u7d61\u843d\u916a\u4e71\u5375\u5d50\u6b04\u6feb\u85cd\u862d\u89a7\u5229\u540f\u5c65\u674e\u68a8\u7406\u7483\u75e2\u88cf\u88e1\u91cc\u96e2\u9678\u5f8b\u7387\u7acb\u844e\u63a0\u7565\u5289\u6d41\u6e9c\u7409\u7559\u786b\u7c92\u9686\u7adc\u9f8d\u4fb6\u616e\u65c5\u865c\u4e86\u4eae\u50da\u4e21\u51cc\u5bee\u6599\u6881\u6dbc\u731f\u7642\u77ad\u7a1c\u7ce7\u826f\u8ad2\u907c\u91cf\u9675\u9818\u529b\u7dd1\u502b\u5398\u6797\u6dcb\u71d0\u7433\u81e8\u8f2a\u96a3\u9c57\u9e9f\u7460\u5841\u6d99\u7d2f\u985e\u4ee4\u4f36\u4f8b\u51b7\u52b1\u5dba\u601c\u73b2\u793c\u82d3\u9234\u96b7\u96f6\u970a\u9e97\u9f62\u66a6\u6b74\u5217\u52a3\u70c8\u88c2\u5ec9\u604b\u6190\u6f23\u7149\u7c3e\u7df4\u806f"],["9840","\u84ee\u9023\u932c\u5442\u9b6f\u6ad3\u7089\u8cc2\u8def\u9732\u52b4\u5a41\u5eca\u5f04\u6717\u697c\u6994\u6d6a\u6f0f\u7262\u72fc\u7bed\u8001\u807e\u874b\u90ce\u516d\u9e93\u7984\u808b\u9332\u8ad6\u502d\u548c\u8a71\u6b6a\u8cc4\u8107\u60d1\u67a0\u9df2\u4e99\u4e98\u9c10\u8a6b\u85c1\u8568\u6900\u6e7e\u7897\u8155"],["989f","\u5f0c\u4e10\u4e15\u4e2a\u4e31\u4e36\u4e3c\u4e3f\u4e42\u4e56\u4e58\u4e82\u4e85\u8c6b\u4e8a\u8212\u5f0d\u4e8e\u4e9e\u4e9f\u4ea0\u4ea2\u4eb0\u4eb3\u4eb6\u4ece\u4ecd\u4ec4\u4ec6\u4ec2\u4ed7\u4ede\u4eed\u4edf\u4ef7\u4f09\u4f5a\u4f30\u4f5b\u4f5d\u4f57\u4f47\u4f76\u4f88\u4f8f\u4f98\u4f7b\u4f69\u4f70\u4f91\u4f6f\u4f86\u4f96\u5118\u4fd4\u4fdf\u4fce\u4fd8\u4fdb\u4fd1\u4fda\u4fd0\u4fe4\u4fe5\u501a\u5028\u5014\u502a\u5025\u5005\u4f1c\u4ff6\u5021\u5029\u502c\u4ffe\u4fef\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505a\u5056\u506c\u5078\u5080\u509a\u5085\u50b4\u50b2"],["9940","\u50c9\u50ca\u50b3\u50c2\u50d6\u50de\u50e5\u50ed\u50e3\u50ee\u50f9\u50f5\u5109\u5101\u5102\u5116\u5115\u5114\u511a\u5121\u513a\u5137\u513c\u513b\u513f\u5140\u5152\u514c\u5154\u5162\u7af8\u5169\u516a\u516e\u5180\u5182\u56d8\u518c\u5189\u518f\u5191\u5193\u5195\u5196\u51a4\u51a6\u51a2\u51a9\u51aa\u51ab\u51b3\u51b1\u51b2\u51b0\u51b5\u51bd\u51c5\u51c9\u51db\u51e0\u8655\u51e9\u51ed"],["9980","\u51f0\u51f5\u51fe\u5204\u520b\u5214\u520e\u5227\u522a\u522e\u5233\u5239\u524f\u5244\u524b\u524c\u525e\u5254\u526a\u5274\u5269\u5273\u527f\u527d\u528d\u5294\u5292\u5271\u5288\u5291\u8fa8\u8fa7\u52ac\u52ad\u52bc\u52b5\u52c1\u52cd\u52d7\u52de\u52e3\u52e6\u98ed\u52e0\u52f3\u52f5\u52f8\u52f9\u5306\u5308\u7538\u530d\u5310\u530f\u5315\u531a\u5323\u532f\u5331\u5333\u5338\u5340\u5346\u5345\u4e17\u5349\u534d\u51d6\u535e\u5369\u536e\u5918\u537b\u5377\u5382\u5396\u53a0\u53a6\u53a5\u53ae\u53b0\u53b6\u53c3\u7c12\u96d9\u53df\u66fc\u71ee\u53ee\u53e8\u53ed\u53fa\u5401\u543d\u5440\u542c\u542d\u543c\u542e\u5436\u5429\u541d\u544e\u548f\u5475\u548e\u545f\u5471\u5477\u5470\u5492\u547b\u5480\u5476\u5484\u5490\u5486\u54c7\u54a2\u54b8\u54a5\u54ac\u54c4\u54c8\u54a8"],["9a40","\u54ab\u54c2\u54a4\u54be\u54bc\u54d8\u54e5\u54e6\u550f\u5514\u54fd\u54ee\u54ed\u54fa\u54e2\u5539\u5540\u5563\u554c\u552e\u555c\u5545\u5556\u5557\u5538\u5533\u555d\u5599\u5580\u54af\u558a\u559f\u557b\u557e\u5598\u559e\u55ae\u557c\u5583\u55a9\u5587\u55a8\u55da\u55c5\u55df\u55c4\u55dc\u55e4\u55d4\u5614\u55f7\u5616\u55fe\u55fd\u561b\u55f9\u564e\u5650\u71df\u5634\u5636\u5632\u5638"],["9a80","\u566b\u5664\u562f\u566c\u566a\u5686\u5680\u568a\u56a0\u5694\u568f\u56a5\u56ae\u56b6\u56b4\u56c2\u56bc\u56c1\u56c3\u56c0\u56c8\u56ce\u56d1\u56d3\u56d7\u56ee\u56f9\u5700\u56ff\u5704\u5709\u5708\u570b\u570d\u5713\u5718\u5716\u55c7\u571c\u5726\u5737\u5738\u574e\u573b\u5740\u574f\u5769\u57c0\u5788\u5761\u577f\u5789\u5793\u57a0\u57b3\u57a4\u57aa\u57b0\u57c3\u57c6\u57d4\u57d2\u57d3\u580a\u57d6\u57e3\u580b\u5819\u581d\u5872\u5821\u5862\u584b\u5870\u6bc0\u5852\u583d\u5879\u5885\u58b9\u589f\u58ab\u58ba\u58de\u58bb\u58b8\u58ae\u58c5\u58d3\u58d1\u58d7\u58d9\u58d8\u58e5\u58dc\u58e4\u58df\u58ef\u58fa\u58f9\u58fb\u58fc\u58fd\u5902\u590a\u5910\u591b\u68a6\u5925\u592c\u592d\u5932\u5938\u593e\u7ad2\u5955\u5950\u594e\u595a\u5958\u5962\u5960\u5967\u596c\u5969"],["9b40","\u5978\u5981\u599d\u4f5e\u4fab\u59a3\u59b2\u59c6\u59e8\u59dc\u598d\u59d9\u59da\u5a25\u5a1f\u5a11\u5a1c\u5a09\u5a1a\u5a40\u5a6c\u5a49\u5a35\u5a36\u5a62\u5a6a\u5a9a\u5abc\u5abe\u5acb\u5ac2\u5abd\u5ae3\u5ad7\u5ae6\u5ae9\u5ad6\u5afa\u5afb\u5b0c\u5b0b\u5b16\u5b32\u5ad0\u5b2a\u5b36\u5b3e\u5b43\u5b45\u5b40\u5b51\u5b55\u5b5a\u5b5b\u5b65\u5b69\u5b70\u5b73\u5b75\u5b78\u6588\u5b7a\u5b80"],["9b80","\u5b83\u5ba6\u5bb8\u5bc3\u5bc7\u5bc9\u5bd4\u5bd0\u5be4\u5be6\u5be2\u5bde\u5be5\u5beb\u5bf0\u5bf6\u5bf3\u5c05\u5c07\u5c08\u5c0d\u5c13\u5c20\u5c22\u5c28\u5c38\u5c39\u5c41\u5c46\u5c4e\u5c53\u5c50\u5c4f\u5b71\u5c6c\u5c6e\u4e62\u5c76\u5c79\u5c8c\u5c91\u5c94\u599b\u5cab\u5cbb\u5cb6\u5cbc\u5cb7\u5cc5\u5cbe\u5cc7\u5cd9\u5ce9\u5cfd\u5cfa\u5ced\u5d8c\u5cea\u5d0b\u5d15\u5d17\u5d5c\u5d1f\u5d1b\u5d11\u5d14\u5d22\u5d1a\u5d19\u5d18\u5d4c\u5d52\u5d4e\u5d4b\u5d6c\u5d73\u5d76\u5d87\u5d84\u5d82\u5da2\u5d9d\u5dac\u5dae\u5dbd\u5d90\u5db7\u5dbc\u5dc9\u5dcd\u5dd3\u5dd2\u5dd6\u5ddb\u5deb\u5df2\u5df5\u5e0b\u5e1a\u5e19\u5e11\u5e1b\u5e36\u5e37\u5e44\u5e43\u5e40\u5e4e\u5e57\u5e54\u5e5f\u5e62\u5e64\u5e47\u5e75\u5e76\u5e7a\u9ebc\u5e7f\u5ea0\u5ec1\u5ec2\u5ec8\u5ed0\u5ecf"],["9c40","\u5ed6\u5ee3\u5edd\u5eda\u5edb\u5ee2\u5ee1\u5ee8\u5ee9\u5eec\u5ef1\u5ef3\u5ef0\u5ef4\u5ef8\u5efe\u5f03\u5f09\u5f5d\u5f5c\u5f0b\u5f11\u5f16\u5f29\u5f2d\u5f38\u5f41\u5f48\u5f4c\u5f4e\u5f2f\u5f51\u5f56\u5f57\u5f59\u5f61\u5f6d\u5f73\u5f77\u5f83\u5f82\u5f7f\u5f8a\u5f88\u5f91\u5f87\u5f9e\u5f99\u5f98\u5fa0\u5fa8\u5fad\u5fbc\u5fd6\u5ffb\u5fe4\u5ff8\u5ff1\u5fdd\u60b3\u5fff\u6021\u6060"],["9c80","\u6019\u6010\u6029\u600e\u6031\u601b\u6015\u602b\u6026\u600f\u603a\u605a\u6041\u606a\u6077\u605f\u604a\u6046\u604d\u6063\u6043\u6064\u6042\u606c\u606b\u6059\u6081\u608d\u60e7\u6083\u609a\u6084\u609b\u6096\u6097\u6092\u60a7\u608b\u60e1\u60b8\u60e0\u60d3\u60b4\u5ff0\u60bd\u60c6\u60b5\u60d8\u614d\u6115\u6106\u60f6\u60f7\u6100\u60f4\u60fa\u6103\u6121\u60fb\u60f1\u610d\u610e\u6147\u613e\u6128\u6127\u614a\u613f\u613c\u612c\u6134\u613d\u6142\u6144\u6173\u6177\u6158\u6159\u615a\u616b\u6174\u616f\u6165\u6171\u615f\u615d\u6153\u6175\u6199\u6196\u6187\u61ac\u6194\u619a\u618a\u6191\u61ab\u61ae\u61cc\u61ca\u61c9\u61f7\u61c8\u61c3\u61c6\u61ba\u61cb\u7f79\u61cd\u61e6\u61e3\u61f6\u61fa\u61f4\u61ff\u61fd\u61fc\u61fe\u6200\u6208\u6209\u620d\u620c\u6214\u621b"],["9d40","\u621e\u6221\u622a\u622e\u6230\u6232\u6233\u6241\u624e\u625e\u6263\u625b\u6260\u6268\u627c\u6282\u6289\u627e\u6292\u6293\u6296\u62d4\u6283\u6294\u62d7\u62d1\u62bb\u62cf\u62ff\u62c6\u64d4\u62c8\u62dc\u62cc\u62ca\u62c2\u62c7\u629b\u62c9\u630c\u62ee\u62f1\u6327\u6302\u6308\u62ef\u62f5\u6350\u633e\u634d\u641c\u634f\u6396\u638e\u6380\u63ab\u6376\u63a3\u638f\u6389\u639f\u63b5\u636b"],["9d80","\u6369\u63be\u63e9\u63c0\u63c6\u63e3\u63c9\u63d2\u63f6\u63c4\u6416\u6434\u6406\u6413\u6426\u6436\u651d\u6417\u6428\u640f\u6467\u646f\u6476\u644e\u652a\u6495\u6493\u64a5\u64a9\u6488\u64bc\u64da\u64d2\u64c5\u64c7\u64bb\u64d8\u64c2\u64f1\u64e7\u8209\u64e0\u64e1\u62ac\u64e3\u64ef\u652c\u64f6\u64f4\u64f2\u64fa\u6500\u64fd\u6518\u651c\u6505\u6524\u6523\u652b\u6534\u6535\u6537\u6536\u6538\u754b\u6548\u6556\u6555\u654d\u6558\u655e\u655d\u6572\u6578\u6582\u6583\u8b8a\u659b\u659f\u65ab\u65b7\u65c3\u65c6\u65c1\u65c4\u65cc\u65d2\u65db\u65d9\u65e0\u65e1\u65f1\u6772\u660a\u6603\u65fb\u6773\u6635\u6636\u6634\u661c\u664f\u6644\u6649\u6641\u665e\u665d\u6664\u6667\u6668\u665f\u6662\u6670\u6683\u6688\u668e\u6689\u6684\u6698\u669d\u66c1\u66b9\u66c9\u66be\u66bc"],["9e40","\u66c4\u66b8\u66d6\u66da\u66e0\u663f\u66e6\u66e9\u66f0\u66f5\u66f7\u670f\u6716\u671e\u6726\u6727\u9738\u672e\u673f\u6736\u6741\u6738\u6737\u6746\u675e\u6760\u6759\u6763\u6764\u6789\u6770\u67a9\u677c\u676a\u678c\u678b\u67a6\u67a1\u6785\u67b7\u67ef\u67b4\u67ec\u67b3\u67e9\u67b8\u67e4\u67de\u67dd\u67e2\u67ee\u67b9\u67ce\u67c6\u67e7\u6a9c\u681e\u6846\u6829\u6840\u684d\u6832\u684e"],["9e80","\u68b3\u682b\u6859\u6863\u6877\u687f\u689f\u688f\u68ad\u6894\u689d\u689b\u6883\u6aae\u68b9\u6874\u68b5\u68a0\u68ba\u690f\u688d\u687e\u6901\u68ca\u6908\u68d8\u6922\u6926\u68e1\u690c\u68cd\u68d4\u68e7\u68d5\u6936\u6912\u6904\u68d7\u68e3\u6925\u68f9\u68e0\u68ef\u6928\u692a\u691a\u6923\u6921\u68c6\u6979\u6977\u695c\u6978\u696b\u6954\u697e\u696e\u6939\u6974\u693d\u6959\u6930\u6961\u695e\u695d\u6981\u696a\u69b2\u69ae\u69d0\u69bf\u69c1\u69d3\u69be\u69ce\u5be8\u69ca\u69dd\u69bb\u69c3\u69a7\u6a2e\u6991\u69a0\u699c\u6995\u69b4\u69de\u69e8\u6a02\u6a1b\u69ff\u6b0a\u69f9\u69f2\u69e7\u6a05\u69b1\u6a1e\u69ed\u6a14\u69eb\u6a0a\u6a12\u6ac1\u6a23\u6a13\u6a44\u6a0c\u6a72\u6a36\u6a78\u6a47\u6a62\u6a59\u6a66\u6a48\u6a38\u6a22\u6a90\u6a8d\u6aa0\u6a84\u6aa2\u6aa3"],["9f40","\u6a97\u8617\u6abb\u6ac3\u6ac2\u6ab8\u6ab3\u6aac\u6ade\u6ad1\u6adf\u6aaa\u6ada\u6aea\u6afb\u6b05\u8616\u6afa\u6b12\u6b16\u9b31\u6b1f\u6b38\u6b37\u76dc\u6b39\u98ee\u6b47\u6b43\u6b49\u6b50\u6b59\u6b54\u6b5b\u6b5f\u6b61\u6b78\u6b79\u6b7f\u6b80\u6b84\u6b83\u6b8d\u6b98\u6b95\u6b9e\u6ba4\u6baa\u6bab\u6baf\u6bb2\u6bb1\u6bb3\u6bb7\u6bbc\u6bc6\u6bcb\u6bd3\u6bdf\u6bec\u6beb\u6bf3\u6bef"],["9f80","\u9ebe\u6c08\u6c13\u6c14\u6c1b\u6c24\u6c23\u6c5e\u6c55\u6c62\u6c6a\u6c82\u6c8d\u6c9a\u6c81\u6c9b\u6c7e\u6c68\u6c73\u6c92\u6c90\u6cc4\u6cf1\u6cd3\u6cbd\u6cd7\u6cc5\u6cdd\u6cae\u6cb1\u6cbe\u6cba\u6cdb\u6cef\u6cd9\u6cea\u6d1f\u884d\u6d36\u6d2b\u6d3d\u6d38\u6d19\u6d35\u6d33\u6d12\u6d0c\u6d63\u6d93\u6d64\u6d5a\u6d79\u6d59\u6d8e\u6d95\u6fe4\u6d85\u6df9\u6e15\u6e0a\u6db5\u6dc7\u6de6\u6db8\u6dc6\u6dec\u6dde\u6dcc\u6de8\u6dd2\u6dc5\u6dfa\u6dd9\u6de4\u6dd5\u6dea\u6dee\u6e2d\u6e6e\u6e2e\u6e19\u6e72\u6e5f\u6e3e\u6e23\u6e6b\u6e2b\u6e76\u6e4d\u6e1f\u6e43\u6e3a\u6e4e\u6e24\u6eff\u6e1d\u6e38\u6e82\u6eaa\u6e98\u6ec9\u6eb7\u6ed3\u6ebd\u6eaf\u6ec4\u6eb2\u6ed4\u6ed5\u6e8f\u6ea5\u6ec2\u6e9f\u6f41\u6f11\u704c\u6eec\u6ef8\u6efe\u6f3f\u6ef2\u6f31\u6eef\u6f32\u6ecc"],["e040","\u6f3e\u6f13\u6ef7\u6f86\u6f7a\u6f78\u6f81\u6f80\u6f6f\u6f5b\u6ff3\u6f6d\u6f82\u6f7c\u6f58\u6f8e\u6f91\u6fc2\u6f66\u6fb3\u6fa3\u6fa1\u6fa4\u6fb9\u6fc6\u6faa\u6fdf\u6fd5\u6fec\u6fd4\u6fd8\u6ff1\u6fee\u6fdb\u7009\u700b\u6ffa\u7011\u7001\u700f\u6ffe\u701b\u701a\u6f74\u701d\u7018\u701f\u7030\u703e\u7032\u7051\u7063\u7099\u7092\u70af\u70f1\u70ac\u70b8\u70b3\u70ae\u70df\u70cb\u70dd"],["e080","\u70d9\u7109\u70fd\u711c\u7119\u7165\u7155\u7188\u7166\u7162\u714c\u7156\u716c\u718f\u71fb\u7184\u7195\u71a8\u71ac\u71d7\u71b9\u71be\u71d2\u71c9\u71d4\u71ce\u71e0\u71ec\u71e7\u71f5\u71fc\u71f9\u71ff\u720d\u7210\u721b\u7228\u722d\u722c\u7230\u7232\u723b\u723c\u723f\u7240\u7246\u724b\u7258\u7274\u727e\u7282\u7281\u7287\u7292\u7296\u72a2\u72a7\u72b9\u72b2\u72c3\u72c6\u72c4\u72ce\u72d2\u72e2\u72e0\u72e1\u72f9\u72f7\u500f\u7317\u730a\u731c\u7316\u731d\u7334\u732f\u7329\u7325\u733e\u734e\u734f\u9ed8\u7357\u736a\u7368\u7370\u7378\u7375\u737b\u737a\u73c8\u73b3\u73ce\u73bb\u73c0\u73e5\u73ee\u73de\u74a2\u7405\u746f\u7425\u73f8\u7432\u743a\u7455\u743f\u745f\u7459\u7441\u745c\u7469\u7470\u7463\u746a\u7476\u747e\u748b\u749e\u74a7\u74ca\u74cf\u74d4\u73f1"],["e140","\u74e0\u74e3\u74e7\u74e9\u74ee\u74f2\u74f0\u74f1\u74f8\u74f7\u7504\u7503\u7505\u750c\u750e\u750d\u7515\u7513\u751e\u7526\u752c\u753c\u7544\u754d\u754a\u7549\u755b\u7546\u755a\u7569\u7564\u7567\u756b\u756d\u7578\u7576\u7586\u7587\u7574\u758a\u7589\u7582\u7594\u759a\u759d\u75a5\u75a3\u75c2\u75b3\u75c3\u75b5\u75bd\u75b8\u75bc\u75b1\u75cd\u75ca\u75d2\u75d9\u75e3\u75de\u75fe\u75ff"],["e180","\u75fc\u7601\u75f0\u75fa\u75f2\u75f3\u760b\u760d\u7609\u761f\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763b\u7647\u7648\u7646\u765c\u7658\u7661\u7662\u7668\u7669\u766a\u7667\u766c\u7670\u7672\u7676\u7678\u767c\u7680\u7683\u7688\u768b\u768e\u7696\u7693\u7699\u769a\u76b0\u76b4\u76b8\u76b9\u76ba\u76c2\u76cd\u76d6\u76d2\u76de\u76e1\u76e5\u76e7\u76ea\u862f\u76fb\u7708\u7707\u7704\u7729\u7724\u771e\u7725\u7726\u771b\u7737\u7738\u7747\u775a\u7768\u776b\u775b\u7765\u777f\u777e\u7779\u778e\u778b\u7791\u77a0\u779e\u77b0\u77b6\u77b9\u77bf\u77bc\u77bd\u77bb\u77c7\u77cd\u77d7\u77da\u77dc\u77e3\u77ee\u77fc\u780c\u7812\u7926\u7820\u792a\u7845\u788e\u7874\u7886\u787c\u789a\u788c\u78a3\u78b5\u78aa\u78af\u78d1\u78c6\u78cb\u78d4\u78be\u78bc\u78c5\u78ca\u78ec"],["e240","\u78e7\u78da\u78fd\u78f4\u7907\u7912\u7911\u7919\u792c\u792b\u7940\u7960\u7957\u795f\u795a\u7955\u7953\u797a\u797f\u798a\u799d\u79a7\u9f4b\u79aa\u79ae\u79b3\u79b9\u79ba\u79c9\u79d5\u79e7\u79ec\u79e1\u79e3\u7a08\u7a0d\u7a18\u7a19\u7a20\u7a1f\u7980\u7a31\u7a3b\u7a3e\u7a37\u7a43\u7a57\u7a49\u7a61\u7a62\u7a69\u9f9d\u7a70\u7a79\u7a7d\u7a88\u7a97\u7a95\u7a98\u7a96\u7aa9\u7ac8\u7ab0"],["e280","\u7ab6\u7ac5\u7ac4\u7abf\u9083\u7ac7\u7aca\u7acd\u7acf\u7ad5\u7ad3\u7ad9\u7ada\u7add\u7ae1\u7ae2\u7ae6\u7aed\u7af0\u7b02\u7b0f\u7b0a\u7b06\u7b33\u7b18\u7b19\u7b1e\u7b35\u7b28\u7b36\u7b50\u7b7a\u7b04\u7b4d\u7b0b\u7b4c\u7b45\u7b75\u7b65\u7b74\u7b67\u7b70\u7b71\u7b6c\u7b6e\u7b9d\u7b98\u7b9f\u7b8d\u7b9c\u7b9a\u7b8b\u7b92\u7b8f\u7b5d\u7b99\u7bcb\u7bc1\u7bcc\u7bcf\u7bb4\u7bc6\u7bdd\u7be9\u7c11\u7c14\u7be6\u7be5\u7c60\u7c00\u7c07\u7c13\u7bf3\u7bf7\u7c17\u7c0d\u7bf6\u7c23\u7c27\u7c2a\u7c1f\u7c37\u7c2b\u7c3d\u7c4c\u7c43\u7c54\u7c4f\u7c40\u7c50\u7c58\u7c5f\u7c64\u7c56\u7c65\u7c6c\u7c75\u7c83\u7c90\u7ca4\u7cad\u7ca2\u7cab\u7ca1\u7ca8\u7cb3\u7cb2\u7cb1\u7cae\u7cb9\u7cbd\u7cc0\u7cc5\u7cc2\u7cd8\u7cd2\u7cdc\u7ce2\u9b3b\u7cef\u7cf2\u7cf4\u7cf6\u7cfa\u7d06"],["e340","\u7d02\u7d1c\u7d15\u7d0a\u7d45\u7d4b\u7d2e\u7d32\u7d3f\u7d35\u7d46\u7d73\u7d56\u7d4e\u7d72\u7d68\u7d6e\u7d4f\u7d63\u7d93\u7d89\u7d5b\u7d8f\u7d7d\u7d9b\u7dba\u7dae\u7da3\u7db5\u7dc7\u7dbd\u7dab\u7e3d\u7da2\u7daf\u7ddc\u7db8\u7d9f\u7db0\u7dd8\u7ddd\u7de4\u7dde\u7dfb\u7df2\u7de1\u7e05\u7e0a\u7e23\u7e21\u7e12\u7e31\u7e1f\u7e09\u7e0b\u7e22\u7e46\u7e66\u7e3b\u7e35\u7e39\u7e43\u7e37"],["e380","\u7e32\u7e3a\u7e67\u7e5d\u7e56\u7e5e\u7e59\u7e5a\u7e79\u7e6a\u7e69\u7e7c\u7e7b\u7e83\u7dd5\u7e7d\u8fae\u7e7f\u7e88\u7e89\u7e8c\u7e92\u7e90\u7e93\u7e94\u7e96\u7e8e\u7e9b\u7e9c\u7f38\u7f3a\u7f45\u7f4c\u7f4d\u7f4e\u7f50\u7f51\u7f55\u7f54\u7f58\u7f5f\u7f60\u7f68\u7f69\u7f67\u7f78\u7f82\u7f86\u7f83\u7f88\u7f87\u7f8c\u7f94\u7f9e\u7f9d\u7f9a\u7fa3\u7faf\u7fb2\u7fb9\u7fae\u7fb6\u7fb8\u8b71\u7fc5\u7fc6\u7fca\u7fd5\u7fd4\u7fe1\u7fe6\u7fe9\u7ff3\u7ff9\u98dc\u8006\u8004\u800b\u8012\u8018\u8019\u801c\u8021\u8028\u803f\u803b\u804a\u8046\u8052\u8058\u805a\u805f\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807d\u807f\u8084\u8086\u8085\u809b\u8093\u809a\u80ad\u5190\u80ac\u80db\u80e5\u80d9\u80dd\u80c4\u80da\u80d6\u8109\u80ef\u80f1\u811b\u8129\u8123\u812f\u814b"],["e440","\u968b\u8146\u813e\u8153\u8151\u80fc\u8171\u816e\u8165\u8166\u8174\u8183\u8188\u818a\u8180\u8182\u81a0\u8195\u81a4\u81a3\u815f\u8193\u81a9\u81b0\u81b5\u81be\u81b8\u81bd\u81c0\u81c2\u81ba\u81c9\u81cd\u81d1\u81d9\u81d8\u81c8\u81da\u81df\u81e0\u81e7\u81fa\u81fb\u81fe\u8201\u8202\u8205\u8207\u820a\u820d\u8210\u8216\u8229\u822b\u8238\u8233\u8240\u8259\u8258\u825d\u825a\u825f\u8264"],["e480","\u8262\u8268\u826a\u826b\u822e\u8271\u8277\u8278\u827e\u828d\u8292\u82ab\u829f\u82bb\u82ac\u82e1\u82e3\u82df\u82d2\u82f4\u82f3\u82fa\u8393\u8303\u82fb\u82f9\u82de\u8306\u82dc\u8309\u82d9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832f\u832b\u8317\u8318\u8385\u839a\u83aa\u839f\u83a2\u8396\u8323\u838e\u8387\u838a\u837c\u83b5\u8373\u8375\u83a0\u8389\u83a8\u83f4\u8413\u83eb\u83ce\u83fd\u8403\u83d8\u840b\u83c1\u83f7\u8407\u83e0\u83f2\u840d\u8422\u8420\u83bd\u8438\u8506\u83fb\u846d\u842a\u843c\u855a\u8484\u8477\u846b\u84ad\u846e\u8482\u8469\u8446\u842c\u846f\u8479\u8435\u84ca\u8462\u84b9\u84bf\u849f\u84d9\u84cd\u84bb\u84da\u84d0\u84c1\u84c6\u84d6\u84a1\u8521\u84ff\u84f4\u8517\u8518\u852c\u851f\u8515\u8514\u84fc\u8540\u8563\u8558\u8548"],["e540","\u8541\u8602\u854b\u8555\u8580\u85a4\u8588\u8591\u858a\u85a8\u856d\u8594\u859b\u85ea\u8587\u859c\u8577\u857e\u8590\u85c9\u85ba\u85cf\u85b9\u85d0\u85d5\u85dd\u85e5\u85dc\u85f9\u860a\u8613\u860b\u85fe\u85fa\u8606\u8622\u861a\u8630\u863f\u864d\u4e55\u8654\u865f\u8667\u8671\u8693\u86a3\u86a9\u86aa\u868b\u868c\u86b6\u86af\u86c4\u86c6\u86b0\u86c9\u8823\u86ab\u86d4\u86de\u86e9\u86ec"],["e580","\u86df\u86db\u86ef\u8712\u8706\u8708\u8700\u8703\u86fb\u8711\u8709\u870d\u86f9\u870a\u8734\u873f\u8737\u873b\u8725\u8729\u871a\u8760\u875f\u8778\u874c\u874e\u8774\u8757\u8768\u876e\u8759\u8753\u8763\u876a\u8805\u87a2\u879f\u8782\u87af\u87cb\u87bd\u87c0\u87d0\u96d6\u87ab\u87c4\u87b3\u87c7\u87c6\u87bb\u87ef\u87f2\u87e0\u880f\u880d\u87fe\u87f6\u87f7\u880e\u87d2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883b\u8844\u8842\u8852\u8859\u885e\u8862\u886b\u8881\u887e\u889e\u8875\u887d\u88b5\u8872\u8882\u8897\u8892\u88ae\u8899\u88a2\u888d\u88a4\u88b0\u88bf\u88b1\u88c3\u88c4\u88d4\u88d8\u88d9\u88dd\u88f9\u8902\u88fc\u88f4\u88e8\u88f2\u8904\u890c\u890a\u8913\u8943\u891e\u8925\u892a\u892b\u8941\u8944\u893b\u8936\u8938\u894c\u891d\u8960\u895e"],["e640","\u8966\u8964\u896d\u896a\u896f\u8974\u8977\u897e\u8983\u8988\u898a\u8993\u8998\u89a1\u89a9\u89a6\u89ac\u89af\u89b2\u89ba\u89bd\u89bf\u89c0\u89da\u89dc\u89dd\u89e7\u89f4\u89f8\u8a03\u8a16\u8a10\u8a0c\u8a1b\u8a1d\u8a25\u8a36\u8a41\u8a5b\u8a52\u8a46\u8a48\u8a7c\u8a6d\u8a6c\u8a62\u8a85\u8a82\u8a84\u8aa8\u8aa1\u8a91\u8aa5\u8aa6\u8a9a\u8aa3\u8ac4\u8acd\u8ac2\u8ada\u8aeb\u8af3\u8ae7"],["e680","\u8ae4\u8af1\u8b14\u8ae0\u8ae2\u8af7\u8ade\u8adb\u8b0c\u8b07\u8b1a\u8ae1\u8b16\u8b10\u8b17\u8b20\u8b33\u97ab\u8b26\u8b2b\u8b3e\u8b28\u8b41\u8b4c\u8b4f\u8b4e\u8b49\u8b56\u8b5b\u8b5a\u8b6b\u8b5f\u8b6c\u8b6f\u8b74\u8b7d\u8b80\u8b8c\u8b8e\u8b92\u8b93\u8b96\u8b99\u8b9a\u8c3a\u8c41\u8c3f\u8c48\u8c4c\u8c4e\u8c50\u8c55\u8c62\u8c6c\u8c78\u8c7a\u8c82\u8c89\u8c85\u8c8a\u8c8d\u8c8e\u8c94\u8c7c\u8c98\u621d\u8cad\u8caa\u8cbd\u8cb2\u8cb3\u8cae\u8cb6\u8cc8\u8cc1\u8ce4\u8ce3\u8cda\u8cfd\u8cfa\u8cfb\u8d04\u8d05\u8d0a\u8d07\u8d0f\u8d0d\u8d10\u9f4e\u8d13\u8ccd\u8d14\u8d16\u8d67\u8d6d\u8d71\u8d73\u8d81\u8d99\u8dc2\u8dbe\u8dba\u8dcf\u8dda\u8dd6\u8dcc\u8ddb\u8dcb\u8dea\u8deb\u8ddf\u8de3\u8dfc\u8e08\u8e09\u8dff\u8e1d\u8e1e\u8e10\u8e1f\u8e42\u8e35\u8e30\u8e34\u8e4a"],["e740","\u8e47\u8e49\u8e4c\u8e50\u8e48\u8e59\u8e64\u8e60\u8e2a\u8e63\u8e55\u8e76\u8e72\u8e7c\u8e81\u8e87\u8e85\u8e84\u8e8b\u8e8a\u8e93\u8e91\u8e94\u8e99\u8eaa\u8ea1\u8eac\u8eb0\u8ec6\u8eb1\u8ebe\u8ec5\u8ec8\u8ecb\u8edb\u8ee3\u8efc\u8efb\u8eeb\u8efe\u8f0a\u8f05\u8f15\u8f12\u8f19\u8f13\u8f1c\u8f1f\u8f1b\u8f0c\u8f26\u8f33\u8f3b\u8f39\u8f45\u8f42\u8f3e\u8f4c\u8f49\u8f46\u8f4e\u8f57\u8f5c"],["e780","\u8f62\u8f63\u8f64\u8f9c\u8f9f\u8fa3\u8fad\u8faf\u8fb7\u8fda\u8fe5\u8fe2\u8fea\u8fef\u9087\u8ff4\u9005\u8ff9\u8ffa\u9011\u9015\u9021\u900d\u901e\u9016\u900b\u9027\u9036\u9035\u9039\u8ff8\u904f\u9050\u9051\u9052\u900e\u9049\u903e\u9056\u9058\u905e\u9068\u906f\u9076\u96a8\u9072\u9082\u907d\u9081\u9080\u908a\u9089\u908f\u90a8\u90af\u90b1\u90b5\u90e2\u90e4\u6248\u90db\u9102\u9112\u9119\u9132\u9130\u914a\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918b\u9189\u9182\u91a2\u91ab\u91af\u91aa\u91b5\u91b4\u91ba\u91c0\u91c1\u91c9\u91cb\u91d0\u91d6\u91df\u91e1\u91db\u91fc\u91f5\u91f6\u921e\u91ff\u9214\u922c\u9215\u9211\u925e\u9257\u9245\u9249\u9264\u9248\u9295\u923f\u924b\u9250\u929c\u9296\u9293\u929b\u925a\u92cf\u92b9\u92b7\u92e9\u930f\u92fa\u9344\u932e"],["e840","\u9319\u9322\u931a\u9323\u933a\u9335\u933b\u935c\u9360\u937c\u936e\u9356\u93b0\u93ac\u93ad\u9394\u93b9\u93d6\u93d7\u93e8\u93e5\u93d8\u93c3\u93dd\u93d0\u93c8\u93e4\u941a\u9414\u9413\u9403\u9407\u9410\u9436\u942b\u9435\u9421\u943a\u9441\u9452\u9444\u945b\u9460\u9462\u945e\u946a\u9229\u9470\u9475\u9477\u947d\u945a\u947c\u947e\u9481\u947f\u9582\u9587\u958a\u9594\u9596\u9598\u9599"],["e880","\u95a0\u95a8\u95a7\u95ad\u95bc\u95bb\u95b9\u95be\u95ca\u6ff6\u95c3\u95cd\u95cc\u95d5\u95d4\u95d6\u95dc\u95e1\u95e5\u95e2\u9621\u9628\u962e\u962f\u9642\u964c\u964f\u964b\u9677\u965c\u965e\u965d\u965f\u9666\u9672\u966c\u968d\u9698\u9695\u9697\u96aa\u96a7\u96b1\u96b2\u96b0\u96b4\u96b6\u96b8\u96b9\u96ce\u96cb\u96c9\u96cd\u894d\u96dc\u970d\u96d5\u96f9\u9704\u9706\u9708\u9713\u970e\u9711\u970f\u9716\u9719\u9724\u972a\u9730\u9739\u973d\u973e\u9744\u9746\u9748\u9742\u9749\u975c\u9760\u9764\u9766\u9768\u52d2\u976b\u9771\u9779\u9785\u977c\u9781\u977a\u9786\u978b\u978f\u9790\u979c\u97a8\u97a6\u97a3\u97b3\u97b4\u97c3\u97c6\u97c8\u97cb\u97dc\u97ed\u9f4f\u97f2\u7adf\u97f6\u97f5\u980f\u980c\u9838\u9824\u9821\u9837\u983d\u9846\u984f\u984b\u986b\u986f\u9870"],["e940","\u9871\u9874\u9873\u98aa\u98af\u98b1\u98b6\u98c4\u98c3\u98c6\u98e9\u98eb\u9903\u9909\u9912\u9914\u9918\u9921\u991d\u991e\u9924\u9920\u992c\u992e\u993d\u993e\u9942\u9949\u9945\u9950\u994b\u9951\u9952\u994c\u9955\u9997\u9998\u99a5\u99ad\u99ae\u99bc\u99df\u99db\u99dd\u99d8\u99d1\u99ed\u99ee\u99f1\u99f2\u99fb\u99f8\u9a01\u9a0f\u9a05\u99e2\u9a19\u9a2b\u9a37\u9a45\u9a42\u9a40\u9a43"],["e980","\u9a3e\u9a55\u9a4d\u9a5b\u9a57\u9a5f\u9a62\u9a65\u9a64\u9a69\u9a6b\u9a6a\u9aad\u9ab0\u9abc\u9ac0\u9acf\u9ad1\u9ad3\u9ad4\u9ade\u9adf\u9ae2\u9ae3\u9ae6\u9aef\u9aeb\u9aee\u9af4\u9af1\u9af7\u9afb\u9b06\u9b18\u9b1a\u9b1f\u9b22\u9b23\u9b25\u9b27\u9b28\u9b29\u9b2a\u9b2e\u9b2f\u9b32\u9b44\u9b43\u9b4f\u9b4d\u9b4e\u9b51\u9b58\u9b74\u9b93\u9b83\u9b91\u9b96\u9b97\u9b9f\u9ba0\u9ba8\u9bb4\u9bc0\u9bca\u9bb9\u9bc6\u9bcf\u9bd1\u9bd2\u9be3\u9be2\u9be4\u9bd4\u9be1\u9c3a\u9bf2\u9bf1\u9bf0\u9c15\u9c14\u9c09\u9c13\u9c0c\u9c06\u9c08\u9c12\u9c0a\u9c04\u9c2e\u9c1b\u9c25\u9c24\u9c21\u9c30\u9c47\u9c32\u9c46\u9c3e\u9c5a\u9c60\u9c67\u9c76\u9c78\u9ce7\u9cec\u9cf0\u9d09\u9d08\u9ceb\u9d03\u9d06\u9d2a\u9d26\u9daf\u9d23\u9d1f\u9d44\u9d15\u9d12\u9d41\u9d3f\u9d3e\u9d46\u9d48"],["ea40","\u9d5d\u9d5e\u9d64\u9d51\u9d50\u9d59\u9d72\u9d89\u9d87\u9dab\u9d6f\u9d7a\u9d9a\u9da4\u9da9\u9db2\u9dc4\u9dc1\u9dbb\u9db8\u9dba\u9dc6\u9dcf\u9dc2\u9dd9\u9dd3\u9df8\u9de6\u9ded\u9def\u9dfd\u9e1a\u9e1b\u9e1e\u9e75\u9e79\u9e7d\u9e81\u9e88\u9e8b\u9e8c\u9e92\u9e95\u9e91\u9e9d\u9ea5\u9ea9\u9eb8\u9eaa\u9ead\u9761\u9ecc\u9ece\u9ecf\u9ed0\u9ed4\u9edc\u9ede\u9edd\u9ee0\u9ee5\u9ee8\u9eef"],["ea80","\u9ef4\u9ef6\u9ef7\u9ef9\u9efb\u9efc\u9efd\u9f07\u9f08\u76b7\u9f15\u9f21\u9f2c\u9f3e\u9f4a\u9f52\u9f54\u9f63\u9f5f\u9f60\u9f61\u9f66\u9f67\u9f6c\u9f6a\u9f77\u9f72\u9f76\u9f95\u9f9c\u9fa0\u582f\u69c7\u9059\u7464\u51dc\u7199"],["ed40","\u7e8a\u891c\u9348\u9288\u84dc\u4fc9\u70bb\u6631\u68c8\u92f9\u66fb\u5f45\u4e28\u4ee1\u4efc\u4f00\u4f03\u4f39\u4f56\u4f92\u4f8a\u4f9a\u4f94\u4fcd\u5040\u5022\u4fff\u501e\u5046\u5070\u5042\u5094\u50f4\u50d8\u514a\u5164\u519d\u51be\u51ec\u5215\u529c\u52a6\u52c0\u52db\u5300\u5307\u5324\u5372\u5393\u53b2\u53dd\ufa0e\u549c\u548a\u54a9\u54ff\u5586\u5759\u5765\u57ac\u57c8\u57c7\ufa0f"],["ed80","\ufa10\u589e\u58b2\u590b\u5953\u595b\u595d\u5963\u59a4\u59ba\u5b56\u5bc0\u752f\u5bd8\u5bec\u5c1e\u5ca6\u5cba\u5cf5\u5d27\u5d53\ufa11\u5d42\u5d6d\u5db8\u5db9\u5dd0\u5f21\u5f34\u5f67\u5fb7\u5fde\u605d\u6085\u608a\u60de\u60d5\u6120\u60f2\u6111\u6137\u6130\u6198\u6213\u62a6\u63f5\u6460\u649d\u64ce\u654e\u6600\u6615\u663b\u6609\u662e\u661e\u6624\u6665\u6657\u6659\ufa12\u6673\u6699\u66a0\u66b2\u66bf\u66fa\u670e\uf929\u6766\u67bb\u6852\u67c0\u6801\u6844\u68cf\ufa13\u6968\ufa14\u6998\u69e2\u6a30\u6a6b\u6a46\u6a73\u6a7e\u6ae2\u6ae4\u6bd6\u6c3f\u6c5c\u6c86\u6c6f\u6cda\u6d04\u6d87\u6d6f\u6d96\u6dac\u6dcf\u6df8\u6df2\u6dfc\u6e39\u6e5c\u6e27\u6e3c\u6ebf\u6f88\u6fb5\u6ff5\u7005\u7007\u7028\u7085\u70ab\u710f\u7104\u715c\u7146\u7147\ufa15\u71c1\u71fe\u72b1"],["ee40","\u72be\u7324\ufa16\u7377\u73bd\u73c9\u73d6\u73e3\u73d2\u7407\u73f5\u7426\u742a\u7429\u742e\u7462\u7489\u749f\u7501\u756f\u7682\u769c\u769e\u769b\u76a6\ufa17\u7746\u52af\u7821\u784e\u7864\u787a\u7930\ufa18\ufa19\ufa1a\u7994\ufa1b\u799b\u7ad1\u7ae7\ufa1c\u7aeb\u7b9e\ufa1d\u7d48\u7d5c\u7db7\u7da0\u7dd6\u7e52\u7f47\u7fa1\ufa1e\u8301\u8362\u837f\u83c7\u83f6\u8448\u84b4\u8553\u8559"],["ee80","\u856b\ufa1f\u85b0\ufa20\ufa21\u8807\u88f5\u8a12\u8a37\u8a79\u8aa7\u8abe\u8adf\ufa22\u8af6\u8b53\u8b7f\u8cf0\u8cf4\u8d12\u8d76\ufa23\u8ecf\ufa24\ufa25\u9067\u90de\ufa26\u9115\u9127\u91da\u91d7\u91de\u91ed\u91ee\u91e4\u91e5\u9206\u9210\u920a\u923a\u9240\u923c\u924e\u9259\u9251\u9239\u9267\u92a7\u9277\u9278\u92e7\u92d7\u92d9\u92d0\ufa27\u92d5\u92e0\u92d3\u9325\u9321\u92fb\ufa28\u931e\u92ff\u931d\u9302\u9370\u9357\u93a4\u93c6\u93de\u93f8\u9431\u9445\u9448\u9592\uf9dc\ufa29\u969d\u96af\u9733\u973b\u9743\u974d\u974f\u9751\u9755\u9857\u9865\ufa2a\ufa2b\u9927\ufa2c\u999e\u9a4e\u9ad9\u9adc\u9b75\u9b72\u9b8f\u9bb1\u9bbb\u9c00\u9d70\u9d6b\ufa2d\u9e19\u9ed1"],["eeef","\u2170",9,"\uffe2\uffe4\uff07\uff02"],["f040","\ue000",62],["f080","\ue03f",124],["f140","\ue0bc",62],["f180","\ue0fb",124],["f240","\ue178",62],["f280","\ue1b7",124],["f340","\ue234",62],["f380","\ue273",124],["f440","\ue2f0",62],["f480","\ue32f",124],["f540","\ue3ac",62],["f580","\ue3eb",124],["f640","\ue468",62],["f680","\ue4a7",124],["f740","\ue524",62],["f780","\ue563",124],["f840","\ue5e0",62],["f880","\ue61f",124],["f940","\ue69c"],["fa40","\u2170",9,"\u2160",9,"\uffe2\uffe4\uff07\uff02\u3231\u2116\u2121\u2235\u7e8a\u891c\u9348\u9288\u84dc\u4fc9\u70bb\u6631\u68c8\u92f9\u66fb\u5f45\u4e28\u4ee1\u4efc\u4f00\u4f03\u4f39\u4f56\u4f92\u4f8a\u4f9a\u4f94\u4fcd\u5040\u5022\u4fff\u501e\u5046\u5070\u5042\u5094\u50f4\u50d8\u514a"],["fa80","\u5164\u519d\u51be\u51ec\u5215\u529c\u52a6\u52c0\u52db\u5300\u5307\u5324\u5372\u5393\u53b2\u53dd\ufa0e\u549c\u548a\u54a9\u54ff\u5586\u5759\u5765\u57ac\u57c8\u57c7\ufa0f\ufa10\u589e\u58b2\u590b\u5953\u595b\u595d\u5963\u59a4\u59ba\u5b56\u5bc0\u752f\u5bd8\u5bec\u5c1e\u5ca6\u5cba\u5cf5\u5d27\u5d53\ufa11\u5d42\u5d6d\u5db8\u5db9\u5dd0\u5f21\u5f34\u5f67\u5fb7\u5fde\u605d\u6085\u608a\u60de\u60d5\u6120\u60f2\u6111\u6137\u6130\u6198\u6213\u62a6\u63f5\u6460\u649d\u64ce\u654e\u6600\u6615\u663b\u6609\u662e\u661e\u6624\u6665\u6657\u6659\ufa12\u6673\u6699\u66a0\u66b2\u66bf\u66fa\u670e\uf929\u6766\u67bb\u6852\u67c0\u6801\u6844\u68cf\ufa13\u6968\ufa14\u6998\u69e2\u6a30\u6a6b\u6a46\u6a73\u6a7e\u6ae2\u6ae4\u6bd6\u6c3f\u6c5c\u6c86\u6c6f\u6cda\u6d04\u6d87\u6d6f"],["fb40","\u6d96\u6dac\u6dcf\u6df8\u6df2\u6dfc\u6e39\u6e5c\u6e27\u6e3c\u6ebf\u6f88\u6fb5\u6ff5\u7005\u7007\u7028\u7085\u70ab\u710f\u7104\u715c\u7146\u7147\ufa15\u71c1\u71fe\u72b1\u72be\u7324\ufa16\u7377\u73bd\u73c9\u73d6\u73e3\u73d2\u7407\u73f5\u7426\u742a\u7429\u742e\u7462\u7489\u749f\u7501\u756f\u7682\u769c\u769e\u769b\u76a6\ufa17\u7746\u52af\u7821\u784e\u7864\u787a\u7930\ufa18\ufa19"],["fb80","\ufa1a\u7994\ufa1b\u799b\u7ad1\u7ae7\ufa1c\u7aeb\u7b9e\ufa1d\u7d48\u7d5c\u7db7\u7da0\u7dd6\u7e52\u7f47\u7fa1\ufa1e\u8301\u8362\u837f\u83c7\u83f6\u8448\u84b4\u8553\u8559\u856b\ufa1f\u85b0\ufa20\ufa21\u8807\u88f5\u8a12\u8a37\u8a79\u8aa7\u8abe\u8adf\ufa22\u8af6\u8b53\u8b7f\u8cf0\u8cf4\u8d12\u8d76\ufa23\u8ecf\ufa24\ufa25\u9067\u90de\ufa26\u9115\u9127\u91da\u91d7\u91de\u91ed\u91ee\u91e4\u91e5\u9206\u9210\u920a\u923a\u9240\u923c\u924e\u9259\u9251\u9239\u9267\u92a7\u9277\u9278\u92e7\u92d7\u92d9\u92d0\ufa27\u92d5\u92e0\u92d3\u9325\u9321\u92fb\ufa28\u931e\u92ff\u931d\u9302\u9370\u9357\u93a4\u93c6\u93de\u93f8\u9431\u9445\u9448\u9592\uf9dc\ufa29\u969d\u96af\u9733\u973b\u9743\u974d\u974f\u9751\u9755\u9857\u9865\ufa2a\ufa2b\u9927\ufa2c\u999e\u9a4e\u9ad9"],["fc40","\u9adc\u9b75\u9b72\u9b8f\u9bb1\u9bbb\u9c00\u9d70\u9d6b\ufa2d\u9e19\u9ed1"]]},lm0R:function(e,t,n){"use strict";(function(t){e.exports=!t.version||0===t.version.indexOf("v0.")||0===t.version.indexOf("v1.")&&0!==t.version.indexOf("v1.8.")?{nextTick:function(e,n,r,i){if("function"!=typeof e)throw new TypeError('"callback" argument must be a function');var o,s,a=arguments.length;switch(a){case 0:case 1:return t.nextTick(e);case 2:return t.nextTick(function(){e.call(null,n)});case 3:return t.nextTick(function(){e.call(null,n,r)});case 4:return t.nextTick(function(){e.call(null,n,r,i)});default:for(o=new Array(a-1),s=0;s<o.length;)o[s++]=arguments[s];return t.nextTick(function(){e.apply(null,o)})}}}:t}).call(this,n("8oxB"))},m2M5:function(e,t,n){"use strict";n.d(t,"b",function(){return v}),n.d(t,"a",function(){return y});var r=n("+3se"),i=n("ub4/"),o=n("Y/Uj"),s=n("gOaY"),a=n("PIxe"),u=n("rf+q"),c=n("ycm9"),l=n("1ZPt"),h=n("WiWG"),f=n("ZTy4"),d=n("5xw/"),p=n("xJys"),g=n("+pXn"),b=n("clF7"),v=[{path:"status",component:h.a,data:{displayName:Object(r.b)("Status"),retailOrder:0}},{path:"radio0",component:a.a,data:{displayName:Object(r.b)("2.4 GHz Radio"),appHideForRetail:!0},canDeactivate:[i.a]},{path:"radio1",component:a.a,data:{displayName:Object(r.b)("5 GHz Radio"),appHideForRetail:!0,hideForSingleRadio:!0},canDeactivate:[i.a]},{path:"radios",component:f.a,data:{displayName:Object(r.b)("WiFi networks"),appHideForPro:!0,retailOrder:10},canDeactivate:[i.a]},{path:"vaps",component:d.a,data:{displayName:Object(r.b)("SSIDs"),appHideForRetail:!0},canDeactivate:[i.a]},{path:"bridge",component:o.a,data:{displayName:Object(r.b)("Bridge"),appHideForRetail:!0},canDeactivate:[i.a]},{path:"radius",component:u.a,data:{displayName:Object(r.b)("RADIUS"),appHideForRetail:!0},canDeactivate:[i.a]},{path:"scanner",component:c.a,data:{displayName:Object(r.b)("Neighbour network"),retailOrder:70}},{path:"wps",component:g.a,data:{displayName:Object(r.b)("WPS"),retailOrder:60},canDeactivate:[i.a]},{path:"wifiSchedule",component:p.a,data:{displayName:Object(r.b)("Schedule"),retailOrder:40},canDeactivate:[i.a]},{path:"ParentalControl",component:b.a,data:{displayName:Object(r.b)("Parental Control"),retailOrder:50},canDeactivate:[i.a]},{path:"son",component:l.a,data:{displayName:Object(r.b)("Mesh WiFi"),retailOrder:30},canDeactivate:[i.a]},{path:"guest",component:s.a,data:{displayName:Object(r.b)("Guest network"),retailOrder:20},canDeactivate:[i.a]}],y=function(){return function(){}}()},mAR0:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("67Y/"),i=n("t/Na"),o=(n("+NEN"),n("jGGy"),function(){function e(e,t,n){this.authService=e,this.ubusService=t,this.http=n}return e.prototype.cancel=function(){return this.ubusService.call({data:[this.authService.getSid(),"system.management.backup","clean",{}]})},e.prototype.checkSession=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","state",{config:"network",section:"lan"}]})},e.prototype.uploadFile=function(e){var t=new i.h("POST","/cgi-bin/data-upload",e,{reportProgress:!0});return t.serializeBody(),this.http.request(t)},e.prototype.restoreBackup=function(){return this.ubusService.call({data:[this.authService.getSid(),"system.management.backup","restore",{}]}).pipe(Object(r.a)(function(e){return e.result[1].code}))},e.prototype.reboot=function(){return this.ubusService.call({data:[this.authService.getSid(),"system.management","reboot",{}]})},e.prototype.reset=function(){return this.ubusService.call({data:[[this.authService.getSid(),"system.management.factorydefault","test",{}],[this.authService.getSid(),"system.management.factorydefault","start",{}]]})},e}())},mChF:function(e,t,n){"use strict";function r(e){return e}n.d(t,"a",function(){return r})},mGPz:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("jGGy");var r=n("dzgT"),i=function(){function e(e,t,n,r){this.templateRef=e,this.viewContainer=t,this.cdr=n,this.authService=r}return e.prototype.ngOnInit=function(){var e=this;this.isLoggedIn$=this.authService.isLoggedInSubject$,this.noForcedPassword$=this.authService.noForcedPassword$,this.subscription=Object(r.a)(this.isLoggedIn$,this.noForcedPassword$).subscribe(function(t){t.some(function(e){return e})?(e.viewContainer.clear(),e.renderTemplate&&e.viewContainer.createEmbeddedView(e.templateRef)):e.renderTemplate?e.viewContainer.clear():e.viewContainer.createEmbeddedView(e.templateRef),e.cdr.detectChanges()})},e.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},e}()},mrSG:function(e,t,n){"use strict";n.d(t,"c",function(){return i}),n.d(t,"a",function(){return o}),n.d(t,"b",function(){return s}),n.d(t,"e",function(){return a}),n.d(t,"d",function(){return u}),n.d(t,"h",function(){return c}),n.d(t,"f",function(){return l}),n.d(t,"g",function(){return h});var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function i(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var o=function(){return(o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function s(e,t,n,r){var i,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(s=(o<3?i(s):o>3?i(t,n,s):i(t,n))||s);return o>3&&s&&Object.defineProperty(t,n,s),s}function a(e,t){return function(n,r){t(n,r,e)}}function u(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function c(e){var t="function"==typeof Symbol&&e[Symbol.iterator],n=0;return t?t.call(e):{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}function l(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(a){i={error:a}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}function h(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(l(arguments[t]));return e}},nMVA:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("XlPw"),i=n("67Y/"),o=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getQueryManagementInterface=function(){return this.ubusService.call({data:[[this.authService.getSid(),"network.interface","dump",{}],[this.authService.getSid(),"uci","get",{config:"vlan"}]]}).pipe(Object(i.a)(function(e){var t,n=e.result[0][1].interface,i=e.result[1][1].values,o="lan",s={};for(var a in i)if(i.hasOwnProperty(a)&&"1"===i[a].management){o=a;break}for(var u=0;u<n.length;++u)if(n[u].interface===o){t=n[u];break}if(null===t)return Object(r.a)(new Error(s));for(s.ipaddr=t["ipv4-address"][0].address,s.proto="static"===t.proto?"static":"dhcp",s.netmask=t["ipv4-address"][0].mask,u=0;u<n.length;++u)if("lan6"===n[u].interface){s.lan6=n[u];break}for(u=0;t.route&&u<t.route.length;++u)if(t.route[u].target=0===Number(t.route[u].mask)){s.gateway=t.route[u].nexthop;break}return s.dns="",t.hasOwnProperty("dns-server")&&(s.dns=0!==t["dns-server"].length?t["dns-server"][0]:""),s}))},e.prototype.updateEthernet=function(e){var t=[];return t.push([this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"MacAddress0"}]),e>1&&t.push([this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"MacAddress1"}]),this.ubusService.call({data:t}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1].value})}))},e.prototype.updateVlans=function(e){var t=[[this.authService.getSid(),"uci","get",{config:"vlan"}],[this.authService.getSid(),"uci","get",{config:"network"}]];return e&&t.push([this.authService.getSid(),"uci","get",{config:"wireless",type:"wifi-iface",match:{mode:"ap"}}]),this.ubusService.call({data:t}).pipe(Object(i.a)(function(e){return e.result.map(function(e){return e[1].values})}))},e}())},nbXG:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(){function e(){if(!localStorage)throw new Error("Current browser does not support Local Storage");this.localStorage=localStorage}return e.prototype.set=function(e,t){this.localStorage[e]=JSON.stringify(t)},e.prototype.get=function(e){var t=null;try{t=JSON.parse(this.localStorage[e])}catch(n){t=this.localStorage[e]||null}return t},e.prototype.remove=function(e){this.localStorage.removeItem(e)},e}()},nkY7:function(e,t,n){"use strict";function r(e){return e&&"function"==typeof e.schedule}n.d(t,"a",function(){return r})},ny24:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("mrSG"),i=n("MGBS"),o=n("zotm");function s(e){return function(t){return t.lift(new a(e))}}var a=function(){function e(e){this.notifier=e}return e.prototype.call=function(e,t){var n=new u(e),r=Object(o.a)(n,this.notifier);return r&&!n.seenValue?(n.add(r),t.subscribe(n)):n},e}(),u=function(e){function t(t){var n=e.call(this,t)||this;return n.seenValue=!1,n}return r.c(t,e),t.prototype.notifyNext=function(e,t,n,r,i){this.seenValue=!0,this.complete()},t.prototype.notifyComplete=function(){},t}(i.a)},p0ib:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("6blF"),i=n("nkY7"),o=n("Zn8D"),s=n("IUTb");function a(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Number.POSITIVE_INFINITY,a=null,u=e[e.length-1];return Object(i.a)(u)?(a=e.pop(),e.length>1&&"number"==typeof e[e.length-1]&&(n=e.pop())):"number"==typeof u&&(n=e.pop()),null===a&&1===e.length&&e[0]instanceof r.a?e[0]:Object(o.a)(n)(Object(s.a)(e,a))}},pMnS:function(e,t,n){"use strict";n.d(t,"a",function(){return u});var r=n("CcnG"),i=n("ZYCi"),o=r.ob({encapsulation:2,styles:[],data:{}});function s(e){return r.Kb(0,[(e()(),r.qb(0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),r.pb(1,212992,null,0,i.q,[i.b,r.P,r.j,[8,null],r.h],null,null)],function(e,t){e(t,1,0)},null)}function a(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"ng-component",[],null,null,null,s,o)),r.pb(1,49152,null,0,i.u,[],null,null)],null,null)}var u=r.mb("ng-component",i.u,a,{},{},[])},pY1j:function(e,t,n){"use strict";var r=n("xZGU").Buffer;function i(){}function o(){}function s(){this.overflowByte=-1}function a(e,t){this.iconv=t}function u(e,t){void 0===(e=e||{}).addBOM&&(e.addBOM=!0),this.encoder=t.iconv.getEncoder("utf-16le",e)}function c(e,t){this.decoder=null,this.initialBytes=[],this.initialBytesLen=0,this.options=e||{},this.iconv=t.iconv}function l(e,t){var n=t||"utf-16le";if(e.length>=2)if(254==e[0]&&255==e[1])n="utf-16be";else if(255==e[0]&&254==e[1])n="utf-16le";else{for(var r=0,i=0,o=Math.min(e.length-e.length%2,64),s=0;s<o;s+=2)0===e[s]&&0!==e[s+1]&&i++,0!==e[s]&&0===e[s+1]&&r++;i>r?n="utf-16be":i<r&&(n="utf-16le")}return n}t.utf16be=i,i.prototype.encoder=o,i.prototype.decoder=s,i.prototype.bomAware=!0,o.prototype.write=function(e){for(var t=r.from(e,"ucs2"),n=0;n<t.length;n+=2){var i=t[n];t[n]=t[n+1],t[n+1]=i}return t},o.prototype.end=function(){},s.prototype.write=function(e){if(0==e.length)return"";var t=r.alloc(e.length+1),n=0,i=0;for(-1!==this.overflowByte&&(t[0]=e[0],t[1]=this.overflowByte,n=1,i=2);n<e.length-1;n+=2,i+=2)t[i]=e[n+1],t[i+1]=e[n];return this.overflowByte=n==e.length-1?e[e.length-1]:-1,t.slice(0,i).toString("ucs2")},s.prototype.end=function(){},t.utf16=a,a.prototype.encoder=u,a.prototype.decoder=c,u.prototype.write=function(e){return this.encoder.write(e)},u.prototype.end=function(){return this.encoder.end()},c.prototype.write=function(e){if(!this.decoder){if(this.initialBytes.push(e),this.initialBytesLen+=e.length,this.initialBytesLen<16)return"";var t=l(e=r.concat(this.initialBytes),this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(t,this.options),this.initialBytes.length=this.initialBytesLen=0}return this.decoder.write(e)},c.prototype.end=function(){if(!this.decoder){var e=r.concat(this.initialBytes),t=l(e,this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(t,this.options);var n=this.decoder.write(e),i=this.decoder.end();return i?n+i:n}return this.decoder.end()}},psW0:function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("mrSG"),i=n("zotm"),o=n("MGBS"),s=n("rPjj"),a=n("67Y/"),u=n("0/uQ");function c(e,t,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),"function"==typeof t?function(r){return r.pipe(c(function(n,r){return Object(u.a)(e(n,r)).pipe(Object(a.a)(function(e,i){return t(n,e,r,i)}))},n))}:("number"==typeof t&&(n=t),function(t){return t.lift(new l(e,n))})}var l=function(){function e(e,t){void 0===t&&(t=Number.POSITIVE_INFINITY),this.project=e,this.concurrent=t}return e.prototype.call=function(e,t){return t.subscribe(new h(e,this.project,this.concurrent))},e}(),h=function(e){function t(t,n,r){void 0===r&&(r=Number.POSITIVE_INFINITY);var i=e.call(this,t)||this;return i.project=n,i.concurrent=r,i.hasCompleted=!1,i.buffer=[],i.active=0,i.index=0,i}return r.c(t,e),t.prototype._next=function(e){this.active<this.concurrent?this._tryNext(e):this.buffer.push(e)},t.prototype._tryNext=function(e){var t,n=this.index++;try{t=this.project(e,n)}catch(r){return void this.destination.error(r)}this.active++,this._innerSub(t,e,n)},t.prototype._innerSub=function(e,t,n){var r=new s.a(this,void 0,void 0);this.destination.add(r),Object(i.a)(this,e,t,n,r)},t.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()},t.prototype.notifyNext=function(e,t,n,r,i){this.destination.next(t)},t.prototype.notifyComplete=function(e){var t=this.buffer;this.remove(e),this.active--,t.length>0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},t}(o.a)},pugT:function(e,t,n){"use strict";var r=n("isby"),i=n("McSo"),o=n("2Bdj"),s=n("Ehmk"),a=n("eihs");function u(e){return Error.call(this),this.message=e?e.length+" errors occurred during unsubscription:\n"+e.map(function(e,t){return t+1+") "+e.toString()}).join("\n  "):"",this.name="UnsubscriptionError",this.errors=e,this}u.prototype=Object.create(Error.prototype);var c=u;n.d(t,"a",function(){return l});var l=function(){function e(e){this.closed=!1,this._parent=null,this._parents=null,this._subscriptions=null,e&&(this._unsubscribe=e)}var t;return e.prototype.unsubscribe=function(){var e,t=!1;if(!this.closed){var n=this._parent,u=this._parents,l=this._unsubscribe,f=this._subscriptions;this.closed=!0,this._parent=null,this._parents=null,this._subscriptions=null;for(var d=-1,p=u?u.length:0;n;)n.remove(this),n=++d<p&&u[d]||null;if(Object(o.a)(l)&&Object(s.a)(l).call(this)===a.a&&(t=!0,e=e||(a.a.e instanceof c?h(a.a.e.errors):[a.a.e])),Object(r.a)(f))for(d=-1,p=f.length;++d<p;){var g=f[d];if(Object(i.a)(g)&&Object(s.a)(g.unsubscribe).call(g)===a.a){t=!0,e=e||[];var b=a.a.e;b instanceof c?e=e.concat(h(b.errors)):e.push(b)}}if(t)throw new c(e)}},e.prototype.add=function(t){if(!t||t===e.EMPTY)return e.EMPTY;if(t===this)return this;var n=t;switch(typeof t){case"function":n=new e(t);case"object":if(n.closed||"function"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if("function"!=typeof n._addParent){var r=n;(n=new e)._subscriptions=[r]}break;default:throw new Error("unrecognized teardown "+t+" added to Subscription.")}return(this._subscriptions||(this._subscriptions=[])).push(n),n._addParent(this),n},e.prototype.remove=function(e){var t=this._subscriptions;if(t){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}},e.prototype._addParent=function(e){var t=this._parent,n=this._parents;t&&t!==e?n?-1===n.indexOf(e)&&n.push(e):this._parents=[e]:this._parent=e},e.EMPTY=((t=new e).closed=!0,t),e}();function h(e){return e.reduce(function(e,t){return e.concat(t instanceof c?t.errors:t)},[])}},q0RN:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=new(function(){function e(){}return e.prototype.position=function(e,t){var n;void 0===t&&(t=!0);var r={width:0,height:0,top:0,bottom:0,left:0,right:0};if("fixed"===this.getStyle(e,"position")){var i=e.getBoundingClientRect();n={width:i.width,height:i.height,top:i.top,bottom:i.bottom,left:i.left,right:i.right}}else{var o=this.offsetParent(e);n=this.offset(e,!1),o!==document.documentElement&&(r=this.offset(o,!1)),r.top+=o.clientTop,r.left+=o.clientLeft}return n.top-=r.top,n.bottom-=r.top,n.left-=r.left,n.right-=r.left,t&&(n.top=Math.round(n.top),n.bottom=Math.round(n.bottom),n.left=Math.round(n.left),n.right=Math.round(n.right)),n},e.prototype.offset=function(e,t){void 0===t&&(t=!0);var n=e.getBoundingClientRect(),r=window.pageYOffset-document.documentElement.clientTop,i=window.pageXOffset-document.documentElement.clientLeft,o={height:n.height||e.offsetHeight,width:n.width||e.offsetWidth,top:n.top+r,bottom:n.bottom+r,left:n.left+i,right:n.right+i};return t&&(o.height=Math.round(o.height),o.width=Math.round(o.width),o.top=Math.round(o.top),o.bottom=Math.round(o.bottom),o.left=Math.round(o.left),o.right=Math.round(o.right)),o},e.prototype.positionElements=function(e,t,n,r){var i=r?this.offset(e,!1):this.position(e,!1),o=this.getAllStyles(t),s={left:i.left,center:i.left+i.width/2-t.offsetWidth/2,right:i.left+i.width},a={top:i.top,center:i.top+i.height/2-t.offsetHeight/2,bottom:i.top+i.height},u=t.getBoundingClientRect(),c=n.split(" ")[0]||"top",l=n.split(" ")[1]||"center",h={height:u.height||t.offsetHeight,width:u.width||t.offsetWidth,top:0,bottom:u.height||t.offsetHeight,left:0,right:u.width||t.offsetWidth};if("auto"===c){var f=this.autoPosition(h,i,t,l);f||(f=this.autoPosition(h,i,t)),f&&(c=f),t.classList.add(c)}switch(c){case"top":h.top=i.top-(t.offsetHeight+parseFloat(o.marginBottom)),h.bottom+=i.top-t.offsetHeight,h.left=s[l],h.right+=s[l];break;case"bottom":h.top=a[c],h.bottom+=a[c],h.left=s[l],h.right+=s[l];break;case"left":h.top=a[l],h.bottom+=a[l],h.left=i.left-(t.offsetWidth+parseFloat(o.marginRight)),h.right+=i.left-t.offsetWidth;break;case"right":h.top=a[l],h.bottom+=a[l],h.left=s[c],h.right+=s[c]}return h.top=Math.round(h.top),h.bottom=Math.round(h.bottom),h.left=Math.round(h.left),h.right=Math.round(h.right),h},e.prototype.autoPosition=function(e,t,n,r){return(!r||"right"===r)&&e.left+t.left-n.offsetWidth<0?"right":(!r||"top"===r)&&e.bottom+t.bottom+n.offsetHeight>window.innerHeight?"top":(!r||"bottom"===r)&&e.top+t.top-n.offsetHeight<0?"bottom":(!r||"left"===r)&&e.right+t.right+n.offsetWidth>window.innerWidth?"left":null},e.prototype.getAllStyles=function(e){return window.getComputedStyle(e)},e.prototype.getStyle=function(e,t){return this.getAllStyles(e)[t]},e.prototype.isStaticPositioned=function(e){return"static"===(this.getStyle(e,"position")||"static")},e.prototype.offsetParent=function(e){for(var t=e.offsetParent||document.documentElement;t&&t!==document.documentElement&&this.isStaticPositioned(t);)t=t.offsetParent;return t||document.documentElement},e}());function i(e,t,n,i){var o=r.positionElements(e,t,n,i);t.style.top=o.top+"px",t.style.left=o.left+"px"}},qDEp:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("K9Ia"),i=n("ny24"),o=(n("Obbf"),n("CPDd"),n("t2rx"),n("+3se")),s=(n("dcxs"),function(){function e(e,t,n,i,o){this.managementService=e,this.pageLoadingService=t,this.addressCheckService=n,this.notificationService=i,this.translate=o,this.ngUnsubscribe=new r.a,this.servers=[],this.pageLoadingService.register(["timeServerViewInit","timeServersLoaded"])}return e.prototype.ngOnInit=function(){this.addNewServerMode=!1,this.editServerMode=!1,this.getTimeServers()},e.prototype.ngAfterViewInit=function(){this.pageLoadingService.ready("timeServerViewInit")},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.getTimeServers=function(){var e=this;this.managementService.getTimeServers().pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){var n=t.server||[],r=0;e.pageLoadingService.ready("timeServersLoaded"),e.servers=n.map(e.addressCheckService.toUnicode).map(function(e){return{id:r++,name:e}}),e.enabled=parseInt(t.enabled,10),e.enableServer=parseInt(t.enable_server,10)})},e.prototype.delete=function(e){var t=this.servers.findIndex(function(t){return t.id==e});this.servers.splice(t,1),this.markAsPristine(),this.editServerMode=!1,this.save()},e.prototype.add=function(){for(var e=0;e<this.servers.length;e++)if(this.servers[e].name.toUpperCase()===this.newServer.toUpperCase())return this.notificationService.error(Object(o.b)("This server already exists.")),!1;return this.servers.push({name:this.newServer,id:this.servers.length}),delete this.newServer,this.addNewServerMode=!1,!0},e.prototype.addNewServer=function(){this.fakeServers=Object(o.d)(this.servers),this.addNewServerMode=!0,this.markAsDirty()},e.prototype.editRow=function(e){this.fakeServers=Object(o.d)(this.servers),this.editServerMode=!0,this.currentRowIndex=e,this.markAsDirty()},e.prototype.save=function(){var e=this;this.addNewServerMode&&this.add();var t={server:this.servers.map(function(e){return e.name}).map(this.addressCheckService.toASCII),enabled:this.enabled,enable_server:this.enableServer};this.managementService.saveTimeServer(t).subscribe(function(t){e.translate.get(Object(o.b)("NTP configuration successfully saved.")).subscribe(function(t){return e.notificationService.success(t)}),e.servers.map(function(e){return e.showRow=!1}),e.fakeServers=Object(o.d)(e.servers),e.editServerMode=!1,e.addNewServerMode=!1,e.markAsPristine()})},e.prototype.checkKey=function(e){13==e.keyCode&&""!==e.target.value?("new_server"==e.target.name&&this.add(),"edit_server"==e.target.name&&this.save()):27==e.keyCode&&this.cancel()},e.prototype.cancel=function(){this.servers=Object(o.d)(this.fakeServers),this.markAsPristine(),this.servers.map(function(e){return e.showRow=!1}),this.addNewServerMode=!1,this.editServerMode=!1,this.newServer=""},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}())},qEVT:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("Vx+w"),i=(n("jGGy"),n("Obbf"),n("t2rx"),n("+3se")),o=(n("dcxs"),function(){function e(e,t,n,i,o,s){this.notification=e,this.authService=t,this.managementService=n,this.route=i,this.pageLoadingService=o,this.router=s,this.noForcedPassword$=this.authService.noForcedPassword$,this.noForcedPassword=r.a.delos.noForcedPassword,this.newPassword="",this.pwStrength=r.a.system.management.pwStrength,this.pwMinLength=r.a.system.management.pwMinLength,this.confirmNewPassword="",this.pageLoadingService.register(["changePasswordViewInit"])}return e.prototype.ngOnInit=function(){this.sid=this.route.snapshot.params.sid},e.prototype.ngAfterViewInit=function(){this.pageLoadingService.ready("changePasswordViewInit")},e.prototype.save=function(){var e=this;this.oldPassword||(this.oldPassword=""),this.managementService.changePassword(this.newPassword,this.oldPassword,this.sid).subscribe(function(t){0!=t.result[0]?(e.notification.error(Object(i.b)("Old password was incorrect!")),e.delos.form.controls.oldpassword.reset(),e.delos.form.controls.oldpassword.setErrors({incorrect:!0})):(e.notification.success(Object(i.b)("You've successfully changed your password.")),e.markAsPristine(),e.authService.isLoggedInSubject$.next(!0),e.sid&&(e.authService.setSid(e.sid),e.router.navigateByUrl("/")),r.a.delos.noForcedPassword&&(e.authService.noForcedPasswordSet(!1),0===e.newPassword.length&&e.authService.noForcedPasswordSet(!0)),e.delos.form.reset()),e.oldPassword="",e.newPassword="",e.confirmNewPassword=""})},e.prototype.handleKeyboardEvent=function(e){e=e||window.event;var t=String.fromCharCode(e.which);this.capslockOn=!(!e.getModifierState||!e.getModifierState("CapsLock"))||t.toUpperCase()===t&&t.toLowerCase()!==t&&!e.shiftKey},e.prototype.cancel=function(){this.delos.form.reset(),this.newPassword="",this.confirmNewPassword="",this.markAsPristine()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}())},qKjf:function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n("jGGy"),n("+NEN");var r=function(){function e(e,t){this.ubusService=e,this.authService=t}return e.prototype.start=function(e){return this.ubusService.call({data:[this.authService.getSid(),"buzzer","start",{time:e}]})},e.prototype.stop=function(){return this.ubusService.call({data:[this.authService.getSid(),"buzzer","stop",{}]})},e}()},rPjj:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("mrSG"),i=function(e){function t(t,n,r){var i=e.call(this)||this;return i.parent=t,i.outerValue=n,i.outerIndex=r,i.index=0,i}return r.c(t,e),t.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)},t.prototype._error=function(e){this.parent.notifyError(e,this),this.unsubscribe()},t.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},t}(n("FFOo").a)},rPnE:function(e,t,n){"use strict";(function(t){var r=n("xZGU").Buffer,i=n("uCqB"),o=e.exports;o.encodings=null,o.defaultCharUnicode="\ufffd",o.defaultCharSingleByte="?",o.encode=function(e,t,n){e=""+(e||"");var i=o.getEncoder(t,n),s=i.write(e),a=i.end();return a&&a.length>0?r.concat([s,a]):s},o.decode=function(e,t,n){"string"==typeof e&&(o.skipDecodeWarning||(console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding"),o.skipDecodeWarning=!0),e=r.from(""+(e||""),"binary"));var i=o.getDecoder(t,n),s=i.write(e),a=i.end();return a?s+a:s},o.encodingExists=function(e){try{return o.getCodec(e),!0}catch(t){return!1}},o.toEncoding=o.encode,o.fromEncoding=o.decode,o._codecDataCache={},o.getCodec=function(e){o.encodings||(o.encodings=n("lLtp"));for(var t=o._canonicalizeEncoding(e),r={};;){var i=o._codecDataCache[t];if(i)return i;var s=o.encodings[t];switch(typeof s){case"string":t=s;break;case"object":for(var a in s)r[a]=s[a];r.encodingName||(r.encodingName=t),t=s.type;break;case"function":return r.encodingName||(r.encodingName=t),i=new s(r,o),o._codecDataCache[r.encodingName]=i,i;default:throw new Error("Encoding not recognized: '"+e+"' (searched as: '"+t+"')")}}},o._canonicalizeEncoding=function(e){return(""+e).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g,"")},o.getEncoder=function(e,t){var n=o.getCodec(e),r=new n.encoder(t,n);return n.bomAware&&t&&t.addBOM&&(r=new i.PrependBOM(r,t)),r},o.getDecoder=function(e,t){var n=o.getCodec(e),r=new n.decoder(t,n);return!n.bomAware||t&&!1===t.stripBOM||(r=new i.StripBOM(r,t)),r};var s=void 0!==t&&t.versions&&t.versions.node;if(s){var a=s.split(".").map(Number);(a[0]>0||a[1]>=10)&&n(1)(o),n(2)(o)}}).call(this,n("8oxB"))},rXFu:function(e,t,n){"use strict";(function(t,r){var i=n("lm0R");e.exports=m;var o,s=n("2Nt0");m.ReadableState=y,n("+qE3");var a=function(e,t){return e.listeners(t).length},u=n("QpuX"),c=n("hwdV").Buffer,l=t.Uint8Array||function(){},h=n("Onz0");h.inherits=n("P7XM");var f=n(3),d=void 0;d=f&&f.debuglog?f.debuglog("stream"):function(){};var p,g=n("Xhqo"),b=n("RoFp");h.inherits(m,u);var v=["error","close","destroy","pause","resume"];function y(e,t){var r=t instanceof(o=o||n("sZro"));this.objectMode=!!(e=e||{}).objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,s=e.readableHighWaterMark;this.highWaterMark=i||0===i?i:r&&(s||0===s)?s:this.objectMode?16:16384,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=n("fXKp").StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function m(e){if(o=o||n("sZro"),!(this instanceof m))return new m(e);this._readableState=new y(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),u.call(this)}function w(e,t,n,r,i){var o,s=e._readableState;return null===t?(s.reading=!1,function(e,t){if(!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,C(e)}}(e,s)):(i||(o=function(e,t){var n,r;return c.isBuffer(r=t)||r instanceof l||"string"==typeof t||void 0===t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}(s,t)),o?e.emit("error",o):s.objectMode||t&&t.length>0?("string"==typeof t||s.objectMode||Object.getPrototypeOf(t)===c.prototype||(t=function(e){return c.from(e)}(t)),r?s.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):_(e,s,t,!0):s.ended?e.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!n?(t=s.decoder.write(t),s.objectMode||0!==t.length?_(e,s,t,!1):k(e,s)):_(e,s,t,!1))):r||(s.reading=!1)),function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(s)}function _(e,t,n,r){t.flowing&&0===t.length&&!t.sync?(e.emit("data",n),e.read(0)):(t.length+=t.objectMode?1:n.length,r?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&C(e)),k(e,t)}Object.defineProperty(m.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),m.prototype.destroy=b.destroy,m.prototype._undestroy=b.undestroy,m.prototype._destroy=function(e,t){this.push(null),t(e)},m.prototype.push=function(e,t){var n,r=this._readableState;return r.objectMode?n=!0:"string"==typeof e&&((t=t||r.defaultEncoding)!==r.encoding&&(e=c.from(e,t),t=""),n=!0),w(this,e,t,!1,n)},m.prototype.unshift=function(e){return w(this,e,null,!0,!1)},m.prototype.isPaused=function(){return!1===this._readableState.flowing},m.prototype.setEncoding=function(e){return p||(p=n("fXKp").StringDecoder),this._readableState.decoder=new p(e),this._readableState.encoding=e,this};var S=8388608;function O(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=S?e=S:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function C(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(d("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(j,e):j(e))}function j(e){d("emit readable"),e.emit("readable"),T(e)}function k(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(E,e,t))}function E(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(d("maybeReadMore read 0"),e.read(0),n!==t.length);)n=t.length;t.readingMore=!1}function x(e){d("readable nexttick read 0"),e.read(0)}function P(e,t){t.reading||(d("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),T(e),t.flowing&&!t.reading&&e.read(0)}function T(e){var t=e._readableState;for(d("flow",t.flowing);t.flowing&&null!==e.read(););}function A(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var r;return e<t.head.data.length?(r=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):r=e===t.head.data.length?t.shift():n?function(e,t){var n=t.head,r=1,i=n.data;for(e-=i.length;n=n.next;){var o=n.data,s=e>o.length?o.length:e;if(i+=s===o.length?o:o.slice(0,e),0==(e-=s)){s===o.length?(++r,t.head=n.next?n.next:t.tail=null):(t.head=n,n.data=o.slice(s));break}++r}return t.length-=r,i}(e,t):function(e,t){var n=c.allocUnsafe(e),r=t.head,i=1;for(r.data.copy(n),e-=r.data.length;r=r.next;){var o=r.data,s=e>o.length?o.length:e;if(o.copy(n,n.length-e,0,s),0==(e-=s)){s===o.length?(++i,t.head=r.next?r.next:t.tail=null):(t.head=r,r.data=o.slice(s));break}++i}return t.length-=i,n}(e,t),r}(e,t.buffer,t.decoder),n);var n}function I(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(M,t,e))}function M(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function N(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}m.prototype.read=function(e){d("read",e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return d("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?I(this):C(this),null;if(0===(e=O(e,t))&&t.ended)return 0===t.length&&I(this),null;var r,i=t.needReadable;return d("need readable",i),(0===t.length||t.length-e<t.highWaterMark)&&d("length less than watermark",i=!0),t.ended||t.reading?d("reading or ended",i=!1):i&&(d("do read"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=O(n,t))),null===(r=e>0?A(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&I(this)),null!==r&&this.emit("data",r),r},m.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},m.prototype.pipe=function(e,t){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,d("pipe count=%d opts=%j",o.pipesCount,t);var u=t&&!1===t.end||e===r.stdout||e===r.stderr?y:c;function c(){d("onend"),e.end()}o.endEmitted?i.nextTick(u):n.once("end",u),e.on("unpipe",function t(r,i){d("onunpipe"),r===n&&i&&!1===i.hasUnpiped&&(i.hasUnpiped=!0,d("cleanup"),e.removeListener("close",b),e.removeListener("finish",v),e.removeListener("drain",l),e.removeListener("error",g),e.removeListener("unpipe",t),n.removeListener("end",c),n.removeListener("end",y),n.removeListener("data",p),h=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||l())});var l=function(e){return function(){var t=e._readableState;d("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&a(e,"data")&&(t.flowing=!0,T(e))}}(n);e.on("drain",l);var h=!1,f=!1;function p(t){d("ondata"),f=!1,!1!==e.write(t)||f||((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==N(o.pipes,e))&&!h&&(d("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,f=!0),n.pause())}function g(t){d("onerror",t),y(),e.removeListener("error",g),0===a(e,"error")&&e.emit("error",t)}function b(){e.removeListener("finish",v),y()}function v(){d("onfinish"),e.removeListener("close",b),y()}function y(){d("unpipe"),n.unpipe(e)}return n.on("data",p),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener("error",n);e._events&&e._events.error?s(e._events.error)?e._events.error.unshift(n):e._events.error=[n,e._events.error]:e.on("error",n)}(e,0,g),e.once("close",b),e.once("finish",v),e.emit("pipe",n),o.flowing||(d("pipe resume"),n.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n),this);if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o<i;o++)r[o].emit("unpipe",this,n);return this}var s=N(t.pipes,e);return-1===s?this:(t.pipes.splice(s,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this,n),this)},m.prototype.addListener=m.prototype.on=function(e,t){var n=u.prototype.on.call(this,e,t);if("data"===e)!1!==this._readableState.flowing&&this.resume();else if("readable"===e){var r=this._readableState;r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.emittedReadable=!1,r.reading?r.length&&C(this):i.nextTick(x,this))}return n},m.prototype.resume=function(){var e=this._readableState;return e.flowing||(d("resume"),e.flowing=!0,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,i.nextTick(P,e,t))}(this,e)),this},m.prototype.pause=function(){return d("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(d("pause"),this._readableState.flowing=!1,this.emit("pause")),this},m.prototype.wrap=function(e){var t=this,n=this._readableState,r=!1;for(var i in e.on("end",function(){if(d("wrapped end"),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)}),e.on("data",function(i){d("wrapped data"),n.decoder&&(i=n.decoder.write(i)),n.objectMode&&null==i||(n.objectMode||i&&i.length)&&(t.push(i)||(r=!0,e.pause()))}),e)void 0===this[i]&&"function"==typeof e[i]&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var o=0;o<v.length;o++)e.on(v[o],this.emit.bind(this,v[o]));return this._read=function(t){d("wrapped _read",t),r&&(r=!1,e.resume())},this},Object.defineProperty(m.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),m._fromList=A}).call(this,n("yLpj"),n("8oxB"))},"rf+q":function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("Obbf"),n("HYbQ"),n("UVPe");var r=n("+3se"),i=function(){function e(e,t,n){this.spinner=e,this.notification=t,this.radiusService=n,this.digitsPattern=/^[0-9]*$/,this.authsecretPattern=/^[a-zA-Z0-9 !&quot;#$%&&#39;()*+,-.\/:;<=>?@[\]^_`{|}~]+$/,this.acctsecretPattern=/^[a-zA-Z0-9 !&quot;#$%&&#39;()*+,-.\/:;<=>?@[\]^_`{|}~]+$/,this.authSecretInputType="password",this.acctSecretInputType="password",this.radius={},this.radiusVaps=[]}return e.prototype.ngOnInit=function(){this.getRadius()},e.prototype.getRadius=function(){var e=this;this.radiusVapsDisabled=!1,this.radiusVapsUpdated=!1,this.radiusService.getRadius().subscribe(function(t){var n=t.slice(),i=n[0],o=n[1];for(var s in i)if(i.hasOwnProperty(s)){var a=i[s];e.oldRadius=a,e.radius.auth_server=a.auth_server,e.radius.auth_port=Number(a.auth_port),e.radius.auth_secret=a.auth_secret,e.radius.acct_server=a.acct_server,e.radius.acct_port=Number(a.acct_port),e.radius.acct_secret=a.acct_secret,e.radius.profile_name=a.profile_name}for(var s in o)if(o.hasOwnProperty(s)){var u=o[s];if("wpa2"==u.encryption){for(var c in u)u.hasOwnProperty(c)&&"."==c[0]&&".name"!=c&&delete u[c];e.radiusVaps.push(u)}}e.spinner.hide(),e.fakeRadius=Object(r.d)(e.radius)})},e.prototype.save=function(){var e=this;this.radiusVapsDisabled=!1,this.radiusVapsUpdated=!1;var t=this.radiusConfigModified(this.radius,this.oldRadius);this.radiusService.save(this.radius,this.radiusVaps,this.radiusVapsUpdated,this.radiusVapsDisabled,t).subscribe(function(t){e.radius.auth_server&&e.radius.auth_port&&e.radius.auth_secret?e.notification.success(Object(r.b)("RADIUS configuration applied successfully")):e.notification.warn(Object(r.b)("RADIUS configuration is incomplete")),t.radiusVapsDisabled?e.notification.warn(Object(r.b)("Some SSIDs are disabled due to deleted or incomplete RADIUS authentication Server configuration.")):t.radiusVapsUpdated&&e.notification.info(Object(r.b)("Some SSIDs are updated to new RADIUS configuration")),e.fakeRadius=Object(r.d)(e.radius),e.cleanupForm()})},e.prototype.toggleAuthPasswordVisibility=function(){this.authSecretInputType="password"===this.authSecretInputType?"text":"password"},e.prototype.toggleAcctPasswordVisibility=function(){this.acctSecretInputType="password"===this.acctSecretInputType?"text":"password"},e.prototype.radiusConfigModified=function(e,t){return e.auth_server!=t.auth_server||e.auth_port!=t.auth_port||e.auth_secret!=t.auth_secret||e.acct_server!=t.acct_server||e.acct_port!=t.acct_port||e.acct_secret!=t.acct_secret},e.prototype.cancel=function(){this.radius=Object(r.d)(this.fakeRadius),this.cleanupForm()},e.prototype.cleanupForm=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity(),this.delos.form.markAsUntouched()},e.prototype.onlyDecimalNumberKey=function(e){var t=e.which?e.which:e.keyCode;return!(46!=t&&t>31&&(t<48||t>57))},e}()},sZro:function(e,t,n){"use strict";var r=n("lm0R"),i=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=h;var o=n("Onz0");o.inherits=n("P7XM");var s=n("rXFu"),a=n("3BRs");o.inherits(h,s);for(var u=i(a.prototype),c=0;c<u.length;c++){var l=u[c];h.prototype[l]||(h.prototype[l]=a.prototype[l])}function h(e){if(!(this instanceof h))return new h(e);s.call(this,e),a.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",f)}function f(){this.allowHalfOpen||this._writableState.ended||r.nextTick(d,this)}function d(e){e.end()}Object.defineProperty(h.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(h.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),h.prototype._destroy=function(e,t){this.push(null),this.end(),r.nextTick(t,e)}},st5l:function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n("t/Na"),i=(n("H5ub"),n("K9Ia")),o=n("ny24"),s=n("+3se"),a=n("Vx+w"),u=(n("jGGy"),n("ClyA")),c=(n("yeMH"),n("Obbf"),n("UVPe"),n("mAR0"),function(){function e(e,t,n,r,o,a,u,c){this.spinner=e,this.authService=t,this.modalService=n,this.translate=r,this.router=o,this.cdr=a,this.notification=u,this.configurationService=c,this.ngUnsubscribe=new i.a,this.step="init",this.cancelled=!1,this.confFile=Object(s.b)("No file selected.")}return e.prototype.ngOnInit=function(){this.spinner.hide()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.waitPingComponent&&this.waitPingComponent.ngUnsubscribe.next(!1),this.bsModalRef&&this.bsModalRef.hide()},e.prototype.cancel=function(){this.step="init",this.configurationService.cancel().subscribe(function(){}),this.cancelled=!0,this.cdr.detectChanges(),this.delos.form.markAsPristine(),this.delos.form.markAsUntouched()},e.prototype.setSession=function(){this.sessionid=this.authService.getSid()},e.prototype.onFileSelected=function(e){this.files=e.target.files,this.confFile=e.target.value,this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.uploadFile=function(){var e=this;if(this.cancelled=!1,null!=this.files){if(!this.files[0])return this.files=null,void(this.file=null);this.file=this.files[0];var t=a.a.system.config.restore.maxSize;if(this.file.size>t)return this.translate.get("Configuration file too large (maximum {maxSize} bytes)!",{maxSize:t}).subscribe(function(t){e.notification.error(t)}),void this.cancel();this.step="session-check",this.progress=0,this.configurationService.checkSession().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){if(!e.cancelled){e.step="upload";var n=new FormData;n.append("sessionid",e.authService.getSid()),n.append("filename","/tmp/backup.tar.gz"),n.append("filedata",e.file,"/tmp/backup.tar.gz"),e.configurationService.uploadFile(n).pipe(Object(o.a)(e.ngUnsubscribe)).subscribe(function(t){if(t.type===r.f.UploadProgress){var n=Math.round(100*t.loaded/t.total);e.progress=n}else t instanceof r.i&&e.onFileUploaded()})}})}},e.prototype.onFileUploaded=function(){var e=this;this.cancelled||(this.step="wait",this.configurationService.restoreBackup().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){if(0!==t)return e.notification.error(Object(s.b)("The selected configuration file is not valid, please select a configuration file valid for this device.")),void e.cancel();e.configurationService.reboot().pipe(Object(o.a)(e.ngUnsubscribe)).subscribe(function(){e.waitPingComponent.wait("system.config.restore",a.a.system.config.restore.waitPing,function(){e.notification.success(Object(s.b)("Configuration successfully restored!")),e.cancel()})})}))},e.prototype.reset=function(){var e=this;this.bsModalRef=this.modalService.show(u.a),this.bsModalRef.content.title=Object(s.b)("Reset device to factory defaults?"),this.bsModalRef.content.bodyText=Object(s.b)("Do you really want to reset the device to factory defaults? The device will be rebooted during the reset."),this.bsModalRef.content.actionButtonText=Object(s.b)("Reset"),this.bsModalRef.content.closeButtonText=Object(s.b)("Cancel"),this.bsModalRef.content.ok=function(){e.step="wait",e.configurationService.reset().pipe(Object(o.a)(e.ngUnsubscribe)).subscribe(function(){e.authService.deleteSid(),e.waitPingComponent.wait("system.reboot",a.a.system.factorydefault.waitPing,function(){e.notification.success(Object(s.b)("Device rebooted.  Please login again!"),{keepAfterRouteChange:!0}),setTimeout(function(){e.router.navigateByUrl("/login")},5e3)})})}},e.prototype.reboot=function(){var e=this;this.bsModalRef=this.modalService.show(u.a),this.bsModalRef.content.title=Object(s.b)("Reboot device?"),this.bsModalRef.content.actionButtonText=Object(s.b)("Reboot"),this.bsModalRef.content.closeButtonText=Object(s.b)("Cancel"),this.bsModalRef.content.bodyText=Object(s.b)("Do you really want to restart the device?"),this.bsModalRef.content.ok=function(){e.step="wait",e.configurationService.reboot().pipe(Object(o.a)(e.ngUnsubscribe)).subscribe(function(){e.authService.deleteSid(),e.waitPingComponent.wait("system.reboot",a.a.system.reboot.waitPing,function(){e.notification.success(Object(s.b)("Device rebooted.  Please login again!")),setTimeout(function(){e.authService.relogIn()},5e3)})})}},e}())},st81:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("CcnG"),i=function(){function e(){this.ngModelChange=new r.m}return e.prototype.onInputChange=function(e){this.value=e.target.value.toUpperCase(),this.ngModelChange.emit(this.value)},e}()},sv2S:function(e){e.exports=[["0","\0",127,"\u20ac"],["8140","\u4e02\u4e04\u4e05\u4e06\u4e0f\u4e12\u4e17\u4e1f\u4e20\u4e21\u4e23\u4e26\u4e29\u4e2e\u4e2f\u4e31\u4e33\u4e35\u4e37\u4e3c\u4e40\u4e41\u4e42\u4e44\u4e46\u4e4a\u4e51\u4e55\u4e57\u4e5a\u4e5b\u4e62\u4e63\u4e64\u4e65\u4e67\u4e68\u4e6a",5,"\u4e72\u4e74",9,"\u4e7f",6,"\u4e87\u4e8a"],["8180","\u4e90\u4e96\u4e97\u4e99\u4e9c\u4e9d\u4e9e\u4ea3\u4eaa\u4eaf\u4eb0\u4eb1\u4eb4\u4eb6\u4eb7\u4eb8\u4eb9\u4ebc\u4ebd\u4ebe\u4ec8\u4ecc\u4ecf\u4ed0\u4ed2\u4eda\u4edb\u4edc\u4ee0\u4ee2\u4ee6\u4ee7\u4ee9\u4eed\u4eee\u4eef\u4ef1\u4ef4\u4ef8\u4ef9\u4efa\u4efc\u4efe\u4f00\u4f02",6,"\u4f0b\u4f0c\u4f12",4,"\u4f1c\u4f1d\u4f21\u4f23\u4f28\u4f29\u4f2c\u4f2d\u4f2e\u4f31\u4f33\u4f35\u4f37\u4f39\u4f3b\u4f3e",4,"\u4f44\u4f45\u4f47",5,"\u4f52\u4f54\u4f56\u4f61\u4f62\u4f66\u4f68\u4f6a\u4f6b\u4f6d\u4f6e\u4f71\u4f72\u4f75\u4f77\u4f78\u4f79\u4f7a\u4f7d\u4f80\u4f81\u4f82\u4f85\u4f86\u4f87\u4f8a\u4f8c\u4f8e\u4f90\u4f92\u4f93\u4f95\u4f96\u4f98\u4f99\u4f9a\u4f9c\u4f9e\u4f9f\u4fa1\u4fa2"],["8240","\u4fa4\u4fab\u4fad\u4fb0",4,"\u4fb6",8,"\u4fc0\u4fc1\u4fc2\u4fc6\u4fc7\u4fc8\u4fc9\u4fcb\u4fcc\u4fcd\u4fd2",4,"\u4fd9\u4fdb\u4fe0\u4fe2\u4fe4\u4fe5\u4fe7\u4feb\u4fec\u4ff0\u4ff2\u4ff4\u4ff5\u4ff6\u4ff7\u4ff9\u4ffb\u4ffc\u4ffd\u4fff",11],["8280","\u500b\u500e\u5010\u5011\u5013\u5015\u5016\u5017\u501b\u501d\u501e\u5020\u5022\u5023\u5024\u5027\u502b\u502f",10,"\u503b\u503d\u503f\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504a\u504b\u504d\u5050",4,"\u5056\u5057\u5058\u5059\u505b\u505d",7,"\u5066",5,"\u506d",8,"\u5078\u5079\u507a\u507c\u507d\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508a\u508b\u508c\u508e",20,"\u50a4\u50a6\u50aa\u50ab\u50ad",4,"\u50b3",6,"\u50bc"],["8340","\u50bd",17,"\u50d0",5,"\u50d7\u50d8\u50d9\u50db",10,"\u50e8\u50e9\u50ea\u50eb\u50ef\u50f0\u50f1\u50f2\u50f4\u50f6",4,"\u50fc",9,"\u5108"],["8380","\u5109\u510a\u510c",5,"\u5113",13,"\u5122",28,"\u5142\u5147\u514a\u514c\u514e\u514f\u5150\u5152\u5153\u5157\u5158\u5159\u515b\u515d",4,"\u5163\u5164\u5166\u5167\u5169\u516a\u516f\u5172\u517a\u517e\u517f\u5183\u5184\u5186\u5187\u518a\u518b\u518e\u518f\u5190\u5191\u5193\u5194\u5198\u519a\u519d\u519e\u519f\u51a1\u51a3\u51a6",4,"\u51ad\u51ae\u51b4\u51b8\u51b9\u51ba\u51be\u51bf\u51c1\u51c2\u51c3\u51c5\u51c8\u51ca\u51cd\u51ce\u51d0\u51d2",5],["8440","\u51d8\u51d9\u51da\u51dc\u51de\u51df\u51e2\u51e3\u51e5",5,"\u51ec\u51ee\u51f1\u51f2\u51f4\u51f7\u51fe\u5204\u5205\u5209\u520b\u520c\u520f\u5210\u5213\u5214\u5215\u521c\u521e\u521f\u5221\u5222\u5223\u5225\u5226\u5227\u522a\u522c\u522f\u5231\u5232\u5234\u5235\u523c\u523e\u5244",5,"\u524b\u524e\u524f\u5252\u5253\u5255\u5257\u5258"],["8480","\u5259\u525a\u525b\u525d\u525f\u5260\u5262\u5263\u5264\u5266\u5268\u526b\u526c\u526d\u526e\u5270\u5271\u5273",9,"\u527e\u5280\u5283",4,"\u5289",6,"\u5291\u5292\u5294",6,"\u529c\u52a4\u52a5\u52a6\u52a7\u52ae\u52af\u52b0\u52b4",9,"\u52c0\u52c1\u52c2\u52c4\u52c5\u52c6\u52c8\u52ca\u52cc\u52cd\u52ce\u52cf\u52d1\u52d3\u52d4\u52d5\u52d7\u52d9",5,"\u52e0\u52e1\u52e2\u52e3\u52e5",10,"\u52f1",7,"\u52fb\u52fc\u52fd\u5301\u5302\u5303\u5304\u5307\u5309\u530a\u530b\u530c\u530e"],["8540","\u5311\u5312\u5313\u5314\u5318\u531b\u531c\u531e\u531f\u5322\u5324\u5325\u5327\u5328\u5329\u532b\u532c\u532d\u532f",9,"\u533c\u533d\u5340\u5342\u5344\u5346\u534b\u534c\u534d\u5350\u5354\u5358\u5359\u535b\u535d\u5365\u5368\u536a\u536c\u536d\u5372\u5376\u5379\u537b\u537c\u537d\u537e\u5380\u5381\u5383\u5387\u5388\u538a\u538e\u538f"],["8580","\u5390",4,"\u5396\u5397\u5399\u539b\u539c\u539e\u53a0\u53a1\u53a4\u53a7\u53aa\u53ab\u53ac\u53ad\u53af",6,"\u53b7\u53b8\u53b9\u53ba\u53bc\u53bd\u53be\u53c0\u53c3",4,"\u53ce\u53cf\u53d0\u53d2\u53d3\u53d5\u53da\u53dc\u53dd\u53de\u53e1\u53e2\u53e7\u53f4\u53fa\u53fe\u53ff\u5400\u5402\u5405\u5407\u540b\u5414\u5418\u5419\u541a\u541c\u5422\u5424\u5425\u542a\u5430\u5433\u5436\u5437\u543a\u543d\u543f\u5441\u5442\u5444\u5445\u5447\u5449\u544c\u544d\u544e\u544f\u5451\u545a\u545d",4,"\u5463\u5465\u5467\u5469",7,"\u5474\u5479\u547a\u547e\u547f\u5481\u5483\u5485\u5487\u5488\u5489\u548a\u548d\u5491\u5493\u5497\u5498\u549c\u549e\u549f\u54a0\u54a1"],["8640","\u54a2\u54a5\u54ae\u54b0\u54b2\u54b5\u54b6\u54b7\u54b9\u54ba\u54bc\u54be\u54c3\u54c5\u54ca\u54cb\u54d6\u54d8\u54db\u54e0",4,"\u54eb\u54ec\u54ef\u54f0\u54f1\u54f4",5,"\u54fb\u54fe\u5500\u5502\u5503\u5504\u5505\u5508\u550a",4,"\u5512\u5513\u5515",5,"\u551c\u551d\u551e\u551f\u5521\u5525\u5526"],["8680","\u5528\u5529\u552b\u552d\u5532\u5534\u5535\u5536\u5538\u5539\u553a\u553b\u553d\u5540\u5542\u5545\u5547\u5548\u554b",4,"\u5551\u5552\u5553\u5554\u5557",4,"\u555d\u555e\u555f\u5560\u5562\u5563\u5568\u5569\u556b\u556f",5,"\u5579\u557a\u557d\u557f\u5585\u5586\u558c\u558d\u558e\u5590\u5592\u5593\u5595\u5596\u5597\u559a\u559b\u559e\u55a0",6,"\u55a8",8,"\u55b2\u55b4\u55b6\u55b8\u55ba\u55bc\u55bf",4,"\u55c6\u55c7\u55c8\u55ca\u55cb\u55ce\u55cf\u55d0\u55d5\u55d7",4,"\u55de\u55e0\u55e2\u55e7\u55e9\u55ed\u55ee\u55f0\u55f1\u55f4\u55f6\u55f8",4,"\u55ff\u5602\u5603\u5604\u5605"],["8740","\u5606\u5607\u560a\u560b\u560d\u5610",7,"\u5619\u561a\u561c\u561d\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562a\u562b\u562e\u562f\u5630\u5633\u5635\u5637\u5638\u563a\u563c\u563d\u563e\u5640",11,"\u564f",4,"\u5655\u5656\u565a\u565b\u565d",4],["8780","\u5663\u5665\u5666\u5667\u566d\u566e\u566f\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567a\u567d",7,"\u5687",6,"\u5690\u5691\u5692\u5694",14,"\u56a4",10,"\u56b0",6,"\u56b8\u56b9\u56ba\u56bb\u56bd",12,"\u56cb",8,"\u56d5\u56d6\u56d8\u56d9\u56dc\u56e3\u56e5",5,"\u56ec\u56ee\u56ef\u56f2\u56f3\u56f6\u56f7\u56f8\u56fb\u56fc\u5700\u5701\u5702\u5705\u5707\u570b",6],["8840","\u5712",9,"\u571d\u571e\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572b\u5731\u5732\u5734",4,"\u573c\u573d\u573f\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574b\u5752",4,"\u5758\u5759\u5762\u5763\u5765\u5767\u576c\u576e\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577a\u577d\u577e\u577f\u5780"],["8880","\u5781\u5787\u5788\u5789\u578a\u578d",4,"\u5794",6,"\u579c\u579d\u579e\u579f\u57a5\u57a8\u57aa\u57ac\u57af\u57b0\u57b1\u57b3\u57b5\u57b6\u57b7\u57b9",8,"\u57c4",6,"\u57cc\u57cd\u57d0\u57d1\u57d3\u57d6\u57d7\u57db\u57dc\u57de\u57e1\u57e2\u57e3\u57e5",7,"\u57ee\u57f0\u57f1\u57f2\u57f3\u57f5\u57f6\u57f7\u57fb\u57fc\u57fe\u57ff\u5801\u5803\u5804\u5805\u5808\u5809\u580a\u580c\u580e\u580f\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581a\u581b\u581c\u581d\u581f\u5822\u5823\u5825",4,"\u582b",4,"\u5831\u5832\u5833\u5834\u5836",7],["8940","\u583e",5,"\u5845",6,"\u584e\u584f\u5850\u5852\u5853\u5855\u5856\u5857\u5859",4,"\u585f",5,"\u5866",4,"\u586d",16,"\u587f\u5882\u5884\u5886\u5887\u5888\u588a\u588b\u588c"],["8980","\u588d",4,"\u5894",4,"\u589b\u589c\u589d\u58a0",7,"\u58aa",17,"\u58bd\u58be\u58bf\u58c0\u58c2\u58c3\u58c4\u58c6",10,"\u58d2\u58d3\u58d4\u58d6",13,"\u58e5",5,"\u58ed\u58ef\u58f1\u58f2\u58f4\u58f5\u58f7\u58f8\u58fa",7,"\u5903\u5905\u5906\u5908",4,"\u590e\u5910\u5911\u5912\u5913\u5917\u5918\u591b\u591d\u591e\u5920\u5921\u5922\u5923\u5926\u5928\u592c\u5930\u5932\u5933\u5935\u5936\u593b"],["8a40","\u593d\u593e\u593f\u5940\u5943\u5945\u5946\u594a\u594c\u594d\u5950\u5952\u5953\u5959\u595b",4,"\u5961\u5963\u5964\u5966",12,"\u5975\u5977\u597a\u597b\u597c\u597e\u597f\u5980\u5985\u5989\u598b\u598c\u598e\u598f\u5990\u5991\u5994\u5995\u5998\u599a\u599b\u599c\u599d\u599f\u59a0\u59a1\u59a2\u59a6"],["8a80","\u59a7\u59ac\u59ad\u59b0\u59b1\u59b3",5,"\u59ba\u59bc\u59bd\u59bf",6,"\u59c7\u59c8\u59c9\u59cc\u59cd\u59ce\u59cf\u59d5\u59d6\u59d9\u59db\u59de",4,"\u59e4\u59e6\u59e7\u59e9\u59ea\u59eb\u59ed",11,"\u59fa\u59fc\u59fd\u59fe\u5a00\u5a02\u5a0a\u5a0b\u5a0d\u5a0e\u5a0f\u5a10\u5a12\u5a14\u5a15\u5a16\u5a17\u5a19\u5a1a\u5a1b\u5a1d\u5a1e\u5a21\u5a22\u5a24\u5a26\u5a27\u5a28\u5a2a",6,"\u5a33\u5a35\u5a37",4,"\u5a3d\u5a3e\u5a3f\u5a41",4,"\u5a47\u5a48\u5a4b",9,"\u5a56\u5a57\u5a58\u5a59\u5a5b",5],["8b40","\u5a61\u5a63\u5a64\u5a65\u5a66\u5a68\u5a69\u5a6b",8,"\u5a78\u5a79\u5a7b\u5a7c\u5a7d\u5a7e\u5a80",17,"\u5a93",6,"\u5a9c",13,"\u5aab\u5aac"],["8b80","\u5aad",4,"\u5ab4\u5ab6\u5ab7\u5ab9",4,"\u5abf\u5ac0\u5ac3",5,"\u5aca\u5acb\u5acd",4,"\u5ad3\u5ad5\u5ad7\u5ad9\u5ada\u5adb\u5add\u5ade\u5adf\u5ae2\u5ae4\u5ae5\u5ae7\u5ae8\u5aea\u5aec",4,"\u5af2",22,"\u5b0a",11,"\u5b18",25,"\u5b33\u5b35\u5b36\u5b38",7,"\u5b41",6],["8c40","\u5b48",7,"\u5b52\u5b56\u5b5e\u5b60\u5b61\u5b67\u5b68\u5b6b\u5b6d\u5b6e\u5b6f\u5b72\u5b74\u5b76\u5b77\u5b78\u5b79\u5b7b\u5b7c\u5b7e\u5b7f\u5b82\u5b86\u5b8a\u5b8d\u5b8e\u5b90\u5b91\u5b92\u5b94\u5b96\u5b9f\u5ba7\u5ba8\u5ba9\u5bac\u5bad\u5bae\u5baf\u5bb1\u5bb2\u5bb7\u5bba\u5bbb\u5bbc\u5bc0\u5bc1\u5bc3\u5bc8\u5bc9\u5bca\u5bcb\u5bcd\u5bce\u5bcf"],["8c80","\u5bd1\u5bd4",8,"\u5be0\u5be2\u5be3\u5be6\u5be7\u5be9",4,"\u5bef\u5bf1",6,"\u5bfd\u5bfe\u5c00\u5c02\u5c03\u5c05\u5c07\u5c08\u5c0b\u5c0c\u5c0d\u5c0e\u5c10\u5c12\u5c13\u5c17\u5c19\u5c1b\u5c1e\u5c1f\u5c20\u5c21\u5c23\u5c26\u5c28\u5c29\u5c2a\u5c2b\u5c2d\u5c2e\u5c2f\u5c30\u5c32\u5c33\u5c35\u5c36\u5c37\u5c43\u5c44\u5c46\u5c47\u5c4c\u5c4d\u5c52\u5c53\u5c54\u5c56\u5c57\u5c58\u5c5a\u5c5b\u5c5c\u5c5d\u5c5f\u5c62\u5c64\u5c67",6,"\u5c70\u5c72",6,"\u5c7b\u5c7c\u5c7d\u5c7e\u5c80\u5c83",4,"\u5c89\u5c8a\u5c8b\u5c8e\u5c8f\u5c92\u5c93\u5c95\u5c9d",4,"\u5ca4",4],["8d40","\u5caa\u5cae\u5caf\u5cb0\u5cb2\u5cb4\u5cb6\u5cb9\u5cba\u5cbb\u5cbc\u5cbe\u5cc0\u5cc2\u5cc3\u5cc5",5,"\u5ccc",5,"\u5cd3",5,"\u5cda",6,"\u5ce2\u5ce3\u5ce7\u5ce9\u5ceb\u5cec\u5cee\u5cef\u5cf1",9,"\u5cfc",4],["8d80","\u5d01\u5d04\u5d05\u5d08",5,"\u5d0f",4,"\u5d15\u5d17\u5d18\u5d19\u5d1a\u5d1c\u5d1d\u5d1f",4,"\u5d25\u5d28\u5d2a\u5d2b\u5d2c\u5d2f",4,"\u5d35",7,"\u5d3f",7,"\u5d48\u5d49\u5d4d",10,"\u5d59\u5d5a\u5d5c\u5d5e",10,"\u5d6a\u5d6d\u5d6e\u5d70\u5d71\u5d72\u5d73\u5d75",12,"\u5d83",21,"\u5d9a\u5d9b\u5d9c\u5d9e\u5d9f\u5da0"],["8e40","\u5da1",21,"\u5db8",12,"\u5dc6",6,"\u5dce",12,"\u5ddc\u5ddf\u5de0\u5de3\u5de4\u5dea\u5dec\u5ded"],["8e80","\u5df0\u5df5\u5df6\u5df8",4,"\u5dff\u5e00\u5e04\u5e07\u5e09\u5e0a\u5e0b\u5e0d\u5e0e\u5e12\u5e13\u5e17\u5e1e",7,"\u5e28",4,"\u5e2f\u5e30\u5e32",4,"\u5e39\u5e3a\u5e3e\u5e3f\u5e40\u5e41\u5e43\u5e46",5,"\u5e4d",6,"\u5e56",4,"\u5e5c\u5e5d\u5e5f\u5e60\u5e63",14,"\u5e75\u5e77\u5e79\u5e7e\u5e81\u5e82\u5e83\u5e85\u5e88\u5e89\u5e8c\u5e8d\u5e8e\u5e92\u5e98\u5e9b\u5e9d\u5ea1\u5ea2\u5ea3\u5ea4\u5ea8",4,"\u5eae",4,"\u5eb4\u5eba\u5ebb\u5ebc\u5ebd\u5ebf",6],["8f40","\u5ec6\u5ec7\u5ec8\u5ecb",5,"\u5ed4\u5ed5\u5ed7\u5ed8\u5ed9\u5eda\u5edc",11,"\u5ee9\u5eeb",8,"\u5ef5\u5ef8\u5ef9\u5efb\u5efc\u5efd\u5f05\u5f06\u5f07\u5f09\u5f0c\u5f0d\u5f0e\u5f10\u5f12\u5f14\u5f16\u5f19\u5f1a\u5f1c\u5f1d\u5f1e\u5f21\u5f22\u5f23\u5f24"],["8f80","\u5f28\u5f2b\u5f2c\u5f2e\u5f30\u5f32",6,"\u5f3b\u5f3d\u5f3e\u5f3f\u5f41",14,"\u5f51\u5f54\u5f59\u5f5a\u5f5b\u5f5c\u5f5e\u5f5f\u5f60\u5f63\u5f65\u5f67\u5f68\u5f6b\u5f6e\u5f6f\u5f72\u5f74\u5f75\u5f76\u5f78\u5f7a\u5f7d\u5f7e\u5f7f\u5f83\u5f86\u5f8d\u5f8e\u5f8f\u5f91\u5f93\u5f94\u5f96\u5f9a\u5f9b\u5f9d\u5f9e\u5f9f\u5fa0\u5fa2",5,"\u5fa9\u5fab\u5fac\u5faf",5,"\u5fb6\u5fb8\u5fb9\u5fba\u5fbb\u5fbe",4,"\u5fc7\u5fc8\u5fca\u5fcb\u5fce\u5fd3\u5fd4\u5fd5\u5fda\u5fdb\u5fdc\u5fde\u5fdf\u5fe2\u5fe3\u5fe5\u5fe6\u5fe8\u5fe9\u5fec\u5fef\u5ff0\u5ff2\u5ff3\u5ff4\u5ff6\u5ff7\u5ff9\u5ffa\u5ffc\u6007"],["9040","\u6008\u6009\u600b\u600c\u6010\u6011\u6013\u6017\u6018\u601a\u601e\u601f\u6022\u6023\u6024\u602c\u602d\u602e\u6030",4,"\u6036",4,"\u603d\u603e\u6040\u6044",6,"\u604c\u604e\u604f\u6051\u6053\u6054\u6056\u6057\u6058\u605b\u605c\u605e\u605f\u6060\u6061\u6065\u6066\u606e\u6071\u6072\u6074\u6075\u6077\u607e\u6080"],["9080","\u6081\u6082\u6085\u6086\u6087\u6088\u608a\u608b\u608e\u608f\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609c\u609e\u60a1\u60a2\u60a4\u60a5\u60a7\u60a9\u60aa\u60ae\u60b0\u60b3\u60b5\u60b6\u60b7\u60b9\u60ba\u60bd",7,"\u60c7\u60c8\u60c9\u60cc",4,"\u60d2\u60d3\u60d4\u60d6\u60d7\u60d9\u60db\u60de\u60e1",4,"\u60ea\u60f1\u60f2\u60f5\u60f7\u60f8\u60fb",4,"\u6102\u6103\u6104\u6105\u6107\u610a\u610b\u610c\u6110",4,"\u6116\u6117\u6118\u6119\u611b\u611c\u611d\u611e\u6121\u6122\u6125\u6128\u6129\u612a\u612c",18,"\u6140",6],["9140","\u6147\u6149\u614b\u614d\u614f\u6150\u6152\u6153\u6154\u6156",6,"\u615e\u615f\u6160\u6161\u6163\u6164\u6165\u6166\u6169",6,"\u6171\u6172\u6173\u6174\u6176\u6178",18,"\u618c\u618d\u618f",4,"\u6195"],["9180","\u6196",6,"\u619e",8,"\u61aa\u61ab\u61ad",9,"\u61b8",5,"\u61bf\u61c0\u61c1\u61c3",4,"\u61c9\u61cc",4,"\u61d3\u61d5",16,"\u61e7",13,"\u61f6",8,"\u6200",5,"\u6207\u6209\u6213\u6214\u6219\u621c\u621d\u621e\u6220\u6223\u6226\u6227\u6228\u6229\u622b\u622d\u622f\u6230\u6231\u6232\u6235\u6236\u6238",4,"\u6242\u6244\u6245\u6246\u624a"],["9240","\u624f\u6250\u6255\u6256\u6257\u6259\u625a\u625c",6,"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627a\u627b\u627d\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628b",5,"\u6294\u6299\u629c\u629d\u629e\u62a3\u62a6\u62a7\u62a9\u62aa\u62ad\u62ae\u62af\u62b0\u62b2\u62b3\u62b4\u62b6\u62b7\u62b8\u62ba\u62be\u62c0\u62c1"],["9280","\u62c3\u62cb\u62cf\u62d1\u62d5\u62dd\u62de\u62e0\u62e1\u62e4\u62ea\u62eb\u62f0\u62f2\u62f5\u62f8\u62f9\u62fa\u62fb\u6300\u6303\u6304\u6305\u6306\u630a\u630b\u630c\u630d\u630f\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631c\u6326\u6327\u6329\u632c\u632d\u632e\u6330\u6331\u6333",5,"\u633b\u633c\u633e\u633f\u6340\u6341\u6344\u6347\u6348\u634a\u6351\u6352\u6353\u6354\u6356",7,"\u6360\u6364\u6365\u6366\u6368\u636a\u636b\u636c\u636f\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637c\u637d\u637e\u637f\u6381\u6383\u6384\u6385\u6386\u638b\u638d\u6391\u6393\u6394\u6395\u6397\u6399",6,"\u63a1\u63a4\u63a6\u63ab\u63af\u63b1\u63b2\u63b5\u63b6\u63b9\u63bb\u63bd\u63bf\u63c0"],["9340","\u63c1\u63c2\u63c3\u63c5\u63c7\u63c8\u63ca\u63cb\u63cc\u63d1\u63d3\u63d4\u63d5\u63d7",6,"\u63df\u63e2\u63e4",4,"\u63eb\u63ec\u63ee\u63ef\u63f0\u63f1\u63f3\u63f5\u63f7\u63f9\u63fa\u63fb\u63fc\u63fe\u6403\u6404\u6406",4,"\u640d\u640e\u6411\u6412\u6415",5,"\u641d\u641f\u6422\u6423\u6424"],["9380","\u6425\u6427\u6428\u6429\u642b\u642e",5,"\u6435",4,"\u643b\u643c\u643e\u6440\u6442\u6443\u6449\u644b",6,"\u6453\u6455\u6456\u6457\u6459",4,"\u645f",7,"\u6468\u646a\u646b\u646c\u646e",9,"\u647b",6,"\u6483\u6486\u6488",8,"\u6493\u6494\u6497\u6498\u649a\u649b\u649c\u649d\u649f",4,"\u64a5\u64a6\u64a7\u64a8\u64aa\u64ab\u64af\u64b1\u64b2\u64b3\u64b4\u64b6\u64b9\u64bb\u64bd\u64be\u64bf\u64c1\u64c3\u64c4\u64c6",6,"\u64cf\u64d1\u64d3\u64d4\u64d5\u64d6\u64d9\u64da"],["9440","\u64db\u64dc\u64dd\u64df\u64e0\u64e1\u64e3\u64e5\u64e7",24,"\u6501",7,"\u650a",7,"\u6513",4,"\u6519",8],["9480","\u6522\u6523\u6524\u6526",4,"\u652c\u652d\u6530\u6531\u6532\u6533\u6537\u653a\u653c\u653d\u6540",4,"\u6546\u6547\u654a\u654b\u654d\u654e\u6550\u6552\u6553\u6554\u6557\u6558\u655a\u655c\u655f\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656a\u656d\u656e\u656f\u6571\u6573\u6575\u6576\u6578",14,"\u6588\u6589\u658a\u658d\u658e\u658f\u6592\u6594\u6595\u6596\u6598\u659a\u659d\u659e\u65a0\u65a2\u65a3\u65a6\u65a8\u65aa\u65ac\u65ae\u65b1",7,"\u65ba\u65bb\u65be\u65bf\u65c0\u65c2\u65c7\u65c8\u65c9\u65ca\u65cd\u65d0\u65d1\u65d3\u65d4\u65d5\u65d8",7,"\u65e1\u65e3\u65e4\u65ea\u65eb"],["9540","\u65f2\u65f3\u65f4\u65f5\u65f8\u65f9\u65fb",4,"\u6601\u6604\u6605\u6607\u6608\u6609\u660b\u660d\u6610\u6611\u6612\u6616\u6617\u6618\u661a\u661b\u661c\u661e\u6621\u6622\u6623\u6624\u6626\u6629\u662a\u662b\u662c\u662e\u6630\u6632\u6633\u6637",4,"\u663d\u663f\u6640\u6642\u6644",6,"\u664d\u664e\u6650\u6651\u6658"],["9580","\u6659\u665b\u665c\u665d\u665e\u6660\u6662\u6663\u6665\u6667\u6669",4,"\u6671\u6672\u6673\u6675\u6678\u6679\u667b\u667c\u667d\u667f\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668a\u668b\u668d\u668e\u668f\u6690\u6692\u6693\u6694\u6695\u6698",4,"\u669e",8,"\u66a9",4,"\u66af",4,"\u66b5\u66b6\u66b7\u66b8\u66ba\u66bb\u66bc\u66bd\u66bf",25,"\u66da\u66de",7,"\u66e7\u66e8\u66ea",5,"\u66f1\u66f5\u66f6\u66f8\u66fa\u66fb\u66fd\u6701\u6702\u6703"],["9640","\u6704\u6705\u6706\u6707\u670c\u670e\u670f\u6711\u6712\u6713\u6716\u6718\u6719\u671a\u671c\u671e\u6720",5,"\u6727\u6729\u672e\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673b\u673c\u673e\u673f\u6741\u6744\u6745\u6747\u674a\u674b\u674d\u6752\u6754\u6755\u6757",4,"\u675d\u6762\u6763\u6764\u6766\u6767\u676b\u676c\u676e\u6771\u6774\u6776"],["9680","\u6778\u6779\u677a\u677b\u677d\u6780\u6782\u6783\u6785\u6786\u6788\u678a\u678c\u678d\u678e\u678f\u6791\u6792\u6793\u6794\u6796\u6799\u679b\u679f\u67a0\u67a1\u67a4\u67a6\u67a9\u67ac\u67ae\u67b1\u67b2\u67b4\u67b9",7,"\u67c2\u67c5",9,"\u67d5\u67d6\u67d7\u67db\u67df\u67e1\u67e3\u67e4\u67e6\u67e7\u67e8\u67ea\u67eb\u67ed\u67ee\u67f2\u67f5",7,"\u67fe\u6801\u6802\u6803\u6804\u6806\u680d\u6810\u6812\u6814\u6815\u6818",4,"\u681e\u681f\u6820\u6822",6,"\u682b",6,"\u6834\u6835\u6836\u683a\u683b\u683f\u6847\u684b\u684d\u684f\u6852\u6856",5],["9740","\u685c\u685d\u685e\u685f\u686a\u686c",7,"\u6875\u6878",8,"\u6882\u6884\u6887",7,"\u6890\u6891\u6892\u6894\u6895\u6896\u6898",9,"\u68a3\u68a4\u68a5\u68a9\u68aa\u68ab\u68ac\u68ae\u68b1\u68b2\u68b4\u68b6\u68b7\u68b8"],["9780","\u68b9",6,"\u68c1\u68c3",5,"\u68ca\u68cc\u68ce\u68cf\u68d0\u68d1\u68d3\u68d4\u68d6\u68d7\u68d9\u68db",4,"\u68e1\u68e2\u68e4",9,"\u68ef\u68f2\u68f3\u68f4\u68f6\u68f7\u68f8\u68fb\u68fd\u68fe\u68ff\u6900\u6902\u6903\u6904\u6906",4,"\u690c\u690f\u6911\u6913",11,"\u6921\u6922\u6923\u6925",7,"\u692e\u692f\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693a\u693b\u693c\u693e\u6940\u6941\u6943",16,"\u6955\u6956\u6958\u6959\u695b\u695c\u695f"],["9840","\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696a\u696c\u696d\u696f\u6970\u6972",4,"\u697a\u697b\u697d\u697e\u697f\u6981\u6983\u6985\u698a\u698b\u698c\u698e",5,"\u6996\u6997\u6999\u699a\u699d",9,"\u69a9\u69aa\u69ac\u69ae\u69af\u69b0\u69b2\u69b3\u69b5\u69b6\u69b8\u69b9\u69ba\u69bc\u69bd"],["9880","\u69be\u69bf\u69c0\u69c2",7,"\u69cb\u69cd\u69cf\u69d1\u69d2\u69d3\u69d5",5,"\u69dc\u69dd\u69de\u69e1",11,"\u69ee\u69ef\u69f0\u69f1\u69f3",9,"\u69fe\u6a00",9,"\u6a0b",11,"\u6a19",5,"\u6a20\u6a22",5,"\u6a29\u6a2b\u6a2c\u6a2d\u6a2e\u6a30\u6a32\u6a33\u6a34\u6a36",6,"\u6a3f",4,"\u6a45\u6a46\u6a48",7,"\u6a51",6,"\u6a5a"],["9940","\u6a5c",4,"\u6a62\u6a63\u6a64\u6a66",10,"\u6a72",6,"\u6a7a\u6a7b\u6a7d\u6a7e\u6a7f\u6a81\u6a82\u6a83\u6a85",8,"\u6a8f\u6a92",4,"\u6a98",7,"\u6aa1",5],["9980","\u6aa7\u6aa8\u6aaa\u6aad",114,"\u6b25\u6b26\u6b28",6],["9a40","\u6b2f\u6b30\u6b31\u6b33\u6b34\u6b35\u6b36\u6b38\u6b3b\u6b3c\u6b3d\u6b3f\u6b40\u6b41\u6b42\u6b44\u6b45\u6b48\u6b4a\u6b4b\u6b4d",11,"\u6b5a",7,"\u6b68\u6b69\u6b6b",13,"\u6b7a\u6b7d\u6b7e\u6b7f\u6b80\u6b85\u6b88"],["9a80","\u6b8c\u6b8e\u6b8f\u6b90\u6b91\u6b94\u6b95\u6b97\u6b98\u6b99\u6b9c",4,"\u6ba2",7,"\u6bab",7,"\u6bb6\u6bb8",6,"\u6bc0\u6bc3\u6bc4\u6bc6",4,"\u6bcc\u6bce\u6bd0\u6bd1\u6bd8\u6bda\u6bdc",4,"\u6be2",7,"\u6bec\u6bed\u6bee\u6bf0\u6bf1\u6bf2\u6bf4\u6bf6\u6bf7\u6bf8\u6bfa\u6bfb\u6bfc\u6bfe",6,"\u6c08",4,"\u6c0e\u6c12\u6c17\u6c1c\u6c1d\u6c1e\u6c20\u6c23\u6c25\u6c2b\u6c2c\u6c2d\u6c31\u6c33\u6c36\u6c37\u6c39\u6c3a\u6c3b\u6c3c\u6c3e\u6c3f\u6c43\u6c44\u6c45\u6c48\u6c4b",4,"\u6c51\u6c52\u6c53\u6c56\u6c58"],["9b40","\u6c59\u6c5a\u6c62\u6c63\u6c65\u6c66\u6c67\u6c6b",4,"\u6c71\u6c73\u6c75\u6c77\u6c78\u6c7a\u6c7b\u6c7c\u6c7f\u6c80\u6c84\u6c87\u6c8a\u6c8b\u6c8d\u6c8e\u6c91\u6c92\u6c95\u6c96\u6c97\u6c98\u6c9a\u6c9c\u6c9d\u6c9e\u6ca0\u6ca2\u6ca8\u6cac\u6caf\u6cb0\u6cb4\u6cb5\u6cb6\u6cb7\u6cba\u6cc0\u6cc1\u6cc2\u6cc3\u6cc6\u6cc7\u6cc8\u6ccb\u6ccd\u6cce\u6ccf\u6cd1\u6cd2\u6cd8"],["9b80","\u6cd9\u6cda\u6cdc\u6cdd\u6cdf\u6ce4\u6ce6\u6ce7\u6ce9\u6cec\u6ced\u6cf2\u6cf4\u6cf9\u6cff\u6d00\u6d02\u6d03\u6d05\u6d06\u6d08\u6d09\u6d0a\u6d0d\u6d0f\u6d10\u6d11\u6d13\u6d14\u6d15\u6d16\u6d18\u6d1c\u6d1d\u6d1f",5,"\u6d26\u6d28\u6d29\u6d2c\u6d2d\u6d2f\u6d30\u6d34\u6d36\u6d37\u6d38\u6d3a\u6d3f\u6d40\u6d42\u6d44\u6d49\u6d4c\u6d50\u6d55\u6d56\u6d57\u6d58\u6d5b\u6d5d\u6d5f\u6d61\u6d62\u6d64\u6d65\u6d67\u6d68\u6d6b\u6d6c\u6d6d\u6d70\u6d71\u6d72\u6d73\u6d75\u6d76\u6d79\u6d7a\u6d7b\u6d7d",4,"\u6d83\u6d84\u6d86\u6d87\u6d8a\u6d8b\u6d8d\u6d8f\u6d90\u6d92\u6d96",4,"\u6d9c\u6da2\u6da5\u6dac\u6dad\u6db0\u6db1\u6db3\u6db4\u6db6\u6db7\u6db9",5,"\u6dc1\u6dc2\u6dc3\u6dc8\u6dc9\u6dca"],["9c40","\u6dcd\u6dce\u6dcf\u6dd0\u6dd2\u6dd3\u6dd4\u6dd5\u6dd7\u6dda\u6ddb\u6ddc\u6ddf\u6de2\u6de3\u6de5\u6de7\u6de8\u6de9\u6dea\u6ded\u6def\u6df0\u6df2\u6df4\u6df5\u6df6\u6df8\u6dfa\u6dfd",7,"\u6e06\u6e07\u6e08\u6e09\u6e0b\u6e0f\u6e12\u6e13\u6e15\u6e18\u6e19\u6e1b\u6e1c\u6e1e\u6e1f\u6e22\u6e26\u6e27\u6e28\u6e2a\u6e2c\u6e2e\u6e30\u6e31\u6e33\u6e35"],["9c80","\u6e36\u6e37\u6e39\u6e3b",7,"\u6e45",7,"\u6e4f\u6e50\u6e51\u6e52\u6e55\u6e57\u6e59\u6e5a\u6e5c\u6e5d\u6e5e\u6e60",10,"\u6e6c\u6e6d\u6e6f",14,"\u6e80\u6e81\u6e82\u6e84\u6e87\u6e88\u6e8a",4,"\u6e91",6,"\u6e99\u6e9a\u6e9b\u6e9d\u6e9e\u6ea0\u6ea1\u6ea3\u6ea4\u6ea6\u6ea8\u6ea9\u6eab\u6eac\u6ead\u6eae\u6eb0\u6eb3\u6eb5\u6eb8\u6eb9\u6ebc\u6ebe\u6ebf\u6ec0\u6ec3\u6ec4\u6ec5\u6ec6\u6ec8\u6ec9\u6eca\u6ecc\u6ecd\u6ece\u6ed0\u6ed2\u6ed6\u6ed8\u6ed9\u6edb\u6edc\u6edd\u6ee3\u6ee7\u6eea",5],["9d40","\u6ef0\u6ef1\u6ef2\u6ef3\u6ef5\u6ef6\u6ef7\u6ef8\u6efa",7,"\u6f03\u6f04\u6f05\u6f07\u6f08\u6f0a",4,"\u6f10\u6f11\u6f12\u6f16",9,"\u6f21\u6f22\u6f23\u6f25\u6f26\u6f27\u6f28\u6f2c\u6f2e\u6f30\u6f32\u6f34\u6f35\u6f37",6,"\u6f3f\u6f40\u6f41\u6f42"],["9d80","\u6f43\u6f44\u6f45\u6f48\u6f49\u6f4a\u6f4c\u6f4e",9,"\u6f59\u6f5a\u6f5b\u6f5d\u6f5f\u6f60\u6f61\u6f63\u6f64\u6f65\u6f67",5,"\u6f6f\u6f70\u6f71\u6f73\u6f75\u6f76\u6f77\u6f79\u6f7b\u6f7d",6,"\u6f85\u6f86\u6f87\u6f8a\u6f8b\u6f8f",12,"\u6f9d\u6f9e\u6f9f\u6fa0\u6fa2",4,"\u6fa8",10,"\u6fb4\u6fb5\u6fb7\u6fb8\u6fba",5,"\u6fc1\u6fc3",5,"\u6fca",6,"\u6fd3",10,"\u6fdf\u6fe2\u6fe3\u6fe4\u6fe5"],["9e40","\u6fe6",7,"\u6ff0",32,"\u7012",7,"\u701c",6,"\u7024",6],["9e80","\u702b",9,"\u7036\u7037\u7038\u703a",17,"\u704d\u704e\u7050",13,"\u705f",11,"\u706e\u7071\u7072\u7073\u7074\u7077\u7079\u707a\u707b\u707d\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708b\u708c\u708d\u708f\u7090\u7091\u7093\u7097\u7098\u709a\u709b\u709e",12,"\u70b0\u70b2\u70b4\u70b5\u70b6\u70ba\u70be\u70bf\u70c4\u70c5\u70c6\u70c7\u70c9\u70cb",12,"\u70da"],["9f40","\u70dc\u70dd\u70de\u70e0\u70e1\u70e2\u70e3\u70e5\u70ea\u70ee\u70f0",6,"\u70f8\u70fa\u70fb\u70fc\u70fe",10,"\u710b",4,"\u7111\u7112\u7114\u7117\u711b",10,"\u7127",7,"\u7132\u7133\u7134"],["9f80","\u7135\u7137",13,"\u7146\u7147\u7148\u7149\u714b\u714d\u714f",12,"\u715d\u715f",4,"\u7165\u7169",4,"\u716f\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717b\u717c\u717e",5,"\u7185",4,"\u718b\u718c\u718d\u718e\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719a",4,"\u71a1",6,"\u71a9\u71aa\u71ab\u71ad",5,"\u71b4\u71b6\u71b7\u71b8\u71ba",8,"\u71c4",9,"\u71cf",4],["a040","\u71d6",9,"\u71e1\u71e2\u71e3\u71e4\u71e6\u71e8",5,"\u71ef",9,"\u71fa",11,"\u7207",19],["a080","\u721b\u721c\u721e",9,"\u7229\u722b\u722d\u722e\u722f\u7232\u7233\u7234\u723a\u723c\u723e\u7240",6,"\u7249\u724a\u724b\u724e\u724f\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725a\u725c\u725e\u7260\u7263\u7264\u7265\u7268\u726a\u726b\u726c\u726d\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727b\u727c\u727d\u7282\u7283\u7285",4,"\u728c\u728e\u7290\u7291\u7293",11,"\u72a0",11,"\u72ae\u72b1\u72b2\u72b3\u72b5\u72ba",6,"\u72c5\u72c6\u72c7\u72c9\u72ca\u72cb\u72cc\u72cf\u72d1\u72d3\u72d4\u72d5\u72d6\u72d8\u72da\u72db"],["a1a1","\u3000\u3001\u3002\xb7\u02c9\u02c7\xa8\u3003\u3005\u2014\uff5e\u2016\u2026\u2018\u2019\u201c\u201d\u3014\u3015\u3008",7,"\u3016\u3017\u3010\u3011\xb1\xd7\xf7\u2236\u2227\u2228\u2211\u220f\u222a\u2229\u2208\u2237\u221a\u22a5\u2225\u2220\u2312\u2299\u222b\u222e\u2261\u224c\u2248\u223d\u221d\u2260\u226e\u226f\u2264\u2265\u221e\u2235\u2234\u2642\u2640\xb0\u2032\u2033\u2103\uff04\xa4\uffe0\uffe1\u2030\xa7\u2116\u2606\u2605\u25cb\u25cf\u25ce\u25c7\u25c6\u25a1\u25a0\u25b3\u25b2\u203b\u2192\u2190\u2191\u2193\u3013"],["a2a1","\u2170",9],["a2b1","\u2488",19,"\u2474",19,"\u2460",9],["a2e5","\u3220",9],["a2f1","\u2160",11],["a3a1","\uff01\uff02\uff03\uffe5\uff05",88,"\uffe3"],["a4a1","\u3041",82],["a5a1","\u30a1",85],["a6a1","\u0391",16,"\u03a3",6],["a6c1","\u03b1",16,"\u03c3",6],["a6e0","\ufe35\ufe36\ufe39\ufe3a\ufe3f\ufe40\ufe3d\ufe3e\ufe41\ufe42\ufe43\ufe44"],["a6ee","\ufe3b\ufe3c\ufe37\ufe38\ufe31"],["a6f4","\ufe33\ufe34"],["a7a1","\u0410",5,"\u0401\u0416",25],["a7d1","\u0430",5,"\u0451\u0436",25],["a840","\u02ca\u02cb\u02d9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221f\u2223\u2252\u2266\u2267\u22bf\u2550",35,"\u2581",6],["a880","\u2588",7,"\u2593\u2594\u2595\u25bc\u25bd\u25e2\u25e3\u25e4\u25e5\u2609\u2295\u3012\u301d\u301e"],["a8a1","\u0101\xe1\u01ce\xe0\u0113\xe9\u011b\xe8\u012b\xed\u01d0\xec\u014d\xf3\u01d2\xf2\u016b\xfa\u01d4\xf9\u01d6\u01d8\u01da\u01dc\xfc\xea\u0251"],["a8bd","\u0144\u0148"],["a8c0","\u0261"],["a8c5","\u3105",36],["a940","\u3021",8,"\u32a3\u338e\u338f\u339c\u339d\u339e\u33a1\u33c4\u33ce\u33d1\u33d2\u33d5\ufe30\uffe2\uffe4"],["a959","\u2121\u3231"],["a95c","\u2010"],["a960","\u30fc\u309b\u309c\u30fd\u30fe\u3006\u309d\u309e\ufe49",9,"\ufe54\ufe55\ufe56\ufe57\ufe59",8],["a980","\ufe62",4,"\ufe68\ufe69\ufe6a\ufe6b"],["a996","\u3007"],["a9a4","\u2500",75],["aa40","\u72dc\u72dd\u72df\u72e2",5,"\u72ea\u72eb\u72f5\u72f6\u72f9\u72fd\u72fe\u72ff\u7300\u7302\u7304",5,"\u730b\u730c\u730d\u730f\u7310\u7311\u7312\u7314\u7318\u7319\u731a\u731f\u7320\u7323\u7324\u7326\u7327\u7328\u732d\u732f\u7330\u7332\u7333\u7335\u7336\u733a\u733b\u733c\u733d\u7340",8],["aa80","\u7349\u734a\u734b\u734c\u734e\u734f\u7351\u7353\u7354\u7355\u7356\u7358",7,"\u7361",10,"\u736e\u7370\u7371"],["ab40","\u7372",11,"\u737f",4,"\u7385\u7386\u7388\u738a\u738c\u738d\u738f\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739a\u739c\u739d\u739e\u73a0\u73a1\u73a3",5,"\u73aa\u73ac\u73ad\u73b1\u73b4\u73b5\u73b6\u73b8\u73b9\u73bc\u73bd\u73be\u73bf\u73c1\u73c3",4],["ab80","\u73cb\u73cc\u73ce\u73d2",6,"\u73da\u73db\u73dc\u73dd\u73df\u73e1\u73e2\u73e3\u73e4\u73e6\u73e8\u73ea\u73eb\u73ec\u73ee\u73ef\u73f0\u73f1\u73f3",4],["ac40","\u73f8",10,"\u7404\u7407\u7408\u740b\u740c\u740d\u740e\u7411",8,"\u741c",5,"\u7423\u7424\u7427\u7429\u742b\u742d\u742f\u7431\u7432\u7437",4,"\u743d\u743e\u743f\u7440\u7442",11],["ac80","\u744e",6,"\u7456\u7458\u745d\u7460",12,"\u746e\u746f\u7471",4,"\u7478\u7479\u747a"],["ad40","\u747b\u747c\u747d\u747f\u7482\u7484\u7485\u7486\u7488\u7489\u748a\u748c\u748d\u748f\u7491",10,"\u749d\u749f",7,"\u74aa",15,"\u74bb",12],["ad80","\u74c8",9,"\u74d3",8,"\u74dd\u74df\u74e1\u74e5\u74e7",6,"\u74f0\u74f1\u74f2"],["ae40","\u74f3\u74f5\u74f8",6,"\u7500\u7501\u7502\u7503\u7505",7,"\u750e\u7510\u7512\u7514\u7515\u7516\u7517\u751b\u751d\u751e\u7520",4,"\u7526\u7527\u752a\u752e\u7534\u7536\u7539\u753c\u753d\u753f\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754a\u754d\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558"],["ae80","\u755d",7,"\u7567\u7568\u7569\u756b",6,"\u7573\u7575\u7576\u7577\u757a",4,"\u7580\u7581\u7582\u7584\u7585\u7587"],["af40","\u7588\u7589\u758a\u758c\u758d\u758e\u7590\u7593\u7595\u7598\u759b\u759c\u759e\u75a2\u75a6",4,"\u75ad\u75b6\u75b7\u75ba\u75bb\u75bf\u75c0\u75c1\u75c6\u75cb\u75cc\u75ce\u75cf\u75d0\u75d1\u75d3\u75d7\u75d9\u75da\u75dc\u75dd\u75df\u75e0\u75e1\u75e5\u75e9\u75ec\u75ed\u75ee\u75ef\u75f2\u75f3\u75f5\u75f6\u75f7\u75f8\u75fa\u75fb\u75fd\u75fe\u7602\u7604\u7606\u7607"],["af80","\u7608\u7609\u760b\u760d\u760e\u760f\u7611\u7612\u7613\u7614\u7616\u761a\u761c\u761d\u761e\u7621\u7623\u7627\u7628\u762c\u762e\u762f\u7631\u7632\u7636\u7637\u7639\u763a\u763b\u763d\u7641\u7642\u7644"],["b040","\u7645",6,"\u764e",5,"\u7655\u7657",4,"\u765d\u765f\u7660\u7661\u7662\u7664",6,"\u766c\u766d\u766e\u7670",7,"\u7679\u767a\u767c\u767f\u7680\u7681\u7683\u7685\u7689\u768a\u768c\u768d\u768f\u7690\u7692\u7694\u7695\u7697\u7698\u769a\u769b"],["b080","\u769c",7,"\u76a5",8,"\u76af\u76b0\u76b3\u76b5",9,"\u76c0\u76c1\u76c3\u554a\u963f\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u978d\u6c28\u5b89\u4ffa\u6309\u6697\u5cb8\u80fa\u6848\u80ae\u6602\u76ce\u51f9\u6556\u71ac\u7ff1\u8884\u50b2\u5965\u61ca\u6fb3\u82ad\u634c\u6252\u53ed\u5427\u7b06\u516b\u75a4\u5df4\u62d4\u8dcb\u9776\u628a\u8019\u575d\u9738\u7f62\u7238\u767d\u67cf\u767e\u6446\u4f70\u8d25\u62dc\u7a17\u6591\u73ed\u642c\u6273\u822c\u9881\u677f\u7248\u626e\u62cc\u4f34\u74e3\u534a\u529e\u7eca\u90a6\u5e2e\u6886\u699c\u8180\u7ed1\u68d2\u78c5\u868c\u9551\u508d\u8c24\u82de\u80de\u5305\u8912\u5265"],["b140","\u76c4\u76c7\u76c9\u76cb\u76cc\u76d3\u76d5\u76d9\u76da\u76dc\u76dd\u76de\u76e0",4,"\u76e6",7,"\u76f0\u76f3\u76f5\u76f6\u76f7\u76fa\u76fb\u76fd\u76ff\u7700\u7702\u7703\u7705\u7706\u770a\u770c\u770e",10,"\u771b\u771c\u771d\u771e\u7721\u7723\u7724\u7725\u7727\u772a\u772b"],["b180","\u772c\u772e\u7730",4,"\u7739\u773b\u773d\u773e\u773f\u7742\u7744\u7745\u7746\u7748",7,"\u7752",7,"\u775c\u8584\u96f9\u4fdd\u5821\u9971\u5b9d\u62b1\u62a5\u66b4\u8c79\u9c8d\u7206\u676f\u7891\u60b2\u5351\u5317\u8f88\u80cc\u8d1d\u94a1\u500d\u72c8\u5907\u60eb\u7119\u88ab\u5954\u82ef\u672c\u7b28\u5d29\u7ef7\u752d\u6cf5\u8e66\u8ff8\u903c\u9f3b\u6bd4\u9119\u7b14\u5f7c\u78a7\u84d6\u853d\u6bd5\u6bd9\u6bd6\u5e01\u5e87\u75f9\u95ed\u655d\u5f0a\u5fc5\u8f9f\u58c1\u81c2\u907f\u965b\u97ad\u8fb9\u7f16\u8d2c\u6241\u4fbf\u53d8\u535e\u8fa8\u8fa9\u8fab\u904d\u6807\u5f6a\u8198\u8868\u9cd6\u618b\u522b\u762a\u5f6c\u658c\u6fd2\u6ee8\u5bbe\u6448\u5175\u51b0\u67c4\u4e19\u79c9\u997c\u70b3"],["b240","\u775d\u775e\u775f\u7760\u7764\u7767\u7769\u776a\u776d",11,"\u777a\u777b\u777c\u7781\u7782\u7783\u7786",5,"\u778f\u7790\u7793",11,"\u77a1\u77a3\u77a4\u77a6\u77a8\u77ab\u77ad\u77ae\u77af\u77b1\u77b2\u77b4\u77b6",4],["b280","\u77bc\u77be\u77c0",12,"\u77ce",8,"\u77d8\u77d9\u77da\u77dd",4,"\u77e4\u75c5\u5e76\u73bb\u83e0\u64ad\u62e8\u94b5\u6ce2\u535a\u52c3\u640f\u94c2\u7b94\u4f2f\u5e1b\u8236\u8116\u818a\u6e24\u6cca\u9a73\u6355\u535c\u54fa\u8865\u57e0\u4e0d\u5e03\u6b65\u7c3f\u90e8\u6016\u64e6\u731c\u88c1\u6750\u624d\u8d22\u776c\u8e29\u91c7\u5f69\u83dc\u8521\u9910\u53c2\u8695\u6b8b\u60ed\u60e8\u707f\u82cd\u8231\u4ed3\u6ca7\u85cf\u64cd\u7cd9\u69fd\u66f9\u8349\u5395\u7b56\u4fa7\u518c\u6d4b\u5c42\u8e6d\u63d2\u53c9\u832c\u8336\u67e5\u78b4\u643d\u5bdf\u5c94\u5dee\u8be7\u62c6\u67f4\u8c7a\u6400\u63ba\u8749\u998b\u8c17\u7f20\u94f2\u4ea7\u9610\u98a4\u660c\u7316"],["b340","\u77e6\u77e8\u77ea\u77ef\u77f0\u77f1\u77f2\u77f4\u77f5\u77f7\u77f9\u77fa\u77fb\u77fc\u7803",5,"\u780a\u780b\u780e\u780f\u7810\u7813\u7815\u7819\u781b\u781e\u7820\u7821\u7822\u7824\u7828\u782a\u782b\u782e\u782f\u7831\u7832\u7833\u7835\u7836\u783d\u783f\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784a\u784b\u784d\u784f\u7851\u7853\u7854\u7858\u7859\u785a"],["b380","\u785b\u785c\u785e",11,"\u786f",7,"\u7878\u7879\u787a\u787b\u787d",6,"\u573a\u5c1d\u5e38\u957f\u507f\u80a0\u5382\u655e\u7545\u5531\u5021\u8d85\u6284\u949e\u671d\u5632\u6f6e\u5de2\u5435\u7092\u8f66\u626f\u64a4\u63a3\u5f7b\u6f88\u90f4\u81e3\u8fb0\u5c18\u6668\u5ff1\u6c89\u9648\u8d81\u886c\u6491\u79f0\u57ce\u6a59\u6210\u5448\u4e58\u7a0b\u60e9\u6f84\u8bda\u627f\u901e\u9a8b\u79e4\u5403\u75f4\u6301\u5319\u6c60\u8fdf\u5f1b\u9a70\u803b\u9f7f\u4f88\u5c3a\u8d64\u7fc5\u65a5\u70bd\u5145\u51b2\u866b\u5d07\u5ba0\u62bd\u916c\u7574\u8e0c\u7a20\u6101\u7b79\u4ec7\u7ef8\u7785\u4e11\u81ed\u521d\u51fa\u6a71\u53a8\u8e87\u9504\u96cf\u6ec1\u9664\u695a"],["b440","\u7884\u7885\u7886\u7888\u788a\u788b\u788f\u7890\u7892\u7894\u7895\u7896\u7899\u789d\u789e\u78a0\u78a2\u78a4\u78a6\u78a8",7,"\u78b5\u78b6\u78b7\u78b8\u78ba\u78bb\u78bc\u78bd\u78bf\u78c0\u78c2\u78c3\u78c4\u78c6\u78c7\u78c8\u78cc\u78cd\u78ce\u78cf\u78d1\u78d2\u78d3\u78d6\u78d7\u78d8\u78da",9],["b480","\u78e4\u78e5\u78e6\u78e7\u78e9\u78ea\u78eb\u78ed",4,"\u78f3\u78f5\u78f6\u78f8\u78f9\u78fb",5,"\u7902\u7903\u7904\u7906",6,"\u7840\u50a8\u77d7\u6410\u89e6\u5904\u63e3\u5ddd\u7a7f\u693d\u4f20\u8239\u5598\u4e32\u75ae\u7a97\u5e62\u5e8a\u95ef\u521b\u5439\u708a\u6376\u9524\u5782\u6625\u693f\u9187\u5507\u6df3\u7eaf\u8822\u6233\u7ef0\u75b5\u8328\u78c1\u96cc\u8f9e\u6148\u74f7\u8bcd\u6b64\u523a\u8d50\u6b21\u806a\u8471\u56f1\u5306\u4ece\u4e1b\u51d1\u7c97\u918b\u7c07\u4fc3\u8e7f\u7be1\u7a9c\u6467\u5d14\u50ac\u8106\u7601\u7cb9\u6dec\u7fe0\u6751\u5b58\u5bf8\u78cb\u64ae\u6413\u63aa\u632b\u9519\u642d\u8fbe\u7b54\u7629\u6253\u5927\u5446\u6b79\u50a3\u6234\u5e26\u6b86\u4ee3\u8d37\u888b\u5f85\u902e"],["b540","\u790d",5,"\u7914",9,"\u791f",4,"\u7925",14,"\u7935",4,"\u793d\u793f\u7942\u7943\u7944\u7945\u7947\u794a",8,"\u7954\u7955\u7958\u7959\u7961\u7963"],["b580","\u7964\u7966\u7969\u796a\u796b\u796c\u796e\u7970",6,"\u7979\u797b",4,"\u7982\u7983\u7986\u7987\u7988\u7989\u798b\u798c\u798d\u798e\u7990\u7991\u7992\u6020\u803d\u62c5\u4e39\u5355\u90f8\u63b8\u80c6\u65e6\u6c2e\u4f46\u60ee\u6de1\u8bde\u5f39\u86cb\u5f53\u6321\u515a\u8361\u6863\u5200\u6363\u8e48\u5012\u5c9b\u7977\u5bfc\u5230\u7a3b\u60bc\u9053\u76d7\u5fb7\u5f97\u7684\u8e6c\u706f\u767b\u7b49\u77aa\u51f3\u9093\u5824\u4f4e\u6ef4\u8fea\u654c\u7b1b\u72c4\u6da4\u7fdf\u5ae1\u62b5\u5e95\u5730\u8482\u7b2c\u5e1d\u5f1f\u9012\u7f14\u98a0\u6382\u6ec7\u7898\u70b9\u5178\u975b\u57ab\u7535\u4f43\u7538\u5e97\u60e6\u5960\u6dc0\u6bbf\u7889\u53fc\u96d5\u51cb\u5201\u6389\u540a\u9493\u8c03\u8dcc\u7239\u789f\u8776\u8fed\u8c0d\u53e0"],["b640","\u7993",6,"\u799b",11,"\u79a8",10,"\u79b4",4,"\u79bc\u79bf\u79c2\u79c4\u79c5\u79c7\u79c8\u79ca\u79cc\u79ce\u79cf\u79d0\u79d3\u79d4\u79d6\u79d7\u79d9",5,"\u79e0\u79e1\u79e2\u79e5\u79e8\u79ea"],["b680","\u79ec\u79ee\u79f1",6,"\u79f9\u79fa\u79fc\u79fe\u79ff\u7a01\u7a04\u7a05\u7a07\u7a08\u7a09\u7a0a\u7a0c\u7a0f",4,"\u7a15\u7a16\u7a18\u7a19\u7a1b\u7a1c\u4e01\u76ef\u53ee\u9489\u9876\u9f0e\u952d\u5b9a\u8ba2\u4e22\u4e1c\u51ac\u8463\u61c2\u52a8\u680b\u4f97\u606b\u51bb\u6d1e\u515c\u6296\u6597\u9661\u8c46\u9017\u75d8\u90fd\u7763\u6bd2\u728a\u72ec\u8bfb\u5835\u7779\u8d4c\u675c\u9540\u809a\u5ea6\u6e21\u5992\u7aef\u77ed\u953b\u6bb5\u65ad\u7f0e\u5806\u5151\u961f\u5bf9\u58a9\u5428\u8e72\u6566\u987f\u56e4\u949d\u76fe\u9041\u6387\u54c6\u591a\u593a\u579b\u8eb2\u6735\u8dfa\u8235\u5241\u60f0\u5815\u86fe\u5ce8\u9e45\u4fc4\u989d\u8bb9\u5a25\u6076\u5384\u627c\u904f\u9102\u997f\u6069\u800c\u513f\u8033\u5c14\u9975\u6d31\u4e8c"],["b740","\u7a1d\u7a1f\u7a21\u7a22\u7a24",14,"\u7a34\u7a35\u7a36\u7a38\u7a3a\u7a3e\u7a40",5,"\u7a47",9,"\u7a52",4,"\u7a58",16],["b780","\u7a69",6,"\u7a71\u7a72\u7a73\u7a75\u7a7b\u7a7c\u7a7d\u7a7e\u7a82\u7a85\u7a87\u7a89\u7a8a\u7a8b\u7a8c\u7a8e\u7a8f\u7a90\u7a93\u7a94\u7a99\u7a9a\u7a9b\u7a9e\u7aa1\u7aa2\u8d30\u53d1\u7f5a\u7b4f\u4f10\u4e4f\u9600\u6cd5\u73d0\u85e9\u5e06\u756a\u7ffb\u6a0a\u77fe\u9492\u7e41\u51e1\u70e6\u53cd\u8fd4\u8303\u8d29\u72af\u996d\u6cdb\u574a\u82b3\u65b9\u80aa\u623f\u9632\u59a8\u4eff\u8bbf\u7eba\u653e\u83f2\u975e\u5561\u98de\u80a5\u532a\u8bfd\u5420\u80ba\u5e9f\u6cb8\u8d39\u82ac\u915a\u5429\u6c1b\u5206\u7eb7\u575f\u711a\u6c7e\u7c89\u594b\u4efd\u5fff\u6124\u7caa\u4e30\u5c01\u67ab\u8702\u5cf0\u950b\u98ce\u75af\u70fd\u9022\u51af\u7f1d\u8bbd\u5949\u51e4\u4f5b\u5426\u592b\u6577\u80a4\u5b75\u6276\u62c2\u8f90\u5e45\u6c1f\u7b26\u4f0f\u4fd8\u670d"],["b840","\u7aa3\u7aa4\u7aa7\u7aa9\u7aaa\u7aab\u7aae",4,"\u7ab4",10,"\u7ac0",10,"\u7acc",9,"\u7ad7\u7ad8\u7ada\u7adb\u7adc\u7add\u7ae1\u7ae2\u7ae4\u7ae7",5,"\u7aee\u7af0\u7af1\u7af2\u7af3"],["b880","\u7af4",4,"\u7afb\u7afc\u7afe\u7b00\u7b01\u7b02\u7b05\u7b07\u7b09\u7b0c\u7b0d\u7b0e\u7b10\u7b12\u7b13\u7b16\u7b17\u7b18\u7b1a\u7b1c\u7b1d\u7b1f\u7b21\u7b22\u7b23\u7b27\u7b29\u7b2d\u6d6e\u6daa\u798f\u88b1\u5f17\u752b\u629a\u8f85\u4fef\u91dc\u65a7\u812f\u8151\u5e9c\u8150\u8d74\u526f\u8986\u8d4b\u590d\u5085\u4ed8\u961c\u7236\u8179\u8d1f\u5bcc\u8ba3\u9644\u5987\u7f1a\u5490\u5676\u560e\u8be5\u6539\u6982\u9499\u76d6\u6e89\u5e72\u7518\u6746\u67d1\u7aff\u809d\u8d76\u611f\u79c6\u6562\u8d63\u5188\u521a\u94a2\u7f38\u809b\u7eb2\u5c97\u6e2f\u6760\u7bd9\u768b\u9ad8\u818f\u7f94\u7cd5\u641e\u9550\u7a3f\u544a\u54e5\u6b4c\u6401\u6208\u9e3d\u80f3\u7599\u5272\u9769\u845b\u683c\u86e4\u9601\u9694\u94ec\u4e2a\u5404\u7ed9\u6839\u8ddf\u8015\u66f4\u5e9a\u7fb9"],["b940","\u7b2f\u7b30\u7b32\u7b34\u7b35\u7b36\u7b37\u7b39\u7b3b\u7b3d\u7b3f",5,"\u7b46\u7b48\u7b4a\u7b4d\u7b4e\u7b53\u7b55\u7b57\u7b59\u7b5c\u7b5e\u7b5f\u7b61\u7b63",10,"\u7b6f\u7b70\u7b73\u7b74\u7b76\u7b78\u7b7a\u7b7c\u7b7d\u7b7f\u7b81\u7b82\u7b83\u7b84\u7b86",6,"\u7b8e\u7b8f"],["b980","\u7b91\u7b92\u7b93\u7b96\u7b98\u7b99\u7b9a\u7b9b\u7b9e\u7b9f\u7ba0\u7ba3\u7ba4\u7ba5\u7bae\u7baf\u7bb0\u7bb2\u7bb3\u7bb5\u7bb6\u7bb7\u7bb9",7,"\u7bc2\u7bc3\u7bc4\u57c2\u803f\u6897\u5de5\u653b\u529f\u606d\u9f9a\u4f9b\u8eac\u516c\u5bab\u5f13\u5de9\u6c5e\u62f1\u8d21\u5171\u94a9\u52fe\u6c9f\u82df\u72d7\u57a2\u6784\u8d2d\u591f\u8f9c\u83c7\u5495\u7b8d\u4f30\u6cbd\u5b64\u59d1\u9f13\u53e4\u86ca\u9aa8\u8c37\u80a1\u6545\u987e\u56fa\u96c7\u522e\u74dc\u5250\u5be1\u6302\u8902\u4e56\u62d0\u602a\u68fa\u5173\u5b98\u51a0\u89c2\u7ba1\u9986\u7f50\u60ef\u704c\u8d2f\u5149\u5e7f\u901b\u7470\u89c4\u572d\u7845\u5f52\u9f9f\u95fa\u8f68\u9b3c\u8be1\u7678\u6842\u67dc\u8dea\u8d35\u523d\u8f8a\u6eda\u68cd\u9505\u90ed\u56fd\u679c\u88f9\u8fc7\u54c8"],["ba40","\u7bc5\u7bc8\u7bc9\u7bca\u7bcb\u7bcd\u7bce\u7bcf\u7bd0\u7bd2\u7bd4",4,"\u7bdb\u7bdc\u7bde\u7bdf\u7be0\u7be2\u7be3\u7be4\u7be7\u7be8\u7be9\u7beb\u7bec\u7bed\u7bef\u7bf0\u7bf2",4,"\u7bf8\u7bf9\u7bfa\u7bfb\u7bfd\u7bff",7,"\u7c08\u7c09\u7c0a\u7c0d\u7c0e\u7c10",5,"\u7c17\u7c18\u7c19"],["ba80","\u7c1a",4,"\u7c20",5,"\u7c28\u7c29\u7c2b",12,"\u7c39",5,"\u7c42\u9ab8\u5b69\u6d77\u6c26\u4ea5\u5bb3\u9a87\u9163\u61a8\u90af\u97e9\u542b\u6db5\u5bd2\u51fd\u558a\u7f55\u7ff0\u64bc\u634d\u65f1\u61be\u608d\u710a\u6c57\u6c49\u592f\u676d\u822a\u58d5\u568e\u8c6a\u6beb\u90dd\u597d\u8017\u53f7\u6d69\u5475\u559d\u8377\u83cf\u6838\u79be\u548c\u4f55\u5408\u76d2\u8c89\u9602\u6cb3\u6db8\u8d6b\u8910\u9e64\u8d3a\u563f\u9ed1\u75d5\u5f88\u72e0\u6068\u54fc\u4ea8\u6a2a\u8861\u6052\u8f70\u54c4\u70d8\u8679\u9e3f\u6d2a\u5b8f\u5f18\u7ea2\u5589\u4faf\u7334\u543c\u539a\u5019\u540e\u547c\u4e4e\u5ffd\u745a\u58f6\u846b\u80e1\u8774\u72d0\u7cca\u6e56"],["bb40","\u7c43",9,"\u7c4e",36,"\u7c75",5,"\u7c7e",9],["bb80","\u7c88\u7c8a",6,"\u7c93\u7c94\u7c96\u7c99\u7c9a\u7c9b\u7ca0\u7ca1\u7ca3\u7ca6\u7ca7\u7ca8\u7ca9\u7cab\u7cac\u7cad\u7caf\u7cb0\u7cb4",4,"\u7cba\u7cbb\u5f27\u864e\u552c\u62a4\u4e92\u6caa\u6237\u82b1\u54d7\u534e\u733e\u6ed1\u753b\u5212\u5316\u8bdd\u69d0\u5f8a\u6000\u6dee\u574f\u6b22\u73af\u6853\u8fd8\u7f13\u6362\u60a3\u5524\u75ea\u8c62\u7115\u6da3\u5ba6\u5e7b\u8352\u614c\u9ec4\u78fa\u8757\u7c27\u7687\u51f0\u60f6\u714c\u6643\u5e4c\u604d\u8c0e\u7070\u6325\u8f89\u5fbd\u6062\u86d4\u56de\u6bc1\u6094\u6167\u5349\u60e0\u6666\u8d3f\u79fd\u4f1a\u70e9\u6c47\u8bb3\u8bf2\u7ed8\u8364\u660f\u5a5a\u9b42\u6d51\u6df7\u8c41\u6d3b\u4f19\u706b\u83b7\u6216\u60d1\u970d\u8d27\u7978\u51fb\u573e\u57fa\u673a\u7578\u7a3d\u79ef\u7b95"],["bc40","\u7cbf\u7cc0\u7cc2\u7cc3\u7cc4\u7cc6\u7cc9\u7ccb\u7cce",6,"\u7cd8\u7cda\u7cdb\u7cdd\u7cde\u7ce1",6,"\u7ce9",5,"\u7cf0",7,"\u7cf9\u7cfa\u7cfc",13,"\u7d0b",5],["bc80","\u7d11",14,"\u7d21\u7d23\u7d24\u7d25\u7d26\u7d28\u7d29\u7d2a\u7d2c\u7d2d\u7d2e\u7d30",6,"\u808c\u9965\u8ff9\u6fc0\u8ba5\u9e21\u59ec\u7ee9\u7f09\u5409\u6781\u68d8\u8f91\u7c4d\u96c6\u53ca\u6025\u75be\u6c72\u5373\u5ac9\u7ea7\u6324\u51e0\u810a\u5df1\u84df\u6280\u5180\u5b63\u4f0e\u796d\u5242\u60b8\u6d4e\u5bc4\u5bc2\u8ba1\u8bb0\u65e2\u5fcc\u9645\u5993\u7ee7\u7eaa\u5609\u67b7\u5939\u4f73\u5bb6\u52a0\u835a\u988a\u8d3e\u7532\u94be\u5047\u7a3c\u4ef7\u67b6\u9a7e\u5ac1\u6b7c\u76d1\u575a\u5c16\u7b3a\u95f4\u714e\u517c\u80a9\u8270\u5978\u7f04\u8327\u68c0\u67ec\u78b1\u7877\u62e3\u6361\u7b80\u4fed\u526a\u51cf\u8350\u69db\u9274\u8df5\u8d31\u89c1\u952e\u7bad\u4ef6"],["bd40","\u7d37",54,"\u7d6f",7],["bd80","\u7d78",32,"\u5065\u8230\u5251\u996f\u6e10\u6e85\u6da7\u5efa\u50f5\u59dc\u5c06\u6d46\u6c5f\u7586\u848b\u6868\u5956\u8bb2\u5320\u9171\u964d\u8549\u6912\u7901\u7126\u80f6\u4ea4\u90ca\u6d47\u9a84\u5a07\u56bc\u6405\u94f0\u77eb\u4fa5\u811a\u72e1\u89d2\u997a\u7f34\u7ede\u527f\u6559\u9175\u8f7f\u8f83\u53eb\u7a96\u63ed\u63a5\u7686\u79f8\u8857\u9636\u622a\u52ab\u8282\u6854\u6770\u6377\u776b\u7aed\u6d01\u7ed3\u89e3\u59d0\u6212\u85c9\u82a5\u754c\u501f\u4ecb\u75a5\u8beb\u5c4a\u5dfe\u7b4b\u65a4\u91d1\u4eca\u6d25\u895f\u7d27\u9526\u4ec5\u8c28\u8fdb\u9773\u664b\u7981\u8fd1\u70ec\u6d78"],["be40","\u7d99",12,"\u7da7",6,"\u7daf",42],["be80","\u7dda",32,"\u5c3d\u52b2\u8346\u5162\u830e\u775b\u6676\u9cb8\u4eac\u60ca\u7cbe\u7cb3\u7ecf\u4e95\u8b66\u666f\u9888\u9759\u5883\u656c\u955c\u5f84\u75c9\u9756\u7adf\u7ade\u51c0\u70af\u7a98\u63ea\u7a76\u7ea0\u7396\u97ed\u4e45\u7078\u4e5d\u9152\u53a9\u6551\u65e7\u81fc\u8205\u548e\u5c31\u759a\u97a0\u62d8\u72d9\u75bd\u5c45\u9a79\u83ca\u5c40\u5480\u77e9\u4e3e\u6cae\u805a\u62d2\u636e\u5de8\u5177\u8ddd\u8e1e\u952f\u4ff1\u53e5\u60e7\u70ac\u5267\u6350\u9e43\u5a1f\u5026\u7737\u5377\u7ee2\u6485\u652b\u6289\u6398\u5014\u7235\u89c9\u51b3\u8bc0\u7edd\u5747\u83cc\u94a7\u519b\u541b\u5cfb"],["bf40","\u7dfb",62],["bf80","\u7e3a\u7e3c",4,"\u7e42",4,"\u7e48",21,"\u4fca\u7ae3\u6d5a\u90e1\u9a8f\u5580\u5496\u5361\u54af\u5f00\u63e9\u6977\u51ef\u6168\u520a\u582a\u52d8\u574e\u780d\u770b\u5eb7\u6177\u7ce0\u625b\u6297\u4ea2\u7095\u8003\u62f7\u70e4\u9760\u5777\u82db\u67ef\u68f5\u78d5\u9897\u79d1\u58f3\u54b3\u53ef\u6e34\u514b\u523b\u5ba2\u8bfe\u80af\u5543\u57a6\u6073\u5751\u542d\u7a7a\u6050\u5b54\u63a7\u62a0\u53e3\u6263\u5bc7\u67af\u54ed\u7a9f\u82e6\u9177\u5e93\u88e4\u5938\u57ae\u630e\u8de8\u80ef\u5757\u7b77\u4fa9\u5feb\u5bbd\u6b3e\u5321\u7b50\u72c2\u6846\u77ff\u7736\u65f7\u51b5\u4e8f\u76d4\u5cbf\u7aa5\u8475\u594e\u9b41\u5080"],["c040","\u7e5e",35,"\u7e83",23,"\u7e9c\u7e9d\u7e9e"],["c080","\u7eae\u7eb4\u7ebb\u7ebc\u7ed6\u7ee4\u7eec\u7ef9\u7f0a\u7f10\u7f1e\u7f37\u7f39\u7f3b",6,"\u7f43\u7f46",9,"\u7f52\u7f53\u9988\u6127\u6e83\u5764\u6606\u6346\u56f0\u62ec\u6269\u5ed3\u9614\u5783\u62c9\u5587\u8721\u814a\u8fa3\u5566\u83b1\u6765\u8d56\u84dd\u5a6a\u680f\u62e6\u7bee\u9611\u5170\u6f9c\u8c30\u63fd\u89c8\u61d2\u7f06\u70c2\u6ee5\u7405\u6994\u72fc\u5eca\u90ce\u6717\u6d6a\u635e\u52b3\u7262\u8001\u4f6c\u59e5\u916a\u70d9\u6d9d\u52d2\u4e50\u96f7\u956d\u857e\u78ca\u7d2f\u5121\u5792\u64c2\u808b\u7c7b\u6cea\u68f1\u695e\u51b7\u5398\u68a8\u7281\u9ece\u7bf1\u72f8\u79bb\u6f13\u7406\u674e\u91cc\u9ca4\u793c\u8389\u8354\u540f\u6817\u4e3d\u5389\u52b1\u783e\u5386\u5229\u5088\u4f8b\u4fd0"],["c140","\u7f56\u7f59\u7f5b\u7f5c\u7f5d\u7f5e\u7f60\u7f63",4,"\u7f6b\u7f6c\u7f6d\u7f6f\u7f70\u7f73\u7f75\u7f76\u7f77\u7f78\u7f7a\u7f7b\u7f7c\u7f7d\u7f7f\u7f80\u7f82",7,"\u7f8b\u7f8d\u7f8f",4,"\u7f95",4,"\u7f9b\u7f9c\u7fa0\u7fa2\u7fa3\u7fa5\u7fa6\u7fa8",6,"\u7fb1"],["c180","\u7fb3",4,"\u7fba\u7fbb\u7fbe\u7fc0\u7fc2\u7fc3\u7fc4\u7fc6\u7fc7\u7fc8\u7fc9\u7fcb\u7fcd\u7fcf",4,"\u7fd6\u7fd7\u7fd9",5,"\u7fe2\u7fe3\u75e2\u7acb\u7c92\u6ca5\u96b6\u529b\u7483\u54e9\u4fe9\u8054\u83b2\u8fde\u9570\u5ec9\u601c\u6d9f\u5e18\u655b\u8138\u94fe\u604b\u70bc\u7ec3\u7cae\u51c9\u6881\u7cb1\u826f\u4e24\u8f86\u91cf\u667e\u4eae\u8c05\u64a9\u804a\u50da\u7597\u71ce\u5be5\u8fbd\u6f66\u4e86\u6482\u9563\u5ed6\u6599\u5217\u88c2\u70c8\u52a3\u730e\u7433\u6797\u78f7\u9716\u4e34\u90bb\u9cde\u6dcb\u51db\u8d41\u541d\u62ce\u73b2\u83f1\u96f6\u9f84\u94c3\u4f36\u7f9a\u51cc\u7075\u9675\u5cad\u9886\u53e6\u4ee4\u6e9c\u7409\u69b4\u786b\u998f\u7559\u5218\u7624\u6d41\u67f3\u516d\u9f99\u804b\u5499\u7b3c\u7abf"],["c240","\u7fe4\u7fe7\u7fe8\u7fea\u7feb\u7fec\u7fed\u7fef\u7ff2\u7ff4",6,"\u7ffd\u7ffe\u7fff\u8002\u8007\u8008\u8009\u800a\u800e\u800f\u8011\u8013\u801a\u801b\u801d\u801e\u801f\u8021\u8023\u8024\u802b",5,"\u8032\u8034\u8039\u803a\u803c\u803e\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804e\u804f\u8050\u8051\u8053\u8055\u8056\u8057"],["c280","\u8059\u805b",13,"\u806b",5,"\u8072",11,"\u9686\u5784\u62e2\u9647\u697c\u5a04\u6402\u7bd3\u6f0f\u964b\u82a6\u5362\u9885\u5e90\u7089\u63b3\u5364\u864f\u9c81\u9e93\u788c\u9732\u8def\u8d42\u9e7f\u6f5e\u7984\u5f55\u9646\u622e\u9a74\u5415\u94dd\u4fa3\u65c5\u5c65\u5c61\u7f15\u8651\u6c2f\u5f8b\u7387\u6ee4\u7eff\u5ce6\u631b\u5b6a\u6ee6\u5375\u4e71\u63a0\u7565\u62a1\u8f6e\u4f26\u4ed1\u6ca6\u7eb6\u8bba\u841d\u87ba\u7f57\u903b\u9523\u7ba9\u9aa1\u88f8\u843d\u6d1b\u9a86\u7edc\u5988\u9ebb\u739b\u7801\u8682\u9a6c\u9a82\u561b\u5417\u57cb\u4e70\u9ea6\u5356\u8fc8\u8109\u7792\u9992\u86ee\u6ee1\u8513\u66fc\u6162\u6f2b"],["c340","\u807e\u8081\u8082\u8085\u8088\u808a\u808d",5,"\u8094\u8095\u8097\u8099\u809e\u80a3\u80a6\u80a7\u80a8\u80ac\u80b0\u80b3\u80b5\u80b6\u80b8\u80b9\u80bb\u80c5\u80c7",4,"\u80cf",6,"\u80d8\u80df\u80e0\u80e2\u80e3\u80e6\u80ee\u80f5\u80f7\u80f9\u80fb\u80fe\u80ff\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810b"],["c380","\u810c\u8115\u8117\u8119\u811b\u811c\u811d\u811f",12,"\u812d\u812e\u8130\u8133\u8134\u8135\u8137\u8139",4,"\u813f\u8c29\u8292\u832b\u76f2\u6c13\u5fd9\u83bd\u732b\u8305\u951a\u6bdb\u77db\u94c6\u536f\u8302\u5192\u5e3d\u8c8c\u8d38\u4e48\u73ab\u679a\u6885\u9176\u9709\u7164\u6ca1\u7709\u5a92\u9541\u6bcf\u7f8e\u6627\u5bd0\u59b9\u5a9a\u95e8\u95f7\u4eec\u840c\u8499\u6aac\u76df\u9530\u731b\u68a6\u5b5f\u772f\u919a\u9761\u7cdc\u8ff7\u8c1c\u5f25\u7c73\u79d8\u89c5\u6ccc\u871c\u5bc6\u5e42\u68c9\u7720\u7ef5\u5195\u514d\u52c9\u5a29\u7f05\u9762\u82d7\u63cf\u7784\u85d0\u79d2\u6e3a\u5e99\u5999\u8511\u706d\u6c11\u62bf\u76bf\u654f\u60af\u95fd\u660e\u879f\u9e23\u94ed\u540d\u547d\u8c2c\u6478"],["c440","\u8140",5,"\u8147\u8149\u814d\u814e\u814f\u8152\u8156\u8157\u8158\u815b",4,"\u8161\u8162\u8163\u8164\u8166\u8168\u816a\u816b\u816c\u816f\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183",4,"\u8189\u818b\u818c\u818d\u818e\u8190\u8192",5,"\u8199\u819a\u819e",4,"\u81a4\u81a5"],["c480","\u81a7\u81a9\u81ab",7,"\u81b4",5,"\u81bc\u81bd\u81be\u81bf\u81c4\u81c5\u81c7\u81c8\u81c9\u81cb\u81cd",6,"\u6479\u8611\u6a21\u819c\u78e8\u6469\u9b54\u62b9\u672b\u83ab\u58a8\u9ed8\u6cab\u6f20\u5bde\u964c\u8c0b\u725f\u67d0\u62c7\u7261\u4ea9\u59c6\u6bcd\u5893\u66ae\u5e55\u52df\u6155\u6728\u76ee\u7766\u7267\u7a46\u62ff\u54ea\u5450\u94a0\u90a3\u5a1c\u7eb3\u6c16\u4e43\u5976\u8010\u5948\u5357\u7537\u96be\u56ca\u6320\u8111\u607c\u95f9\u6dd6\u5462\u9981\u5185\u5ae9\u80fd\u59ae\u9713\u502a\u6ce5\u5c3c\u62df\u4f60\u533f\u817b\u9006\u6eba\u852b\u62c8\u5e74\u78be\u64b5\u637b\u5ff5\u5a18\u917f\u9e1f\u5c3f\u634f\u8042\u5b7d\u556e\u954a\u954d\u6d85\u60a8\u67e0\u72de\u51dd\u5b81"],["c540","\u81d4",14,"\u81e4\u81e5\u81e6\u81e8\u81e9\u81eb\u81ee",4,"\u81f5",5,"\u81fd\u81ff\u8203\u8207",4,"\u820e\u820f\u8211\u8213\u8215",5,"\u821d\u8220\u8224\u8225\u8226\u8227\u8229\u822e\u8232\u823a\u823c\u823d\u823f"],["c580","\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824a\u824c\u824d\u824e\u8250",7,"\u8259\u825b\u825c\u825d\u825e\u8260",7,"\u8269\u62e7\u6cde\u725b\u626d\u94ae\u7ebd\u8113\u6d53\u519c\u5f04\u5974\u52aa\u6012\u5973\u6696\u8650\u759f\u632a\u61e6\u7cef\u8bfa\u54e6\u6b27\u9e25\u6bb4\u85d5\u5455\u5076\u6ca4\u556a\u8db4\u722c\u5e15\u6015\u7436\u62cd\u6392\u724c\u5f98\u6e43\u6d3e\u6500\u6f58\u76d8\u78d0\u76fc\u7554\u5224\u53db\u4e53\u5e9e\u65c1\u802a\u80d6\u629b\u5486\u5228\u70ae\u888d\u8dd1\u6ce1\u5478\u80da\u57f9\u88f4\u8d54\u966a\u914d\u4f69\u6c9b\u55b7\u76c6\u7830\u62a8\u70f9\u6f8e\u5f6d\u84ec\u68da\u787c\u7bf7\u81a8\u670b\u9e4f\u6367\u78b0\u576f\u7812\u9739\u6279\u62ab\u5288\u7435\u6bd7"],["c640","\u826a\u826b\u826c\u826d\u8271\u8275\u8276\u8277\u8278\u827b\u827c\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828c\u8290\u8293\u8294\u8295\u8296\u829a\u829b\u829e\u82a0\u82a2\u82a3\u82a7\u82b2\u82b5\u82b6\u82ba\u82bb\u82bc\u82bf\u82c0\u82c2\u82c3\u82c5\u82c6\u82c9\u82d0\u82d6\u82d9\u82da\u82dd\u82e2\u82e7\u82e8\u82e9\u82ea\u82ec\u82ed\u82ee\u82f0\u82f2\u82f3\u82f5\u82f6\u82f8"],["c680","\u82fa\u82fc",4,"\u830a\u830b\u830d\u8310\u8312\u8313\u8316\u8318\u8319\u831d",9,"\u8329\u832a\u832e\u8330\u8332\u8337\u833b\u833d\u5564\u813e\u75b2\u76ae\u5339\u75de\u50fb\u5c41\u8b6c\u7bc7\u504f\u7247\u9a97\u98d8\u6f02\u74e2\u7968\u6487\u77a5\u62fc\u9891\u8d2b\u54c1\u8058\u4e52\u576a\u82f9\u840d\u5e73\u51ed\u74f6\u8bc4\u5c4f\u5761\u6cfc\u9887\u5a46\u7834\u9b44\u8feb\u7c95\u5256\u6251\u94fa\u4ec6\u8386\u8461\u83e9\u84b2\u57d4\u6734\u5703\u666e\u6d66\u8c31\u66dd\u7011\u671f\u6b3a\u6816\u621a\u59bb\u4e03\u51c4\u6f06\u67d2\u6c8f\u5176\u68cb\u5947\u6b67\u7566\u5d0e\u8110\u9f50\u65d7\u7948\u7941\u9a91\u8d77\u5c82\u4e5e\u4f01\u542f\u5951\u780c\u5668\u6c14\u8fc4\u5f03\u6c7d\u6ce3\u8bab\u6390"],["c740","\u833e\u833f\u8341\u8342\u8344\u8345\u8348\u834a",4,"\u8353\u8355",4,"\u835d\u8362\u8370",6,"\u8379\u837a\u837e",6,"\u8387\u8388\u838a\u838b\u838c\u838d\u838f\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839a\u839d\u839f\u83a1",6,"\u83ac\u83ad\u83ae"],["c780","\u83af\u83b5\u83bb\u83be\u83bf\u83c2\u83c3\u83c4\u83c6\u83c8\u83c9\u83cb\u83cd\u83ce\u83d0\u83d1\u83d2\u83d3\u83d5\u83d7\u83d9\u83da\u83db\u83de\u83e2\u83e3\u83e4\u83e6\u83e7\u83e8\u83eb\u83ec\u83ed\u6070\u6d3d\u7275\u6266\u948e\u94c5\u5343\u8fc1\u7b7e\u4edf\u8c26\u4e7e\u9ed4\u94b1\u94b3\u524d\u6f5c\u9063\u6d45\u8c34\u5811\u5d4c\u6b20\u6b49\u67aa\u545b\u8154\u7f8c\u5899\u8537\u5f3a\u62a2\u6a47\u9539\u6572\u6084\u6865\u77a7\u4e54\u4fa8\u5de7\u9798\u64ac\u7fd8\u5ced\u4fcf\u7a8d\u5207\u8304\u4e14\u602f\u7a83\u94a6\u4fb5\u4eb2\u79e6\u7434\u52e4\u82b9\u64d2\u79bd\u5bdd\u6c81\u9752\u8f7b\u6c22\u503e\u537f\u6e05\u64ce\u6674\u6c30\u60c5\u9877\u8bf7\u5e86\u743c\u7a77\u79cb\u4e18\u90b1\u7403\u6c42\u56da\u914b\u6cc5\u8d8b\u533a\u86c6\u66f2\u8eaf\u5c48\u9a71\u6e20"],["c840","\u83ee\u83ef\u83f3",4,"\u83fa\u83fb\u83fc\u83fe\u83ff\u8400\u8402\u8405\u8407\u8408\u8409\u840a\u8410\u8412",5,"\u8419\u841a\u841b\u841e",5,"\u8429",7,"\u8432",5,"\u8439\u843a\u843b\u843e",7,"\u8447\u8448\u8449"],["c880","\u844a",6,"\u8452",4,"\u8458\u845d\u845e\u845f\u8460\u8462\u8464",4,"\u846a\u846e\u846f\u8470\u8472\u8474\u8477\u8479\u847b\u847c\u53d6\u5a36\u9f8b\u8da3\u53bb\u5708\u98a7\u6743\u919b\u6cc9\u5168\u75ca\u62f3\u72ac\u5238\u529d\u7f3a\u7094\u7638\u5374\u9e4a\u69b7\u786e\u96c0\u88d9\u7fa4\u7136\u71c3\u5189\u67d3\u74e4\u58e4\u6518\u56b7\u8ba9\u9976\u6270\u7ed5\u60f9\u70ed\u58ec\u4ec1\u4eba\u5fcd\u97e7\u4efb\u8ba4\u5203\u598a\u7eab\u6254\u4ecd\u65e5\u620e\u8338\u84c9\u8363\u878d\u7194\u6eb6\u5bb9\u7ed2\u5197\u63c9\u67d4\u8089\u8339\u8815\u5112\u5b7a\u5982\u8fb1\u4e73\u6c5d\u5165\u8925\u8f6f\u962e\u854a\u745e\u9510\u95f0\u6da6\u82e5\u5f31\u6492\u6d12\u8428\u816e\u9cc3\u585e\u8d5b\u4e09\u53c1"],["c940","\u847d",4,"\u8483\u8484\u8485\u8486\u848a\u848d\u848f",7,"\u8498\u849a\u849b\u849d\u849e\u849f\u84a0\u84a2",12,"\u84b0\u84b1\u84b3\u84b5\u84b6\u84b7\u84bb\u84bc\u84be\u84c0\u84c2\u84c3\u84c5\u84c6\u84c7\u84c8\u84cb\u84cc\u84ce\u84cf\u84d2\u84d4\u84d5\u84d7"],["c980","\u84d8",4,"\u84de\u84e1\u84e2\u84e4\u84e7",4,"\u84ed\u84ee\u84ef\u84f1",10,"\u84fd\u84fe\u8500\u8501\u8502\u4f1e\u6563\u6851\u55d3\u4e27\u6414\u9a9a\u626b\u5ac2\u745f\u8272\u6da9\u68ee\u50e7\u838e\u7802\u6740\u5239\u6c99\u7eb1\u50bb\u5565\u715e\u7b5b\u6652\u73ca\u82eb\u6749\u5c71\u5220\u717d\u886b\u95ea\u9655\u64c5\u8d61\u81b3\u5584\u6c55\u6247\u7f2e\u5892\u4f24\u5546\u8d4f\u664c\u4e0a\u5c1a\u88f3\u68a2\u634e\u7a0d\u70e7\u828d\u52fa\u97f6\u5c11\u54e8\u90b5\u7ecd\u5962\u8d4a\u86c7\u820c\u820d\u8d66\u6444\u5c04\u6151\u6d89\u793e\u8bbe\u7837\u7533\u547b\u4f38\u8eab\u6df1\u5a20\u7ec5\u795e\u6c88\u5ba1\u5a76\u751a\u80be\u614e\u6e17\u58f0\u751f\u7525\u7272\u5347\u7ef3"],["ca40","\u8503",8,"\u850d\u850e\u850f\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851b\u851c\u851d\u851e\u8520\u8522",8,"\u852d",9,"\u853e",4,"\u8544\u8545\u8546\u8547\u854b",10],["ca80","\u8557\u8558\u855a\u855b\u855c\u855d\u855f",4,"\u8565\u8566\u8567\u8569",8,"\u8573\u8575\u8576\u8577\u8578\u857c\u857d\u857f\u8580\u8581\u7701\u76db\u5269\u80dc\u5723\u5e08\u5931\u72ee\u65bd\u6e7f\u8bd7\u5c38\u8671\u5341\u77f3\u62fe\u65f6\u4ec0\u98df\u8680\u5b9e\u8bc6\u53f2\u77e2\u4f7f\u5c4e\u9a76\u59cb\u5f0f\u793a\u58eb\u4e16\u67ff\u4e8b\u62ed\u8a93\u901d\u52bf\u662f\u55dc\u566c\u9002\u4ed5\u4f8d\u91ca\u9970\u6c0f\u5e02\u6043\u5ba4\u89c6\u8bd5\u6536\u624b\u9996\u5b88\u5bff\u6388\u552e\u53d7\u7626\u517d\u852c\u67a2\u68b3\u6b8a\u6292\u8f93\u53d4\u8212\u6dd1\u758f\u4e66\u8d4e\u5b70\u719f\u85af\u6691\u66d9\u7f72\u8700\u9ecd\u9f20\u5c5e\u672f\u8ff0\u6811\u675f\u620d\u7ad6\u5885\u5eb6\u6570\u6f31"],["cb40","\u8582\u8583\u8586\u8588",6,"\u8590",10,"\u859d",6,"\u85a5\u85a6\u85a7\u85a9\u85ab\u85ac\u85ad\u85b1",5,"\u85b8\u85ba",6,"\u85c2",6,"\u85ca",4,"\u85d1\u85d2"],["cb80","\u85d4\u85d6",5,"\u85dd",6,"\u85e5\u85e6\u85e7\u85e8\u85ea",14,"\u6055\u5237\u800d\u6454\u8870\u7529\u5e05\u6813\u62f4\u971c\u53cc\u723d\u8c01\u6c34\u7761\u7a0e\u542e\u77ac\u987a\u821c\u8bf4\u7855\u6714\u70c1\u65af\u6495\u5636\u601d\u79c1\u53f8\u4e1d\u6b7b\u8086\u5bfa\u55e3\u56db\u4f3a\u4f3c\u9972\u5df3\u677e\u8038\u6002\u9882\u9001\u5b8b\u8bbc\u8bf5\u641c\u8258\u64de\u55fd\u82cf\u9165\u4fd7\u7d20\u901f\u7c9f\u50f3\u5851\u6eaf\u5bbf\u8bc9\u8083\u9178\u849c\u7b97\u867d\u968b\u968f\u7ee5\u9ad3\u788e\u5c81\u7a57\u9042\u96a7\u795f\u5b59\u635f\u7b0b\u84d1\u68ad\u5506\u7f29\u7410\u7d22\u9501\u6240\u584c\u4ed6\u5b83\u5979\u5854"],["cc40","\u85f9\u85fa\u85fc\u85fd\u85fe\u8600",4,"\u8606",10,"\u8612\u8613\u8614\u8615\u8617",15,"\u8628\u862a",13,"\u8639\u863a\u863b\u863d\u863e\u863f\u8640"],["cc80","\u8641",11,"\u8652\u8653\u8655",4,"\u865b\u865c\u865d\u865f\u8660\u8661\u8663",7,"\u736d\u631e\u8e4b\u8e0f\u80ce\u82d4\u62ac\u53f0\u6cf0\u915e\u592a\u6001\u6c70\u574d\u644a\u8d2a\u762b\u6ee9\u575b\u6a80\u75f0\u6f6d\u8c2d\u8c08\u5766\u6bef\u8892\u78b3\u63a2\u53f9\u70ad\u6c64\u5858\u642a\u5802\u68e0\u819b\u5510\u7cd6\u5018\u8eba\u6dcc\u8d9f\u70eb\u638f\u6d9b\u6ed4\u7ee6\u8404\u6843\u9003\u6dd8\u9676\u8ba8\u5957\u7279\u85e4\u817e\u75bc\u8a8a\u68af\u5254\u8e22\u9511\u63d0\u9898\u8e44\u557c\u4f53\u66ff\u568f\u60d5\u6d95\u5243\u5c49\u5929\u6dfb\u586b\u7530\u751c\u606c\u8214\u8146\u6311\u6761\u8fe2\u773a\u8df3\u8d34\u94c1\u5e16\u5385\u542c\u70c3"],["cd40","\u866d\u866f\u8670\u8672",6,"\u8683",6,"\u868e",4,"\u8694\u8696",5,"\u869e",4,"\u86a5\u86a6\u86ab\u86ad\u86ae\u86b2\u86b3\u86b7\u86b8\u86b9\u86bb",4,"\u86c1\u86c2\u86c3\u86c5\u86c8\u86cc\u86cd\u86d2\u86d3\u86d5\u86d6\u86d7\u86da\u86dc"],["cd80","\u86dd\u86e0\u86e1\u86e2\u86e3\u86e5\u86e6\u86e7\u86e8\u86ea\u86eb\u86ec\u86ef\u86f5\u86f6\u86f7\u86fa\u86fb\u86fc\u86fd\u86ff\u8701\u8704\u8705\u8706\u870b\u870c\u870e\u870f\u8710\u8711\u8714\u8716\u6c40\u5ef7\u505c\u4ead\u5ead\u633a\u8247\u901a\u6850\u916e\u77b3\u540c\u94dc\u5f64\u7ae5\u6876\u6345\u7b52\u7edf\u75db\u5077\u6295\u5934\u900f\u51f8\u79c3\u7a81\u56fe\u5f92\u9014\u6d82\u5c60\u571f\u5410\u5154\u6e4d\u56e2\u63a8\u9893\u817f\u8715\u892a\u9000\u541e\u5c6f\u81c0\u62d6\u6258\u8131\u9e35\u9640\u9a6e\u9a7c\u692d\u59a5\u62d3\u553e\u6316\u54c7\u86d9\u6d3c\u5a03\u74e6\u889c\u6b6a\u5916\u8c4c\u5f2f\u6e7e\u73a9\u987d\u4e38\u70f7\u5b8c\u7897\u633d\u665a\u7696\u60cb\u5b9b\u5a49\u4e07\u8155\u6c6a\u738b\u4ea1\u6789\u7f51\u5f80\u65fa\u671b\u5fd8\u5984\u5a01"],["ce40","\u8719\u871b\u871d\u871f\u8720\u8724\u8726\u8727\u8728\u872a\u872b\u872c\u872d\u872f\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873a\u873c\u873d\u8740",6,"\u874a\u874b\u874d\u874f\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875a",5,"\u8761\u8762\u8766",7,"\u876f\u8771\u8772\u8773\u8775"],["ce80","\u8777\u8778\u8779\u877a\u877f\u8780\u8781\u8784\u8786\u8787\u8789\u878a\u878c\u878e",4,"\u8794\u8795\u8796\u8798",6,"\u87a0",4,"\u5dcd\u5fae\u5371\u97e6\u8fdd\u6845\u56f4\u552f\u60df\u4e3a\u6f4d\u7ef4\u82c7\u840e\u59d4\u4f1f\u4f2a\u5c3e\u7eac\u672a\u851a\u5473\u754f\u80c3\u5582\u9b4f\u4f4d\u6e2d\u8c13\u5c09\u6170\u536b\u761f\u6e29\u868a\u6587\u95fb\u7eb9\u543b\u7a33\u7d0a\u95ee\u55e1\u7fc1\u74ee\u631d\u8717\u6da1\u7a9d\u6211\u65a1\u5367\u63e1\u6c83\u5deb\u545c\u94a8\u4e4c\u6c61\u8bec\u5c4b\u65e0\u829c\u68a7\u543e\u5434\u6bcb\u6b66\u4e94\u6342\u5348\u821e\u4f0d\u4fae\u575e\u620a\u96fe\u6664\u7269\u52ff\u52a1\u609f\u8bef\u6614\u7199\u6790\u897f\u7852\u77fd\u6670\u563b\u5438\u9521\u727a"],["cf40","\u87a5\u87a6\u87a7\u87a9\u87aa\u87ae\u87b0\u87b1\u87b2\u87b4\u87b6\u87b7\u87b8\u87b9\u87bb\u87bc\u87be\u87bf\u87c1",4,"\u87c7\u87c8\u87c9\u87cc",4,"\u87d4",6,"\u87dc\u87dd\u87de\u87df\u87e1\u87e2\u87e3\u87e4\u87e6\u87e7\u87e8\u87e9\u87eb\u87ec\u87ed\u87ef",9],["cf80","\u87fa\u87fb\u87fc\u87fd\u87ff\u8800\u8801\u8802\u8804",5,"\u880b",7,"\u8814\u8817\u8818\u8819\u881a\u881c",4,"\u8823\u7a00\u606f\u5e0c\u6089\u819d\u5915\u60dc\u7184\u70ef\u6eaa\u6c50\u7280\u6a84\u88ad\u5e2d\u4e60\u5ab3\u559c\u94e3\u6d17\u7cfb\u9699\u620f\u7ec6\u778e\u867e\u5323\u971e\u8f96\u6687\u5ce1\u4fa0\u72ed\u4e0b\u53a6\u590f\u5413\u6380\u9528\u5148\u4ed9\u9c9c\u7ea4\u54b8\u8d24\u8854\u8237\u95f2\u6d8e\u5f26\u5acc\u663e\u9669\u73b0\u732e\u53bf\u817a\u9985\u7fa1\u5baa\u9677\u9650\u7ebf\u76f8\u53a2\u9576\u9999\u7bb1\u8944\u6e58\u4e61\u7fd4\u7965\u8be6\u60f3\u54cd\u4eab\u9879\u5df7\u6a61\u50cf\u5411\u8c61\u8427\u785d\u9704\u524a\u54ee\u56a3\u9500\u6d88\u5bb5\u6dc6\u6653"],["d040","\u8824",13,"\u8833",5,"\u883a\u883b\u883d\u883e\u883f\u8841\u8842\u8843\u8846",5,"\u884e",5,"\u8855\u8856\u8858\u885a",6,"\u8866\u8867\u886a\u886d\u886f\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887a"],["d080","\u887b\u887c\u8880\u8883\u8886\u8887\u8889\u888a\u888c\u888e\u888f\u8890\u8891\u8893\u8894\u8895\u8897",4,"\u889d",4,"\u88a3\u88a5",5,"\u5c0f\u5b5d\u6821\u8096\u5578\u7b11\u6548\u6954\u4e9b\u6b47\u874e\u978b\u534f\u631f\u643a\u90aa\u659c\u80c1\u8c10\u5199\u68b0\u5378\u87f9\u61c8\u6cc4\u6cfb\u8c22\u5c51\u85aa\u82af\u950c\u6b23\u8f9b\u65b0\u5ffb\u5fc3\u4fe1\u8845\u661f\u8165\u7329\u60fa\u5174\u5211\u578b\u5f62\u90a2\u884c\u9192\u5e78\u674f\u6027\u59d3\u5144\u51f6\u80f8\u5308\u6c79\u96c4\u718a\u4f11\u4fee\u7f9e\u673d\u55c5\u9508\u79c0\u8896\u7ee3\u589f\u620c\u9700\u865a\u5618\u987b\u5f90\u8bb8\u84c4\u9157\u53d9\u65ed\u5e8f\u755c\u6064\u7d6e\u5a7f\u7eea\u7eed\u8f69\u55a7\u5ba3\u60ac\u65cb\u7384"],["d140","\u88ac\u88ae\u88af\u88b0\u88b2",4,"\u88b8\u88b9\u88ba\u88bb\u88bd\u88be\u88bf\u88c0\u88c3\u88c4\u88c7\u88c8\u88ca\u88cb\u88cc\u88cd\u88cf\u88d0\u88d1\u88d3\u88d6\u88d7\u88da",4,"\u88e0\u88e1\u88e6\u88e7\u88e9",6,"\u88f2\u88f5\u88f6\u88f7\u88fa\u88fb\u88fd\u88ff\u8900\u8901\u8903",5],["d180","\u8909\u890b",4,"\u8911\u8914",4,"\u891c",4,"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892c\u892d\u892e\u892f\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7eda\u9774\u859b\u5b66\u7a74\u96ea\u8840\u52cb\u718f\u5faa\u65ec\u8be2\u5bfb\u9a6f\u5de1\u6b89\u6c5b\u8bad\u8baf\u900a\u8fc5\u538b\u62bc\u9e26\u9e2d\u5440\u4e2b\u82bd\u7259\u869c\u5d16\u8859\u6daf\u96c5\u54d1\u4e9a\u8bb6\u7109\u54bd\u9609\u70df\u6df9\u76d0\u4e25\u7814\u8712\u5ca9\u5ef6\u8a00\u989c\u960e\u708e\u6cbf\u5944\u63a9\u773c\u884d\u6f14\u8273\u5830\u71d5\u538c\u781a\u96c1\u5501\u5f66\u7130\u5bb4\u8c1a\u9a8c\u6b83\u592e\u9e2f\u79e7\u6768\u626c\u4f6f\u75a1\u7f8a\u6d0b\u9633\u6c27\u4ef0\u75d2\u517b\u6837\u6f3e\u9080\u8170\u5996\u7476"],["d240","\u8938",8,"\u8942\u8943\u8945",24,"\u8960",5,"\u8967",19,"\u897c"],["d280","\u897d\u897e\u8980\u8982\u8984\u8985\u8987",26,"\u6447\u5c27\u9065\u7a91\u8c23\u59da\u54ac\u8200\u836f\u8981\u8000\u6930\u564e\u8036\u7237\u91ce\u51b6\u4e5f\u9875\u6396\u4e1a\u53f6\u66f3\u814b\u591c\u6db2\u4e00\u58f9\u533b\u63d6\u94f1\u4f9d\u4f0a\u8863\u9890\u5937\u9057\u79fb\u4eea\u80f0\u7591\u6c82\u5b9c\u59e8\u5f5d\u6905\u8681\u501a\u5df2\u4e59\u77e3\u4ee5\u827a\u6291\u6613\u9091\u5c79\u4ebf\u5f79\u81c6\u9038\u8084\u75ab\u4ea6\u88d4\u610f\u6bc5\u5fc6\u4e49\u76ca\u6ea2\u8be3\u8bae\u8c0a\u8bd1\u5f02\u7ffc\u7fcc\u7ece\u8335\u836b\u56e0\u6bb7\u97f3\u9634\u59fb\u541f\u94f6\u6deb\u5bc5\u996e\u5c39\u5f15\u9690"],["d340","\u89a2",30,"\u89c3\u89cd\u89d3\u89d4\u89d5\u89d7\u89d8\u89d9\u89db\u89dd\u89df\u89e0\u89e1\u89e2\u89e4\u89e7\u89e8\u89e9\u89ea\u89ec\u89ed\u89ee\u89f0\u89f1\u89f2\u89f4",6],["d380","\u89fb",4,"\u8a01",5,"\u8a08",21,"\u5370\u82f1\u6a31\u5a74\u9e70\u5e94\u7f28\u83b9\u8424\u8425\u8367\u8747\u8fce\u8d62\u76c8\u5f71\u9896\u786c\u6620\u54df\u62e5\u4f63\u81c3\u75c8\u5eb8\u96cd\u8e0a\u86f9\u548f\u6cf3\u6d8c\u6c38\u607f\u52c7\u7528\u5e7d\u4f18\u60a0\u5fe7\u5c24\u7531\u90ae\u94c0\u72b9\u6cb9\u6e38\u9149\u6709\u53cb\u53f3\u4f51\u91c9\u8bf1\u53c8\u5e7c\u8fc2\u6de4\u4e8e\u76c2\u6986\u865e\u611a\u8206\u4f59\u4fde\u903e\u9c7c\u6109\u6e1d\u6e14\u9685\u4e88\u5a31\u96e8\u4e0e\u5c7f\u79b9\u5b87\u8bed\u7fbd\u7389\u57df\u828b\u90c1\u5401\u9047\u55bb\u5cea\u5fa1\u6108\u6b32\u72f1\u80b2\u8a89"],["d440","\u8a1e",31,"\u8a3f",8,"\u8a49",21],["d480","\u8a5f",25,"\u8a7a",6,"\u6d74\u5bd3\u88d5\u9884\u8c6b\u9a6d\u9e33\u6e0a\u51a4\u5143\u57a3\u8881\u539f\u63f4\u8f95\u56ed\u5458\u5706\u733f\u6e90\u7f18\u8fdc\u82d1\u613f\u6028\u9662\u66f0\u7ea6\u8d8a\u8dc3\u94a5\u5cb3\u7ca4\u6708\u60a6\u9605\u8018\u4e91\u90e7\u5300\u9668\u5141\u8fd0\u8574\u915d\u6655\u97f5\u5b55\u531d\u7838\u6742\u683d\u54c9\u707e\u5bb0\u8f7d\u518d\u5728\u54b1\u6512\u6682\u8d5e\u8d43\u810f\u846c\u906d\u7cdf\u51ff\u85fb\u67a3\u65e9\u6fa1\u86a4\u8e81\u566a\u9020\u7682\u7076\u71e5\u8d23\u62e9\u5219\u6cfd\u8d3c\u600e\u589e\u618e\u66fe\u8d60\u624e\u55b3\u6e23\u672d\u8f67"],["d540","\u8a81",7,"\u8a8b",7,"\u8a94",46],["d580","\u8ac3",32,"\u94e1\u95f8\u7728\u6805\u69a8\u548b\u4e4d\u70b8\u8bc8\u6458\u658b\u5b85\u7a84\u503a\u5be8\u77bb\u6be1\u8a79\u7c98\u6cbe\u76cf\u65a9\u8f97\u5d2d\u5c55\u8638\u6808\u5360\u6218\u7ad9\u6e5b\u7efd\u6a1f\u7ae0\u5f70\u6f33\u5f20\u638c\u6da8\u6756\u4e08\u5e10\u8d26\u4ed7\u80c0\u7634\u969c\u62db\u662d\u627e\u6cbc\u8d75\u7167\u7f69\u5146\u8087\u53ec\u906e\u6298\u54f2\u86f0\u8f99\u8005\u9517\u8517\u8fd9\u6d59\u73cd\u659f\u771f\u7504\u7827\u81fb\u8d1e\u9488\u4fa6\u6795\u75b9\u8bca\u9707\u632f\u9547\u9635\u84b8\u6323\u7741\u5f81\u72f0\u4e89\u6014\u6574\u62ef\u6b63\u653f"],["d640","\u8ae4",34,"\u8b08",27],["d680","\u8b24\u8b25\u8b27",30,"\u5e27\u75c7\u90d1\u8bc1\u829d\u679d\u652f\u5431\u8718\u77e5\u80a2\u8102\u6c41\u4e4b\u7ec7\u804c\u76f4\u690d\u6b96\u6267\u503c\u4f84\u5740\u6307\u6b62\u8dbe\u53ea\u65e8\u7eb8\u5fd7\u631a\u63b7\u81f3\u81f4\u7f6e\u5e1c\u5cd9\u5236\u667a\u79e9\u7a1a\u8d28\u7099\u75d4\u6ede\u6cbb\u7a92\u4e2d\u76c5\u5fe0\u949f\u8877\u7ec8\u79cd\u80bf\u91cd\u4ef2\u4f17\u821f\u5468\u5dde\u6d32\u8bcc\u7ca5\u8f74\u8098\u5e1a\u5492\u76b1\u5b99\u663c\u9aa4\u73e0\u682a\u86db\u6731\u732a\u8bf8\u8bdb\u9010\u7af9\u70db\u716e\u62c4\u77a9\u5631\u4e3b\u8457\u67f1\u52a9\u86c0\u8d2e\u94f8\u7b51"],["d740","\u8b46",31,"\u8b67",4,"\u8b6d",25],["d780","\u8b87",24,"\u8bac\u8bb1\u8bbb\u8bc7\u8bd0\u8bea\u8c09\u8c1e\u4f4f\u6ce8\u795d\u9a7b\u6293\u722a\u62fd\u4e13\u7816\u8f6c\u64b0\u8d5a\u7bc6\u6869\u5e84\u88c5\u5986\u649e\u58ee\u72b6\u690e\u9525\u8ffd\u8d58\u5760\u7f00\u8c06\u51c6\u6349\u62d9\u5353\u684c\u7422\u8301\u914c\u5544\u7740\u707c\u6d4a\u5179\u54a8\u8d44\u59ff\u6ecb\u6dc4\u5b5c\u7d2b\u4ed4\u7c7d\u6ed3\u5b50\u81ea\u6e0d\u5b57\u9b03\u68d5\u8e2a\u5b97\u7efc\u603b\u7eb5\u90b9\u8d70\u594f\u63cd\u79df\u8db3\u5352\u65cf\u7956\u8bc5\u963b\u7ec4\u94bb\u7e82\u5634\u9189\u6700\u7f6a\u5c0a\u9075\u6628\u5de6\u4f50\u67de\u505a\u4f5c\u5750\u5ea7"],["d840","\u8c38",8,"\u8c42\u8c43\u8c44\u8c45\u8c48\u8c4a\u8c4b\u8c4d",7,"\u8c56\u8c57\u8c58\u8c59\u8c5b",5,"\u8c63",6,"\u8c6c",6,"\u8c74\u8c75\u8c76\u8c77\u8c7b",6,"\u8c83\u8c84\u8c86\u8c87"],["d880","\u8c88\u8c8b\u8c8d",6,"\u8c95\u8c96\u8c97\u8c99",20,"\u4e8d\u4e0c\u5140\u4e10\u5eff\u5345\u4e15\u4e98\u4e1e\u9b32\u5b6c\u5669\u4e28\u79ba\u4e3f\u5315\u4e47\u592d\u723b\u536e\u6c10\u56df\u80e4\u9997\u6bd3\u777e\u9f17\u4e36\u4e9f\u9f10\u4e5c\u4e69\u4e93\u8288\u5b5b\u556c\u560f\u4ec4\u538d\u539d\u53a3\u53a5\u53ae\u9765\u8d5d\u531a\u53f5\u5326\u532e\u533e\u8d5c\u5366\u5363\u5202\u5208\u520e\u522d\u5233\u523f\u5240\u524c\u525e\u5261\u525c\u84af\u527d\u5282\u5281\u5290\u5293\u5182\u7f54\u4ebb\u4ec3\u4ec9\u4ec2\u4ee8\u4ee1\u4eeb\u4ede\u4f1b\u4ef3\u4f22\u4f64\u4ef5\u4f25\u4f27\u4f09\u4f2b\u4f5e\u4f67\u6538\u4f5a\u4f5d"],["d940","\u8cae",62],["d980","\u8ced",32,"\u4f5f\u4f57\u4f32\u4f3d\u4f76\u4f74\u4f91\u4f89\u4f83\u4f8f\u4f7e\u4f7b\u4faa\u4f7c\u4fac\u4f94\u4fe6\u4fe8\u4fea\u4fc5\u4fda\u4fe3\u4fdc\u4fd1\u4fdf\u4ff8\u5029\u504c\u4ff3\u502c\u500f\u502e\u502d\u4ffe\u501c\u500c\u5025\u5028\u507e\u5043\u5055\u5048\u504e\u506c\u507b\u50a5\u50a7\u50a9\u50ba\u50d6\u5106\u50ed\u50ec\u50e6\u50ee\u5107\u510b\u4edd\u6c3d\u4f58\u4f65\u4fce\u9fa0\u6c46\u7c74\u516e\u5dfd\u9ec9\u9998\u5181\u5914\u52f9\u530d\u8a07\u5310\u51eb\u5919\u5155\u4ea0\u5156\u4eb3\u886e\u88a4\u4eb5\u8114\u88d2\u7980\u5b34\u8803\u7fb8\u51ab\u51b1\u51bd\u51bc"],["da40","\u8d0e",14,"\u8d20\u8d51\u8d52\u8d57\u8d5f\u8d65\u8d68\u8d69\u8d6a\u8d6c\u8d6e\u8d6f\u8d71\u8d72\u8d78",8,"\u8d82\u8d83\u8d86\u8d87\u8d88\u8d89\u8d8c",4,"\u8d92\u8d93\u8d95",9,"\u8da0\u8da1"],["da80","\u8da2\u8da4",12,"\u8db2\u8db6\u8db7\u8db9\u8dbb\u8dbd\u8dc0\u8dc1\u8dc2\u8dc5\u8dc7\u8dc8\u8dc9\u8dca\u8dcd\u8dd0\u8dd2\u8dd3\u8dd4\u51c7\u5196\u51a2\u51a5\u8ba0\u8ba6\u8ba7\u8baa\u8bb4\u8bb5\u8bb7\u8bc2\u8bc3\u8bcb\u8bcf\u8bce\u8bd2\u8bd3\u8bd4\u8bd6\u8bd8\u8bd9\u8bdc\u8bdf\u8be0\u8be4\u8be8\u8be9\u8bee\u8bf0\u8bf3\u8bf6\u8bf9\u8bfc\u8bff\u8c00\u8c02\u8c04\u8c07\u8c0c\u8c0f\u8c11\u8c12\u8c14\u8c15\u8c16\u8c19\u8c1b\u8c18\u8c1d\u8c1f\u8c20\u8c21\u8c25\u8c27\u8c2a\u8c2b\u8c2e\u8c2f\u8c32\u8c33\u8c35\u8c36\u5369\u537a\u961d\u9622\u9621\u9631\u962a\u963d\u963c\u9642\u9649\u9654\u965f\u9667\u966c\u9672\u9674\u9688\u968d\u9697\u96b0\u9097\u909b\u909d\u9099\u90ac\u90a1\u90b4\u90b3\u90b6\u90ba"],["db40","\u8dd5\u8dd8\u8dd9\u8ddc\u8de0\u8de1\u8de2\u8de5\u8de6\u8de7\u8de9\u8ded\u8dee\u8df0\u8df1\u8df2\u8df4\u8df6\u8dfc\u8dfe",6,"\u8e06\u8e07\u8e08\u8e0b\u8e0d\u8e0e\u8e10\u8e11\u8e12\u8e13\u8e15",7,"\u8e20\u8e21\u8e24",4,"\u8e2b\u8e2d\u8e30\u8e32\u8e33\u8e34\u8e36\u8e37\u8e38\u8e3b\u8e3c\u8e3e"],["db80","\u8e3f\u8e43\u8e45\u8e46\u8e4c",4,"\u8e53",5,"\u8e5a",11,"\u8e67\u8e68\u8e6a\u8e6b\u8e6e\u8e71\u90b8\u90b0\u90cf\u90c5\u90be\u90d0\u90c4\u90c7\u90d3\u90e6\u90e2\u90dc\u90d7\u90db\u90eb\u90ef\u90fe\u9104\u9122\u911e\u9123\u9131\u912f\u9139\u9143\u9146\u520d\u5942\u52a2\u52ac\u52ad\u52be\u54ff\u52d0\u52d6\u52f0\u53df\u71ee\u77cd\u5ef4\u51f5\u51fc\u9b2f\u53b6\u5f01\u755a\u5def\u574c\u57a9\u57a1\u587e\u58bc\u58c5\u58d1\u5729\u572c\u572a\u5733\u5739\u572e\u572f\u575c\u573b\u5742\u5769\u5785\u576b\u5786\u577c\u577b\u5768\u576d\u5776\u5773\u57ad\u57a4\u578c\u57b2\u57cf\u57a7\u57b4\u5793\u57a0\u57d5\u57d8\u57da\u57d9\u57d2\u57b8\u57f4\u57ef\u57f8\u57e4\u57dd"],["dc40","\u8e73\u8e75\u8e77",4,"\u8e7d\u8e7e\u8e80\u8e82\u8e83\u8e84\u8e86\u8e88",6,"\u8e91\u8e92\u8e93\u8e95",6,"\u8e9d\u8e9f",11,"\u8ead\u8eae\u8eb0\u8eb1\u8eb3",6,"\u8ebb",7],["dc80","\u8ec3",10,"\u8ecf",21,"\u580b\u580d\u57fd\u57ed\u5800\u581e\u5819\u5844\u5820\u5865\u586c\u5881\u5889\u589a\u5880\u99a8\u9f19\u61ff\u8279\u827d\u827f\u828f\u828a\u82a8\u8284\u828e\u8291\u8297\u8299\u82ab\u82b8\u82be\u82b0\u82c8\u82ca\u82e3\u8298\u82b7\u82ae\u82cb\u82cc\u82c1\u82a9\u82b4\u82a1\u82aa\u829f\u82c4\u82ce\u82a4\u82e1\u8309\u82f7\u82e4\u830f\u8307\u82dc\u82f4\u82d2\u82d8\u830c\u82fb\u82d3\u8311\u831a\u8306\u8314\u8315\u82e0\u82d5\u831c\u8351\u835b\u835c\u8308\u8392\u833c\u8334\u8331\u839b\u835e\u832f\u834f\u8347\u8343\u835f\u8340\u8317\u8360\u832d\u833a\u8333\u8366\u8365"],["dd40","\u8ee5",62],["dd80","\u8f24",32,"\u8368\u831b\u8369\u836c\u836a\u836d\u836e\u83b0\u8378\u83b3\u83b4\u83a0\u83aa\u8393\u839c\u8385\u837c\u83b6\u83a9\u837d\u83b8\u837b\u8398\u839e\u83a8\u83ba\u83bc\u83c1\u8401\u83e5\u83d8\u5807\u8418\u840b\u83dd\u83fd\u83d6\u841c\u8438\u8411\u8406\u83d4\u83df\u840f\u8403\u83f8\u83f9\u83ea\u83c5\u83c0\u8426\u83f0\u83e1\u845c\u8451\u845a\u8459\u8473\u8487\u8488\u847a\u8489\u8478\u843c\u8446\u8469\u8476\u848c\u848e\u8431\u846d\u84c1\u84cd\u84d0\u84e6\u84bd\u84d3\u84ca\u84bf\u84ba\u84e0\u84a1\u84b9\u84b4\u8497\u84e5\u84e3\u850c\u750d\u8538\u84f0\u8539\u851f\u853a"],["de40","\u8f45",32,"\u8f6a\u8f80\u8f8c\u8f92\u8f9d\u8fa0\u8fa1\u8fa2\u8fa4\u8fa5\u8fa6\u8fa7\u8faa\u8fac\u8fad\u8fae\u8faf\u8fb2\u8fb3\u8fb4\u8fb5\u8fb7\u8fb8\u8fba\u8fbb\u8fbc\u8fbf\u8fc0\u8fc3\u8fc6"],["de80","\u8fc9",4,"\u8fcf\u8fd2\u8fd6\u8fd7\u8fda\u8fe0\u8fe1\u8fe3\u8fe7\u8fec\u8fef\u8ff1\u8ff2\u8ff4\u8ff5\u8ff6\u8ffa\u8ffb\u8ffc\u8ffe\u8fff\u9007\u9008\u900c\u900e\u9013\u9015\u9018\u8556\u853b\u84ff\u84fc\u8559\u8548\u8568\u8564\u855e\u857a\u77a2\u8543\u8572\u857b\u85a4\u85a8\u8587\u858f\u8579\u85ae\u859c\u8585\u85b9\u85b7\u85b0\u85d3\u85c1\u85dc\u85ff\u8627\u8605\u8629\u8616\u863c\u5efe\u5f08\u593c\u5941\u8037\u5955\u595a\u5958\u530f\u5c22\u5c25\u5c2c\u5c34\u624c\u626a\u629f\u62bb\u62ca\u62da\u62d7\u62ee\u6322\u62f6\u6339\u634b\u6343\u63ad\u63f6\u6371\u637a\u638e\u63b4\u636d\u63ac\u638a\u6369\u63ae\u63bc\u63f2\u63f8\u63e0\u63ff\u63c4\u63de\u63ce\u6452\u63c6\u63be\u6445\u6441\u640b\u641b\u6420\u640c\u6426\u6421\u645e\u6484\u646d\u6496"],["df40","\u9019\u901c\u9023\u9024\u9025\u9027",5,"\u9030",4,"\u9037\u9039\u903a\u903d\u903f\u9040\u9043\u9045\u9046\u9048",4,"\u904e\u9054\u9055\u9056\u9059\u905a\u905c",5,"\u9064\u9066\u9067\u9069\u906a\u906b\u906c\u906f",4,"\u9076",6,"\u907e\u9081"],["df80","\u9084\u9085\u9086\u9087\u9089\u908a\u908c",4,"\u9092\u9094\u9096\u9098\u909a\u909c\u909e\u909f\u90a0\u90a4\u90a5\u90a7\u90a8\u90a9\u90ab\u90ad\u90b2\u90b7\u90bc\u90bd\u90bf\u90c0\u647a\u64b7\u64b8\u6499\u64ba\u64c0\u64d0\u64d7\u64e4\u64e2\u6509\u6525\u652e\u5f0b\u5fd2\u7519\u5f11\u535f\u53f1\u53fd\u53e9\u53e8\u53fb\u5412\u5416\u5406\u544b\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549a\u549b\u5484\u5476\u5466\u549d\u54d0\u54ad\u54c2\u54b4\u54d2\u54a7\u54a6\u54d3\u54d4\u5472\u54a3\u54d5\u54bb\u54bf\u54cc\u54d9\u54da\u54dc\u54a9\u54aa\u54a4\u54dd\u54cf\u54de\u551b\u54e7\u5520\u54fd\u5514\u54f3\u5522\u5523\u550f\u5511\u5527\u552a\u5567\u558f\u55b5\u5549\u556d\u5541\u5555\u553f\u5550\u553c"],["e040","\u90c2\u90c3\u90c6\u90c8\u90c9\u90cb\u90cc\u90cd\u90d2\u90d4\u90d5\u90d6\u90d8\u90d9\u90da\u90de\u90df\u90e0\u90e3\u90e4\u90e5\u90e9\u90ea\u90ec\u90ee\u90f0\u90f1\u90f2\u90f3\u90f5\u90f6\u90f7\u90f9\u90fa\u90fb\u90fc\u90ff\u9100\u9101\u9103\u9105",19,"\u911a\u911b\u911c"],["e080","\u911d\u911f\u9120\u9121\u9124",10,"\u9130\u9132",6,"\u913a",8,"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555c\u558b\u55d2\u5583\u55b1\u55b9\u5588\u5581\u559f\u557e\u55d6\u5591\u557b\u55df\u55bd\u55be\u5594\u5599\u55ea\u55f7\u55c9\u561f\u55d1\u55eb\u55ec\u55d4\u55e6\u55dd\u55c4\u55ef\u55e5\u55f2\u55f3\u55cc\u55cd\u55e8\u55f5\u55e4\u8f94\u561e\u5608\u560c\u5601\u5624\u5623\u55fe\u5600\u5627\u562d\u5658\u5639\u5657\u562c\u564d\u5662\u5659\u565c\u564c\u5654\u5686\u5664\u5671\u566b\u567b\u567c\u5685\u5693\u56af\u56d4\u56d7\u56dd\u56e1\u56f5\u56eb\u56f9\u56ff\u5704\u570a\u5709\u571c\u5e0f\u5e19\u5e14\u5e11\u5e31\u5e3b\u5e3c"],["e140","\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915b\u915c\u915f\u9160\u9166\u9167\u9168\u916b\u916d\u9173\u917a\u917b\u917c\u9180",4,"\u9186\u9188\u918a\u918e\u918f\u9193",6,"\u919c",5,"\u91a4",5,"\u91ab\u91ac\u91b0\u91b1\u91b2\u91b3\u91b6\u91b7\u91b8\u91b9\u91bb"],["e180","\u91bc",10,"\u91c8\u91cb\u91d0\u91d2",9,"\u91dd",8,"\u5e37\u5e44\u5e54\u5e5b\u5e5e\u5e61\u5c8c\u5c7a\u5c8d\u5c90\u5c96\u5c88\u5c98\u5c99\u5c91\u5c9a\u5c9c\u5cb5\u5ca2\u5cbd\u5cac\u5cab\u5cb1\u5ca3\u5cc1\u5cb7\u5cc4\u5cd2\u5ce4\u5ccb\u5ce5\u5d02\u5d03\u5d27\u5d26\u5d2e\u5d24\u5d1e\u5d06\u5d1b\u5d58\u5d3e\u5d34\u5d3d\u5d6c\u5d5b\u5d6f\u5d5d\u5d6b\u5d4b\u5d4a\u5d69\u5d74\u5d82\u5d99\u5d9d\u8c73\u5db7\u5dc5\u5f73\u5f77\u5f82\u5f87\u5f89\u5f8c\u5f95\u5f99\u5f9c\u5fa8\u5fad\u5fb5\u5fbc\u8862\u5f61\u72ad\u72b0\u72b4\u72b7\u72b8\u72c3\u72c1\u72ce\u72cd\u72d2\u72e8\u72ef\u72e9\u72f2\u72f4\u72f7\u7301\u72f3\u7303\u72fa"],["e240","\u91e6",62],["e280","\u9225",32,"\u72fb\u7317\u7313\u7321\u730a\u731e\u731d\u7315\u7322\u7339\u7325\u732c\u7338\u7331\u7350\u734d\u7357\u7360\u736c\u736f\u737e\u821b\u5925\u98e7\u5924\u5902\u9963\u9967",5,"\u9974\u9977\u997d\u9980\u9984\u9987\u998a\u998d\u9990\u9991\u9993\u9994\u9995\u5e80\u5e91\u5e8b\u5e96\u5ea5\u5ea0\u5eb9\u5eb5\u5ebe\u5eb3\u8d53\u5ed2\u5ed1\u5edb\u5ee8\u5eea\u81ba\u5fc4\u5fc9\u5fd6\u5fcf\u6003\u5fee\u6004\u5fe1\u5fe4\u5ffe\u6005\u6006\u5fea\u5fed\u5ff8\u6019\u6035\u6026\u601b\u600f\u600d\u6029\u602b\u600a\u603f\u6021\u6078\u6079\u607b\u607a\u6042"],["e340","\u9246",45,"\u9275",16],["e380","\u9286",7,"\u928f",24,"\u606a\u607d\u6096\u609a\u60ad\u609d\u6083\u6092\u608c\u609b\u60ec\u60bb\u60b1\u60dd\u60d8\u60c6\u60da\u60b4\u6120\u6126\u6115\u6123\u60f4\u6100\u610e\u612b\u614a\u6175\u61ac\u6194\u61a7\u61b7\u61d4\u61f5\u5fdd\u96b3\u95e9\u95eb\u95f1\u95f3\u95f5\u95f6\u95fc\u95fe\u9603\u9604\u9606\u9608\u960a\u960b\u960c\u960d\u960f\u9612\u9615\u9616\u9617\u9619\u961a\u4e2c\u723f\u6215\u6c35\u6c54\u6c5c\u6c4a\u6ca3\u6c85\u6c90\u6c94\u6c8c\u6c68\u6c69\u6c74\u6c76\u6c86\u6ca9\u6cd0\u6cd4\u6cad\u6cf7\u6cf8\u6cf1\u6cd7\u6cb2\u6ce0\u6cd6\u6cfa\u6ceb\u6cee\u6cb1\u6cd3\u6cef\u6cfe"],["e440","\u92a8",5,"\u92af",24,"\u92c9",31],["e480","\u92e9",32,"\u6d39\u6d27\u6d0c\u6d43\u6d48\u6d07\u6d04\u6d19\u6d0e\u6d2b\u6d4d\u6d2e\u6d35\u6d1a\u6d4f\u6d52\u6d54\u6d33\u6d91\u6d6f\u6d9e\u6da0\u6d5e\u6d93\u6d94\u6d5c\u6d60\u6d7c\u6d63\u6e1a\u6dc7\u6dc5\u6dde\u6e0e\u6dbf\u6de0\u6e11\u6de6\u6ddd\u6dd9\u6e16\u6dab\u6e0c\u6dae\u6e2b\u6e6e\u6e4e\u6e6b\u6eb2\u6e5f\u6e86\u6e53\u6e54\u6e32\u6e25\u6e44\u6edf\u6eb1\u6e98\u6ee0\u6f2d\u6ee2\u6ea5\u6ea7\u6ebd\u6ebb\u6eb7\u6ed7\u6eb4\u6ecf\u6e8f\u6ec2\u6e9f\u6f62\u6f46\u6f47\u6f24\u6f15\u6ef9\u6f2f\u6f36\u6f4b\u6f74\u6f2a\u6f09\u6f29\u6f89\u6f8d\u6f8c\u6f78\u6f72\u6f7c\u6f7a\u6fd1"],["e540","\u930a",51,"\u933f",10],["e580","\u934a",31,"\u936b\u6fc9\u6fa7\u6fb9\u6fb6\u6fc2\u6fe1\u6fee\u6fde\u6fe0\u6fef\u701a\u7023\u701b\u7039\u7035\u704f\u705e\u5b80\u5b84\u5b95\u5b93\u5ba5\u5bb8\u752f\u9a9e\u6434\u5be4\u5bee\u8930\u5bf0\u8e47\u8b07\u8fb6\u8fd3\u8fd5\u8fe5\u8fee\u8fe4\u8fe9\u8fe6\u8ff3\u8fe8\u9005\u9004\u900b\u9026\u9011\u900d\u9016\u9021\u9035\u9036\u902d\u902f\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905b\u66b9\u9074\u907d\u9082\u9088\u9083\u908b\u5f50\u5f57\u5f56\u5f58\u5c3b\u54ab\u5c50\u5c59\u5b71\u5c63\u5c66\u7fbc\u5f2a\u5f29\u5f2d\u8274\u5f3c\u9b3b\u5c6e\u5981\u5983\u598d\u59a9\u59aa\u59a3"],["e640","\u936c",34,"\u9390",27],["e680","\u93ac",29,"\u93cb\u93cc\u93cd\u5997\u59ca\u59ab\u599e\u59a4\u59d2\u59b2\u59af\u59d7\u59be\u5a05\u5a06\u59dd\u5a08\u59e3\u59d8\u59f9\u5a0c\u5a09\u5a32\u5a34\u5a11\u5a23\u5a13\u5a40\u5a67\u5a4a\u5a55\u5a3c\u5a62\u5a75\u80ec\u5aaa\u5a9b\u5a77\u5a7a\u5abe\u5aeb\u5ab2\u5ad2\u5ad4\u5ab8\u5ae0\u5ae3\u5af1\u5ad6\u5ae6\u5ad8\u5adc\u5b09\u5b17\u5b16\u5b32\u5b37\u5b40\u5c15\u5c1c\u5b5a\u5b65\u5b73\u5b51\u5b53\u5b62\u9a75\u9a77\u9a78\u9a7a\u9a7f\u9a7d\u9a80\u9a81\u9a85\u9a88\u9a8a\u9a90\u9a92\u9a93\u9a96\u9a98\u9a9b\u9a9c\u9a9d\u9a9f\u9aa0\u9aa2\u9aa3\u9aa5\u9aa7\u7e9f\u7ea1\u7ea3\u7ea5\u7ea8\u7ea9"],["e740","\u93ce",7,"\u93d7",54],["e780","\u940e",32,"\u7ead\u7eb0\u7ebe\u7ec0\u7ec1\u7ec2\u7ec9\u7ecb\u7ecc\u7ed0\u7ed4\u7ed7\u7edb\u7ee0\u7ee1\u7ee8\u7eeb\u7eee\u7eef\u7ef1\u7ef2\u7f0d\u7ef6\u7efa\u7efb\u7efe\u7f01\u7f02\u7f03\u7f07\u7f08\u7f0b\u7f0c\u7f0f\u7f11\u7f12\u7f17\u7f19\u7f1c\u7f1b\u7f1f\u7f21",6,"\u7f2a\u7f2b\u7f2c\u7f2d\u7f2f",4,"\u7f35\u5e7a\u757f\u5ddb\u753e\u9095\u738e\u7391\u73ae\u73a2\u739f\u73cf\u73c2\u73d1\u73b7\u73b3\u73c0\u73c9\u73c8\u73e5\u73d9\u987c\u740a\u73e9\u73e7\u73de\u73ba\u73f2\u740f\u742a\u745b\u7426\u7425\u7428\u7430\u742e\u742c"],["e840","\u942f",14,"\u943f",43,"\u946c\u946d\u946e\u946f"],["e880","\u9470",20,"\u9491\u9496\u9498\u94c7\u94cf\u94d3\u94d4\u94da\u94e6\u94fb\u951c\u9520\u741b\u741a\u7441\u745c\u7457\u7455\u7459\u7477\u746d\u747e\u749c\u748e\u7480\u7481\u7487\u748b\u749e\u74a8\u74a9\u7490\u74a7\u74d2\u74ba\u97ea\u97eb\u97ec\u674c\u6753\u675e\u6748\u6769\u67a5\u6787\u676a\u6773\u6798\u67a7\u6775\u67a8\u679e\u67ad\u678b\u6777\u677c\u67f0\u6809\u67d8\u680a\u67e9\u67b0\u680c\u67d9\u67b5\u67da\u67b3\u67dd\u6800\u67c3\u67b8\u67e2\u680e\u67c1\u67fd\u6832\u6833\u6860\u6861\u684e\u6862\u6844\u6864\u6883\u681d\u6855\u6866\u6841\u6867\u6840\u683e\u684a\u6849\u6829\u68b5\u688f\u6874\u6877\u6893\u686b\u68c2\u696e\u68fc\u691f\u6920\u68f9"],["e940","\u9527\u9533\u953d\u9543\u9548\u954b\u9555\u955a\u9560\u956e\u9574\u9575\u9577",7,"\u9580",42],["e980","\u95ab",32,"\u6924\u68f0\u690b\u6901\u6957\u68e3\u6910\u6971\u6939\u6960\u6942\u695d\u6984\u696b\u6980\u6998\u6978\u6934\u69cc\u6987\u6988\u69ce\u6989\u6966\u6963\u6979\u699b\u69a7\u69bb\u69ab\u69ad\u69d4\u69b1\u69c1\u69ca\u69df\u6995\u69e0\u698d\u69ff\u6a2f\u69ed\u6a17\u6a18\u6a65\u69f2\u6a44\u6a3e\u6aa0\u6a50\u6a5b\u6a35\u6a8e\u6a79\u6a3d\u6a28\u6a58\u6a7c\u6a91\u6a90\u6aa9\u6a97\u6aab\u7337\u7352\u6b81\u6b82\u6b87\u6b84\u6b92\u6b93\u6b8d\u6b9a\u6b9b\u6ba1\u6baa\u8f6b\u8f6d\u8f71\u8f72\u8f73\u8f75\u8f76\u8f78\u8f77\u8f79\u8f7a\u8f7c\u8f7e\u8f81\u8f82\u8f84\u8f87\u8f8b"],["ea40","\u95cc",27,"\u95ec\u95ff\u9607\u9613\u9618\u961b\u961e\u9620\u9623",6,"\u962b\u962c\u962d\u962f\u9630\u9637\u9638\u9639\u963a\u963e\u9641\u9643\u964a\u964e\u964f\u9651\u9652\u9653\u9656\u9657"],["ea80","\u9658\u9659\u965a\u965c\u965d\u965e\u9660\u9663\u9665\u9666\u966b\u966d",4,"\u9673\u9678",12,"\u9687\u9689\u968a\u8f8d\u8f8e\u8f8f\u8f98\u8f9a\u8ece\u620b\u6217\u621b\u621f\u6222\u6221\u6225\u6224\u622c\u81e7\u74ef\u74f4\u74ff\u750f\u7511\u7513\u6534\u65ee\u65ef\u65f0\u660a\u6619\u6772\u6603\u6615\u6600\u7085\u66f7\u661d\u6634\u6631\u6636\u6635\u8006\u665f\u6654\u6641\u664f\u6656\u6661\u6657\u6677\u6684\u668c\u66a7\u669d\u66be\u66db\u66dc\u66e6\u66e9\u8d32\u8d33\u8d36\u8d3b\u8d3d\u8d40\u8d45\u8d46\u8d48\u8d49\u8d47\u8d4d\u8d55\u8d59\u89c7\u89ca\u89cb\u89cc\u89ce\u89cf\u89d0\u89d1\u726e\u729f\u725d\u7266\u726f\u727e\u727f\u7284\u728b\u728d\u728f\u7292\u6308\u6332\u63b0"],["eb40","\u968c\u968e\u9691\u9692\u9693\u9695\u9696\u969a\u969b\u969d",9,"\u96a8",7,"\u96b1\u96b2\u96b4\u96b5\u96b7\u96b8\u96ba\u96bb\u96bf\u96c2\u96c3\u96c8\u96ca\u96cb\u96d0\u96d1\u96d3\u96d4\u96d6",9,"\u96e1",6,"\u96eb"],["eb80","\u96ec\u96ed\u96ee\u96f0\u96f1\u96f2\u96f4\u96f5\u96f8\u96fa\u96fb\u96fc\u96fd\u96ff\u9702\u9703\u9705\u970a\u970b\u970c\u9710\u9711\u9712\u9714\u9715\u9717",4,"\u971d\u971f\u9720\u643f\u64d8\u8004\u6bea\u6bf3\u6bfd\u6bf5\u6bf9\u6c05\u6c07\u6c06\u6c0d\u6c15\u6c18\u6c19\u6c1a\u6c21\u6c29\u6c24\u6c2a\u6c32\u6535\u6555\u656b\u724d\u7252\u7256\u7230\u8662\u5216\u809f\u809c\u8093\u80bc\u670a\u80bd\u80b1\u80ab\u80ad\u80b4\u80b7\u80e7\u80e8\u80e9\u80ea\u80db\u80c2\u80c4\u80d9\u80cd\u80d7\u6710\u80dd\u80eb\u80f1\u80f4\u80ed\u810d\u810e\u80f2\u80fc\u6715\u8112\u8c5a\u8136\u811e\u812c\u8118\u8132\u8148\u814c\u8153\u8174\u8159\u815a\u8171\u8160\u8169\u817c\u817d\u816d\u8167\u584d\u5ab5\u8188\u8182\u8191\u6ed5\u81a3\u81aa\u81cc\u6726\u81ca\u81bb"],["ec40","\u9721",8,"\u972b\u972c\u972e\u972f\u9731\u9733",4,"\u973a\u973b\u973c\u973d\u973f",18,"\u9754\u9755\u9757\u9758\u975a\u975c\u975d\u975f\u9763\u9764\u9766\u9767\u9768\u976a",7],["ec80","\u9772\u9775\u9777",4,"\u977d",7,"\u9786",4,"\u978c\u978e\u978f\u9790\u9793\u9795\u9796\u9797\u9799",4,"\u81c1\u81a6\u6b24\u6b37\u6b39\u6b43\u6b46\u6b59\u98d1\u98d2\u98d3\u98d5\u98d9\u98da\u6bb3\u5f40\u6bc2\u89f3\u6590\u9f51\u6593\u65bc\u65c6\u65c4\u65c3\u65cc\u65ce\u65d2\u65d6\u7080\u709c\u7096\u709d\u70bb\u70c0\u70b7\u70ab\u70b1\u70e8\u70ca\u7110\u7113\u7116\u712f\u7131\u7173\u715c\u7168\u7145\u7172\u714a\u7178\u717a\u7198\u71b3\u71b5\u71a8\u71a0\u71e0\u71d4\u71e7\u71f9\u721d\u7228\u706c\u7118\u7166\u71b9\u623e\u623d\u6243\u6248\u6249\u793b\u7940\u7946\u7949\u795b\u795c\u7953\u795a\u7962\u7957\u7960\u796f\u7967\u797a\u7985\u798a\u799a\u79a7\u79b3\u5fd1\u5fd0"],["ed40","\u979e\u979f\u97a1\u97a2\u97a4",6,"\u97ac\u97ae\u97b0\u97b1\u97b3\u97b5",46],["ed80","\u97e4\u97e5\u97e8\u97ee",4,"\u97f4\u97f7",23,"\u603c\u605d\u605a\u6067\u6041\u6059\u6063\u60ab\u6106\u610d\u615d\u61a9\u619d\u61cb\u61d1\u6206\u8080\u807f\u6c93\u6cf6\u6dfc\u77f6\u77f8\u7800\u7809\u7817\u7818\u7811\u65ab\u782d\u781c\u781d\u7839\u783a\u783b\u781f\u783c\u7825\u782c\u7823\u7829\u784e\u786d\u7856\u7857\u7826\u7850\u7847\u784c\u786a\u789b\u7893\u789a\u7887\u789c\u78a1\u78a3\u78b2\u78b9\u78a5\u78d4\u78d9\u78c9\u78ec\u78f2\u7905\u78f4\u7913\u7924\u791e\u7934\u9f9b\u9ef9\u9efb\u9efc\u76f1\u7704\u770d\u76f9\u7707\u7708\u771a\u7722\u7719\u772d\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775a\u7768"],["ee40","\u980f",62],["ee80","\u984e",32,"\u7762\u7765\u777f\u778d\u777d\u7780\u778c\u7791\u779f\u77a0\u77b0\u77b5\u77bd\u753a\u7540\u754e\u754b\u7548\u755b\u7572\u7579\u7583\u7f58\u7f61\u7f5f\u8a48\u7f68\u7f74\u7f71\u7f79\u7f81\u7f7e\u76cd\u76e5\u8832\u9485\u9486\u9487\u948b\u948a\u948c\u948d\u948f\u9490\u9494\u9497\u9495\u949a\u949b\u949c\u94a3\u94a4\u94ab\u94aa\u94ad\u94ac\u94af\u94b0\u94b2\u94b4\u94b6",4,"\u94bc\u94bd\u94bf\u94c4\u94c8",6,"\u94d0\u94d1\u94d2\u94d5\u94d6\u94d7\u94d9\u94d8\u94db\u94de\u94df\u94e0\u94e2\u94e4\u94e5\u94e7\u94e8\u94ea"],["ef40","\u986f",5,"\u988b\u988e\u9892\u9895\u9899\u98a3\u98a8",37,"\u98cf\u98d0\u98d4\u98d6\u98d7\u98db\u98dc\u98dd\u98e0",4],["ef80","\u98e5\u98e6\u98e9",30,"\u94e9\u94eb\u94ee\u94ef\u94f3\u94f4\u94f5\u94f7\u94f9\u94fc\u94fd\u94ff\u9503\u9502\u9506\u9507\u9509\u950a\u950d\u950e\u950f\u9512",4,"\u9518\u951b\u951d\u951e\u951f\u9522\u952a\u952b\u9529\u952c\u9531\u9532\u9534\u9536\u9537\u9538\u953c\u953e\u953f\u9542\u9535\u9544\u9545\u9546\u9549\u954c\u954e\u954f\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955b\u955e\u955f\u955d\u9561\u9562\u9564",8,"\u956f\u9571\u9572\u9573\u953a\u77e7\u77ec\u96c9\u79d5\u79ed\u79e3\u79eb\u7a06\u5d47\u7a03\u7a02\u7a1e\u7a14"],["f040","\u9908",4,"\u990e\u990f\u9911",28,"\u992f",26],["f080","\u994a",9,"\u9956",12,"\u9964\u9966\u9973\u9978\u9979\u997b\u997e\u9982\u9983\u9989\u7a39\u7a37\u7a51\u9ecf\u99a5\u7a70\u7688\u768e\u7693\u7699\u76a4\u74de\u74e0\u752c\u9e20\u9e22\u9e28",4,"\u9e32\u9e31\u9e36\u9e38\u9e37\u9e39\u9e3a\u9e3e\u9e41\u9e42\u9e44\u9e46\u9e47\u9e48\u9e49\u9e4b\u9e4c\u9e4e\u9e51\u9e55\u9e57\u9e5a\u9e5b\u9e5c\u9e5e\u9e63\u9e66",6,"\u9e71\u9e6d\u9e73\u7592\u7594\u7596\u75a0\u759d\u75ac\u75a3\u75b3\u75b4\u75b8\u75c4\u75b1\u75b0\u75c3\u75c2\u75d6\u75cd\u75e3\u75e8\u75e6\u75e4\u75eb\u75e7\u7603\u75f1\u75fc\u75ff\u7610\u7600\u7605\u760c\u7617\u760a\u7625\u7618\u7615\u7619"],["f140","\u998c\u998e\u999a",10,"\u99a6\u99a7\u99a9",47],["f180","\u99d9",32,"\u761b\u763c\u7622\u7620\u7640\u762d\u7630\u763f\u7635\u7643\u763e\u7633\u764d\u765e\u7654\u765c\u7656\u766b\u766f\u7fca\u7ae6\u7a78\u7a79\u7a80\u7a86\u7a88\u7a95\u7aa6\u7aa0\u7aac\u7aa8\u7aad\u7ab3\u8864\u8869\u8872\u887d\u887f\u8882\u88a2\u88c6\u88b7\u88bc\u88c9\u88e2\u88ce\u88e3\u88e5\u88f1\u891a\u88fc\u88e8\u88fe\u88f0\u8921\u8919\u8913\u891b\u890a\u8934\u892b\u8936\u8941\u8966\u897b\u758b\u80e5\u76b2\u76b4\u77dc\u8012\u8014\u8016\u801c\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800b\u8035\u8043\u8046\u804d\u8052\u8069\u8071\u8983\u9878\u9880\u9883"],["f240","\u99fa",62],["f280","\u9a39",32,"\u9889\u988c\u988d\u988f\u9894\u989a\u989b\u989e\u989f\u98a1\u98a2\u98a5\u98a6\u864d\u8654\u866c\u866e\u867f\u867a\u867c\u867b\u86a8\u868d\u868b\u86ac\u869d\u86a7\u86a3\u86aa\u8693\u86a9\u86b6\u86c4\u86b5\u86ce\u86b0\u86ba\u86b1\u86af\u86c9\u86cf\u86b4\u86e9\u86f1\u86f2\u86ed\u86f3\u86d0\u8713\u86de\u86f4\u86df\u86d8\u86d1\u8703\u8707\u86f8\u8708\u870a\u870d\u8709\u8723\u873b\u871e\u8725\u872e\u871a\u873e\u8748\u8734\u8731\u8729\u8737\u873f\u8782\u8722\u877d\u877e\u877b\u8760\u8770\u874c\u876e\u878b\u8753\u8763\u877c\u8764\u8759\u8765\u8793\u87af\u87a8\u87d2"],["f340","\u9a5a",17,"\u9a72\u9a83\u9a89\u9a8d\u9a8e\u9a94\u9a95\u9a99\u9aa6\u9aa9",6,"\u9ab2\u9ab3\u9ab4\u9ab5\u9ab9\u9abb\u9abd\u9abe\u9abf\u9ac3\u9ac4\u9ac6",4,"\u9acd\u9ace\u9acf\u9ad0\u9ad2\u9ad4\u9ad5\u9ad6\u9ad7\u9ad9\u9ada\u9adb\u9adc"],["f380","\u9add\u9ade\u9ae0\u9ae2\u9ae3\u9ae4\u9ae5\u9ae7\u9ae8\u9ae9\u9aea\u9aec\u9aee\u9af0",8,"\u9afa\u9afc",6,"\u9b04\u9b05\u9b06\u87c6\u8788\u8785\u87ad\u8797\u8783\u87ab\u87e5\u87ac\u87b5\u87b3\u87cb\u87d3\u87bd\u87d1\u87c0\u87ca\u87db\u87ea\u87e0\u87ee\u8816\u8813\u87fe\u880a\u881b\u8821\u8839\u883c\u7f36\u7f42\u7f44\u7f45\u8210\u7afa\u7afd\u7b08\u7b03\u7b04\u7b15\u7b0a\u7b2b\u7b0f\u7b47\u7b38\u7b2a\u7b19\u7b2e\u7b31\u7b20\u7b25\u7b24\u7b33\u7b3e\u7b1e\u7b58\u7b5a\u7b45\u7b75\u7b4c\u7b5d\u7b60\u7b6e\u7b7b\u7b62\u7b72\u7b71\u7b90\u7ba6\u7ba7\u7bb8\u7bac\u7b9d\u7ba8\u7b85\u7baa\u7b9c\u7ba2\u7bab\u7bb4\u7bd1\u7bc1\u7bcc\u7bdd\u7bda\u7be5\u7be6\u7bea\u7c0c\u7bfe\u7bfc\u7c0f\u7c16\u7c0b"],["f440","\u9b07\u9b09",5,"\u9b10\u9b11\u9b12\u9b14",10,"\u9b20\u9b21\u9b22\u9b24",10,"\u9b30\u9b31\u9b33",7,"\u9b3d\u9b3e\u9b3f\u9b40\u9b46\u9b4a\u9b4b\u9b4c\u9b4e\u9b50\u9b52\u9b53\u9b55",5],["f480","\u9b5b",32,"\u7c1f\u7c2a\u7c26\u7c38\u7c41\u7c40\u81fe\u8201\u8202\u8204\u81ec\u8844\u8221\u8222\u8223\u822d\u822f\u8228\u822b\u8238\u823b\u8233\u8234\u823e\u8244\u8249\u824b\u824f\u825a\u825f\u8268\u887e\u8885\u8888\u88d8\u88df\u895e\u7f9d\u7f9f\u7fa7\u7faf\u7fb0\u7fb2\u7c7c\u6549\u7c91\u7c9d\u7c9c\u7c9e\u7ca2\u7cb2\u7cbc\u7cbd\u7cc1\u7cc7\u7ccc\u7ccd\u7cc8\u7cc5\u7cd7\u7ce8\u826e\u66a8\u7fbf\u7fce\u7fd5\u7fe5\u7fe1\u7fe6\u7fe9\u7fee\u7ff3\u7cf8\u7d77\u7da6\u7dae\u7e47\u7e9b\u9eb8\u9eb4\u8d73\u8d84\u8d94\u8d91\u8db1\u8d67\u8d6d\u8c47\u8c49\u914a\u9150\u914e\u914f\u9164"],["f540","\u9b7c",62],["f580","\u9bbb",32,"\u9162\u9161\u9170\u9169\u916f\u917d\u917e\u9172\u9174\u9179\u918c\u9185\u9190\u918d\u9191\u91a2\u91a3\u91aa\u91ad\u91ae\u91af\u91b5\u91b4\u91ba\u8c55\u9e7e\u8db8\u8deb\u8e05\u8e59\u8e69\u8db5\u8dbf\u8dbc\u8dba\u8dc4\u8dd6\u8dd7\u8dda\u8dde\u8dce\u8dcf\u8ddb\u8dc6\u8dec\u8df7\u8df8\u8de3\u8df9\u8dfb\u8de4\u8e09\u8dfd\u8e14\u8e1d\u8e1f\u8e2c\u8e2e\u8e23\u8e2f\u8e3a\u8e40\u8e39\u8e35\u8e3d\u8e31\u8e49\u8e41\u8e42\u8e51\u8e52\u8e4a\u8e70\u8e76\u8e7c\u8e6f\u8e74\u8e85\u8e8f\u8e94\u8e90\u8e9c\u8e9e\u8c78\u8c82\u8c8a\u8c85\u8c98\u8c94\u659b\u89d6\u89de\u89da\u89dc"],["f640","\u9bdc",62],["f680","\u9c1b",32,"\u89e5\u89eb\u89ef\u8a3e\u8b26\u9753\u96e9\u96f3\u96ef\u9706\u9701\u9708\u970f\u970e\u972a\u972d\u9730\u973e\u9f80\u9f83\u9f85",5,"\u9f8c\u9efe\u9f0b\u9f0d\u96b9\u96bc\u96bd\u96ce\u96d2\u77bf\u96e0\u928e\u92ae\u92c8\u933e\u936a\u93ca\u938f\u943e\u946b\u9c7f\u9c82\u9c85\u9c86\u9c87\u9c88\u7a23\u9c8b\u9c8e\u9c90\u9c91\u9c92\u9c94\u9c95\u9c9a\u9c9b\u9c9e",5,"\u9ca5",4,"\u9cab\u9cad\u9cae\u9cb0",7,"\u9cba\u9cbb\u9cbc\u9cbd\u9cc4\u9cc5\u9cc6\u9cc7\u9cca\u9ccb"],["f740","\u9c3c",62],["f780","\u9c7b\u9c7d\u9c7e\u9c80\u9c83\u9c84\u9c89\u9c8a\u9c8c\u9c8f\u9c93\u9c96\u9c97\u9c98\u9c99\u9c9d\u9caa\u9cac\u9caf\u9cb9\u9cbe",4,"\u9cc8\u9cc9\u9cd1\u9cd2\u9cda\u9cdb\u9ce0\u9ce1\u9ccc",4,"\u9cd3\u9cd4\u9cd5\u9cd7\u9cd8\u9cd9\u9cdc\u9cdd\u9cdf\u9ce2\u977c\u9785\u9791\u9792\u9794\u97af\u97ab\u97a3\u97b2\u97b4\u9ab1\u9ab0\u9ab7\u9e58\u9ab6\u9aba\u9abc\u9ac1\u9ac0\u9ac5\u9ac2\u9acb\u9acc\u9ad1\u9b45\u9b43\u9b47\u9b49\u9b48\u9b4d\u9b51\u98e8\u990d\u992e\u9955\u9954\u9adf\u9ae1\u9ae6\u9aef\u9aeb\u9afb\u9aed\u9af9\u9b08\u9b0f\u9b13\u9b1f\u9b23\u9ebd\u9ebe\u7e3b\u9e82\u9e87\u9e88\u9e8b\u9e92\u93d6\u9e9d\u9e9f\u9edb\u9edc\u9edd\u9ee0\u9edf\u9ee2\u9ee9\u9ee7\u9ee5\u9eea\u9eef\u9f22\u9f2c\u9f2f\u9f39\u9f37\u9f3d\u9f3e\u9f44"],["f840","\u9ce3",62],["f880","\u9d22",32],["f940","\u9d43",62],["f980","\u9d82",32],["fa40","\u9da3",62],["fa80","\u9de2",32],["fb40","\u9e03",27,"\u9e24\u9e27\u9e2e\u9e30\u9e34\u9e3b\u9e3c\u9e40\u9e4d\u9e50\u9e52\u9e53\u9e54\u9e56\u9e59\u9e5d\u9e5f\u9e60\u9e61\u9e62\u9e65\u9e6e\u9e6f\u9e72\u9e74",9,"\u9e80"],["fb80","\u9e81\u9e83\u9e84\u9e85\u9e86\u9e89\u9e8a\u9e8c",5,"\u9e94",8,"\u9e9e\u9ea0",5,"\u9ea7\u9ea8\u9ea9\u9eaa"],["fc40","\u9eab",8,"\u9eb5\u9eb6\u9eb7\u9eb9\u9eba\u9ebc\u9ebf",4,"\u9ec5\u9ec6\u9ec7\u9ec8\u9eca\u9ecb\u9ecc\u9ed0\u9ed2\u9ed3\u9ed5\u9ed6\u9ed7\u9ed9\u9eda\u9ede\u9ee1\u9ee3\u9ee4\u9ee6\u9ee8\u9eeb\u9eec\u9eed\u9eee\u9ef0",8,"\u9efa\u9efd\u9eff",6],["fc80","\u9f06",4,"\u9f0c\u9f0f\u9f11\u9f12\u9f14\u9f15\u9f16\u9f18\u9f1a",5,"\u9f21\u9f23",8,"\u9f2d\u9f2e\u9f30\u9f31"],["fd40","\u9f32",4,"\u9f38\u9f3a\u9f3c\u9f3f",4,"\u9f45",10,"\u9f52",38],["fd80","\u9f79",5,"\u9f81\u9f82\u9f8d",11,"\u9f9c\u9f9d\u9f9e\u9fa1",4,"\uf92c\uf979\uf995\uf9e7\uf9f1"],["fe40","\ufa0c\ufa0d\ufa0e\ufa0f\ufa11\ufa13\ufa14\ufa18\ufa1f\ufa20\ufa21\ufa23\ufa24\ufa27\ufa28\ufa29"]]},"t+HJ":function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("XlPw"),i=n("67Y/"),o=n("+3se"),s=(n("+NEN"),n("jGGy"),function(){function e(e,t){this.authService=e,this.ubusService=t}return e.prototype.getDevices=function(){return this.ubusService.call({data:[[this.authService.getSid(),"network.plctool","avlninfo",{}],[this.authService.getSid(),"uci","state",{config:"delos",section:"baptization",option:"DlanMacAddress"}]]}).pipe(Object(i.a)(function(e){return e.result[0][1].devices}))},e.prototype.getDlanStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"plc",section:"plc",option:"disabled"}]}).pipe(Object(i.a)(function(e){return e.result[1]}))},e.prototype.getSimpleConnectStatus=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","state",{config:"plc",section:"plc",option:"simpleconnect"}]}).pipe(Object(i.a)(function(e){return Object(o.g)(e.result[1])&&Object(o.g)(e.result[1].value)?Number(e.result[1].value):Object(r.a)(new Error("No simpleconnect devices"))}))},e.prototype.addSecid=function(e){return this.ubusService.call({data:[this.authService.getSid(),"network.plctool","add_secid",{secid:e}]})},e.prototype.pushbtn=function(){return this.ubusService.call({data:[this.authService.getSid(),"network.plctool","pushbtn",{action:"join"}]})},e}())},"t/Na":function(e,t,n){"use strict";n.d(t,"n",function(){return M}),n.d(t,"q",function(){return L}),n.d(t,"r",function(){return U}),n.d(t,"o",function(){return R}),n.d(t,"p",function(){return D}),n.d(t,"b",function(){return f}),n.d(t,"g",function(){return h}),n.d(t,"c",function(){return E}),n.d(t,"a",function(){return P}),n.d(t,"d",function(){return z}),n.d(t,"e",function(){return B}),n.d(t,"m",function(){return F}),n.d(t,"h",function(){return w}),n.d(t,"f",function(){return _}),n.d(t,"i",function(){return C}),n.d(t,"j",function(){return N}),n.d(t,"l",function(){return I}),n.d(t,"k",function(){return V});var r=n("mrSG"),i=n("CcnG"),o=n("F/XL"),s=n("6blF"),a=n("Phjn"),u=n("VnD/"),c=n("67Y/"),l=n("Ip0R"),h=function(){return function(){}}(),f=function(){return function(){}}(),d=function(){function e(e){var t=this;this.normalizedNames=new Map,this.lazyUpdate=null,e?this.lazyInit="string"==typeof e?function(){t.headers=new Map,e.split("\n").forEach(function(e){var n=e.indexOf(":");if(n>0){var r=e.slice(0,n),i=r.toLowerCase(),o=e.slice(n+1).trim();t.maybeSetNormalizedName(r,i),t.headers.has(i)?t.headers.get(i).push(o):t.headers.set(i,[o])}})}:function(){t.headers=new Map,Object.keys(e).forEach(function(n){var r=e[n],i=n.toLowerCase();"string"==typeof r&&(r=[r]),r.length>0&&(t.headers.set(i,r),t.maybeSetNormalizedName(n,i))})}:this.headers=new Map}return e.prototype.has=function(e){return this.init(),this.headers.has(e.toLowerCase())},e.prototype.get=function(e){this.init();var t=this.headers.get(e.toLowerCase());return t&&t.length>0?t[0]:null},e.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},e.prototype.getAll=function(e){return this.init(),this.headers.get(e.toLowerCase())||null},e.prototype.append=function(e,t){return this.clone({name:e,value:t,op:"a"})},e.prototype.set=function(e,t){return this.clone({name:e,value:t,op:"s"})},e.prototype.delete=function(e,t){return this.clone({name:e,value:t,op:"d"})},e.prototype.maybeSetNormalizedName=function(e,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,e)},e.prototype.init=function(){var t=this;this.lazyInit&&(this.lazyInit instanceof e?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(e){return t.applyUpdate(e)}),this.lazyUpdate=null))},e.prototype.copyFrom=function(e){var t=this;e.init(),Array.from(e.headers.keys()).forEach(function(n){t.headers.set(n,e.headers.get(n)),t.normalizedNames.set(n,e.normalizedNames.get(n))})},e.prototype.clone=function(t){var n=new e;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof e?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([t]),n},e.prototype.applyUpdate=function(e){var t=e.name.toLowerCase();switch(e.op){case"a":case"s":var n=e.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(e.name,t);var i=("a"===e.op?this.headers.get(t):void 0)||[];i.push.apply(i,Object(r.g)(n)),this.headers.set(t,i);break;case"d":var o=e.value;if(o){var s=this.headers.get(t);if(!s)return;0===(s=s.filter(function(e){return-1===o.indexOf(e)})).length?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,s)}else this.headers.delete(t),this.normalizedNames.delete(t)}},e.prototype.forEach=function(e){var t=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(n){return e(t.normalizedNames.get(n),t.headers.get(n))})},e}(),p=function(){function e(){}return e.prototype.encodeKey=function(e){return g(e)},e.prototype.encodeValue=function(e){return g(e)},e.prototype.decodeKey=function(e){return decodeURIComponent(e)},e.prototype.decodeValue=function(e){return decodeURIComponent(e)},e}();function g(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}var b=function(){function e(e){void 0===e&&(e={});var t,n,i,o=this;if(this.updates=null,this.cloneFrom=null,this.encoder=e.encoder||new p,e.fromString){if(e.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=(t=e.fromString,n=this.encoder,i=new Map,t.length>0&&t.split("&").forEach(function(e){var t=e.indexOf("="),o=Object(r.f)(-1==t?[n.decodeKey(e),""]:[n.decodeKey(e.slice(0,t)),n.decodeValue(e.slice(t+1))],2),s=o[0],a=o[1],u=i.get(s)||[];u.push(a),i.set(s,u)}),i)}else e.fromObject?(this.map=new Map,Object.keys(e.fromObject).forEach(function(t){var n=e.fromObject[t];o.map.set(t,Array.isArray(n)?n:[n])})):this.map=null}return e.prototype.has=function(e){return this.init(),this.map.has(e)},e.prototype.get=function(e){this.init();var t=this.map.get(e);return t?t[0]:null},e.prototype.getAll=function(e){return this.init(),this.map.get(e)||null},e.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},e.prototype.append=function(e,t){return this.clone({param:e,value:t,op:"a"})},e.prototype.set=function(e,t){return this.clone({param:e,value:t,op:"s"})},e.prototype.delete=function(e,t){return this.clone({param:e,value:t,op:"d"})},e.prototype.toString=function(){var e=this;return this.init(),this.keys().map(function(t){var n=e.encoder.encodeKey(t);return e.map.get(t).map(function(t){return n+"="+e.encoder.encodeValue(t)}).join("&")}).join("&")},e.prototype.clone=function(t){var n=new e({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat([t]),n},e.prototype.init=function(){var e=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(t){return e.map.set(t,e.cloneFrom.map.get(t))}),this.updates.forEach(function(t){switch(t.op){case"a":case"s":var n=("a"===t.op?e.map.get(t.param):void 0)||[];n.push(t.value),e.map.set(t.param,n);break;case"d":if(void 0===t.value){e.map.delete(t.param);break}var r=e.map.get(t.param)||[],i=r.indexOf(t.value);-1!==i&&r.splice(i,1),r.length>0?e.map.set(t.param,r):e.map.delete(t.param)}}),this.cloneFrom=null)},e}();function v(e){return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer}function y(e){return"undefined"!=typeof Blob&&e instanceof Blob}function m(e){return"undefined"!=typeof FormData&&e instanceof FormData}var w=function(){function e(e,t,n,r){var i;if(this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=e.toUpperCase(),function(e){switch(e){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==n?n:null,i=r):i=n,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new d),this.params){var o=this.params.toString();if(0===o.length)this.urlWithParams=t;else{var s=t.indexOf("?");this.urlWithParams=t+(-1===s?"?":s<t.length-1?"&":"")+o}}else this.params=new b,this.urlWithParams=t}return e.prototype.serializeBody=function(){return null===this.body?null:v(this.body)||y(this.body)||m(this.body)||"string"==typeof this.body?this.body:this.body instanceof b?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()},e.prototype.detectContentTypeHeader=function(){return null===this.body?null:m(this.body)?null:y(this.body)?this.body.type||null:v(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof b?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||Array.isArray(this.body)?"application/json":null},e.prototype.clone=function(t){void 0===t&&(t={});var n=t.method||this.method,r=t.url||this.url,i=t.responseType||this.responseType,o=void 0!==t.body?t.body:this.body,s=void 0!==t.withCredentials?t.withCredentials:this.withCredentials,a=void 0!==t.reportProgress?t.reportProgress:this.reportProgress,u=t.headers||this.headers,c=t.params||this.params;return void 0!==t.setHeaders&&(u=Object.keys(t.setHeaders).reduce(function(e,n){return e.set(n,t.setHeaders[n])},u)),t.setParams&&(c=Object.keys(t.setParams).reduce(function(e,n){return e.set(n,t.setParams[n])},c)),new e(n,r,o,{params:c,headers:u,reportProgress:a,responseType:i,withCredentials:s})},e}(),_=function(e){return e[e.Sent=0]="Sent",e[e.UploadProgress=1]="UploadProgress",e[e.ResponseHeader=2]="ResponseHeader",e[e.DownloadProgress=3]="DownloadProgress",e[e.Response=4]="Response",e[e.User=5]="User",e}({}),S=function(){return function(e,t,n){void 0===t&&(t=200),void 0===n&&(n="OK"),this.headers=e.headers||new d,this.status=void 0!==e.status?e.status:t,this.statusText=e.statusText||n,this.url=e.url||null,this.ok=this.status>=200&&this.status<300}}(),O=function(e){function t(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=_.ResponseHeader,n}return Object(r.c)(t,e),t.prototype.clone=function(e){return void 0===e&&(e={}),new t({headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},t}(S),C=function(e){function t(t){void 0===t&&(t={});var n=e.call(this,t)||this;return n.type=_.Response,n.body=void 0!==t.body?t.body:null,n}return Object(r.c)(t,e),t.prototype.clone=function(e){return void 0===e&&(e={}),new t({body:void 0!==e.body?e.body:this.body,headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})},t}(S),j=function(e){function t(t){var n=e.call(this,t,0,"Unknown Error")||this;return n.name="HttpErrorResponse",n.ok=!1,n.message=n.status>=200&&n.status<300?"Http failure during parsing for "+(t.url||"(unknown url)"):"Http failure response for "+(t.url||"(unknown url)")+": "+t.status+" "+t.statusText,n.error=t.error||null,n}return Object(r.c)(t,e),t}(S);function k(e,t){return{body:t,headers:e.headers,observe:e.observe,params:e.params,reportProgress:e.reportProgress,responseType:e.responseType,withCredentials:e.withCredentials}}var E=function(){function e(e){this.handler=e}return e.prototype.request=function(e,t,n){var r,i=this;if(void 0===n&&(n={}),e instanceof w)r=e;else{var s;s=n.headers instanceof d?n.headers:new d(n.headers);var l=void 0;n.params&&(l=n.params instanceof b?n.params:new b({fromObject:n.params})),r=new w(e,t,void 0!==n.body?n.body:null,{headers:s,params:l,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials})}var h=Object(o.a)(r).pipe(Object(a.a)(function(e){return i.handler.handle(e)}));if(e instanceof w||"events"===n.observe)return h;var f=h.pipe(Object(u.a)(function(e){return e instanceof C}));switch(n.observe||"body"){case"body":switch(r.responseType){case"arraybuffer":return f.pipe(Object(c.a)(function(e){if(null!==e.body&&!(e.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return e.body}));case"blob":return f.pipe(Object(c.a)(function(e){if(null!==e.body&&!(e.body instanceof Blob))throw new Error("Response is not a Blob.");return e.body}));case"text":return f.pipe(Object(c.a)(function(e){if(null!==e.body&&"string"!=typeof e.body)throw new Error("Response is not a string.");return e.body}));case"json":default:return f.pipe(Object(c.a)(function(e){return e.body}))}case"response":return f;default:throw new Error("Unreachable: unhandled observe type "+n.observe+"}")}},e.prototype.delete=function(e,t){return void 0===t&&(t={}),this.request("DELETE",e,t)},e.prototype.get=function(e,t){return void 0===t&&(t={}),this.request("GET",e,t)},e.prototype.head=function(e,t){return void 0===t&&(t={}),this.request("HEAD",e,t)},e.prototype.jsonp=function(e,t){return this.request("JSONP",e,{params:(new b).append(t,"JSONP_CALLBACK"),observe:"body",responseType:"json"})},e.prototype.options=function(e,t){return void 0===t&&(t={}),this.request("OPTIONS",e,t)},e.prototype.patch=function(e,t,n){return void 0===n&&(n={}),this.request("PATCH",e,k(n,t))},e.prototype.post=function(e,t,n){return void 0===n&&(n={}),this.request("POST",e,k(n,t))},e.prototype.put=function(e,t,n){return void 0===n&&(n={}),this.request("PUT",e,k(n,t))},e}(),x=function(){function e(e,t){this.next=e,this.interceptor=t}return e.prototype.handle=function(e){return this.interceptor.intercept(e,this.next)},e}(),P=new i.p("HTTP_INTERCEPTORS"),T=function(){function e(){}return e.prototype.intercept=function(e,t){return t.handle(e)},e}(),A=/^\)\]\}',?\n/,I=function(){return function(){}}(),M=function(){function e(){}return e.prototype.build=function(){return new XMLHttpRequest},e}(),N=function(){function e(e){this.xhrFactory=e}return e.prototype.handle=function(e){var t=this;if("JSONP"===e.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new s.a(function(n){var r=t.xhrFactory.build();if(r.open(e.method,e.urlWithParams),e.withCredentials&&(r.withCredentials=!0),e.headers.forEach(function(e,t){return r.setRequestHeader(e,t.join(","))}),e.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!e.headers.has("Content-Type")){var i=e.detectContentTypeHeader();null!==i&&r.setRequestHeader("Content-Type",i)}if(e.responseType){var o=e.responseType.toLowerCase();r.responseType="json"!==o?o:"text"}var s=e.serializeBody(),a=null,u=function(){if(null!==a)return a;var t=1223===r.status?204:r.status,n=r.statusText||"OK",i=new d(r.getAllResponseHeaders()),o=function(e){return"responseURL"in e&&e.responseURL?e.responseURL:/^X-Request-URL:/m.test(e.getAllResponseHeaders())?e.getResponseHeader("X-Request-URL"):null}(r)||e.url;return a=new O({headers:i,status:t,statusText:n,url:o})},c=function(){var t=u(),i=t.headers,o=t.status,s=t.statusText,a=t.url,c=null;204!==o&&(c=void 0===r.response?r.responseText:r.response),0===o&&(o=c?200:0);var l=o>=200&&o<300;if("json"===e.responseType&&"string"==typeof c){var h=c;c=c.replace(A,"");try{c=""!==c?JSON.parse(c):null}catch(f){c=h,l&&(l=!1,c={error:f,text:c})}}l?(n.next(new C({body:c,headers:i,status:o,statusText:s,url:a||void 0})),n.complete()):n.error(new j({error:c,headers:i,status:o,statusText:s,url:a||void 0}))},l=function(e){var t=new j({error:e,status:r.status||0,statusText:r.statusText||"Unknown Error"});n.error(t)},h=!1,f=function(t){h||(n.next(u()),h=!0);var i={type:_.DownloadProgress,loaded:t.loaded};t.lengthComputable&&(i.total=t.total),"text"===e.responseType&&r.responseText&&(i.partialText=r.responseText),n.next(i)},p=function(e){var t={type:_.UploadProgress,loaded:e.loaded};e.lengthComputable&&(t.total=e.total),n.next(t)};return r.addEventListener("load",c),r.addEventListener("error",l),e.reportProgress&&(r.addEventListener("progress",f),null!==s&&r.upload&&r.upload.addEventListener("progress",p)),r.send(s),n.next({type:_.Sent}),function(){r.removeEventListener("error",l),r.removeEventListener("load",c),e.reportProgress&&(r.removeEventListener("progress",f),null!==s&&r.upload&&r.upload.removeEventListener("progress",p)),r.abort()}})},e}(),R=new i.p("XSRF_COOKIE_NAME"),D=new i.p("XSRF_HEADER_NAME"),V=function(){return function(){}}(),L=function(){function e(e,t,n){this.doc=e,this.platform=t,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}return e.prototype.getToken=function(){if("server"===this.platform)return null;var e=this.doc.cookie||"";return e!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(l.C)(e,this.cookieName),this.lastCookieString=e),this.lastToken},e}(),U=function(){function e(e,t){this.tokenService=e,this.headerName=t}return e.prototype.intercept=function(e,t){var n=e.url.toLowerCase();if("GET"===e.method||"HEAD"===e.method||n.startsWith("http://")||n.startsWith("https://"))return t.handle(e);var r=this.tokenService.getToken();return null===r||e.headers.has(this.headerName)||(e=e.clone({headers:e.headers.set(this.headerName,r)})),t.handle(e)},e}(),F=function(){function e(e,t){this.backend=e,this.injector=t,this.chain=null}return e.prototype.handle=function(e){if(null===this.chain){var t=this.injector.get(P,[]);this.chain=t.reduceRight(function(e,t){return new x(e,t)},this.backend)}return this.chain.handle(e)},e}(),B=function(){function e(){}var t;return t=e,e.disable=function(){return{ngModule:t,providers:[{provide:U,useClass:T}]}},e.withOptions=function(e){return void 0===e&&(e={}),{ngModule:t,providers:[e.cookieName?{provide:R,useValue:e.cookieName}:[],e.headerName?{provide:D,useValue:e.headerName}:[]]}},e}(),z=function(){return function(){}}()},t2rx:function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n("UVPe");var r=function(){function e(e,t){this.spinner=e,this.router=t,this.joiners={}}return e.prototype.ready=function(e){this.joiners[this.route]=this.joiners[this.route].filter(function(t){return t!=e}),this.joiners[this.route]&&this.joiners[this.route].length||this.spinner.hide()},e.prototype.register=function(e){this.route=this.router.url,this.joiners[this.route]||(this.joiners={}),this.joiners[this.route]=Array.from(new Set(e.concat(this.joiners[this.route]))).filter(function(e){return e})},e}()},t9FE:function(e,t,n){(function(t){function n(e){try{if(!t.localStorage)return!1}catch(r){return!1}var n=t.localStorage[e];return null!=n&&"true"===String(n).toLowerCase()}e.exports=function(e,t){if(n("noDeprecation"))return e;var r=!1;return function(){if(!r){if(n("throwDeprecation"))throw new Error(t);n("traceDeprecation")?console.trace(t):console.warn(t),r=!0}return e.apply(this,arguments)}}}).call(this,n("yLpj"))},t9fZ:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("mrSG"),i=n("FFOo"),o=n("b7mW"),s=n("G5J1");function a(e){return function(t){return 0===e?Object(s.b)():t.lift(new u(e))}}var u=function(){function e(e){if(this.total=e,this.total<0)throw new o.a}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.total))},e}(),c=function(e){function t(t,n){var r=e.call(this,t)||this;return r.total=n,r.count=0,r}return r.c(t,e),t.prototype._next=function(e){var t=this.total,n=++this.count;n<=t&&(this.destination.next(e),n===t&&(this.destination.complete(),this.unsubscribe()))},t}(i.a)},tP3N:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("K9Ia"),i=n("ny24"),o=n("Vx+w"),s=(n("Obbf"),n("t2rx"),n("+3se")),a=(n("dcxs"),function(){function e(e,t,n){this.pageLoadingService=e,this.managementService=t,this.notification=n,this.ngUnsubscribe=new r.a,this.disabled=0,this.initialStandbyState=0,this.initialPowersaveState=0,this.pageLoadingService.register(["powerSavingLoaded"])}return e.prototype.ngOnInit=function(){this.getPowerSavingSettings()},e.prototype.getPowerSavingSettings=function(){var e=this;Object(s.g)(o.a.plc)&&this.managementService.getPowerSavingSettingsPlc().pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("powerSavingLoaded"),e.disabled=Number(t.disabled),e.standby={enabled:Object(s.g)(t.standby)&&Number(t.standby)?1:0},e.powersave=Object(s.e)(o.a,"ghn")&&{enabled:Object(s.g)(t.powersave)&&Number(t.powersave)?1:0},e.standby&&(e.initialStandbyState=e.standby.enabled),e.powersave&&(e.initialPowersaveState=e.powersave.enabled)}),Object(s.g)(o.a.ghn)&&this.managementService.getPowerSavingSettingsGhn().pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){e.pageLoadingService.ready("powerSavingLoaded"),e.disabled=Number(t.disabled),e.standby={enabled:Object(s.g)(t.standby)&&Number(t.standby)?1:0},e.powersave=Object(s.e)(o.a,"ghn")&&{enabled:Object(s.g)(t.powersave)&&Number(t.powersave)?1:0},e.standby&&(e.initialStandbyState=e.standby.enabled),e.powersave&&(e.initialPowersaveState=e.powersave.enabled)})},e.prototype.save=function(){var e=this;Object(s.g)(o.a.plc)&&this.managementService.savePowerSavingSettingsPlc(this.standby).subscribe(function(){e.standby&&(e.initialStandbyState=e.standby.enabled),e.notification.success(Object(s.b)("You have successfully updated your Powerline pro network.")),e.markAsPristine()}),Object(s.g)(o.a.ghn)&&this.managementService.savePowerSavingSettingsGhn(this.standby,this.powersave).subscribe(function(){e.standby&&(e.initialStandbyState=e.standby.enabled),e.powersave&&(e.initialPowersaveState=e.powersave.enabled),e.notification.success(Object(s.b)("You have successfully updated your Powerline pro network.")),e.markAsPristine()})},e.prototype.cancel=function(){this.standby&&(this.standby.enabled=this.initialStandbyState),this.powersave&&(this.powersave.enabled=this.initialPowersaveState),this.markAsPristine()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e}())},tjlA:function(e,t,n){"use strict";(function(e){var r=n("H7XF"),i=n("kVK+"),o=n("IzUq");function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(s()<t)throw new RangeError("Invalid typed array length");return u.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=u.prototype:(null===e&&(e=new u(t)),e.length=t),e}function u(e,t,n){if(!(u.TYPED_ARRAY_SUPPORT||this instanceof u))return new u(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return h(this,e)}return c(this,e,t,n)}function c(e,t,n,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,n,r){if(n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");return t=void 0===n&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,n):new Uint8Array(t,n,r),u.TYPED_ARRAY_SUPPORT?(e=t).__proto__=u.prototype:e=f(e,t),e}(e,t,n,r):"string"==typeof t?function(e,t,n){if("string"==typeof n&&""!==n||(n="utf8"),!u.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|p(t,n),i=(e=a(e,r)).write(t,n);return i!==r&&(e=e.slice(0,i)),e}(e,t,n):function(e,t){if(u.isBuffer(t)){var n=0|d(t.length);return 0===(e=a(e,n)).length?e:(t.copy(e,0,0,n),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(r=t.length)!=r?a(e,0):f(e,t);if("Buffer"===t.type&&o(t.data))return f(e,t.data)}var r;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function l(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function h(e,t){if(l(t),e=a(e,t<0?0:0|d(t)),!u.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function f(e,t){var n=t.length<0?0:0|d(t.length);e=a(e,n);for(var r=0;r<n;r+=1)e[r]=255&t[r];return e}function d(e){if(e>=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,t){if(u.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return U(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return F(e).length;default:if(r)return U(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function b(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=u.from(t,r)),u.isBuffer(t))return 0===t.length?-1:v(e,t,n,r,i);if("number"==typeof t)return t&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):v(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function v(e,t,n,r,i){var o,s=1,a=e.length,u=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;s=2,a/=2,u/=2,n/=2}function c(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var l=-1;for(o=n;o<a;o++)if(c(e,o)===c(t,-1===l?0:o-l)){if(-1===l&&(l=o),o-l+1===u)return l*s}else-1!==l&&(o-=o-l),l=-1}else for(n+u>a&&(n=a-u),o=n;o>=0;o--){for(var h=!0,f=0;f<u;f++)if(c(e,o+f)!==c(t,f)){h=!1;break}if(h)return o}return-1}function y(e,t,n,r){n=Number(n)||0;var i=e.length-n;r?(r=Number(r))>i&&(r=i):r=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s<r;++s){var a=parseInt(t.substr(2*s,2),16);if(isNaN(a))return s;e[n+s]=a}return s}function m(e,t,n,r){return B(U(t,e.length-n),e,n,r)}function w(e,t,n,r){return B(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function _(e,t,n,r){return w(e,t,n,r)}function S(e,t,n,r){return B(F(t),e,n,r)}function O(e,t,n,r){return B(function(e,t){for(var n,r,i=[],o=0;o<e.length&&!((t-=2)<0);++o)r=(n=e.charCodeAt(o))>>8,i.push(n%256),i.push(r);return i}(t,e.length-n),e,n,r)}function C(e,t,n){return r.fromByteArray(0===t&&n===e.length?e:e.slice(t,n))}function j(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i<n;){var o,s,a,u,c=e[i],l=null,h=c>239?4:c>223?3:c>191?2:1;if(i+h<=n)switch(h){case 1:c<128&&(l=c);break;case 2:128==(192&(o=e[i+1]))&&(u=(31&c)<<6|63&o)>127&&(l=u);break;case 3:s=e[i+2],128==(192&(o=e[i+1]))&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(l=u);break;case 4:s=e[i+2],a=e[i+3],128==(192&(o=e[i+1]))&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(l=u)}null===l?(l=65533,h=1):l>65535&&(r.push((l-=65536)>>>10&1023|55296),l=56320|1023&l),r.push(l),i+=h}return function(e){var t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);for(var n="",r=0;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=k));return n}(r)}t.Buffer=u,t.SlowBuffer=function(e){return+e!=e&&(e=0),u.alloc(+e)},t.INSPECT_MAX_BYTES=50,u.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}(),t.kMaxLength=s(),u.poolSize=8192,u._augment=function(e){return e.__proto__=u.prototype,e},u.from=function(e,t,n){return c(null,e,t,n)},u.TYPED_ARRAY_SUPPORT&&(u.prototype.__proto__=Uint8Array.prototype,u.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&u[Symbol.species]===u&&Object.defineProperty(u,Symbol.species,{value:null,configurable:!0})),u.alloc=function(e,t,n){return function(e,t,n,r){return l(t),t<=0?a(null,t):void 0!==n?"string"==typeof r?a(null,t).fill(n,r):a(null,t).fill(n):a(null,t)}(0,e,t,n)},u.allocUnsafe=function(e){return h(null,e)},u.allocUnsafeSlow=function(e){return h(null,e)},u.isBuffer=function(e){return!(null==e||!e._isBuffer)},u.compare=function(e,t){if(!u.isBuffer(e)||!u.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,i=0,o=Math.min(n,r);i<o;++i)if(e[i]!==t[i]){n=e[i],r=t[i];break}return n<r?-1:r<n?1:0},u.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},u.concat=function(e,t){if(!o(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return u.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var r=u.allocUnsafe(t),i=0;for(n=0;n<e.length;++n){var s=e[n];if(!u.isBuffer(s))throw new TypeError('"list" argument must be an Array of Buffers');s.copy(r,i),i+=s.length}return r},u.byteLength=p,u.prototype._isBuffer=!0,u.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)g(this,t,t+1);return this},u.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},u.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},u.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?j(this,0,e):(function(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return P(this,t,n);case"utf8":case"utf-8":return j(this,t,n);case"ascii":return E(this,t,n);case"latin1":case"binary":return x(this,t,n);case"base64":return C(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}).apply(this,arguments)},u.prototype.equals=function(e){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===u.compare(this,e)},u.prototype.inspect=function(){var e="",n=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),"<Buffer "+e+">"},u.prototype.compare=function(e,t,n,r,i){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(r>>>=0),s=(n>>>=0)-(t>>>=0),a=Math.min(o,s),c=this.slice(r,i),l=e.slice(t,n),h=0;h<a;++h)if(c[h]!==l[h]){o=c[h],s=l[h];break}return o<s?-1:s<o?1:0},u.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},u.prototype.indexOf=function(e,t,n){return b(this,e,t,n,!0)},u.prototype.lastIndexOf=function(e,t,n){return b(this,e,t,n,!1)},u.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return y(this,e,t,n);case"utf8":case"utf-8":return m(this,e,t,n);case"ascii":return w(this,e,t,n);case"latin1":case"binary":return _(this,e,t,n);case"base64":return S(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var k=4096;function E(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+=String.fromCharCode(127&e[i]);return r}function x(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;i<n;++i)r+=String.fromCharCode(e[i]);return r}function P(e,t,n){var r,i=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>i)&&(n=i);for(var o="",s=t;s<n;++s)o+=(r=e[s])<16?"0"+r.toString(16):r.toString(16);return o}function T(e,t,n){for(var r=e.slice(t,n),i="",o=0;o<r.length;o+=2)i+=String.fromCharCode(r[o]+256*r[o+1]);return i}function A(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function I(e,t,n,r,i,o){if(!u.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function M(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);i<o;++i)e[n+i]=(t&255<<8*(r?i:1-i))>>>8*(r?i:1-i)}function N(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);i<o;++i)e[n+i]=t>>>8*(r?i:3-i)&255}function R(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function D(e,t,n,r,o){return o||R(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function V(e,t,n,r,o){return o||R(e,0,n,8),i.write(e,t,n,r,52,8),n+8}u.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e),u.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=u.prototype;else{var i=t-e;n=new u(i,void 0);for(var o=0;o<i;++o)n[o]=this[o+e]}return n},u.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||A(e,t,this.length);for(var r=this[e],i=1,o=0;++o<t&&(i*=256);)r+=this[e+o]*i;return r},u.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||A(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},u.prototype.readUInt8=function(e,t){return t||A(e,1,this.length),this[e]},u.prototype.readUInt16LE=function(e,t){return t||A(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function(e,t){return t||A(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function(e,t){return t||A(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function(e,t){return t||A(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||A(e,t,this.length);for(var r=this[e],i=1,o=0;++o<t&&(i*=256);)r+=this[e+o]*i;return r>=(i*=128)&&(r-=Math.pow(2,8*t)),r},u.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||A(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},u.prototype.readInt8=function(e,t){return t||A(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function(e,t){t||A(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(e,t){t||A(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(e,t){return t||A(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function(e,t){return t||A(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function(e,t){return t||A(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function(e,t){return t||A(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function(e,t){return t||A(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function(e,t){return t||A(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function(e,t,n,r){e=+e,t|=0,n|=0,r||I(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[t]=255&e;++o<n&&(i*=256);)this[t+o]=e/i&255;return t+n},u.prototype.writeUIntBE=function(e,t,n,r){e=+e,t|=0,n|=0,r||I(this,e,t,n,Math.pow(2,8*n)-1,0);var i=n-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+n},u.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},u.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):M(this,e,t,!0),t+2},u.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):M(this,e,t,!1),t+2},u.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):N(this,e,t,!0),t+4},u.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):N(this,e,t,!1),t+4},u.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);I(this,e,t,n,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o<n&&(s*=256);)e<0&&0===a&&0!==this[t+o-1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+n},u.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);I(this,e,t,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+n},u.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},u.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):M(this,e,t,!0),t+2},u.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):M(this,e,t,!1),t+2},u.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):N(this,e,t,!0),t+4},u.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||I(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):N(this,e,t,!1),t+4},u.prototype.writeFloatLE=function(e,t,n){return D(this,e,t,!0,n)},u.prototype.writeFloatBE=function(e,t,n){return D(this,e,t,!1,n)},u.prototype.writeDoubleLE=function(e,t,n){return V(this,e,t,!0,n)},u.prototype.writeDoubleBE=function(e,t,n){return V(this,e,t,!1,n)},u.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var i,o=r-n;if(this===e&&n<t&&t<r)for(i=o-1;i>=0;--i)e[i+t]=this[i+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i<o;++i)e[i+t]=this[i+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+o),t);return o},u.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===e.length){var i=e.charCodeAt(0);i<256&&(e=i)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!u.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o<n;++o)this[o]=e;else{var s=u.isBuffer(e)?e:U(new u(e,r).toString()),a=s.length;for(o=0;o<n-t;++o)this[o+t]=s[o%a]}return this};var L=/[^+\/0-9A-Za-z-_]/g;function U(e,t){var n;t=t||1/0;for(var r=e.length,i=null,o=[],s=0;s<r;++s){if((n=e.charCodeAt(s))>55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function F(e){return r.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(L,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function B(e,t,n,r){for(var i=0;i<r&&!(i+n>=t.length||i>=e.length);++i)t[i+n]=e[i];return i}}).call(this,n("yLpj"))},tsXx:function(e,t,n){"use strict";e.exports.parseHeader=function(e){var t=(e||"").split("\n"),n={};return t.forEach(function(e){var t=e.trim().split(":"),r=(t.shift()||"").trim().toLowerCase(),i=t.join(":").trim();r&&(n[r]=i)}),n},e.exports.generateHeader=function(e){var t=[];return Object.keys(e||{}).forEach(function(n){n&&t.push((n||"").toLowerCase().trim().replace(/^(MIME|POT?(?=-)|[a-z])|-[a-z]/gi,function(e){return e.toUpperCase()})+": "+(e[n]||"").trim())}),t.join("\n")+(t.length?"\n":"")},e.exports.formatCharset=function(e,t){return(e||"iso-8859-1").toString().toLowerCase().replace(/^utf[-_]?(\d+)$/,"utf-$1").replace(/^win(?:dows)?[-_]?(\d+)$/,"windows-$1").replace(/^latin[-_]?(\d+)$/,"iso-8859-$1").replace(/^(us[-_]?)?ascii$/,"ascii").replace(/^charset$/,t||"iso-8859-1").trim()},e.exports.foldLine=function(e,t){t=t||76;for(var n,r=[],i="",o=0,s=e.length;o<s;){for(i=e.substr(o,t);"\\"===i.substr(-1)&&o+i.length<s;)i+=e.charAt(o+i.length);(n=/.*?\\n/.exec(i))?i=n[0]:o+i.length<s&&((n=/.*\s+/.exec(i))&&/[^\s]/.test(n[0])?i=n[0]:(n=/.*[\x21-\x2f0-9\x5b-\x60\x7b-\x7e]+/.exec(i))&&/[^\x21-\x2f0-9\x5b-\x60\x7b-\x7e]/.test(n[0])&&(i=n[0])),r.push(i),o+=i.length}return r}},u67D:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("En8+"),i=function(e){return function(t){for(var n=e[r.a]();;){var i=n.next();if(i.done){t.complete();break}if(t.next(i.value),t.closed)break}return"function"==typeof n.return&&t.add(function(){n.return&&n.return()}),t}}},uCBG:function(e,t,n){"use strict";n("CcnG"),n("3GIH"),n("yZXx"),n("IJ1v"),n("ew9u"),n("zIf0"),n("6aHO")},uCqB:function(e,t,n){"use strict";function r(e,t){this.encoder=e,this.addBOM=!0}function i(e,t){this.decoder=e,this.pass=!1,this.options=t||{}}t.PrependBOM=r,r.prototype.write=function(e){return this.addBOM&&(e="\ufeff"+e,this.addBOM=!1),this.encoder.write(e)},r.prototype.end=function(){return this.encoder.end()},t.StripBOM=i,i.prototype.write=function(e){var t=this.decoder.write(e);return this.pass||!t?t:("\ufeff"===t[0]&&(t=t.slice(1),"function"==typeof this.options.stripBOM&&this.options.stripBOM()),this.pass=!0,t)},i.prototype.end=function(){return this.decoder.end()}},"ub4/":function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("gIcY"),i=(n("H5ub"),n("F/XL")),o=n("ClyA"),s=n("+3se"),a=(n("jGGy"),function(){function e(e,t){this.authService=e,this.modalService=t}return e.prototype.canDeactivate=function(e,t,n,a){var u=this,c=a.url.includes("error"),l=a.url.includes("login");if(c||l)return Object(i.a)(!0);var h=Object.values(e).filter(function(e){return e instanceof r.m}),f=Object.values(e).filter(function(e){return e instanceof Object}).map(function(e){return Object.values(e).filter(function(e){return e instanceof r.m})}).reduce(function(e,t){return[].concat.apply([],[e,t])});return[].concat.apply([],[h,f]).filter(function(e){return e.dirty}).length>0&&this.authService.isLoggedIn?(this.bsModalRef=this.modalService.show(o.a),this.bsModalRef.content.bodyText=Object(s.b)("Navigating away from this page will discard all your changes. Really proceed?"),this.bsModalRef.content.closeButtonText=Object(s.b)("Cancel"),this.bsModalRef.content.actionButtonText=Object(s.b)("OK"),this.modalService.onHide.subscribe(function(e){e&&u.bsModalRef.content.cancel()}),this.authService.isLoggedInSubject$.subscribe(function(e){e||u.bsModalRef.content.cancel()}),this.bsModalRef.content.result):Object(i.a)(!0)},e}())},ueff:function(e,t,n){"use strict";n.d(t,"a",function(){return u});var r=n("CcnG"),i=n("ew9u"),o=r.ob({encapsulation:2,styles:[],data:{}});function s(e){return r.Kb(0,[],null,null)}function a(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"bs-modal-backdrop",[["class","modal-backdrop"]],null,null,null,s,o)),r.pb(1,114688,null,0,i.a,[r.k,r.E],null,null)],function(e,t){e(t,1,0)},null)}var u=r.mb("bs-modal-backdrop",i.a,a,{},{},[])},uwht:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("zIf0"),i=n("yZXx"),o=function(){function e(e,t,n){this._element=t,this._renderer=n,this.isShown=!1,this.isModalHiding=!1,this.config=Object.assign({},e)}return e.prototype.ngOnInit=function(){var e=this;this.isAnimated&&this._renderer.addClass(this._element.nativeElement,r.a.FADE),this._renderer.setStyle(this._element.nativeElement,"display","block"),setTimeout(function(){e.isShown=!0,e._renderer.addClass(e._element.nativeElement,Object(i.a)()?r.a.IN:r.a.SHOW)},this.isAnimated?r.d.BACKDROP:0),document&&document.body&&(1===this.bsModalService.getModalsCount()&&(this.bsModalService.checkScrollbar(),this.bsModalService.setScrollbar()),this._renderer.addClass(document.body,r.a.OPEN)),this._element.nativeElement&&this._element.nativeElement.focus()},e.prototype.onClick=function(e){this.config.ignoreBackdropClick||"static"===this.config.backdrop||e.target!==this._element.nativeElement||(this.bsModalService.setDismissReason(r.b.BACKRDOP),this.hide())},e.prototype.onEsc=function(e){this.isShown&&(27===e.keyCode&&e.preventDefault(),this.config.keyboard&&this.level===this.bsModalService.getModalsCount()&&(this.bsModalService.setDismissReason(r.b.ESC),this.hide()))},e.prototype.ngOnDestroy=function(){this.isShown&&this.hide()},e.prototype.hide=function(){var e=this;!this.isModalHiding&&this.isShown&&(this.isModalHiding=!0,this._renderer.removeClass(this._element.nativeElement,Object(i.a)()?r.a.IN:r.a.SHOW),setTimeout(function(){e.isShown=!1,document&&document.body&&1===e.bsModalService.getModalsCount()&&e._renderer.removeClass(document.body,r.a.OPEN),e.bsModalService.hide(e.level),e.isModalHiding=!1},this.isAnimated?r.d.MODAL:0))},e}()},vubp:function(e,t,n){"use strict";var r=n("mrSG"),i=n("T1DM"),o=n("FFOo"),s=n("G5J1"),a=n("F/XL"),u=n("XlPw"),c=function(){function e(e,t,n){this.kind=e,this.value=t,this.error=n,this.hasValue="N"===e}return e.prototype.observe=function(e){switch(this.kind){case"N":return e.next&&e.next(this.value);case"E":return e.error&&e.error(this.error);case"C":return e.complete&&e.complete()}},e.prototype.do=function(e,t,n){switch(this.kind){case"N":return e&&e(this.value);case"E":return t&&t(this.error);case"C":return n&&n()}},e.prototype.accept=function(e,t,n){return e&&"function"==typeof e.next?this.observe(e):this.do(e,t,n)},e.prototype.toObservable=function(){switch(this.kind){case"N":return Object(a.a)(this.value);case"E":return Object(u.a)(this.error);case"C":return Object(s.b)()}throw new Error("unexpected notification kind value")},e.createNext=function(t){return void 0!==t?new e("N",t):e.undefinedValueNotification},e.createError=function(t){return new e("E",void 0,t)},e.createComplete=function(){return e.completeNotification},e.completeNotification=new e("C"),e.undefinedValueNotification=new e("N",void 0),e}();function l(e,t){void 0===t&&(t=i.a);var n,r=(n=e)instanceof Date&&!isNaN(+n)?+e-t.now():Math.abs(e);return function(e){return e.lift(new h(r,t))}}n.d(t,"a",function(){return l});var h=function(){function e(e,t){this.delay=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new f(e,this.delay,this.scheduler))},e}(),f=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.delay=n,i.scheduler=r,i.queue=[],i.active=!1,i.errored=!1,i}return r.c(t,e),t.dispatch=function(e){for(var t=e.source,n=t.queue,r=e.scheduler,i=e.destination;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(e,o)}else this.unsubscribe(),t.active=!1},t.prototype._schedule=function(e){this.active=!0,this.destination.add(e.schedule(t.dispatch,this.delay,{source:this,destination:this.destination,scheduler:e}))},t.prototype.scheduleNotification=function(e){if(!0!==this.errored){var t=this.scheduler,n=new d(t.now()+this.delay,e);this.queue.push(n),!1===this.active&&this._schedule(t)}},t.prototype._next=function(e){this.scheduleNotification(c.createNext(e))},t.prototype._error=function(e){this.errored=!0,this.queue=[],this.destination.error(e),this.unsubscribe()},t.prototype._complete=function(){this.scheduleNotification(c.createComplete()),this.unsubscribe()},t}(o.a),d=function(){return function(e,t){this.time=e,this.notification=t}}()},wEt0:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n("Obbf"),n("t2rx");var r=n("+3se"),i=(n("dcxs"),n("jGGy"),function(){function e(e,t,n,r){this.managementService=e,this.authService=t,this.notification=n,this.pageLoadingService=r,this.pageLoadingService.register(["ledsViewInit","ledsLoaded"])}return e.prototype.ngOnInit=function(){this.getLeds()},e.prototype.ngAfterViewInit=function(){this.pageLoadingService.ready("ledsViewInit")},e.prototype.ledClick=function(){this.markAsDirty()},e.prototype.getLeds=function(){var e=this;this.managementService.ledsGet().subscribe(function(t){e.ubusLeds=Object(r.d)(t),e.leds=e.managementService.prepareLedScope(t),e.fakeLeds=Object(r.d)(e.leds),e.pageLoadingService.ready("ledsLoaded"),e.markAsPristine()})},e.prototype.save=function(){var e=this,t=[];this.leds.forEach(function(n){n.disabled!=e.ubusLeds[n[".name"]].disabled&&t.push([e.authService.getSid(),"uci","set",{config:"system",section:n[".name"],values:{disabled:n.disabled}}])}),t.length&&t.push([this.authService.getSid(),"uci","commit",{config:"system"}]),this.managementService.save(t).subscribe(function(t){e.notification.success(Object(r.b)("You have successfully changed the Configuration for your device's LEDs.")),e.getLeds()})},e.prototype.cancel=function(){this.leds=Object(r.d)(this.fakeLeds),this.markAsPristine()},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e}())},wbK0:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("dEwP");function i(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return t.lift.call(r.a.apply(void 0,[t].concat(e)))}}},weCn:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("+3se"),i=function(){function e(){}return e.isString=function(e){return"string"==typeof e||e instanceof String},e.defaultCompare=function(t,n){return t=Object(r.h)(t)?"":t,n=Object(r.h)(n)?"":n,e.isString(t)&&e.isString(n)?t.toString().toLowerCase().localeCompare(n.toString().toLowerCase()):![t,n].every(function(e){return"string"==typeof e})&&[t,n].some(function(e){return"string"==typeof e})?t.toString().toLowerCase().localeCompare(n.toString().toLowerCase()):e.caseSensitiveSort(t,n)},e.caseSensitiveSort=function(e,t){return e>t?1:-1},e.parseExpression=function(e){return(e=(e=e.replace(/\[(\w+)\]/g,".$1")).replace(/^\./,"")).split(".")},e.getValue=function(e,t){for(var n=0,r=t.length;n<r;++n){var i=t[n];if(!(i in e))return;e=e[i]}return e},e.setValue=function(e,t,n){var r;for(r=0;r<n.length-1;r++)e=e[n[r]];e[n[r]]=t},e.prototype.transform=function(e,t,n,r,i){return void 0===r&&(r=!1),e?Array.isArray(e)?this.sortArray(e,t,n,r,i):"object"==typeof e?this.transformObject(e,t,n,r,i):e:e},e.prototype.sortArray=function(t,n,r,i,o){var s,a=n&&-1!==n.indexOf("."),u=n&&-1!==n.indexOf("*1");a&&(n=e.parseExpression(n)),u&&(n=n.split("*1")[0]),s=o&&"function"==typeof o?o:i?e.caseSensitiveSort:e.defaultCompare;var c=t.sort(function(t,r){return n?(u&&(t[n]&&(t[n]=Number(t[n])),r[n]&&(r[n]=Number(r[n]))),a?s(e.getValue(t,n),e.getValue(r,n)):t&&r?s(t[n],r[n]):s(t,r)):s(t,r)});return r?c.reverse():c},e.prototype.transformObject=function(t,n,r,i,o){var s=e.parseExpression(n),a=s.pop(),u=e.getValue(t,s);return Array.isArray(u)||(s.push(a),a=null,u=e.getValue(t,s)),u?(e.setValue(t,this.transform(u,a,r,i),s),t):t},e}()},wq4j:function(e,t,n){e.exports=n("43KI").PassThrough},x5KT:function(e,t,n){"use strict";n.d(t,"b",function(){return u}),n.d(t,"a",function(){return c});var r=n("+3se"),i=n("ub4/"),o=n("9nVo"),s=n("VEEB"),a=n("RYmd"),u=[{path:"status",component:o.a,data:{displayName:Object(r.b)("Status"),retailOrder:0}},{path:"ip",component:a.a,data:{displayName:Object(r.b)("IPv4/IPv6"),retailOrder:10},canDeactivate:[i.a]},{path:"vlan",component:s.a,data:{displayName:Object(r.b)("VLANs"),appHideForRetail:!0},canDeactivate:[i.a]}],c=function(){return function(){}}()},xJys:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("K9Ia"),i=n("ny24"),o=(n("jGGy"),n("UVPe"),n("+3se")),s=(n("Obbf"),n("a2IU"),n("H5ub"),n("ClyA")),a=function(){function e(e,t,n,i,s){this.spinner=e,this.authService=t,this.notification=n,this.modalService=i,this.scheduleService=s,this.ngUnsubscribe=new r.a,this.days=[Object(o.b)("Monday"),Object(o.b)("Tuesday"),Object(o.b)("Wednesday"),Object(o.b)("Thursday"),Object(o.b)("Friday"),Object(o.b)("Saturday"),Object(o.b)("Sunday")],this.hours=[{key:Object(o.b)("12AM"),value:0},{key:Object(o.b)("01AM"),value:1},{key:Object(o.b)("02AM"),value:2},{key:Object(o.b)("03AM"),value:3},{key:Object(o.b)("04AM"),value:4},{key:Object(o.b)("05AM"),value:5},{key:Object(o.b)("06AM"),value:6},{key:Object(o.b)("07AM"),value:7},{key:Object(o.b)("08AM"),value:8},{key:Object(o.b)("09AM"),value:9},{key:Object(o.b)("10AM"),value:10},{key:Object(o.b)("11AM"),value:11},{key:Object(o.b)("12PM"),value:12},{key:Object(o.b)("01PM"),value:13},{key:Object(o.b)("02PM"),value:14},{key:Object(o.b)("03PM"),value:15},{key:Object(o.b)("04PM"),value:16},{key:Object(o.b)("05PM"),value:17},{key:Object(o.b)("06PM"),value:18},{key:Object(o.b)("07PM"),value:19},{key:Object(o.b)("08PM"),value:20},{key:Object(o.b)("09PM"),value:21},{key:Object(o.b)("10PM"),value:22},{key:Object(o.b)("11PM"),value:23},{key:Object(o.b)("00PM"),value:24}],this.mins=[{key:"00",value:0},{key:"05",value:5},{key:"10",value:10},{key:"15",value:15},{key:"20",value:20},{key:"25",value:25},{key:"30",value:30},{key:"35",value:35},{key:"40",value:40},{key:"45",value:45},{key:"50",value:50},{key:"55",value:55}],this.ranges=[{key:Object(o.b)("daily"),value:"Monday Tuesday Wednesday Thursday Friday Saturday Sunday"},{key:Object(o.b)("Mon-Fri"),value:"Monday Tuesday Wednesday Thursday Friday"},{key:Object(o.b)("Sat+Sun"),value:"Saturday Sunday"},{key:Object(o.b)("Select day"),value:"singleday"}]}return e.prototype.ngOnInit=function(){this.sid=this.authService.getSid(),this.currentRow=!1,this.addNew=!1,this.editSchedule=!1,this.timeValidationError=!1,this.timeValidationErrorMsg=!1,this.schedules=[],this.global=[],this.getSchedules()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete(),this.bsModalRef&&this.bsModalRef.hide()},e.prototype.getSchedules=function(){var e=this;this.scheduleService.getSchedules().pipe(Object(i.a)(this.ngUnsubscribe)).subscribe(function(t){var n;n=t.slice(),e.schedules=n[0],e.global=n[1],e.globalEnabled=Number(e.global[0].enabled)||0,e.globalForcewifidown=Number(e.global[0].forcewifidown)||0,e.globalName=e.global[0][".name"],e.spinner.hide(),e.markAsPristine()})},e.prototype.saveGlobalSettingsCheck=function(){var e=this;1==this.globalEnabled&&0==this.schedules.length?(this.bsModalRef=this.modalService.show(s.a),this.bsModalRef.content.bodyText=Object(o.b)("Do you really want to enable the WiFi Schedule without adding time quotas? The Wifi will be turned off permanently."),this.bsModalRef.content.closeButtonText=Object(o.b)("Cancel"),this.bsModalRef.content.actionButtonText=Object(o.b)("Turn off the WiFi"),this.bsModalRef.content.ok=function(){e.saveGlobalSettings()}):this.saveGlobalSettings()},e.prototype.saveGlobalSettings=function(){var e=this;this.spinner.show(),this.scheduleService.saveGlobalSettings(this.globalName,this.globalEnabled,this.globalForcewifidown).subscribe(function(){for(var t in e.schedules)e.schedules.hasOwnProperty(t)&&(e.schedules[t].enabled=e.globalEnabled.toString(),e.schedules[t].forcewifidown=e.globalForcewifidown.toString());e.getSchedules(),e.notification.success(Object(o.b)("Schedule configuration successfully saved."))})},e.prototype.delete=function(e){var t=this;this.spinner.show(),this.scheduleService.delete(e).subscribe(function(){t.notification.success(Object(o.b)("Successfully deleted.")),t.currentRow=!1,t.saveGlobalSettings(),t.getSchedules()})},e.prototype.saveNew=function(){var e=this;this.validateStartEndTime(this.newSchedule),this.spinner.show(),this.timeValidationError?this.spinner.hide():this.scheduleService.saveSchedule(this.newSchedule,"singleday"==this.newSchedule.daysofweek?this.newSchedule.weekday:this.newSchedule.daysofweek,this.globalEnabled,!0).subscribe(function(){e.addNew=!1,e.saveGlobalSettings()})},e.prototype.saveSchedule=function(e){var t=this;this.spinner.show(),this.validateStartEndTime(e),this.timeValidationError?this.spinner.hide():this.scheduleService.saveSchedule(e,"singleday"==e.daysofweek?e.weekday:e.daysofweek,this.globalEnabled).subscribe(function(){t.currentRow=!1,t.saveGlobalSettings()})},e.prototype.addNewSchedule=function(){this.nullNewSchedule(),this.delos.form.markAsDirty(),this.addNew=!0},e.prototype.editRow=function(e){this.currentRow=e,this.editSchedule=!0},e.prototype.synchMins=function(e,t){"starthour"==t&&(e.startmins||(e.startmins="0")),"endhour"==t&&(e.endmins&&"24"!=e.endhour||(e.endmins="0"))},e.prototype.synchWeekday=function(e){var t=e;"singleday"==e.daysofweek?(e.showWeekdays=!0,t.weekday="Monday"):(e.showWeekdays=!1,t.weekday="")},e.prototype.validateStartEndTime=function(e){var t=this.scheduleService.validateStartEndTime(e.starthour,e.startmins,e.endhour,e.endmins),n=t[0],r=t[1];if(!(n<r))return n==r?(this.timeValidationError=!0,void(this.timeValidationErrorMsg=Object(o.b)("Start time and end time cannot be equal! Please correct your time quotas!"))):(this.timeValidationError=!0,void(this.timeValidationErrorMsg=Object(o.b)("Stop time must be after start time! Please correct your time quotas!")));this.timeValidationError=!1,this.timeValidationErrorMsg=!1},e.prototype.markAsDirty=function(){this.delos.form.markAsDirty(),this.delos.form.updateValueAndValidity()},e.prototype.markAsPristine=function(){this.delos.form.markAsPristine(),this.delos.form.updateValueAndValidity()},e.prototype.cancel=function(){this.addNew=!1,this.currentRow=!1,this.editSchedule=!1,this.getSchedules(),this.markAsPristine()},e.prototype.resetOpenRows=function(){1!=this.globalEnabled&&(this.addNew=!1,this.currentRow=!1,this.editSchedule=!1)},e.prototype.nullNewSchedule=function(){this.newSchedule={daysofweek:"",weekday:"",starthour:"",startmins:"",endhour:"",endmins:""}},e}()},xMyE:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("mrSG"),i=n("FFOo"),o=n("+umK"),s=n("2Bdj");function a(e,t,n){return function(r){return r.lift(new u(e,t,n))}}var u=function(){function e(e,t,n){this.nextOrObserver=e,this.error=t,this.complete=n}return e.prototype.call=function(e,t){return t.subscribe(new c(e,this.nextOrObserver,this.error,this.complete))},e}(),c=function(e){function t(t,n,r,i){var a=e.call(this,t)||this;return a._tapNext=o.a,a._tapError=o.a,a._tapComplete=o.a,a._tapError=r||o.a,a._tapComplete=i||o.a,Object(s.a)(n)?(a._context=a,a._tapNext=n):n&&(a._context=n,a._tapNext=n.next||o.a,a._tapError=n.error||o.a,a._tapComplete=n.complete||o.a),a}return r.c(t,e),t.prototype._next=function(e){try{this._tapNext.call(this._context,e)}catch(t){return void this.destination.error(t)}this.destination.next(e)},t.prototype._error=function(e){try{this._tapError.call(this._context,e)}catch(e){return void this.destination.error(e)}this.destination.error(e)},t.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(e){return void this.destination.error(e)}return this.destination.complete()},t}(i.a)},xR9I:function(e,t,n){"use strict";n.d(t,"a",function(){return i});var r=n("K9Ia"),i=(n("Sxbm"),function(){function e(e,t,n){this.templateRef=e,this.viewContainer=t,this.isRetailService=n,this.isRetail$=new r.a}return e.prototype.ngOnInit=function(){this.isRetailService.isDeviceLicenseRetail()&&!this.renderTemplate?this.viewContainer.clear():this.viewContainer.createEmbeddedView(this.templateRef)},e.prototype.ngOnDestroy=function(){},e}())},xTla:function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r="function"==typeof Symbol&&Symbol.observable||"@@observable"},xXU7:function(e,t,n){"use strict";n.d(t,"a",function(){return s});var r=n("6blF"),i=n("T1DM"),o=n("/21U");function s(e,t){return void 0===e&&(e=0),void 0===t&&(t=i.a),(!Object(o.a)(e)||e<0)&&(e=0),t&&"function"==typeof t.schedule||(t=i.a),new r.a(function(n){return n.add(t.schedule(a,e,{subscriber:n,counter:0,period:e})),n})}function a(e){var t=e.subscriber,n=e.counter,r=e.period;t.next(n),this.schedule({subscriber:t,counter:n+1,period:r},r)}},xZGU:function(e,t,n){"use strict";(function(t){var r,i=n("tjlA"),o=i.Buffer,s={};for(r in i)i.hasOwnProperty(r)&&"SlowBuffer"!==r&&"Buffer"!==r&&(s[r]=i[r]);var a=s.Buffer={};for(r in o)o.hasOwnProperty(r)&&"allocUnsafe"!==r&&"allocUnsafeSlow"!==r&&(a[r]=o[r]);if(s.Buffer.prototype=o.prototype,a.from&&a.from!==Uint8Array.from||(a.from=function(e,t,n){if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type '+typeof e);if(e&&void 0===e.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);return o(e,t,n)}),a.alloc||(a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError('The "size" argument must be of type number. Received type '+typeof e);if(e<0||e>=2*(1<<30))throw new RangeError('The value "'+e+'" is invalid for option "size"');var r=o(e);return t&&0!==t.length?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r}),!s.kStringMaxLength)try{s.kStringMaxLength=t.binding("buffer").kStringMaxLength}catch(u){}s.constants||(s.constants={MAX_LENGTH:s.kMaxLength},s.kStringMaxLength&&(s.constants.MAX_STRING_LENGTH=s.kStringMaxLength)),e.exports=s}).call(this,n("8oxB"))},xkKp:function(e,t,n){"use strict";var r=n("xZGU").Buffer;function i(e,t){this.iconv=t}t.utf7=i,t.unicode11utf7="utf7",i.prototype.encoder=s,i.prototype.decoder=a,i.prototype.bomAware=!0;var o=/[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;function s(e,t){this.iconv=t.iconv}function a(e,t){this.iconv=t.iconv,this.inBase64=!1,this.base64Accum=""}s.prototype.write=function(e){return r.from(e.replace(o,(function(e){return"+"+("+"===e?"":this.iconv.encode(e,"utf16-be").toString("base64").replace(/=+$/,""))+"-"}).bind(this)))},s.prototype.end=function(){};for(var u=/[A-Za-z0-9\/+]/,c=[],l=0;l<256;l++)c[l]=u.test(String.fromCharCode(l));var h="+".charCodeAt(0),f="-".charCodeAt(0),d="&".charCodeAt(0);function p(e,t){this.iconv=t}function g(e,t){this.iconv=t.iconv,this.inBase64=!1,this.base64Accum=r.alloc(6),this.base64AccumIdx=0}function b(e,t){this.iconv=t.iconv,this.inBase64=!1,this.base64Accum=""}a.prototype.write=function(e){for(var t="",n=0,i=this.inBase64,o=this.base64Accum,s=0;s<e.length;s++)if(i){if(!c[e[s]]){if(s==n&&e[s]==f)t+="+";else{var a=o+e.slice(n,s).toString();t+=this.iconv.decode(r.from(a,"base64"),"utf16-be")}e[s]!=f&&s--,n=s+1,i=!1,o=""}}else e[s]==h&&(t+=this.iconv.decode(e.slice(n,s),"ascii"),n=s+1,i=!0);if(i){var u=(a=o+e.slice(n).toString()).length-a.length%8;o=a.slice(u),a=a.slice(0,u),t+=this.iconv.decode(r.from(a,"base64"),"utf16-be")}else t+=this.iconv.decode(e.slice(n),"ascii");return this.inBase64=i,this.base64Accum=o,t},a.prototype.end=function(){var e="";return this.inBase64&&this.base64Accum.length>0&&(e=this.iconv.decode(r.from(this.base64Accum,"base64"),"utf16-be")),this.inBase64=!1,this.base64Accum="",e},t.utf7imap=p,p.prototype.encoder=g,p.prototype.decoder=b,p.prototype.bomAware=!0,g.prototype.write=function(e){for(var t=this.inBase64,n=this.base64Accum,i=this.base64AccumIdx,o=r.alloc(5*e.length+10),s=0,a=0;a<e.length;a++){var u=e.charCodeAt(a);32<=u&&u<=126?(t&&(i>0&&(s+=o.write(n.slice(0,i).toString("base64").replace(/\//g,",").replace(/=+$/,""),s),i=0),o[s++]=f,t=!1),t||(o[s++]=u,u===d&&(o[s++]=f))):(t||(o[s++]=d,t=!0),t&&(n[i++]=u>>8,n[i++]=255&u,i==n.length&&(s+=o.write(n.toString("base64").replace(/\//g,","),s),i=0)))}return this.inBase64=t,this.base64AccumIdx=i,o.slice(0,s)},g.prototype.end=function(){var e=r.alloc(10),t=0;return this.inBase64&&(this.base64AccumIdx>0&&(t+=e.write(this.base64Accum.slice(0,this.base64AccumIdx).toString("base64").replace(/\//g,",").replace(/=+$/,""),t),this.base64AccumIdx=0),e[t++]=f,this.inBase64=!1),e.slice(0,t)};var v=c.slice();v[",".charCodeAt(0)]=!0,b.prototype.write=function(e){for(var t="",n=0,i=this.inBase64,o=this.base64Accum,s=0;s<e.length;s++)if(i){if(!v[e[s]]){if(s==n&&e[s]==f)t+="&";else{var a=o+e.slice(n,s).toString().replace(/,/g,"/");t+=this.iconv.decode(r.from(a,"base64"),"utf16-be")}e[s]!=f&&s--,n=s+1,i=!1,o=""}}else e[s]==d&&(t+=this.iconv.decode(e.slice(n,s),"ascii"),n=s+1,i=!0);if(i){var u=(a=o+e.slice(n).toString().replace(/,/g,"/")).length-a.length%8;o=a.slice(u),a=a.slice(0,u),t+=this.iconv.decode(r.from(a,"base64"),"utf16-be")}else t+=this.iconv.decode(e.slice(n),"ascii");return this.inBase64=i,this.base64Accum=o,t},b.prototype.end=function(){var e="";return this.inBase64&&this.base64Accum.length>0&&(e=this.iconv.decode(r.from(this.base64Accum,"base64"),"utf16-be")),this.inBase64=!1,this.base64Accum="",e}},y3By:function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n.d(t,"b",function(){return o});var r=n("+umK");function i(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o(e)}function o(e){return e?1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}:r.a}},yGOH:function(e,t,n){"use strict";n("CPDd"),n("k1Yr"),n("mGPz"),n("4PzE"),n("mrSG");var r=n("gIcY"),i=(n("7z7v"),n("CcnG")),o=(Object(i.V)(function(){return o}),function(){function e(){}return e.prototype.ngOnInit=function(){this.validator=this.passwordValidator(this.minLength,this.strength)},e.prototype.validate=function(e){return this.validator(e)},e.prototype.registerOnValidatorChange=function(e){this.onChange=e},e.prototype.isPresent=function(e){return null!=e},e.prototype.passwordValidator=function(e,t){var n=this;return function(i){if(n.isPresent(r.s.required(i)))return null;var o=i.value;if(o.length<e)return{minLength:!0};var s=o.match(/[^-a-zA-Z0-9 !@#$%^\&*\)\(\[\]\{\}\|,:;\'\"+=\._\/\?\\<>]/);if(null!==s)return{pwInvalid:!0,invalidChar:s[0]};if(t){var a=!1;if(t<2&&(a=!0),0>=n.strength&&(a=!0),0>=n.strength&&(a=!0),0>=n.strength&&(a=!0),!1===a)return{pwVariant:!0}}return null}},e}());n("IZUe"),n("1dzw"),n("st81"),n("xR9I"),n("ilcq"),n.d(t,"a",function(){return s});var s=function(){return function(){}}()},yLpj:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"==typeof window&&(n=window)}e.exports=n},yZXx:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r,i=n("3GIH");function o(){return void 0===i.b||(void 0===i.b.__theme?r?"bs3"===r:"bs3"===(r=function(){if("undefined"==typeof document)return null;var e=document.createElement("span");e.innerText="test bs version",document.body.appendChild(e),e.classList.add("d-none");var t=e.getBoundingClientRect();return document.body.removeChild(e),t&&0===t.top?"bs4":"bs3"}()):"bs4"!==i.b.__theme)}},ycm9:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("pugT"),i=n("K9Ia"),o=n("ny24"),s=(n("UVPe"),n("+3se")),a=(n("P/o0"),function(){function e(e,t,n){this.scannerService=e,this.router=t,this.spinner=n,this.getRadiosSubscription=new r.a,this.ngUnsubscribe=new i.a,this.timeoutSubject=new i.a,this.aps=[],this.orderby="quality",this.reverse=!0,this.callPending=!1,this.order=function(e){this.reverse=this.orderby===e&&!this.reverse,this.orderby=e}}return e.prototype.ngOnInit=function(){this.getRadios()},e.prototype.ngOnDestroy=function(){clearTimeout(this.timeout),this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.scan=function(){var e=this;this.callPending||this.scannerService.getDevices().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){e.aps=[].concat.apply([],t),e.callPending=!1,e.spinner.hide(),clearTimeout(e.timeout)},function(){e.router.navigateByUrl("/error")})},e.prototype.getRadios=function(){var e=this;this.getRadiosSubscription.unsubscribe(),this.getRadiosSubscription=this.scannerService.getRadios().pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){for(var n in e.radios=[],e.activeRadios=[],t)if(t.hasOwnProperty(n)){var r=t[n],i=parseInt(r.disabled,10)||0;e.radios.push({radio:n.substr(-1),configuredChannel:r.channel,disabled:i,enabled:0==i}),1!=i&&e.activeRadios.push({radio:n.substr(-1),configuredChannel:r.channel,disabled:i,enabled:1})}e.activeRadios.length?(e.scan(),e.showActive=!0):(e.spinner.hide(),e.showActive=!1,e.message=Object(s.b)("The WiFi network is currently switched off, please switch the WiFi on again to see the Neighbour networks."))})},e}())},yeMH:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n("K9Ia"),i=n("xXU7"),o=n("ny24"),s=n("Vx+w"),a=(n("jGGy"),n("Obbf"),n("nbXG"),n("3GWt"),function(){function e(e,t,n,i){this.localStorage=e,this.waitPingSevice=t,this.authService=n,this.notification=i,this.method="HEAD",this.url="/",this.ngUnsubscribe=new r.a}return e.prototype.ngOnInit=function(){this.lastConfigName="waitPing."+this.realm},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.wait=function(e,t,n){var r=this;this.realm=e,this.config=t,this.callback=n;var a=this.localStorage.get(this.lastConfigName);a&&s.a.dev&&s.a.dev.timeReboots&&(this.config.ETA=a),this.config.gracePeriod||(this.config.gracePeriod=5e3),this.config.ETA<this.config.gracePeriod&&(this.config.ETA=this.config.gracePeriod),this.config.pingInterval||(this.config.pingInterval=250),this.started=(new Date).getTime(),s.a.dev&&s.a.dev.deviceUrl&&(this.url=s.a.dev.deviceUrl+"/ubus",this.method="OPTIONS"),Object(i.a)(this.config.pingInterval).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(){r.pingDevice()})},e.prototype.pingDevice=function(){var e=this;this.elapsed=(new Date).getTime()-this.started,this.progress=100*this.elapsed/this.config.ETA,this.progress>99&&(this.progress=99),this.iprogress=Math.floor(this.progress),this.elapsed<this.config.gracePeriod||(this.config.no_ping&&this.elapsed>=this.config.ETA?this.stopProgress():(this.elapsed>1.5*this.config.ETA&&(this.notification.error("Could not connect to device.  Please re-establish the connection manually.",{sticky:!0}),this.stopProgress()),this.pingPending||(this.pingPending=!0,this.waitPingSevice.call(this.url,this.method).pipe(Object(o.a)(this.ngUnsubscribe)).subscribe(function(t){t.status>=0&&e.stopProgress()},function(t){e.pingPending=!1,t.status>=0&&e.stopProgress()}))))},e.prototype.stopProgress=function(){this.authService.setDisableGetTimeout(!1),this.ngUnsubscribe.next(!1),s.a.dev&&s.a.dev.timeReboots&&(this.localStorage.set(this.lastConfigName,this.elapsed),this.progress=100),this.callback()},e}())},zIf0:function(e,t,n){"use strict";n.d(t,"c",function(){return r}),n.d(t,"e",function(){return i}),n.d(t,"a",function(){return o}),n.d(t,"d",function(){return s}),n.d(t,"b",function(){return a});var r=function(){return function(){}}(),i={backdrop:!0,keyboard:!0,focus:!0,show:!1,ignoreBackdropClick:!1,class:"",animated:!0,initialState:{}},o={SCROLLBAR_MEASURER:"modal-scrollbar-measure",BACKDROP:"modal-backdrop",OPEN:"modal-open",FADE:"fade",IN:"in",SHOW:"show"},s={MODAL:300,BACKDROP:150},a={BACKRDOP:"backdrop-click",ESC:"esc"}},zUnb:function(e,t,n){"use strict";n.r(t);var r=n("CcnG"),i=n("mrSG"),o=n("A7o+"),s=n("7klA"),a=n("67Y/"),u=function(){function e(e,t,n){void 0===t&&(t="i18n"),void 0===n&&(n=".po"),this._http=e,this._prefix=t,this._suffix=n,this.domain=""}return e.prototype.getTranslation=function(e){var t=this;return this._http.get(this._prefix+"/"+e+this._suffix,{responseType:"text"}).pipe(Object(a.a)(function(e){return t.parse(e)}))},e.prototype.parse=function(e){var t=this,n={},r=s.po.parse(e,"utf-8");return r.translations.hasOwnProperty(this.domain)?(Object.keys(r.translations[this.domain]).forEach(function(e){var i=r.translations[t.domain][e].msgstr.pop();e.length>0&&i.length>0&&(n[e]=i)}),n):n},e}(),c=function(){function e(){}return e.prototype.handle=function(e){return e.interpolateParams?e.key.replace(/\{(\w+)\}/g,function(t,n){return e.interpolateParams[n]}):e.key},e}(),l=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.templateMatcher=/{\s?([^{}\s]*)\s?}/g,t}return Object(i.c)(t,e),t}(o.c);function h(){return new l}function f(e){return new u(e,"assets/i18n",".po")}var d=function(){return function(){}}(),p=n("jGGy"),g=n("Gci6"),b=n("K9Ia"),v=n("ny24"),y=767,m=function(){function e(e,t,n,r){var i=this;this.zone=e,this.changeDetectionRef=t,this.customization=n,this.authService=r,this.title="app",this.ngUnsubscribe=new b.a,this.customData={},this.mediaMatcher=matchMedia("(max-width: "+y+"px)"),this.showMainSpinner=!0,this.mediaMatcher.addListener(function(e){i.zone.run(function(){return i.mediaMatcher=e})})}return e.prototype.ngOnInit=function(){this.getCustomData()},e.prototype.ngAfterViewInit=function(){this.authService.checkAuthStatus(),this.onResize(),this.changeDetectionRef.detectChanges()},e.prototype.getCustomData=function(){var e=this;this.customization.getCustomization().pipe(Object(v.a)(this.ngUnsubscribe)).subscribe(function(t){e.customData=t,e.showMainSpinner=!1})},e.prototype.onResize=function(e){this.showSideNav=!this.mediaMatcher.matches},e}(),w=n("pMnS"),_=function(){return function(){var e=this;this.direction="down",this.isOpenChange=new r.m,this.isDisabledChange=new r.m,this.toggleClick=new r.m,this.dropdownMenu=new Promise(function(t){e.resolveDropdownMenu=t})}}(),S=n("yZXx"),O=function(){function e(e,t,n,r){var i=this;this._state=e,this.cd=t,this._renderer=n,this.isOpen=!1,this._subscription=e.isOpenChange.subscribe(function(e){i.isOpen=e;var t=r.nativeElement.querySelector(".dropdown-menu");t&&!Object(S.a)()&&(i._renderer.addClass(t,"show"),t.classList.contains("dropdown-menu-right")&&(i._renderer.setStyle(t,"left","auto"),i._renderer.setStyle(t,"right","0")),"up"===i.direction&&(i._renderer.setStyle(t,"top","auto"),i._renderer.setStyle(t,"transform","translateY(-101%)"))),i.cd.markForCheck(),i.cd.detectChanges()})}return Object.defineProperty(e.prototype,"direction",{get:function(){return this._state.direction},enumerable:!0,configurable:!0}),e.prototype.ngOnDestroy=function(){this._subscription.unsubscribe()},e}(),C=r.ob({encapsulation:2,styles:[],data:{}});function j(e){return r.Kb(2,[(e()(),r.qb(0,0,null,null,1,"div",[],[[2,"dropup",null],[2,"dropdown",null],[2,"show",null],[2,"open",null]],null,null,null,null)),r.zb(null,0)],null,function(e,t){var n=t.component;e(t,0,0,"up"===n.direction,"down"===n.direction,n.isOpen,n.isOpen)})}function k(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"bs-dropdown-container",[["style","display:block;position: absolute;"]],null,null,null,j,C)),r.pb(1,180224,null,0,O,[_,r.h,r.E,r.k],null,null)],null,null)}var E=r.mb("bs-dropdown-container",O,k,{},{},["*"]),x=n("ueff"),P=n("lOTE"),T=n("KXou"),A=n("Ip0R"),I=n("gIcY"),M=n("1dzw"),N=n("Vx+w"),R=n("Obbf"),D=n("UVPe"),V=n("+3se"),L=function(){function e(e,t,n,r,i,o,s){this.spinner=e,this.authService=t,this.notification=n,this.router=r,this.route=i,this.customizationService=o,this.translateService=s,this.config=N.a}return e.prototype.ngOnInit=function(){var e=this;this.loginPending=!1,this.authService.isLoggedInSubject$.next(!1),N.a.delos.noAuth?(this.spinner.hide(),this.login()):this.tryLogin(),this.customizationService.productName.subscribe(function(t){e.welcomeText=e.translateService.stream(Object(V.b)("Welcome to your {product}"),{product:t})})},e.prototype.handleKeyboardEvent=function(e){e=e||window.event;var t=String.fromCharCode(e.which);this.capslockOn=!(!e.getModifierState||!e.getModifierState("CapsLock"))||t.toUpperCase()===t&&t.toLowerCase()!==t&&!e.shiftKey},e.prototype.tryLogin=function(){var e=this;this.authService.loginWithoutPassword().subscribe(function(t){if(0===t.result[0]){var n=t.result[1].ubus_rpc_session;N.a.delos.noForcedPassword?(e.authService.setSid(n),e.authService.noForcedPasswordSet(!0),e.route.queryParams.pipe(Object(a.a)(function(e){return e.redirectTo})).subscribe(function(t){e.router.navigate(t?[t]:["/overview"])})):e.router.navigate(["/system/management",{sid:n}])}else e.spinner.hide()},function(){e.spinner.hide()})},e.prototype.login=function(){var e=this;this.spinner.show(),this.authService.deleteSid();var t=this.password;this.loginPending||(this.loginPending=!0,this.authService.setSid(null),(null==t||this.config.delos.noAuth)&&(t=""),this.authService.login(t).subscribe(function(t){0===t.result[0]?(e.authService.setSid(t.result[1].ubus_rpc_session),e.authService.checkSessionExpirity(),e.route.queryParams.pipe(Object(a.a)(function(e){return e.redirectTo})).subscribe(function(t){e.router.navigate(t?[t]:["/"]),e.authService.isLoggedInSubject$.next(!0)}),e.loginPending=!1,e.spinner.hide()):(e.loginPending=!1,e.spinner.hide(),e.notification.error(Object(V.b)("Incorrect password!")))},function(){e.notification.error(Object(V.b)("Connection lost!"))}))},e}(),U=n("ZYCi"),F=r.ob({encapsulation:2,styles:[],data:{}});function B(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,0,"span",[["class","glyphicon glyphicon-alert text-warning"]],null,null,null,null,null))],null,null)}function z(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,2,"span",[["class","hint-text"],["translate",""]],null,null,null,null,null)),r.pb(1,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,[" Caps Lock is on! "]))],function(e,t){e(t,1,0,"")},null)}function H(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,36,"div",[["class","widget panel panel-default login-form-container col-md-offset-2"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,2,"div",[["class","widget-head"]],null,null,null,null,null)),(e()(),r.Ib(2,null,[""," "])),r.Cb(131072,A.b,[r.h]),(e()(),r.qb(4,0,null,null,32,"div",[["class","panel-body"]],null,null,null,null,null)),(e()(),r.qb(5,0,null,null,31,"form",[["autocomplete","off"],["class","form-horizontal"],["id","login"],["name","loginForm"],["novalidate",""]],[[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"submit"],[null,"reset"]],function(e,t,n){var i=!0;return"submit"===t&&(i=!1!==r.Ab(e,7).onSubmit(n)&&i),"reset"===t&&(i=!1!==r.Ab(e,7).onReset()&&i),i},null,null)),r.pb(6,16384,null,0,I.w,[],null,null),r.pb(7,4210688,[["loginForm",4]],0,I.m,[[8,null],[8,null]],null,null),r.Fb(2048,null,I.c,null,[I.m]),r.pb(9,16384,null,0,I.l,[[4,I.c]],null,null),(e()(),r.qb(10,0,null,null,4,"div",[["class","col-sm-12"]],null,null,null,null,null)),(e()(),r.qb(11,0,null,null,3,"div",[["class","login-msg"]],null,null,null,null,null)),(e()(),r.qb(12,0,null,null,2,"p",[["translate",""]],null,null,null,null,null)),r.pb(13,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Please log in with your password!"])),(e()(),r.qb(15,0,null,null,17,"div",[["class","form-group"]],null,null,null,null,null)),(e()(),r.qb(16,0,null,null,2,"label",[["class","control-label text-right col-sm-4"],["for","login-password"],["translate",""]],null,null,null,null,null)),r.pb(17,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Password"])),(e()(),r.qb(19,0,null,null,13,"div",[["class","col-sm-8"]],null,null,null,null,null)),(e()(),r.qb(20,0,null,null,7,"input",[["aria-describedby","basic-addon1"],["autocomplete","password"],["class","form-control"],["forceFocusForMobileDevice","true"],["id","login-password"],["name","password"],["type","password"]],[[8,"placeholder",0],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null]],[[null,"ngModelChange"],[null,"input"],[null,"blur"],[null,"compositionstart"],[null,"compositionend"]],function(e,t,n){var i=!0,o=e.component;return"input"===t&&(i=!1!==r.Ab(e,21)._handleInput(n.target.value)&&i),"blur"===t&&(i=!1!==r.Ab(e,21).onTouched()&&i),"compositionstart"===t&&(i=!1!==r.Ab(e,21)._compositionStart()&&i),"compositionend"===t&&(i=!1!==r.Ab(e,21)._compositionEnd(n.target.value)&&i),"ngModelChange"===t&&(i=!1!==(o.password=n)&&i),i},null,null)),r.pb(21,16384,null,0,I.d,[r.E,r.k,[2,I.a]],null,null),r.Fb(1024,null,I.i,function(e){return[e]},[I.d]),r.pb(23,671744,null,0,I.n,[[2,I.c],[8,null],[8,null],[6,I.i]],{name:[0,"name"],model:[1,"model"]},{update:"ngModelChange"}),r.Fb(2048,null,I.j,null,[I.n]),r.pb(25,16384,null,0,I.k,[[4,I.j]],null,null),r.pb(26,540672,null,0,M.a,[r.k,r.z],{appFocus:[0,"appFocus"],forceFocusForMobileDevice:[1,"forceFocusForMobileDevice"]},null),r.Cb(131072,o.i,[o.j,r.h]),(e()(),r.qb(28,0,null,null,4,"p",[["class","input-info-p"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,B)),r.pb(30,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.hb(16777216,null,null,1,null,z)),r.pb(32,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.qb(33,0,null,null,3,"div",[["class","form-group"]],null,null,null,null,null)),(e()(),r.qb(34,0,null,null,2,"button",[["class","btn btn-default pull-right login-btn"],["id","btn-login"],["translate",""],["type","submit"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.login()&&r),r},null,null)),r.pb(35,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Login"]))],function(e,t){var n=t.component;e(t,13,0,""),e(t,17,0,""),e(t,23,0,"password",n.password),e(t,26,0,!0,"true"),e(t,30,0,n.capslockOn&&n.password),e(t,32,0,n.capslockOn&&n.password),e(t,35,0,"")},function(e,t){var n=t.component;e(t,2,0,r.Jb(t,2,0,r.Ab(t,3).transform(n.welcomeText))),e(t,5,0,r.Ab(t,9).ngClassUntouched,r.Ab(t,9).ngClassTouched,r.Ab(t,9).ngClassPristine,r.Ab(t,9).ngClassDirty,r.Ab(t,9).ngClassValid,r.Ab(t,9).ngClassInvalid,r.Ab(t,9).ngClassPending),e(t,20,0,r.sb(1,"",r.Jb(t,20,0,r.Ab(t,27).transform("Password")),""),r.Ab(t,25).ngClassUntouched,r.Ab(t,25).ngClassTouched,r.Ab(t,25).ngClassPristine,r.Ab(t,25).ngClassDirty,r.Ab(t,25).ngClassValid,r.Ab(t,25).ngClassInvalid,r.Ab(t,25).ngClassPending)})}function q(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"app-auth",[],null,[["document","keypress"]],function(e,t,n){var i=!0;return"document:keypress"===t&&(i=!1!==r.Ab(e,1).handleKeyboardEvent(n)&&i),i},H,F)),r.pb(1,114688,null,0,L,[D.a,p.a,R.a,U.m,U.a,g.a,o.j],null,null)],function(e,t){e(t,1,0)},null)}var G=r.mb("app-auth",L,q,{},{},[]),W=function(){function e(e,t){this.spinner=e,this.router=t}return e.prototype.ngOnInit=function(){this.errorCode=this.router.snapshot.params.errorCode,this.errorMsg=this.router.snapshot.params.errorMsg,this.spinner.hide()},e}(),K=r.ob({encapsulation:0,styles:[[""]],data:{}});function Z(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,6,"div",[["class","row"],["id","error-code"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,5,"div",[["class","col-lg-10 col-md-12"]],null,null,null,null,null)),(e()(),r.qb(2,0,null,null,4,"span",[["translate",""]],null,null,null,null,null)),r.pb(3,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Error code: "])),(e()(),r.qb(5,0,null,null,1,"span",[],null,null,null,null,null)),(e()(),r.Ib(6,null,["",""]))],function(e,t){e(t,3,0,"")},function(e,t){e(t,6,0,t.component.errorCode)})}function Y(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,6,"div",[["class","row"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,5,"div",[["class","col-lg-10 col-md-12"]],null,null,null,null,null)),(e()(),r.qb(2,0,null,null,2,"strong",[["translate",""]],null,null,null,null,null)),r.pb(3,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["An error has occurred. Please click the arrow to reload the page!"])),(e()(),r.qb(5,0,null,null,1,"a",[["href","/"],["target","_self"]],null,null,null,null,null)),(e()(),r.qb(6,0,null,null,0,"span",[["class","glyphicon glyphicon-refresh"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,Z)),r.pb(8,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.qb(9,0,null,null,2,"div",[["class","row"],["id","error-message"]],null,null,null,null,null)),(e()(),r.qb(10,0,null,null,1,"div",[["class","col-lg-10 col-md-12"]],null,null,null,null,null)),(e()(),r.Ib(11,null,[" "," "]))],function(e,t){var n=t.component;e(t,3,0,""),e(t,8,0,n.errorCode)},function(e,t){e(t,11,0,t.component.errorMsg)})}function $(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"app-error-view",[],null,null,null,Y,K)),r.pb(1,114688,null,0,W,[D.a,U.a],null,null)],function(e,t){e(t,1,0)},null)}var Q=r.mb("app-error-view",W,$,{},{},[]),J=function(){function e(e,t,n){this.spinner=e,this.sanitized=t,this.http=n}return e.prototype.ngOnInit=function(){var e=this;this.http.get("../licenses/oss-license-info.html",{responseType:"text"}).subscribe(function(t){e.html=e.sanitized.bypassSecurityTrustHtml(t),e.spinner.hide()},function(t){e.html="<h3 translate>Error occured</h3>",e.spinner.hide()})},e.prototype.scrollToId=function(e){e.preventDefault(),e.target.hash&&(document.getElementById(e.target.hash.substring(1)).scrollIntoView(),window.scrollBy(0,-100))},e}(),X=n("ZYjt"),ee=n("t/Na"),te=r.ob({encapsulation:2,styles:[],data:{}});function ne(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,0,"span",[],[[8,"innerHTML",1]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.scrollToId(n)&&r),r},null,null))],null,function(e,t){e(t,0,0,t.component.html)})}function re(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"app-licenses",[],null,null,null,ne,te)),r.pb(1,114688,null,0,J,[D.a,X.b,ee.c],null,null)],function(e,t){e(t,1,0)},null)}var ie=r.mb("app-licenses",J,re,{},{},[]),oe=n("weCn"),se=function(){function e(e,t){this._el=e,this._renderer=t,this.collapsed=new r.m,this.expanded=new r.m,this.isExpanded=!0,this.isCollapsed=!1,this.isCollapse=!0,this.isCollapsing=!1}return Object.defineProperty(e.prototype,"collapse",{get:function(){return this.isExpanded},set:function(e){this.isExpanded=e,this.toggle()},enumerable:!0,configurable:!0}),e.prototype.toggle=function(){this.isExpanded?this.hide():this.show()},e.prototype.hide=function(){this.isCollapse=!1,this.isCollapsing=!0,this.isExpanded=!1,this.isCollapsed=!0,this.isCollapse=!0,this.isCollapsing=!1,this.display="none",this.collapsed.emit(this)},e.prototype.show=function(){this.isCollapse=!1,this.isCollapsing=!0,this.isExpanded=!0,this.isCollapsed=!1,this.display="block",this.isCollapse=!0,this.isCollapsing=!1,this._renderer.setStyle(this._el.nativeElement,"overflow","visible"),this._renderer.setStyle(this._el.nativeElement,"height","auto"),this.expanded.emit(this)},e}(),ae=n("AuKA"),ue=n("x5KT"),ce=n("H4wX"),le=n("m2M5"),he=n("Sxbm"),fe=function(){function e(e){this.isRetailService=e,this.routes=[],this.isRetail=this.isRetailService.isDeviceLicenseRetail(),this.routes=this.generateRoutes()}return e.prototype.generateRoutes=function(){var e=Object(V.e)(N.a,"lan")&&Object.values(N.a.lan).length>0,t=N.a.plc,n=N.a.ghn,r=Object(V.e)(N.a,"wireless.devices")&&Object.values(N.a.wireless.devices).length>0,i=[{name:"overview",displayName:Object(V.b)("Overview"),children:[]}];if(r){var o=Object(V.c)(this.generateRoutesForRetailOrPro.bind(this),this.generateWifiRoutesForSingleDoubleRadio)(le.b);i.push({name:"wifi",displayName:"WiFi",children:o.slice(),redirectLink:o[0].path})}t&&i.push({name:"powerline",displayName:"Powerline",children:ae.b.slice(1,ae.b.length).slice(),redirectLink:ae.b[1].path}),n&&i.push({name:"powerline",displayName:"Powerline",children:[]}),e&&(o=this.generateRoutesForRetailOrPro(ue.b),i.push({name:"lan",displayName:"LAN",children:o.slice(),redirectLink:o[0].path}));var s=Object(V.c)(this.generateRoutesProduction,this.generateBuzzerRoute,this.generateRoutesForRetailOrPro.bind(this))(ce.b);return i.push({name:"system",displayName:"System",children:s.slice(),redirectLink:s[0].path}),i},e.prototype.generateBuzzerRoute=function(e){return e.filter(function(e){return!(e.data.supportBuzzerDevices&&!e.data.supportBuzzerDevices.includes(N.a.delos.productID))})},e.prototype.generateRoutesProduction=function(e){var t=!!N.a.dev;return e.filter(function(e){return!(!t&&e.data.hideForProduction)})},e.prototype.generateWifiRoutesForSingleDoubleRadio=function(e){var t=1==Object.values(N.a.wireless.devices).length;return e.filter(function(e){return!(e.data.hideForSingleRadio&&t)})},e.prototype.generateRoutesForRetailOrPro=function(e){var t=this;return e=e.filter(function(e){return!(t.isRetail&&e.data.appHideForRetail||!t.isRetail&&e.data.appHideForPro)}),this.isRetail&&e.sort(function(e,t){return e.data.retailOrder>t.data.retailOrder?1:-1}),e},e.prototype.getRoutes=function(){return this.routes},e}(),de=767,pe=function(){function e(e,t,n,r,i,o,s,a){var u=this;this.ref=e,this.zone=t,this.renderer=n,this.authService=r,this.routesGenerator=i,this.spinner=o,this.isRetailService=s,this.router=a,this.noForcedPassword$=this.authService.noForcedPassword$,this.isCollapsed=!1,this.mediaMatcher=matchMedia("(max-width: "+de+"px)"),this.mediaMatcher.addListener(function(e){t.run(function(){return u.mediaMatcher=e})}),this.isRetail=this.isRetailService.isDeviceLicenseRetail(),this.sections=this.routesGenerator.getRoutes(),this.topLevelItem=this.getSectionFromRouter(),this.navigationSubscription=this.router.events.subscribe(function(e){u.topLevelItem=u.getSectionFromRouter()})}return e.prototype.getSectionFromRouter=function(){return"/"!==this.router.url?this.router.url.split("/")[1]:this.sections[0].name},e.prototype.ngOnInit=function(){this.shouldShowSideMenu()},e.prototype.onResize=function(e){this.shouldShowSideMenu()},e.prototype.shouldShowSideMenu=function(){this.isCollapsed=this.mediaMatcher.matches},e.prototype.logout=function(){this.spinner.show(),this.authService.logout()},e.prototype.onTopLevelClick=function(e,t,n){this.topLevelItem=e,this.mediaMatcher.matches&&n&&n.length||this.router.navigate(t?["/"+e+"/"+t]:["/"+e+"/"])},e.prototype.onClick=function(e){!this.ref.nativeElement.contains(e.target)&&this.mediaMatcher.matches&&"hamburger-menu"!==e.target.id&&"hamburger-menu-container"!==e.target.id&&this.shouldShowSideMenu(),this.ref.nativeElement.contains(e.target)||"hamburger-menu"===e.target.id||"hamburger-menu-container"===e.target.id||this.renderer.removeClass(document.documentElement,"mobile-menu-open")},e}(),ge=r.ob({encapsulation:0,styles:[[".col-fixed-vmenu[_ngcontent-%COMP%]{overflow:auto!important}"]],data:{}});function be(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,"a",[],[[1,"target",0],[8,"href",4]],[[null,"click"]],function(e,t,n){var i=!0,o=e.component;return"click"===t&&(i=!1!==r.Ab(e,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&i),"click"===t&&(o.shouldShowSideMenu(),i=!1!==(o.page=e.parent.context.$implicit.path)&&i),i},null,null)),r.pb(1,671744,[[2,4]],0,U.o,[U.m,U.a,A.k],{routerLink:[0,"routerLink"]},null),(e()(),r.Ib(2,null,["",""])),r.Cb(131072,o.i,[o.j,r.h])],function(e,t){e(t,1,0,r.sb(2,"/",t.parent.parent.parent.parent.context.$implicit.name,"/",t.parent.context.$implicit.path,""))},function(e,t){e(t,0,0,r.Ab(t,1).target,r.Ab(t,1).href),e(t,2,0,r.Jb(t,2,0,r.Ab(t,3).transform(t.parent.context.$implicit.data.displayName)))})}function ve(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,5,"li",[["role","presentation"],["routerLinkActive","active"]],[[8,"id",0]],null,null,null,null)),r.pb(1,1720320,null,2,U.n,[U.m,r.k,r.E,r.h],{routerLinkActive:[0,"routerLinkActive"]},null),r.Gb(603979776,1,{links:1}),r.Gb(603979776,2,{linksWithHrefs:1}),(e()(),r.hb(16777216,null,null,1,null,be)),r.pb(5,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,1,0,"active"),e(t,5,0,!t.context.$implicit["no-route"])},function(e,t){e(t,0,0,r.sb(2,"menu-",t.parent.parent.parent.context.$implicit.name,"-",t.context.$implicit.path,""))})}function ye(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,null,null,null,null,null,null,null)),(e()(),r.hb(16777216,null,null,2,null,ve)),r.pb(2,278528,null,0,A.n,[r.P,r.M,r.s],{ngForOf:[0,"ngForOf"]},null),r.Eb(3,2),(e()(),r.hb(0,null,null,0))],function(e,t){var n=r.Jb(t,2,0,e(t,3,0,r.Ab(t.parent.parent.parent,0),t.parent.parent.context.$implicit.children,"data.retailOrder"));e(t,2,0,n)},null)}function me(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,"a",[],[[1,"target",0],[8,"href",4]],[[null,"click"]],function(e,t,n){var i=!0,o=e.component;return"click"===t&&(i=!1!==r.Ab(e,1).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&i),"click"===t&&(o.shouldShowSideMenu(),i=!1!==(o.page=e.parent.context.$implicit.path)&&i),i},null,null)),r.pb(1,671744,[[4,4]],0,U.o,[U.m,U.a,A.k],{routerLink:[0,"routerLink"]},null),(e()(),r.Ib(2,null,["",""])),r.Cb(131072,o.i,[o.j,r.h])],function(e,t){e(t,1,0,r.sb(2,"/",t.parent.parent.parent.parent.context.$implicit.name,"/",t.parent.context.$implicit.path,""))},function(e,t){e(t,0,0,r.Ab(t,1).target,r.Ab(t,1).href),e(t,2,0,r.Jb(t,2,0,r.Ab(t,3).transform(t.parent.context.$implicit.data.displayName)))})}function we(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,5,"li",[["role","presentation"],["routerLinkActive","active"]],[[8,"id",0]],null,null,null,null)),r.pb(1,1720320,null,2,U.n,[U.m,r.k,r.E,r.h],{routerLinkActive:[0,"routerLinkActive"]},null),r.Gb(603979776,3,{links:1}),r.Gb(603979776,4,{linksWithHrefs:1}),(e()(),r.hb(16777216,null,null,1,null,me)),r.pb(5,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,1,0,"active"),e(t,5,0,!t.context.$implicit["no-route"])},function(e,t){e(t,0,0,r.sb(2,"menu-",t.parent.parent.parent.context.$implicit.name,"-",t.context.$implicit.path,""))})}function _e(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,2,null,null,null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,we)),r.pb(2,278528,null,0,A.n,[r.P,r.M,r.s],{ngForOf:[0,"ngForOf"]},null),(e()(),r.hb(0,null,null,0))],function(e,t){e(t,2,0,t.parent.parent.context.$implicit.children)},null)}function Se(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,4,"ul",[["class","nav nav-pills nav-stacked nav-sub"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,ye)),r.pb(2,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.hb(16777216,null,null,1,null,_e)),r.pb(4,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null)],function(e,t){var n=t.component;e(t,2,0,n.isRetail),e(t,4,0,!n.isRetail)},null)}function Oe(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,9,"li",[["role","presentation"]],[[8,"id",0]],null,null,null,null)),r.pb(1,278528,null,0,A.m,[r.s,r.t,r.k,r.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),r.Db(2,{"active selected":0}),(e()(),r.qb(3,0,null,null,4,"a",[],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.onTopLevelClick(e.context.$implicit.name,e.context.$implicit.redirectLink,e.context.$implicit.children)&&r),r},null,null)),(e()(),r.qb(4,0,null,null,0,"div",[],[[8,"className",0]],null,null,null,null)),(e()(),r.qb(5,0,null,null,2,"div",[],null,null,null,null,null)),(e()(),r.Ib(6,null,["",""])),r.Cb(131072,o.i,[o.j,r.h]),(e()(),r.hb(16777216,null,null,1,null,Se)),r.pb(9,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null)],function(e,t){var n=t.component,i=r.sb(1,"menu_level1 menu_",t.context.$implicit.name,""),o=e(t,2,0,n.topLevelItem===t.context.$implicit.name);e(t,1,0,i,o),e(t,9,0,t.context.$implicit.children)},function(e,t){e(t,0,0,r.sb(1,"menu-",t.context.$implicit.name,"")),e(t,4,0,r.sb(1,"inline-left menu-icon menu-icon-",t.context.$implicit.name,"")),e(t,6,0,r.Jb(t,6,0,r.Ab(t,7).transform(t.context.$implicit.displayName)))})}function Ce(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,6,"li",[["class","mobile-logout hidden-sm hidden-md hidden-lg"],["id","mobile-logout"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,5,"a",[["routerLink","/login"]],[[1,"target",0],[8,"href",4]],[[null,"click"]],function(e,t,n){var i=!0,o=e.component;return"click"===t&&(i=!1!==r.Ab(e,2).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&i),"click"===t&&(i=!1!==o.logout()&&i),i},null,null)),r.pb(2,671744,null,0,U.o,[U.m,U.a,A.k],{routerLink:[0,"routerLink"]},null),(e()(),r.qb(3,0,null,null,0,"span",[["class","glyphicon glyphicon-off"]],null,null,null,null,null)),(e()(),r.qb(4,0,null,null,2,"span",[["translate",""]],null,null,null,null,null)),r.pb(5,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Logout"]))],function(e,t){e(t,2,0,"/login"),e(t,5,0,"")},function(e,t){e(t,1,0,r.Ab(t,2).target,r.Ab(t,2).href)})}function je(e){return r.Kb(0,[r.Cb(0,oe.a,[]),(e()(),r.qb(1,0,null,null,7,"div",[["class","col-fixed-vmenu vmenu right-shadow"]],[[2,"collapse",null],[4,"display",null],[2,"in",null],[2,"show",null],[1,"aria-expanded",0],[1,"aria-hidden",0],[2,"collapsing",null]],null,null,null,null)),r.pb(2,16384,null,0,se,[r.k,r.E],{collapse:[0,"collapse"]},null),(e()(),r.qb(3,0,null,null,5,"ul",[["class","nav nav-pills nav-stacked"],["id","sections"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,Oe)),r.pb(5,278528,null,0,A.n,[r.P,r.M,r.s],{ngForOf:[0,"ngForOf"]},null),(e()(),r.hb(16777216,null,null,2,null,Ce)),r.pb(7,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),r.Cb(131072,A.b,[r.h])],function(e,t){var n=t.component;e(t,2,0,n.isCollapsed),e(t,5,0,n.sections),e(t,7,0,!r.Jb(t,7,0,r.Ab(t,8).transform(n.noForcedPassword$)))},function(e,t){e(t,1,0,r.Ab(t,2).isCollapse,r.Ab(t,2).display,r.Ab(t,2).isExpanded,r.Ab(t,2).isExpanded,r.Ab(t,2).isExpanded,r.Ab(t,2).isCollapsed,r.Ab(t,2).isCollapsing)})}var ke=n("mGPz"),Ee=n("VnD/"),xe=n("FfxL"),Pe=function(){return function(){this.autoClose=!0}}(),Te=function(){function e(e,t,n,r,i,o){this._elementRef=e,this._renderer=t,this._viewContainerRef=n,this._cis=r,this._config=i,this._state=o,this._isInlineOpen=!1,this._subscriptions=[],this._isInited=!1,this._state.autoClose=this._config.autoClose,this._dropdown=this._cis.createLoader(this._elementRef,this._viewContainerRef,this._renderer).provide({provide:_,useValue:this._state}),this.onShown=this._dropdown.onShown,this.onHidden=this._dropdown.onHidden,this.isOpenChange=this._state.isOpenChange}return Object.defineProperty(e.prototype,"autoClose",{get:function(){return this._state.autoClose},set:function(e){this._state.autoClose=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isDisabled",{get:function(){return this._isDisabled},set:function(e){this._isDisabled=e,this._state.isDisabledChange.emit(e),e&&this.hide()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isOpen",{get:function(){return this._showInline?this._isInlineOpen:this._dropdown.isShown},set:function(e){e?this.show():this.hide()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isBs4",{get:function(){return!Object(S.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_showInline",{get:function(){return!this.container},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var e=this;this._isInited||(this._isInited=!0,this._dropdown.listen({outsideClick:!1,triggers:this.triggers,show:function(){return e.show()}}),this._subscriptions.push(this._state.toggleClick.subscribe(function(t){return e.toggle(t)})),this._subscriptions.push(this._state.isDisabledChange.pipe(Object(Ee.a)(function(e){return e})).subscribe(function(t){return e.hide()})))},e.prototype.show=function(){var e=this;if(!this.isOpen&&!this.isDisabled)return this._showInline?(this._inlinedMenu||this._state.dropdownMenu.then(function(t){e._dropdown.attachInline(t.viewContainer,t.templateRef),e._inlinedMenu=e._dropdown._inlineViewRef,e.addBs4Polyfills()}).catch(),this.addBs4Polyfills(),this._isInlineOpen=!0,this.onShown.emit(!0),void this._state.isOpenChange.emit(!0)):void this._state.dropdownMenu.then(function(t){var n=e.dropup||void 0!==e.dropup&&e.dropup;e._state.direction=n?"up":"down";var r=e.placement||(n?"top left":"bottom left");e._dropdown.attach(O).to(e.container).position({attachment:r}).show({content:t.templateRef,placement:r}),e._state.isOpenChange.emit(!0)}).catch()},e.prototype.hide=function(){this.isOpen&&(this._showInline?(this.removeShowClass(),this.removeDropupStyles(),this._isInlineOpen=!1,this.onHidden.emit(!0)):this._dropdown.hide(),this._state.isOpenChange.emit(!1))},e.prototype.toggle=function(e){return this.isOpen||!e?this.hide():this.show()},e.prototype.ngOnDestroy=function(){for(var e=0,t=this._subscriptions;e<t.length;e++)t[e].unsubscribe();this._dropdown.dispose()},e.prototype.addBs4Polyfills=function(){Object(S.a)()||(this.addShowClass(),this.checkRightAlignment(),this.addDropupStyles())},e.prototype.addShowClass=function(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&this._renderer.addClass(this._inlinedMenu.rootNodes[0],"show")},e.prototype.removeShowClass=function(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&this._renderer.removeClass(this._inlinedMenu.rootNodes[0],"show")},e.prototype.checkRightAlignment=function(){if(this._inlinedMenu&&this._inlinedMenu.rootNodes[0]){var e=this._inlinedMenu.rootNodes[0].classList.contains("dropdown-menu-right");this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"left",e?"auto":"0"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"right",e?"0":"auto")}},e.prototype.addDropupStyles=function(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&(this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"top",this.dropup?"auto":"100%"),this._renderer.setStyle(this._inlinedMenu.rootNodes[0],"transform",this.dropup?"translateY(-101%)":"translateY(0)"))},e.prototype.removeDropupStyles=function(){this._inlinedMenu&&this._inlinedMenu.rootNodes[0]&&(this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"top"),this._renderer.removeStyle(this._inlinedMenu.rootNodes[0],"transform"))},e}(),Ae=n("6aHO"),Ie=function(){function e(e,t){var n=this;this._state=e,this._element=t,this.isDisabled=null,this._subscriptions=[],this._subscriptions.push(this._state.isOpenChange.subscribe(function(e){return n.isOpen=e})),this._subscriptions.push(this._state.isDisabledChange.subscribe(function(e){return n.isDisabled=e||null}))}return e.prototype.onClick=function(){this.isDisabled||this._state.toggleClick.emit(!0)},e.prototype.onDocumentClick=function(e){this._state.autoClose&&2!==e.button&&!this._element.nativeElement.contains(e.target)&&this._state.toggleClick.emit(!1)},e.prototype.onEsc=function(){this._state.autoClose&&this._state.toggleClick.emit(!1)},e.prototype.ngOnDestroy=function(){for(var e=0,t=this._subscriptions;e<t.length;e++)t[e].unsubscribe()},e}(),Me=n("nbXG"),Ne=function(){function e(e,t){this.translate=e,this.localStorage=t,this.supportedLanguages=["en","de","es","fr","it","nl","pt"],e.addLangs(this.supportedLanguages),e.setDefaultLang("en");var n=this.localStorage.get("lingua");if(n&&this.supportedLanguages.includes(n))this.selectedLanguage=n;else{var r=e.getBrowserLang();this.selectedLanguage=r.match(/en|de|es|fr|it|nl|pt/)?r:"en"}e.use(this.selectedLanguage),this.languages=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Espa\xf1ol"},{code:"fr",name:"Fran\xe7ais"},{code:"it",name:"Italiano"},{code:"nl",name:"Nederlands"},{code:"pt",name:"Portugu\xeas"}]}return e.prototype.ngOnInit=function(){},e.prototype.changeLang=function(e){this.translate.use(e),this.selectedLanguage=e,this.localStorage.set("lingua",e)},e}(),Re=r.ob({encapsulation:0,styles:[[""]],data:{}});function De(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,"li",[["role","menuitem"]],[[8,"id",0],[8,"hidden",0]],null,null,null,null)),(e()(),r.qb(1,0,null,null,2,"a",[],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.changeLang(e.context.$implicit.code)&&r),r},null,null)),(e()(),r.qb(2,0,null,null,1,"span",[["class","lang"]],[[8,"lang",0]],null,null,null,null)),(e()(),r.Ib(3,null,["",""]))],null,function(e,t){var n=t.component;e(t,0,0,r.sb(1,"lang-",t.context.$implicit.code,""),n.selectedLanguage==t.context.$implicit.code),e(t,2,0,r.sb(1,"",t.context.$implicit.code,"")),e(t,3,0,t.context.$implicit.name)})}function Ve(e){return r.Kb(0,[(e()(),r.qb(0,16777216,null,null,10,"div",[["class","float-left lang-dropdown-pos btn-group"],["dropdown",""]],[[2,"dropup",null],[2,"open",null],[2,"show",null]],null,null,null,null)),r.Fb(512,null,_,_,[]),r.pb(2,212992,null,0,Te,[r.k,r.E,r.P,Ae.a,Pe,_],null,null),(e()(),r.qb(3,0,null,null,4,"button",[["class","btn lingua-btn dropdown-toggle"],["dropdownToggle",""],["id","change-language-button"],["type","button"]],[[8,"title",0],[1,"aria-haspopup",0],[1,"disabled",0],[1,"aria-expanded",0]],[[null,"click"],["document","click"],[null,"keyup.esc"]],function(e,t,n){var i=!0;return"click"===t&&(i=!1!==r.Ab(e,4).onClick()&&i),"document:click"===t&&(i=!1!==r.Ab(e,4).onDocumentClick(n)&&i),"keyup.esc"===t&&(i=!1!==r.Ab(e,4).onEsc()&&i),i},null,null)),r.pb(4,147456,null,0,Ie,[_,r.k],null,null),r.Cb(131072,o.i,[o.j,r.h]),(e()(),r.qb(6,0,null,null,0,"span",[["class","lang"]],[[8,"lang",0]],null,null,null,null)),(e()(),r.qb(7,0,null,null,0,"span",[["class","caret"]],null,null,null,null,null)),(e()(),r.qb(8,0,[["dropdownMenu",1]],null,2,"ul",[["attr.aria-labelledby","single-button"],["class","dropdown-menu dropdown-menu-right"],["role","menu"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,De)),r.pb(10,278528,null,0,A.n,[r.P,r.M,r.s],{ngForOf:[0,"ngForOf"]},null)],function(e,t){var n=t.component;e(t,2,0),e(t,10,0,n.languages)},function(e,t){var n=t.component;e(t,0,0,r.Ab(t,2).dropup,r.Ab(t,2).isOpen,r.Ab(t,2).isOpen&&r.Ab(t,2).isBs4),e(t,3,0,r.sb(1,"",r.Jb(t,3,0,r.Ab(t,5).transform("Change language")),""),!0,r.Ab(t,4).isDisabled,r.Ab(t,4).isOpen),e(t,6,0,r.sb(1,"",n.selectedLanguage,""))})}var Le=n("+/+x"),Ue=767,Fe=function(){function e(e,t,n,r,i){var o=this;this.renderer=e,this.localStorage=t,this.deviceModeService=n,this.zone=r,this.customizationService=i,this.ngUnsubscribe=new b.a,this.mediaMatcher=matchMedia("(max-width: "+Ue+"px)"),this.mediaMatcher.addListener(function(e){o.zone.run(function(){return o.mediaMatcher=e})})}return e.prototype.ngOnInit=function(){this.mode=this.localStorage.get("mode"),this.showModeBtn=!1,this.switchToMode="retail"==this.mode?"pro":"retail",this.getDeviceInfo()},e.prototype.getDeviceInfo=function(){var e=this;this.deviceModeService.getDeviceInfo().pipe(Object(v.a)(this.ngUnsubscribe)).subscribe(function(t){t[0]&&t[0][1]&&(e.deviceType=t[0][1].value),e.releaseVersion=t[1][1].version,e.countVersion=e.releaseVersion.split(".").length-1,"turing"==e.deviceType||"ew7479cap"==e.deviceType||e.countVersion>=3?(e.showModeBtn=!0,e.mode=e.localStorage.get("mode")):(e.showModeBtn=!1,e.localStorage.set("mode","retail"))})},e.prototype.ngAfterViewInit=function(){this.onResize()},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e.prototype.toggleMenu=function(){this.sideMenuComponent.isCollapsed=!this.sideMenuComponent.isCollapsed,this.sideMenuComponent.isCollapsed?this.renderer.removeClass(document.documentElement,"mobile-menu-open"):this.renderer.addClass(document.documentElement,"mobile-menu-open")},e.prototype.toggleMode=function(){this.localStorage.set("mode",this.switchToMode),window.location.reload()},e.prototype.onResize=function(e){this.showSideNav=this.mediaMatcher.matches},e}(),Be=r.ob({encapsulation:0,styles:[["@media screen and (max-width:960px){#toggle-mode[_ngcontent-%COMP%]{line-height:44px;margin-left:20px}}button[_ngcontent-%COMP%]:focus{outline:0}h3[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{font-size:12px}"]],data:{}});function ze(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"app-side-menu",[],null,[["window","resize"],["document","click"],["document","touchend"]],function(e,t,n){var i=!0;return"window:resize"===t&&(i=!1!==r.Ab(e,1).onResize(n)&&i),"document:click"===t&&(i=!1!==r.Ab(e,1).onClick(n)&&i),"document:touchend"===t&&(i=!1!==r.Ab(e,1).onClick(n)&&i),i},je,ge)),r.pb(1,114688,[[1,4]],0,pe,[r.k,r.z,r.E,p.a,fe,D.a,he.a,U.m],null,null)],function(e,t){e(t,1,0)},null)}function He(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,4,"div",[["class","mobile-menu visible-xs float-left"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,1,"button",[["class","btn toggle-menu-btn"],["id","hamburger-menu-container"],["type","button"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.toggleMenu()&&r),r},null,null)),(e()(),r.qb(2,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-menu-hamburger"],["id","hamburger-menu"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,ze)),r.pb(4,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,4,0,t.component.showSideNav)},null)}function qe(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,0,"div",[["class","visible-xs float-left"],["style","padding: 3px;"]],null,null,null,null,null))],null,null)}function Ge(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,2,"div",[["class","inline-left header-left"],["id","toggle-mode"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,1,"button",[["class","btn btn-default"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.toggleMode()&&r),r},null,null)),(e()(),r.Ib(2,null,["Switch to ",""]))],null,function(e,t){e(t,2,0,t.component.switchToMode)})}function We(e){return r.Kb(0,[r.Gb(671088640,1,{sideMenuComponent:0}),(e()(),r.qb(1,0,null,null,25,"div",[["class","container"]],null,null,null,null,null)),(e()(),r.qb(2,0,null,null,24,"div",[["class","row"]],null,null,null,null,null)),(e()(),r.qb(3,0,null,null,23,"div",[["class","blue-bar clearfix"],["id","header"]],null,null,null,null,null)),(e()(),r.qb(4,0,null,null,0,"div",[["class","brand_bg"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,He)),r.pb(6,212992,null,0,ke.a,[r.M,r.P,r.h,p.a],{renderTemplate:[0,"renderTemplate"]},null),(e()(),r.hb(16777216,null,null,1,null,qe)),r.pb(8,212992,null,0,ke.a,[r.M,r.P,r.h,p.a],{renderTemplate:[0,"renderTemplate"]},null),(e()(),r.qb(9,0,null,null,6,"div",[["class","inline-left header-left"]],null,null,null,null,null)),(e()(),r.qb(10,0,null,null,5,"h3",[["id","product-name"]],null,null,null,null,null)),(e()(),r.Ib(11,null,[""," "])),r.Cb(131072,A.b,[r.h]),(e()(),r.qb(13,0,null,null,2,"span",[],null,null,null,null,null)),(e()(),r.Ib(14,null,["",""])),r.Cb(131072,A.b,[r.h]),(e()(),r.hb(16777216,null,null,1,null,Ge)),r.pb(17,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.qb(18,0,null,null,1,"div",[["class","float-left"]],null,null,null,null,null)),(e()(),r.qb(19,0,null,null,0,"div",[["class","welcome-message"]],null,null,null,null,null)),(e()(),r.qb(20,0,null,null,3,"div",[["class","float-right"]],null,null,null,null,null)),(e()(),r.qb(21,0,null,null,2,"div",[["class","brand"]],null,null,null,null,null)),(e()(),r.qb(22,0,null,null,1,"div",[["class","logo_wrapper"]],null,null,null,null,null)),(e()(),r.qb(23,0,null,null,0,"a",[["class","vendor_logo"],["href","#/"]],null,null,null,null,null)),(e()(),r.qb(24,0,null,null,2,"div",[["class","float-right mobile-lang hidden-sm hidden-md hidden-lg"]],null,null,null,null,null)),(e()(),r.qb(25,0,null,null,1,"app-language-select",[],null,null,null,Ve,Re)),r.pb(26,114688,null,0,Ne,[o.j,Me.a],null,null)],function(e,t){var n=t.component;e(t,6,0,!0),e(t,8,0,!1),e(t,17,0,n.showModeBtn),e(t,26,0)},function(e,t){var n=t.component;e(t,11,0,r.Jb(t,11,0,r.Ab(t,12).transform(n.customizationService.productName))),e(t,14,0,r.Jb(t,14,0,r.Ab(t,15).transform(n.customizationService.productNameSuffix)))})}var Ke=function(){function e(e){this.router=e}return e.prototype.ngOnInit=function(){var e=this;this.router.events.pipe(Object(Ee.a)(function(e){return e instanceof U.k})).subscribe(function(t){var n=t.state._root;e.breadcrumbs=[];for(var r=function(){var t=(n=n.children[0]).value;e.breadcrumbs.find(function(e){return e.displayName==t.data.displayName})||e.breadcrumbs.push({displayName:Object(V.b)(t.data.displayName),icon:t.data.icon}),e.color=t.data.icon};n.children.length>0;)r()})},e}(),Ze=r.ob({encapsulation:2,styles:[],data:{}});function Ye(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,"li",[["class","breadcrumb-icon"]],null,null,null,null,null)),r.pb(1,278528,null,0,A.m,[r.s,r.t,r.k,r.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),r.Ib(2,null,["",""])),r.Cb(131072,o.i,[o.j,r.h])],function(e,t){e(t,1,0,"breadcrumb-icon","menu-icon-"+t.context.$implicit.icon)},function(e,t){e(t,2,0,r.Jb(t,2,0,r.Ab(t,3).transform(t.context.$implicit.displayName)))})}function $e(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,"ol",[["class","breadcrumb clearfix"],["id","breadcrumb"]],null,null,null,null,null)),r.pb(1,278528,null,0,A.m,[r.s,r.t,r.k,r.E],{klass:[0,"klass"],ngClass:[1,"ngClass"]},null),(e()(),r.hb(16777216,null,null,1,null,Ye)),r.pb(3,278528,null,0,A.n,[r.P,r.M,r.s],{ngForOf:[0,"ngForOf"]},null)],function(e,t){var n=t.component;e(t,1,0,"breadcrumb clearfix",n.color+"-color"),e(t,3,0,n.breadcrumbs)},null)}function Qe(e){return r.Kb(0,[(e()(),r.hb(16777216,null,null,1,null,$e)),r.pb(1,212992,null,0,ke.a,[r.M,r.P,r.h,p.a],{renderTemplate:[0,"renderTemplate"]},null)],function(e,t){e(t,1,0,!0)},null)}var Je=n("dzgT"),Xe=n("FFOo"),et=n("Ehmk"),tt=n("eihs");function nt(e,t){return function(n){return n.lift(new rt(e,t))}}var rt=function(){function e(e,t){this.compare=e,this.keySelector=t}return e.prototype.call=function(e,t){return t.subscribe(new it(e,this.compare,this.keySelector))},e}(),it=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.keySelector=r,i.hasKey=!1,"function"==typeof n&&(i.compare=n),i}return i.c(t,e),t.prototype.compare=function(e,t){return e===t},t.prototype._next=function(e){var t=e;if(this.keySelector&&(t=Object(et.a)(this.keySelector)(e))===tt.a)return this.destination.error(tt.a.e);var n=!1;if(this.hasKey){if((n=Object(et.a)(this.compare)(this.key,t))===tt.a)return this.destination.error(tt.a.e)}else this.hasKey=!0;!1===Boolean(n)&&(this.key=t,this.destination.next(e))},t}(Xe.a),ot=n("T1DM");function st(e,t){return void 0===t&&(t=ot.a),function(n){return n.lift(new at(e,t))}}var at=function(){function e(e,t){this.dueTime=e,this.scheduler=t}return e.prototype.call=function(e,t){return t.subscribe(new ut(e,this.dueTime,this.scheduler))},e}(),ut=function(e){function t(t,n,r){var i=e.call(this,t)||this;return i.dueTime=n,i.scheduler=r,i.debouncedSubscription=null,i.lastValue=null,i.hasValue=!1,i}return i.c(t,e),t.prototype._next=function(e){this.clearDebounce(),this.lastValue=e,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(ct,this.dueTime,this))},t.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},t.prototype.debouncedNext=function(){if(this.clearDebounce(),this.hasValue){var e=this.lastValue;this.lastValue=null,this.hasValue=!1,this.destination.next(e)}},t.prototype.clearDebounce=function(){var e=this.debouncedSubscription;null!==e&&(this.remove(e),e.unsubscribe(),this.debouncedSubscription=null)},t}(Xe.a);function ct(e){e.debouncedNext()}var lt=n("0KIB"),ht=function(){function e(e,t){this.updateSuggestionService=e,this.authService=t,this.ngUnsubscribe=new b.a,this.showUpdateSuggestion=!1}return e.prototype.hideSuggestion=function(){this.showUpdateSuggestion=!1},e.prototype.ngOnInit=function(){var e=this;Object(Je.a)(this.authService.isLoggedInSubject$,this.authService.noForcedPassword$).pipe(nt(),st(200),Object(Ee.a)(function(e){return e.some(function(e){return e})})).subscribe(function(){e.updateSuggestionService.getDeployment().pipe(Object(v.a)(e.ngUnsubscribe)).subscribe(function(t){e.showUpdateSuggestion=void 0!==t})})},e.prototype.ngOnDestroy=function(){this.ngUnsubscribe.next(),this.ngUnsubscribe.complete()},e}(),ft=r.ob({encapsulation:0,styles:[[".alert[_ngcontent-%COMP%]{margin-bottom:0;border-radius:0;border-top:0;border-left:0;border-right:0;margin-top:-2px}"]],data:{}});function dt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,10,"div",[["class","alert alert-warning"],["role","alert"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,2,"strong",[["translate",""]],null,null,null,null,null)),r.pb(2,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["A new firmware version is available."])),(e()(),r.qb(4,0,null,null,3,"a",[["class","tiny-margin-left"],["routerLink","/system/firmware"],["translate",""]],[[1,"target",0],[8,"href",4]],[[null,"click"]],function(e,t,n){var i=!0;return"click"===t&&(i=!1!==r.Ab(e,5).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&i),i},null,null)),r.pb(5,671744,null,0,U.o,[U.m,U.a,A.k],{routerLink:[0,"routerLink"]},null),r.pb(6,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Click here to update."])),(e()(),r.qb(8,0,null,null,2,"button",[["aria-label","Close"],["class","close"],["type","button"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.hideSuggestion()&&r),r},null,null)),(e()(),r.qb(9,0,null,null,1,"span",[["aria-hidden","true"]],null,null,null,null,null)),(e()(),r.Ib(-1,null,["\xd7"]))],function(e,t){e(t,2,0,""),e(t,5,0,"/system/firmware"),e(t,6,0,"")},function(e,t){e(t,4,0,r.Ab(t,5).target,r.Ab(t,5).href)})}function pt(e){return r.Kb(0,[(e()(),r.hb(16777216,null,null,1,null,dt)),r.pb(1,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,1,0,t.component.showUpdateSuggestion)},null)}var gt=function(){function e(e){this.spinnerService=e,this.visible=!1}return e.prototype.ngOnInit=function(){var e=this;this.spinnerStateChanged=this.spinnerService.spinnerState.subscribe(function(t){return e.visible=t.show})},e.prototype.ngOnDestroy=function(){this.spinnerStateChanged.unsubscribe()},e}(),bt=r.ob({encapsulation:0,styles:[[".spinner[_ngcontent-%COMP%]{position:absolute;left:48%;top:4.3em}.spinner-label[_ngcontent-%COMP%]{display:inline-block;vertical-align:middle;margin-top:-12px;margin-left:5px}@media (min-width:960px){.spinner[_ngcontent-%COMP%]{position:absolute;left:49%;top:5em}}@media (max-width:786px){.spinner[_ngcontent-%COMP%]{position:absolute;left:49%;top:5em}}"]],data:{}});function vt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,4,"div",[["class","maincontent-loading-wrapper"],["id","spinner-container"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,0,"span",[["aria-hidden","true"],["class","delos-spinner glyphicon glyphicon-repeat fast-right-spinner"],["id","spinner"]],null,null,null,null,null)),(e()(),r.qb(2,0,null,null,2,"span",[["class","spinner-label"],["id","spinner-label"],["translate",""]],null,null,null,null,null)),r.pb(3,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Loading ..."]))],function(e,t){e(t,3,0,"")},null)}function yt(e){return r.Kb(0,[(e()(),r.hb(16777216,null,null,1,null,vt)),r.pb(1,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null)],function(e,t){e(t,1,0,t.component.visible)},null)}var mt=n("DSB1"),wt=function(){function e(e){this.notificationService=e,this.autoDismissTime=7e3,this.notifications=[]}return e.prototype.ngOnInit=function(){var e=this;this.updateNotification(),this.removeNotification(),this.notificationService.getNotification().subscribe(function(t){t?(e.notifications.push(t),t.options&&t.options.sticky||setTimeout(function(){e.dismissNotification(t)},t.options&&t.options.time||e.autoDismissTime)):e.notifications=[]})},e.prototype.dismissNotification=function(e){this.notifications=this.notifications.filter(function(t){return t!==e})},e.prototype.removeNotification=function(){var e=this;this.notificationService.removeNotificationSubject.subscribe(function(t){var n=e.notifications.findIndex(function(e){return!(!e.options||!e.options.id)&&e.options.id===t});-1!=n&&e.notifications.splice(n,1)})},e.prototype.updateNotification=function(){var e=this;this.notificationService.updateNotificationSubject.subscribe(function(t){var n=e.notifications.findIndex(function(e){return!(!e.options||!e.options.id)&&e.options.id===t.id});-1!=n&&(e.notifications[n].message=t.newMessage)})},e.prototype.cssClass=function(e){if(e)switch(e.type){case mt.a.Success:return"alert alert-success";case mt.a.Error:return"alert alert-danger";case mt.a.Info:return"alert alert-info";case mt.a.Warning:return"alert alert-warning"}},e}(),_t=r.ob({encapsulation:0,styles:[["#notifications-container[_ngcontent-%COMP%]{position:fixed;z-index:999999;right:12px;top:100px}@media screen and (max-width:768px){#notifications-container[_ngcontent-%COMP%]{top:50px;margin-left:10px}}"]],data:{}});function St(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,3,"span",[],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,0,"span",[],[[8,"innerHTML",1]],null,null,null,null)),(e()(),r.qb(2,0,null,null,1,"a",[["class","close"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dismissNotification(e.parent.context.$implicit)&&r),r},null,null)),(e()(),r.Ib(-1,null,["\xd7"]))],null,function(e,t){e(t,1,0,t.parent.context.$implicit.message)})}function Ot(e){return r.Kb(0,[(e()(),r.Ib(0,null,[" "," "])),(e()(),r.qb(1,0,null,null,1,"a",[["class","close"]],null,[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.dismissNotification(e.parent.context.$implicit)&&r),r},null,null)),(e()(),r.Ib(-1,null,["\xd7"]))],null,function(e,t){e(t,0,0,t.parent.context.$implicit.message)})}function Ct(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,4,"div",[["translate",""]],[[8,"className",0]],null,null,null,null)),r.pb(1,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.hb(16777216,null,null,1,null,St)),r.pb(3,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"],ngIfElse:[1,"ngIfElse"]},null),(e()(),r.hb(0,[["nohtml",2]],null,0,null,Ot))],function(e,t){e(t,1,0,""),e(t,3,0,t.context.$implicit.options&&1==t.context.$implicit.options.html,r.Ab(t,4))},function(e,t){e(t,0,0,r.sb(1,"",t.component.cssClass(t.context.$implicit)," alert-dismissable"))})}function jt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,2,"div",[["id","notifications-container"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,Ct)),r.pb(2,278528,null,0,A.n,[r.P,r.M,r.s],{ngForOf:[0,"ngForOf"]},null)],function(e,t){e(t,2,0,t.component.notifications)},null)}var kt=n("15JJ"),Et=n("+NEN"),xt=function(){function e(e,t,n,r){this.authService=e,this.ubusService=t,this.router=n,this.spinner=r,this.noForcedPassword$=this.authService.noForcedPassword$}return e.prototype.ngOnInit=function(){var e=this;Object(Je.a)(this.authService.isLoggedInSubject$,this.authService.noForcedPassword$).pipe(nt(),st(200),Object(Ee.a)(function(e){return e.some(function(e){return e})}),Object(kt.a)(function(){return e.getDeviceHostName()})).subscribe(function(t){return e.deviceHostname=t}),this.router.events.subscribe(function(t){t instanceof U.k&&e.spinner.show()})},e.prototype.getDeviceHostName=function(){return this.ubusService.call({data:[this.authService.getSid(),"uci","get",{config:"system",section:"@system[0]",option:"hostname"}]}).pipe(Object(a.a)(function(e){return e.result[1].value}))},e.prototype.logout=function(){this.spinner.show(),this.authService.logout()},e}(),Pt=r.ob({encapsulation:0,styles:[["@media (max-width:700px){.col-sm-offset-vmenu[_ngcontent-%COMP%]{padding-bottom:65px}}@media (max-width:400px){.col-sm-offset-vmenu[_ngcontent-%COMP%]{padding-bottom:100px}}@media (max-width:767px){.col-sm-offset-vmenu[_ngcontent-%COMP%]{padding-top:40px}}"]],data:{}});function Tt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,2,"button",[["class","btn logout-btn"],["id","logout-button"],["type","button"]],[[8,"title",0]],[[null,"click"]],function(e,t,n){var r=!0;return"click"===t&&(r=!1!==e.component.logout()&&r),r},null,null)),r.Cb(131072,o.i,[o.j,r.h]),(e()(),r.qb(2,0,null,null,0,"span",[["aria-hidden","true"],["class","glyphicon glyphicon-off"]],null,null,null,null,null))],null,function(e,t){e(t,0,0,r.sb(1,"",r.Jb(t,0,0,r.Ab(t,1).transform("Logout")),""))})}function At(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,14,"div",[["class","row hidden-xs"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,13,"div",[["class","logo-area"],["id","subheader"]],null,null,null,null,null)),(e()(),r.qb(2,0,null,null,12,"div",[["class","d-wrapper"]],null,null,null,null,null)),(e()(),r.qb(3,0,null,null,11,"div",[["class","col-xs-12 clearfix col-sm-offset-vmenu"]],null,null,null,null,null)),(e()(),r.qb(4,0,null,null,1,"div",[["class","logo-area-left right-shadow"],["id","device-host-name"]],null,null,null,null,null)),(e()(),r.Ib(5,null,[" "," "])),(e()(),r.qb(6,0,null,null,1,"app-breadcrumb",[],null,null,null,Qe,Ze)),r.pb(7,114688,null,0,Ke,[U.m],null,null),(e()(),r.qb(8,0,null,null,6,"div",[["class","float-right"]],null,null,null,null,null)),(e()(),r.qb(9,0,null,null,1,"app-language-select",[],null,null,null,Ve,Re)),r.pb(10,114688,null,0,Ne,[o.j,Me.a],null,null),(e()(),r.qb(11,0,null,null,3,"div",[["class","float-left"]],[[8,"hidden",0]],null,null,null,null)),r.Cb(131072,A.b,[r.h]),(e()(),r.hb(16777216,null,null,1,null,Tt)),r.pb(14,212992,null,0,ke.a,[r.M,r.P,r.h,p.a],{renderTemplate:[0,"renderTemplate"]},null),(e()(),r.qb(15,0,null,null,11,"div",[["class","col-xs-12 col-sm-offset-vmenu"]],null,null,null,null,null)),(e()(),r.qb(16,0,null,null,1,"app-update-suggestion",[],null,null,null,pt,ft)),r.pb(17,245760,null,0,ht,[lt.a,p.a],null,null),(e()(),r.qb(18,0,null,null,8,"div",[["class","row"]],null,null,null,null,null)),(e()(),r.qb(19,0,null,null,7,"div",[["class","maincontent col-sm-12 col-xs-12"]],null,null,null,null,null)),(e()(),r.qb(20,0,null,null,1,"app-spinner",[],null,null,null,yt,bt)),r.pb(21,245760,null,0,gt,[D.a],null,null),(e()(),r.qb(22,0,null,null,1,"app-notification",[],null,null,null,jt,_t)),r.pb(23,114688,null,0,wt,[R.a],null,null),(e()(),r.qb(24,0,null,null,2,"div",[["class","frame clearfix"]],null,null,null,null,null)),(e()(),r.qb(25,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),r.pb(26,212992,null,0,U.q,[U.b,r.P,r.j,[8,null],r.h],null,null)],function(e,t){e(t,7,0),e(t,10,0),e(t,14,0,!0),e(t,17,0),e(t,21,0),e(t,23,0),e(t,26,0)},function(e,t){var n=t.component;e(t,5,0,n.deviceHostname),e(t,11,0,r.Jb(t,11,0,r.Ab(t,12).transform(n.noForcedPassword$)))})}var It=function(){function e(e){this.customizationService=e}return e.prototype.ngOnInit=function(){this.config=N.a},e}(),Mt=r.ob({encapsulation:0,styles:[["@media only screen and (max-width:768px){#footer[_ngcontent-%COMP%]{clear:both;position:relative}}"]],data:{}});function Nt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,4,"li",[],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,3,"a",[["class","external"],["id","footer-links-manual"],["target","_blank"],["translate",""]],[[8,"href",4]],null,null,null,null)),r.pb(2,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),r.Cb(131072,A.b,[r.h]),(e()(),r.Ib(-1,null,["Manual"]))],function(e,t){e(t,2,0,"")},function(e,t){var n=t.component;e(t,1,0,r.sb(1,"",r.Jb(t,1,0,r.Ab(t,3).transform(n.customizationService.manualUrl)),""))})}function Rt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,24,"footer",[["class","row"]],null,null,null,null,null)),(e()(),r.qb(1,0,null,null,23,"div",[["class","blue-bar footer"],["id","footer"]],null,null,null,null,null)),(e()(),r.qb(2,0,null,null,22,"div",[["id","footer-full"]],null,null,null,null,null)),(e()(),r.qb(3,0,null,null,21,"ul",[["class","col-xs-12 footer-center list-inline"],["id","footer-links"]],null,null,null,null,null)),(e()(),r.qb(4,0,null,null,5,"li",[],null,null,null,null,null)),(e()(),r.Ib(-1,null,[" \xa9 2019 \xa0 "])),(e()(),r.qb(6,0,null,null,3,"a",[["class","external vendor-link"],["id","footer-links-vendor"],["target","_blank"]],[[8,"href",4]],null,null,null,null)),r.Cb(131072,A.b,[r.h]),(e()(),r.Ib(8,null,[" "," "])),r.Cb(131072,A.b,[r.h]),(e()(),r.qb(10,0,null,null,1,"li",[["id","footer-links-firmware"]],null,null,null,null,null)),(e()(),r.Ib(11,null,[" "," (",") "])),(e()(),r.qb(12,0,null,null,0,"br",[["class","mobile-only"]],null,null,null,null,null)),(e()(),r.qb(13,0,null,null,3,"li",[],null,null,null,null,null)),(e()(),r.qb(14,0,null,null,2,"a",[["href","#/support"],["id","footer-links-support"],["translate",""]],null,null,null,null,null)),r.pb(15,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Support"])),(e()(),r.hb(16777216,null,null,2,null,Nt)),r.pb(18,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),r.Cb(131072,A.b,[r.h]),(e()(),r.qb(20,0,null,null,4,"li",[],[[8,"hidden",0]],null,null,null,null)),(e()(),r.qb(21,0,null,null,3,"a",[["class","external"],["id","footer-links-licenses"],["routerLink","/licenses"],["translate",""]],[[1,"target",0],[8,"href",4]],[[null,"click"]],function(e,t,n){var i=!0;return"click"===t&&(i=!1!==r.Ab(e,22).onClick(n.button,n.ctrlKey,n.metaKey,n.shiftKey)&&i),i},null,null)),r.pb(22,671744,null,0,U.o,[U.m,U.a,A.k],{routerLink:[0,"routerLink"]},null),r.pb(23,8536064,null,0,o.d,[o.j,r.k,r.h],{translate:[0,"translate"]},null),(e()(),r.Ib(-1,null,["Licenses"]))],function(e,t){var n=t.component;e(t,15,0,""),e(t,18,0,r.Jb(t,18,0,r.Ab(t,19).transform(n.customizationService.showManualUrl))),e(t,22,0,"/licenses"),e(t,23,0,"")},function(e,t){var n=t.component;e(t,6,0,r.sb(1,"",r.Jb(t,6,0,r.Ab(t,7).transform(n.customizationService.vendorUrl)),"")),e(t,8,0,r.Jb(t,8,0,r.Ab(t,9).transform(n.customizationService.vendorName))),e(t,11,0,n.config.firmwareVersion,n.config.firmwareBuildDate),e(t,20,0,n.config.delos.hideFooterLinks),e(t,21,0,r.Ab(t,22).target,r.Ab(t,22).href)})}var Dt=r.ob({encapsulation:0,styles:[[""]],data:{}});function Vt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"div",[["class","mainSpinner"]],null,null,null,null,null)),(e()(),r.Ib(-1,null,[" loading customization...\n"]))],null,null)}function Lt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"app-side-menu",[],null,[["window","resize"],["document","click"],["document","touchend"]],function(e,t,n){var i=!0;return"window:resize"===t&&(i=!1!==r.Ab(e,1).onResize(n)&&i),"document:click"===t&&(i=!1!==r.Ab(e,1).onClick(n)&&i),"document:touchend"===t&&(i=!1!==r.Ab(e,1).onClick(n)&&i),i},je,ge)),r.pb(1,114688,null,0,pe,[r.k,r.z,r.E,p.a,fe,D.a,he.a,U.m],null,null)],function(e,t){e(t,1,0)},null)}function Ut(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,2,null,null,null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,Lt)),r.pb(2,212992,null,0,ke.a,[r.M,r.P,r.h,p.a],{renderTemplate:[0,"renderTemplate"]},null),(e()(),r.hb(0,null,null,0))],function(e,t){e(t,2,0,!0)},null)}function Ft(e){return r.Kb(0,[(e()(),r.hb(16777216,null,null,1,null,Vt)),r.pb(1,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.qb(2,0,null,null,10,"div",[["class","container"]],null,null,null,null,null)),(e()(),r.qb(3,0,null,null,1,"app-topnav",[],null,[["window","resize"]],function(e,t,n){var i=!0;return"window:resize"===t&&(i=!1!==r.Ab(e,4).onResize(n)&&i),i},We,Be)),r.pb(4,4440064,null,0,Fe,[r.E,Me.a,Le.a,r.z,g.a],null,null),(e()(),r.qb(5,0,null,null,5,"div",[["class","content-wrapper row"]],null,null,null,null,null)),(e()(),r.qb(6,0,null,null,1,"app-main",[],null,null,null,At,Pt)),r.pb(7,114688,null,0,xt,[p.a,Et.a,U.m,D.a],null,null),(e()(),r.qb(8,0,null,null,2,"div",[["class","hidden-xs clearfix"]],null,null,null,null,null)),(e()(),r.hb(16777216,null,null,1,null,Ut)),r.pb(10,16384,null,0,A.o,[r.P,r.M],{ngIf:[0,"ngIf"]},null),(e()(),r.qb(11,0,null,null,1,"app-footer",[],null,null,null,Rt,Mt)),r.pb(12,114688,null,0,It,[g.a],null,null)],function(e,t){var n=t.component;e(t,1,0,n.showMainSpinner),e(t,4,0),e(t,7,0),e(t,10,0,n.showSideNav),e(t,12,0)},null)}function Bt(e){return r.Kb(0,[(e()(),r.qb(0,0,null,null,1,"app-root",[],null,[["window","resize"]],function(e,t,n){var i=!0;return"window:resize"===t&&(i=!1!==r.Ab(e,1).onResize(n)&&i),i},Ft,Dt)),r.pb(1,4308992,null,0,m,[r.z,r.h,g.a,p.a],null,null)],function(e,t){e(t,1,0)},null)}var zt=r.mb("app-root",m,Bt,{},{},[]),Ht=function(){function e(e,t,n){this.router=e,this.localStorage=t,this.spinner=n,this.gotSid=this.localStorage.get("sid")}return e.prototype.canLoad=function(e){return!!this.gotSid||(this.router.navigate(["/login"],{queryParams:{redirectTo:"/"+e.path}}),this.gotSid)},e.prototype.canActivate=function(e,t){return this.gotSid=this.localStorage.get("sid")||t.url.includes("sid="),this.gotSid?(this.spinner.show(),!0):(this.router.navigate(["/login"],{queryParams:{redirectTo:t.url}}),!1)},e.prototype.canActivateChild=function(e,t){return this.canActivate(e,t)},e}(),qt=n("3GWt"),Gt=n("S7LP"),Wt=n("008C"),Kt=function(){function e(e){this.routesGenerator=e,this.routes=[],this.routes=this.routesGenerator.getRoutes()}return e.prototype.canLoad=function(){return!0},e.prototype.canActivate=function(e){return this.routes.some(function(t){return t.name===e.routeConfig.path})},e.prototype.canActivateChild=function(e,t){var n=t.url.split("/"),r=n[1];return 2==n.length||this.routes.find(function(e){return e.name===r}).children.some(function(t){return t.path===e.routeConfig.path})},e}(),Zt=n("CPDd"),Yt=n("iIpO"),$t=n("t2rx"),Qt=n("BioP"),Jt=n("ub4/"),Xt=function(){function e(){}return e.forRoot=function(){return{ngModule:e,providers:[]}},e}(),en=n("XD9u"),tn=function(){function e(){}return e.forRoot=function(t){return{ngModule:e,providers:[xe.a,en.a,_,{provide:Pe,useValue:t||{autoClose:!0}}]}},e}(),nn=n("yGOH"),rn=function(){return function(){}}(),on=n("bKdQ"),sn=n("ZLSo"),an=function(){return function(){}}(),un=n("Fq6B"),cn=n("Aivk"),ln=n("9Xeq"),hn=r.nb(d,[m],function(e){return r.xb([r.yb(512,r.j,r.cb,[[8,[w.a,E,x.a,P.a,T.a,G,Q,ie,zt]],[3,r.j],r.x]),r.yb(5120,r.u,r.lb,[[3,r.u]]),r.yb(4608,A.q,A.p,[r.u,[2,A.B]]),r.yb(5120,r.c,r.ib,[]),r.yb(5120,r.s,r.jb,[]),r.yb(5120,r.t,r.kb,[]),r.yb(4608,X.b,X.k,[A.d]),r.yb(6144,r.H,null,[X.b]),r.yb(4608,X.e,X.g,[]),r.yb(5120,X.c,function(e,t,n,r,i,o,s,a){return[new X.i(e,t,n),new X.n(r),new X.m(i,o,s,a)]},[A.d,r.z,r.B,A.d,A.d,X.e,r.db,[2,X.f]]),r.yb(4608,X.d,X.d,[X.c,r.z]),r.yb(135680,X.l,X.l,[A.d]),r.yb(4608,X.j,X.j,[X.d,X.l]),r.yb(6144,r.F,null,[X.j]),r.yb(6144,X.o,null,[X.l]),r.yb(4608,r.N,r.N,[r.z]),r.yb(4608,ee.k,ee.q,[A.d,r.B,ee.o]),r.yb(4608,ee.r,ee.r,[ee.k,ee.p]),r.yb(5120,ee.a,function(e){return[e]},[ee.r]),r.yb(4608,ee.n,ee.n,[]),r.yb(6144,ee.l,null,[ee.n]),r.yb(4608,ee.j,ee.j,[ee.l]),r.yb(6144,ee.b,null,[ee.j]),r.yb(4608,ee.g,ee.m,[ee.b,r.q]),r.yb(4608,ee.c,ee.c,[ee.g]),r.yb(4608,I.x,I.x,[]),r.yb(4608,Et.a,Et.a,[ee.c,U.m]),r.yb(4608,Me.a,Me.a,[]),r.yb(4608,R.a,R.a,[U.m]),r.yb(4608,p.a,p.a,[Et.a,Me.a,R.a,U.m]),r.yb(4608,D.a,D.a,[[3,D.a]]),r.yb(4608,Ht,Ht,[U.m,Me.a,D.a]),r.yb(4608,qt.a,qt.a,[ee.c]),r.yb(4608,Gt.a,Gt.a,[]),r.yb(4608,Ae.a,Ae.a,[r.j,r.z,r.q,Gt.a,r.g]),r.yb(4608,Wt.a,Wt.a,[r.F,Ae.a]),r.yb(5120,U.a,U.B,[U.m]),r.yb(4608,U.f,U.f,[]),r.yb(6144,U.g,null,[U.f]),r.yb(135680,U.r,U.r,[U.m,r.w,r.i,r.q,U.g]),r.yb(4608,U.e,U.e,[]),r.yb(5120,U.F,U.x,[U.m,A.y,U.h]),r.yb(5120,U.i,U.E,[U.C]),r.yb(5120,r.b,function(e){return[e]},[U.i]),r.yb(4608,_,_,[]),r.yb(5120,o.f,f,[ee.c]),r.yb(4608,o.b,o.e,[]),r.yb(5120,o.h,h,[]),r.yb(4608,o.a,c,[]),r.yb(4608,o.k,o.k,[]),r.yb(4608,o.j,o.j,[o.k,o.f,o.b,o.h,o.a,o.l,o.m]),r.yb(4608,he.a,he.a,[Me.a]),r.yb(4608,fe,fe,[he.a]),r.yb(4608,Kt,Kt,[fe]),r.yb(4608,Zt.a,Zt.a,[]),r.yb(4608,Yt.a,Yt.a,[o.j]),r.yb(4608,$t.a,$t.a,[D.a,U.m]),r.yb(4608,Qt.a,Qt.a,[p.a,Et.a]),r.yb(4608,Jt.a,Jt.a,[p.a,Wt.a]),r.yb(4608,Le.a,Le.a,[p.a,Et.a]),r.yb(4608,lt.a,lt.a,[p.a,Et.a]),r.yb(4608,g.a,g.a,[ee.c,A.d]),r.yb(1073742336,A.c,A.c,[]),r.yb(1024,r.l,X.p,[]),r.yb(1024,r.y,function(){return[U.w()]},[]),r.yb(512,U.C,U.C,[r.q]),r.yb(1024,r.d,function(e,t){return[X.q(e),U.D(t)]},[[2,r.y],U.C]),r.yb(512,r.e,r.e,[[2,r.d]]),r.yb(131584,r.g,r.g,[r.z,r.db,r.q,r.l,r.j,r.e]),r.yb(1073742336,r.f,r.f,[r.g]),r.yb(1073742336,X.a,X.a,[[3,X.a]]),r.yb(1073742336,ee.e,ee.e,[]),r.yb(1073742336,ee.d,ee.d,[]),r.yb(1024,U.v,U.z,[[3,U.m]]),r.yb(512,U.t,U.c,[]),r.yb(512,U.b,U.b,[]),r.yb(256,U.h,{useHash:!0,preloadingStrategy:U.f},[]),r.yb(1024,A.k,U.y,[A.x,[2,A.a],U.h]),r.yb(512,A.j,A.j,[A.k]),r.yb(512,r.i,r.i,[]),r.yb(512,r.w,r.K,[r.i,[2,r.L]]),r.yb(1024,U.j,function(){return[[{path:"login",component:L},{path:"error",component:W},{path:"licenses",component:J},{path:"support",loadChildren:"app/components/support/support.module#SupportModule",data:{preload:!0}},{path:"overview",loadChildren:"app/components/overview/overview.module#OverviewModule",data:{preload:!0,icon:"overview",displayName:"Overview"},canActivate:[Ht,Kt]},{path:"system",loadChildren:"app/components/system/system.module#SystemModule",data:{preload:!0,icon:"system",displayName:"System"},canActivate:[Ht,Kt],canActivateChild:[Kt]},{path:"lan",loadChildren:"app/components/lan/lan.module#LanModule",data:{preload:!0,icon:"lan",displayName:"LAN"},canActivate:[Ht,Kt],canActivateChild:[Kt]},{path:"wifi",loadChildren:"app/components/wifi/wifi.module#WifiModule",data:{preload:!0,icon:"wifi",displayName:"WiFi"},canActivate:[Ht,Kt],canActivateChild:[Kt]},{path:"powerline",loadChildren:"app/components/powerline/powerline.module#PowerlineModule",data:{preload:!0,icon:"powerline",displayName:"Powerline"},canActivate:[Ht,Kt],canActivateChild:[Kt]},{path:"**",redirectTo:"/overview"}]]},[]),r.yb(1024,U.m,U.A,[r.g,U.t,U.b,A.j,r.q,r.w,r.i,U.j,U.h,[2,U.s],[2,U.l]]),r.yb(1073742336,U.p,U.p,[[2,U.v],[2,U.m]]),r.yb(1073742336,Xt,Xt,[]),r.yb(1073742336,tn,tn,[]),r.yb(1073742336,o.g,o.g,[]),r.yb(1073742336,I.t,I.t,[]),r.yb(1073742336,I.e,I.e,[]),r.yb(1073742336,nn.a,nn.a,[]),r.yb(1073742336,rn,rn,[]),r.yb(1073742336,on.a,on.a,[]),r.yb(1073742336,sn.a,sn.a,[]),r.yb(1073742336,an,an,[]),r.yb(1073742336,un.a,un.a,[]),r.yb(1073742336,cn.a,cn.a,[]),r.yb(1073742336,ln.a,ln.a,[]),r.yb(1073742336,d,d,[]),r.yb(256,r.bb,!0,[]),r.yb(256,ee.o,"XSRF-TOKEN",[]),r.yb(256,ee.p,"X-XSRF-TOKEN",[]),r.yb(256,Pe,{autoClose:!0},[]),r.yb(256,o.m,void 0,[]),r.yb(256,o.l,!0,[])])});Object(r.U)(),X.h().bootstrapModuleFactory(hn).catch(function(e){return console.log(e)})},zotm:function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n("rPjj"),i=n("Fxb1");function o(e,t,n,o,s){if(void 0===s&&(s=new r.a(e,n,o)),!s.closed)return Object(i.a)(t)(s)}}},[[0,1]]]);
\ No newline at end of file
diff --git a/www/polyfills.d8aa260bd700adfab723.js b/www/polyfills.d8aa260bd700adfab723.js
new file mode 100644
index 0000000..67a3c48
--- /dev/null
+++ b/www/polyfills.d8aa260bd700adfab723.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{"+auO":function(t,n,e){var r=e("XKFU"),o=e("lvtm");r(r.S,"Math",{cbrt:function(t){return o(t=+t)*Math.pow(Math.abs(t),1/3)}})},"+oPb":function(t,n,e){"use strict";e("OGtf")("blink",function(t){return function(){return t(this,"blink","","")}})},"+rLv":function(t,n,e){var r=e("dyZX").document;t.exports=r&&r.documentElement},"/8Fb":function(t,n,e){var r=e("XKFU"),o=e("UExd")(!0);r(r.S,"Object",{entries:function(t){return o(t)}})},"/KAi":function(t,n,e){var r=e("XKFU"),o=e("dyZX").isFinite;r(r.S,"Number",{isFinite:function(t){return"number"==typeof t&&o(t)}})},"/SS/":function(t,n,e){var r=e("XKFU");r(r.S,"Object",{setPrototypeOf:e("i5dc").set})},"/e88":function(t,n){t.exports="\t\n\v\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},"/uf1":function(t,n,e){"use strict";var r=e("XKFU"),o=e("S/j/"),i=e("2OiF"),a=e("hswa");e("nh4g")&&r(r.P+e("xbSm"),"Object",{__defineSetter__:function(t,n){a.f(o(this),t,{set:i(n),enumerable:!0,configurable:!0})}})},"0/R4":function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},"0E+W":function(t,n,e){e("elZq")("Array")},"0LDn":function(t,n,e){"use strict";e("OGtf")("italics",function(t){return function(){return t(this,"i","","")}})},"0TWp":function(t,n,e){(function(t){!function(){"use strict";!function(t){var n=t.performance;function e(t){n&&n.mark&&n.mark(t)}function r(t,e){n&&n.measure&&n.measure(t,e)}if(e("Zone"),t.Zone)throw new Error("Zone already loaded.");var o,i=function(){function n(t,n){this._properties=null,this._parent=t,this._name=n?n.name||"unnamed":"<root>",this._properties=n&&n.properties||{},this._zoneDelegate=new u(this,this._parent&&this._parent._zoneDelegate,n)}return n.assertZonePatched=function(){if(t.Promise!==F.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(n,"root",{get:function(){for(var t=n.current;t.parent;)t=t.parent;return t},enumerable:!0,configurable:!0}),Object.defineProperty(n,"current",{get:function(){return O.zone},enumerable:!0,configurable:!0}),Object.defineProperty(n,"currentTask",{get:function(){return P},enumerable:!0,configurable:!0}),n.__load_patch=function(o,i){if(F.hasOwnProperty(o))throw Error("Already loaded patch: "+o);if(!t["__Zone_disable_"+o]){var a="Zone:"+o;e(a),F[o]=i(t,n,E),r(a,a)}},Object.defineProperty(n.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),n.prototype.get=function(t){var n=this.getZoneWith(t);if(n)return n._properties[t]},n.prototype.getZoneWith=function(t){for(var n=this;n;){if(n._properties.hasOwnProperty(t))return n;n=n._parent}return null},n.prototype.fork=function(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)},n.prototype.wrap=function(t,n){if("function"!=typeof t)throw new Error("Expecting function got: "+t);var e=this._zoneDelegate.intercept(this,t,n),r=this;return function(){return r.runGuarded(e,this,arguments,n)}},n.prototype.run=function(t,n,e,r){void 0===n&&(n=void 0),void 0===e&&(e=null),void 0===r&&(r=null),O={parent:O,zone:this};try{return this._zoneDelegate.invoke(this,t,n,e,r)}finally{O=O.parent}},n.prototype.runGuarded=function(t,n,e,r){void 0===n&&(n=null),void 0===e&&(e=null),void 0===r&&(r=null),O={parent:O,zone:this};try{try{return this._zoneDelegate.invoke(this,t,n,e,r)}catch(o){if(this._zoneDelegate.handleError(this,o))throw o}}finally{O=O.parent}},n.prototype.runTask=function(t,n,e){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||d).name+"; Execution: "+this.name+")");if(t.state!==y||t.type!==T){var r=t.state!=k;r&&t._transitionTo(k,b),t.runCount++;var o=P;P=t,O={parent:O,zone:this};try{t.type==x&&t.data&&!t.data.isPeriodic&&(t.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,t,n,e)}catch(i){if(this._zoneDelegate.handleError(this,i))throw i}}finally{t.state!==y&&t.state!==S&&(t.type==T||t.data&&t.data.isPeriodic?r&&t._transitionTo(b,k):(t.runCount=0,this._updateTaskCount(t,-1),r&&t._transitionTo(y,k,y))),O=O.parent,P=o}}},n.prototype.scheduleTask=function(t){if(t.zone&&t.zone!==this)for(var n=this;n;){if(n===t.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+t.zone.name);n=n.parent}t._transitionTo(m,y);var e=[];t._zoneDelegates=e,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(r){throw t._transitionTo(S,m,y),this._zoneDelegate.handleError(this,r),r}return t._zoneDelegates===e&&this._updateTaskCount(t,1),t.state==m&&t._transitionTo(b,m),t},n.prototype.scheduleMicroTask=function(t,n,e,r){return this.scheduleTask(new c(w,t,n,e,r,null))},n.prototype.scheduleMacroTask=function(t,n,e,r,o){return this.scheduleTask(new c(x,t,n,e,r,o))},n.prototype.scheduleEventTask=function(t,n,e,r,o){return this.scheduleTask(new c(T,t,n,e,r,o))},n.prototype.cancelTask=function(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||d).name+"; Execution: "+this.name+")");t._transitionTo(_,b,k);try{this._zoneDelegate.cancelTask(this,t)}catch(n){throw t._transitionTo(S,_),this._zoneDelegate.handleError(this,n),n}return this._updateTaskCount(t,-1),t._transitionTo(y,_),t.runCount=0,t},n.prototype._updateTaskCount=function(t,n){var e=t._zoneDelegates;-1==n&&(t._zoneDelegates=null);for(var r=0;r<e.length;r++)e[r]._updateTaskCount(t.type,n)},n.__symbol__=D,n}(),a={name:"",onHasTask:function(t,n,e,r){return t.hasTask(e,r)},onScheduleTask:function(t,n,e,r){return t.scheduleTask(e,r)},onInvokeTask:function(t,n,e,r,o,i){return t.invokeTask(e,r,o,i)},onCancelTask:function(t,n,e,r){return t.cancelTask(e,r)}},u=function(){function t(t,n,e){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=t,this._parentDelegate=n,this._forkZS=e&&(e&&e.onFork?e:n._forkZS),this._forkDlgt=e&&(e.onFork?n:n._forkDlgt),this._forkCurrZone=e&&(e.onFork?this.zone:n.zone),this._interceptZS=e&&(e.onIntercept?e:n._interceptZS),this._interceptDlgt=e&&(e.onIntercept?n:n._interceptDlgt),this._interceptCurrZone=e&&(e.onIntercept?this.zone:n.zone),this._invokeZS=e&&(e.onInvoke?e:n._invokeZS),this._invokeDlgt=e&&(e.onInvoke?n:n._invokeDlgt),this._invokeCurrZone=e&&(e.onInvoke?this.zone:n.zone),this._handleErrorZS=e&&(e.onHandleError?e:n._handleErrorZS),this._handleErrorDlgt=e&&(e.onHandleError?n:n._handleErrorDlgt),this._handleErrorCurrZone=e&&(e.onHandleError?this.zone:n.zone),this._scheduleTaskZS=e&&(e.onScheduleTask?e:n._scheduleTaskZS),this._scheduleTaskDlgt=e&&(e.onScheduleTask?n:n._scheduleTaskDlgt),this._scheduleTaskCurrZone=e&&(e.onScheduleTask?this.zone:n.zone),this._invokeTaskZS=e&&(e.onInvokeTask?e:n._invokeTaskZS),this._invokeTaskDlgt=e&&(e.onInvokeTask?n:n._invokeTaskDlgt),this._invokeTaskCurrZone=e&&(e.onInvokeTask?this.zone:n.zone),this._cancelTaskZS=e&&(e.onCancelTask?e:n._cancelTaskZS),this._cancelTaskDlgt=e&&(e.onCancelTask?n:n._cancelTaskDlgt),this._cancelTaskCurrZone=e&&(e.onCancelTask?this.zone:n.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=e&&e.onHasTask;(r||n&&n._hasTaskZS)&&(this._hasTaskZS=r?e:a,this._hasTaskDlgt=n,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=t,e.onScheduleTask||(this._scheduleTaskZS=a,this._scheduleTaskDlgt=n,this._scheduleTaskCurrZone=this.zone),e.onInvokeTask||(this._invokeTaskZS=a,this._invokeTaskDlgt=n,this._invokeTaskCurrZone=this.zone),e.onCancelTask||(this._cancelTaskZS=a,this._cancelTaskDlgt=n,this._cancelTaskCurrZone=this.zone))}return t.prototype.fork=function(t,n){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,t,n):new i(t,n)},t.prototype.intercept=function(t,n,e){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,t,n,e):n},t.prototype.invoke=function(t,n,e,r,o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,t,n,e,r,o):n.apply(e,r)},t.prototype.handleError=function(t,n){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,t,n)},t.prototype.scheduleTask=function(t,n){var e=n;if(this._scheduleTaskZS)this._hasTaskZS&&e._zoneDelegates.push(this._hasTaskDlgtOwner),(e=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,t,n))||(e=n);else if(n.scheduleFn)n.scheduleFn(n);else{if(n.type!=w)throw new Error("Task is missing scheduleFn.");v(n)}return e},t.prototype.invokeTask=function(t,n,e,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,t,n,e,r):n.callback.apply(e,r)},t.prototype.cancelTask=function(t,n){var e;if(this._cancelTaskZS)e=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,t,n);else{if(!n.cancelFn)throw Error("Task is not cancelable");e=n.cancelFn(n)}return e},t.prototype.hasTask=function(t,n){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,t,n)}catch(e){this.handleError(t,e)}},t.prototype._updateTaskCount=function(t,n){var e=this._taskCounts,r=e[t],o=e[t]=r+n;if(o<0)throw new Error("More tasks executed then were scheduled.");0!=r&&0!=o||this.hasTask(this.zone,{microTask:e.microTask>0,macroTask:e.macroTask>0,eventTask:e.eventTask>0,change:t})},t}(),c=function(){function n(e,r,o,i,a,u){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=e,this.source=r,this.data=i,this.scheduleFn=a,this.cancelFn=u,this.callback=o;var c=this;this.invoke=e===T&&i&&i.useG?n.invokeTask:function(){return n.invokeTask.call(t,c,this,arguments)}}return n.invokeTask=function(t,n,e){t||(t=this),M++;try{return t.runCount++,t.zone.runTask(t,n,e)}finally{1==M&&g(),M--}},Object.defineProperty(n.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),n.prototype.cancelScheduleRequest=function(){this._transitionTo(y,m)},n.prototype._transitionTo=function(t,n,e){if(this._state!==n&&this._state!==e)throw new Error(this.type+" '"+this.source+"': can not transition to '"+t+"', expecting state '"+n+"'"+(e?" or '"+e+"'":"")+", was '"+this._state+"'.");this._state=t,t==y&&(this._zoneDelegates=null)},n.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},n.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}},n}(),s=D("setTimeout"),f=D("Promise"),l=D("then"),h=[],p=!1;function v(n){0===M&&0===h.length&&(o||t[f]&&(o=t[f].resolve(0)),o?o[l](g):t[s](g,0)),n&&h.push(n)}function g(){if(!p){for(p=!0;h.length;){var t=h;h=[];for(var n=0;n<t.length;n++){var e=t[n];try{e.zone.runTask(e,null,null)}catch(r){E.onUnhandledError(r)}}}E.microtaskDrainDone(),p=!1}}var d={name:"NO ZONE"},y="notScheduled",m="scheduling",b="scheduled",k="running",_="canceling",S="unknown",w="microTask",x="macroTask",T="eventTask",F={},E={symbol:D,currentZoneFrame:function(){return O},onUnhandledError:j,microtaskDrainDone:j,scheduleMicroTask:v,showUncaughtError:function(){return!i[D("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:j,patchMethod:function(){return j},bindArguments:function(){return null},setNativePromise:function(t){t&&"function"==typeof t.resolve&&(o=t.resolve(0))}},O={parent:null,zone:new i(null,null)},P=null,M=0;function j(){}function D(t){return"__zone_symbol__"+t}r("Zone","Zone"),t.Zone=i}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||t),Zone.__load_patch("ZoneAwarePromise",function(t,n,e){var r=Object.getOwnPropertyDescriptor,o=Object.defineProperty,i=e.symbol,a=[],u=i("Promise"),c=i("then"),s="__creationTrace__";e.onUnhandledError=function(t){if(e.showUncaughtError()){var n=t&&t.rejection;n?console.error("Unhandled Promise rejection:",n instanceof Error?n.message:n,"; Zone:",t.zone.name,"; Task:",t.task&&t.task.source,"; Value:",n,n instanceof Error?n.stack:void 0):console.error(t)}},e.microtaskDrainDone=function(){for(;a.length;)for(var t=function(){var t=a.shift();try{t.zone.runGuarded(function(){throw t})}catch(n){l(n)}};a.length;)t()};var f=i("unhandledPromiseRejectionHandler");function l(t){e.onUnhandledError(t);try{var r=n[f];r&&"function"==typeof r&&r.call(this,t)}catch(o){}}function h(t){return t&&t.then}function p(t){return t}function v(t){return K.reject(t)}var g=i("state"),d=i("value"),y=i("finally"),m=i("parentPromiseValue"),b=i("parentPromiseState"),k="Promise.then",_=null,S=!0,w=!1,x=0;function T(t,n){return function(e){try{P(t,n,e)}catch(r){P(t,!1,r)}}}var F=function(){var t=!1;return function(n){return function(){t||(t=!0,n.apply(null,arguments))}}},E="Promise resolved with itself",O=i("currentTaskTrace");function P(t,r,i){var u,c=F();if(t===i)throw new TypeError(E);if(t[g]===_){var f=null;try{"object"!=typeof i&&"function"!=typeof i||(f=i&&i.then)}catch(k){return c(function(){P(t,!1,k)})(),t}if(r!==w&&i instanceof K&&i.hasOwnProperty(g)&&i.hasOwnProperty(d)&&i[g]!==_)j(i),P(t,i[g],i[d]);else if(r!==w&&"function"==typeof f)try{f.call(i,c(T(t,r)),c(T(t,!1)))}catch(k){c(function(){P(t,!1,k)})()}else{t[g]=r;var l=t[d];if(t[d]=i,t[y]===y&&r===S&&(t[g]=t[b],t[d]=t[m]),r===w&&i instanceof Error){var h=n.currentTask&&n.currentTask.data&&n.currentTask.data[s];h&&o(i,O,{configurable:!0,enumerable:!1,writable:!0,value:h})}for(var p=0;p<l.length;)D(t,l[p++],l[p++],l[p++],l[p++]);if(0==l.length&&r==w){t[g]=x;try{throw new Error("Uncaught (in promise): "+((u=i)&&u.toString===Object.prototype.toString?(u.constructor&&u.constructor.name||"")+": "+JSON.stringify(u):u?u.toString():Object.prototype.toString.call(u))+(i&&i.stack?"\n"+i.stack:""))}catch(k){var v=k;v.rejection=i,v.promise=t,v.zone=n.current,v.task=n.currentTask,a.push(v),e.scheduleMicroTask()}}}}return t}var M=i("rejectionHandledHandler");function j(t){if(t[g]===x){try{var e=n[M];e&&"function"==typeof e&&e.call(this,{rejection:t[d],promise:t})}catch(o){}t[g]=w;for(var r=0;r<a.length;r++)t===a[r].promise&&a.splice(r,1)}}function D(t,n,e,r,o){j(t);var i=t[g],a=i?"function"==typeof r?r:p:"function"==typeof o?o:v;n.scheduleMicroTask(k,function(){try{var r=t[d],o=e&&y===e[y];o&&(e[m]=r,e[b]=i);var u=n.run(a,void 0,o&&a!==v&&a!==p?[]:[r]);P(e,!0,u)}catch(c){P(e,!1,c)}},e)}var K=function(){function t(n){if(!(this instanceof t))throw new Error("Must be an instanceof Promise.");this[g]=_,this[d]=[];try{n&&n(T(this,S),T(this,w))}catch(e){P(this,!1,e)}}return t.toString=function(){return"function ZoneAwarePromise() { [native code] }"},t.resolve=function(t){return P(new this(null),S,t)},t.reject=function(t){return P(new this(null),w,t)},t.race=function(t){var n,e,r=new this(function(t,r){n=t,e=r});function o(t){r&&(r=n(t))}function i(t){r&&(r=e(t))}for(var a=0,u=t;a<u.length;a++){var c=u[a];h(c)||(c=this.resolve(c)),c.then(o,i)}return r},t.all=function(t){for(var n,e,r=new this(function(t,r){n=t,e=r}),o=0,i=[],a=0,u=t;a<u.length;a++){var c=u[a];h(c)||(c=this.resolve(c)),c.then(function(t){return function(e){i[t]=e,--o||n(i)}}(o),e),o++}return o||n(i),r},t.prototype.then=function(t,e){var r=new this.constructor(null),o=n.current;return this[g]==_?this[d].push(o,r,t,e):D(this,o,r,t,e),r},t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var e=new this.constructor(null);e[y]=y;var r=n.current;return this[g]==_?this[d].push(r,e,t,t):D(this,r,e,t,t),e},t}();K.resolve=K.resolve,K.reject=K.reject,K.race=K.race,K.all=K.all;var U=t[u]=t.Promise,X=n.__symbol__("ZoneAwarePromise"),Z=r(t,"Promise");Z&&!Z.configurable||(Z&&delete Z.writable,Z&&delete Z.value,Z||(Z={configurable:!0,enumerable:!0}),Z.get=function(){return t[X]?t[X]:t[u]},Z.set=function(n){n===K?t[X]=n:(t[u]=n,n.prototype[c]||L(n),e.setNativePromise(n))},o(t,"Promise",Z)),t.Promise=K;var A,I=i("thenPatched");function L(t){var n=t.prototype,e=r(n,"then");if(!e||!1!==e.writable&&e.configurable){var o=n.then;n[c]=o,t.prototype.then=function(t,n){var e=this;return new K(function(t,n){o.call(e,t,n)}).then(t,n)},t[I]=!0}}if(U){L(U);var R=t.fetch;"function"==typeof R&&(t.fetch=(A=R,function(){var t=A.apply(this,arguments);if(t instanceof K)return t;var n=t.constructor;return n[I]||L(n),t}))}return Promise[n.__symbol__("uncaughtPromiseErrors")]=a,K});var n=Object.getOwnPropertyDescriptor,e=Object.defineProperty,r=Object.getPrototypeOf,o=Object.create,i=Array.prototype.slice,a="addEventListener",u="removeEventListener",c=Zone.__symbol__(a),s=Zone.__symbol__(u),f="true",l="false",h="__zone_symbol__";function p(t,n){return Zone.current.wrap(t,n)}function v(t,n,e,r,o){return Zone.current.scheduleMacroTask(t,n,e,r,o)}var g=Zone.__symbol__,d="undefined"!=typeof window,y=d?window:void 0,m=d&&y||"object"==typeof self&&self||t,b="removeAttribute",k=[null];function _(t,n){for(var e=t.length-1;e>=0;e--)"function"==typeof t[e]&&(t[e]=p(t[e],n+"_"+e));return t}function S(t){return!t||!1!==t.writable&&!("function"==typeof t.get&&void 0===t.set)}var w="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,x=!("nw"in m)&&void 0!==m.process&&"[object process]"==={}.toString.call(m.process),T=!x&&!w&&!(!d||!y.HTMLElement),F=void 0!==m.process&&"[object process]"==={}.toString.call(m.process)&&!w&&!(!d||!y.HTMLElement),E={},O=function(t){if(t=t||m.event){var n=E[t.type];n||(n=E[t.type]=g("ON_PROPERTY"+t.type));var e=(this||t.target||m)[n],r=e&&e.apply(this,arguments);return null==r||r||t.preventDefault(),r}};function P(t,r,o){var i=n(t,r);if(!i&&o&&n(o,r)&&(i={enumerable:!0,configurable:!0}),i&&i.configurable){delete i.writable,delete i.value;var a=i.get,u=i.set,c=r.substr(2),s=E[c];s||(s=E[c]=g("ON_PROPERTY"+c)),i.set=function(n){var e=this;e||t!==m||(e=m),e&&(e[s]&&e.removeEventListener(c,O),u&&u.apply(e,k),"function"==typeof n?(e[s]=n,e.addEventListener(c,O,!1)):e[s]=null)},i.get=function(){var n=this;if(n||t!==m||(n=m),!n)return null;var e=n[s];if(e)return e;if(a){var o=a&&a.call(this);if(o)return i.set.call(this,o),"function"==typeof n[b]&&n.removeAttribute(r),o}return null},e(t,r,i)}}function M(t,n,e){if(n)for(var r=0;r<n.length;r++)P(t,"on"+n[r],e);else{var o=[];for(var i in t)"on"==i.substr(0,2)&&o.push(i);for(var a=0;a<o.length;a++)P(t,o[a],e)}}var j=g("originalInstance");function D(t){var n=m[t];if(n){m[g(t)]=n,m[t]=function(){var e=_(arguments,t);switch(e.length){case 0:this[j]=new n;break;case 1:this[j]=new n(e[0]);break;case 2:this[j]=new n(e[0],e[1]);break;case 3:this[j]=new n(e[0],e[1],e[2]);break;case 4:this[j]=new n(e[0],e[1],e[2],e[3]);break;default:throw new Error("Arg list too long.")}},U(m[t],n);var r,o=new n(function(){});for(r in o)"XMLHttpRequest"===t&&"responseBlob"===r||function(n){"function"==typeof o[n]?m[t].prototype[n]=function(){return this[j][n].apply(this[j],arguments)}:e(m[t].prototype,n,{set:function(e){"function"==typeof e?(this[j][n]=p(e,t+"."+n),U(this[j][n],e)):this[j][n]=e},get:function(){return this[j][n]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(m[t][r]=n[r])}}function K(t,e,o){for(var i=t;i&&!i.hasOwnProperty(e);)i=r(i);!i&&t[e]&&(i=t);var a,u=g(e);if(i&&!(a=i[u])&&(a=i[u]=i[e],S(i&&n(i,e)))){var c=o(a,u,e);i[e]=function(){return c(this,arguments)},U(i[e],a)}return a}function U(t,n){t[g("OriginalDelegate")]=n}var X=!1,Z=!1;function A(){if(X)return Z;X=!0;try{var t=y.navigator.userAgent;return-1===t.indexOf("MSIE ")&&-1===t.indexOf("Trident/")&&-1===t.indexOf("Edge/")||(Z=!0),Z}catch(n){}}Zone.__load_patch("toString",function(t){var n=Function.prototype.toString,e=g("OriginalDelegate"),r=g("Promise"),o=g("Error"),i=function(){if("function"==typeof this){var i=this[e];if(i)return"function"==typeof i?n.apply(this[e],arguments):Object.prototype.toString.call(i);if(this===Promise){var a=t[r];if(a)return n.apply(a,arguments)}if(this===Error){var u=t[o];if(u)return n.apply(u,arguments)}}return n.apply(this,arguments)};i[e]=n,Function.prototype.toString=i;var a=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":a.apply(this,arguments)}});var I={useG:!0},L={},R={},C=/^__zone_symbol__(\w+)(true|false)$/,N="__zone_symbol__propagationStopped";function z(t,n,e){var o=e&&e.add||a,i=e&&e.rm||u,c=e&&e.listeners||"eventListeners",s=e&&e.rmAll||"removeAllListeners",p=g(o),v="."+o+":",d="prependListener",y="."+d+":",m=function(t,n,e){if(!t.isRemoved){var r=t.callback;"object"==typeof r&&r.handleEvent&&(t.callback=function(t){return r.handleEvent(t)},t.originalDelegate=r),t.invoke(t,n,[e]);var o=t.options;o&&"object"==typeof o&&o.once&&n[i].call(n,e.type,t.originalDelegate?t.originalDelegate:t.callback,o)}},b=function(n){if(n=n||t.event){var e=this||n.target||t,r=e[L[n.type][l]];if(r)if(1===r.length)m(r[0],e,n);else for(var o=r.slice(),i=0;i<o.length&&(!n||!0!==n[N]);i++)m(o[i],e,n)}},k=function(n){if(n=n||t.event){var e=this||n.target||t,r=e[L[n.type][f]];if(r)if(1===r.length)m(r[0],e,n);else for(var o=r.slice(),i=0;i<o.length&&(!n||!0!==n[N]);i++)m(o[i],e,n)}};function _(n,e){if(!n)return!1;var a=!0;e&&void 0!==e.useG&&(a=e.useG);var u=e&&e.vh,m=!0;e&&void 0!==e.chkDup&&(m=e.chkDup);var _=!1;e&&void 0!==e.rt&&(_=e.rt);for(var S=n;S&&!S.hasOwnProperty(o);)S=r(S);if(!S&&n[o]&&(S=n),!S)return!1;if(S[p])return!1;var w,x={},T=S[p]=S[o],F=S[g(i)]=S[i],E=S[g(c)]=S[c],O=S[g(s)]=S[s];e&&e.prepend&&(w=S[g(e.prepend)]=S[e.prepend]);var P=a?function(){if(!x.isExisting)return T.call(x.target,x.eventName,x.capture?k:b,x.options)}:function(t){return T.call(x.target,x.eventName,t.invoke,x.options)},M=a?function(t){if(!t.isRemoved){var n=L[t.eventName],e=void 0;n&&(e=n[t.capture?f:l]);var r=e&&t.target[e];if(r)for(var o=0;o<r.length;o++)if(r[o]===t){r.splice(o,1),t.isRemoved=!0,0===r.length&&(t.allRemoved=!0,t.target[e]=null);break}}if(t.allRemoved)return F.call(t.target,t.eventName,t.capture?k:b,t.options)}:function(t){return F.call(t.target,t.eventName,t.invoke,t.options)},j=e&&e.diff?e.diff:function(t,n){var e=typeof n;return"function"===e&&t.callback===n||"object"===e&&t.originalDelegate===n},D=Zone[Zone.__symbol__("BLACK_LISTED_EVENTS")],K=function(n,e,r,o,i,c){return void 0===i&&(i=!1),void 0===c&&(c=!1),function(){var s=this||t,p=arguments[1];if(!p)return n.apply(this,arguments);var v=!1;if("function"!=typeof p){if(!p.handleEvent)return n.apply(this,arguments);v=!0}if(!u||u(n,p,s,arguments)){var g,d=arguments[0],y=arguments[2];if(D)for(var b=0;b<D.length;b++)if(d===D[b])return n.apply(this,arguments);var k=!1;void 0===y?g=!1:!0===y?g=!0:!1===y?g=!1:(g=!!y&&!!y.capture,k=!!y&&!!y.once);var _,S=Zone.current,w=L[d];if(w)_=w[g?f:l];else{var T=h+(d+l),F=h+(d+f);L[d]={},L[d][l]=T,L[d][f]=F,_=g?F:T}var E,O=s[_],P=!1;if(O){if(P=!0,m)for(b=0;b<O.length;b++)if(j(O[b],p))return}else O=s[_]=[];var M=s.constructor.name,K=R[M];K&&(E=K[d]),E||(E=M+e+d),x.options=y,k&&(x.options.once=!1),x.target=s,x.capture=g,x.eventName=d,x.isExisting=P;var U=a?I:null;U&&(U.taskData=x);var X=S.scheduleEventTask(E,p,U,r,o);return x.target=null,U&&(U.taskData=null),k&&(y.once=!0),X.options=y,X.target=s,X.capture=g,X.eventName=d,v&&(X.originalDelegate=p),c?O.unshift(X):O.push(X),i?s:void 0}}};return S[o]=K(T,v,P,M,_),w&&(S[d]=K(w,y,function(t){return w.call(x.target,x.eventName,t.invoke,x.options)},M,_,!0)),S[i]=function(){var n,e=this||t,r=arguments[0],o=arguments[2];n=void 0!==o&&(!0===o||!1!==o&&!!o&&!!o.capture);var i=arguments[1];if(!i)return F.apply(this,arguments);if(!u||u(F,i,e,arguments)){var a,c=L[r];c&&(a=c[n?f:l]);var s=a&&e[a];if(s)for(var h=0;h<s.length;h++){var p=s[h];if(j(p,i))return s.splice(h,1),p.isRemoved=!0,0===s.length&&(p.allRemoved=!0,e[a]=null),p.zone.cancelTask(p),_?e:void 0}return F.apply(this,arguments)}},S[c]=function(){for(var n=[],e=q(this||t,arguments[0]),r=0;r<e.length;r++){var o=e[r];n.push(o.originalDelegate?o.originalDelegate:o.callback)}return n},S[s]=function(){var n=this||t,e=arguments[0];if(e){var r=L[e];if(r){var o=n[r[l]],a=n[r[f]];if(o){var u=o.slice();for(p=0;p<u.length;p++)this[i].call(this,e,(c=u[p]).originalDelegate?c.originalDelegate:c.callback,c.options)}if(a)for(u=a.slice(),p=0;p<u.length;p++){var c;this[i].call(this,e,(c=u[p]).originalDelegate?c.originalDelegate:c.callback,c.options)}}}else{for(var h=Object.keys(n),p=0;p<h.length;p++){var v=C.exec(h[p]),g=v&&v[1];g&&"removeListener"!==g&&this[s].call(this,g)}this[s].call(this,"removeListener")}if(_)return this},U(S[o],T),U(S[i],F),O&&U(S[s],O),E&&U(S[c],E),!0}for(var S=[],w=0;w<n.length;w++)S[w]=_(n[w],e);return S}function q(t,n){var e=[];for(var r in t){var o=C.exec(r),i=o&&o[1];if(i&&(!n||i===n)){var a=t[r];if(a)for(var u=0;u<a.length;u++)e.push(a[u])}}return e}var V=g("zoneTask");function G(t,n,e,r){var o=null,i=null;e+=r;var a={};function u(n){var e=n.data;return e.args[0]=function(){try{n.invoke.apply(this,arguments)}finally{n.data&&n.data.isPeriodic||("number"==typeof e.handleId?delete a[e.handleId]:e.handleId&&(e.handleId[V]=null))}},e.handleId=o.apply(t,e.args),n}function c(t){return i(t.data.handleId)}o=K(t,n+=r,function(e){return function(o,i){if("function"==typeof i[0]){var s=v(n,i[0],{handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?i[1]||0:null,args:i},u,c);if(!s)return s;var f=s.data.handleId;return"number"==typeof f?a[f]=s:f&&(f[V]=s),f&&f.ref&&f.unref&&"function"==typeof f.ref&&"function"==typeof f.unref&&(s.ref=f.ref.bind(f),s.unref=f.unref.bind(f)),"number"==typeof f||f?f:s}return e.apply(t,i)}}),i=K(t,e,function(n){return function(e,r){var o,i=r[0];"number"==typeof i?o=a[i]:(o=i&&i[V])||(o=i),o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&("number"==typeof i?delete a[i]:i&&(i[V]=null),o.zone.cancelTask(o)):n.apply(t,r)}})}var H=Object[g("defineProperty")]=Object.defineProperty,W=Object[g("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,Y=Object.create,J=g("unconfigurables");function B(t,n){return t&&t[J]&&t[J][n]}function Q(t,n,e){return Object.isFrozen(e)||(e.configurable=!0),e.configurable||(t[J]||Object.isFrozen(t)||H(t,J,{writable:!0,value:{}}),t[J]&&(t[J][n]=!0)),e}function $(t,n,e,r){try{return H(t,n,e)}catch(i){if(!e.configurable)throw i;void 0===r?delete e.configurable:e.configurable=r;try{return H(t,n,e)}catch(i){var o=null;try{o=JSON.stringify(e)}catch(i){o=e.toString()}console.log("Attempting to configure '"+n+"' with descriptor '"+o+"' on object '"+t+"' and got error, giving up: "+i)}}}var tt=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],nt=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],et=["load"],rt=["blur","error","focus","load","resize","scroll","messageerror"],ot=["bounce","finish","start"],it=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],at=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ut=["close","error","open","message"],ct=["error","message"],st=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange"],tt,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function ft(t,n,e,r){t&&M(t,function(t,n,e){if(!e)return n;var r=e.filter(function(n){return n.target===t});if(!r||0===r.length)return n;var o=r[0].ignoreProperties;return n.filter(function(t){return-1===o.indexOf(t)})}(t,n,e),r)}function lt(t,c){if(!x||F){var s="undefined"!=typeof WebSocket;if(function(){if((T||F)&&!n(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var t=n(Element.prototype,"onclick");if(t&&!t.configurable)return!1}var r=XMLHttpRequest.prototype,o=n(r,"onreadystatechange");if(o){e(r,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var i=!!(u=new XMLHttpRequest).onreadystatechange;return e(r,"onreadystatechange",o||{}),i}var a=g("fake");e(r,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[a]},set:function(t){this[a]=t}});var u,c=function(){};return(u=new XMLHttpRequest).onreadystatechange=c,i=u[a]===c,u.onreadystatechange=null,i}()){var f=c.__Zone_ignore_on_properties;if(T){var l=window;ft(l,st.concat(["messageerror"]),f,r(l)),ft(Document.prototype,st,f),void 0!==l.SVGElement&&ft(l.SVGElement.prototype,st,f),ft(Element.prototype,st,f),ft(HTMLElement.prototype,st,f),ft(HTMLMediaElement.prototype,nt,f),ft(HTMLFrameSetElement.prototype,tt.concat(rt),f),ft(HTMLBodyElement.prototype,tt.concat(rt),f),ft(HTMLFrameElement.prototype,et,f),ft(HTMLIFrameElement.prototype,et,f);var h=l.HTMLMarqueeElement;h&&ft(h.prototype,ot,f);var v=l.Worker;v&&ft(v.prototype,ct,f)}ft(XMLHttpRequest.prototype,it,f);var d=c.XMLHttpRequestEventTarget;d&&ft(d&&d.prototype,it,f),"undefined"!=typeof IDBIndex&&(ft(IDBIndex.prototype,at,f),ft(IDBRequest.prototype,at,f),ft(IDBOpenDBRequest.prototype,at,f),ft(IDBDatabase.prototype,at,f),ft(IDBTransaction.prototype,at,f),ft(IDBCursor.prototype,at,f)),s&&ft(WebSocket.prototype,ut,f)}else!function(){for(var t=function(t){var n=st[t],e="on"+n;self.addEventListener(n,function(t){var n,r,o=t.target;for(r=o?o.constructor.name+"."+e:"unknown."+e;o;)o[e]&&!o[e][ht]&&((n=p(o[e],r))[ht]=o[e],o[e]=n),o=o.parentElement},!0)},n=0;n<st.length;n++)t(n)}(),D("XMLHttpRequest"),s&&function(t,e){var r=e.WebSocket;e.EventTarget||z(e,[r.prototype]),e.WebSocket=function(t,e){var c,s,f=arguments.length>1?new r(t,e):new r(t),l=n(f,"onmessage");return l&&!1===l.configurable?(c=o(f),s=f,[a,u,"send","close"].forEach(function(t){c[t]=function(){var n=i.call(arguments);if(t===a||t===u){var e=n.length>0?n[0]:void 0;if(e){var r=Zone.__symbol__("ON_PROPERTY"+e);f[r]=c[r]}}return f[t].apply(f,n)}})):c=f,M(c,["close","error","message","open"],s),c};var c=e.WebSocket;for(var s in r)c[s]=r[s]}(0,c)}}var ht=g("unbound");Zone.__load_patch("util",function(t,n,e){e.patchOnProperties=M,e.patchMethod=K,e.bindArguments=_}),Zone.__load_patch("timers",function(t){G(t,"set","clear","Timeout"),G(t,"set","clear","Interval"),G(t,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",function(t){G(t,"request","cancel","AnimationFrame"),G(t,"mozRequest","mozCancel","AnimationFrame"),G(t,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(t,n){for(var e=["alert","prompt","confirm"],r=0;r<e.length;r++)K(t,e[r],function(e,r,o){return function(r,i){return n.current.run(e,t,i,o)}})}),Zone.__load_patch("EventTarget",function(t,n,e){var r=n.__symbol__("BLACK_LISTED_EVENTS");t[r]&&(n[r]=t[r]),function(t,n){!function(t,n){var e=t.Event;e&&e.prototype&&n.patchMethod(e.prototype,"stopImmediatePropagation",function(t){return function(n,e){n[N]=!0,t&&t.apply(n,e)}})}(t,n)}(t,e),function(t,n){var e="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),o=[],i=t.wtf,a=e.split(",");i?o=a.map(function(t){return"HTML"+t+"Element"}).concat(r):t.EventTarget?o.push("EventTarget"):o=r;for(var u=t.__Zone_disable_IE_check||!1,c=t.__Zone_enable_cross_context_check||!1,s=A(),p="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",v=0;v<st.length;v++){var g=h+((k=st[v])+l),d=h+(k+f);L[k]={},L[k][l]=g,L[k][f]=d}for(v=0;v<e.length;v++)for(var y=a[v],m=R[y]={},b=0;b<st.length;b++){var k;m[k=st[b]]=y+".addEventListener:"+k}var _=[];for(v=0;v<o.length;v++){var S=t[o[v]];_.push(S&&S.prototype)}z(t,_,{vh:function(t,n,e,r){if(!u&&s){if(c)try{var o;if("[object FunctionWrapper]"===(o=n.toString())||o==p)return t.apply(e,r),!1}catch(i){return t.apply(e,r),!1}else if("[object FunctionWrapper]"===(o=n.toString())||o==p)return t.apply(e,r),!1}else if(c)try{n.toString()}catch(i){return t.apply(e,r),!1}return!0}}),n.patchEventTarget=z}(t,e);var o=t.XMLHttpRequestEventTarget;o&&o.prototype&&e.patchEventTarget(t,[o.prototype]),D("MutationObserver"),D("WebKitMutationObserver"),D("IntersectionObserver"),D("FileReader")}),Zone.__load_patch("on_property",function(t,e,r){lt(0,t),Object.defineProperty=function(t,n,e){if(B(t,n))throw new TypeError("Cannot assign to read only property '"+n+"' of "+t);var r=e.configurable;return"prototype"!==n&&(e=Q(t,n,e)),$(t,n,e,r)},Object.defineProperties=function(t,n){return Object.keys(n).forEach(function(e){Object.defineProperty(t,e,n[e])}),t},Object.create=function(t,n){return"object"!=typeof n||Object.isFrozen(n)||Object.keys(n).forEach(function(e){n[e]=Q(t,e,n[e])}),Y(t,n)},Object.getOwnPropertyDescriptor=function(t,n){var e=W(t,n);return B(t,n)&&(e.configurable=!1),e},function(e){if((T||F)&&"registerElement"in t.document){var r=document.registerElement,o=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(t,e){return e&&e.prototype&&o.forEach(function(t){var r,o,i,a,u="Document.registerElement::"+t,c=e.prototype;if(c.hasOwnProperty(t)){var s=n(c,t);s&&s.value?(s.value=p(s.value,u),a=(i=s).configurable,$(r=e.prototype,o=t,i=Q(r,o,i),a)):c[t]=p(c[t],u)}else c[t]&&(c[t]=p(c[t],u))}),r.call(document,t,e)},U(document.registerElement,r)}}()}),Zone.__load_patch("canvas",function(t){var n=t.HTMLCanvasElement;void 0!==n&&n.prototype&&n.prototype.toBlob&&function(t,e,r){var o=null;function i(t){var n=t.data;return n.args[n.cbIdx]=function(){t.invoke.apply(this,arguments)},o.apply(n.target,n.args),t}o=K(n.prototype,"toBlob",function(t){return function(n,e){var r=function(t,n){return{name:"HTMLCanvasElement.toBlob",target:t,cbIdx:0,args:n}}(n,e);return r.cbIdx>=0&&"function"==typeof e[r.cbIdx]?v(r.name,e[r.cbIdx],r,i,null):t.apply(n,e)}})}()}),Zone.__load_patch("XHR",function(t,n){!function(n){var u=XMLHttpRequest.prototype,f=u[c],l=u[s];if(!f){var h=t.XMLHttpRequestEventTarget;if(h){var p=h.prototype;f=p[c],l=p[s]}}var g="readystatechange",d="scheduled";function y(t){XMLHttpRequest[i]=!1;var n=t.data,r=n.target,a=r[o];f||(f=r[c],l=r[s]),a&&l.call(r,g,a);var u=r[o]=function(){r.readyState===r.DONE&&!n.aborted&&XMLHttpRequest[i]&&t.state===d&&t.invoke()};return f.call(r,g,u),r[e]||(r[e]=t),_.apply(r,n.args),XMLHttpRequest[i]=!0,t}function m(){}function b(t){var n=t.data;return n.aborted=!0,S.apply(n.target,n.args)}var k=K(u,"open",function(){return function(t,n){return t[r]=0==n[2],t[a]=n[1],k.apply(t,n)}}),_=K(u,"send",function(){return function(t,n){return t[r]?_.apply(t,n):v("XMLHttpRequest.send",m,{target:t,url:t[a],isPeriodic:!1,delay:null,args:n,aborted:!1},y,b)}}),S=K(u,"abort",function(){return function(t){var n=t[e];if(n&&"string"==typeof n.type){if(null==n.cancelFn||n.data&&n.data.aborted)return;n.zone.cancelTask(n)}}})}();var e=g("xhrTask"),r=g("xhrSync"),o=g("xhrListener"),i=g("xhrScheduled"),a=g("xhrURL")}),Zone.__load_patch("geolocation",function(t){t.navigator&&t.navigator.geolocation&&function(t,e){for(var r=t.constructor.name,o=function(o){var i=e[o],a=t[i];if(a){if(!S(n(t,i)))return"continue";t[i]=function(t){var n=function(){return t.apply(this,_(arguments,r+"."+i))};return U(n,t),n}(a)}},i=0;i<e.length;i++)o(i)}(t.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(t,n){function e(n){return function(e){q(t,n).forEach(function(r){var o=t.PromiseRejectionEvent;if(o){var i=new o(n,{promise:e.promise,reason:e.rejection});r.invoke(i)}})}}t.PromiseRejectionEvent&&(n[g("unhandledPromiseRejectionHandler")]=e("unhandledrejection"),n[g("rejectionHandledHandler")]=e("rejectionhandled"))})}()}).call(this,e("yLpj"))},"0l/t":function(t,n,e){"use strict";var r=e("XKFU"),o=e("CkkT")(2);r(r.P+r.F*!e("LyE8")([].filter,!0),"Array",{filter:function(t){return o(this,t,arguments[1])}})},"0mN4":function(t,n,e){"use strict";e("OGtf")("fixed",function(t){return function(){return t(this,"tt","","")}})},"0sh+":function(t,n,e){var r=e("quPj"),o=e("vhPU");t.exports=function(t,n,e){if(r(n))throw TypeError("String#"+e+" doesn't accept regex!");return String(o(t))}},"11IZ":function(t,n,e){var r=e("dyZX").parseFloat,o=e("qncB").trim;t.exports=1/r(e("/e88")+"-0")!=-1/0?function(t){var n=o(String(t),3),e=r(n);return 0===e&&"-"==n.charAt(0)?-0:e}:r},"1MBn":function(t,n,e){var r=e("DVgA"),o=e("JiEa"),i=e("UqcF");t.exports=function(t){var n=r(t),e=o.f;if(e)for(var a,u=e(t),c=i.f,s=0;u.length>s;)c.call(t,a=u[s++])&&n.push(a);return n}},"1TsA":function(t,n){t.exports=function(t,n){return{value:n,done:!!t}}},"1sa7":function(t,n){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},"25dN":function(t,n,e){var r=e("XKFU");r(r.S,"Object",{is:e("g6HL")})},"2OiF":function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},"2Spj":function(t,n,e){var r=e("XKFU");r(r.P,"Function",{bind:e("8MEG")})},"2atp":function(t,n,e){var r=e("XKFU"),o=Math.atanh;r(r.S+r.F*!(o&&1/o(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},"3Lyj":function(t,n,e){var r=e("KroJ");t.exports=function(t,n,e){for(var o in n)r(t,o,n[o],e);return t}},"45Tv":function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=e("OP3Y"),a=r.has,u=r.get,c=r.key,s=function(t,n,e){if(a(t,n,e))return u(t,n,e);var r=i(n);return null!==r?s(t,r,e):void 0};r.exp({getMetadata:function(t,n){return s(t,o(n),arguments.length<3?void 0:c(arguments[2]))}})},"49D4":function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=r.key,a=r.set;r.exp({defineMetadata:function(t,n,e,r){a(t,n,o(e),i(r))}})},"4A4+":function(t,n,e){e("2Spj"),e("f3/d"),e("IXt9"),t.exports=e("g3g5").Function},"4LiD":function(t,n,e){"use strict";var r=e("dyZX"),o=e("XKFU"),i=e("KroJ"),a=e("3Lyj"),u=e("Z6vF"),c=e("SlkY"),s=e("9gX7"),f=e("0/R4"),l=e("eeVq"),h=e("XMVh"),p=e("fyDq"),v=e("Xbzi");t.exports=function(t,n,e,g,d,y){var m=r[t],b=m,k=d?"set":"add",_=b&&b.prototype,S={},w=function(t){var n=_[t];i(_,t,"delete"==t?function(t){return!(y&&!f(t))&&n.call(this,0===t?0:t)}:"has"==t?function(t){return!(y&&!f(t))&&n.call(this,0===t?0:t)}:"get"==t?function(t){return y&&!f(t)?void 0:n.call(this,0===t?0:t)}:"add"==t?function(t){return n.call(this,0===t?0:t),this}:function(t,e){return n.call(this,0===t?0:t,e),this})};if("function"==typeof b&&(y||_.forEach&&!l(function(){(new b).entries().next()}))){var x=new b,T=x[k](y?{}:-0,1)!=x,F=l(function(){x.has(1)}),E=h(function(t){new b(t)}),O=!y&&l(function(){for(var t=new b,n=5;n--;)t[k](n,n);return!t.has(-0)});E||((b=n(function(n,e){s(n,b,t);var r=v(new m,n,b);return null!=e&&c(e,d,r[k],r),r})).prototype=_,_.constructor=b),(F||O)&&(w("delete"),w("has"),d&&w("get")),(O||T)&&w(k),y&&_.clear&&delete _.clear}else b=g.getConstructor(n,t,d,k),a(b.prototype,e),u.NEED=!0;return p(b,t),S[t]=b,o(o.G+o.W+o.F*(b!=m),S),y||g.setStrong(b,t,d),b}},"4R4u":function(t,n){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},5:function(t,n,e){t.exports=e("hN/g")},"5Pf0":function(t,n,e){var r=e("S/j/"),o=e("OP3Y");e("Xtr8")("getPrototypeOf",function(){return function(t){return o(r(t))}})},"6AQ9":function(t,n,e){"use strict";var r=e("XKFU"),o=e("8a7r");r(r.S+r.F*e("eeVq")(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,n=arguments.length,e=new("function"==typeof this?this:Array)(n);n>t;)o(e,t,arguments[t++]);return e.length=n,e}})},"6FMO":function(t,n,e){var r=e("0/R4"),o=e("EWmC"),i=e("K0xU")("species");t.exports=function(t){var n;return o(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},"6VaU":function(t,n,e){"use strict";var r=e("XKFU"),o=e("xF/b"),i=e("S/j/"),a=e("ne8i"),u=e("2OiF"),c=e("zRwo");r(r.P,"Array",{flatMap:function(t){var n,e,r=i(this);return u(t),n=a(r.length),e=c(r,0),o(e,r,r,n,0,1,t,arguments[1]),e}}),e("nGyu")("flatMap")},"7Dlh":function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=r.has,a=r.key;r.exp({hasOwnMetadata:function(t,n){return i(t,o(n),arguments.length<3?void 0:a(arguments[2]))}})},"7h0T":function(t,n,e){var r=e("XKFU");r(r.S,"Number",{isNaN:function(t){return t!=t}})},"8+KV":function(t,n,e){"use strict";var r=e("XKFU"),o=e("CkkT")(0),i=e("LyE8")([].forEach,!0);r(r.P+r.F*!i,"Array",{forEach:function(t){return o(this,t,arguments[1])}})},"84bF":function(t,n,e){"use strict";e("OGtf")("small",function(t){return function(){return t(this,"small","","")}})},"8MEG":function(t,n,e){"use strict";var r=e("2OiF"),o=e("0/R4"),i=e("MfQN"),a=[].slice,u={};t.exports=Function.bind||function(t){var n=r(this),e=a.call(arguments,1),c=function(){var r=e.concat(a.call(arguments));return this instanceof c?function(t,n,e){if(!(n in u)){for(var r=[],o=0;o<n;o++)r[o]="a["+o+"]";u[n]=Function("F,a","return new F("+r.join(",")+")")}return u[n](t,e)}(n,r.length,r):i(n,r,t)};return o(n.prototype)&&(c.prototype=n.prototype),c}},"8a7r":function(t,n,e){"use strict";var r=e("hswa"),o=e("RjD/");t.exports=function(t,n,e){n in t?r.f(t,n,o(0,e)):t[n]=e}},"91GP":function(t,n,e){var r=e("XKFU");r(r.S+r.F,"Object",{assign:e("czNK")})},"99sg":function(t,n,e){e("ioFf"),e("hHhE"),e("HAE/"),e("WLL4"),e("mYba"),e("5Pf0"),e("RW0V"),e("JduL"),e("DW2E"),e("z2o2"),e("mura"),e("Zshi"),e("V/DX"),e("FlsD"),e("91GP"),e("25dN"),e("/SS/"),e("Btvt"),t.exports=e("g3g5").Object},"9AAn":function(t,n,e){"use strict";var r=e("wmvG"),o=e("s5qY");t.exports=e("4LiD")("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var n=r.getEntry(o(this,"Map"),t);return n&&n.v},set:function(t,n){return r.def(o(this,"Map"),0===t?0:t,n)}},r,!0)},"9P93":function(t,n,e){var r=e("XKFU"),o=Math.imul;r(r.S+r.F*e("eeVq")(function(){return-5!=o(4294967295,5)||2!=o.length}),"Math",{imul:function(t,n){var e=+t,r=+n,o=65535&e,i=65535&r;return 0|o*i+((65535&e>>>16)*i+o*(65535&r>>>16)<<16>>>0)}})},"9VmF":function(t,n,e){"use strict";var r=e("XKFU"),o=e("ne8i"),i=e("0sh+"),a="".startsWith;r(r.P+r.F*e("UUeW")("startsWith"),"String",{startsWith:function(t){var n=i(this,t,"startsWith"),e=o(Math.min(arguments.length>1?arguments[1]:void 0,n.length)),r=String(t);return a?a.call(n,r,e):n.slice(e,e+r.length)===r}})},"9gX7":function(t,n){t.exports=function(t,n,e,r){if(!(t instanceof n)||void 0!==r&&r in t)throw TypeError(e+": incorrect invocation!");return t}},A2zW:function(t,n,e){"use strict";var r=e("XKFU"),o=e("RYi7"),i=e("vvmO"),a=e("l0Rn"),u=1..toFixed,c=Math.floor,s=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",l=function(t,n){for(var e=-1,r=n;++e<6;)s[e]=(r+=t*s[e])%1e7,r=c(r/1e7)},h=function(t){for(var n=6,e=0;--n>=0;)s[n]=c((e+=s[n])/t),e=e%t*1e7},p=function(){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==s[t]){var e=String(s[t]);n=""===n?e:n+a.call("0",7-e.length)+e}return n},v=function(t,n,e){return 0===n?e:n%2==1?v(t,n-1,e*t):v(t*t,n/2,e)};r(r.P+r.F*(!!u&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!e("eeVq")(function(){u.call({})})),"Number",{toFixed:function(t){var n,e,r,u,c=i(this,f),s=o(t),g="",d="0";if(s<0||s>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(g="-",c=-c),c>1e-21)if(e=(n=function(t){for(var n=0,e=t;e>=4096;)n+=12,e/=4096;for(;e>=2;)n+=1,e/=2;return n}(c*v(2,69,1))-69)<0?c*v(2,-n,1):c/v(2,n,1),e*=4503599627370496,(n=52-n)>0){for(l(0,e),r=s;r>=7;)l(1e7,0),r-=7;for(l(v(10,r,1),0),r=n-1;r>=23;)h(1<<23),r-=23;h(1<<r),l(1,1),h(2),d=p()}else l(0,e),l(1<<-n,0),d=p()+a.call("0",s);return s>0?g+((u=d.length)<=s?"0."+a.call("0",s-u)+d:d.slice(0,u-s)+"."+d.slice(u-s)):g+d}})},Afnz:function(t,n,e){"use strict";var r=e("LQAc"),o=e("XKFU"),i=e("KroJ"),a=e("Mukb"),u=e("hPIQ"),c=e("QaDb"),s=e("fyDq"),f=e("OP3Y"),l=e("K0xU")("iterator"),h=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,n,e,v,g,d,y){c(e,n,v);var m,b,k,_=function(t){if(!h&&t in T)return T[t];switch(t){case"keys":case"values":return function(){return new e(this,t)}}return function(){return new e(this,t)}},S=n+" Iterator",w="values"==g,x=!1,T=t.prototype,F=T[l]||T["@@iterator"]||g&&T[g],E=F||_(g),O=g?w?_("entries"):E:void 0,P="Array"==n&&T.entries||F;if(P&&(k=f(P.call(new t)))!==Object.prototype&&k.next&&(s(k,S,!0),r||"function"==typeof k[l]||a(k,l,p)),w&&F&&"values"!==F.name&&(x=!0,E=function(){return F.call(this)}),r&&!y||!h&&!x&&T[l]||a(T,l,E),u[n]=E,u[S]=p,g)if(m={values:w?E:_("values"),keys:d?E:_("keys"),entries:O},y)for(b in m)b in T||i(T,b,m[b]);else o(o.P+o.F*(h||x),n,m);return m}},AphP:function(t,n,e){"use strict";var r=e("XKFU"),o=e("S/j/"),i=e("apmT");r(r.P+r.F*e("eeVq")(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var n=o(this),e=i(n);return"number"!=typeof e||isFinite(e)?n.toISOString():null}})},AvRE:function(t,n,e){var r=e("RYi7"),o=e("vhPU");t.exports=function(t){return function(n,e){var i,a,u=String(o(n)),c=r(e),s=u.length;return c<0||c>=s?t?"":void 0:(i=u.charCodeAt(c))<55296||i>56319||c+1===s||(a=u.charCodeAt(c+1))<56320||a>57343?t?u.charAt(c):i:t?u.slice(c,c+2):a-56320+(i-55296<<10)+65536}}},BC7C:function(t,n,e){var r=e("XKFU");r(r.S,"Math",{fround:e("kcoS")})},"BJ/l":function(t,n,e){var r=e("XKFU");r(r.S,"Math",{log1p:e("1sa7")})},BP8U:function(t,n,e){var r=e("XKFU"),o=e("PKUr");r(r.S+r.F*(Number.parseInt!=o),"Number",{parseInt:o})},BqfV:function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=r.get,a=r.key;r.exp({getOwnMetadata:function(t,n){return i(t,o(n),arguments.length<3?void 0:a(arguments[2]))}})},Btvt:function(t,n,e){"use strict";var r=e("I8a+"),o={};o[e("K0xU")("toStringTag")]="z",o+""!="[object z]"&&e("KroJ")(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},"C/va":function(t,n,e){"use strict";var r=e("y3w9");t.exports=function(){var t=r(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},CkkT:function(t,n,e){var r=e("m0Pp"),o=e("Ymqv"),i=e("S/j/"),a=e("ne8i"),u=e("zRwo");t.exports=function(t,n){var e=1==t,c=2==t,s=3==t,f=4==t,l=6==t,h=5==t||l,p=n||u;return function(n,u,v){for(var g,d,y=i(n),m=o(y),b=r(u,v,3),k=a(m.length),_=0,S=e?p(n,k):c?p(n,0):void 0;k>_;_++)if((h||_ in m)&&(d=b(g=m[_],_,y),t))if(e)S[_]=d;else if(d)switch(t){case 3:return!0;case 5:return g;case 6:return _;case 2:S.push(g)}else if(f)return!1;return l?-1:s||f?f:S}}},CuTL:function(t,n,e){e("fyVe"),e("U2t9"),e("2atp"),e("+auO"),e("MtdB"),e("Jcmo"),e("nzyx"),e("BC7C"),e("x8ZO"),e("9P93"),e("eHKK"),e("BJ/l"),e("pp/T"),e("CyHz"),e("bBoP"),e("x8Yj"),e("hLT2"),t.exports=e("g3g5").Math},CyHz:function(t,n,e){var r=e("XKFU");r(r.S,"Math",{sign:e("lvtm")})},DNiP:function(t,n,e){"use strict";var r=e("XKFU"),o=e("eyMr");r(r.P+r.F*!e("LyE8")([].reduce,!0),"Array",{reduce:function(t){return o(this,t,arguments.length,arguments[1],!1)}})},DVgA:function(t,n,e){var r=e("zhAb"),o=e("4R4u");t.exports=Object.keys||function(t){return r(t,o)}},DW2E:function(t,n,e){var r=e("0/R4"),o=e("Z6vF").onFreeze;e("Xtr8")("freeze",function(t){return function(n){return t&&r(n)?t(o(n)):n}})},EK0E:function(t,n,e){"use strict";var r,o=e("CkkT")(0),i=e("KroJ"),a=e("Z6vF"),u=e("czNK"),c=e("ZD67"),s=e("0/R4"),f=e("eeVq"),l=e("s5qY"),h=a.getWeak,p=Object.isExtensible,v=c.ufstore,g={},d=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(t){if(s(t)){var n=h(t);return!0===n?v(l(this,"WeakMap")).get(t):n?n[this._i]:void 0}},set:function(t,n){return c.def(l(this,"WeakMap"),t,n)}},m=t.exports=e("4LiD")("WeakMap",d,y,c,!0,!0);f(function(){return 7!=(new m).set((Object.freeze||Object)(g),7).get(g)})&&(u((r=c.getConstructor(d,"WeakMap")).prototype,y),a.NEED=!0,o(["delete","has","get","set"],function(t){var n=m.prototype,e=n[t];i(n,t,function(n,o){if(s(n)&&!p(n)){this._f||(this._f=new r);var i=this._f[t](n,o);return"set"==t?this:i}return e.call(this,n,o)})}))},EWmC:function(t,n,e){var r=e("LZWt");t.exports=Array.isArray||function(t){return"Array"==r(t)}},EemH:function(t,n,e){var r=e("UqcF"),o=e("RjD/"),i=e("aCFj"),a=e("apmT"),u=e("aagx"),c=e("xpql"),s=Object.getOwnPropertyDescriptor;n.f=e("nh4g")?s:function(t,n){if(t=i(t),n=a(n,!0),c)try{return s(t,n)}catch(e){}if(u(t,n))return o(!r.f.call(t,n),t[n])}},FEjr:function(t,n,e){"use strict";e("OGtf")("strike",function(t){return function(){return t(this,"strike","","")}})},FJW5:function(t,n,e){var r=e("hswa"),o=e("y3w9"),i=e("DVgA");t.exports=e("nh4g")?Object.defineProperties:function(t,n){o(t);for(var e,a=i(n),u=a.length,c=0;u>c;)r.f(t,e=a[c++],n[e]);return t}},FLlr:function(t,n,e){var r=e("XKFU");r(r.P,"String",{repeat:e("l0Rn")})},FZcq:function(t,n,e){e("49D4"),e("zq+C"),e("45Tv"),e("uAtd"),e("BqfV"),e("fN/3"),e("iW+S"),e("7Dlh"),e("Opxb"),t.exports=e("g3g5").Reflect},FlsD:function(t,n,e){var r=e("0/R4");e("Xtr8")("isExtensible",function(t){return function(n){return!!r(n)&&(!t||t(n))}})},GNAe:function(t,n,e){var r=e("XKFU"),o=e("PKUr");r(r.G+r.F*(parseInt!=o),{parseInt:o})},H6hf:function(t,n,e){var r=e("y3w9");t.exports=function(t,n,e,o){try{return o?n(r(e)[0],e[1]):n(e)}catch(a){var i=t.return;throw void 0!==i&&r(i.call(t)),a}}},"HAE/":function(t,n,e){var r=e("XKFU");r(r.S+r.F*!e("nh4g"),"Object",{defineProperty:e("hswa").f})},HEwt:function(t,n,e){"use strict";var r=e("m0Pp"),o=e("XKFU"),i=e("S/j/"),a=e("H6hf"),u=e("M6Qj"),c=e("ne8i"),s=e("8a7r"),f=e("J+6e");o(o.S+o.F*!e("XMVh")(function(t){Array.from(t)}),"Array",{from:function(t){var n,e,o,l,h=i(t),p="function"==typeof this?this:Array,v=arguments.length,g=v>1?arguments[1]:void 0,d=void 0!==g,y=0,m=f(h);if(d&&(g=r(g,v>2?arguments[2]:void 0,2)),null==m||p==Array&&u(m))for(e=new p(n=c(h.length));n>y;y++)s(e,y,d?g(h[y],y):h[y]);else for(l=m.call(h),e=new p;!(o=l.next()).done;y++)s(e,y,d?a(l,g,[o.value,y],!0):o.value);return e.length=y,e}})},I78e:function(t,n,e){"use strict";var r=e("XKFU"),o=e("+rLv"),i=e("LZWt"),a=e("d/Gc"),u=e("ne8i"),c=[].slice;r(r.P+r.F*e("eeVq")(function(){o&&c.call(o)}),"Array",{slice:function(t,n){var e=u(this.length),r=i(this);if(n=void 0===n?e:n,"Array"==r)return c.call(this,t,n);for(var o=a(t,e),s=a(n,e),f=u(s-o),l=new Array(f),h=0;h<f;h++)l[h]="String"==r?this.charAt(o+h):this[o+h];return l}})},"I8a+":function(t,n,e){var r=e("LZWt"),o=e("K0xU")("toStringTag"),i="Arguments"==r(function(){return arguments}());t.exports=function(t){var n,e,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=function(t,n){try{return t[n]}catch(e){}}(n=Object(t),o))?e:i?r(n):"Object"==(a=r(n))&&"function"==typeof n.callee?"Arguments":a}},INYr:function(t,n,e){"use strict";var r=e("XKFU"),o=e("CkkT")(6),i="findIndex",a=!0;i in[]&&Array(1)[i](function(){a=!1}),r(r.P+r.F*a,"Array",{findIndex:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),e("nGyu")(i)},"IU+Z":function(t,n,e){"use strict";var r=e("Mukb"),o=e("KroJ"),i=e("eeVq"),a=e("vhPU"),u=e("K0xU");t.exports=function(t,n,e){var c=u(t),s=e(a,c,""[t]),f=s[0],l=s[1];i(function(){var n={};return n[c]=function(){return 7},7!=""[t](n)})&&(o(String.prototype,t,f),r(RegExp.prototype,c,2==n?function(t,n){return l.call(t,this,n)}:function(t){return l.call(t,this)}))}},IXt9:function(t,n,e){"use strict";var r=e("0/R4"),o=e("OP3Y"),i=e("K0xU")("hasInstance"),a=Function.prototype;i in a||e("hswa").f(a,i,{value:function(t){if("function"!=typeof this||!r(t))return!1;if(!r(this.prototype))return t instanceof this;for(;t=o(t);)if(this.prototype===t)return!0;return!1}})},Iw71:function(t,n,e){var r=e("0/R4"),o=e("dyZX").document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},"J+6e":function(t,n,e){var r=e("I8a+"),o=e("K0xU")("iterator"),i=e("hPIQ");t.exports=e("g3g5").getIteratorMethod=function(t){if(null!=t)return t[o]||t["@@iterator"]||i[r(t)]}},JCqj:function(t,n,e){"use strict";e("OGtf")("sup",function(t){return function(){return t(this,"sup","","")}})},Jcmo:function(t,n,e){var r=e("XKFU"),o=Math.exp;r(r.S,"Math",{cosh:function(t){return(o(t=+t)+o(-t))/2}})},JduL:function(t,n,e){e("Xtr8")("getOwnPropertyNames",function(){return e("e7yV").f})},JiEa:function(t,n){n.f=Object.getOwnPropertySymbols},K0xU:function(t,n,e){var r=e("VTer")("wks"),o=e("ylqs"),i=e("dyZX").Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},KKXr:function(t,n,e){e("IU+Z")("split",2,function(t,n,r){"use strict";var o=e("quPj"),i=r,a=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var u=void 0===/()??/.exec("")[1];r=function(t,n){var e=String(this);if(void 0===t&&0===n)return[];if(!o(t))return i.call(e,t,n);var r,c,s,f,l,h=[],p=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),v=0,g=void 0===n?4294967295:n>>>0,d=new RegExp(t.source,p+"g");for(u||(r=new RegExp("^"+d.source+"$(?!\\s)",p));(c=d.exec(e))&&!((s=c.index+c[0].length)>v&&(h.push(e.slice(v,c.index)),!u&&c.length>1&&c[0].replace(r,function(){for(l=1;l<arguments.length-2;l++)void 0===arguments[l]&&(c[l]=void 0)}),c.length>1&&c.index<e.length&&a.apply(h,c.slice(1)),f=c[0].length,v=s,h.length>=g));)d.lastIndex===c.index&&d.lastIndex++;return v===e.length?!f&&d.test("")||h.push(""):h.push(e.slice(v)),h.length>g?h.slice(0,g):h}}else"0".split(void 0,0).length&&(r=function(t,n){return void 0===t&&0===n?[]:i.call(this,t,n)});return[function(e,o){var i=t(this),a=null==e?void 0:e[n];return void 0!==a?a.call(e,i,o):r.call(String(i),e,o)},r]})},KroJ:function(t,n,e){var r=e("dyZX"),o=e("Mukb"),i=e("aagx"),a=e("ylqs")("src"),u=Function.toString,c=(""+u).split("toString");e("g3g5").inspectSource=function(t){return u.call(t)},(t.exports=function(t,n,e,u){var s="function"==typeof e;s&&(i(e,"name")||o(e,"name",n)),t[n]!==e&&(s&&(i(e,a)||o(e,a,t[n]?""+t[n]:c.join(String(n)))),t===r?t[n]=e:u?t[n]?t[n]=e:o(t,n,e):(delete t[n],o(t,n,e)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||u.call(this)})},Kuth:function(t,n,e){var r=e("y3w9"),o=e("FJW5"),i=e("4R4u"),a=e("YTvA")("IE_PROTO"),u=function(){},c=function(){var t,n=e("Iw71")("iframe"),r=i.length;for(n.style.display="none",e("+rLv").appendChild(n),n.src="javascript:",(t=n.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),c=t.F;r--;)delete c.prototype[i[r]];return c()};t.exports=Object.create||function(t,n){var e;return null!==t?(u.prototype=r(t),e=new u,u.prototype=null,e[a]=t):e=c(),void 0===n?e:o(e,n)}},L9s1:function(t,n,e){"use strict";var r=e("XKFU"),o=e("0sh+");r(r.P+r.F*e("UUeW")("includes"),"String",{includes:function(t){return!!~o(this,t,"includes").indexOf(t,arguments.length>1?arguments[1]:void 0)}})},LK8F:function(t,n,e){var r=e("XKFU");r(r.S,"Array",{isArray:e("EWmC")})},LQAc:function(t,n){t.exports=!1},LVwc:function(t,n){var e=Math.expm1;t.exports=!e||e(10)>22025.465794806718||e(10)<22025.465794806718||-2e-17!=e(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:e},LZWt:function(t,n){var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},Ljet:function(t,n,e){var r=e("XKFU");r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},Lmuc:function(t,n,e){e("xfY5"),e("A2zW"),e("VKir"),e("Ljet"),e("/KAi"),e("fN96"),e("7h0T"),e("sbF8"),e("h/M4"),e("knhD"),e("XfKG"),e("BP8U"),t.exports=e("g3g5").Number},LyE8:function(t,n,e){"use strict";var r=e("eeVq");t.exports=function(t,n){return!!t&&r(function(){n?t.call(null,function(){},1):t.call(null)})}},M6Qj:function(t,n,e){var r=e("hPIQ"),o=e("K0xU")("iterator"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},MfQN:function(t,n){t.exports=function(t,n,e){var r=void 0===e;switch(n.length){case 0:return r?t():t.call(e);case 1:return r?t(n[0]):t.call(e,n[0]);case 2:return r?t(n[0],n[1]):t.call(e,n[0],n[1]);case 3:return r?t(n[0],n[1],n[2]):t.call(e,n[0],n[1],n[2]);case 4:return r?t(n[0],n[1],n[2],n[3]):t.call(e,n[0],n[1],n[2],n[3])}return t.apply(e,n)}},MtdB:function(t,n,e){var r=e("XKFU");r(r.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},Mukb:function(t,n,e){var r=e("hswa"),o=e("RjD/");t.exports=e("nh4g")?function(t,n,e){return r.f(t,n,o(1,e))}:function(t,n,e){return t[n]=e,t}},N6cJ:function(t,n,e){var r=e("9AAn"),o=e("XKFU"),i=e("VTer")("metadata"),a=i.store||(i.store=new(e("EK0E"))),u=function(t,n,e){var o=a.get(t);if(!o){if(!e)return;a.set(t,o=new r)}var i=o.get(n);if(!i){if(!e)return;o.set(n,i=new r)}return i};t.exports={store:a,map:u,has:function(t,n,e){var r=u(n,e,!1);return void 0!==r&&r.has(t)},get:function(t,n,e){var r=u(n,e,!1);return void 0===r?void 0:r.get(t)},set:function(t,n,e,r){u(e,r,!0).set(t,n)},keys:function(t,n){var e=u(t,n,!1),r=[];return e&&e.forEach(function(t,n){r.push(n)}),r},key:function(t){return void 0===t||"symbol"==typeof t?t:String(t)},exp:function(t){o(o.S,"Reflect",t)}}},N8g3:function(t,n,e){n.f=e("K0xU")},Nr18:function(t,n,e){"use strict";var r=e("S/j/"),o=e("d/Gc"),i=e("ne8i");t.exports=function(t){for(var n=r(this),e=i(n.length),a=arguments.length,u=o(a>1?arguments[1]:void 0,e),c=a>2?arguments[2]:void 0,s=void 0===c?e:o(c,e);s>u;)n[u++]=t;return n}},Nz9U:function(t,n,e){"use strict";var r=e("XKFU"),o=e("aCFj"),i=[].join;r(r.P+r.F*(e("Ymqv")!=Object||!e("LyE8")(i)),"Array",{join:function(t){return i.call(o(this),void 0===t?",":t)}})},OEbY:function(t,n,e){e("nh4g")&&"g"!=/./g.flags&&e("hswa").f(RegExp.prototype,"flags",{configurable:!0,get:e("C/va")})},OG14:function(t,n,e){e("IU+Z")("search",1,function(t,n,e){return[function(e){"use strict";var r=t(this),o=null==e?void 0:e[n];return void 0!==o?o.call(e,r):new RegExp(e)[n](String(r))},e]})},OGtf:function(t,n,e){var r=e("XKFU"),o=e("eeVq"),i=e("vhPU"),a=/"/g,u=function(t,n,e,r){var o=String(i(t)),u="<"+n;return""!==e&&(u+=" "+e+'="'+String(r).replace(a,"&quot;")+'"'),u+">"+o+"</"+n+">"};t.exports=function(t,n){var e={};e[t]=n(u),r(r.P+r.F*o(function(){var n=""[t]('"');return n!==n.toLowerCase()||n.split('"').length>3}),"String",e)}},OP3Y:function(t,n,e){var r=e("aagx"),o=e("S/j/"),i=e("YTvA")("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},OnI7:function(t,n,e){var r=e("dyZX"),o=e("g3g5"),i=e("LQAc"),a=e("N8g3"),u=e("hswa").f;t.exports=function(t){var n=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});"_"==t.charAt(0)||t in n||u(n,t,{value:a.f(t)})}},Opxb:function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=e("2OiF"),a=r.key,u=r.set;r.exp({metadata:function(t,n){return function(e,r){u(t,n,(void 0!==r?o:i)(e),a(r))}}})},Oyvg:function(t,n,e){var r=e("dyZX"),o=e("Xbzi"),i=e("hswa").f,a=e("kJMx").f,u=e("quPj"),c=e("C/va"),s=r.RegExp,f=s,l=s.prototype,h=/a/g,p=/a/g,v=new s(h)!==h;if(e("nh4g")&&(!v||e("eeVq")(function(){return p[e("K0xU")("match")]=!1,s(h)!=h||s(p)==p||"/a/i"!=s(h,"i")}))){s=function(t,n){var e=this instanceof s,r=u(t),i=void 0===n;return!e&&r&&t.constructor===s&&i?t:o(v?new f(r&&!i?t.source:t,n):f((r=t instanceof s)?t.source:t,r&&i?c.call(t):n),e?this:l,s)};for(var g=function(t){t in s||i(s,t,{configurable:!0,get:function(){return f[t]},set:function(n){f[t]=n}})},d=a(f),y=0;d.length>y;)g(d[y++]);l.constructor=s,s.prototype=l,e("KroJ")(r,"RegExp",s)}e("elZq")("RegExp")},PKUr:function(t,n,e){var r=e("dyZX").parseInt,o=e("qncB").trim,i=e("/e88"),a=/^[-+]?0[xX]/;t.exports=8!==r(i+"08")||22!==r(i+"0x16")?function(t,n){var e=o(String(t),3);return r(e,n>>>0||(a.test(e)?16:10))}:r},Q3ne:function(t,n,e){var r=e("SlkY");t.exports=function(t,n){var e=[];return r(t,!1,e.push,e,n),e}},QaDb:function(t,n,e){"use strict";var r=e("Kuth"),o=e("RjD/"),i=e("fyDq"),a={};e("Mukb")(a,e("K0xU")("iterator"),function(){return this}),t.exports=function(t,n,e){t.prototype=r(a,{next:o(1,e)}),i(t,n+" Iterator")}},RQRG:function(t,n,e){"use strict";var r=e("XKFU"),o=e("S/j/"),i=e("2OiF"),a=e("hswa");e("nh4g")&&r(r.P+e("xbSm"),"Object",{__defineGetter__:function(t,n){a.f(o(this),t,{get:i(n),enumerable:!0,configurable:!0})}})},RW0V:function(t,n,e){var r=e("S/j/"),o=e("DVgA");e("Xtr8")("keys",function(){return function(t){return o(r(t))}})},RYi7:function(t,n){var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},"RjD/":function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},"S/j/":function(t,n,e){var r=e("vhPU");t.exports=function(t){return Object(r(t))}},SMB2:function(t,n,e){"use strict";e("OGtf")("bold",function(t){return function(){return t(this,"b","","")}})},SPin:function(t,n,e){"use strict";var r=e("XKFU"),o=e("eyMr");r(r.P+r.F*!e("LyE8")([].reduceRight,!0),"Array",{reduceRight:function(t){return o(this,t,arguments.length,arguments[1],!0)}})},SRfc:function(t,n,e){e("IU+Z")("match",1,function(t,n,e){return[function(e){"use strict";var r=t(this),o=null==e?void 0:e[n];return void 0!==o?o.call(e,r):new RegExp(e)[n](String(r))},e]})},SlkY:function(t,n,e){var r=e("m0Pp"),o=e("H6hf"),i=e("M6Qj"),a=e("y3w9"),u=e("ne8i"),c=e("J+6e"),s={},f={};(n=t.exports=function(t,n,e,l,h){var p,v,g,d,y=h?function(){return t}:c(t),m=r(e,l,n?2:1),b=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(i(y)){for(p=u(t.length);p>b;b++)if((d=n?m(a(v=t[b])[0],v[1]):m(t[b]))===s||d===f)return d}else for(g=y.call(t);!(v=g.next()).done;)if((d=o(g,m,v.value,n))===s||d===f)return d}).BREAK=s,n.RETURN=f},T39b:function(t,n,e){"use strict";var r=e("wmvG"),o=e("s5qY");t.exports=e("4LiD")("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(o(this,"Set"),t=0===t?0:t,t)}},r)},Tze0:function(t,n,e){"use strict";e("qncB")("trim",function(t){return function(){return t(this,3)}})},U2t9:function(t,n,e){var r=e("XKFU"),o=Math.asinh;r(r.S+r.F*!(o&&1/o(0)>0),"Math",{asinh:function t(n){return isFinite(n=+n)&&0!=n?n<0?-t(-n):Math.log(n+Math.sqrt(n*n+1)):n}})},UExd:function(t,n,e){var r=e("DVgA"),o=e("aCFj"),i=e("UqcF").f;t.exports=function(t){return function(n){for(var e,a=o(n),u=r(a),c=u.length,s=0,f=[];c>s;)i.call(a,e=u[s++])&&f.push(t?[e,a[e]]:a[e]);return f}}},UUeW:function(t,n,e){var r=e("K0xU")("match");t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(e){try{return n[r]=!1,!"/./"[t](n)}catch(o){}}return!0}},UqcF:function(t,n){n.f={}.propertyIsEnumerable},"V+eJ":function(t,n,e){"use strict";var r=e("XKFU"),o=e("w2a5")(!1),i=[].indexOf,a=!!i&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(a||!e("LyE8")(i)),"Array",{indexOf:function(t){return a?i.apply(this,arguments)||0:o(this,t,arguments[1])}})},"V/DX":function(t,n,e){var r=e("0/R4");e("Xtr8")("isSealed",function(t){return function(n){return!r(n)||!!t&&t(n)}})},"V5/Y":function(t,n,e){e("VpUO"),e("eI33"),e("Tze0"),e("XfO3"),e("oDIu"),e("rvZc"),e("L9s1"),e("FLlr"),e("9VmF"),e("hEkN"),e("nIY7"),e("+oPb"),e("SMB2"),e("0mN4"),e("bDcW"),e("nsiH"),e("0LDn"),e("tUrg"),e("84bF"),e("FEjr"),e("Zz4T"),e("JCqj"),e("SRfc"),e("pIFo"),e("OG14"),e("KKXr"),t.exports=e("g3g5").String},VKir:function(t,n,e){"use strict";var r=e("XKFU"),o=e("eeVq"),i=e("vvmO"),a=1..toPrecision;r(r.P+r.F*(o(function(){return"1"!==a.call(1,void 0)})||!o(function(){a.call({})})),"Number",{toPrecision:function(t){var n=i(this,"Number#toPrecision: incorrect invocation!");return void 0===t?a.call(n):a.call(n,t)}})},VTer:function(t,n,e){var r=e("g3g5"),o=e("dyZX"),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(t.exports=function(t,n){return i[t]||(i[t]=void 0!==n?n:{})})("versions",[]).push({version:r.version,mode:e("LQAc")?"pure":"global",copyright:"\xa9 2018 Denis Pushkarev (zloirock.ru)"})},VXxg:function(t,n,e){e("Btvt"),e("XfO3"),e("rGqo"),e("T39b"),t.exports=e("g3g5").Set},Vd3H:function(t,n,e){"use strict";var r=e("XKFU"),o=e("2OiF"),i=e("S/j/"),a=e("eeVq"),u=[].sort,c=[1,2,3];r(r.P+r.F*(a(function(){c.sort(void 0)})||!a(function(){c.sort(null)})||!e("LyE8")(u)),"Array",{sort:function(t){return void 0===t?u.call(i(this)):u.call(i(this),o(t))}})},VpUO:function(t,n,e){var r=e("XKFU"),o=e("d/Gc"),i=String.fromCharCode,a=String.fromCodePoint;r(r.S+r.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(t){for(var n,e=[],r=arguments.length,a=0;r>a;){if(n=+arguments[a++],o(n,1114111)!==n)throw RangeError(n+" is not a valid code point");e.push(n<65536?i(n):i(55296+((n-=65536)>>10),n%1024+56320))}return e.join("")}})},WHqE:function(t,n,e){e("Z2Ku"),e("6VaU"),e("cfFb"),t.exports=e("g3g5").Array},WLL4:function(t,n,e){var r=e("XKFU");r(r.S+r.F*!e("nh4g"),"Object",{defineProperties:e("FJW5")})},XKFU:function(t,n,e){var r=e("dyZX"),o=e("g3g5"),i=e("Mukb"),a=e("KroJ"),u=e("m0Pp"),c=function(t,n,e){var s,f,l,h,p=t&c.F,v=t&c.G,g=t&c.P,d=t&c.B,y=v?r:t&c.S?r[n]||(r[n]={}):(r[n]||{}).prototype,m=v?o:o[n]||(o[n]={}),b=m.prototype||(m.prototype={});for(s in v&&(e=n),e)l=((f=!p&&y&&void 0!==y[s])?y:e)[s],h=d&&f?u(l,r):g&&"function"==typeof l?u(Function.call,l):l,y&&a(y,s,l,t&c.U),m[s]!=l&&i(m,s,h),g&&b[s]!=l&&(b[s]=l)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,t.exports=c},XMVh:function(t,n,e){var r=e("K0xU")("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(a){}t.exports=function(t,n){if(!n&&!o)return!1;var e=!1;try{var i=[7],u=i[r]();u.next=function(){return{done:e=!0}},i[r]=function(){return u},t(i)}catch(a){}return e}},Xbzi:function(t,n,e){var r=e("0/R4"),o=e("i5dc").set;t.exports=function(t,n,e){var i,a=n.constructor;return a!==e&&"function"==typeof a&&(i=a.prototype)!==e.prototype&&r(i)&&o&&o(t,i),t}},XfKG:function(t,n,e){var r=e("XKFU"),o=e("11IZ");r(r.S+r.F*(Number.parseFloat!=o),"Number",{parseFloat:o})},XfO3:function(t,n,e){"use strict";var r=e("AvRE")(!0);e("Afnz")(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,n=this._t,e=this._i;return e>=n.length?{value:void 0,done:!0}:(t=r(n,e),this._i+=t.length,{value:t,done:!1})})},Xtr8:function(t,n,e){var r=e("XKFU"),o=e("g3g5"),i=e("eeVq");t.exports=function(t,n){var e=(o.Object||{})[t]||Object[t],a={};a[t]=n(e),r(r.S+r.F*i(function(){e(1)}),"Object",a)}},YJVH:function(t,n,e){"use strict";var r=e("XKFU"),o=e("CkkT")(4);r(r.P+r.F*!e("LyE8")([].every,!0),"Array",{every:function(t){return o(this,t,arguments[1])}})},YTvA:function(t,n,e){var r=e("VTer")("keys"),o=e("ylqs");t.exports=function(t){return r[t]||(r[t]=o(t))}},Ymqv:function(t,n,e){var r=e("LZWt");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},Z2Ku:function(t,n,e){"use strict";var r=e("XKFU"),o=e("w2a5")(!0);r(r.P,"Array",{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),e("nGyu")("includes")},Z6vF:function(t,n,e){var r=e("ylqs")("meta"),o=e("0/R4"),i=e("aagx"),a=e("hswa").f,u=0,c=Object.isExtensible||function(){return!0},s=!e("eeVq")(function(){return c(Object.preventExtensions({}))}),f=function(t){a(t,r,{value:{i:"O"+ ++u,w:{}}})},l=t.exports={KEY:r,NEED:!1,fastKey:function(t,n){if(!o(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,r)){if(!c(t))return"F";if(!n)return"E";f(t)}return t[r].i},getWeak:function(t,n){if(!i(t,r)){if(!c(t))return!0;if(!n)return!1;f(t)}return t[r].w},onFreeze:function(t){return s&&l.NEED&&c(t)&&!i(t,r)&&f(t),t}}},ZD67:function(t,n,e){"use strict";var r=e("3Lyj"),o=e("Z6vF").getWeak,i=e("y3w9"),a=e("0/R4"),u=e("9gX7"),c=e("SlkY"),s=e("CkkT"),f=e("aagx"),l=e("s5qY"),h=s(5),p=s(6),v=0,g=function(t){return t._l||(t._l=new d)},d=function(){this.a=[]},y=function(t,n){return h(t.a,function(t){return t[0]===n})};d.prototype={get:function(t){var n=y(this,t);if(n)return n[1]},has:function(t){return!!y(this,t)},set:function(t,n){var e=y(this,t);e?e[1]=n:this.a.push([t,n])},delete:function(t){var n=p(this.a,function(n){return n[0]===t});return~n&&this.a.splice(n,1),!!~n}},t.exports={getConstructor:function(t,n,e,i){var s=t(function(t,r){u(t,s,n,"_i"),t._t=n,t._i=v++,t._l=void 0,null!=r&&c(r,e,t[i],t)});return r(s.prototype,{delete:function(t){if(!a(t))return!1;var e=o(t);return!0===e?g(l(this,n)).delete(t):e&&f(e,this._i)&&delete e[this._i]},has:function(t){if(!a(t))return!1;var e=o(t);return!0===e?g(l(this,n)).has(t):e&&f(e,this._i)}}),s},def:function(t,n,e){var r=o(i(n),!0);return!0===r?g(t).set(n,e):r[t._i]=e,t},ufstore:g}},"ZNX/":function(t,n,e){"use strict";var r=e("XKFU"),o=e("S/j/"),i=e("apmT"),a=e("OP3Y"),u=e("EemH").f;e("nh4g")&&r(r.P+e("xbSm"),"Object",{__lookupSetter__:function(t){var n,e=o(this),r=i(t,!0);do{if(n=u(e,r))return n.set}while(e=a(e))}})},Zshi:function(t,n,e){var r=e("0/R4");e("Xtr8")("isFrozen",function(t){return function(n){return!r(n)||!!t&&t(n)}})},Zz4T:function(t,n,e){"use strict";e("OGtf")("sub",function(t){return function(){return t(this,"sub","","")}})},a0L2:function(t,n,e){e("jm62"),e("hhXQ"),e("/8Fb"),e("RQRG"),e("/uf1"),e("uaHG"),e("ZNX/"),t.exports=e("g3g5").Object},a1Th:function(t,n,e){"use strict";e("OEbY");var r=e("y3w9"),o=e("C/va"),i=e("nh4g"),a=/./.toString,u=function(t){e("KroJ")(RegExp.prototype,"toString",t,!0)};e("eeVq")(function(){return"/a/b"!=a.call({source:"a",flags:"b"})})?u(function(){var t=r(this);return"/".concat(t.source,"/","flags"in t?t.flags:!i&&t instanceof RegExp?o.call(t):void 0)}):"toString"!=a.name&&u(function(){return a.call(this)})},aCFj:function(t,n,e){var r=e("Ymqv"),o=e("vhPU");t.exports=function(t){return r(o(t))}},aagx:function(t,n){var e={}.hasOwnProperty;t.exports=function(t,n){return e.call(t,n)}},apmT:function(t,n,e){var r=e("0/R4");t.exports=function(t,n){if(!r(t))return t;var e,o;if(n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;if("function"==typeof(e=t.valueOf)&&!r(o=e.call(t)))return o;if(!n&&"function"==typeof(e=t.toString)&&!r(o=e.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},bBoP:function(t,n,e){var r=e("XKFU"),o=e("LVwc"),i=Math.exp;r(r.S+r.F*e("eeVq")(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(o(t)-o(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},bDcW:function(t,n,e){"use strict";e("OGtf")("fontcolor",function(t){return function(n){return t(this,"font","color",n)}})},bHtr:function(t,n,e){var r=e("XKFU");r(r.P,"Array",{fill:e("Nr18")}),e("nGyu")("fill")},bWfx:function(t,n,e){"use strict";var r=e("XKFU"),o=e("CkkT")(1);r(r.P+r.F*!e("LyE8")([].map,!0),"Array",{map:function(t){return o(this,t,arguments[1])}})},cfFb:function(t,n,e){"use strict";var r=e("XKFU"),o=e("xF/b"),i=e("S/j/"),a=e("ne8i"),u=e("RYi7"),c=e("zRwo");r(r.P,"Array",{flatten:function(){var t=arguments[0],n=i(this),e=a(n.length),r=c(n,0);return o(r,n,n,e,0,void 0===t?1:u(t)),r}}),e("nGyu")("flatten")},czNK:function(t,n,e){"use strict";var r=e("DVgA"),o=e("JiEa"),i=e("UqcF"),a=e("S/j/"),u=e("Ymqv"),c=Object.assign;t.exports=!c||e("eeVq")(function(){var t={},n={},e=Symbol(),r="abcdefghijklmnopqrst";return t[e]=7,r.split("").forEach(function(t){n[t]=t}),7!=c({},t)[e]||Object.keys(c({},n)).join("")!=r})?function(t,n){for(var e=a(t),c=arguments.length,s=1,f=o.f,l=i.f;c>s;)for(var h,p=u(arguments[s++]),v=f?r(p).concat(f(p)):r(p),g=v.length,d=0;g>d;)l.call(p,h=v[d++])&&(e[h]=p[h]);return e}:c},"d/Gc":function(t,n,e){var r=e("RYi7"),o=Math.max,i=Math.min;t.exports=function(t,n){return(t=r(t))<0?o(t+n,0):i(t,n)}},"dE+T":function(t,n,e){var r=e("XKFU");r(r.P,"Array",{copyWithin:e("upKx")}),e("nGyu")("copyWithin")},dQfE:function(t,n,e){e("XfO3"),e("LK8F"),e("HEwt"),e("6AQ9"),e("Nz9U"),e("I78e"),e("Vd3H"),e("8+KV"),e("bWfx"),e("0l/t"),e("dZ+Y"),e("YJVH"),e("DNiP"),e("SPin"),e("V+eJ"),e("mGWK"),e("dE+T"),e("bHtr"),e("dRSK"),e("INYr"),e("0E+W"),e("yt8O"),t.exports=e("g3g5").Array},dRSK:function(t,n,e){"use strict";var r=e("XKFU"),o=e("CkkT")(5),i=!0;"find"in[]&&Array(1).find(function(){i=!1}),r(r.P+r.F*i,"Array",{find:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),e("nGyu")("find")},"dZ+Y":function(t,n,e){"use strict";var r=e("XKFU"),o=e("CkkT")(3);r(r.P+r.F*!e("LyE8")([].some,!0),"Array",{some:function(t){return o(this,t,arguments[1])}})},dyZX:function(t,n){var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},e7yV:function(t,n,e){var r=e("aCFj"),o=e("kJMx").f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==i.call(t)?function(t){try{return o(t)}catch(n){return a.slice()}}(t):o(r(t))}},eHKK:function(t,n,e){var r=e("XKFU");r(r.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},eI33:function(t,n,e){var r=e("XKFU"),o=e("aCFj"),i=e("ne8i");r(r.S,"String",{raw:function(t){for(var n=o(t.raw),e=i(n.length),r=arguments.length,a=[],u=0;e>u;)a.push(String(n[u++])),u<r&&a.push(String(arguments[u]));return a.join("")}})},eM6i:function(t,n,e){var r=e("XKFU");r(r.S,"Date",{now:function(){return(new Date).getTime()}})},eeVq:function(t,n){t.exports=function(t){try{return!!t()}catch(n){return!0}}},elZq:function(t,n,e){"use strict";var r=e("dyZX"),o=e("hswa"),i=e("nh4g"),a=e("K0xU")("species");t.exports=function(t){var n=r[t];i&&n&&!n[a]&&o.f(n,a,{configurable:!0,get:function(){return this}})}},eyMr:function(t,n,e){var r=e("2OiF"),o=e("S/j/"),i=e("Ymqv"),a=e("ne8i");t.exports=function(t,n,e,u,c){r(n);var s=o(t),f=i(s),l=a(s.length),h=c?l-1:0,p=c?-1:1;if(e<2)for(;;){if(h in f){u=f[h],h+=p;break}if(h+=p,c?h<0:l<=h)throw TypeError("Reduce of empty array with no initial value")}for(;c?h>=0:l>h;h+=p)h in f&&(u=n(u,f[h],h,s));return u}},"f3/d":function(t,n,e){var r=e("hswa").f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||e("nh4g")&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(t){return""}}})},"fN/3":function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=r.keys,a=r.key;r.exp({getOwnMetadataKeys:function(t){return i(o(t),arguments.length<2?void 0:a(arguments[1]))}})},fN96:function(t,n,e){var r=e("XKFU");r(r.S,"Number",{isInteger:e("nBIS")})},fyDq:function(t,n,e){var r=e("hswa").f,o=e("aagx"),i=e("K0xU")("toStringTag");t.exports=function(t,n,e){t&&!o(t=e?t:t.prototype,i)&&r(t,i,{configurable:!0,value:n})}},fyVe:function(t,n,e){var r=e("XKFU"),o=e("1sa7"),i=Math.sqrt,a=Math.acosh;r(r.S+r.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))&&a(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:o(t-1+i(t-1)*i(t+1))}})},g3g5:function(t,n){var e=t.exports={version:"2.5.7"};"number"==typeof __e&&(__e=e)},g4EE:function(t,n,e){"use strict";var r=e("y3w9"),o=e("apmT");t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return o(r(this),"number"!=t)}},g6HL:function(t,n){t.exports=Object.is||function(t,n){return t===n?0!==t||1/t==1/n:t!=t&&n!=n}},"h/M4":function(t,n,e){var r=e("XKFU");r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},h7Nl:function(t,n,e){var r=Date.prototype,o=r.toString,i=r.getTime;new Date(NaN)+""!="Invalid Date"&&e("KroJ")(r,"toString",function(){var t=i.call(this);return t==t?o.call(this):"Invalid Date"})},hEkN:function(t,n,e){"use strict";e("OGtf")("anchor",function(t){return function(n){return t(this,"a","name",n)}})},hHhE:function(t,n,e){var r=e("XKFU");r(r.S,"Object",{create:e("Kuth")})},hLT2:function(t,n,e){var r=e("XKFU");r(r.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},"hN/g":function(t,n,e){"use strict";e.r(n),e("vqGA"),e("99sg"),e("a0L2"),e("4A4+"),e("oka+"),e("ifmr"),e("Lmuc"),e("CuTL"),e("V5/Y"),e("nx1v"),e("dQfE"),e("WHqE"),e("rfyP"),e("qKs0"),e("hYbK"),e("VXxg"),e("FZcq"),e("0TWp")},hPIQ:function(t,n){t.exports={}},hYbK:function(t,n,e){e("Btvt"),e("yt8O"),e("EK0E"),t.exports=e("g3g5").WeakMap},hhXQ:function(t,n,e){var r=e("XKFU"),o=e("UExd")(!1);r(r.S,"Object",{values:function(t){return o(t)}})},hswa:function(t,n,e){var r=e("y3w9"),o=e("xpql"),i=e("apmT"),a=Object.defineProperty;n.f=e("nh4g")?Object.defineProperty:function(t,n,e){if(r(t),n=i(n,!0),r(e),o)try{return a(t,n,e)}catch(u){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},i5dc:function(t,n,e){var r=e("0/R4"),o=e("y3w9"),i=function(t,n){if(o(t),!r(n)&&null!==n)throw TypeError(n+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,n,r){try{(r=e("m0Pp")(Function.call,e("EemH").f(Object.prototype,"__proto__").set,2))(t,[]),n=!(t instanceof Array)}catch(o){n=!0}return function(t,e){return i(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:i}},"iW+S":function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=e("OP3Y"),a=r.has,u=r.key,c=function(t,n,e){if(a(t,n,e))return!0;var r=i(n);return null!==r&&c(t,r,e)};r.exp({hasMetadata:function(t,n){return c(t,o(n),arguments.length<3?void 0:u(arguments[2]))}})},ifmr:function(t,n,e){e("tyy+"),t.exports=e("g3g5").parseFloat},ioFf:function(t,n,e){"use strict";var r=e("dyZX"),o=e("aagx"),i=e("nh4g"),a=e("XKFU"),u=e("KroJ"),c=e("Z6vF").KEY,s=e("eeVq"),f=e("VTer"),l=e("fyDq"),h=e("ylqs"),p=e("K0xU"),v=e("N8g3"),g=e("OnI7"),d=e("1MBn"),y=e("EWmC"),m=e("y3w9"),b=e("0/R4"),k=e("aCFj"),_=e("apmT"),S=e("RjD/"),w=e("Kuth"),x=e("e7yV"),T=e("EemH"),F=e("hswa"),E=e("DVgA"),O=T.f,P=F.f,M=x.f,j=r.Symbol,D=r.JSON,K=D&&D.stringify,U=p("_hidden"),X=p("toPrimitive"),Z={}.propertyIsEnumerable,A=f("symbol-registry"),I=f("symbols"),L=f("op-symbols"),R=Object.prototype,C="function"==typeof j,N=r.QObject,z=!N||!N.prototype||!N.prototype.findChild,q=i&&s(function(){return 7!=w(P({},"a",{get:function(){return P(this,"a",{value:7}).a}})).a})?function(t,n,e){var r=O(R,n);r&&delete R[n],P(t,n,e),r&&t!==R&&P(R,n,r)}:P,V=function(t){var n=I[t]=w(j.prototype);return n._k=t,n},G=C&&"symbol"==typeof j.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof j},H=function(t,n,e){return t===R&&H(L,n,e),m(t),n=_(n,!0),m(e),o(I,n)?(e.enumerable?(o(t,U)&&t[U][n]&&(t[U][n]=!1),e=w(e,{enumerable:S(0,!1)})):(o(t,U)||P(t,U,S(1,{})),t[U][n]=!0),q(t,n,e)):P(t,n,e)},W=function(t,n){m(t);for(var e,r=d(n=k(n)),o=0,i=r.length;i>o;)H(t,e=r[o++],n[e]);return t},Y=function(t){var n=Z.call(this,t=_(t,!0));return!(this===R&&o(I,t)&&!o(L,t))&&(!(n||!o(this,t)||!o(I,t)||o(this,U)&&this[U][t])||n)},J=function(t,n){if(t=k(t),n=_(n,!0),t!==R||!o(I,n)||o(L,n)){var e=O(t,n);return!e||!o(I,n)||o(t,U)&&t[U][n]||(e.enumerable=!0),e}},B=function(t){for(var n,e=M(k(t)),r=[],i=0;e.length>i;)o(I,n=e[i++])||n==U||n==c||r.push(n);return r},Q=function(t){for(var n,e=t===R,r=M(e?L:k(t)),i=[],a=0;r.length>a;)!o(I,n=r[a++])||e&&!o(R,n)||i.push(I[n]);return i};C||(u((j=function(){if(this instanceof j)throw TypeError("Symbol is not a constructor!");var t=h(arguments.length>0?arguments[0]:void 0),n=function(e){this===R&&n.call(L,e),o(this,U)&&o(this[U],t)&&(this[U][t]=!1),q(this,t,S(1,e))};return i&&z&&q(R,t,{configurable:!0,set:n}),V(t)}).prototype,"toString",function(){return this._k}),T.f=J,F.f=H,e("kJMx").f=x.f=B,e("UqcF").f=Y,e("JiEa").f=Q,i&&!e("LQAc")&&u(R,"propertyIsEnumerable",Y,!0),v.f=function(t){return V(p(t))}),a(a.G+a.W+a.F*!C,{Symbol:j});for(var $="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;$.length>tt;)p($[tt++]);for(var nt=E(p.store),et=0;nt.length>et;)g(nt[et++]);a(a.S+a.F*!C,"Symbol",{for:function(t){return o(A,t+="")?A[t]:A[t]=j(t)},keyFor:function(t){if(!G(t))throw TypeError(t+" is not a symbol!");for(var n in A)if(A[n]===t)return n},useSetter:function(){z=!0},useSimple:function(){z=!1}}),a(a.S+a.F*!C,"Object",{create:function(t,n){return void 0===n?w(t):W(w(t),n)},defineProperty:H,defineProperties:W,getOwnPropertyDescriptor:J,getOwnPropertyNames:B,getOwnPropertySymbols:Q}),D&&a(a.S+a.F*(!C||s(function(){var t=j();return"[null]"!=K([t])||"{}"!=K({a:t})||"{}"!=K(Object(t))})),"JSON",{stringify:function(t){for(var n,e,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);if(e=n=r[1],(b(n)||void 0!==t)&&!G(t))return y(n)||(n=function(t,n){if("function"==typeof e&&(n=e.call(this,t,n)),!G(n))return n}),r[1]=n,K.apply(D,r)}}),j.prototype[X]||e("Mukb")(j.prototype,X,j.prototype.valueOf),l(j,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},jm62:function(t,n,e){var r=e("XKFU"),o=e("mQtv"),i=e("aCFj"),a=e("EemH"),u=e("8a7r");r(r.S,"Object",{getOwnPropertyDescriptors:function(t){for(var n,e,r=i(t),c=a.f,s=o(r),f={},l=0;s.length>l;)void 0!==(e=c(r,n=s[l++]))&&u(f,n,e);return f}})},jqX0:function(t,n,e){var r=e("XKFU"),o=e("jtBr");r(r.P+r.F*(Date.prototype.toISOString!==o),"Date",{toISOString:o})},jtBr:function(t,n,e){"use strict";var r=e("eeVq"),o=Date.prototype.getTime,i=Date.prototype.toISOString,a=function(t){return t>9?t:"0"+t};t.exports=r(function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-5e13-1))})||!r(function(){i.call(new Date(NaN))})?function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,n=t.getUTCFullYear(),e=t.getUTCMilliseconds(),r=n<0?"-":n>9999?"+":"";return r+("00000"+Math.abs(n)).slice(r?-6:-4)+"-"+a(t.getUTCMonth()+1)+"-"+a(t.getUTCDate())+"T"+a(t.getUTCHours())+":"+a(t.getUTCMinutes())+":"+a(t.getUTCSeconds())+"."+(e>99?e:"0"+a(e))+"Z"}:i},kJMx:function(t,n,e){var r=e("zhAb"),o=e("4R4u").concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},kcoS:function(t,n,e){var r=e("lvtm"),o=Math.pow,i=o(2,-52),a=o(2,-23),u=o(2,127)*(2-a),c=o(2,-126);t.exports=Math.fround||function(t){var n,e,o=Math.abs(t),s=r(t);return o<c?s*(o/c/a+1/i-1/i)*c*a:(e=(n=(1+a/i)*o)-(n-o))>u||e!=e?s*(1/0):s*e}},knhD:function(t,n,e){var r=e("XKFU");r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},l0Rn:function(t,n,e){"use strict";var r=e("RYi7"),o=e("vhPU");t.exports=function(t){var n=String(o(this)),e="",i=r(t);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(n+=n))1&i&&(e+=n);return e}},lvtm:function(t,n){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},m0Pp:function(t,n,e){var r=e("2OiF");t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,o){return t.call(n,e,r,o)}}return function(){return t.apply(n,arguments)}}},mGWK:function(t,n,e){"use strict";var r=e("XKFU"),o=e("aCFj"),i=e("RYi7"),a=e("ne8i"),u=[].lastIndexOf,c=!!u&&1/[1].lastIndexOf(1,-0)<0;r(r.P+r.F*(c||!e("LyE8")(u)),"Array",{lastIndexOf:function(t){if(c)return u.apply(this,arguments)||0;var n=o(this),e=a(n.length),r=e-1;for(arguments.length>1&&(r=Math.min(r,i(arguments[1]))),r<0&&(r=e+r);r>=0;r--)if(r in n&&n[r]===t)return r||0;return-1}})},mQtv:function(t,n,e){var r=e("kJMx"),o=e("JiEa"),i=e("y3w9"),a=e("dyZX").Reflect;t.exports=a&&a.ownKeys||function(t){var n=r.f(i(t)),e=o.f;return e?n.concat(e(t)):n}},mYba:function(t,n,e){var r=e("aCFj"),o=e("EemH").f;e("Xtr8")("getOwnPropertyDescriptor",function(){return function(t,n){return o(r(t),n)}})},mura:function(t,n,e){var r=e("0/R4"),o=e("Z6vF").onFreeze;e("Xtr8")("preventExtensions",function(t){return function(n){return t&&r(n)?t(o(n)):n}})},nBIS:function(t,n,e){var r=e("0/R4"),o=Math.floor;t.exports=function(t){return!r(t)&&isFinite(t)&&o(t)===t}},nGyu:function(t,n,e){var r=e("K0xU")("unscopables"),o=Array.prototype;null==o[r]&&e("Mukb")(o,r,{}),t.exports=function(t){o[r][t]=!0}},nIY7:function(t,n,e){"use strict";e("OGtf")("big",function(t){return function(){return t(this,"big","","")}})},ne8i:function(t,n,e){var r=e("RYi7"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},nh4g:function(t,n,e){t.exports=!e("eeVq")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},nsiH:function(t,n,e){"use strict";e("OGtf")("fontsize",function(t){return function(n){return t(this,"font","size",n)}})},nx1v:function(t,n,e){e("eM6i"),e("AphP"),e("jqX0"),e("h7Nl"),e("yM4b"),t.exports=Date},nzyx:function(t,n,e){var r=e("XKFU"),o=e("LVwc");r(r.S+r.F*(o!=Math.expm1),"Math",{expm1:o})},oDIu:function(t,n,e){"use strict";var r=e("XKFU"),o=e("AvRE")(!1);r(r.P,"String",{codePointAt:function(t){return o(this,t)}})},"oka+":function(t,n,e){e("GNAe"),t.exports=e("g3g5").parseInt},pIFo:function(t,n,e){e("IU+Z")("replace",2,function(t,n,e){return[function(r,o){"use strict";var i=t(this),a=null==r?void 0:r[n];return void 0!==a?a.call(r,i,o):e.call(String(i),r,o)},e]})},"pp/T":function(t,n,e){var r=e("XKFU");r(r.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},qKs0:function(t,n,e){e("Btvt"),e("XfO3"),e("rGqo"),e("9AAn"),t.exports=e("g3g5").Map},qncB:function(t,n,e){var r=e("XKFU"),o=e("vhPU"),i=e("eeVq"),a=e("/e88"),u="["+a+"]",c=RegExp("^"+u+u+"*"),s=RegExp(u+u+"*$"),f=function(t,n,e){var o={},u=i(function(){return!!a[t]()||"\u200b\x85"!="\u200b\x85"[t]()}),c=o[t]=u?n(l):a[t];e&&(o[e]=c),r(r.P+r.F*u,"String",o)},l=f.trim=function(t,n){return t=String(o(t)),1&n&&(t=t.replace(c,"")),2&n&&(t=t.replace(s,"")),t};t.exports=f},quPj:function(t,n,e){var r=e("0/R4"),o=e("LZWt"),i=e("K0xU")("match");t.exports=function(t){var n;return r(t)&&(void 0!==(n=t[i])?!!n:"RegExp"==o(t))}},rGqo:function(t,n,e){for(var r=e("yt8O"),o=e("DVgA"),i=e("KroJ"),a=e("dyZX"),u=e("Mukb"),c=e("hPIQ"),s=e("K0xU"),f=s("iterator"),l=s("toStringTag"),h=c.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},v=o(p),g=0;g<v.length;g++){var d,y=v[g],m=p[y],b=a[y],k=b&&b.prototype;if(k&&(k[f]||u(k,f,h),k[l]||u(k,l,y),c[y]=h,m))for(d in r)k[d]||i(k,d,r[d],!0)}},rfyP:function(t,n,e){e("Oyvg"),e("a1Th"),e("OEbY"),e("SRfc"),e("pIFo"),e("OG14"),e("KKXr"),t.exports=e("g3g5").RegExp},rvZc:function(t,n,e){"use strict";var r=e("XKFU"),o=e("ne8i"),i=e("0sh+"),a="".endsWith;r(r.P+r.F*e("UUeW")("endsWith"),"String",{endsWith:function(t){var n=i(this,t,"endsWith"),e=arguments.length>1?arguments[1]:void 0,r=o(n.length),u=void 0===e?r:Math.min(o(e),r),c=String(t);return a?a.call(n,c,u):n.slice(u-c.length,u)===c}})},s5qY:function(t,n,e){var r=e("0/R4");t.exports=function(t,n){if(!r(t)||t._t!==n)throw TypeError("Incompatible receiver, "+n+" required!");return t}},sbF8:function(t,n,e){var r=e("XKFU"),o=e("nBIS"),i=Math.abs;r(r.S,"Number",{isSafeInteger:function(t){return o(t)&&i(t)<=9007199254740991}})},tUrg:function(t,n,e){"use strict";e("OGtf")("link",function(t){return function(n){return t(this,"a","href",n)}})},"tyy+":function(t,n,e){var r=e("XKFU"),o=e("11IZ");r(r.G+r.F*(parseFloat!=o),{parseFloat:o})},uAtd:function(t,n,e){var r=e("T39b"),o=e("Q3ne"),i=e("N6cJ"),a=e("y3w9"),u=e("OP3Y"),c=i.keys,s=i.key,f=function(t,n){var e=c(t,n),i=u(t);if(null===i)return e;var a=f(i,n);return a.length?e.length?o(new r(e.concat(a))):a:e};i.exp({getMetadataKeys:function(t){return f(a(t),arguments.length<2?void 0:s(arguments[1]))}})},uaHG:function(t,n,e){"use strict";var r=e("XKFU"),o=e("S/j/"),i=e("apmT"),a=e("OP3Y"),u=e("EemH").f;e("nh4g")&&r(r.P+e("xbSm"),"Object",{__lookupGetter__:function(t){var n,e=o(this),r=i(t,!0);do{if(n=u(e,r))return n.get}while(e=a(e))}})},upKx:function(t,n,e){"use strict";var r=e("S/j/"),o=e("d/Gc"),i=e("ne8i");t.exports=[].copyWithin||function(t,n){var e=r(this),a=i(e.length),u=o(t,a),c=o(n,a),s=arguments.length>2?arguments[2]:void 0,f=Math.min((void 0===s?a:o(s,a))-c,a-u),l=1;for(c<u&&u<c+f&&(l=-1,c+=f-1,u+=f-1);f-- >0;)c in e?e[u]=e[c]:delete e[u],u+=l,c+=l;return e}},vhPU:function(t,n){t.exports=function(t){if(null==t)throw TypeError("Can't call method on  "+t);return t}},vqGA:function(t,n,e){e("ioFf"),e("Btvt"),t.exports=e("g3g5").Symbol},vvmO:function(t,n,e){var r=e("LZWt");t.exports=function(t,n){if("number"!=typeof t&&"Number"!=r(t))throw TypeError(n);return+t}},w2a5:function(t,n,e){var r=e("aCFj"),o=e("ne8i"),i=e("d/Gc");t.exports=function(t){return function(n,e,a){var u,c=r(n),s=o(c.length),f=i(a,s);if(t&&e!=e){for(;s>f;)if((u=c[f++])!=u)return!0}else for(;s>f;f++)if((t||f in c)&&c[f]===e)return t||f||0;return!t&&-1}}},wmvG:function(t,n,e){"use strict";var r=e("hswa").f,o=e("Kuth"),i=e("3Lyj"),a=e("m0Pp"),u=e("9gX7"),c=e("SlkY"),s=e("Afnz"),f=e("1TsA"),l=e("elZq"),h=e("nh4g"),p=e("Z6vF").fastKey,v=e("s5qY"),g=h?"_s":"size",d=function(t,n){var e,r=p(n);if("F"!==r)return t._i[r];for(e=t._f;e;e=e.n)if(e.k==n)return e};t.exports={getConstructor:function(t,n,e,s){var f=t(function(t,r){u(t,f,n,"_i"),t._t=n,t._i=o(null),t._f=void 0,t._l=void 0,t[g]=0,null!=r&&c(r,e,t[s],t)});return i(f.prototype,{clear:function(){for(var t=v(this,n),e=t._i,r=t._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete e[r.i];t._f=t._l=void 0,t[g]=0},delete:function(t){var e=v(this,n),r=d(e,t);if(r){var o=r.n,i=r.p;delete e._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),e._f==r&&(e._f=o),e._l==r&&(e._l=i),e[g]--}return!!r},forEach:function(t){v(this,n);for(var e,r=a(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(r(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!d(v(this,n),t)}}),h&&r(f.prototype,"size",{get:function(){return v(this,n)[g]}}),f},def:function(t,n,e){var r,o,i=d(t,n);return i?i.v=e:(t._l=i={i:o=p(n,!0),k:n,v:e,p:r=t._l,n:void 0,r:!1},t._f||(t._f=i),r&&(r.n=i),t[g]++,"F"!==o&&(t._i[o]=i)),t},getEntry:d,setStrong:function(t,n,e){s(t,n,function(t,e){this._t=v(t,n),this._k=e,this._l=void 0},function(){for(var t=this._k,n=this._l;n&&n.r;)n=n.p;return this._t&&(this._l=n=n?n.n:this._t._f)?f(0,"keys"==t?n.k:"values"==t?n.v:[n.k,n.v]):(this._t=void 0,f(1))},e?"entries":"values",!e,!0),l(n)}}},x8Yj:function(t,n,e){var r=e("XKFU"),o=e("LVwc"),i=Math.exp;r(r.S,"Math",{tanh:function(t){var n=o(t=+t),e=o(-t);return n==1/0?1:e==1/0?-1:(n-e)/(i(t)+i(-t))}})},x8ZO:function(t,n,e){var r=e("XKFU"),o=Math.abs;r(r.S,"Math",{hypot:function(t,n){for(var e,r,i=0,a=0,u=arguments.length,c=0;a<u;)c<(e=o(arguments[a++]))?(i=i*(r=c/e)*r+1,c=e):i+=e>0?(r=e/c)*r:e;return c===1/0?1/0:c*Math.sqrt(i)}})},"xF/b":function(t,n,e){"use strict";var r=e("EWmC"),o=e("0/R4"),i=e("ne8i"),a=e("m0Pp"),u=e("K0xU")("isConcatSpreadable");t.exports=function t(n,e,c,s,f,l,h,p){for(var v,g,d=f,y=0,m=!!h&&a(h,p,3);y<s;){if(y in c){if(v=m?m(c[y],y,e):c[y],g=!1,o(v)&&(g=void 0!==(g=v[u])?!!g:r(v)),g&&l>0)d=t(n,e,v,i(v.length),d,l-1)-1;else{if(d>=9007199254740991)throw TypeError();n[d]=v}d++}y++}return d}},xbSm:function(t,n,e){"use strict";t.exports=e("LQAc")||!e("eeVq")(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete e("dyZX")[t]})},xfY5:function(t,n,e){"use strict";var r=e("dyZX"),o=e("aagx"),i=e("LZWt"),a=e("Xbzi"),u=e("apmT"),c=e("eeVq"),s=e("kJMx").f,f=e("EemH").f,l=e("hswa").f,h=e("qncB").trim,p=r.Number,v=p,g=p.prototype,d="Number"==i(e("Kuth")(g)),y="trim"in String.prototype,m=function(t){var n=u(t,!1);if("string"==typeof n&&n.length>2){var e,r,o,i=(n=y?n.trim():h(n,3)).charCodeAt(0);if(43===i||45===i){if(88===(e=n.charCodeAt(2))||120===e)return NaN}else if(48===i){switch(n.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+n}for(var a,c=n.slice(2),s=0,f=c.length;s<f;s++)if((a=c.charCodeAt(s))<48||a>o)return NaN;return parseInt(c,r)}}return+n};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function(t){var n=arguments.length<1?0:t,e=this;return e instanceof p&&(d?c(function(){g.valueOf.call(e)}):"Number"!=i(e))?a(new v(m(n)),e,p):m(n)};for(var b,k=e("nh4g")?s(v):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),_=0;k.length>_;_++)o(v,b=k[_])&&!o(p,b)&&l(p,b,f(v,b));p.prototype=g,g.constructor=p,e("KroJ")(r,"Number",p)}},xpql:function(t,n,e){t.exports=!e("nh4g")&&!e("eeVq")(function(){return 7!=Object.defineProperty(e("Iw71")("div"),"a",{get:function(){return 7}}).a})},y3w9:function(t,n,e){var r=e("0/R4");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},yLpj:function(t,n){var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(r){"object"==typeof window&&(e=window)}t.exports=e},yM4b:function(t,n,e){var r=e("K0xU")("toPrimitive"),o=Date.prototype;r in o||e("Mukb")(o,r,e("g4EE"))},ylqs:function(t,n){var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},yt8O:function(t,n,e){"use strict";var r=e("nGyu"),o=e("1TsA"),i=e("hPIQ"),a=e("aCFj");t.exports=e("Afnz")(Array,"Array",function(t,n){this._t=a(t),this._i=0,this._k=n},function(){var t=this._t,n=this._k,e=this._i++;return!t||e>=t.length?(this._t=void 0,o(1)):o(0,"keys"==n?e:"values"==n?t[e]:[e,t[e]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},z2o2:function(t,n,e){var r=e("0/R4"),o=e("Z6vF").onFreeze;e("Xtr8")("seal",function(t){return function(n){return t&&r(n)?t(o(n)):n}})},zRwo:function(t,n,e){var r=e("6FMO");t.exports=function(t,n){return new(r(t))(n)}},zhAb:function(t,n,e){var r=e("aagx"),o=e("aCFj"),i=e("w2a5")(!1),a=e("YTvA")("IE_PROTO");t.exports=function(t,n){var e,u=o(t),c=0,s=[];for(e in u)e!=a&&r(u,e)&&s.push(e);for(;n.length>c;)r(u,e=n[c++])&&(~i(s,e)||s.push(e));return s}},"zq+C":function(t,n,e){var r=e("N6cJ"),o=e("y3w9"),i=r.key,a=r.map,u=r.store;r.exp({deleteMetadata:function(t,n){var e=arguments.length<3?void 0:i(arguments[2]),r=a(o(n),e,!1);if(void 0===r||!r.delete(t))return!1;if(r.size)return!0;var c=u.get(n);return c.delete(e),!!c.size||u.delete(n)}})}},[[5,1]]]);
\ No newline at end of file
diff --git a/www/runtime.9337249a387c7e595bff.js b/www/runtime.9337249a387c7e595bff.js
new file mode 100644
index 0000000..24db16e
--- /dev/null
+++ b/www/runtime.9337249a387c7e595bff.js
@@ -0,0 +1 @@
+!function(e){function r(r){for(var n,c,u=r[0],i=r[1],f=r[2],p=0,d=[];p<u.length;p++)o[c=u[p]]&&d.push(o[c][0]),o[c]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(l&&l(r);d.length;)d.shift()();return a.push.apply(a,f||[]),t()}function t(){for(var e,r=0;r<a.length;r++){for(var t=a[r],n=!0,u=1;u<t.length;u++)0!==o[t[u]]&&(n=!1);n&&(a.splice(r--,1),e=c(c.s=t[0]))}return e}var n={},o={1:0},a=[];function c(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,c),t.l=!0,t.exports}c.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise(function(r,n){t=o[e]=[r,n]});r.push(t[2]=n);var a,u=document.createElement("script");u.charset="utf-8",u.timeout=120,c.nc&&u.setAttribute("nonce",c.nc),u.src=function(e){return c.p+""+({0:"common"}[e]||e)+"."+{0:"ac31b91bb6bdf907c95d",2:"00c0b2f404d4152eaa72",3:"c4115c289c5994a23c55",7:"d9d99f6dcbb411098c9c",8:"7b17af014a628b3d9ae1",9:"2b074387f6e011719c48",10:"afa7a7c4d6ac4b046a79",11:"aa4fc852b7bc31805b3c",12:"0a730e5dbf73fbf320f2"}[e]+".js"}(e),a=function(r){u.onerror=u.onload=null,clearTimeout(i);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src,c=new Error("Loading chunk "+e+" failed.\n("+n+": "+a+")");c.type=n,c.request=a,t[1](c)}o[e]=void 0}};var i=setTimeout(function(){a({type:"timeout",target:u})},12e4);u.onerror=u.onload=a,document.head.appendChild(u)}return Promise.all(r)},c.m=e,c.c=n,c.d=function(e,r,t){c.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},c.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.t=function(e,r){if(1&r&&(e=c(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(c.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)c.d(t,n,(function(r){return e[r]}).bind(null,n));return t},c.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(r,"a",r),r},c.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},c.p="",c.oe=function(e){throw console.error(e),e};var u=window.webpackJsonp=window.webpackJsonp||[],i=u.push.bind(u);u.push=r,u=u.slice();for(var f=0;f<u.length;f++)r(u[f]);var l=i;t()}([]);
\ No newline at end of file
diff --git a/www/styles.298ce34baa5f3685d166.css b/www/styles.298ce34baa5f3685d166.css
new file mode 100644
index 0000000..3fd2bce
--- /dev/null
+++ b/www/styles.298ce34baa5f3685d166.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0;vertical-align:middle}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{box-sizing:content-box;-webkit-appearance:textfield;box-sizing:border-box;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(glyphicons-halflings-regular.f4769f9bdb7466be6508.eot);src:url(glyphicons-halflings-regular.f4769f9bdb7466be6508.eot?#iefix) format('embedded-opentype'),url(glyphicons-halflings-regular.448c34a56d699c29117a.woff2) format('woff2'),url(glyphicons-halflings-regular.fa2772327f55d8198301.woff) format('woff'),url(glyphicons-halflings-regular.e18bbf611f2a2e43afc0.ttf) format('truetype'),url(glyphicons-halflings-regular.89889688147bd7575d63.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px;outline:0;outline-offset:0}figure{margin:0}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{height:0;box-sizing:content-box;margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}a.text-warning:focus,a.text-warning:hover{color:#66512c}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{overflow:auto;display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{border-spacing:0;border-collapse:collapse;background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.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:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;line-height:1.42857143;background-color:#fff;background-image:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-timing-function:ease;transition-duration:.35s;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;white-space:nowrap}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}.nav-pills>li{float:left}.nav-pills>li+li{margin-left:2px}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-static-top{border-radius:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}.navbar-toggle{display:none}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;box-shadow:none}.navbar-text{float:left;margin-right:15px;margin-left:15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:2s linear infinite progress-bar-stripes;animation:2s linear infinite progress-bar-stripes}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);outline:0;box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}#footer-links .copy{display:none}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}#footer-links .copy{display:none}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local("Open Sans"),local("OpenSans"),url(/assets/fonts/OpenSans-Regular-webfont.eot);src:local("Open Sans"),local("OpenSans"),url(/assets/fonts/OpenSans-Regular-webfont.eot?#iehack) format("embedded-opentype"),url(/assets/fonts/OpenSans-Regular-webfont.woff2) format("woff2"),url(/assets/fonts/OpenSans-Regular-webfont.woff) format("woff"),url(/assets/fonts/OpenSans-Regular-webfont.ttf) format("truetype")}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local("Open Sans Bold"),local("OpenSans-Bold"),url(/assets/fonts/OpenSans-Bold-webfont.eot);src:local("Open Sans Bold"),local("OpenSans-Bold"),url(/assets/fonts/OpenSans-Bold-webfont.eot?#iehack) format("embedded-opentype"),url(/assets/fonts/OpenSans-Bold-webfont.woff2) format("woff2"),url(/assets/fonts/OpenSans-Bold-webfont.woff) format("woff"),url(/assets/fonts/OpenSans-Bold-webfont.ttf) format("truetype")}@font-face{font-family:'Open Sans';font-style:italic;font-weight:400;src:local("Open Sans Italic"),local("OpenSans-Italic"),url(/assets/fonts/OpenSans-Italic-webfont.eot);src:local("Open Sans Italic"),local("OpenSans-Italic"),url(/assets/fonts/OpenSans-Italic-webfont.eot?#iehack) format("embedded-opentype"),url(/assets/fonts/OpenSans-Italic-webfont.woff2) format("woff2"),url(/assets/fonts/OpenSans-Italic-webfont.woff) format("woff"),url(/assets/fonts/OpenSans-Italic-webfont.ttf) format("truetype")}@font-face{font-family:'Open Sans';font-style:italic;font-weight:700;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(/assets/fonts/OpenSans-BoldItalic-webfont.eot);src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(/assets/fonts/OpenSans-BoldItalic-webfont.eot?#iehack) format("embedded-opentype"),url(/assets/fonts/OpenSans-BoldItalic-webfont.woff2) format("woff2"),url(/assets/fonts/OpenSans-BoldItalic-webfont.woff) format("woff"),url(/assets/fonts/OpenSans-BoldItalic-webfont.ttf) format("truetype")}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local("Open Sans Semi Bold"),local("OpenSans-Semibold"),url(/assets/fonts/OpenSans-Semibold-webfont.eot);src:local("Open Sans Semi Bold"),local("OpenSans-Semibold"),url(/assets/fonts/OpenSans-Semibold-webfont.eot?#iehack) format("embedded-opentype"),url(/assets/fonts/OpenSans-Semibold-webfont.woff2) format("woff2"),url(/assets/fonts/OpenSans-Semibold-webfont.woff) format("woff"),url(/assets/fonts/OpenSans-Semibold-webfont.ttf) format("truetype")}::-webkit-input-placeholder{color:#7f8588}:-moz-placeholder{color:#7f8588}::-moz-placeholder{color:#7f8588}:-ms-input-placeholder{color:#7f8588}a:hover.disabled{cursor:default}input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}body{font-family:"Open Sans",Arial,sans-serif;font-size:13px;max-height:1600px!important;overflow-x:hidden!important}h3{color:#434a4f;font-size:21px;margin-top:0;margin-bottom:27px}.form-group{margin-bottom:20px}.form-control{border:1px solid #cccdcf;border-radius:3px;box-shadow:1px 1px 2px 0 rgba(0,0,0,.06) inset;color:#434a4f;font-size:13px;height:30px;padding:6px 12px;font-weight:400;margin-left:0}.form-control:focus{border-color:#0072b4;box-shadow:none}.form-group.has-error{margin-bottom:0}.has-success.hint-text{color:#97bf0d}.has-error.hint-text{color:#d8462e}.nowrap{white-space:nowrap}.blue-bar{height:40px}.blue-bar .footer{z-index:9}.logo-area{border-bottom:1px solid #cccdcf}#footer a{color:#bfd2de}#footer a:focus,#footer a:hover{color:#fff}.footer{position:absolute;bottom:0}.welcome-message{color:#fff;line-height:40px}.welcome-message .bold{font-weight:700}.footer-center{text-align:center}.container{padding-right:20px;padding-left:20px;visibility:visible}@media (min-width:992px){.no-padding-left{padding-left:0!important}#footer-links .copy{display:inline}}@media (min-width:1200px){.no-padding-left{padding-left:0!important}#footer-links .copy{display:inline}}a:hover{cursor:pointer}table.dataTable{width:100%;clear:both;border-collapse:separate;margin:15px 0 30px;border-spacing:0;box-sizing:content-box}table.dataTable .dataTables_filter input{background-color:#f4f4f4;background-image:none;border-radius:2px;border:1px solid rgba(0,0,0,.1);box-shadow:none;transition:none}table.dataTable thead th{color:#fff;cursor:default;font-weight:700;padding:15px 25px 10px 20px;width:45px;background-color:#00497b;border-left:1px solid #005895}table.dataTable thead th:first-child{border-left:1px solid transparent;border-radius:5px 0 0}table.dataTable thead th:last-child{border-right:1px solid transparent;border-radius:0 5px 0 0}table.dataTable thead th:active{outline:0}table.dataTable td{border-left:1px solid #cccdcf;color:#434a4f;padding:15px 0 15px 20px}table.dataTable td:last-child{border-right:1px solid #cccdcf}table.dataTable td:active{outline:0}table.dataTable tr:last-child td{border-bottom:1px solid #cccdcf}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_filter{float:none;text-align:center;margin-top:.5em}}.btn{touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-user-select:none;background-image:none;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;font-size:14px;font-weight:400;line-height:1.42857;margin-bottom:0;padding:0 12px;text-align:center;vertical-align:middle;white-space:nowrap}.btn-default{background-color:#f5f5f5;background-image:none;border:1px solid #cccdcf;border-radius:2px;box-shadow:none;color:#434a4f;font-size:14px;height:30px}.btn-default:focus,.btn-default:hover{background-color:#f8f8f8;border-color:#b9b9b9;box-shadow:none;color:#434a4f}.btn-default.active:focus,.btn-default.active:hover,.btn-default.focus.active,.btn-default.focus:active,.btn-default:active:focus,.btn-default:active:hover{background-color:#f0f0f0;border-color:#0072b4;box-shadow:none;color:#434a4f;outline:0}.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary.focus.active,.btn-primary.focus:active,.btn-primary:active:focus,.btn-primary:active:hover{background-color:#f0f0f0;border-color:#0072b4;color:#434a4f}.dropdown-menu>li>a{color:#7f8588;line-height:20px;padding-left:10px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#0072b4;color:#fff;text-decoration:none}.open>.dropdown-toggle.btn-default{color:#000}.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#f0f0f0;border-color:#0072b4;box-shadow:none;color:#434a4f;outline:0}.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{background-color:#f0f0f0;border-color:#0072b4;color:#434a4f}#footer{bottom:0;color:#bfd2de;font-size:13px;position:fixed;line-height:40px;width:100%;left:0;border-top:2px solid #cdcdcd;height:42px;z-index:40}#header{border-bottom:2px solid #cdcdcd;position:fixed;top:3;left:0;right:0;z-index:1000;padding:0;height:64px}@media screen and (-ms-high-contrast:active){.btn-default{padding-top:0}}@media (-ms-high-contrast:none){.btn-default{padding-top:0}}@media screen and (-webkit-min-device-pixel-ratio:0){.btn-default{padding-top:0}}@media (-moz-os-version:windows-xp){.btn-default{padding-top:0}}@media (-moz-os-version:windows-vista){.btn-default{padding-top:0}}@media (-moz-os-version:windows-win7){.btn-default{padding-top:0}}@media (-moz-os-version:windows-win8){.btn-default{padding-top:0}}body,html{height:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mainSpinner{background:#fff;position:fixed;top:0;overflow:hidden!important;bottom:0;width:100%;text-align:center;z-index:4000;padding-top:calc(50vh)}@media screen and (max-width:760px){html.mobile-menu-open,html.mobile-menu-open body{overflow:hidden;position:fixed;height:100%;width:100%}}.mobile-only{display:none}.clear{clear:both}.float-right{float:right}.float-left{float:left}.error-text,.text-danger,.text-error{color:#f40202}.text-success{color:#3aa73e}.text-warning{color:#fe8401}.text-pre-wrap{white-space:pre-line!important}.vendor-dialogs p.text-info{margin-bottom:15px}.tooltip.no-hover{cursor:default}.comma-separation:after{content:','}.comma-separation:last-child:after{content:''}.content-wrapper{min-height:85vh;padding-top:115px;padding-bottom:40px}select.form-control{padding-top:3px;padding-bottom:3px}a.log-link{text-decoration:none}@media screen and (max-width:544px){span.hidden-sm-down{display:none}}@media screen and (min-width:544px){span.hidden-md-up{display:none}}.control-label.col-lg-1,.control-label.col-lg-10,.control-label.col-lg-11,.control-label.col-lg-12,.control-label.col-lg-2,.control-label.col-lg-3,.control-label.col-lg-4,.control-label.col-lg-5,.control-label.col-lg-6,.control-label.col-lg-7,.control-label.col-lg-8,.control-label.col-lg-9,.control-label.col-md-1,.control-label.col-md-10,.control-label.col-md-11,.control-label.col-md-12,.control-label.col-md-2,.control-label.col-md-3,.control-label.col-md-4,.control-label.col-md-5,.control-label.col-md-6,.control-label.col-md-7,.control-label.col-md-8,.control-label.col-md-9,.control-label.col-sm-1,.control-label.col-sm-10,.control-label.col-sm-11,.control-label.col-sm-12,.control-label.col-sm-2,.control-label.col-sm-3,.control-label.col-sm-4,.control-label.col-sm-5,.control-label.col-sm-6,.control-label.col-sm-7,.control-label.col-sm-8,.control-label.col-sm-9,.control-label.col-xs-1,.control-label.col-xs-10,.control-label.col-xs-11,.control-label.col-xs-12,.control-label.col-xs-2,.control-label.col-xs-3,.control-label.col-xs-4,.control-label.col-xs-5,.control-label.col-xs-6,.control-label.col-xs-7,.control-label.col-xs-8,.control-label.col-xs-9{padding-right:0}#footer .mobile-lang{display:inline-block}#footer,#header{background-attachment:scroll;background-clip:border-box;background-image:linear-gradient(to right,#00497b,#0072b4);background-origin:padding-box;background-position:0 0;background-repeat:repeat;background-size:auto auto;border:none}.brand_bg{background-color:#fff;height:3px;width:100%;box-shadow:0 0 5px}.brand{display:flex;height:58px;background:url(/assets/images/header_Bg_58x29.png) no-repeat;padding-left:28px;margin-right:-16px;margin-top:-3px;align-self:flex-start}.brand h2 a{color:#434a4f}.brand .more_right{color:#434a4f;fill:#434a4f}.brand .logo_wrapper{display:inline-block;background-color:#fff;display:flex;height:58px;z-index:1;padding-right:5px;box-shadow:3px 1px 3px rgba(33,42,58,.5)}.brand .vendor_logo{width:185px;height:58px;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE1LjAuMiwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSI1NjYuMzdweCIgaGVpZ2h0PSIyMTEuODIxcHgiIHZpZXdCb3g9IjAgMCA1NjYuMzcgMjExLjgyMSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDU2Ni4zNyAyMTEuODIxIgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwb2x5Z29uIGZpbGw9IiM0MzQ5NEIiIHBvaW50cz0iMjcxLjgzOSw5Mi43NDkgMjg1LjMwNCw5Mi43NDkgMjUyLjAzMSwxNDEuNDUzIDIzNy45OTEsMTQxLjQ1MyAyMjYuMzI0LDkyLjc0OSAyNDEuMjM1LDkyLjc0OSAKCQkyNDguODM2LDEyOCAJIi8+Cgk8Zz4KCQk8cGF0aCBmaWxsPSIjNDM0OTRCIiBkPSJNNDY1Ljc4NSwxMzMuMDIyYzIuMDI0LDAsMi43NjItMC41NTUsMy4yMzYtMi4zODJsNi45OTEtMjYuNTIzYzAuNTg4LTIuMTk1LDAuMDg3LTIuNjE3LTEuNzY3LTIuNjE3CgkJCWgtMzEuNjAxYy0yLjA0NywwLTIuNzU3LDAuNDIzLTMuMzcyLDIuODAzbC02Ljk5MSwyNi41MDRjLTAuNDc4LDEuNzkzLTAuMTQ2LDIuMjE1LDEuOSwyLjIxNUg0NjUuNzg1eiBNNDgzLjg4NSwxMzIuMDM5CgkJCWMtMi40MDgsOS4xNjQtNS4xNTcsOS40MTQtMTYuOTMzLDkuNDE0aC00MC42ODVjLTcuMjA5LDAtMTAuNjUxLTMuMDU5LTguNjUyLTEwLjcwMWw3Ljc5LTI5LjUwMgoJCQljMS40NzMtNS41NTcsNC4yMzctOC41MDEsMTIuNjYzLTguNTAxaDQ1LjY2OGM2Ljg3LDAsOS41ODUsMy4zMTYsNy41MzYsMTEuMTM0TDQ4My44ODUsMTMyLjAzOXoiLz4KCQk8cGF0aCBmaWxsPSIjNDM0OTRCIiBkPSJNMzI5Ljg1NCwxMzMuMDIyYzIuMDI2LDAsMi43NjUtMC41NTQsMy4yMzctMi4zODJsNi45OTEtMjYuNTIzYzAuNTg4LTIuMTk1LDAuMDg3LTIuNjE2LTEuNzY2LTIuNjE2CgkJCWgtMzEuNjE4Yy0yLjA0OCwwLTIuNzU3LDAuNDIxLTMuMzczLDIuODAybC02Ljk5LDI2LjUwNGMtMC40NzgsMS43OTItMC4xNDcsMi4yMTQsMS44OTcsMi4yMTRIMzI5Ljg1NHogTTM1NC4yNDcsMTA4LjExMQoJCQlsLTYuMjkyLDIzLjkyOGMtMi40MSw5LjE2NC01LjE1OCw5LjQxNC0xNi45MzMsOS40MTRoLTQwLjcwM2MtNy4yMDksMC0xMC42NS0zLjA1OS04LjY1Mi0xMC43bDcuODIxLTI5LjY3CgkJCWMxLjM0MS01LjA1Myw0LjgzNy04LjMzNCwxMi40NTUtOC4zMzRoNDUuODI3YzcuMzM0LDAsOS4zNiw0LjM0OCw3Ljc3NiwxMC4zOTNMMzU0LjI0NywxMDguMTExeiIvPgoJCTxwYXRoIGZpbGw9IiM0MzQ5NEIiIGQ9Ik0zNzcuMDczLDEzMS42OTFsMTAuMzUyLTM4Ljk0M2gtMTUuNjE5bC0xMS4wMzksNDEuNzU4Yy0wLjk5NCwzLjU1OS0wLjI5NCw3LjA0Nyw2LjA2Niw2Ljk0Nmg0My4zNjIKCQkJbDIuMjctOC41NTdsLTM0LjQ1MywwLjA1N0MzNzYuOTUxLDEzMi45NTMsMzc2Ljg2MywxMzIuNDc5LDM3Ny4wNzMsMTMxLjY5MSIvPgoJCTxwYXRoIGZpbGw9IiM0MzQ5NEIiIGQ9Ik0xMjUuOTU2LDEwMy40MzVsLTYuOTcyLDI2LjUzOWMtMC42MSwyLjM1MS0wLjg2NiwzLjA4MS0zLjEzOCwzLjA4MUg4NC4wMDEKCQkJYy0xLjcwNSwwLTIuMDYtMC40NzMtMS41NDYtMi4zMjZsNi44OS0yNi4xNDVjMC42MDQtMi40MiwxLjA5Mi0zLjA4MiwzLjM1OC0zLjA4MmgzMS43OTYKCQkJQzEyNi4wMjUsMTAxLjUwMiwxMjYuMzM4LDEwMi4wMzYsMTI1Ljk1NiwxMDMuNDM1IE0xMzQuNjAxLDcwLjk3NmwtNS43NzQsMjEuNzc5SDg4LjQ5MmMtOC4wOTgsMC0xMS44MjIsMi42Ni0xMy4yOCw4LjE0NQoJCQlsLTcuODY1LDI5LjgzMmMtMS43NTUsNi43MTIsMC4xMDMsMTAuNzIsOC40NjksMTAuNzJoNTUuMzY3bDE4LjU3MS03MC40NzZIMTM0LjYwMXoiLz4KCQk8cGF0aCBmaWxsPSIjNDM0OTRCIiBkPSJNMjA0LjU0NSwxMDQuMDkybC0zLjIxMSwxMi4yMThoLTM2LjQ5bDMuMDk0LTExLjczMmMwLjYxNy0yLjM4LDEuNDEyLTMuMDc3LDMuNDU5LTMuMDc3aDMxLjI4NgoJCQlDMjA0Ljc0MywxMDEuNTAyLDIwNS4wNDksMTAyLjE0OCwyMDQuNTQ1LDEwNC4wOTIgTTIyMC4wODIsMTAzLjAwMWMxLjU0Mi01Ljk2Mi0wLjI4NS0xMC4yNTQtNy43MTMtMTAuMjU0aC00NC44OAoJCQljLTcuNTY1LDAtMTEuOTk5LDIuMzQxLTEzLjU4Nyw4LjM0OGwtNy44MjQsMjkuNjM1Yy0xLjYwOSw2LjE2OC0wLjg4OCwxMC43MjEsOC42NDgsMTAuNzIxaDU1LjA4OGwyLjIwMi04LjQyOGgtNDkuMjAyCgkJCWMtMS43OCwwLTIuMjA2LTAuNjQtMS42MzktMi43NDZsMS44NzctNy4xMTdsNTEuNzIxLDAuMDE0TDIyMC4wODIsMTAzLjAwMXoiLz4KCTwvZz4KPC9nPgo8L3N2Zz4K);background-repeat:no-repeat;background-size:104% auto;background-position:-12px -10px}.header-left{margin:0 0 0 10px;height:64px;line-height:61px;color:#fff;white-space:nowrap}.header-left h3{color:#efefef;line-height:61px;padding:0;font-size:16px;font-weight:400;margin:0}.logo-area{position:fixed;top:64px;left:0;right:0;z-index:40;height:50px;background-color:#fff}.logo-area .d-wrapper{margin:auto;padding-right:0}.logo-area-left{width:230px;height:49px;font-size:15px;line-height:17px;margin-left:-225px;padding:15px 2px 0 0;overflow:hidden;color:#00497b;word-break:break-all;position:absolute;border-right:1px solid #ccc}.right-shadow{box-shadow:3px 0 5px -4px #ccc}#header .d-wrapper{clear:both;border:1px solid red;width:100%;display:block}@media screen and (max-width:992px){.wps-start-btn{margin-top:10px}}@media screen and (max-width:959px){#header{height:50px}.content-wrapper{min-height:95vh}#footer{min-height:5vh}footer{margin-left:-22px!important;margin-right:-22px!important}.header-left h3{line-height:48px}.brand{height:48px;background:url(/assets/images/header_Bg_44x21.png) no-repeat;padding-left:20px}.brand .logo_wrapper{height:41px;box-shadow:3px 1px 3px rgba(33,42,58,.5)}.brand .vendor_logo{width:145px;height:41px;background-size:104% auto;background-position:-10px -10px}.logo-area{top:50px}}@media screen and (max-width:599px){#header{height:50px}.header-left h3{line-height:48px;font-size:11px}.brand .logo_wrapper{height:41px}.brand .vendor_logo{width:60px;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE1LjAuMiwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyMjBweCIgaGVpZ2h0PSIyMTEuODIxcHgiIHZpZXdCb3g9IjAgMCAyMjAgMjExLjgyMSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIyMCAyMTEuODIxIgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgoJPGc+CgkJPHBhdGggZmlsbD0iIzQzNDk0QiIgZD0iTTEyNS45NTYsMTAzLjQzNWwtNi45NzIsMjYuNTM5Yy0wLjYxLDIuMzUxLTAuODY2LDMuMDgxLTMuMTM4LDMuMDgxSDg0LjAwMQoJCQljLTEuNzA1LDAtMi4wNi0wLjQ3My0xLjU0Ni0yLjMyNmw2Ljg5LTI2LjE0NWMwLjYwNC0yLjQyLDEuMDkyLTMuMDgyLDMuMzU4LTMuMDgyaDMxLjc5NgoJCQlDMTI2LjAyNSwxMDEuNTAyLDEyNi4zMzgsMTAyLjAzNiwxMjUuOTU2LDEwMy40MzUgTTEzNC42MDEsNzAuOTc2bC01Ljc3NCwyMS43NzlIODguNDkyYy04LjA5OCwwLTExLjgyMiwyLjY2LTEzLjI4LDguMTQ1CgkJCWwtNy44NjUsMjkuODMyYy0xLjc1NSw2LjcxMiwwLjEwMywxMC43Miw4LjQ2OSwxMC43Mmg1NS4zNjdsMTguNTcxLTcwLjQ3NkgxMzQuNjAxeiIvPgoJPC9nPgoKPC9zdmc+Cg==);background-size:105% auto;background-position:-9px -11px}}@media screen and (max-width:767px){.header-left{margin-left:0}.content-wrapper{min-height:90vh}#footer{min-height:10vh}}#footer-links a{margin-left:0}#footer-links>li{margin-left:25px;vertical-align:top}#footer-links li.vendor-link{margin-left:0;padding-left:0}@media (max-width:700px){#footer-links{line-height:30px}#footer-links>li{height:20px;line-height:20px;text-align:left}#footer-links>li>a{height:20px;line-height:10px;margin:0;padding:0}}@media (max-width:400px) and (min-height:800px){.content-wrapper{min-height:93vh}#footer{min-height:7vh}}.popover.bigger,.tooltip.bigger{width:175px;font-size:13px}@media (min-width:1200px){#header .d-wrapper,.logo-area .d-wrapper{width:1170px}}@media (max-width:767px){.content-wrapper{padding-top:0;padding-bottom:0}.mobile-only{display:block;margin-bottom:20px}}@media (max-width:1199px){#header .d-wrapper,.container,.logo-area .d-wrapper{width:99%}#header .d-wrapper,.logo-area .d-wrapper{padding-right:0}}.col-sm-offset-vmenu>.row{margin-left:0}.login-form-container{margin-top:80px;background:#fafafa;max-width:430px}.login-form-container .form-group{margin-bottom:10px}.login-form-container .input-info-p{height:15px;margin-top:5px}@media (min-width:320px){.login-form-container{max-width:100%}.col-md-offset-2.login-form-container{margin-left:0}}input.ng-invalid,input.ng-invalid:focus{color:#a94442;border:1px solid #a94442}input[type=checkbox]{margin-right:8px}.caret.caret-reverse{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.alert{margin-bottom:20px;margin-top:20px}.inline-left{display:inline;float:left}.hint-text,.text-hint{font-size:12px;font-style:italic}.form-horizontal .control-label.text-left{text-align:left;padding-right:0}.login-btn{margin-right:15px}.logout-btn span{padding-top:3px}.vmenu{padding:30px 10px 10px 0;border-right:1px solid #cccdcf;background-color:#fff}.col-fixed-vmenu{width:230px;position:fixed;top:114px;overflow:auto;z-index:35;bottom:0}@media (max-width:959px){.col-fixed-vmenu{top:100px}}@media (max-width:767px){.col-fixed-vmenu{top:50px;left:0;padding-left:10px}}@media (min-width:768px){.col-md-offset-2.login-form-container{margin-left:11.5%}.login-form-container{max-width:400px}.col-sm-offset-vmenu{padding-left:230px}}@media (max-width:400px){#footer-links{line-height:20px}#footer-links>li{margin:3px 1% 0}#footer-links>li>a{height:auto}.col-fixed-vmenu{padding-top:10px}}ol.breadcrumb{margin-bottom:0;font-size:18px;line-height:30px;background:#fff;padding-left:40px;float:left;width:auto;z-index:40}.breadcrumb>li+li::before{content:"/";padding:0 7px}.maincontent{padding-left:30px;margin-top:30px;position:relative}.main-wifi-vaps{margin-top:60px}.main-- .alert-container{margin-left:0;width:100%}@media (min-width:768px){.main-- .alert-container{margin-left:11.5%;width:89%}}@media (min-width:992px){.main-- .alert-container{margin-left:11.5%;width:58%}}@media (min-width:1200px){.main-- .alert-container{margin-left:11.5%;width:50%}}.delos-msg,.frame{max-width:960px}.frame .form-horizontal .form-group,.frame .row{margin-left:0;margin-right:0}.nav>li>a{position:relative;display:block;padding:6px 15px}.nav-pills>li>a{border-radius:3px;border-top:2px solid #fff;border-bottom:2px solid #fff;opacity:1;color:#00497b}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover,.nav-pills>li>a:focus,.nav-pills>li>a:hover{color:#00497b;background-color:#eee;border-top:2px solid #eee;border-bottom:2px solid #eee}.nav-pills>li.menu_status.selected>a,.nav-pills>li.menu_status.selected>a:focus,.nav-pills>li.menu_status.selected>a:hover{background-color:#7f8588;border-top:2px solid #7f8588;border-bottom:2px solid #7f8588;color:#fff;opacity:1!important}.nav-pills>li.menu_status.active>a,.nav-pills>li.menu_status.active>a:focus,.nav-pills>li.menu_status.active>a:hover,.nav-pills>li.menu_status>a:hover{background-color:#7f8588;border-top:2px solid #7f8588;border-bottom:2px solid #7f8588;color:#fff;opacity:.4}.nav-pills>li.menu_wifi.selected>a,.nav-pills>li.menu_wifi.selected>a:focus,.nav-pills>li.menu_wifi.selected>a:hover{background-color:#95c11f;border-top:2px solid #95c11f;border-bottom:2px solid #95c11f;color:#fff;opacity:1!important}.nav-pills>li.menu_wifi.active>a,.nav-pills>li.menu_wifi.active>a:focus,.nav-pills>li.menu_wifi.active>a:hover,.nav-pills>li.menu_wifi>a:hover{background-color:#95c11f;border-top:2px solid #95c11f;border-bottom:2px solid #95c11f;color:#fff;opacity:.4}.nav-pills>li.menu_powerline.selected>a,.nav-pills>li.menu_powerline.selected>a:focus,.nav-pills>li.menu_powerline.selected>a:hover{background-color:#8d3345;border-top:2px solid #8d3345;border-bottom:2px solid #8d3345;color:#fff;opacity:1!important}.nav-pills>li.menu_powerline.active>a,.nav-pills>li.menu_powerline.active>a:focus,.nav-pills>li.menu_powerline.active>a:hover,.nav-pills>li.menu_powerline>a:hover{background-color:#8d3345;border-top:2px solid #8d3345;border-bottom:2px solid #8d3345;color:#fff;opacity:.4}.nav-pills>li.menu_lan.selected>a,.nav-pills>li.menu_lan.selected>a:focus,.nav-pills>li.menu_lan.selected>a:hover{background-color:#f39200;border-top:2px solid #f39200;border-bottom:2px solid #f39200;color:#fff;opacity:1!important}.nav-pills>li.menu_lan.active>a,.nav-pills>li.menu_lan.active>a:focus,.nav-pills>li.menu_lan.active>a:hover,.nav-pills>li.menu_lan>a:hover{background-color:#f39200;border-top:2px solid #f39200;border-bottom:2px solid #f39200;color:#fff;opacity:.4}.nav-pills>li.menu_wan.selected>a,.nav-pills>li.menu_wan.selected>a:focus,.nav-pills>li.menu_wan.selected>a:hover{background-color:#c7143d;border-top:2px solid #c7143d;border-bottom:2px solid #c7143d;color:#fff;opacity:1!important}.nav-pills>li.menu_wan.active>a,.nav-pills>li.menu_wan.active>a:focus,.nav-pills>li.menu_wan.active>a:hover,.nav-pills>li.menu_wan>a:hover{background-color:#c7143d;border-top:2px solid #c7143d;border-bottom:2px solid #c7143d;color:#fff;opacity:.4}.nav-pills>li.menu_system.selected>a,.nav-pills>li.menu_system.selected>a:focus,.nav-pills>li.menu_system.selected>a:hover{background-color:#00497b;border-top:2px solid #00497b;border-bottom:2px solid #00497b;color:#fff;opacity:1!important}.nav-pills>li.menu_system.active>a,.nav-pills>li.menu_system.active>a:focus,.nav-pills>li.menu_system.active>a:hover,.nav-pills>li.menu_system>a:hover{background-color:#00497b;border-top:2px solid #00497b;border-bottom:2px solid #00497b;color:#fff;opacity:.4}.nav-sub>li.active>a{color:#00497b;background-color:#eee;border-left:3px solid #fff;border-top:none;border-bottom:none}.nav-pills>li.menu_status.active>ul.nav-sub>li.active>a{border-left:3px solid #6c7479}.nav-pills>li.menu_wifi.active>ul.nav-sub>li.active>a{border-left:3px solid #95c11f}.nav-pills>li.menu_powerline.active>ul.nav-sub>li.active>a{border-left:3px solid #912f46}.nav-pills>li.menu_lan.active>ul.nav-sub>li.active>a{border-left:3px solid #f39200}.nav-pills>li.menu_wan.active>ul.nav-sub>li.active>a{border-left:3px solid #c7143d}.nav-pills>li.menu_system.active>ul.nav-sub>li.active>a{border-left:3px solid #00497b}.nav-sub>li.active>a:focus,.nav-sub>li.active>a:hover{color:#00497b;background-color:#eee;border-left:3px solid #fff;border-top:none;border-bottom:none}.nav-sub>li>a{border-left:3px solid #fff;border-top:none;border-radius:0;border-bottom:none;margin-left:10px;margin-top:4px;margin-bottom:4px;padding:2px 30px}.nav-sub>li>a:focus,.nav-sub>li>a:hover{border-left:3px solid #eee;margin-left:10px;margin-top:4px;margin-bottom:4px;padding:2px 30px;border-top:none;border-radius:0;border-bottom:none}.nav>li.active>.nav-sub{display:inherit}.nav>li>.nav-sub{display:none}a{text-decoration:none;color:#004a7c}table.dataTable th>a{color:#fff}table.dataTable.logs:hover{cursor:default}table.dataTable .vap-edit{margin-right:5px}table.dataTable .vap-edit span{font-size:16px}table.dataTable tr:hover .vap-edit{color:#fff}.vendor-tables table.dataTable td{padding:6px 10px}.vendor-tables table.dataTable tr td,.vendor-tables table.dataTable tr.odd td{background-color:#fff}.vendor-tables table.dataTable tr.even td{background-color:#e0e9ef}.vendor-tables table.dataTable tbody tr.odd:hover td,.vendor-tables table.dataTable tbody tr:hover td{background-color:#fff;color:#434a4f}.vendor-tables table.dataTable tbody tr.even:hover td{background-color:#e0e9ef;color:#434a4f}.vendor-tables table.dataTable.dataTableHighlight tbody tr:hover td{background-color:#0072b4;color:#fff;cursor:pointer}.vendor-tables table.dataTable tbody tr.default-cursor:hover td{cursor:default}.vendor-tables table.dataTable.dataTableHighlight tbody tr.noHighlight:hover td{background-color:#fff;color:#434a4f;cursor:default}.vendor-tables table.dataTable.dataTableHighlight tr.odd.noEditRow td,.vendor-tables table.dataTable.dataTableHighlight tr.odd.noEditRow:hover td{background-color:#fff;cursor:default;color:#aaa;pointer-events:none}.vendor-tables table.dataTable.dataTableHighlight tr.even.noEditRow td,.vendor-tables table.dataTable.dataTableHighlight tr.even.noEditRow:hover td{background-color:#e0e9ef;cursor:default;color:#aaa;pointer-events:none}table.dataTable tr.disabled td,table.dataTable tr.disabled:hover td{color:#979797!important}table.dataTable tr.editedRow td{border-bottom:1px solid #cccdcf;background-color:#8cadc4!important;height:50px}table.dataTable tr.editedRow .vap-edit{color:#fff}.vaptable tr.doedit{cursor:pointer}.vaptable tr.doedit.disabled,.vaptable tr.doedit.editedRow{cursor:default}table.dataTable tr.doedit.noEditRow td,table.dataTable tr.noEditRow td{color:#aaa;opacity:.3;pointer-events:none}table.dataTable tr.doedit.noEditRow,table.dataTable tr.doedit.noEditRow:hover,table.dataTable tr.noEditRow,table.dataTable tr.noEditRow:hover{pointer-events:none!important}table.dataTable tr td.empty-logs-list,table.dataTable tr td.empty-vaps-list{height:40px;font-size:16px}table.dataTable tr td.allowed-vaps-number{padding:5px;pointer-events:none}table.dataTable tr td .hint{color:#aaa}.vendor-tables label{font-weight:700;color:#333;font-size:13px;padding-top:7px}table.dataTable tbody.vap-rows-wrapper{cursor:default!important;min-width:100px}table.dataTable tbody.vap-rows-wrapper:hover tr.vap-additional-settings td{background-color:#fff!important;color:#333}table.dataTable tbody.vap-rows-wrapper:hover tr.editedRow td{color:#333!important;background-color:#8cadc4!important}td.vap-edit-cell{width:25px}table.dataTable td.vap-edit-cell .vap-edit:hover{color:#004a7c}table.dataTable td.vap-edit-cell{border-left:0}table.dataTable tbody.vap-rows-wrapper tr.vap-additional-settings td .vap-edit.disabled,table.dataTable tbody.vap-rows-wrapper tr.vap-additional-settings td .vap-edit.disabled:hover{color:#ccc}table.dataTable tbody.vap-rows-wrapper button.vap-edit{background-color:transparent;border:none;padding:0}table.dataTable tr.vap-additional-settings,table.dataTable tr.vap-additional-settings td{cursor:default!important}.vap-additional-settings-wrapper .form-group{margin:0}.vap-additional-settings-wrapper{padding-top:10px}.vap-additional-settings-wrapper .additional-left{margin-left:10px;float:left;text-align:right}.vap-additional-settings-wrapper .additional-right{width:400px;float:left;margin-left:10px}.vap-additional-settings-wrapper .additional-right .input-group{width:239px}.vap-additional-settings-wrapper label.maxassoc-label{text-align:right}.vap-additional-settings-wrapper label.key-label{padding-left:0}@media (max-width:810px){.vap-additional-settings-wrapper label.maxassoc-label{text-align:left}.vap-additional-settings-wrapper label.key-label,.vap-additional-settings-wrapper label.maxassoc-label{padding-left:0}.vap-additional-settings-wrapper label.key-label{padding-right:15px}}@media (max-width:767px){.maincontent,ol.breadcrumb{padding-left:0}.vap-additional-settings-wrapper label.maxassoc-label{text-align:left}.vap-additional-settings-wrapper label.key-label,.vap-additional-settings-wrapper label.maxassoc-label{padding-left:15px}}table.dataTable tbody.vap-rows-wrapper button.vap-edit.disabled{color:#cecece}table.dataTable tbody.vap-rows-wrapper .form-control.edit-encryption,table.dataTable tbody.vap-rows-wrapper .form-control.edit-radio,table.dataTable tbody.vap-rows-wrapper .form-control.edit-ssid,table.dataTable tbody.vap-rows-wrapper .form-control.vlan-id{width:100%}table.dataTable tbody.vap-rows-wrapper .form-control.edit-encryption.error,table.dataTable tbody.vap-rows-wrapper .form-control.edit-ssid.error{border-color:#a94442}.vendor-tables .dataTable{margin-bottom:5px}.vendor-tables .dataTable.overview-bubble tbody tr:hover td{background-color:#fafafa;color:#434a4f;cursor:auto}.vendor-tables .dataTable.overview-bubble tbody tr td{background-color:#fafafa;color:#434a4f;cursor:auto;padding:0 2px}.vendor-tables .dataTable.overview-bubble tbody tr:last-child td{height:10px}.vendor-tables table.dataTable.overview-bubble td{border-left:0;color:#434a4f}.vendor-tables table.dataTable.overview-bubble td:first-child{border-left:1px solid #cccdcf;color:#434a4f}.vendor-tables table.dataTable tbody tr:last-child td:first-child{border-bottom-left-radius:0}.vendor-tables table.dataTable tbody tr:last-child td:last-child{border-bottom-right-radius:0}.vendor-tables table.dataTable tbody:last-child tr:last-child td:first-child{border-bottom-left-radius:5px}.vendor-tables table.dataTable tbody:last-child tr:last-child td:last-child{border-bottom-right-radius:5px}table.dataTable tbody tr{background-color:#fafafa}table.dataTable hr{border-top:2px solid #eee;margin:8px 10px 2px}table.dataTable hr.row-separator{border-top:1px solid #eee;margin:2px 10px}.vendor-tables .dataTable.overview-bubble h5{margin-bottom:5px;font-weight:600}.vendor-tables .dataTable thead th{background-color:#00497b;font-weight:600;padding:8px 10px 7px 12px}.vendor-tables .dataTable thead th:only-child{border-radius:4px 4px 0 0}.vendor-tables .dataTable.wan-status thead th:only-child{background-color:#6c7479!important;border-right:1px solid #6c7479;border-left:1px solid #6c7479;border-bottom:4px solid #c7143d}.vendor-tables .dataTable.wifi-status thead th:only-child{background-color:#6c7479!important;border-right:1px solid #6c7479;border-left:1px solid #6c7479;border-bottom:4px solid #95c11f}.vendor-tables .dataTable.lan-status thead th:only-child{background-color:#6c7479!important;border-right:1px solid #6c7479;border-left:1px solid #6c7479;border-bottom:4px solid #f39200}.vendor-tables .dataTable.dlan-status thead th{background-color:#6c7479!important;border-right:1px solid #6c7479;border-left:1px solid #6c7479;border-bottom:4px solid #912f46}.vendor-tables .dataTable.system-status thead th:only-child{background-color:#6c7479!important;border-right:1px solid #6c7479;border-left:1px solid #6c7479;border-bottom:4px solid #00497b}table.wifi-data-rates td:not(.left-align){text-align:center}table.wifi-data-rates td.left-align{text-align:left}table.wifi-data-rates input[type=checkbox]{margin:0}.filter-row div{padding:0}.filter-row div.displayed-entires{padding:7px 0 0 10px;color:#ccc}.vendor-tables .dataTables_filter input{padding:4px 12px;margin-left:0;width:100%}.vendor-tables .dataTables_filter label{padding-top:3px}.btn-group .btn-default{min-width:auto}.vendor-dialogs form:after,.vendor-dialogs:after{content:' ';display:table;clear:both}.vendor-dialogs{margin-bottom:20px}.vendor-dialogs h3,.vendor-dialogs h3.page-header,.vendor-dialogs h3:first-child.not-first-child,.vendor-dialogs h3:first-child.page-header.not-first-child,.vendor-dialogs h4,.vendor-dialogs h4.page-header,.vendor-dialogs h4:first-child.not-first-child,.vendor-dialogs h4:first-child.page-header.not-first-child{padding-left:0;padding-bottom:5px;margin:30px 0 15px;border-bottom:1px solid #eee}.vendor-dialogs h2.no_margin,.vendor-dialogs h3.no_margin,.vendor-dialogs h4.no_margin{margin-top:0}.vendor-dialogs h5,.vendor-dialogs h6{font-weight:700}.vendor-dialogs p{margin:20px 0 0}.vendor-dialogs p.no-margin{margin:0}.vendor-dialogs .form-group{margin:10px 0;padding-top:3px}.vendor-dialogs .form-group label.disabled{color:#6c7479!important}.vendor-dialogs #wifiRadio .form-group{margin:0 0 15px}.lan-color,.lan-color a{color:#f39200}.wan-color,.wan-color a{color:#c7143d}.wifi-color,.wifi-color a{color:#95c11f}.dlan-color,.dlan-color a{color:#912f46}.system-color,.system-color a{color:#00497b}.lang-dropdown-pos .lingua-btn{border-radius:2px}.lang-dropdown-pos .dropdown-menu-right li a:hover{background:#eee!important;color:#00497b!important}.lang-dropdown-pos .dropdown-toggle{box-shadow:none!important}.lang-dropdown-pos.open .dropdown-toggle{box-shadow:none!important;background:#efefef!important}#footer .lang-dropdown-pos{margin-top:0}#footer .lang-dropdown-pos .dropdown-menu{top:auto;right:auto;bottom:100%;margin-bottom:2px}#footer .lang-dropdown-pos .dropdown-menu li{margin-left:5px}#footer .lang-dropdown-pos .dropdown-menu li a{color:#434a4f}.lang{background-position:0 0;min-width:17px;height:16px;min-height:17px;max-height:16px;background-repeat:no-repeat;display:inline-block;background-image:url(/assets/images/icons.png)}.lang[lang=it]{background-position:1px 1px}.lang[lang=nl]{background-position:1px -23px}.lang[lang=es]{background-position:1px -45px}.lang[lang=en]{background-position:1px -67px}.lang[lang=de]{background-position:1px -90px}.lang[lang=fr]{background-position:1px -113px}.lang[lang=pt]{background-position:1px -136px}.dropdown-menu .lang{padding-left:24px}.row-centered{text-align:center}.col-centered{display:inline-block;float:none;text-align:center;margin-right:-4px}.lang-dropdown-pos,.logout-btn,.toggle-menu-btn{margin-top:12px}.btn.toggle-menu-btn{background-color:transparent;color:#fff;font-size:15px;box-shadow:none}.btn.toggle-menu-btn:hover{color:#efefef}.lingua-btn{margin-right:10px}.lingua-btn,.logout-btn{background-color:transparent;padding:0 3px}@font-face{font-family:delosicons;font-style:normal;font-weight:400;src:url(/assets/fonts/delos.eot);src:url(/assets/fonts/delos.eot?#iehack) format("embedded-opentype"),url(/assets/fonts/delos.woff2) format("woff2"),url(/assets/fonts/delos.woff) format("woff"),url(/assets/fonts/delos.ttf) format("truetype")}.menu-icon{font-family:delosicons;width:20px;height:20px}.breadcrumb-icon:first-child:before{font-family:delosicons;width:20px;height:20px;font-size:16px;margin-right:9px!important}.col-fixed-vmenu .glyphicon:before,.menu-icon:before{padding-right:7px}.menu-icon-overview:before{content:"\e604";margin-left:-1px}.menu-icon-lan:before{content:"\e603"}.menu-icon-powerline:before{content:"\e600"}.menu-icon-wan:before{content:"\e6cb"}.menu-icon-wifi:before{content:"\e601";margin-left:-2px;margin-right:2px}.menu-icon-system:before{content:"\e602";margin-left:-1px;margin-right:1px}.menu-icon-edit:before{content:"\e609"}.menu-icon-cross:before{content:"\e70f"}.menu-icon-checkmark:before{content:"\e710"}.menu-icon-delete:before{content:"\e6ae"}.status-icon{font-size:25px;width:40px;height:40px}.color-link{color:#95c11f}.color-no-link{color:#00497b}.lan-status .control-label.text-left{text-align:left}.lan-status .form-control:focus{border-color:#95c11f}.lan-status .btn-primary{background:#87ab0b;background:linear-gradient(to bottom,#87ab0b 0,#87ab0b 51%,#97bf0d 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#87ab0b', endColorstr='#97bf0d', GradientType=0);border-color:#95c11f}.btn-default.small{min-width:inherit}.lan-status .btn-primary:focus,.lan-status .btn-primary:hover{background:#97bf0d}.lan-status .btn-primary:active{border-color:#87ab0b}.delos-spinner{font-size:20px;color:#434a4f;margin-right:4px}.fast-right-spinner{-webkit-animation:1s linear infinite glyphicon-spin-r;animation:1s linear infinite glyphicon-spin-r}@-webkit-keyframes glyphicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes glyphicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.one-line{overflow:ellipsis;white-space:nowrap}.modal{z-index:2050}.modal-backdrop{z-index:2000}.modal-header h3{margin-bottom:0}.modal-body{padding-top:25px}.modal-content{border-radius:3px}@media (max-width:991px){.small-font-md{font-size:8px}}.inline{display:inline}.inline-table{display:inline-table}#header .btn-primary{padding:0 12px;border-radius:3px;height:25px}.btn-primary{height:30px;border-radius:2px;padding-bottom:2px}.timeView .form-group{margin:10px 0}.input-group .btn-default{min-width:auto}.bg-info{background-color:#bfd2de;border-radius:5px}.login-error-msg,.login-msg{margin-bottom:25px;margin-top:10px;text-align:center}.login-error-msg{color:#c7143d}.maincontent-loading-wrapper{background-color:#fff;color:#00497b;opacity:1;position:fixed;top:0;bottom:0;left:0;right:100%;width:100%;height:100%;z-index:30;padding-left:55%;overflow:hidden;text-align:left}@media (max-width:768px){.filter-row>.text-right .btn-default{margin-top:6px}.maincontent-loading-wrapper{text-align:center;padding-left:0}}.maincontent-loading-wrapper .delos-spinner{color:#00497b;margin-top:55%;display:inline-block}.management .form-group,.snmp .form-group{min-height:66px;padding-top:0;margin:0}.vendor-tables table.dataTable{cursor:default}.vendor-tables table.dataTable td button.remove-icon-button{min-width:46px}.vendor-tables table.timetable td{padding:0}.vendor-tables table.timetable .server-view{padding:7px 10px}.vendor-tables tr .server-edit-settings,.vendor-tables tr:hover .server-edit-settings{background-color:#8cadc4;padding:20px;margin:0}.vendor-tables tr .server-edit-buttons,.vendor-tables tr:hover .server-edit-buttons{background-color:#fafafa;padding:15px 20px;margin:0;border-bottom:1px solid #cccdcf}.vendor-tables table.timetable tr.disabled-row,.vendor-tables table.timetable tr:hover.disabled-row .vendor-tables table.timetable tr:hover.disabled-row,.vendor-tables table.timetable tr:hover.disabled-row div.server-view .vendor-tables table.timetable tr.disabled-row div.server-view{opacity:.3!important;pointer-events:none!important;cursor:default!important}.vendor-tables table.timetable .empty-vaps-list{border-bottom:1px solid #ccc;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.vendor-dialogs .dl-horizontal dd,.vendor-dialogs .dl-horizontal dt{line-height:2em;text-align:left}.vendor-tables .services-edit-buttons{padding:15px 20px;margin:0}table.dataTable#foundServices tr.editedRow.disabled td{color:#333!important}.vendor-tables tr td.dlanDevice-add-new-settings{padding:0}.vendor-tables tr .dlanDevice-edit-settings,.vendor-tables tr:hover .dlanDevice-edit-settings{background-color:#8cadc4;padding:20px 20px 50px;margin:0}.form-control.securityId{width:70px;display:inline-block;text-align:center;padding-left:7px;padding-right:7px}.sequrityId-label{margin-right:10px}.dashboard .widget-wrapper-12,.dashboard .widget-wrapper-6{position:relative;float:left;margin-bottom:30px}.dashboard .widget,.dashboard .widget-wrapper-12,.dashboard .widget-wrapper-6{height:300px}.widget-head{height:35px}.widget-footer{height:25px}.dashboard .widget-wrapper-6{width:50%;padding:0 15px}.dashboard .widget-wrapper-12{width:100%}.widget-head a,.widget-head a:hover{color:#333;display:block;text-decoration:none}.dashboard .widget-container>div:nth-child(odd) .widget-wrapper-6{padding-left:0}.dashboard .widget-container>div:nth-child(even) .widget-wrapper-6{padding-right:0}@media (max-width:1000px){.dashboard .widget-container .widget-wrapper-6{width:100%;padding-right:0;padding-left:0}}.dashboard .widget{height:290px;z-index:1;box-shadow:0 0 4px #dfdfdf}.dashboard .widget-expanded{position:absolute;z-index:39}.widget-wrapper-6 .widget.widget-expanded{width:96.6%}.widget.widget-expanded .widget-footer{margin-bottom:50px}.widget-wrapper-12 .widget.widget-expanded{width:100%}.widget-expanded .widget-body{height:auto;overflow-y:auto}@media (max-width:1000px){.dashboard .widget-container .widget-wrapper-6{z-index:1}.widget-expanded .widget-body{max-height:260px}.widget-wrapper-6 .widget.widget-expanded{width:100%}}.widget-body,.widget-footer,.widget-head{border:1px solid #cccdcf;padding:3px}.widget-head{background-color:#fafafa;color:#333;border-top-left-radius:4px;border-top-right-radius:4px;padding-left:12px;line-height:25px;font-weight:700}.panel .widget-head{border:none;border-bottom:1px solid #cccdcf}.login-form-container .widget-head{border:1px solid #0072b4;background-color:#0072b4;color:#fff}.wifi-status .widget-head{border-bottom:1px solid #95c11f}.lan-status .widget-head{border-bottom:1px solid #f39200}.wan-status .widget-head{border-bottom:1px solid #c7143d}.dlan-status .widget-head{border-bottom:1px solid #912f46}.system-status .widget-head{border-bottom:1px solid #00497b}.wifi-status .widget-head a{color:#95c11f}.lan-status .widget-head a{color:#f39200}.wan-status .widget-head a{color:#c7143d}.dlan-status .widget-head a{color:#912f46}.system-status .widget-head a{color:#00497b}.widget-head a{font-weight:400;font-size:18px}.widget-body h5 a,.widget-body h5 span{color:#333}.widget-body{height:235px;border-top:none;border-bottom:none;background-color:#fff;overflow:hidden;padding:3px 12px;color:#434a4f}.widget-footer{border-top:none;background-color:#fff;color:#7f8588;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding-right:4px;text-align:top}.widget-footer .glyphicon{cursor:pointer}.widget-body dl{margin:0}.widget-body hr{margin:10px 0 0}.widget-body h5{font-weight:700;font-size:13px;margin:10px 0}.widget-body dd,.widget-body dt{float:left;font-size:13px;font-weight:400}.config-msg,.widget-body dd,.widget-body dt{padding-left:10px}.widget-body dt{width:48%}.widget-body dd{width:52%}html:lang(fr) .widget-body dt{width:65%}html:lang(fr) .widget-body dd{width:35%}.main-lan-status .dl-horizontal dt,.main-system-status .dl-horizontal dt,.radius-server-stat .dl-horizontal dt,.support-dlg .dl-horizontal dt{clear:left;float:left;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:270px}.main-system-status .dl-horizontal dd,.radius-server-stat .dl-horizontal dd{margin-left:270px}.support-dlg .dl-horizontal dt{width:300px}.support-dlg .dl-horizontal dd{margin-left:300px}.main-dlan-status .dl-horizontal dt{width:auto;margin-right:10px}.main-dlan-status .dl-horizontal dd{margin-left:0}.main-system-firmware .dl-horizontal dt{width:240px;line-height:1.3em;white-space:normal}.main-system-firmware .dl-horizontal dd{margin-left:250px}dd.ipv6-address{width:100%;margin-left:10px;display:block}@media screen and (max-width:400px){.content-wrapper>div{padding:0 5px}.maincontent .dl-horizontal dt{float:none;display:block;overflow:visible;text-align:left;text-overflow:none;white-space:normal}.maincontent .dl-horizontal dd{margin-left:0;padding-bottom:20px}}#foundVlans .icon-td,#vlansList .icon-td{text-align:center}.table-responsive{border:0}@media screen and (max-width:600px){.table-responsive{width:100%;padding:0 1px 0 0}.vendor-tables table.vendorTable-responsive{border-collapse:collapse!important}.vendor-tables table.dataTable.vendorTable-responsive tbody tr:last-child td,.vendor-tables table.dataTable.vendorTable-responsive td:last-child,.vendor-tables table.vendorTable-responsive td{border:none}.vendor-tables table.dataTable.vendorTable-responsive tbody tr:last-child td:last-child{border-bottom:none;border-radius:0}table.vendorTable-responsive{border-collapse:collapse!important}table.vendorTable-responsive td:before{content:attr(data-label);float:left;width:100px;text-align:left;font-weight:700}table.vendorTable-responsive tr{border:1px solid #ccc}table.vendorTable-responsive th{display:none}.vendor-tables table.dataTable.vendorTable-responsive tbody tr:last-child td,.vendor-tables table.vendorTable-responsive td{display:block;font-size:12px;border-bottom:1px dotted #ccc}table.vendorTable-responsive td div.td-content{float:right;width:60%;overflow-x:auto}table.vendorTable-responsive td div.td-content .text-center{text-align:left}.vendor-tables table.dataTable.vendorTable-responsive tbody tr:last-child td:first-child{border-radius:0}table.vendorTable-responsive td:last-child{border-bottom:0}table.dataTable tr td.empty-logs-list{height:19px}#foundVlans .icon-td,#vlansList .icon-td{text-align:left}}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:1px solid #ddd}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:1px solid #ddd}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:1px solid #ddd}.file-upload-group{white-space:nowrap;position:relative}.file-upload-group label{background-color:#f5f5f5;background-image:none;border:1px solid #cccdcf;border-radius:2px;box-shadow:none;text-align:center;font-weight:400;color:#434a4f;font-size:14px;height:30px;line-height:30px;float:left;width:auto;padding-left:15px;padding-right:15px;padding-top:0!important;cursor:pointer}.file-upload-group input{display:none}.file-upload-group label:focus,.file-upload-group label:hover{background-color:#f8f8f8;background-image:none;border:1px solid #b9b9b9}.file-upload-group div.uploaded-file{float:left;padding-left:10px;width:auto;line-height:30px}.matrix-table{border:1px solid #ccc;margin-top:20px;width:100%}.matrix-table td,.matrix-table th{padding:4px;border:1px solid #ccc}.matrix-table thead th{background-color:#f3f3f3;height:4.3em;padding:2px}.matrix-table th.th-vlan-name{vertical-align:bottom;font-size:12px}.matrix-table div.rotate{-webkit-transform-origin:top left;transform-origin:top left;-webkit-transform:rotate(300deg) translate(-1em,-.3em);transform:rotate(300deg) translate(-1em,-.3em);margin-left:50%;width:4.7em;height:1.2em;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width:500px){.matrix-table div.rotate{-webkit-transform:rotate(300deg) translate(-1em,-.2em);transform:rotate(300deg) translate(-1em,-.2em)}}.matrix-table div.rotate:hover{cursor:help}.matrix-table th.th-vlan-name,td.td-checkbox{text-align:center;min-width:40px;overflow-x:hidden}.matrix-table td.td-checkbox input{margin:0 auto}.range-wrapper{width:360px;margin-top:20px}.range-scala{font-size:11px;color:#ccc;position:relative;height:19px;min-height:19px}.range-scala p{position:absolute;top:0;margin:0;cursor:pointer}.range-scala p:nth-child(2){left:28px}.range-scala p:nth-child(3){left:172px}.range-scala p:nth-child(4){left:340px}.range-scala p:after{content:attr(data-label)}.buzzer-btns,.buzzer-progress{margin-top:20px}@media (max-width:400px){.range-wrapper{width:100%}.range-scala p:nth-child(2){left:8%}.range-scala p:nth-child(3){left:47.5%}.range-scala p:nth-child(4){left:94%}}.macaddr,.uppercase{text-transform:uppercase}.toggle-menu-btn:focus,.toggle-menu-btn:hover{color:#fff}.leds-dialog .form-group label{min-width:100px}.leds-dialog .btn-primary.active.focus,.leds-dialog .btn-primary.active:focus,.leds-dialog .btn-primary.active:hover,.leds-dialog .btn-primary.focus:active,.leds-dialog .btn-primary:active:focus,.leds-dialog .btn-primary:active:hover,.leds-dialog .open>.dropdown-toggle.btn-primary.focus,.leds-dialog .open>.dropdown-toggle.btn-primary:focus,.leds-dialog .open>.dropdown-toggle.btn-primary:hover{background-color:#265f93!important;border-color:#0072b4;color:#fff!important}.buttons-dialog .form-group label{min-width:100px}.buttons-dialog .btn-primary.active.focus,.buttons-dialog .btn-primary.active:focus,.buttons-dialog .btn-primary.active:hover,.buttons-dialog .btn-primary.focus:active,.buttons-dialog .btn-primary:active:focus,.buttons-dialog .btn-primary:active:hover,.buttons-dialog .open>.dropdown-toggle.btn-primary.focus,.buttons-dialog .open>.dropdown-toggle.btn-primary:focus,.buttons-dialog .open>.dropdown-toggle.btn-primary:hover{background-color:#265f93!important;border-color:#0072b4;color:#fff!important}.form-horizontal .control-label.checkbox-control-label{padding-top:0}.timetable_legend div{float:left;margin:10px 10px 5px 0}.timetable_legend div:before{content:' ';width:15px;height:15px;display:inline-block;margin-right:5px;margin-bottom:-3px;border:1px solid #dfdfdf}.timetable_legend div.wifi_on:before{background-color:#95c11f}.timetable_legend div.wifi_off:before{background-color:rgba(0,0,0,.05)}.timetable_container{margin-top:50px}.timetable_container *{box-sizing:border-box}.timetable_container .day{width:14.23%;float:left;text-align:center;background:url(/assets/images/timeline_4b.svg) bottom left/contain no-repeat;position:relative;padding-bottom:1.2%}.timetable_container .day p{margin:0}.timetable_container .day .day-label-short{display:none}@media screen and (max-width:860px){.timetable_container .day .day-label-short{display:inline-block}.timetable_container .day .day-label-full{display:none}}.timetable_container .day .status{border-top:1px solid #999;border-left:1px solid #999;width:100%;height:50px;background-color:rgba(0,0,0,.05)}.timetable_container .day:last-child .status{border-right:1px solid #999}.timetable_container .status_on{background-color:rgba(151,191,13,.5);height:48px;position:absolute}table.time_control tbody.even td{background-color:#e0e9ef}table.time_control tbody.even tr.controls td{background-color:#fff}table.time_control .new_entry tr.noHighlight td,table.time_control tr.noHighlight.edit_row td{background:#8cadc4!important;padding-top:20px;padding-bottom:20px}table.time_control .new_entry tr:hover table.time_control tr.edit_row:hover td,table.time_control .new_entry tr:hover td,table.time_control tr.edit_row:hover{background:#8cadc4}table.time_control .new_entry tr.noHighlight.controls td{background:#fff!important;padding-top:5px;padding-bottom:10px}table.time_control .error_messages p{color:red;text-align:right;margin-top:5px;font-size:12px}#day_0 .friday,#day_0 .saturday,#day_0 .sunday,#day_0 .thursday,#day_0 .tuesday,#day_0 .wednesday,#day_0 .weekend,#day_1 .friday,#day_1 .monday,#day_1 .saturday,#day_1 .sunday,#day_1 .thursday,#day_1 .wednesday,#day_1 .weekend,#day_2 .friday,#day_2 .monday,#day_2 .saturday,#day_2 .sunday,#day_2 .thursday,#day_2 .tuesday,#day_2 .weekend,#day_3 .friday,#day_3 .monday,#day_3 .saturday,#day_3 .sunday,#day_3 .tuesday,#day_3 .wednesday,#day_3 .weekend,#day_4 .monday,#day_4 .saturday,#day_4 .sunday,#day_4 .thursday,#day_4 .tuesday,#day_4 .wednesday,#day_4 .weekend,#day_5 .business,#day_5 .friday,#day_5 .monday,#day_5 .sunday,#day_5 .thursday,#day_5 .tuesday,#day_5 .wednesday,#day_6 .business,#day_6 .friday,#day_6 .monday,#day_6 .saturday,#day_6 .thursday,#day_6 .tuesday,#day_6 .wednesday{display:none}table.time_control tr.disabled_row,table.time_control tr.disabled_row td{pointer-events:none!important}table.time_control tr.disabled_row td{opacity:.5!important}table.time_control tbody:last-child td{border-bottom:1px solid #ccc}table.time_control tbody:last-child{border-radius:4px}.time-control-group select{float:left;width:47%;min-width:38px;max-width:60px;padding-right:0!important;padding-left:0!important}.time-control-group select:first-child{margin-right:4px}.daysofweek_wrapper select.singleday{width:48.5%;padding-left:2px!important;padding-right:0!important;float:left}@media screen and (max-width:400px){.daysofweek_wrapper select.singleday{width:99%}.sequrityId-label{margin-right:0;display:block;text-align:left}}.daysofweek_wrapper select:first-child.singleday{margin-right:5px}.wps_controls{margin:20px 0}.wps_controls input[type=radio]{margin-right:7px}.wps-start-btn{min-width:70px}.fake-control{display:inline-block;padding:7px 0}.tx-wrapper{margin-top:6px}button.btn[disabled],button.btn[disabled]:hover{background-color:#e0e0e0;background-image:none}.mobile-logout{border-top:1px solid #ccc}.mobile-logout .glyphicon{margin-right:-4px}.delos-float-action{position:fixed;background:#0072b4;color:#fff;width:56px;line-height:56px;height:56px;border-radius:28px;border:1px solid transparent;box-shadow:2px 3px 5px rgba(0,0,0,.4);transition:background .5s;outline:0;z-index:1000;text-align:center;padding:0}.delos-float-action[disabled]{opacity:.4;cursor:default;pointer-events:none}.delos-float-action:hover{background:#00497b}.delos-float-action .glyphicon{font-size:24px;line-height:24px;width:24px;height:24px;margin:auto;display:block}.delos-float-cancel{right:20%;bottom:125px}.delos-float-save{right:20%;bottom:60px;padding-left:3px}@media screen and (max-width:2000px){.delos-float-cancel,.delos-float-save{right:13%}}@media screen and (max-width:1700px){.delos-float-cancel,.delos-float-save{right:5%}}@media (min-width:1001px) and (max-width:1390px){.maincontent.col-xs-12{width:92%}.delos-float-cancel,.delos-float-save{bottom:60px;right:2%}.delos-float-cancel{bottom:127px}}@media screen and (max-width:1000px){.delos-float-action{width:40px;line-height:40px;height:40px;border-radius:20px}.delos-float-action .glyphicon{font-size:20px;line-height:20px;width:20px;height:20px}.delos-float-cancel,.delos-float-save{bottom:75px}.delos-float-save{right:24px}.delos-float-cancel{right:70px}.vendor-tables .dataTable{margin-bottom:55px}}@media screen and (min-width:701px) and (max-width:1000px){.delos-float-cancel,.delos-float-save{bottom:55px}}@media screen and (max-width:400px){.delos-float-cancel,.delos-float-save{bottom:110px}}@media screen and (max-width:500px) and (-webkit-min-device-pixel-ratio:0){input,select,textarea{font-size:16px!important}}.pointer{cursor:pointer}.no-row-paddings,.no-row-paddings div{padding:0}.no-margin-top{margin-top:0}.tiny-margin-left{margin-left:10px}.small-paddings{padding:15px}.small-padding-left{padding-left:15px!important}.small-padding-right{padding-right:15px!important}.small-margin-top{margin-top:15px}.small-margin-left{margin-left:15px}.small-margin-bottom{margin-bottom:15px}.clearfix{clear:both}.guest-timeout-warning{color:#00497b}@media print{.col-fixed-vmenu,.logo-area .float-right{display:none!important}.col-sm-offset-vmenu,.maincontent{padding:0}#footer{position:static;left:auto;bottom:auto;line-height:20px}.logo-area-left{padding:0;margin:0;position:static;width:auto;height:auto;border:none}.dashboard .widget-wrapper-6{padding-right:10px}ol.breadcrumb{float:none;padding:0}#footer-links li{margin-left:0}#footer-links li a{color:#ccc}a:link:after,a:visited:after{content:""}}
\ No newline at end of file