Binary files /image.org/bin/nano and /image/bin/nano differ
Binary files /image.org/bin/rnano and /image/bin/rnano differ
Binary files /image.org/bin/stty and /image/bin/stty differ
diff -ruN /image.org/etc/crontabs/root /image/etc/crontabs/root
--- /image.org/etc/crontabs/root	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/crontabs/root	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1 @@
+*/5 * * * * /usr/local/bin/rrlogclean.sh  >> /mnt/data/rockrobo/rrlog/lclean.log 2>&1
diff -ruN /image.org/etc/hosts /image/etc/hosts
--- /image.org/etc/hosts	2018-08-17 12:56:27.000000000 +0300
+++ /image/etc/hosts	2023-07-31 03:34:14.000000000 +0300
@@ -5,3 +5,12 @@
 ff02::1         ip6-allnodes
 ff02::2         ip6-allrouters
 
+0.0.0.0         cdn.awsbj0.fds.api.mi-img.com
+0.0.0.0         cdn.awsde0.fds.api.mi-img.com
+0.0.0.0         cdn.cnbj2.fds.api.mi-img.com
+0.0.0.0         cdn.awssgp0.fds.api.mi-img.com
+0.0.0.0         cdn.awsusor0.fds.api.mi-img.com
+0.0.0.0         cdn.cnbj1.fds.api.mi-img.com
+0.0.0.0         cdn.cnbj0.fds.api.mi-img.com
+0.0.0.0         cdn.ksyru0-eco.fds.api.mi-img.com
+0.0.0.0         cdn.awsind0-eco.fds.api.mi-img.com
diff -ruN /image.org/etc/init/S00mounted-dev /image/etc/init/S00mounted-dev
--- /image.org/etc/init/S00mounted-dev	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/init/S00mounted-dev	2020-03-10 13:17:17.000000000 +0300
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+curtime=`cat /proc/uptime | awk -F ' ' '{print $1}'`
+
+load() {
+    echo "[$curtime] Populate /dev filesystem" 
+    [ -e /dev/shm ] || ln -s /run/shm /dev/shm
+    cd /dev 
+    /sbin/MAKEDEV std fd
+}
+
+case "$1" in
+    start)
+        load
+        ;;
+    stop)
+        ;;
+    restart)
+        ;;
+    *)
+        echo "$0 <start/stop/restart>"
+        ;;
+esac
+
diff -ruN /image.org/etc/init/S05crond /image/etc/init/S05crond
--- /image.org/etc/init/S05crond	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/init/S05crond	2020-02-10 18:04:39.000000000 +0300
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+load() {
+    curtime=`cat /proc/uptime | awk -F ' ' '{print $1}'`
+    echo "[$curtime] start crond"
+    mkdir -p /etc/crontabs
+    start-stop-daemon -S -b -q -m -p /var/run/crond.pid -x /usr/sbin/crond -- -f
+}
+
+unload() {
+    echo "Stopping crond" >/dev/kmsg
+    start-stop-daemon -K -q -p /var/run/crond.pid
+}
+
+case "$1" in
+    start)
+        load
+        ;;
+    stop)
+        unload
+        ;;
+    restart)
+        unload
+        load
+        ;;
+    *)
+        echo "$0 <start/stop/restart>"
+        ;;
+esac
+
diff -ruN /image.org/etc/init/S09snmpd /image/etc/init/S09snmpd
--- /image.org/etc/init/S09snmpd	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/init/S09snmpd	2020-02-10 18:05:14.000000000 +0300
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+load() {
+    curtime=`cat /proc/uptime | awk -F ' ' '{print $1}'`
+    echo "[$curtime] start snmpd"
+    start-stop-daemon -S -b -q -m -p /var/run/snmpd.pid -x /usr/bin/snmpd -- -f
+}
+
+unload() {
+    echo "Stopping snmpd" >/dev/kmsg
+    start-stop-daemon -K -q -p /var/run/snmpd.pid
+}
+
+case "$1" in
+    start)
+        load
+        ;;
+    stop)
+        ;;
+    restart)
+        unload
+        load
+        ;;
+    *)
+        echo "$0 <start/stop/restart>"
+        ;;
+esac
+
diff -ruN /image.org/etc/init/S10rc_local /image/etc/init/S10rc_local
--- /image.org/etc/init/S10rc_local	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/init/S10rc_local	2020-02-10 18:05:10.000000000 +0300
@@ -0,0 +1,38 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          rc.local
+# Required-Start:    $all
+# Required-Stop:
+# Default-Start:     2 3 4 5
+# Default-Stop:
+# Short-Description: Run /etc/rc.local if it exist
+### END INIT INFO
+
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+
+do_start() {
+    if [ -x /etc/rc.local ]; then
+        [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
+        /etc/rc.local
+        ES=$?
+        [ "$VERBOSE" != no ] && log_end_msg $ES
+        return $ES
+    fi
+}
+
+case "$1" in
+    start)
+        do_start
+        ;;
+    restart|reload|force-reload)
+        echo "Error: argument '$1' not supported" >&2
+        exit 3
+        ;;
+    stop)
+        ;;
+    *)
+        echo "Usage: $0 start|stop" >&2
+        exit 3
+        ;;
+esac
diff -ruN /image.org/etc/init/S12soundserver /image/etc/init/S12soundserver
--- /image.org/etc/init/S12soundserver	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/init/S12soundserver	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+load() {
+    curtime=`cat /proc/uptime | awk -F ' ' '{print $1}'`
+    echo "[$curtime] start sound server"
+    start-stop-daemon -S -b -q -m -p /var/run/sox.pid -x /usr/local/bin/sound_server.pl
+}
+
+unload() {
+    echo "Stopping sound server" >/dev/kmsg
+    start-stop-daemon -K -q -p /var/run/sox.pid
+}
+
+case "$1" in
+    start)
+        load
+        ;;
+    stop)
+        unload
+        ;;
+    restart)
+        unload
+        load
+        ;;
+    *)
+        echo "$0 <start/stop/restart>"
+        ;;
+esac
diff -ruN /image.org/etc/init/snmpd.conf /image/etc/init/snmpd.conf
--- /image.org/etc/init/snmpd.conf	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/init/snmpd.conf	2020-02-12 12:36:58.000000000 +0300
@@ -0,0 +1,11 @@
+#!upstart
+description "snmpd daemon"
+
+start on filesystem
+stop on runlevel [06]
+
+respawn
+
+script
+    exec /usr/bin/snmpd -f
+end script
diff -ruN /image.org/etc/inittab /image/etc/inittab
--- /image.org/etc/inittab	2020-11-27 06:23:02.000000000 +0300
+++ /image/etc/inittab	2023-07-31 03:34:14.000000000 +0300
@@ -2,5 +2,5 @@
 ::shutdown:/etc/init/rcS K stop
 ::respawn:WatchDoge $RR_ROOT/watchdog >> $RR_UDATA/rockrobo/rrlog/watchdog.log 2>&1
 ::respawn:/usr/bin/adbd
-::respawn:/usr/sbin/dropbear -F
+::respawn:/usr/sbin/dropbear -FR
 ::respawn:/sbin/getty -L ttyS0 115200 vt100
Binary files /image.org/etc/localtime and /image/etc/localtime differ
diff -ruN /image.org/etc/nanorc /image/etc/nanorc
--- /image.org/etc/nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/nanorc	2020-06-02 13:26:59.000000000 +0300
@@ -0,0 +1,299 @@
+## Sample initialization file for GNU nano.
+##
+## Please note that you must have configured nano with --enable-nanorc
+## for this file to be read!  Also note that this file should not be in
+## DOS or Mac format, and that characters specially interpreted by the
+## shell should not be escaped here.
+##
+## To make sure a value is disabled, use "unset <option>".
+##
+## For the options that take parameters, the default value is given.
+## Other options are unset by default.
+##
+## Quotes inside string parameters don't have to be escaped with
+## backslashes.  The last double quote in the string will be treated as
+## its end.  For example, for the "brackets" option, ""')>]}" will match
+## ", ', ), >, ], and }.
+
+## Use auto-indentation.
+# set autoindent
+
+## Backup files to filename~.
+# set backup
+
+## The directory to put unique backup files in.
+# set backupdir ""
+
+## Do backwards searches by default.
+# set backwards
+
+## Use bold text instead of reverse video text.
+# set boldtext
+
+## The characters treated as closing brackets when justifying
+## paragraphs.  They cannot contain blank characters.  Only closing
+## punctuation, optionally followed by closing brackets, can end
+## sentences.
+##
+# set brackets ""')>]}"
+
+## Do case sensitive searches by default.
+# set casesensitive
+
+## Constantly display the cursor position in the statusbar.  Note that
+## this overrides "quickblank".
+# set const
+
+## Use cut to end of line by default.
+# set cut
+
+## Set the line length for wrapping text and justifying paragraphs.
+## If fill is 0 or less, the line length will be the screen width less
+## this number.
+##
+# set fill -8
+
+## Enable ~/.nano_history for saving and reading search/replace strings.
+set historylog
+
+## The opening and closing brackets that can be found by bracket
+## searches.  They cannot contain blank characters.  The former set must
+## come before the latter set, and both must be in the same order.
+##
+# set matchbrackets "(<[{)>]}"
+
+## Use the blank line below the titlebar as extra editing space.
+# set morespace
+
+## Enable mouse support, if available for your system.  When enabled,
+## mouse clicks can be used to place the cursor, set the mark (with a
+## double click), and execute shortcuts.  The mouse will work in the X
+## Window System, and on the console when gpm is running.
+##
+# set mouse
+
+## Allow multiple file buffers (inserting a file will put it into a
+## separate buffer).  You must have configured with --enable-multibuffer
+## for this to work.
+##
+# set multibuffer
+
+## Don't convert files from DOS/Mac format.
+# set noconvert
+
+## Don't follow symlinks when writing files.
+# set nofollow
+
+## Don't display the helpful shortcut lists at the bottom of the screen.
+# set nohelp
+
+## Don't add newlines to the ends of files.
+# set nonewlines
+
+## Don't wrap text at all.
+set nowrap
+
+## Set operating directory.  nano will not read or write files outside
+## this directory and its subdirectories.  Also, the current directory
+## is changed to here, so any files are inserted from this dir.  A blank
+## string means the operating directory feature is turned off.
+##
+# set operatingdir ""
+
+## Preserve the XON and XOFF keys (^Q and ^S).
+# set preserve
+
+## The characters treated as closing punctuation when justifying
+## paragraphs.  They cannot contain blank characters.  Only closing
+## punctuation, optionally followed by closing brackets, can end
+## sentences.
+##
+# set punct "!.?"
+
+## Do quick statusbar blanking.  Statusbar messages will disappear after
+## 1 keystroke instead of 26.  Note that "const" overrides this.
+##
+# set quickblank
+
+## The email-quote string, used to justify email-quoted paragraphs.
+## This is an extended regular expression if your system supports them,
+## otherwise a literal string.  Default:
+# set quotestr "^([ 	]*[#:>\|}])+"
+## if you have extended regular expression support, otherwise:
+# set quotestr "> "
+
+## Fix Backspace/Delete confusion problem.
+# set rebinddelete
+
+## Fix numeric keypad key confusion problem.
+# set rebindkeypad
+
+## Do extended regular expression searches by default.
+# set regexp
+
+## Make the Home key smarter.  When Home is pressed anywhere but at the
+## very beginning of non-whitespace characters on a line, the cursor
+## will jump to that beginning (either forwards or backwards).  If the
+## cursor is already at that position, it will jump to the true
+## beginning of the line.
+# set smarthome
+
+## Use smooth scrolling as the default.
+# set smooth
+
+## Use this spelling checker instead of the internal one.  This option
+## does not properly have a default value.
+##
+# set speller "aspell -x -c"
+
+## Allow nano to be suspended.
+set suspend
+
+## Use this tab size instead of the default; it must be greater than 0.
+# set tabsize 8
+
+## Convert typed tabs to spaces.
+# set tabstospaces
+
+## Save automatically on exit, don't prompt.
+# set tempfile
+
+## Disallow file modification.  Why would you want this in an rcfile? ;)
+# set view
+
+## The two single-column characters used to display the first characters
+## of tabs and spaces.  187 in ISO 8859-1 (0000BB in Unicode) and 183 in
+## ISO-8859-1 (0000B7 in Unicode) seem to be good values for these.
+# set whitespace "  "
+
+## Detect word boundaries more accurately by treating punctuation
+## characters as parts of words.
+# set wordbounds
+
+## Enable the new (EXPERIMENTAL) generic undo code, not just for line cuts
+# set undo
+
+## Enable soft line wrapping (AKA full line display)
+# set softwrap
+
+
+## Color setup
+##
+## Format:
+##
+## syntax "short description" ["filename regex" ...]
+##
+## The "none" syntax is reserved; specifying it on the command line is
+## the same as not having a syntax at all.  The "default" syntax is
+## special: it takes no filename regexes, and applies to files that
+## don't match any other syntax's filename regexes.
+##
+## color foreground,background "regex" ["regex"...]
+## or
+## icolor foreground,background "regex" ["regex"...]
+##
+## "color" will do case sensitive matches, while "icolor" will do case
+## insensitive matches.
+##
+## Valid colors: white, black, red, blue, green, yellow, magenta, cyan.
+## For foreground colors, you may use the prefix "bright" to get a
+## stronger highlight.
+##
+## To use multi-line regexes, use the start="regex" end="regex"
+## [start="regex" end="regex"...] format.
+##
+## If your system supports transparency, not specifying a background
+## color will use a transparent color.  If you don't want this, be sure
+## to set the background color to black or white.
+##
+## If you wish, you may put your syntaxes in separate files.  You can
+## make use of such files (which can only include "syntax", "color", and
+## "icolor" commands) as follows:
+##
+## include "/path/to/syntax_file.nanorc"
+##
+## Unless otherwise noted, the name of the syntax file (without the
+## ".nanorc" extension) should be the same as the "short description"
+## name inside that file.  These names are kept fairly short to make
+## them easier to remember and faster to type using nano's -Y option.
+##
+## All regexes should be extended regular expressions.
+
+## Key bindings
+## Please see nanorc(5) for more details on this
+##
+## Here are some samples to get you going
+##
+# bind M-W nowrap main
+# bind M-A casesens search
+# bind ^S research main
+
+## Set this if your backspace key sends delete most of the time (2.1.3+)
+# bind kdel backspace all
+
+
+## Nanorc files
+include "/usr/share/nano/nanorc.nanorc"
+
+## C/C++
+include "/usr/share/nano/c.nanorc"
+
+## Cascading Style Sheets
+include "/usr/share/nano/css.nanorc"
+
+## Debian files
+include "/usr/share/nano/debian.nanorc"
+
+## Gentoo files
+include "/usr/share/nano/gentoo.nanorc"
+
+## HTML
+include "/usr/share/nano/html.nanorc"
+
+## PHP
+include "/usr/share/nano/php.nanorc"
+
+## TCL
+include "/usr/share/nano/tcl.nanorc"
+
+## TeX
+include "/usr/share/nano/tex.nanorc"
+
+## Quoted emails (under e.g. mutt)
+include "/usr/share/nano/mutt.nanorc"
+
+## Patch files
+include "/usr/share/nano/patch.nanorc"
+
+## Manpages
+include "/usr/share/nano/man.nanorc"
+
+## Groff
+include "/usr/share/nano/groff.nanorc"
+
+## Perl
+include "/usr/share/nano/perl.nanorc"
+
+## Python
+include "/usr/share/nano/python.nanorc"
+
+## Ruby
+include "/usr/share/nano/ruby.nanorc"
+
+## Java
+include "/usr/share/nano/java.nanorc"
+
+## AWK
+include "/usr/share/nano/awk.nanorc"
+
+## Assembler
+include "/usr/share/nano/asm.nanorc"
+
+## Bourne shell scripts
+include "/usr/share/nano/sh.nanorc"
+
+## POV-Ray
+include "/usr/share/nano/pov.nanorc"
+
+## XML-type files
+include "/usr/share/nano/xml.nanorc"
diff -ruN /image.org/etc/passwd /image/etc/passwd
--- /image.org/etc/passwd	2018-08-18 05:17:58.000000000 +0300
+++ /image/etc/passwd	2023-07-31 03:34:14.000000000 +0300
@@ -1,4 +1,4 @@
-root:x:0:0:root:/root:/bin/ash
+root:x:0:0:root:/root:/bin/bash
 daemon:x:1:1:daemon:/usr/sbin:/bin/false
 bin:x:2:2:bin:/bin:/bin/false
 sys:x:3:3:sys:/dev:/bin/false
diff -ruN /image.org/etc/profile /image/etc/profile
--- /image.org/etc/profile	2020-11-27 06:23:02.000000000 +0300
+++ /image/etc/profile	2023-07-31 03:34:14.000000000 +0300
@@ -3,6 +3,15 @@
 [ -f /etc/init/RRENV  ] && . /etc/init/RRENV
 
 PS1='[\u@\h \W]# '
-ulimit -c unlimited
+ulimit -c 0
 ulimit -s 1024
 export LC_ALL=C
+
+if [ -d /etc/profile.d ]; then
+    for i in /etc/profile.d/*.sh; do
+        if [ -r $i ]; then
+            . $i
+        fi
+    done
+    unset i
+fi
diff -ruN /image.org/etc/profile.d/binding.sh /image/etc/profile.d/binding.sh
--- /image.org/etc/profile.d/binding.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/profile.d/binding.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,12 @@
+#!/bin/sh
+if [ "$BASH" ]; then
+    bind '"\e[A": history-search-backward'
+    bind '"\e[B": history-search-forward'
+    bind '"\e[1~": beginning-of-line'
+    bind '"\e[4~": end-of-line'
+
+    stty werase undef
+    bind '"\C-w": backward-kill-word'
+fi
+
+alias vim=vi
diff -ruN /image.org/etc/profile.d/greeting.sh /image/etc/profile.d/greeting.sh
--- /image.org/etc/profile.d/greeting.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/profile.d/greeting.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+if [ -r /opt/rockrobo/rr-release ]; then
+    FIRMWARE=$(cat /opt/rockrobo/rr-release | grep -E '^(ROBOROCK_VERSION|ROCKROBO_VERSION)'| cut -f2 -d=)
+else
+    FIRMWARE=$(cat /etc/os-release | grep -E '^(ROBOROCK_VERSION|ROCKROBO_VERSION)'| cut -f2 -d=)
+fi
+SERIAL=$(cat /dev/shm/sn | grep -ao '[[:alnum:]]*')
+IP=$(ip -4 addr show dev wlan0 | grep inet | tr -s " " | cut -d" " -f3 | cut -f1 -d'/' | head -n 1)
+TOKEN=$(cat /mnt/data/miio/device.token | tr -d '\n' | xxd -p)
+DID=$(cat /mnt/default/device.conf | grep '^did' | cut -f2 -d=)
+MAC=$(cat /mnt/default/device.conf | grep '^mac' | cut -f2 -d=)
+KEY=$(cat /mnt/default/device.conf | grep '^key' | cut -f2 -d=)
+MODEL=$(cat /mnt/default/device.conf | grep '^model' | cut -f2 -d=)
+BUILD_NUMBER=$(cat /opt/rockrobo/buildnumber | tr -d '\n')
+REGION=$(cat /mnt/default/roborock.conf 2>/dev/null | grep location | cut -f2 -d'=')
+MIIO_VERSION=$(/opt/rockrobo/miio/miio_client --help 2>&1 | grep miio-client | cut -f3 -d' ')
+if echo $SERIAL | grep -E "^R" >/dev/null 2>&1; then
+    P_YEAR="201"$(echo $SERIAL | cut -c 7)
+    P_WEEK=$(echo $SERIAL | cut -c 8-9)
+    if [ ! -L /bin/date ]; then
+        P_DATE=$(date -d "$P_YEAR-01-01 +$(( $P_WEEK * 7 + 1 - $(date -d "$P_YEAR-01-04" +%w ) - 3 )) days -2 days" +"%B %Y")
+    else
+        F_MONDAY=$(/root/bin/busybox cal 1 $P_YEAR | awk 'NR>2{sf=7-NF; if (sf == 1 ) {print $1;exit} if ( sf == 0) { print $2;exit}}')
+        P_DATE=$(echo $P_YEAR $P_WEEK $F_MONDAY | awk '{print strftime("%B %Y", mktime($1" 01 "$2" 00 00 00")+($3*7*24*60*60*10))}')
+    fi
+else
+    P_DATE="UNKNOWN"
+fi
+
+echo
+echo "          _______  _______                    _______ "
+echo "|\     /|(  ___  )(  ____ \|\     /||\     /|(       )"
+echo "| )   ( || (   ) || (    \/| )   ( || )   ( || || || |"
+echo "| |   | || (___) || |      | |   | || |   | || || || |"
+echo "( (   ) )|  ___  || |      | |   | || |   | || ||_|| |"
+echo " \ \_/ / | (   ) || |      | |   | || |   | || |   | |"
+echo "  \   /  | )   ( || (____/\| (___) || (___) || )   ( |"
+echo "   \_/   |/     \|(_______/(_______)(_______)|/     \|"
+printf "                                              \033[1;91m20230731\033[0m\n"
+echo "======================================================"
+printf "\033[1;36mMODEL\033[0m...........: $MODEL\n"
+printf "\033[1;36mSERIAL\033[0m..........: $SERIAL\n"
+printf "\033[1;36mPRODUCTION DATE\033[0m.: $P_DATE\n"
+printf "\033[1;36mFIRMWARE\033[0m........: $FIRMWARE\n"
+printf "\033[1;36mBUILD NUMBER\033[0m....: $BUILD_NUMBER\n"
+printf "\033[1;36mMIIO VERSION\033[0m....: $MIIO_VERSION\n"
+printf "\033[1;36mREGION\033[0m..........: $REGION\n"
+printf "\033[1;36mIP\033[0m..............: $IP\n"
+printf "\033[1;36mMAC\033[0m.............: $MAC\n"
+printf "\033[1;36mTOKEN\033[0m...........: $TOKEN\n"
+printf "\033[1;36mDID\033[0m.............: $DID\n"
+printf "\033[1;36mKEY\033[0m.............: $KEY\n"
+echo "======================================================"
+echo
diff -ruN /image.org/etc/rc.local /image/etc/rc.local
--- /image.org/etc/rc.local	2020-11-27 06:23:02.000000000 +0300
+++ /image/etc/rc.local	2023-07-31 03:34:14.000000000 +0300
@@ -11,4 +11,6 @@
 #
 # By default this script does nothing.
 
+cat /proc/mounts | grep "/mnt/data/rockrobo/rrlog" >/dev/null || mount -t tmpfs -o size=5m tmpfs /mnt/data/rockrobo/rrlog
+/root/run_once.sh
 exit 0
diff -ruN /image.org/etc/snmp/snmpd.conf /image/etc/snmp/snmpd.conf
--- /image.org/etc/snmp/snmpd.conf	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/snmp/snmpd.conf	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,4 @@
+syslocation             none
+syscontact none
+rocommunity  public
+#agentaddress 0.0.0.0:162 
diff -ruN /image.org/etc/ssh/ssh_host_dsa_key /image/etc/ssh/ssh_host_dsa_key
--- /image.org/etc/ssh/ssh_host_dsa_key	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_dsa_key	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1,21 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsgAAAAdzc2gtZH
+NzAAAAgQD1/sJ2tyRNifUxLK51w0XWhKVKmoJuh8YeDjp40+sTC3jFK+XazXVvuxlxgHBu
+7DGmzxwN6takxLhKCpY4It/4ZxXzvCgZeAGmZAkyfhqG/pjFKySonyduQAksG33/zk+G17
+EW5tQfDNXNJJoN84CC+eVd0pabh2HMj5agFD7EEQAAABUAy6bJhmqC9sN/Xddj9Yw7d9vS
+7K0AAACAZhLYzGfexeQ5cZzQv1idCHci05DiCJBVC8fmI6xiAtE3VOQvwsdiACoPjPrVx5
+F5If1FfiDYv9rdqfSSgI0+1aJWy5Tnc5JTWeB6YlNU2bGQRXbU7tp15hbGHd8C3Oao7rqs
+4JGYxbRrwNeTgdS6EMmAlupTDhk/18ThB/KxjO8AAACBAKlBpIjCWpaJfbTuIk7iccGxFT
+HU0BnVw+8gFxpr8+exR2ZwLInNd0EMQ8H2SWCInmOcP0uQy0tWp6grghc4AsZ0wSsnCOcR
+yUxmMMZXTUEZlFb4xR3EhURSkVh6klBhPj+BjckMClf/IGaTtUL/5vxivQSZ/bVRux9bZJ
+BQ12ZRAAAB6HfKZBt3ymQbAAAAB3NzaC1kc3MAAACBAPX+wna3JE2J9TEsrnXDRdaEpUqa
+gm6Hxh4OOnjT6xMLeMUr5drNdW+7GXGAcG7sMabPHA3q1qTEuEoKljgi3/hnFfO8KBl4Aa
+ZkCTJ+Gob+mMUrJKifJ25ACSwbff/OT4bXsRbm1B8M1c0kmg3zgIL55V3SlpuHYcyPlqAU
+PsQRAAAAFQDLpsmGaoL2w39d12P1jDt329LsrQAAAIBmEtjMZ97F5DlxnNC/WJ0IdyLTkO
+IIkFULx+YjrGIC0TdU5C/Cx2IAKg+M+tXHkXkh/UV+INi/2t2p9JKAjT7VolbLlOdzklNZ
+4HpiU1TZsZBFdtTu2nXmFsYd3wLc5qjuuqzgkZjFtGvA15OB1LoQyYCW6lMOGT/XxOEH8r
+GM7wAAAIEAqUGkiMJalol9tO4iTuJxwbEVMdTQGdXD7yAXGmvz57FHZnAsic13QQxDwfZJ
+YIieY5w/S5DLS1anqCuCFzgCxnTBKycI5xHJTGYwxldNQRmUVvjFHcSFRFKRWHqSUGE+P4
+GNyQwKV/8gZpO1Qv/m/GK9BJn9tVG7H1tkkFDXZlEAAAAUca5vZuKoeyTBdxk1B42HatxY
+YeQAAAALcm9vdEBIYWNrUEMBAgMEBQYH
+-----END OPENSSH PRIVATE KEY-----
diff -ruN /image.org/etc/ssh/ssh_host_dsa_key.pub /image/etc/ssh/ssh_host_dsa_key.pub
--- /image.org/etc/ssh/ssh_host_dsa_key.pub	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_dsa_key.pub	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1 @@
+ssh-dss AAAAB3NzaC1kc3MAAACBAPX+wna3JE2J9TEsrnXDRdaEpUqagm6Hxh4OOnjT6xMLeMUr5drNdW+7GXGAcG7sMabPHA3q1qTEuEoKljgi3/hnFfO8KBl4AaZkCTJ+Gob+mMUrJKifJ25ACSwbff/OT4bXsRbm1B8M1c0kmg3zgIL55V3SlpuHYcyPlqAUPsQRAAAAFQDLpsmGaoL2w39d12P1jDt329LsrQAAAIBmEtjMZ97F5DlxnNC/WJ0IdyLTkOIIkFULx+YjrGIC0TdU5C/Cx2IAKg+M+tXHkXkh/UV+INi/2t2p9JKAjT7VolbLlOdzklNZ4HpiU1TZsZBFdtTu2nXmFsYd3wLc5qjuuqzgkZjFtGvA15OB1LoQyYCW6lMOGT/XxOEH8rGM7wAAAIEAqUGkiMJalol9tO4iTuJxwbEVMdTQGdXD7yAXGmvz57FHZnAsic13QQxDwfZJYIieY5w/S5DLS1anqCuCFzgCxnTBKycI5xHJTGYwxldNQRmUVvjFHcSFRFKRWHqSUGE+P4GNyQwKV/8gZpO1Qv/m/GK9BJn9tVG7H1tkkFDXZlE= root@HackPC
diff -ruN /image.org/etc/ssh/ssh_host_ecdsa_key /image/etc/ssh/ssh_host_ecdsa_key
--- /image.org/etc/ssh/ssh_host_ecdsa_key	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_ecdsa_key	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1,9 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
+1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQQKtcaGevcP+d4byE0rC8Cf7VsB8wMj
+GEJteyLsMaNqm8V6C+qZmqjw//6V4lMHbxYO6Dr6EVbGAvajDzJSmO9IAAAAqAfgjIIH4I
+yCAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAq1xoZ69w/53hvI
+TSsLwJ/tWwHzAyMYQm17Iuwxo2qbxXoL6pmaqPD//pXiUwdvFg7oOvoRVsYC9qMPMlKY70
+gAAAAhALn+BwWaySKvUrfJVEg3F8M1/5iCS6fD+Axj2nof7uM7AAAAC3Jvb3RASGFja1BD
+AQIDBA==
+-----END OPENSSH PRIVATE KEY-----
diff -ruN /image.org/etc/ssh/ssh_host_ecdsa_key.pub /image/etc/ssh/ssh_host_ecdsa_key.pub
--- /image.org/etc/ssh/ssh_host_ecdsa_key.pub	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_ecdsa_key.pub	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1 @@
+ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAq1xoZ69w/53hvITSsLwJ/tWwHzAyMYQm17Iuwxo2qbxXoL6pmaqPD//pXiUwdvFg7oOvoRVsYC9qMPMlKY70g= root@HackPC
diff -ruN /image.org/etc/ssh/ssh_host_ed25519_key /image/etc/ssh/ssh_host_ed25519_key
--- /image.org/etc/ssh/ssh_host_ed25519_key	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_ed25519_key	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1,7 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
+QyNTUxOQAAACA951okwdaSVIHM/qGxNnrItmJj4MmnrQPSSLKafvKeiAAAAJChV3u/oVd7
+vwAAAAtzc2gtZWQyNTUxOQAAACA951okwdaSVIHM/qGxNnrItmJj4MmnrQPSSLKafvKeiA
+AAAEDfcxipgnRFsbp3G5WMlx8cMw9ThbR2eaZA7vA6wLJvGT3nWiTB1pJUgcz+obE2esi2
+YmPgyaetA9JIspp+8p6IAAAAC3Jvb3RASGFja1BDAQI=
+-----END OPENSSH PRIVATE KEY-----
diff -ruN /image.org/etc/ssh/ssh_host_ed25519_key.pub /image/etc/ssh/ssh_host_ed25519_key.pub
--- /image.org/etc/ssh/ssh_host_ed25519_key.pub	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_ed25519_key.pub	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3nWiTB1pJUgcz+obE2esi2YmPgyaetA9JIspp+8p6I root@HackPC
diff -ruN /image.org/etc/ssh/ssh_host_rsa_key /image/etc/ssh/ssh_host_rsa_key
--- /image.org/etc/ssh/ssh_host_rsa_key	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_rsa_key	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1,38 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAYEAzeOD6IXAJFMjjQdKsxnB7lDdmaxrrfaNS1Mrp1Nl6evzLNge4YFw
+LZmLLASUtp6ZHwE5n4qmbGuQKoEmo8eS80wK8Sevh1Wu5rZJMY9T5raYg8Do4fi2/3v0U3
+YzFKpfSxgv7fnreBsqcMyReKGyg/3tKLjQ4hxrnlDlcSJDMRgywQAZJx3zx5MGQ7Wm29x5
+lM5sULSf8412sc05iyPCC79D/2PrXkzG7STzCH2DHEe7+oyL7YcR2zdOuqDsgWIvcmQ3Ra
+h4/zqv381NJjo8hA5rT4lLZd28IUD+bAZ+h88xJ1PWU9oaqW2zyOuhU2g2Q0gxh/K22qQE
+Vg3lNcEna70zt2KHYK+8KsHEthDMn5YYvDDdpbKD2rd4eXzdEKroX76itqFGLMelHfkDaz
+hLZ2kgdkkq81Uf2zK1fK+Ou1Lj0YOr0T7hvjTxNbsb7UdyL0FQkdox25mfTvi0ymYW92gy
+yJsaI7UOjp69WpzFlDTpCEAQWGTZoTk5uCQiymOzAAAFiGU2hwdlNocHAAAAB3NzaC1yc2
+EAAAGBAM3jg+iFwCRTI40HSrMZwe5Q3Zmsa632jUtTK6dTZenr8yzYHuGBcC2ZiywElLae
+mR8BOZ+KpmxrkCqBJqPHkvNMCvEnr4dVrua2STGPU+a2mIPA6OH4tv979FN2MxSqX0sYL+
+3563gbKnDMkXihsoP97Si40OIca55Q5XEiQzEYMsEAGScd88eTBkO1ptvceZTObFC0n/ON
+drHNOYsjwgu/Q/9j615Mxu0k8wh9gxxHu/qMi+2HEds3Trqg7IFiL3JkN0WoeP86r9/NTS
+Y6PIQOa0+JS2XdvCFA/mwGfofPMSdT1lPaGqlts8jroVNoNkNIMYfyttqkBFYN5TXBJ2u9
+M7dih2CvvCrBxLYQzJ+WGLww3aWyg9q3eHl83RCq6F++orahRizHpR35A2s4S2dpIHZJKv
+NVH9sytXyvjrtS49GDq9E+4b408TW7G+1Hci9BUJHaMduZn074tMpmFvdoMsibGiO1Do6e
+vVqcxZQ06QhAEFhk2aE5ObgkIspjswAAAAMBAAEAAAGADUJuclZ6zga/WWEeLHP84K47N0
+m6vZS3+3aQbybt1Kd/cmSQyJEfelr9yDNF/eTaPlGZNm8lfKyzYiljJapqtQSGsoqNwWIr
+8MEjQZqAxXD+WC3fpv3vkHtD0ZmL0fQ5ot/HO8TxUeYzUNm73KWn64bk888YlMH5JFRYEn
+XUbKBUVHL/K7JqysWV4l0b2+Onvi+fxirRH6GoApdm8fu25C7IivVnvnD6DA0UdyLY2MS9
+6criEBq3dFjBgeoZ5n3o1sG2MFcuzloTP0Mep8gi5rpmDRafEb8NtHhaLhPXeynCw20osY
+Q5hoOOQNTuaNo0MKkQ5V3dXVEIFpBJayVsxA8bBRzEuQjUauarju47FTPiUoIgPCvdk3Y6
+AFdwCzKuMGkH+sjvzQzXfZvkhdkJbtUNrXLmLB/7I6LFaaDLGr9dOu3R82g8wiUEp2P98E
+Ih1M/jyFqqY/WYw1Rc58/9JIqhQV9n2a4DQVcamT5CsV3C0NfOiIpThfW4UwKrP9bBAAAA
+wQDJVWQjn2aFtCg4QoUDnnbPib1XE+78rGowYOtguFRGGvbEQfnmDMJiIOAHd0Igw8ImbD
+sa723tsH9OMrYHhEwGrq+BXZZ3a/D5d7PrDslHMWlwW75ArcucrwpayGcx1qw/1guaU+Ht
+np1qCAJ4SzMn4+tMpIPL0ukUGYWRRw9aAwHZDHpl0a83CU9wrdTxZW1ZHF+epEhxg0dKKk
+bMfGxun1M3kwO7yxEzb/9ABqvL1x5tHXc33o70l7Spn4spiEEAAADBAN3BjRcKSM4QxuMc
+SX55wMoDOSdJ+fyJRQCGNoGMlSxF5o3UinKdXyXvkV1aMVFZLUCwtT3YHQlMIwSGP6oYlG
+NGAp5iHuqA1PTSN2I3C1SOOCzU+BXNKHlF3gNVsfF5/xXh9ae3HBtP9lPCb1EsRMkKUtmI
+XlwAOKLK51w3VoAgTsY92KGzMaLdUK2odno+7c9P2oIhu1mJ/MsRicuGXf0rEYaDxdenQQ
+ShWECOmo7hKxYeqYgv0GLqgi56nEpIIwAAAMEA7a6yoUq9YdXolRzcqSjY9cUIYKe2zXEg
+lVfqgMZ7y8rC/H06FmUvpC4lY5IhaebHVIUIfr7tu0gbFeeP00ze9nBfoFAoYfOynq4EmO
+2RXtOAQhlf++9HcjI7e8Rmhi2NRWFnUUFErQasA05EGEEKYxonBrNlvafXbuDOjCNXMU2D
+jtP8HQO7cjZXHZDY3mLtKv0xJM0KQ3eNRUfBU2ljtNL1GhmuZ0aPBhs9iMw4jI7Oz7jfQD
+5VH9MBknUayecxAAAAC3Jvb3RASGFja1BDAQIDBAUGBw==
+-----END OPENSSH PRIVATE KEY-----
diff -ruN /image.org/etc/ssh/ssh_host_rsa_key.pub /image/etc/ssh/ssh_host_rsa_key.pub
--- /image.org/etc/ssh/ssh_host_rsa_key.pub	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/ssh/ssh_host_rsa_key.pub	2023-07-31 03:34:13.000000000 +0300
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDN44PohcAkUyONB0qzGcHuUN2ZrGut9o1LUyunU2Xp6/Ms2B7hgXAtmYssBJS2npkfATmfiqZsa5AqgSajx5LzTArxJ6+HVa7mtkkxj1PmtpiDwOjh+Lb/e/RTdjMUql9LGC/t+et4GypwzJF4obKD/e0ouNDiHGueUOVxIkMxGDLBABknHfPHkwZDtabb3HmUzmxQtJ/zjXaxzTmLI8ILv0P/Y+teTMbtJPMIfYMcR7v6jIvthxHbN066oOyBYi9yZDdFqHj/Oq/fzU0mOjyEDmtPiUtl3bwhQP5sBn6HzzEnU9ZT2hqpbbPI66FTaDZDSDGH8rbapARWDeU1wSdrvTO3Yodgr7wqwcS2EMyflhi8MN2lsoPat3h5fN0QquhfvqK2oUYsx6Ud+QNrOEtnaSB2SSrzVR/bMrV8r467UuPRg6vRPuG+NPE1uxvtR3IvQVCR2jHbmZ9O+LTKZhb3aDLImxojtQ6Onr1anMWUNOkIQBBYZNmhOTm4JCLKY7M= root@HackPC
diff -ruN /image.org/etc/timezone /image/etc/timezone
--- /image.org/etc/timezone	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/timezone	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1 @@
+Europe/Berlin
diff -ruN /image.org/etc/wgetrc /image/etc/wgetrc
--- /image.org/etc/wgetrc	1970-01-01 03:00:00.000000000 +0300
+++ /image/etc/wgetrc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,135 @@
+###
+### Sample Wget initialization file .wgetrc
+###
+
+## You can use this file to change the default behaviour of wget or to
+## avoid having to type many many command-line options. This file does
+## not contain a comprehensive list of commands -- look at the manual
+## to find out what you can put into this file. You can find this here:
+##   $ info wget.info 'Startup File'
+## Or online here:
+##   https://www.gnu.org/software/wget/manual/wget.html#Startup-File
+##
+## Wget initialization file can reside in /etc/wgetrc
+## (global, for all users) or $HOME/.wgetrc (for a single user).
+##
+## To use the settings in this file, you will have to uncomment them,
+## as well as change them, in most cases, as the values on the
+## commented-out lines are the default values (e.g. "off").
+
+
+##
+## Global settings (useful for setting up in /etc/wgetrc).
+## Think well before you change them, since they may reduce wget's
+## functionality, and make it behave contrary to the documentation:
+##
+
+# You can set retrieve quota for beginners by specifying a value
+# optionally followed by 'K' (kilobytes) or 'M' (megabytes).  The
+# default quota is unlimited.
+#quota = inf
+
+# You can lower (or raise) the default number of retries when
+# downloading a file (default is 20).
+#tries = 20
+
+# Lowering the maximum depth of the recursive retrieval is handy to
+# prevent newbies from going too "deep" when they unwittingly start
+# the recursive retrieval.  The default is 5.
+#reclevel = 5
+
+# By default Wget uses "passive FTP" transfer where the client
+# initiates the data connection to the server rather than the other
+# way around.  That is required on systems behind NAT where the client
+# computer cannot be easily reached from the Internet.  However, some
+# firewalls software explicitly supports active FTP and in fact has
+# problems supporting passive transfer.  If you are in such
+# environment, use "passive_ftp = off" to revert to active FTP.
+#passive_ftp = off
+passive_ftp = on
+
+# The "wait" command below makes Wget wait between every connection.
+# If, instead, you want Wget to wait only between retries of failed
+# downloads, set waitretry to maximum number of seconds to wait (Wget
+# will use "linear backoff", waiting 1 second after the first failure
+# on a file, 2 seconds after the second failure, etc. up to this max).
+#waitretry = 10
+
+
+##
+## Local settings (for a user to set in his $HOME/.wgetrc).  It is
+## *highly* undesirable to put these settings in the global file, since
+## they are potentially dangerous to "normal" users.
+##
+## Even when setting up your own ~/.wgetrc, you should know what you
+## are doing before doing so.
+##
+
+# Set this to on to use timestamping by default:
+#timestamping = off
+
+# It is a good idea to make Wget send your email address in a `From:'
+# header with your request (so that server administrators can contact
+# you in case of errors).  Wget does *not* send `From:' by default.
+#header = From: Your Name <username@site.domain>
+
+# You can set up other headers, like Accept-Language.  Accept-Language
+# is *not* sent by default.
+#header = Accept-Language: en
+
+# You can set the default proxies for Wget to use for http, https, and ftp.
+# They will override the value in the environment.
+#https_proxy = http://proxy.yoyodyne.com:18023/
+#http_proxy = http://proxy.yoyodyne.com:18023/
+#ftp_proxy = http://proxy.yoyodyne.com:18023/
+
+# If you do not want to use proxy at all, set this to off.
+#use_proxy = on
+
+# You can customize the retrieval outlook.  Valid options are default,
+# binary, mega and micro.
+#dot_style = default
+
+# Setting this to off makes Wget not download /robots.txt.  Be sure to
+# know *exactly* what /robots.txt is and how it is used before changing
+# the default!
+#robots = on
+
+# It can be useful to make Wget wait between connections.  Set this to
+# the number of seconds you want Wget to wait.
+#wait = 0
+
+# You can force creating directory structure, even if a single is being
+# retrieved, by setting this to on.
+#dirstruct = off
+
+# You can turn on recursive retrieving by default (don't do this if
+# you are not sure you know what it means) by setting this to on.
+#recursive = off
+
+# To always back up file X as X.orig before converting its links (due
+# to -k / --convert-links / convert_links = on having been specified),
+# set this variable to on:
+#backup_converted = off
+
+# To have Wget follow FTP links from HTML files by default, set this
+# to on:
+#follow_ftp = off
+
+# To try ipv6 addresses first:
+#prefer-family = IPv6
+
+# Set default IRI support state
+#iri = off
+
+# Force the default system encoding
+#locale = UTF-8
+
+# Force the default remote server encoding
+#remoteencoding = UTF-8
+
+# Turn on to prevent following non-HTTPS links when in recursive mode
+#httpsonly = off
+
+# Tune HTTPS security (auto, SSLv2, SSLv3, TLSv1, PFS)
+#secureprotocol = auto
Binary files /image.org/lib/arm-linux-gnueabihf/libgsm.so.1 and /image/lib/arm-linux-gnueabihf/libgsm.so.1 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libgsm.so.1.0.12 and /image/lib/arm-linux-gnueabihf/libgsm.so.1.0.12 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libncurses.so.5 and /image/lib/arm-linux-gnueabihf/libncurses.so.5 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libncurses.so.5.9 and /image/lib/arm-linux-gnueabihf/libncurses.so.5.9 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libncursesw.so.5 and /image/lib/arm-linux-gnueabihf/libncursesw.so.5 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libncursesw.so.5.9 and /image/lib/arm-linux-gnueabihf/libncursesw.so.5.9 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libpng12.so.0 and /image/lib/arm-linux-gnueabihf/libpng12.so.0 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libpng12.so.0.50.0 and /image/lib/arm-linux-gnueabihf/libpng12.so.0.50.0 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libpopt.so.0 and /image/lib/arm-linux-gnueabihf/libpopt.so.0 differ
Binary files /image.org/lib/arm-linux-gnueabihf/libpopt.so.0.0.0 and /image/lib/arm-linux-gnueabihf/libpopt.so.0.0.0 differ
Binary files /image.org/lib/libpopt.so.0.0.0 and /image/lib/libpopt.so.0.0.0 differ
Binary files /image.org/lib/xtables/libip6t_DNAT.so and /image/lib/xtables/libip6t_DNAT.so differ
Binary files /image.org/lib/xtables/libip6t_DNPT.so and /image/lib/xtables/libip6t_DNPT.so differ
Binary files /image.org/lib/xtables/libip6t_HL.so and /image/lib/xtables/libip6t_HL.so differ
Binary files /image.org/lib/xtables/libip6t_LOG.so and /image/lib/xtables/libip6t_LOG.so differ
Binary files /image.org/lib/xtables/libip6t_MASQUERADE.so and /image/lib/xtables/libip6t_MASQUERADE.so differ
Binary files /image.org/lib/xtables/libip6t_NETMAP.so and /image/lib/xtables/libip6t_NETMAP.so differ
Binary files /image.org/lib/xtables/libip6t_REDIRECT.so and /image/lib/xtables/libip6t_REDIRECT.so differ
Binary files /image.org/lib/xtables/libip6t_REJECT.so and /image/lib/xtables/libip6t_REJECT.so differ
Binary files /image.org/lib/xtables/libip6t_SNAT.so and /image/lib/xtables/libip6t_SNAT.so differ
Binary files /image.org/lib/xtables/libip6t_SNPT.so and /image/lib/xtables/libip6t_SNPT.so differ
Binary files /image.org/lib/xtables/libip6t_ah.so and /image/lib/xtables/libip6t_ah.so differ
Binary files /image.org/lib/xtables/libip6t_dst.so and /image/lib/xtables/libip6t_dst.so differ
Binary files /image.org/lib/xtables/libip6t_eui64.so and /image/lib/xtables/libip6t_eui64.so differ
Binary files /image.org/lib/xtables/libip6t_frag.so and /image/lib/xtables/libip6t_frag.so differ
Binary files /image.org/lib/xtables/libip6t_hbh.so and /image/lib/xtables/libip6t_hbh.so differ
Binary files /image.org/lib/xtables/libip6t_hl.so and /image/lib/xtables/libip6t_hl.so differ
Binary files /image.org/lib/xtables/libip6t_icmp6.so and /image/lib/xtables/libip6t_icmp6.so differ
Binary files /image.org/lib/xtables/libip6t_ipv6header.so and /image/lib/xtables/libip6t_ipv6header.so differ
Binary files /image.org/lib/xtables/libip6t_mh.so and /image/lib/xtables/libip6t_mh.so differ
Binary files /image.org/lib/xtables/libip6t_rt.so and /image/lib/xtables/libip6t_rt.so differ
Binary files /image.org/lib/xtables/libipt_CLUSTERIP.so and /image/lib/xtables/libipt_CLUSTERIP.so differ
Binary files /image.org/lib/xtables/libipt_DNAT.so and /image/lib/xtables/libipt_DNAT.so differ
Binary files /image.org/lib/xtables/libipt_ECN.so and /image/lib/xtables/libipt_ECN.so differ
Binary files /image.org/lib/xtables/libipt_LOG.so and /image/lib/xtables/libipt_LOG.so differ
Binary files /image.org/lib/xtables/libipt_MASQUERADE.so and /image/lib/xtables/libipt_MASQUERADE.so differ
Binary files /image.org/lib/xtables/libipt_MIRROR.so and /image/lib/xtables/libipt_MIRROR.so differ
Binary files /image.org/lib/xtables/libipt_NETMAP.so and /image/lib/xtables/libipt_NETMAP.so differ
Binary files /image.org/lib/xtables/libipt_REDIRECT.so and /image/lib/xtables/libipt_REDIRECT.so differ
Binary files /image.org/lib/xtables/libipt_REJECT.so and /image/lib/xtables/libipt_REJECT.so differ
Binary files /image.org/lib/xtables/libipt_SAME.so and /image/lib/xtables/libipt_SAME.so differ
Binary files /image.org/lib/xtables/libipt_SNAT.so and /image/lib/xtables/libipt_SNAT.so differ
Binary files /image.org/lib/xtables/libipt_TTL.so and /image/lib/xtables/libipt_TTL.so differ
Binary files /image.org/lib/xtables/libipt_ULOG.so and /image/lib/xtables/libipt_ULOG.so differ
Binary files /image.org/lib/xtables/libipt_ah.so and /image/lib/xtables/libipt_ah.so differ
Binary files /image.org/lib/xtables/libipt_icmp.so and /image/lib/xtables/libipt_icmp.so differ
Binary files /image.org/lib/xtables/libipt_realm.so and /image/lib/xtables/libipt_realm.so differ
Binary files /image.org/lib/xtables/libipt_ttl.so and /image/lib/xtables/libipt_ttl.so differ
Binary files /image.org/lib/xtables/libipt_unclean.so and /image/lib/xtables/libipt_unclean.so differ
Binary files /image.org/lib/xtables/libxt_AUDIT.so and /image/lib/xtables/libxt_AUDIT.so differ
Binary files /image.org/lib/xtables/libxt_CHECKSUM.so and /image/lib/xtables/libxt_CHECKSUM.so differ
Binary files /image.org/lib/xtables/libxt_CLASSIFY.so and /image/lib/xtables/libxt_CLASSIFY.so differ
Binary files /image.org/lib/xtables/libxt_CONNMARK.so and /image/lib/xtables/libxt_CONNMARK.so differ
Binary files /image.org/lib/xtables/libxt_CONNSECMARK.so and /image/lib/xtables/libxt_CONNSECMARK.so differ
Binary files /image.org/lib/xtables/libxt_CT.so and /image/lib/xtables/libxt_CT.so differ
Binary files /image.org/lib/xtables/libxt_DSCP.so and /image/lib/xtables/libxt_DSCP.so differ
Binary files /image.org/lib/xtables/libxt_HMARK.so and /image/lib/xtables/libxt_HMARK.so differ
Binary files /image.org/lib/xtables/libxt_IDLETIMER.so and /image/lib/xtables/libxt_IDLETIMER.so differ
Binary files /image.org/lib/xtables/libxt_LED.so and /image/lib/xtables/libxt_LED.so differ
Binary files /image.org/lib/xtables/libxt_MARK.so and /image/lib/xtables/libxt_MARK.so differ
Binary files /image.org/lib/xtables/libxt_NFLOG.so and /image/lib/xtables/libxt_NFLOG.so differ
Binary files /image.org/lib/xtables/libxt_NFQUEUE.so and /image/lib/xtables/libxt_NFQUEUE.so differ
Binary files /image.org/lib/xtables/libxt_NOTRACK.so and /image/lib/xtables/libxt_NOTRACK.so differ
Binary files /image.org/lib/xtables/libxt_RATEEST.so and /image/lib/xtables/libxt_RATEEST.so differ
Binary files /image.org/lib/xtables/libxt_SECMARK.so and /image/lib/xtables/libxt_SECMARK.so differ
Binary files /image.org/lib/xtables/libxt_SET.so and /image/lib/xtables/libxt_SET.so differ
Binary files /image.org/lib/xtables/libxt_SYNPROXY.so and /image/lib/xtables/libxt_SYNPROXY.so differ
Binary files /image.org/lib/xtables/libxt_TCPMSS.so and /image/lib/xtables/libxt_TCPMSS.so differ
Binary files /image.org/lib/xtables/libxt_TCPOPTSTRIP.so and /image/lib/xtables/libxt_TCPOPTSTRIP.so differ
Binary files /image.org/lib/xtables/libxt_TEE.so and /image/lib/xtables/libxt_TEE.so differ
Binary files /image.org/lib/xtables/libxt_TOS.so and /image/lib/xtables/libxt_TOS.so differ
Binary files /image.org/lib/xtables/libxt_TPROXY.so and /image/lib/xtables/libxt_TPROXY.so differ
Binary files /image.org/lib/xtables/libxt_TRACE.so and /image/lib/xtables/libxt_TRACE.so differ
Binary files /image.org/lib/xtables/libxt_addrtype.so and /image/lib/xtables/libxt_addrtype.so differ
Binary files /image.org/lib/xtables/libxt_bpf.so and /image/lib/xtables/libxt_bpf.so differ
Binary files /image.org/lib/xtables/libxt_cluster.so and /image/lib/xtables/libxt_cluster.so differ
Binary files /image.org/lib/xtables/libxt_comment.so and /image/lib/xtables/libxt_comment.so differ
Binary files /image.org/lib/xtables/libxt_connbytes.so and /image/lib/xtables/libxt_connbytes.so differ
Binary files /image.org/lib/xtables/libxt_connlabel.so and /image/lib/xtables/libxt_connlabel.so differ
Binary files /image.org/lib/xtables/libxt_connlimit.so and /image/lib/xtables/libxt_connlimit.so differ
Binary files /image.org/lib/xtables/libxt_connmark.so and /image/lib/xtables/libxt_connmark.so differ
Binary files /image.org/lib/xtables/libxt_conntrack.so and /image/lib/xtables/libxt_conntrack.so differ
Binary files /image.org/lib/xtables/libxt_cpu.so and /image/lib/xtables/libxt_cpu.so differ
Binary files /image.org/lib/xtables/libxt_dccp.so and /image/lib/xtables/libxt_dccp.so differ
Binary files /image.org/lib/xtables/libxt_devgroup.so and /image/lib/xtables/libxt_devgroup.so differ
Binary files /image.org/lib/xtables/libxt_dscp.so and /image/lib/xtables/libxt_dscp.so differ
Binary files /image.org/lib/xtables/libxt_ecn.so and /image/lib/xtables/libxt_ecn.so differ
Binary files /image.org/lib/xtables/libxt_esp.so and /image/lib/xtables/libxt_esp.so differ
Binary files /image.org/lib/xtables/libxt_hashlimit.so and /image/lib/xtables/libxt_hashlimit.so differ
Binary files /image.org/lib/xtables/libxt_helper.so and /image/lib/xtables/libxt_helper.so differ
Binary files /image.org/lib/xtables/libxt_iprange.so and /image/lib/xtables/libxt_iprange.so differ
Binary files /image.org/lib/xtables/libxt_ipvs.so and /image/lib/xtables/libxt_ipvs.so differ
Binary files /image.org/lib/xtables/libxt_length.so and /image/lib/xtables/libxt_length.so differ
Binary files /image.org/lib/xtables/libxt_limit.so and /image/lib/xtables/libxt_limit.so differ
Binary files /image.org/lib/xtables/libxt_mac.so and /image/lib/xtables/libxt_mac.so differ
Binary files /image.org/lib/xtables/libxt_mark.so and /image/lib/xtables/libxt_mark.so differ
Binary files /image.org/lib/xtables/libxt_multiport.so and /image/lib/xtables/libxt_multiport.so differ
Binary files /image.org/lib/xtables/libxt_nfacct.so and /image/lib/xtables/libxt_nfacct.so differ
Binary files /image.org/lib/xtables/libxt_osf.so and /image/lib/xtables/libxt_osf.so differ
Binary files /image.org/lib/xtables/libxt_owner.so and /image/lib/xtables/libxt_owner.so differ
Binary files /image.org/lib/xtables/libxt_physdev.so and /image/lib/xtables/libxt_physdev.so differ
Binary files /image.org/lib/xtables/libxt_pkttype.so and /image/lib/xtables/libxt_pkttype.so differ
Binary files /image.org/lib/xtables/libxt_policy.so and /image/lib/xtables/libxt_policy.so differ
Binary files /image.org/lib/xtables/libxt_quota.so and /image/lib/xtables/libxt_quota.so differ
Binary files /image.org/lib/xtables/libxt_rateest.so and /image/lib/xtables/libxt_rateest.so differ
Binary files /image.org/lib/xtables/libxt_recent.so and /image/lib/xtables/libxt_recent.so differ
Binary files /image.org/lib/xtables/libxt_rpfilter.so and /image/lib/xtables/libxt_rpfilter.so differ
Binary files /image.org/lib/xtables/libxt_sctp.so and /image/lib/xtables/libxt_sctp.so differ
Binary files /image.org/lib/xtables/libxt_set.so and /image/lib/xtables/libxt_set.so differ
Binary files /image.org/lib/xtables/libxt_socket.so and /image/lib/xtables/libxt_socket.so differ
Binary files /image.org/lib/xtables/libxt_state.so and /image/lib/xtables/libxt_state.so differ
Binary files /image.org/lib/xtables/libxt_statistic.so and /image/lib/xtables/libxt_statistic.so differ
Binary files /image.org/lib/xtables/libxt_string.so and /image/lib/xtables/libxt_string.so differ
Binary files /image.org/lib/xtables/libxt_tcpmss.so and /image/lib/xtables/libxt_tcpmss.so differ
Binary files /image.org/lib/xtables/libxt_time.so and /image/lib/xtables/libxt_time.so differ
Binary files /image.org/lib/xtables/libxt_tos.so and /image/lib/xtables/libxt_tos.so differ
Binary files /image.org/lib/xtables/libxt_u32.so and /image/lib/xtables/libxt_u32.so differ
Binary files /image.org/opt/rockrobo/cleaner/bin/AppProxy and /image/opt/rockrobo/cleaner/bin/AppProxy differ
Binary files /image.org/opt/rockrobo/cleaner/bin/SysUpdate and /image/opt/rockrobo/cleaner/bin/SysUpdate differ
Binary files /image.org/opt/rockrobo/miio/miio_client and /image/opt/rockrobo/miio/miio_client differ
Binary files /image.org/opt/rockrobo/miio/miio_recv_line and /image/opt/rockrobo/miio/miio_recv_line differ
Binary files /image.org/opt/rockrobo/miio/miio_send_line and /image/opt/rockrobo/miio/miio_send_line differ
Binary files /image.org/opt/rockrobo/resources/sounds/start_greeting.wav and /image/opt/rockrobo/resources/sounds/start_greeting.wav differ
diff -ruN /image.org/opt/rockrobo/rrlog/misc.sh /image/opt/rockrobo/rrlog/misc.sh
--- /image.org/opt/rockrobo/rrlog/misc.sh	2020-11-27 05:05:09.000000000 +0300
+++ /image/opt/rockrobo/rrlog/misc.sh	2023-07-31 03:34:14.000000000 +0300
@@ -1,4 +1,5 @@
 #!/bin/bash
+exit 0
 date >> /dev/shm/misc.log
 cat /dev/jiffies >> /dev/shm/misc.log
 echo "=======/proc/interrupts==========" >> /dev/shm/misc.log
diff -ruN /image.org/opt/rockrobo/rrlog/rrlog.conf /image/opt/rockrobo/rrlog/rrlog.conf
--- /image.org/opt/rockrobo/rrlog/rrlog.conf	2020-11-27 05:05:09.000000000 +0300
+++ /image/opt/rockrobo/rrlog/rrlog.conf	2023-07-31 03:34:14.000000000 +0300
@@ -1,6 +1,6 @@
 MAX_TAR_FILE_SIZE=734003200
 #UPLOAD_METHOD   0:NO_UPLOAD    1:FTP    2:FDS
-UPLOAD_METHOD=2
+UPLOAD_METHOD=0
 FTP_UPLOAD_URL=ftp://ftpuser:passwd@192.168.176.157
 LOG_COUNTER_FILE=/mnt/reserve/counter
 BKBOX_COUNTER_FILE=/mnt/reserve/bkcounter
@@ -8,6 +8,6 @@
 MAX_UPLOAD_SPEED=51200
 ONLY_UPLOAD_ONDOCK=1
 #LEVEL_ERROR = 3U #LEVEL_WARN = 4U #LEVEL_INFO = 6U #LEVEL_DEBUG = 7U #LEVEl_VERBOSE = 8U
-LOG_LEVEL=6
+LOG_LEVEL=3
 #UPLOAD_EN_DEFAULT      0: will not upload log  1: will upload bkbox by default   3:will upload bkbox and EVENTASK 7: upload bkbox and all logs 
 UPLOAD_EN_DEFAULT=0
diff -ruN /image.org/opt/rockrobo/rrlog/rrlogmt.conf /image/opt/rockrobo/rrlog/rrlogmt.conf
--- /image.org/opt/rockrobo/rrlog/rrlogmt.conf	2020-11-27 05:05:09.000000000 +0300
+++ /image/opt/rockrobo/rrlog/rrlogmt.conf	2023-07-31 03:34:14.000000000 +0300
@@ -1,6 +1,6 @@
 MAX_TAR_FILE_SIZE=734003200
 #UPLOAD_METHOD   0:NO_UPLOAD    1:FTP    2:FDS
-UPLOAD_METHOD=2
+UPLOAD_METHOD=0
 FTP_UPLOAD_URL=ftp://ftpuser:passwd@192.168.176.157
 LOG_COUNTER_FILE=/mnt/reserve/counter
 BKBOX_COUNTER_FILE=/mnt/reserve/bkcounter
@@ -8,6 +8,6 @@
 MAX_UPLOAD_SPEED=51200
 ONLY_UPLOAD_ONDOCK=1
 #LEVEL_ERROR = 3U #LEVEL_WARN = 4U #LEVEL_INFO = 6U #LEVEL_DEBUG = 7U #LEVEl_VERBOSE = 8U
-LOG_LEVEL=8
+LOG_LEVEL=3
 #UPLOAD_EN_DEFAULT      0: will not upload log  1: will upload bkbox by default   3:will upload bkbox and EVENTASK 7: upload bkbox and all logs 
 UPLOAD_EN_DEFAULT=0
diff -ruN /image.org/opt/rockrobo/rrlog/tar_extra_file.sh /image/opt/rockrobo/rrlog/tar_extra_file.sh
--- /image.org/opt/rockrobo/rrlog/tar_extra_file.sh	2020-11-27 05:05:09.000000000 +0300
+++ /image/opt/rockrobo/rrlog/tar_extra_file.sh	2023-07-31 03:34:14.000000000 +0300
@@ -10,7 +10,7 @@
 cd $RR_UDATA/rockrobo/rrlog
 
 cd /var/log
-nice -n 19 tar zcf $RR_UDATA/rockrobo/rrlog/varlog.tar.gz ./upstart ./boot.log ./bootdmesg ./dmesg ./faillog ./kern.log ./lastlog ./rr_try_mount.log ./syslog ./messages
+
 rm -rf *.gz
 rm -rf *.0
 rm -rf *.1
diff -ruN /image.org/opt/rockrobo/rrlog/toprotation.sh /image/opt/rockrobo/rrlog/toprotation.sh
--- /image.org/opt/rockrobo/rrlog/toprotation.sh	2020-11-27 05:05:09.000000000 +0300
+++ /image/opt/rockrobo/rrlog/toprotation.sh	2023-07-31 03:34:14.000000000 +0300
@@ -1,4 +1,5 @@
 #!/bin/bash
+exit 0
 reg=^[A-Za-z0-9/_]+$
 if [[ "$RR_UDATA" =~ $reg ]];then
     echo "pass"
diff -ruN /image.org/opt/rockrobo/rrlog/topstop.sh /image/opt/rockrobo/rrlog/topstop.sh
--- /image.org/opt/rockrobo/rrlog/topstop.sh	2020-11-27 05:05:09.000000000 +0300
+++ /image/opt/rockrobo/rrlog/topstop.sh	2023-07-31 03:34:14.000000000 +0300
@@ -1,4 +1,5 @@
 #!/bin/bash
+exit 0
 set -x
 reg=^[A-Za-z0-9/_]+$
 if [[ "$RR_UDATA" =~ $reg ]];then
diff -ruN /image.org/opt/rockrobo/watchdog/ProcessList.conf /image/opt/rockrobo/watchdog/ProcessList.conf
--- /image.org/opt/rockrobo/watchdog/ProcessList.conf	2020-11-27 06:14:57.000000000 +0300
+++ /image/opt/rockrobo/watchdog/ProcessList.conf	2023-07-31 03:34:14.000000000 +0300
@@ -6,5 +6,5 @@
 wlanmgr,setsid wlanmgr&,0,3,0
 SysUpdate,setsid SysUpdate&,0,3,0
 rriot_tuya,setsid rriot_tuya -d&,0,3,0
-miio_client,setsid miio_client -d /mnt/data/miio -l 2 >> /mnt/data/rockrobo/rrlog/miio.log 2>&1&,0,1,5
+miio_client,setsid miio_client -d /mnt/data/miio -l 0 >> /mnt/data/rockrobo/rrlog/miio.log 2>&1&,0,1,5
 miio_client_helper_nomqtt.sh,setsid miio_client_helper_nomqtt.sh >> /mnt/data/rockrobo/rrlog/miio.log 2>&1&,0,1,0
Binary files /image.org/opt/rockrobo/watchdog/WatchDoge and /image/opt/rockrobo/watchdog/WatchDoge differ
diff -ruN /image.org/opt/rockrobo/watchdog/ntpserver.conf /image/opt/rockrobo/watchdog/ntpserver.conf
--- /image.org/opt/rockrobo/watchdog/ntpserver.conf	2020-11-27 06:14:57.000000000 +0300
+++ /image/opt/rockrobo/watchdog/ntpserver.conf	2023-07-31 03:34:14.000000000 +0300
@@ -1,3 +1 @@
-#you can add your server line by line
-127.0.0.1
-
+pool.ntp.org
diff -ruN /image.org/opt/rockrobo/watchdog/rrwatchdoge.conf /image/opt/rockrobo/watchdog/rrwatchdoge.conf
--- /image.org/opt/rockrobo/watchdog/rrwatchdoge.conf	2020-11-27 06:14:57.000000000 +0300
+++ /image/opt/rockrobo/watchdog/rrwatchdoge.conf	2023-07-31 03:34:14.000000000 +0300
@@ -61,7 +61,7 @@
     mkdir -p $RR_UDATA/wlan
     mkdir -p $RR_UDATA/miio
     ldconfig
-    iptables -I INPUT -j DROP -p tcp --dport 22
+#    iptables -I INPUT -j DROP -p tcp --dport 22
     iptables -I INPUT -j DROP -p tcp --dport 6665
     iptables -I INPUT -j DROP -p udp --dport 6665
     $RR_ROOT/scripts/provision.sh
@@ -95,7 +95,7 @@
 	chdir $RR_ROOT
 	PATH=$PATH:$RR_ROOT/rrlog:$RR_ROOT/cleaner/bin:$RR_ROOT/wlan:$RR_ROOT/watchdog:$RR_ROOT/miio:$RR_ROOT/firmware:$RR_ROOT/rriot
     sysctl -w kernel.softlockup_panic=1 &   
-    ulimit -c unlimited
+    ulimit -c 0
     ulimit -s 1024
     #echo '/mnt/data/rockrobo/rrlog/core.%t.%s.%e' > /proc/sys/kernel/core_pattern 
     echo '| /opt/rockrobo/watchdog/core_helper %t %s %e' > /proc/sys/kernel/core_pattern
diff -ruN /image.org/opt/rockrobo/wlan/wifi_start.sh /image/opt/rockrobo/wlan/wifi_start.sh
--- /image.org/opt/rockrobo/wlan/wifi_start.sh	2020-11-27 06:14:50.000000000 +0300
+++ /image/opt/rockrobo/wlan/wifi_start.sh	2023-07-31 03:34:14.000000000 +0300
@@ -156,8 +156,8 @@
 	set_led blink
 	ifconfig wlan0 up
 	wpa_supplicant -D nl80211 -B -i wlan0 -C /var/run/wpa_supplicant -c $WPA_CONF >/dev/null 2>&1
-	#udhcpc -b -i wlan0 >/dev/null 2>&1
-    udhcpc -b -i wlan0 >/dev/null 2>&1
+	#udhcpc -b -i wlan0 -x hostname:$(cat /etc/hostname) -F $(cat /etc/hostname) >/dev/null 2>&1
+    udhcpc -b -i wlan0 -x hostname:$(cat /etc/hostname) -F $(cat /etc/hostname) >/dev/null 2>&1
 	echo "set wifi sta mode"
 }
 prepare()
diff -ruN /image.org/root/.bashrc /image/root/.bashrc
--- /image.org/root/.bashrc	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/.bashrc	2020-02-10 18:05:26.000000000 +0300
@@ -0,0 +1,99 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+[ -z "$PS1" ] && return
+
+# don't put duplicate lines in the history. See bash(1) for more options
+# ... or force ignoredups and ignorespace
+HISTCONTROL=ignoredups:ignorespace
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+# make less more friendly for non-text input files, see lesspipe(1)
+[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
+
+# set variable identifying the chroot you work in (used in the prompt below)
+if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
+    debian_chroot=$(cat /etc/debian_chroot)
+fi
+
+# set a fancy prompt (non-color, unless we know we "want" color)
+case "$TERM" in
+    xterm-color) color_prompt=yes;;
+esac
+
+# uncomment for a colored prompt, if the terminal has the capability; turned
+# off by default to not distract the user: the focus in a terminal window
+# should be on the output of commands, not on the prompt
+#force_color_prompt=yes
+
+if [ -n "$force_color_prompt" ]; then
+    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+    # We have color support; assume it's compliant with Ecma-48
+    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
+    # a case would tend to support setf rather than setaf.)
+    color_prompt=yes
+    else
+    color_prompt=
+    fi
+fi
+
+if [ "$color_prompt" = yes ]; then
+    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+else
+    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+fi
+unset color_prompt force_color_prompt
+
+# If this is an xterm set the title to user@host:dir
+case "$TERM" in
+xterm*|rxvt*)
+    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+    ;;
+*)
+    ;;
+esac
+
+# enable color support of ls and also add handy aliases
+if [ -x /usr/bin/dircolors ]; then
+    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+    alias ls='ls --color=auto'
+    #alias dir='dir --color=auto'
+    #alias vdir='vdir --color=auto'
+
+    alias grep='grep --color=auto'
+    alias fgrep='fgrep --color=auto'
+    alias egrep='egrep --color=auto'
+fi
+
+# some more ls aliases
+alias ll='ls -alF'
+alias la='ls -A'
+alias l='ls -CF'
+
+# Alias definitions.
+# You may want to put all your additions into a separate file like
+# ~/.bash_aliases, instead of adding them here directly.
+# See /usr/share/doc/bash-doc/examples in the bash-doc package.
+
+if [ -f ~/.bash_aliases ]; then
+    . ~/.bash_aliases
+fi
+
+# enable programmable completion features (you don't need to enable
+# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
+# sources /etc/bash.bashrc).
+#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
+#    . /etc/bash_completion
+#fi
diff -ruN /image.org/root/.profile /image/root/.profile
--- /image.org/root/.profile	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/.profile	2020-02-10 18:05:32.000000000 +0300
@@ -0,0 +1,7 @@
+# ~/.profile: executed by Bourne-compatible login shells.
+
+if [ "$BASH" ]; then
+  if [ -f ~/.bashrc ]; then
+    . ~/.bashrc
+  fi
+fi
diff -ruN /image.org/root/.vimrc /image/root/.vimrc
--- /image.org/root/.vimrc	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/.vimrc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,28 @@
+"
+set nocompatible
+set backspace=indent,eol,start
+set nobackup
+set nowritebackup
+set noundofile
+set history=150
+set ruler     
+set showcmd  
+set incsearch
+map Q gq
+inoremap <C-U> <C-G>u<C-U>
+set hlsearch
+set lazyredraw
+set showmatch
+set mat=2
+set incsearch
+set ignorecase
+set magic
+set fileformats=unix,dos,mac
+set mps+=<:> "
+set tabstop=4
+set shiftwidth=4
+set expandtab
+set smarttab
+set softtabstop=4
+set cursorline
+
Binary files /image.org/root/bin/busybox and /image/root/bin/busybox differ
diff -ruN /image.org/root/run.d/change_root_pass.sh /image/root/run.d/change_root_pass.sh
--- /image.org/root/run.d/change_root_pass.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/run.d/change_root_pass.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+echo "  - Set a password for root"
+echo "root:cleaner" | chpasswd
diff -ruN /image.org/root/run.d/convert2eu.sh /image/root/run.d/convert2eu.sh
--- /image.org/root/run.d/convert2eu.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/run.d/convert2eu.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+if [ -f /mnt/default/roborock.conf ]; then
+    cat /mnt/default/roborock.conf | grep 'location=de' > /dev/null 2>&1
+    if [ "$?" -ne 0 ]; then
+        mount -o remount,rw /mnt/default
+        if [ -w /mnt/default/roborock.conf ]; then
+            echo "  - Change region to EU"
+            cp /mnt/default/roborock.conf /mnt/default/roborock.conf.$(date "+%Y-%m-%d_%H-%M")
+            sed -i 's/location.*/location=de/' /mnt/default/roborock.conf
+        fi
+        mount -o remount,ro /mnt/default
+    fi
+fi
diff -ruN /image.org/root/run.d/init_phrases.sh /image/root/run.d/init_phrases.sh
--- /image.org/root/run.d/init_phrases.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/run.d/init_phrases.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+echo "  - Init random_phrases"
+mkdir -p /mnt/data/random_phrases/phrases
+rm -f /mnt/data/random_phrases/phrases.sh
+ln -s /usr/local/bin/phrases.sh /mnt/data/random_phrases/phrases.sh
+crontab -l | { sed '/phrases.sh/d'; echo "*/2 * * * * /mnt/data/random_phrases/phrases.sh"; } | crontab -
diff -ruN /image.org/root/run.d/openssh2dropbear.sh /image/root/run.d/openssh2dropbear.sh
--- /image.org/root/run.d/openssh2dropbear.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/run.d/openssh2dropbear.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+echo "  - Convert openssh host keys to dropbear"
+mkdir -p /etc/dropbear
+/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_rsa_key /etc/dropbear/dropbear_rsa_host_key
+/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_dsa_key /etc/dropbear/dropbear_dss_host_key
+/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_ecdsa_key /etc/dropbear/dropbear_ecdsa_host_key
+/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_ed25519_key /etc/dropbear/dropbear_ed25519_host_key
diff -ruN /image.org/root/run_once.sh /image/root/run_once.sh
--- /image.org/root/run_once.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/root/run_once.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+date >> /root/vacuum.txt
+
+mkdir -p /mnt/data/root
+touch /mnt/data/root/.bash_history
+ln -s /mnt/data/root/.bash_history /root/ > /dev/null 2>&1
+
+echo "Run custom scripts" >> /root/vacuum.txt
+
+if [ -d /root/run.d ]; then
+    for FILE in /root/run.d/*.sh; do
+        if [ -r $FILE ]; then
+            echo "RUN - $FILE" >> /root/vacuum.txt
+            . $FILE >> /root/vacuum.txt 2>&1
+        fi
+    done
+    unset FILE
+fi
+
+echo "Delete scripts after execution" >> /root/vacuum.txt
+sed -i -E 's/.*run_once.*//' /etc/rc.local
+rm -rf /root/run_once.sh /root/run.d
+echo "END" >> /root/vacuum.txt
diff -ruN /image.org/sbin/MAKEDEV /image/sbin/MAKEDEV
--- /image.org/sbin/MAKEDEV	1970-01-01 03:00:00.000000000 +0300
+++ /image/sbin/MAKEDEV	2013-05-19 10:01:09.000000000 +0400
@@ -0,0 +1,2196 @@
+#! /bin/sh -
+# $Id$
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+# Customisation:
+#   The devices fall into various classes.  This section contains the mapping
+# from a class name into a group name and permission.
+#   You will almost certainly need to edit the group name to match your
+# system, and you may change the permissions to suit your preference.  These
+# lines _must_ be of the format "user group perm".
+
+ public="  root root   0666"
+private="  root root   0600"
+ system="  root root   0660"
+   kmem="  root kmem   0640"
+    tty="  root tty    0666"
+   cons="  root tty    0600"
+dialout="  root dialout 0660"
+    dip="  root dip    0660"
+  mouse="  root root   0660"
+printer="  root lp     0660"
+ floppy="  root floppy 0660"
+   disk="  root disk   0660"
+   scsi="  root root   0600"
+  cdrom="  root cdrom  0660"
+   tape="  root tape   0660"
+  audio="  root audio  0660"
+  video="  root video  0660"
+  ibcs2="  root root   0666"
+scanner="  root root   0666"
+   coda="  root root   0600"
+  ipsec="  root root   0200"
+readable="  root root   0444"
+   lirc="  root video   0640"
+
+MAXVT=63
+
+# defaults for $major_*
+major_ide0=3
+major_ide1=22
+major_sd=8
+major_lp=6
+
+# Remark: OSS/Linux becomes major_OSSLinux
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+# don't stomp on devfs users
+if  [ -c .devfsd ]
+then
+    echo ".devfsd presence implies active DevFS.  Aborting MAKEDEV invocation."
+    # use exit 0, not 1, so postinst scripts don't fail on this
+    exit 0
+fi
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+# don't stomp on non-Linux users
+if [ "$(uname -s)" != "Linux" ]
+then
+    echo "Results undefined on non-Linux systems, aborting MAKEDEV invocation."
+    # use exit 0, not 1, so postinst scripts don't fail on this
+    exit 0
+fi
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+procfs=/proc
+
+opt_v=
+opt_d=
+opt_n=
+
+while [ $# -ge 1 ]
+do
+	case $1 in
+		--)	shift; break ;;
+		-v)	shift; opt_v=1 ;;
+		-d)	shift; opt_d=1 ;;
+		-n)	shift; opt_n=1; opt_v=1 ;;
+		-V)	shift; opt_V=1 ;;
+		-*)	echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
+		*)	break ;;
+	esac
+done
+
+if [ "$opt_V" ]
+then
+	echo "This is Debian MAKEDEV.  For version info, try 'dpkg --list makedev'"
+	echo "See /usr/share/doc/makedev/ for more information on Debian MAKEDEV."
+	exit 0
+fi
+
+opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+devicename () {	# translate device names to something safe
+	# A-Z is not full alphabet in all locales (e.g. in et_EE)
+	echo "$*" | LC_ALL=C sed -e 's/[^A-Za-z0-9_]/_/g' 
+}
+
+makedev () {	# usage: makedev name [bcu] major minor owner group mode
+	if [ "$opt_v" ]
+	then	if [ "$opt_d" ]
+		then	echo "delete $1"
+		else	echo "create $1	$2 $3 $4 $5:$6 $7" 
+		fi
+	fi
+	# missing parameters are a bug - bail - should we do an exit 1 here?
+	case :$1:$2:$3:$4:$5:$6:$7: in
+		*::*) echo "Warning: MAKEDEV $@ is missing parameter(s)." >&2;;
+	esac
+	if [ ! "$opt_n" ]
+	then	
+		if [ "$opt_d" ]
+		then
+			rm -f $1
+		else
+			rm -f $1-
+			if mknod $1- $2 $3 $4 &&
+			   chown $5:$6 $1- &&
+			   chmod $7 $1- &&
+			   mv $1- $1
+			then
+				:	# it worked
+			else
+					# Didn't work, clean up any mess...
+				echo "makedev $@: failed"
+				rm -f $1-
+			fi
+		fi
+	fi
+}
+makefifo () { # usage: makefifo name owner group mode
+	if [ "$opt_v" ]
+	then	if [ "$opt_d" ]
+		then	echo "delete $1"
+		else	echo "create $1 $2:$3 $4" 
+		fi
+	fi
+	# missing parameters are a bug - bail - should we do an exit 1 here?
+	case :$1:$2:$3:$4: in
+		*::*) echo "Warning: MAKEFIFO $@ is missing parameter(s)." >&2;;
+	esac
+	if [ ! "$opt_n" ]
+	then	
+		if [ "$opt_d" ]
+		then
+			rm -f $1
+		else
+			rm -f $1-
+			if mknod $1- p &&
+			   chown $2:$3 $1- &&
+			   chmod $4 $1- &&
+			   mv $1- $1
+			then
+				:	# it worked
+			else
+					# Didn't work, clean up any mess...
+				echo "makefifo $@: failed"
+				rm -f $1-
+			fi
+		fi
+	fi
+}
+symlink () {	# usage: symlink name target
+	if [ "$opt_v" ]
+	then	if [ "$opt_d" ]
+		then	echo "delete $1"
+		else	echo "create $1	-> $2"
+		fi
+	fi
+	[ ! "$opt_n" ] && rm -f $1 &&
+	[ ! "$opt_d" ] && ln -s $2 $1
+}
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+# Debian allows us to assume /bin/sh is a POSIX compliant shell, so go for it!
+
+math () {
+	eval echo "\$(($*))"
+}
+index () {	# index string c
+	eval "I=\${1%$2*}"
+	eval echo "\${#I}"
+}
+suffix () {
+	eval echo "\${1#$2}"
+}
+strip () {
+	eval echo "\${1% $2 *} \${1#* $2 }"
+}
+first () {
+	echo "${1%%?}"
+}
+second () {
+	echo "${1##?}"
+}
+substr () {
+	echo $1 | dd bs=1 count=1 skip=$(( $2 - 1 )) 2> /dev/null
+}
+
+#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
+
+devices=
+if [ ! -f $procfs/devices ]
+then
+	echo "$0: warning: can't read $procfs/devices" >&2
+else
+	exec 3<$procfs/devices
+	while read major device extra <&3
+	do
+		device=`echo $device | sed 's#/.*##'`
+		case "$major" in
+			Character|Block|'')
+				;;
+			*)
+				safedevname=`devicename $device`
+				eval "major_$safedevname=$major"
+				devices="$devices $device"
+				;;
+		esac
+	done
+	exec 3<&-
+fi
+
+Major () {
+	device=$2
+	devname=`devicename $1`
+	if [ "$opt_d" ]
+	then
+		echo -1	# don't care
+	else
+		eval echo \${major_$devname:-\${device:?\"unknown major number for $1\"}}
+	fi
+}
+
+cvt () {
+	while [ $# -ne 0 ]
+	do
+		case "$1" in
+			mem|tty|ttyp|cua|cub|cui)	;;
+			hd)	(for d in a b c d e f g h i j k l m n o p ; do
+					echo -n hd$d " "
+				 done) ; echo
+				;;
+			ide0)	echo hda hdb ;;
+			ide1)	echo hdc hdd ;;
+			ide2)	echo hde hdf ;;
+			ide3)	echo hdg hdh ;;
+			ide4)	echo hdi hdj ;;
+			ide5)	echo hdk hdl ;;
+			ide6)	echo hdm hdn ;;
+			ide7)	echo hdo hdp ;;
+			ide8)	echo hdq hdr ;;
+			ide9)	echo hds hdt ;;
+			sd)	(for d in a b c d e f g h i j k l m n o p ; do
+					echo -n sd$d " "
+				 done) ; echo
+				;;
+			dasd)   (for d in 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 ; do
+					echo -n dasd$d " "
+				done) ; echo
+				;;
+			raw)	echo raw ;;
+			sg)	echo sg ;;
+			sr)	echo scd ;;
+			st)	echo st0 ;;
+			xd)	echo xda xdb ;;
+			ad)	echo ada adb ;;
+			lp)	echo lp ;;
+			mt)	echo ftape ;;
+			qft)	echo ftape ;;
+			loop)	echo loop ;;
+			md)	echo md ;;
+			ibcs2)	echo ibcs2 ;;
+			tpqic02)	echo qic ;;
+			sound)		echo audio ;;
+			logiscan)	echo logiscan ;;
+			ac4096)		echo ac4096 ;;
+			hw)	echo helloworld ;;
+			sbpcd | sbpcd[123])	echo $1 ;;
+			joystick)	echo js ;;
+			input)	echo input ;;
+			apm_bios)	echo apm ;;
+			dcf)		echo dcf ;;
+			aztcd)		echo aztcd ;;
+			cm206cd)	echo cm206cd ;;
+			gscd)		echo gscd ;;
+			pcmcia)	;; # taken care of by its own driver
+			ttyC)	echo cyclades ;;
+			isdn)	echo isdnmodem isdnbri dcbri ;;
+			vcs)	;;
+			pty)	echo pty ;;
+			misc)	echo misc ;;
+			3dfx)	echo 3dfx ;;
+			agpgart)	echo agpgart ;;
+			microcode)	echo microcode ;;
+			ipmi|ipmikcs)	echo ipmi ;;
+			fb)	echo fb ;;
+			nb|drbd)	echo nb0 nb1 nb2 nb3 nb4 nb5 nb6 nb7;;
+			netlink)	echo netlink ;;
+			tap)	echo netlink ;;
+			hamradio)	echo hamradio ;;
+			snd)	;;
+			ptm)	;;
+			pts)	;;
+			ttyB)	(for l in 0 1 2 3 4 5 6 7 ; do
+					echo -n ttyB$l " "
+				 done) ; echo
+				;;
+			ttyS)	echo ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ;;
+			ttyI)	echo ttyI0 ttyI1 ttyI2 ttyI3 ;;
+			ircomm|irlpt)	irda ;;
+			ppp)    echo ppp ;;
+			usb)    echo usb ;;
+			dpt_i2o)	echo dpti ;;
+			bluetooth)	echo bluetooth ;;
+			lvm)    ;; # taken care of by LVM userspace tools
+			ramdisk)	echo ram ;;
+			null)	echo std ;;
+			zero)	echo std ;;
+#			*)	echo "$0: don't know what \"$1\" is" >&2 ;;
+			*)	echo $1
+		esac
+		shift
+	done
+}
+
+for arg in `cvt $*`
+do
+	# this is to make the case patterns work as expected in all locales
+	LC_ALL=C
+	case $arg in
+	generic)
+		# pick the right generic-<arch> using dpkg's knowledge
+		case `dpkg --print-architecture` in
+			alpha)
+				$0 $opts generic-alpha
+				;;
+			arm|armeb|armel)
+				$0 $opts generic-arm
+				;;
+			hppa)
+				$0 $opts generic-hppa
+				;;
+			i386|lpia)
+				$0 $opts generic-i386
+				;;
+			amd64)
+				$0 $opts generic-i386
+				;;
+			ia64)
+				$0 $opts generic-ia64
+				;;
+			m68k)
+				$0 $opts generic-m68k
+				;;
+			mips)
+				$0 $opts generic-mips
+				;;
+			mipsel)
+				$0 $opts generic-mipsel
+				;;
+			powerpc)
+				$0 $opts generic-powerpc
+				;;
+			ppc64)
+				$0 $opts generic-powerpc
+				;;
+			s390)
+				$0 $opts generic-s390
+				;;
+			sh*)	
+				$0 $opts generic-sh
+				;;
+			sparc)
+				$0 $opts generic-sparc
+				;;
+			*)
+				echo "$0: no support for generic on this arch" >&2
+				exit 1
+				;;
+		esac
+		;;
+	generic-alpha)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts xda xdb
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts dac960
+		;;
+	generic-arm)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts xda xdb
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		makedev sunmouse  c 10 6 $mouse
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		;;
+	generic-hppa)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts ttyB0 ttyB1 ttyB2 ttyB3 ttyB4 ttyB5 ttyB6 ttyB7
+		$0 $opts busmice
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts rtc
+		;;
+	generic-i386)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts xda xdb
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts input
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts isdn-io eda edb sonycd mcd mcdx cdu535
+		$0 $opts optcd sjcd cm206cd gscd 
+		$0 $opts lmscd sbpcd aztcd bpcd dac960 dpti ida ataraid cciss
+		$0 $opts i2o.hda i2o.hdb i2o.hdc i2o.hdd
+		;;
+	generic-ia64)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
+		$0 $opts busmice
+		$0 $opts input
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts efirtc
+		;;
+	generic-m68k)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts sg
+		$0 $opts ada adb adc add ade adf
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4 ttyS5
+		$0 $opts m68k-mice
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts nvram
+		$0 $opts audio
+		$0 $opts fb
+		;;
+	generic-mips)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts busmice
+		;;
+	generic-mipsel)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts rtc
+		;;
+	generic-powerpc)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts m68k-mice
+		$0 $opts input
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts nvram
+		$0 $opts audio
+		$0 $opts adb
+		$0 $opts fb
+		$0 $opts rtc
+		$0 $opts isdn-io
+		;;
+	generic-s390)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts dasda dasdb dasdc dasdd dasde dasdf dasdg dasdh \
+			dasdi dasdj dasdk dasdl dasdm dasdn dasdo dasdp \
+			dasdq dasdr dasds dasdt dasdu dasdv dasdw dasdx \
+			dasdy dasdz
+		$0 $opts pty
+		$0 $opts consoleonly
+		$0 $opts rtc
+		;;
+	generic-sh)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4  
+		$0 $opts ttySC0 ttySC1 ttySC2 ttySC3 
+		$0 $opts lp
+		$0 $opts par
+		$0 $opts audio
+		$0 $opts fb
+		$0 $opts rtc
+		;;
+	generic-sparc)
+		$0 $opts std
+		$0 $opts fd
+		$0 $opts fd0 fd1
+		$0 $opts hd sd
+		$0 $opts scd0 scd1
+		$0 $opts st0 st1
+		$0 $opts sg
+		$0 $opts pty
+		$0 $opts console
+		$0 $opts ttyS0 ttyS1 ttyS2 ttyS3 ttyS4
+		$0 $opts busmice
+		$0 $opts fb
+		$0 $opts rtc
+		makedev kbd  c 11 0 $cons
+		makedev sunmouse  c 10 6 $mouse
+		symlink mouse sunmouse
+		makedev openprom  c 10 139 root root 0664
+		;;
+	local)
+		$0.local $opts
+		;;
+	std)
+		makedev mem  c 1 1 $kmem
+		makedev kmem c 1 2 $kmem
+		makedev null c 1 3 $public
+		makedev port c 1 4 $kmem
+		makedev zero c 1 5 $public
+		symlink core $procfs/kcore
+		makedev full c 1 7 $public
+		makedev random c 1 8 $public
+		makedev urandom c 1 9 $public
+		makedev tty  c 5 0 $tty
+		$0 $opts ram
+		$0 $opts loop
+		;;
+	hamradio)
+		$0 $opts scc
+		$0 $opts bc
+		;;
+	scc)
+		for unit in 0 1 2 3 4 5 6 7 
+		do
+			makedev scc$unit c 34 $unit $system
+		done
+		;;
+	mtd)	
+		for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev mtd$unit c 90 `math $unit \* 2` $system
+		done
+		;;
+	bc)	
+		for unit in 0 1 2 3
+		do
+			makedev bc$unit c 51 $unit $system
+		done
+		;;
+	random)
+		makedev random c 1 8 $public
+		;;
+	urandom)
+		makedev urandom c 1 9 $readable
+		;;
+	ram)
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
+			makedev ram$i  b 1 $i $disk
+		done
+		symlink ram ram1
+		;;
+	ram[0-9]|ram1[0-6])
+		unit=`suffix $arg ram`
+		makedev ram$unit b 1 $unit $disk
+		;;
+	initrd)
+		makedev initrd b 1 250 $disk
+		;;
+	raw)
+		makedev rawctl c 162 0 $disk
+		mkdir -p raw
+		for i in 1 2 3 4 5 6 7 8; do
+			makedev raw/raw$i c 162 $i $disk
+		done
+		;;
+	consoleonly)
+		makedev tty0 c 4 0 $cons
+		#	new kernels need a device, old ones a symlink... sigh
+		kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
+		kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
+		if [ $kern_rev1 -gt 2 ]
+		then
+			makedev console c 5 1 $cons
+		else
+			if [ $kern_rev1 -eq 2 ] && [ $kern_rev2 -ge 1 ]
+			then
+				makedev console c 5 1 $cons
+			else
+				symlink console tty0
+			fi
+		fi
+		;;
+	console)
+		$0 $opts consoleonly
+		major=`Major vcs 7`       # not fatal
+		[ "$major" ] && makedev vcs0 c $major 0 $cons
+		symlink vcs vcs0
+		[ "$major" ] && makedev vcsa0 c $major 128 $cons
+		symlink vcsa vcsa0
+		# individual vts
+		line=1
+		while [ $line -le $MAXVT ] && [ $line -le 63 ]
+		do
+			makedev tty$line c 4 $line $cons
+			[ "$major" ] && makedev vcs$line c $major $line $cons
+			[ "$major" ] && makedev vcsa$line c $major `math $line + 128` $cons
+			line=`math $line + 1`
+		done
+		;;
+	adb)
+		# pick the right arch device using dpkg's knowledge
+		case `dpkg --print-architecture` in
+			powerpc)
+				# ADB bus devices (char)
+				makedev adb c 56 0 $mouse
+				makedev adbmouse c 10 10 $mouse
+				;;
+			m68k)
+				# ACSI disk 2, whole device (block)
+				makedev adb b 28 16 $disk
+				for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+				do
+					minor=$(( 16 + $part ))
+					makedev adb$part b 28 $minor $disk
+				done
+				;;
+			*)
+				echo "no support for adb on this arch" >&2
+				exit 1
+				;;
+		esac
+		;;
+	raw1394)
+		makedev raw1394 c 171 0 $disk
+		;;
+	video1394)
+		rm -f video1394
+		mkdir -p video1394
+		for i in `seq 0 15`
+		do
+			makedev video1394/$i c 171 `math 16 + $i` $video
+		done
+		;;
+	alsa)
+		echo "You requested 'alsa' devices.  Please install the alsa-base package instead,"
+		echo "which creates and maintains device information for ALSA."
+		;;
+	nvram)
+		makedev nvram c 10 144 $mouse
+		;;
+	tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
+		line=`suffix $arg tty`
+		makedev tty$line c 4 $line $cons
+		;;
+	ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
+		line=`suffix $arg ttyS`
+		minor=`math 64 + $line`
+		makedev ttyS$line c 4 $minor $dialout
+		;;
+	ttySC[0-3])
+		line=`suffix $arg ttySC`
+		minor=`math 8 + $line`
+		makedev ttySC$line c 204 $minor $dialout
+ 		;;
+	ttyB[0-7])
+		minor=`suffix $arg ttyB`
+		makedev ttyB$minor c 11 $minor $dialout
+		;;
+	pty[a-ep-z])
+		bank=`suffix $arg pty`
+		base=`index pqrstuvwxyzabcde $bank`
+		base=`math $base \* 16`
+		for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
+		do
+			j=`index 0123456789abcdef $i`
+			makedev pty$bank$i c 2 `math $base + $j` $tty
+			makedev tty$bank$i c 3 `math $base + $j` $tty
+		done
+		;;
+	pty)
+		ptysufs=""
+		for i in p q r s t u v w x y z a b c d e
+		do
+			ptysufs="$ptysufs pty$i"
+		done
+		$0 $opts $ptysufs ptmx
+		;;
+	ptmx)
+		# master pty multiplexer for 2.1 kernels
+		makedev ptmx c 5 2 $tty
+		;;
+	cyclades|ttyC)
+		major1=`Major ttyC 19` || continue
+		#major2=`Major cub 20` || continue
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
+			  16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
+		do
+			makedev ttyC$i c $major1 $i $dialout
+			#makedev cub$i c $major2 $i $dialout
+		done
+		;;
+	stallion|ttyE)
+		major1=`Major ttyE 24` || continue
+		#major2=`Major cue 25` || continue
+		majorc=28
+		minor=0
+		until [ $minor -gt 256 ]
+		do
+			makedev ttyE$minor c $major1 $minor $dialout
+			#makedev cue$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		for i in 0 1 2 3
+		do
+			makedev staliomem$i c $majorc $i $private
+		done
+		;;
+	chase|ttyH)
+		major1=`Major ttyH 17` || continue
+		#major2=`Major cuh 18` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyH$minor c $major1 $minor $dialout
+			#makedev cuh$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	rocketport|ttyR)
+		major1=`Major ttyR 46` || continue
+		#major2=`Major cur 47` || continue
+		minor=0
+		until [ $minor -gt 64 ] # tell me if 64 is wrong
+		do
+			makedev ttyR$minor c $major1 $minor $dialout
+			#makedev cur$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	ttyV)
+		major1=`Major ttyV 105` || continue
+		#major2=`Major cuv 106` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyV$minor c $major1 $minor $dialout
+			#makedev cuv$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	digi|ttyD)
+		major1=`Major ttyD 22` || continue
+		#major2=`Major cud 23` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyD$minor c $major1 $minor $dialout
+			#makedev cud$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	specialix|ttyX)
+		major1=`Major ttyX 32` || continue
+		#major2=`Major cux 33` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyX$minor c $major1 $minor $dialout
+			#makedev cux$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	specialixIO8|ttyW)
+		major1=`Major ttyW 75` || continue
+		#major2=`Major cuw 76` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyW$minor c $major1 $minor $dialout
+			#makedev cuw$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	PAM|ttyM)
+		major1=`Major ttyM 79` || continue
+		#major2=`Major cum 80` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyM$minor c $major1 $minor $dialout
+			#makedev cum$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	riscom|ttyL)
+		major=`Major ttyL 48` || continue
+		minor=0
+		until [ $minor -gt 16 ] # tell me if 16 is wrong
+		do
+			makedev ttyL$minor c $major $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	computone|ttyF)
+		major=`Major ttyF 71` || continue
+		#major2=`Major cuf 72` || continue
+		minor=0
+		until [ $minor -gt 255 ]
+		do
+			makedev ttyF$minor c $major $minor $dialout
+			#makedev cuf$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		major=73
+		for i in 0 4 8 12
+		do
+			makedev ip2ipl$i  c $major $i $private
+			makedev ip2stat$i c $major `math $i + 1` $private
+		done
+		;;
+	ESP|ttyP)
+		major=`Major ttyP 57` || continue
+		#major2=`Major cup 58` || continue
+		minor=0
+		until [ $minor -gt 4 ] # tell me if 4 is wrong
+		do
+			makedev ttyP$minor c $major $minor $dialout
+			#makedev cup$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	COMX|comx)
+		major=`Major comx 88` || continue
+		minor=0
+		until [ $minor -gt 4 ] # tell me if 4 is wrong
+		do
+			makedev comx$minor c $major $minor $private
+			minor=`math $minor + 1`
+		done
+		;;
+	isdnmodem|ttyI)
+		major1=`Major ttyI 43` || continue
+		#major2=`Major cui 44` || continue
+		minor=0
+		until [ $minor -gt 63 ]
+		do
+			makedev ttyI$minor c $major1 $minor $dialout
+			#makedev cui$minor c $major2 $minor $dialout
+			minor=`math $minor + 1`
+		done
+		;;
+	isdnbri)
+		major=45
+		minor=0
+		until [ $minor -gt 63 ]
+		do
+			makedev isdn$minor c $major $minor $dialout
+			makedev isdnctrl$minor c $major `math $minor + 64` $dialout
+			makedev ippp$minor c $major `math $minor + 128` $dialout
+			minor=`math $minor + 1`
+		done
+		makedev isdninfo c $major 255 $private
+		;;
+	dcbri)
+		major=52
+		for i in 0 1 2 3
+		do
+			makedev dcbri$i c $major $i $dialout
+		done
+		;;
+	capi)
+		major=68
+		makedev capi20 c $major 0 $dialout
+		for i in 0 1 2 3 4 5 6 7 8 9
+		do
+			makedev capi20.0$i c $major `math $i + 1` $dialout
+		done
+		for i in 10 11 12 13 14 15 16 17 18 19
+		do
+			makedev capi20.$i c $major `math $i + 1` $dialout
+		done
+		;;
+	ubd)
+		major=98
+		for devicenum in 0 1 2 3 4 5 6 7
+		do
+			device=ubd`substr abcdefgh $(($devicenum + 1))`
+			baseminor=`math $devicenum \* 16`
+			makedev $device b $major $baseminor $disk
+			for partition in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+			do
+				minor=`math $baseminor + $partition`
+				makedev $device$partition b $major $minor $disk
+			done
+		done
+		;;
+	fb)
+		for i in 0 1 2 3 4 5 6 7
+		do
+			makedev fb$i c 29 $i $video
+		done
+		;;
+	fb[0-7])
+		dev=`suffix $arg fb`
+		makedev fb$dev c 29 $dev $video
+		;;
+	netlink|tap|tap[0-9]|tap1[0-5])
+		makedev route     c 36 0 $coda
+		makedev skip      c 36 1 $coda
+		makedev fwmonitor c 36 3 $coda
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev tap$i c 36 `math $i + 16` $coda
+		done
+		;;
+	tun)
+		mkdir -p net
+		makedev net/tun c 10 200 $system
+		;;
+	lp)
+		major=`Major lp 6` || continue
+		makedev ${arg}0 c $major 0 $printer
+		makedev ${arg}1 c $major 1 $printer
+		makedev ${arg}2 c $major 2 $printer
+		;;
+	par)
+		major=`Major lp 6` || continue
+		makedev ${arg}0 c $major 0 $printer
+		makedev ${arg}1 c $major 1 $printer
+		makedev ${arg}2 c $major 2 $printer
+		;;
+	parport)
+		major=`Major parport 99` || continue
+		makedev ${arg}0 c $major 0 $printer
+		makedev ${arg}1 c $major 1 $printer
+		makedev ${arg}2 c $major 2 $printer
+		;;
+	slm)
+		major=`Major slm 28` || continue
+		for i in 0 1 2 3
+		do
+			makedev slm c $major $i $printer
+		done
+		;;
+	input)
+		major=`Major pcsp 13` || continue
+		mkdir -p input
+		for i in 0 1 2 3
+		do
+			makedev input/js$i c $major $i $mouse
+			makedev input/mouse$i c $major `math $i + 32` $mouse
+			makedev input/event$i c $major `math $i + 64` $mouse
+		done
+		makedev input/mice c $major 63 $mouse
+		;;
+	busmice)
+		major=`Major mouse 10` || continue
+		makedev logibm	  c $major 0 $mouse
+		makedev psaux     c $major 1 $mouse
+		makedev inportbm  c $major 2 $mouse
+		makedev atibm     c $major 3 $mouse
+		makedev jbm       c $major 4 $mouse
+		;;
+	m68k-mice)
+		major=`Major mouse 10` || continue
+		makedev amigamouse c $major 4 $mouse
+		makedev atarimouse c $major 5 $mouse
+		makedev amigamouse1 c $major 7 $mouse
+		makedev adbmouse  c $major 10 $mouse
+		;;
+	3dfx)
+		major=`Major $arg 107` || continue
+		makedev $arg	c $major 0 $video
+		;;
+	agpgart)
+		major=`Major $arg 10` || continue
+		makedev $arg	c $major 175 $video
+		;;
+	hwrng)
+		major=`Major $arg 10` || continue
+		makedev $arg	c $major 183 $private
+		;;
+	mcelog)
+		major=`Major $arg 10` || continue
+		makedev $arg	c $major 227 $private
+		;;
+	cpu|microcode)
+		mkdir -p cpu
+		makedev cpu/microcode c 10 184 $private
+		for i in 0 1 2 3
+		do
+			mkdir -p cpu/$i
+			makedev cpu/$i/msr   c 202 $i $private
+			makedev cpu/$i/cpuid c 203 $i $private
+		done
+		;;
+	ipmi|ipmikcs)
+		major=`Major ipmikcs 10` || continue
+		makedev ipmikcs	c $major 173 $private
+		;;
+	irda)
+		for i in 0 1
+		do
+			makedev ircomm$i c 161 $i $dialout
+			makedev irlpt$i  c 161 `math $i + 16` $printer
+		done
+		;;
+	irnet)
+		makedev irnet c 10 187 $system
+		;;
+	cbm)
+		makedev cbm c 10 177 $floppy
+		;;
+	misc)
+		major=`Major mouse 10` || continue
+		makedev logibm	  c $major 0 $mouse
+		makedev psaux     c $major 1 $mouse
+		makedev inportbm  c $major 2 $mouse
+		makedev atibm     c $major 3 $mouse
+		makedev jbm       c $major 4 $mouse
+		makedev amigamouse c $major 4 $mouse
+		makedev atarimouse c $major 5 $mouse
+		makedev sunmouse  c $major 6 $mouse
+		makedev amigamouse1 c $major 7 $mouse
+		makedev smouse    c $major 8 $mouse
+		makedev pc110pad  c $major 9 $mouse
+		makedev adbmouse  c $major 10 $mouse
+		makedev beep      c $major 128 $mouse
+		makedev modreq    c $major 129 $mouse
+		makedev watchdog  c $major 130 $mouse
+		makedev temperature c $major 131 $mouse
+		makedev hwtrap    c $major 132 $mouse
+		makedev exttrp    c $major 133 $mouse
+		makedev apm_bios  c $major 134 $mouse
+		makedev rtc       c $major 135 $mouse
+		makedev openprom  c $major 139 root root 0664
+		makedev relay8    c $major 140 $mouse
+		makedev relay16   c $major 141 $mouse
+		makedev msr       c $major 142 $mouse
+		makedev pciconf   c $major 143 $mouse
+		makedev nvram     c $major 144 $mouse
+		makedev hfmodem   c $major 145 $mouse
+		makedev led       c $major 151 $mouse
+		makedev mergemem  c $major 153 $mouse
+		makedev pmu       c $major 154 $mouse
+		;;
+	fuse)
+		makedev fuse      c 10 229 $system
+		;;
+	pmu)
+		major=`Major mouse 10` || continue
+		makedev pmu       c $major 154 $mouse
+		;;
+	thinkpad)
+		major=`Major mouse 10` || continue
+		mkdir -p thinkpad
+		makedev thinkpad/thinkpad c $major 170 $mouse
+		;;
+        rtc)
+		major=`Major mouse 10` || continue
+		makedev rtc       c $major 135 $mouse
+		;;
+	efirtc)
+		major=`Major mouse 10` || continue
+		makedev efirtc    c $major 136 $mouse
+ 		;;
+	mwave)
+		makedev mwave     c 10 219 $mouse
+		;;
+	systrace)
+		makedev systrace  c 10 226 $private
+		;;
+	uinput)
+		mkdir -p input
+		makedev input/uinput  c 10 223 $mouse
+		;;
+	js)
+		major=`Major Joystick 13` || continue
+		for unit in 0 1 2 3
+		do
+			makedev js$unit c $major $unit $readable
+			makedev djs$unit c $major `math $unit + 128` $readable
+		done
+		;;
+	fd[0-7])
+		major=`Major fd 2` || continue
+		base=`suffix $arg fd`
+		if [ $base -ge 4 ]
+		then
+			base=`math $base + 124`
+		fi
+		makedev ${arg} b $major $base $floppy
+		makedev ${arg}d360  b $major `math $base +  4` $floppy
+		makedev ${arg}h1200 b $major `math $base +  8` $floppy
+		makedev ${arg}u360  b $major `math $base + 12` $floppy
+		makedev ${arg}u720  b $major `math $base + 16` $floppy
+		makedev ${arg}h360  b $major `math $base + 20` $floppy
+		makedev ${arg}h720  b $major `math $base + 24` $floppy
+		makedev ${arg}u1440 b $major `math $base + 28` $floppy
+		makedev ${arg}u2880 b $major `math $base + 32` $floppy
+		makedev ${arg}CompaQ b $major `math $base + 36` $floppy
+
+		makedev ${arg}h1440 b $major `math $base + 40` $floppy
+		makedev ${arg}u1680 b $major `math $base + 44` $floppy
+		makedev ${arg}h410  b $major `math $base + 48` $floppy
+		makedev ${arg}u820  b $major `math $base + 52` $floppy
+		makedev ${arg}h1476 b $major `math $base + 56` $floppy
+		makedev ${arg}u1722 b $major `math $base + 60` $floppy
+		makedev ${arg}h420  b $major `math $base + 64` $floppy
+		makedev ${arg}u830  b $major `math $base + 68` $floppy
+		makedev ${arg}h1494 b $major `math $base + 72` $floppy
+		makedev ${arg}u1743 b $major `math $base + 76` $floppy
+		makedev ${arg}h880  b $major `math $base + 80` $floppy
+		makedev ${arg}u1040 b $major `math $base + 84` $floppy
+		makedev ${arg}u1120 b $major `math $base + 88` $floppy
+		makedev ${arg}h1600 b $major `math $base + 92` $floppy
+		makedev ${arg}u1760 b $major `math $base + 96` $floppy
+		makedev ${arg}u1920 b $major `math $base + 100` $floppy
+		makedev ${arg}u3200 b $major `math $base + 104` $floppy
+		makedev ${arg}u3520 b $major `math $base + 108` $floppy
+		makedev ${arg}u3840 b $major `math $base + 112` $floppy
+		makedev ${arg}u1840 b $major `math $base + 116` $floppy
+		makedev ${arg}u800  b $major `math $base + 120` $floppy
+		makedev ${arg}u1600 b $major `math $base + 124` $floppy
+		;;
+	ed[a-b])
+		major=`Major ed 36` || continue
+		unit=`suffix $arg ed`
+		base=`index ab $unit`
+		base=`math $base \* 64`
+		makedev ed$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
+		do
+			makedev ed$unit$part b $major `math $base + $part` $disk
+		done
+		;;
+	hd[a-b])
+		major=`Major ide0` || major=`Major hd 3` || continue
+		unit=`suffix $arg hd`
+		base=`index ab $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major `math $base + $part` $disk
+		done
+		;;
+	hd[c-d])
+		major=`Major ide1 22` || continue
+		unit=`suffix $arg hd`
+		base=`index cd $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[e-f])
+		major=`Major ide2 33` || continue
+		unit=`suffix $arg hd`
+		base=`index ef $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[g-h])
+		major=`Major ide3 34` || continue
+		unit=`suffix $arg hd`
+		base=`index gh $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[i-j])
+		major=`Major ide4 56` || continue
+		unit=`suffix $arg hd`
+		base=`index ij $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[k-l])
+		major=`Major ide5 57` || continue
+		unit=`suffix $arg hd`
+		base=`index kl $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[m-n])
+		major=`Major ide6 88` || continue
+		unit=`suffix $arg hd`
+		base=`index mn $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[o-p])
+		major=`Major ide7 89` || continue
+		unit=`suffix $arg hd`
+		base=`index op $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[q-r])
+		major=`Major ide8 90` || continue
+		unit=`suffix $arg hd`
+		base=`index qr $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	hd[s-t])
+		major=`Major ide9 91` || continue
+		unit=`suffix $arg hd`
+		base=`index st $unit`
+		base=`math $base \* 64`
+		makedev hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+		do
+			makedev hd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	ub|uba)	
+		major=180
+		makedev uba b $major 0 $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev uba$part b $major $part $disk
+		done
+		;;
+	ht0)
+		major=`Major ht0 37` || continue
+		# Only one IDE tape drive is currently supported; ht0.
+		makedev ht0 c $major 0 $tape
+		makedev nht0 c $major 128 $tape
+		;;
+	pt)
+		major=`Major pt 96` || continue
+		for i in 0 1 2 3
+		do
+			makedev pt$i c $major $i $tape
+			makedev npt$i c $major `math $i + 128` $tape
+		done
+		;;
+	xd[a-d])
+		major=`Major xd 13` || continue
+		unit=`suffix $arg xd`
+		base=`index abcd $unit`
+		base=`math $base \* 64`
+		makedev xd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
+		do
+			makedev xd$unit$part b $major $(( $base + $part )) $disk
+		done
+		;;
+	sd[a-z])
+		major=`Major sd 8` || continue
+		unit=`suffix $arg sd`
+		base=`index abcdefghijklmnopqrstuvwxyz $unit`
+		base=$(( $base * 16 ))
+		if [ $base -lt 256 ]; then
+			major=8
+		else
+			major=65
+			base=$(( $base - 256 ))
+		fi
+		makedev sd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev sd$unit$part b $major $minor $disk
+		done
+		;;
+	sd[a-d][a-z])
+		unit=`suffix $arg sd`
+		unitmaj=`first $unit`
+		unitmin=`second $unit`
+		basemaj=`index Xabcd $unitmaj`
+		basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
+		basemaj=`math $basemaj \* 416`
+		basemin=`math $basemin \* 16`
+		base=`math $basemaj + $basemin`
+		basemaj=`math $base / 256`
+		base=`math $base % 256`
+		major=`math basemaj \+ 64`
+		if [ $major -gt 71 ]; then
+			echo "$0: don't know how to make device \"$arg\"" >&2
+			exit 0
+		fi
+		makedev sd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev sd$unit$part b $major $minor $disk
+		done
+                ;;
+	i2o.hd[a-z])
+		[ -d i2o ] || {
+			mkdir i2o
+			chown root:root i2o
+			chmod 755 i2o
+      			[ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
+		}
+		unit=`suffix $arg i2o.hd`
+		base=`index abcdefghijklmnopqrstuvwxyz $unit`
+		base=$(( $base * 16 ))
+		if [ $base -lt 256 ]; then
+			major=80
+		else
+			major=81
+			base=$(( $base - 256 ))
+		fi
+		makedev i2o/hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev i2o/hd$unit$part b $major $minor $disk
+		done
+		;;
+	i2o.hd[a-d][a-z])
+		[ -d i2o ] || {
+			mkdir i2o
+			chown root:root i2o
+			chmod 755 i2o
+      			[ -e i2o/ctl ] || makedev i2o/ctl c 10 166 $disk
+		}
+		unit=`suffix $arg i2o.hd`
+		unitmaj=`first $unit`
+		unitmin=`second $unit`
+		basemaj=`index Xabcd $unitmaj`
+		basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin`
+		basemaj=`math $basemaj \* 416`
+		basemin=`math $basemin \* 16`
+		base=`math $basemaj + $basemin`
+		basemaj=`math $base / 256`
+		base=`math $base % 256`
+		major=`math basemaj \+ 80`
+		if [ $major -gt 87 ]; then
+			echo "$0: don't know how to make device \"$arg\"" >&2
+			exit 0
+		fi
+		makedev i2o/hd$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev i2o/hd$unit$part b $major $minor $disk
+		done
+		;;
+	dasd[a-z])
+		major=`Major dasd 94` || continue
+		unit=`suffix $arg dasd`
+		base=`index abcdefghijklmnopqrstuvwxyz $unit`
+		base=$(( $base * 4 ))
+		if [ $base -lt 256 ]; then
+			major=94
+		else
+			major=65
+			base=$(( $base - 256 ))
+		fi
+		makedev dasd$unit b $major $base $disk
+		for part in 1 2 3
+		do
+			minor=$(( $base + $part ))
+			makedev dasd$unit$part b $major $minor $disk
+		done
+		;;
+	ad[a-p])
+		major=`Major ad 28` || continue
+		unit=`suffix $arg ad`
+		base=`index abcdefghijklmnop $unit`
+		base=`math $base \* 16`
+		makedev ad$unit b $major $base $disk
+		for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			minor=$(( $base + $part ))
+			makedev ad$unit$part b $major $minor $disk
+		done
+		;;
+	dac960)
+		for ctr in 0 1 2 3 4 5 6 7
+		do
+			$0 $opts dac960.$ctr
+		done
+		makedev dac960_gam c 10 252 $disk
+		;;
+	dac960.[0-7])
+		[ -d rd ] || {
+			mkdir rd
+			chown root:root rd
+			chmod 755 rd
+		}
+		unit=`suffix $arg dac960.`
+		    major=`math 48 + $unit`
+		    minor=0
+		    for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+			    17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+		    do
+			makedev rd/c${unit}d${ld} b $major $minor $disk
+			minor=`math $minor + 1`
+			for part in 1 2 3 4 5 6 7
+			do
+			    makedev rd/c${unit}d${ld}p$part b $major $minor $disk
+			    minor=`math $minor + 1`
+			done
+		    done
+		;;
+	dpti)
+		major=151
+		for ld in 1 2 3 4 5 6 7
+		do
+		   minor=`math $ld -1`
+		   makedev dpti${ld} c $major $minor $disk
+                done
+                ;;
+	ataraid)
+		for ctr in 0 1 2 # 3 4 5 6 7
+		do
+			$0 $opts ataraid.$ctr
+		done
+		;;
+	ataraid.[0-7])
+		[ -d ataraid ] || {
+			mkdir ataraid
+			chown root:root ataraid
+			chmod 755 ataraid
+		}
+                unit=`suffix $arg ataraid.`
+                major=114
+                minor=`math $unit \* 16`
+                makedev ataraid/d${unit} b $major $minor $disk
+                for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+                do
+                   minor=`math $minor + 1`
+                   makedev ataraid/d${unit}p$part b $major $minor $disk
+                done
+ 		;;
+	ida)
+		for ctr in 0 1 2 # 3 4 5 6 7
+		do
+			$0 $opts ida.$ctr
+		done
+		;;
+	ida.[0-7])
+		[ -d ida ] || {
+			mkdir ida
+			chown root:root ida
+			chmod 755 ida
+		}
+		unit=`suffix $arg ida.`
+		major=`math 72 + $unit`
+		minor=0
+		for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+		    makedev ida/c${unit}d${ld} b $major $minor $disk
+		    minor=`math $minor + 1`
+		    for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		    do
+			makedev ida/c${unit}d${ld}p$part b $major $minor $disk
+			minor=`math $minor + 1`
+		    done
+		done
+		;;
+	cciss)
+		for ctr in 0 1 2 # 3 4 5 6 7
+		do
+			$0 $opts cciss.$ctr
+		done
+		;;
+	cciss.[0-7])
+		[ -d cciss ] || {
+			mkdir cciss
+			chown root:root cciss
+			chmod 755 cciss
+		}
+		unit=`suffix $arg cciss.`
+		major=`math 104 + $unit`
+		minor=0
+		for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+		    makedev cciss/c${unit}d${ld} b $major $minor $disk
+		    minor=`math $minor + 1`
+		    for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		    do
+			makedev cciss/c${unit}d${ld}p$part b $major $minor $disk
+			minor=`math $minor + 1`
+		    done
+		done
+		;;
+	rom)
+		major=`Major rom 31`
+		for i in 0 1 2 3 4 5 6 7
+		do
+			makedev rom$i    b $major $i $disk
+			makedev rrom$i   b $major `math $i +8` $disk
+			makedev flash$i  b $major `math $i +16` $disk
+			makedev rflash$i b $major `math $i +24` $disk
+		done
+		;;
+	nb[0-7])
+		major=`Major nbd 43` || continue
+		minor=`suffix $arg nb`
+		makedev nb$minor b $major $minor $disk
+		;;
+	loop)
+		for part in 0 1 2 3 4 5 6 7
+		do
+			makedev loop$part b 7 $part $disk
+		done
+		;;
+	loop[0-9]|loop[1-9][0-9]|loop1[0-9][0-9]|loop2[0-4][0-9]|loop25[0-5])
+		minor=`suffix $arg loop`
+		makedev loop$minor b 7 $minor $disk
+		;;
+	md)
+		major=`Major md 9` || continue
+		for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
+			16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+		do
+			makedev md$part b $major $part $disk
+		done
+		;;
+	st[0-7])
+		major=`Major st 9`
+		unit=`suffix $arg st`
+		makedev st${unit}   c $major $unit $tape
+		makedev nst${unit}  c $major `math 128 + $unit` $tape
+
+		makedev st${unit}l  c $major `math 32 + $unit` $tape
+		makedev nst${unit}l c $major `math 160 + $unit` $tape
+
+		makedev st${unit}m  c $major `math 64 + $unit` $tape
+		makedev nst${unit}m c $major `math 192 + $unit` $tape
+
+		makedev st${unit}a  c $major `math 96 + $unit` $tape
+		makedev nst${unit}a c $major `math 224 + $unit` $tape
+		;;
+	qic)
+		major=`Major tpqic02 12`
+		makedev ntpqic11   c $major   2 $tape
+		makedev tpqic11    c $major   3 $tape
+		makedev ntpqic24   c $major   4 $tape
+		makedev tpqic24    c $major   5 $tape
+		makedev ntpqic120  c $major   6 $tape
+		makedev tpqic120   c $major   7 $tape
+		makedev ntpqic150  c $major   8 $tape
+		makedev tpqic150   c $major   9 $tape
+		makedev rmt8       c $major   6 $tape
+		makedev rmt16      c $major   8 $tape
+		makedev tape-d     c $major 136 $tape
+		makedev tape-reset c $major 255 $tape
+		$0 $opts qft
+		;;
+	ftape)
+		major=`Major qft 27` || continue
+		for unit in 0 1 2 3
+		do
+			makedev qft$unit     c $major $unit $tape
+			makedev nqft$unit    c $major `math $unit + 4` $tape
+			makedev zqft$unit    c $major `math $unit + 16` $tape
+			makedev nzqft$unit   c $major `math $unit + 20` $tape
+			makedev rawqft$unit  c $major `math $unit + 32` $tape
+			makedev nrawqft$unit c $major `math $unit + 36` $tape
+		done
+		symlink ftape qft0
+		symlink nftape nqft0
+		;;
+	sr|scd|scd-all)
+		major=`Major sr 11` || continue
+		for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+		do
+			makedev scd$unit b $major $unit $cdrom
+			symlink sr$unit scd$unit
+		done
+		;;
+	pktcdvd)
+		echo "pktcdvd major number is now dynamic, taking no action"
+	#	major=97
+	#	for unit in 0 1 2 3
+	#	do
+	#		makedev pktcdvd$unit b $major $unit $cdrom
+	#	done
+		;;
+	cfs0)
+		makedev cfs0 c 67 0 $coda
+		;;
+	scd[0-9]|scd[0-1][0-9])
+		major=`Major sr 11` || continue
+		unit=`suffix $arg scd`
+		makedev scd$unit b $major $unit $cdrom
+		symlink sr$unit scd$unit 
+		;;
+	ttyI[0-9]|ttyI[1-5][0-9]|ttyI[6][0-3])
+		major=43
+		unit=`suffix $arg ttyI`
+		makedev ttyI$unit c $major $unit $dialout
+		;;
+	ppp)
+		major=108
+		makedev ppp c $major 0 $dip
+		;;
+	ippp[0-9]|ippp[1-5][0-9]|ippp[6][0-3])
+		major=45
+		unit=`suffix $arg ippp`
+		minor=`math $unit + 128`
+		makedev ippp$unit c $major $minor $dialout
+		;;
+	isdn[0-9]|isdn[1-5][0-9]|isdn[6][0-3])
+		major=45
+		unit=`suffix $arg isdn`
+		minor=`math $unit + 0`
+		makedev isdn$unit c $major $minor $dialout
+		;;
+	isdnctrl[0-9]|isdnctrl[1-5][0-9]|isdnctrl[6][0-3])
+		major=45
+		unit=`suffix $arg isdnctrl`
+		minor=`math $unit + 64`
+		makedev isdnctrl$unit c $major $minor $dialout
+		;;
+	isdninfo)
+		makedev isdninfo c 45 255 $private
+		;;
+	isdn-tty)
+		major=43
+		for unit in 0 1 2 3 4 5 6 7
+		do
+			makedev ttyI$unit c $major $unit $dialout
+		done
+		;;
+	isdn-ippp)
+		major=45
+		for unit in 0 1 2 3 4 5 6 7
+		do
+			makedev ippp$unit c $major `math $unit + 128` $dialout
+		done
+		;;
+	isdn-io)
+		for unit in 0 1 2 3 4 5 6 7
+		do
+			makedev isdn$unit c 45 $unit $dialout
+			makedev isdnctrl$unit c 45 `math $unit + 64` $dialout
+			makedev ippp$unit c 45 `math $unit + 128` $dialout
+		done
+		makedev isdninfo c 45 255 $dialout
+		;;
+	sonycd)
+		major=`Major sonycd 15` || continue
+		makedev $arg b $major 0 $cdrom
+		;;
+	mcd)
+		major=`Major mcd 23` || continue
+		makedev $arg b $major 0 $cdrom
+		;;
+	mcdx|mcdx[0-4])
+		major=`Major $arg 20` || continue
+		for unit in 0 1 2 3 4
+		do
+			makedev mcdx$unit b $major $unit $cdrom
+		done
+		test -r mcdx || symlink mcdx mcdx0
+		;;
+	cdu535)
+		makedev $arg b 24 0 $cdrom
+		;;
+	lmscd)
+		makedev $arg b 24 0 $cdrom
+		;;
+	sbpcd|sbpcd[123])
+		major=`Major $arg 25` || continue
+		base=`suffix ${arg}0 sbpcd`
+		for minor in 0 1 2 3
+		do
+			# XXX
+			unit=$(substr 0123456789abcdef $(( $base * 4 + $minor + 1 )) )
+			makedev sbpcd$unit b $major $minor $cdrom
+		done
+		[ $arg = sbpcd ] && symlink $arg ${arg}0
+		;;
+	aztcd)
+		major=`Major $arg 29` || continue
+		makedev ${arg}0 b $major 0 $cdrom
+		;;
+	cm206cd)
+		major=`Major $arg 30` || continue
+		makedev ${arg}0 b $major 0 $cdrom
+		;;
+	gscd)
+		major=`Major $arg 16` || continue
+		makedev ${arg}0 b $major 0 $cdrom
+		;;
+	pcd)
+		for unit in 0 1 2 3 
+		do
+			makedev pcd$unit b 46 $unit $cdrom
+		done
+		;;
+	bpcd)
+		makedev $arg b 41 0 $cdrom
+		;;
+	optcd)
+		makedev $arg b 17 0 $cdrom
+		;;
+	sjcd)
+		makedev $arg b 18 0 $cdrom
+		;;
+	cfs|coda)
+		makedev cfs0 c 67 0 $private
+		;;
+	xfs|nnpfs|arla)
+		makedev xfs0 c 103 0 $private
+		makedev nnpfs0 c 103 0 $private
+		;;
+	logiscan)
+		major=`Major logiscan` || continue
+		makedev $arg c $major 0 $scanner
+		;;
+	toshiba)
+		major=`Major $arg 10` || continue
+		makedev $arg c $major 181 root root 0666
+		;;
+	m105scan)
+		major=`Major m105` || continue
+		makedev $arg c $major 0 $scanner
+		;;
+	ac4096)
+		major=`Major ac4096` || continue
+		makedev $arg c $major 0 $scanner
+		;;
+	audio)
+		major=`Major sound 14`
+		makedev mixer      c $major  0 $audio
+		makedev mixer1     c $major 16 $audio
+		makedev mixer2     c $major 32 $audio
+		makedev mixer3     c $major 48 $audio
+		makedev sequencer  c $major  1 $audio
+		makedev midi00     c $major  2 $audio
+		makedev midi01     c $major 18 $audio
+		makedev midi02     c $major 34 $audio
+		makedev midi03     c $major 50 $audio
+		makedev dsp        c $major  3 $audio
+		makedev dsp1       c $major 19 $audio
+		makedev dsp2       c $major 35 $audio
+		makedev dsp3       c $major 51 $audio
+		makedev audio      c $major  4 $audio
+		makedev audio1     c $major 20 $audio
+		makedev audio2     c $major 36 $audio
+		makedev audio3     c $major 52 $audio
+		makedev sndstat    c $major  6 $audio
+		makedev audioctl   c $major  7 $audio
+		major=31
+		makedev mpu401data c $major 0  $audio
+		makedev mpu401stat c $major 1  $audio
+		major=35
+		for i in 0 1 2 3
+		do
+			makedev midi$i  c $major $i $audio
+			makedev rmidi$i c $major `math $i + 64` $audio
+			makedev smpte$i c $major `math $i + 128` $audio
+		done
+		;;
+	pcaudio)
+		major=`Major pcsp 13` || continue
+		makedev pcmixer c $major 0 $audio
+		makedev pcsp    c $major 3 $audio
+		makedev pcaudio c $major 4 $audio
+		;;
+	video|video4linux|v4l|radio)
+		# video4linux api includes radio, teletext, etc.
+		major=`Major video 81` || continue
+		minor=0
+		until [ $minor -gt 63 ]
+		do
+			makedev video$minor c $major $minor $video
+			makedev radio$minor c $major `math $minor + 64` $video
+			minor=`math $minor + 1`
+		done
+		symlink radio radio0
+		minor=0
+		until [ $minor -gt 31 ]
+		do
+			makedev vtx$minor c $major `math $minor + 192` $video
+			makedev vbi$minor c $major `math $minor + 224` $video
+			minor=`math $minor + 1`
+		done
+		symlink video video0
+		symlink vbi vbi0
+		major=82
+		minor=0
+		until [ $minor -gt 1 ]
+		do
+			makedev winradio$minor c $major $minor $video
+			minor=`math $minor + 1`
+		done
+		major=83
+		makedev vtx     c $major 0 $video
+		makedev vttuner c $major 16 $video
+		;;
+	i2c)
+		# making it possible to create an arbitrary number of i2c
+		# devices might be good, but 8 should suffice for now
+		major=`Major i2c 89` || continue
+		minor=0
+		until [ $minor -gt 7 ] 
+		do
+			makedev i2c-$minor c $major $minor $private
+			minor=`math $minor + 1`
+		done
+		;;
+	tlk)
+		major=102
+		minor=0
+		until [ $minor -gt 3 ] # tell me if 3 is wrong...
+		do
+			makedev tlk$minor c $major $minor $video
+			minor=`math $minor + 1`
+		done
+		;;
+	srnd)
+		makedev srnd0 c 110 0 $video
+		makedev srnd1 c 110 1 $video
+		;;
+	fgrab)
+		makedev mmetfgrab c 40 0 $video
+		makedev wvisfgrab c 26 0 $video
+		for i in 0 1 # more?
+		do
+			makedev iscc$i    c 93 $i $video
+			makedev isccctl$i c 93 `math $i + 128` $video
+		done
+		for i in 0 1 # more?
+		do
+			makedev dcxx$i c 94 $i $video
+		done
+		;;
+	sg|sg-all)
+		major=`Major sg 21`
+		for unit in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+		do
+			makedev sg$unit c $major $unit $scsi
+		done
+		;;
+	pg)
+		major=`Major pg 97`
+		for unit in 0 1 2 3
+		do
+			makedev pg$unit c $major $unit $scsi
+		done
+		;;
+	fd)
+		# not really devices, we use the /proc filesystem
+		symlink fd     $procfs/self/fd
+		symlink stdin  fd/0
+		symlink stdout fd/1
+		symlink stderr fd/2
+		;;
+	ibcs2)
+		major=`Major ibcs2 30` || continue
+		makedev socksys c $major 0 $ibcs2
+		symlink nfsd socksys
+		makedev spx     c $major 1 $ibcs2
+		symlink X0R null
+		;;
+	netlink)
+		major=36
+		makedev route c $major 0 $private
+		makedev skip  c $major 1 $private
+		;;
+	enskip)
+		major=64
+		makedev enskip c $major 0 $private
+		;;
+	ipfilt*)
+		major=95
+		makedev ipl     c $major 0 $private
+		makedev ipnat   c $major 1 $private
+		makedev ipstate c $major 2 $private
+		makedev ipauth  c $major 3 $private
+		;;
+	qng)
+		makedev qng c 77 0 $private
+		;;
+	apm)
+		major=`Major mouse 10` || continue
+		makedev apm_bios  c $major 134 $mouse
+		;;
+	dcf)
+		major=`Major dcf` || continue
+		makedev $arg c $major 0 $system
+		;;
+	helloworld)
+		major=`Major hw` || continue
+		makedev helloworld c $major 0 $public
+		;;
+	ipsec)
+		# For the Free S/WAN (http://www.xs4all.nl/~freeswan/)
+		# implementation of IPSEC
+		makedev ipsec c 36 10 $ipsec
+		;;
+	comedi)
+		major=98
+		for minor in 0 1 2 3
+		do
+			makedev comedi$minor c $major $minor $public
+		done
+		;;
+	tilp)
+		for i in `seq 0 7`
+		do
+			makedev tipar$i c 115 $i $printer
+			makedev tiser$i c 115 `math 8 + $i` $dialout
+		done
+		for i in `seq 0 31`
+		do
+			makedev tiusb$i c 115 `math 16 + $i` $dialout
+		done
+		;;
+	dvb)
+		# check if kernel-version is >= 2.6.8, if yes, create dvb-devices with
+		# major-number 212, in the other case 250
+		
+		kern_rev1=`uname -r | sed -e 's@^\([^.]*\)\..*@\1@'`
+		kern_rev2=`uname -r | sed -e 's@^[^.]*\.\([^.]*\)\..*@\1@'`
+		kern_rev3=`uname -r | sed -e 's@^[^.]*\.[^.]*\.\([^.][0-9]*\).*@\1@'`
+      
+		dvb_major=250
+
+		if [ $kern_rev1 -gt 2 ] || ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -gt 6 ]) \
+			|| ([ $kern_rev1 -eq 2 ] && [ $kern_rev2 -eq 6 ] && [ $kern_rev3 -ge 8 ])
+		then 
+			dvb_major=212 
+		fi
+
+		mkdir -p dvb
+		for i in 0 1 2 3
+		do
+			mkdir -p dvb/adapter$i
+			makedev dvb/adapter$i/video0	c $dvb_major `math 64 \* $i + 0` $video
+			makedev dvb/adapter$i/audio0    c $dvb_major `math 64 \* $i + 1` $video
+			makedev dvb/adapter$i/frontend0 c $dvb_major `math 64 \* $i + 3` $video
+			makedev dvb/adapter$i/demux0    c $dvb_major `math 64 \* $i + 4` $video
+			makedev dvb/adapter$i/dvr0      c $dvb_major `math 64 \* $i + 5` $video
+			makedev dvb/adapter$i/ca0       c $dvb_major `math 64 \* $i + 6` $video
+			makedev dvb/adapter$i/net0      c $dvb_major `math 64 \* $i + 7` $video
+			makedev dvb/adapter$i/osd0      c $dvb_major `math 64 \* $i + 8` $video
+		done
+		;;
+	usb)
+		mkdir -p usb
+		major=180
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+		do
+			makedev usb/lp$i c $major $i $printer
+			makedev usb/mouse$i c $major `math $i + 16` $mouse
+			makedev usb/ez$i c $major `math $i + 32` $system
+			makedev usb/scanner$i c $major `math $i + 48` $scanner
+			makedev usb/hiddev$i c $major `math $i + 96` $system
+			makedev ttyACM$i c 166 $i $dialout
+			makedev ttyUSB$i c 188 $i $dialout
+		done
+		makedev usb/rio500 c $major 64 $audio
+		makedev usb/usblcd c $major 65 $audio
+		makedev usb/cpad0 c $major 66 $audio
+		;;
+	bluetooth)
+		major=216
+		for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
+			16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+		do
+			makedev rfcomm$i c $major $i $dialout
+		done
+		makedev vhci c 10 250 $dialout
+		for i in 0 1 2 3; do
+			makedev ttyUB$i c 216 $i $dialout
+			makedev ccub$i c 217 $i $dialout
+		done
+		;;
+	paride)
+                major=45
+                for unit in a b c d
+		do
+                    base=`index abcd $unit`
+                    base=`math $base \* 16`
+                    makedev pd$unit b $major $base $disk
+                    for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+                    do
+			makedev pd$unit$part b $major $(( $base + $part )) $disk
+                    done
+		done
+		for i in 0 1 2 3
+		do
+		    makedev pcd$i b 46 $i $cdrom
+		    makedev pf$i  b 47 $i $floppy
+		done
+                ;;
+        lirc)
+                makedev lirc c 61 0 $lirc
+                for i in d m; do
+                   makefifo lirc${i} $lirc
+                done
+                ;;
+	update)
+		devices=
+		if [ ! -f $procfs/devices ]
+		then
+			echo "$0: warning: can't read $procfs/devices" >&2
+		else
+			exec 3<$procfs/devices
+			while read major device extra <&3
+			do
+				device=`echo $device | sed 's#/.*##'`
+				case "$major" in
+					Character|Block|'')
+						;;
+					*)
+						eval "major_$device=$major"
+						devices="$devices $device"
+						;;
+				esac
+			done
+			exec 3<&-
+		fi
+
+		if [ ! "$devices" ]
+		then
+			echo "$0: don't appear to have any devices" >&2
+			continue
+		fi
+		if [ "$opt_d" ]
+		then
+			echo "$0: can't delete an update" >&2
+			continue
+		fi
+		create=
+		delete=
+		devs="$devices"
+		if [ -f DEVICES ]
+		then
+			exec 3<DEVICES
+			while read device major <&3
+			do
+				eval now=\$major_$device
+				if [ "$now" = "" ]
+				then
+					delete="$delete `cvt $device`"
+					continue
+				elif [ "$now" != $major ]
+				then
+					create="$create "`cvt $device`
+				fi
+				devs=`strip " $devs " $device`
+			done
+			exec 3<&-
+		fi
+		create="$create "`cvt $devs`
+		[ "$delete" != "" ] && $0 $opts -d $delete
+		[ "$create" != " " ] && $0 $opts $create
+		[ "$opt_n" ] && continue
+		for device in $devices
+		do
+			if [ "`cvt $device`" ]
+			then
+			    eval echo $device \$major_$device
+			fi
+		done > DEVICES
+		;;
+	*)
+		echo "$0: don't know how to make device \"$arg\"" >&2
+		exit 1
+		;;
+	esac
+done
+
+exit 0
Binary files /image.org/sbin/e2fsck and /image/sbin/e2fsck differ
Binary files /image.org/sbin/e2undo and /image/sbin/e2undo differ
Binary files /image.org/sbin/fsck and /image/sbin/fsck differ
Binary files /image.org/sbin/fsck.ext2 and /image/sbin/fsck.ext2 differ
Binary files /image.org/sbin/fsck.ext3 and /image/sbin/fsck.ext3 differ
Binary files /image.org/sbin/fsck.ext4 and /image/sbin/fsck.ext4 differ
Binary files /image.org/sbin/ip6tables and /image/sbin/ip6tables differ
Binary files /image.org/sbin/resize2fs and /image/sbin/resize2fs differ
Binary files /image.org/sbin/tune2fs and /image/sbin/tune2fs differ
Binary files /image.org/usr/bin/adbd and /image/usr/bin/adbd differ
Binary files /image.org/usr/bin/bbe and /image/usr/bin/bbe differ
Binary files /image.org/usr/bin/curl and /image/usr/bin/curl differ
Binary files /image.org/usr/bin/dbclient and /image/usr/bin/dbclient differ
Binary files /image.org/usr/bin/dropbearkey and /image/usr/bin/dropbearkey differ
Binary files /image.org/usr/bin/file and /image/usr/bin/file differ
Binary files /image.org/usr/bin/htop and /image/usr/bin/htop differ
Binary files /image.org/usr/bin/nano and /image/usr/bin/nano differ
Binary files /image.org/usr/bin/perl and /image/usr/bin/perl differ
Binary files /image.org/usr/bin/play and /image/usr/bin/play differ
Binary files /image.org/usr/bin/rec and /image/usr/bin/rec differ
Binary files /image.org/usr/bin/rsync and /image/usr/bin/rsync differ
Binary files /image.org/usr/bin/scp and /image/usr/bin/scp differ
Binary files /image.org/usr/bin/sftp and /image/usr/bin/sftp differ
Binary files /image.org/usr/bin/snmpd and /image/usr/bin/snmpd differ
Binary files /image.org/usr/bin/sox and /image/usr/bin/sox differ
Binary files /image.org/usr/bin/soxi and /image/usr/bin/soxi differ
Binary files /image.org/usr/bin/ssh and /image/usr/bin/ssh differ
diff -ruN /image.org/usr/bin/sudo /image/usr/bin/sudo
--- /image.org/usr/bin/sudo	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/bin/sudo	2020-03-22 15:54:52.000000000 +0300
@@ -0,0 +1,4 @@
+#!/bin/sh
+# dummy for sudo
+
+"$@"
Binary files /image.org/usr/bin/timeout and /image/usr/bin/timeout differ
Binary files /image.org/usr/bin/wget and /image/usr/bin/wget differ
Binary files /image.org/usr/bin/xxd and /image/usr/bin/xxd differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libedit.so.2 and /image/usr/lib/arm-linux-gnueabihf/libedit.so.2 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libedit.so.2.0.47 and /image/usr/lib/arm-linux-gnueabihf/libedit.so.2.0.47 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libltdl.so.7 and /image/usr/lib/arm-linux-gnueabihf/libltdl.so.7 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libltdl.so.7.3.0 and /image/usr/lib/arm-linux-gnueabihf/libltdl.so.7.3.0 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libmad.so.0 and /image/usr/lib/arm-linux-gnueabihf/libmad.so.0 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libmad.so.0.2.1 and /image/usr/lib/arm-linux-gnueabihf/libmad.so.0.2.1 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libmagic.so.1 and /image/usr/lib/arm-linux-gnueabihf/libmagic.so.1 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libmagic.so.1.0.0 and /image/usr/lib/arm-linux-gnueabihf/libmagic.so.1.0.0 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libmp3lame.so.0 and /image/usr/lib/arm-linux-gnueabihf/libmp3lame.so.0 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libmp3lame.so.0.0.0 and /image/usr/lib/arm-linux-gnueabihf/libmp3lame.so.0.0.0 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libsox.so.2 and /image/usr/lib/arm-linux-gnueabihf/libsox.so.2 differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/libsox.so.2.0.1 and /image/usr/lib/arm-linux-gnueabihf/libsox.so.2.0.1 differ
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Carp.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Carp.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Carp.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Carp.pm	2020-07-29 12:42:38.000000000 +0300
@@ -0,0 +1,619 @@
+package Carp;
+
+{ use 5.006; }
+use strict;
+use warnings;
+BEGIN {
+    # Very old versions of warnings.pm load Carp.  This can go wrong due
+    # to the circular dependency.  If warnings is invoked before Carp,
+    # then warnings starts by loading Carp, then Carp (above) tries to
+    # invoke warnings, and gets nothing because warnings is in the process
+    # of loading and hasn't defined its import method yet.  If we were
+    # only turning on warnings ("use warnings" above) this wouldn't be too
+    # bad, because Carp would just gets the state of the -w switch and so
+    # might not get some warnings that it wanted.  The real problem is
+    # that we then want to turn off Unicode warnings, but "no warnings
+    # 'utf8'" won't be effective if we're in this circular-dependency
+    # situation.  So, if warnings.pm is an affected version, we turn
+    # off all warnings ourselves by directly setting ${^WARNING_BITS}.
+    # On unaffected versions, we turn off just Unicode warnings, via
+    # the proper API.
+    if(!defined($warnings::VERSION) || eval($warnings::VERSION) < 1.06) {
+	${^WARNING_BITS} = "";
+    } else {
+	"warnings"->unimport("utf8");
+    }
+}
+
+sub _fetch_sub { # fetch sub without autovivifying
+    my($pack, $sub) = @_;
+    $pack .= '::';
+    # only works with top-level packages
+    return unless exists($::{$pack});
+    for ($::{$pack}) {
+	return unless ref \$_ eq 'GLOB' && *$_{HASH} && exists $$_{$sub};
+	for ($$_{$sub}) {
+	    return ref \$_ eq 'GLOB' ? *$_{CODE} : undef
+	}
+    }
+}
+
+# UTF8_REGEXP_PROBLEM is a compile-time constant indicating whether Carp
+# must avoid applying a regular expression to an upgraded (is_utf8)
+# string.  There are multiple problems, on different Perl versions,
+# that require this to be avoided.  All versions prior to 5.13.8 will
+# load utf8_heavy.pl for the swash system, even if the regexp doesn't
+# use character classes.  Perl 5.6 and Perls [5.11.2, 5.13.11) exhibit
+# specific problems when Carp is being invoked in the aftermath of a
+# syntax error.
+BEGIN {
+    if("$]" < 5.013011) {
+	*UTF8_REGEXP_PROBLEM = sub () { 1 };
+    } else {
+	*UTF8_REGEXP_PROBLEM = sub () { 0 };
+    }
+}
+
+# is_utf8() is essentially the utf8::is_utf8() function, which indicates
+# whether a string is represented in the upgraded form (using UTF-8
+# internally).  As utf8::is_utf8() is only available from Perl 5.8
+# onwards, extra effort is required here to make it work on Perl 5.6.
+BEGIN {
+    if(defined(my $sub = _fetch_sub utf8 => 'is_utf8')) {
+	*is_utf8 = $sub;
+    } else {
+	# black magic for perl 5.6
+	*is_utf8 = sub { unpack("C", "\xaa".$_[0]) != 170 };
+    }
+}
+
+# The downgrade() function defined here is to be used for attempts to
+# downgrade where it is acceptable to fail.  It must be called with a
+# second argument that is a true value.
+BEGIN {
+    if(defined(my $sub = _fetch_sub utf8 => 'downgrade')) {
+	*downgrade = \&{"utf8::downgrade"};
+    } else {
+	*downgrade = sub {
+	    my $r = "";
+	    my $l = length($_[0]);
+	    for(my $i = 0; $i != $l; $i++) {
+		my $o = ord(substr($_[0], $i, 1));
+		return if $o > 255;
+		$r .= chr($o);
+	    }
+	    $_[0] = $r;
+	};
+    }
+}
+
+our $VERSION = '1.42';
+$VERSION =~ tr/_//d;
+
+our $MaxEvalLen = 0;
+our $Verbose    = 0;
+our $CarpLevel  = 0;
+our $MaxArgLen  = 64;    # How much of each argument to print. 0 = all.
+our $MaxArgNums = 8;     # How many arguments to print. 0 = all.
+our $RefArgFormatter = undef; # allow caller to format reference arguments
+
+require Exporter;
+our @ISA       = ('Exporter');
+our @EXPORT    = qw(confess croak carp);
+our @EXPORT_OK = qw(cluck verbose longmess shortmess);
+our @EXPORT_FAIL = qw(verbose);    # hook to enable verbose mode
+
+# The members of %Internal are packages that are internal to perl.
+# Carp will not report errors from within these packages if it
+# can.  The members of %CarpInternal are internal to Perl's warning
+# system.  Carp will not report errors from within these packages
+# either, and will not report calls *to* these packages for carp and
+# croak.  They replace $CarpLevel, which is deprecated.    The
+# $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval
+# text and function arguments should be formatted when printed.
+
+our %CarpInternal;
+our %Internal;
+
+# disable these by default, so they can live w/o require Carp
+$CarpInternal{Carp}++;
+$CarpInternal{warnings}++;
+$Internal{Exporter}++;
+$Internal{'Exporter::Heavy'}++;
+
+# if the caller specifies verbose usage ("perl -MCarp=verbose script.pl")
+# then the following method will be called by the Exporter which knows
+# to do this thanks to @EXPORT_FAIL, above.  $_[1] will contain the word
+# 'verbose'.
+
+sub export_fail { shift; $Verbose = shift if $_[0] eq 'verbose'; @_ }
+
+sub _cgc {
+    no strict 'refs';
+    return \&{"CORE::GLOBAL::caller"} if defined &{"CORE::GLOBAL::caller"};
+    return;
+}
+
+sub longmess {
+    local($!, $^E);
+    # Icky backwards compatibility wrapper. :-(
+    #
+    # The story is that the original implementation hard-coded the
+    # number of call levels to go back, so calls to longmess were off
+    # by one.  Other code began calling longmess and expecting this
+    # behaviour, so the replacement has to emulate that behaviour.
+    my $cgc = _cgc();
+    my $call_pack = $cgc ? $cgc->() : caller();
+    if ( $Internal{$call_pack} or $CarpInternal{$call_pack} ) {
+        return longmess_heavy(@_);
+    }
+    else {
+        local $CarpLevel = $CarpLevel + 1;
+        return longmess_heavy(@_);
+    }
+}
+
+our @CARP_NOT;
+
+sub shortmess {
+    local($!, $^E);
+    my $cgc = _cgc();
+
+    # Icky backwards compatibility wrapper. :-(
+    local @CARP_NOT = $cgc ? $cgc->() : caller();
+    shortmess_heavy(@_);
+}
+
+sub croak   { die shortmess @_ }
+sub confess { die longmess @_ }
+sub carp    { warn shortmess @_ }
+sub cluck   { warn longmess @_ }
+
+BEGIN {
+    if("$]" >= 5.015002 || ("$]" >= 5.014002 && "$]" < 5.015) ||
+	    ("$]" >= 5.012005 && "$]" < 5.013)) {
+	*CALLER_OVERRIDE_CHECK_OK = sub () { 1 };
+    } else {
+	*CALLER_OVERRIDE_CHECK_OK = sub () { 0 };
+    }
+}
+
+sub caller_info {
+    my $i = shift(@_) + 1;
+    my %call_info;
+    my $cgc = _cgc();
+    {
+	# Some things override caller() but forget to implement the
+	# @DB::args part of it, which we need.  We check for this by
+	# pre-populating @DB::args with a sentinel which no-one else
+	# has the address of, so that we can detect whether @DB::args
+	# has been properly populated.  However, on earlier versions
+	# of perl this check tickles a bug in CORE::caller() which
+	# leaks memory.  So we only check on fixed perls.
+        @DB::args = \$i if CALLER_OVERRIDE_CHECK_OK;
+        package DB;
+        @call_info{
+            qw(pack file line sub has_args wantarray evaltext is_require) }
+            = $cgc ? $cgc->($i) : caller($i);
+    }
+
+    unless ( defined $call_info{file} ) {
+        return ();
+    }
+
+    my $sub_name = Carp::get_subname( \%call_info );
+    if ( $call_info{has_args} ) {
+        my @args;
+        if (CALLER_OVERRIDE_CHECK_OK && @DB::args == 1
+            && ref $DB::args[0] eq ref \$i
+            && $DB::args[0] == \$i ) {
+            @DB::args = ();    # Don't let anyone see the address of $i
+            local $@;
+            my $where = eval {
+                my $func    = $cgc or return '';
+                my $gv      =
+                    (_fetch_sub B => 'svref_2object' or return '')
+                        ->($func)->GV;
+                my $package = $gv->STASH->NAME;
+                my $subname = $gv->NAME;
+                return unless defined $package && defined $subname;
+
+                # returning CORE::GLOBAL::caller isn't useful for tracing the cause:
+                return if $package eq 'CORE::GLOBAL' && $subname eq 'caller';
+                " in &${package}::$subname";
+            } || '';
+            @args
+                = "** Incomplete caller override detected$where; \@DB::args were not set **";
+        }
+        else {
+            @args = @DB::args;
+            my $overflow;
+            if ( $MaxArgNums and @args > $MaxArgNums )
+            {    # More than we want to show?
+                $#args = $MaxArgNums - 1;
+                $overflow = 1;
+            }
+
+            @args = map { Carp::format_arg($_) } @args;
+
+            if ($overflow) {
+                push @args, '...';
+            }
+        }
+
+        # Push the args onto the subroutine
+        $sub_name .= '(' . join( ', ', @args ) . ')';
+    }
+    $call_info{sub_name} = $sub_name;
+    return wantarray() ? %call_info : \%call_info;
+}
+
+# Transform an argument to a function into a string.
+our $in_recurse;
+sub format_arg {
+    my $arg = shift;
+
+    if ( ref($arg) ) {
+         # legitimate, let's not leak it.
+        if (!$in_recurse &&
+	    do {
+                local $@;
+	        local $in_recurse = 1;
+		local $SIG{__DIE__} = sub{};
+                eval {$arg->can('CARP_TRACE') }
+            })
+        {
+            return $arg->CARP_TRACE();
+        }
+        elsif (!$in_recurse &&
+	       defined($RefArgFormatter) &&
+	       do {
+                local $@;
+	        local $in_recurse = 1;
+		local $SIG{__DIE__} = sub{};
+                eval {$arg = $RefArgFormatter->($arg); 1}
+                })
+        {
+            return $arg;
+        }
+        else
+        {
+	    my $sub = _fetch_sub(overload => 'StrVal');
+	    return $sub ? &$sub($arg) : "$arg";
+        }
+    }
+    return "undef" if !defined($arg);
+    downgrade($arg, 1);
+    return $arg if !(UTF8_REGEXP_PROBLEM && is_utf8($arg)) &&
+	    $arg =~ /\A-?[0-9]+(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?\z/;
+    my $suffix = "";
+    if ( 2 < $MaxArgLen and $MaxArgLen < length($arg) ) {
+        substr ( $arg, $MaxArgLen - 3 ) = "";
+	$suffix = "...";
+    }
+    if(UTF8_REGEXP_PROBLEM && is_utf8($arg)) {
+	for(my $i = length($arg); $i--; ) {
+	    my $c = substr($arg, $i, 1);
+	    my $x = substr($arg, 0, 0);   # work around bug on Perl 5.8.{1,2}
+	    if($c eq "\"" || $c eq "\\" || $c eq "\$" || $c eq "\@") {
+		substr $arg, $i, 0, "\\";
+		next;
+	    }
+	    my $o = ord($c);
+
+            # This code is repeated in Regexp::CARP_TRACE()
+            if ($] ge 5.007_003) {
+                substr $arg, $i, 1, sprintf("\\x{%x}", $o)
+		  if utf8::native_to_unicode($o) < utf8::native_to_unicode(0x20)
+                  || utf8::native_to_unicode($o) > utf8::native_to_unicode(0x7e);
+            } elsif (ord("A") == 65) {
+                substr $arg, $i, 1, sprintf("\\x{%x}", $o)
+                    if $o < 0x20 || $o > 0x7e;
+            } else { # Early EBCDIC
+
+                # 3 EBCDIC code pages supported then;  all controls but one
+                # are the code points below SPACE.  The other one is 0x5F on
+                # POSIX-BC; FF on the other two.
+                substr $arg, $i, 1, sprintf("\\x{%x}", $o)
+                    if $o < ord(" ") || ((ord ("^") == 106)
+                                          ? $o == 0x5f
+                                          : $o == 0xff);
+            }
+	}
+    } else {
+	$arg =~ s/([\"\\\$\@])/\\$1/g;
+        # This is all the ASCII printables spelled-out.  It is portable to all
+        # Perl versions and platforms (such as EBCDIC).  There are other more
+        # compact ways to do this, but may not work everywhere every version.
+        $arg =~ s/([^ !"\$\%#'()*+,\-.\/0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz\{|}~])/sprintf("\\x{%x}",ord($1))/eg;
+    }
+    downgrade($arg, 1);
+    return "\"".$arg."\"".$suffix;
+}
+
+sub Regexp::CARP_TRACE {
+    my $arg = "$_[0]";
+    downgrade($arg, 1);
+    if(UTF8_REGEXP_PROBLEM && is_utf8($arg)) {
+	for(my $i = length($arg); $i--; ) {
+	    my $o = ord(substr($arg, $i, 1));
+	    my $x = substr($arg, 0, 0);   # work around bug on Perl 5.8.{1,2}
+
+            # This code is repeated in format_arg()
+            if ($] ge 5.007_003) {
+                substr $arg, $i, 1, sprintf("\\x{%x}", $o)
+		  if utf8::native_to_unicode($o) < utf8::native_to_unicode(0x20)
+                  || utf8::native_to_unicode($o) > utf8::native_to_unicode(0x7e);
+            } elsif (ord("A") == 65) {
+                substr $arg, $i, 1, sprintf("\\x{%x}", $o)
+                    if $o < 0x20 || $o > 0x7e;
+            } else { # Early EBCDIC
+                substr $arg, $i, 1, sprintf("\\x{%x}", $o)
+                    if $o < ord(" ") || ((ord ("^") == 106)
+                                          ? $o == 0x5f
+                                          : $o == 0xff);
+            }
+	}
+    } else {
+        # See comment in format_arg() about this same regex.
+        $arg =~ s/([^ !"\$\%#'()*+,\-.\/0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz\{|}~])/sprintf("\\x{%x}",ord($1))/eg;
+    }
+    downgrade($arg, 1);
+    my $suffix = "";
+    if($arg =~ /\A\(\?\^?([a-z]*)(?:-[a-z]*)?:(.*)\)\z/s) {
+	($suffix, $arg) = ($1, $2);
+    }
+    if ( 2 < $MaxArgLen and $MaxArgLen < length($arg) ) {
+        substr ( $arg, $MaxArgLen - 3 ) = "";
+	$suffix = "...".$suffix;
+    }
+    return "qr($arg)$suffix";
+}
+
+# Takes an inheritance cache and a package and returns
+# an anon hash of known inheritances and anon array of
+# inheritances which consequences have not been figured
+# for.
+sub get_status {
+    my $cache = shift;
+    my $pkg   = shift;
+    $cache->{$pkg} ||= [ { $pkg => $pkg }, [ trusts_directly($pkg) ] ];
+    return @{ $cache->{$pkg} };
+}
+
+# Takes the info from caller() and figures out the name of
+# the sub/require/eval
+sub get_subname {
+    my $info = shift;
+    if ( defined( $info->{evaltext} ) ) {
+        my $eval = $info->{evaltext};
+        if ( $info->{is_require} ) {
+            return "require $eval";
+        }
+        else {
+            $eval =~ s/([\\\'])/\\$1/g;
+            return "eval '" . str_len_trim( $eval, $MaxEvalLen ) . "'";
+        }
+    }
+
+    # this can happen on older perls when the sub (or the stash containing it)
+    # has been deleted
+    if ( !defined( $info->{sub} ) ) {
+        return '__ANON__::__ANON__';
+    }
+
+    return ( $info->{sub} eq '(eval)' ) ? 'eval {...}' : $info->{sub};
+}
+
+# Figures out what call (from the point of view of the caller)
+# the long error backtrace should start at.
+sub long_error_loc {
+    my $i;
+    my $lvl = $CarpLevel;
+    {
+        ++$i;
+        my $cgc = _cgc();
+        my @caller = $cgc ? $cgc->($i) : caller($i);
+        my $pkg = $caller[0];
+        unless ( defined($pkg) ) {
+
+            # This *shouldn't* happen.
+            if (%Internal) {
+                local %Internal;
+                $i = long_error_loc();
+                last;
+            }
+            elsif (defined $caller[2]) {
+                # this can happen when the stash has been deleted
+                # in that case, just assume that it's a reasonable place to
+                # stop (the file and line data will still be intact in any
+                # case) - the only issue is that we can't detect if the
+                # deleted package was internal (so don't do that then)
+                # -doy
+                redo unless 0 > --$lvl;
+                last;
+            }
+            else {
+                return 2;
+            }
+        }
+        redo if $CarpInternal{$pkg};
+        redo unless 0 > --$lvl;
+        redo if $Internal{$pkg};
+    }
+    return $i - 1;
+}
+
+sub longmess_heavy {
+    if ( ref( $_[0] ) ) {   # don't break references as exceptions
+        return wantarray ? @_ : $_[0];
+    }
+    my $i = long_error_loc();
+    return ret_backtrace( $i, @_ );
+}
+
+# Returns a full stack backtrace starting from where it is
+# told.
+sub ret_backtrace {
+    my ( $i, @error ) = @_;
+    my $mess;
+    my $err = join '', @error;
+    $i++;
+
+    my $tid_msg = '';
+    if ( defined &threads::tid ) {
+        my $tid = threads->tid;
+        $tid_msg = " thread $tid" if $tid;
+    }
+
+    my %i = caller_info($i);
+    $mess = "$err at $i{file} line $i{line}$tid_msg";
+    if( defined $. ) {
+        local $@ = '';
+        local $SIG{__DIE__};
+        eval {
+            CORE::die;
+        };
+        if($@ =~ /^Died at .*(, <.*?> (?:line|chunk) \d+).$/ ) {
+            $mess .= $1;
+        }
+    }
+    $mess .= "\.\n";
+
+    while ( my %i = caller_info( ++$i ) ) {
+        $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n";
+    }
+
+    return $mess;
+}
+
+sub ret_summary {
+    my ( $i, @error ) = @_;
+    my $err = join '', @error;
+    $i++;
+
+    my $tid_msg = '';
+    if ( defined &threads::tid ) {
+        my $tid = threads->tid;
+        $tid_msg = " thread $tid" if $tid;
+    }
+
+    my %i = caller_info($i);
+    return "$err at $i{file} line $i{line}$tid_msg\.\n";
+}
+
+sub short_error_loc {
+    # You have to create your (hash)ref out here, rather than defaulting it
+    # inside trusts *on a lexical*, as you want it to persist across calls.
+    # (You can default it on $_[2], but that gets messy)
+    my $cache = {};
+    my $i     = 1;
+    my $lvl   = $CarpLevel;
+    {
+        my $cgc = _cgc();
+        my $called = $cgc ? $cgc->($i) : caller($i);
+        $i++;
+        my $caller = $cgc ? $cgc->($i) : caller($i);
+
+        if (!defined($caller)) {
+            my @caller = $cgc ? $cgc->($i) : caller($i);
+            if (@caller) {
+                # if there's no package but there is other caller info, then
+                # the package has been deleted - treat this as a valid package
+                # in this case
+                redo if defined($called) && $CarpInternal{$called};
+                redo unless 0 > --$lvl;
+                last;
+            }
+            else {
+                return 0;
+            }
+        }
+        redo if $Internal{$caller};
+        redo if $CarpInternal{$caller};
+        redo if $CarpInternal{$called};
+        redo if trusts( $called, $caller, $cache );
+        redo if trusts( $caller, $called, $cache );
+        redo unless 0 > --$lvl;
+    }
+    return $i - 1;
+}
+
+sub shortmess_heavy {
+    return longmess_heavy(@_) if $Verbose;
+    return @_ if ref( $_[0] );    # don't break references as exceptions
+    my $i = short_error_loc();
+    if ($i) {
+        ret_summary( $i, @_ );
+    }
+    else {
+        longmess_heavy(@_);
+    }
+}
+
+# If a string is too long, trims it with ...
+sub str_len_trim {
+    my $str = shift;
+    my $max = shift || 0;
+    if ( 2 < $max and $max < length($str) ) {
+        substr( $str, $max - 3 ) = '...';
+    }
+    return $str;
+}
+
+# Takes two packages and an optional cache.  Says whether the
+# first inherits from the second.
+#
+# Recursive versions of this have to work to avoid certain
+# possible endless loops, and when following long chains of
+# inheritance are less efficient.
+sub trusts {
+    my $child  = shift;
+    my $parent = shift;
+    my $cache  = shift;
+    my ( $known, $partial ) = get_status( $cache, $child );
+
+    # Figure out consequences until we have an answer
+    while ( @$partial and not exists $known->{$parent} ) {
+        my $anc = shift @$partial;
+        next if exists $known->{$anc};
+        $known->{$anc}++;
+        my ( $anc_knows, $anc_partial ) = get_status( $cache, $anc );
+        my @found = keys %$anc_knows;
+        @$known{@found} = ();
+        push @$partial, @$anc_partial;
+    }
+    return exists $known->{$parent};
+}
+
+# Takes a package and gives a list of those trusted directly
+sub trusts_directly {
+    my $class = shift;
+    no strict 'refs';
+    my $stash = \%{"$class\::"};
+    for my $var (qw/ CARP_NOT ISA /) {
+        # Don't try using the variable until we know it exists,
+        # to avoid polluting the caller's namespace.
+        if ( $stash->{$var} && *{$stash->{$var}}{ARRAY} && @{$stash->{$var}} ) {
+           return @{$stash->{$var}}
+        }
+    }
+    return;
+}
+
+if(!defined($warnings::VERSION) ||
+	do { no warnings "numeric"; $warnings::VERSION < 1.03 }) {
+    # Very old versions of warnings.pm import from Carp.  This can go
+    # wrong due to the circular dependency.  If Carp is invoked before
+    # warnings, then Carp starts by loading warnings, then warnings
+    # tries to import from Carp, and gets nothing because Carp is in
+    # the process of loading and hasn't defined its import method yet.
+    # So we work around that by manually exporting to warnings here.
+    no strict "refs";
+    *{"warnings::$_"} = \&$_ foreach @EXPORT;
+}
+
+1;
+
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Config.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Config.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Config.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Config.pm	2020-07-29 12:42:38.000000000 +0300
@@ -0,0 +1,111 @@
+# This file was created by configpm when Perl was built. Any changes
+# made to this file will be lost the next time perl is built.
+
+# for a description of the variables, please have a look at the
+# Glossary file, as written in the Porting folder, or use the url:
+# http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary
+
+package Config;
+use strict;
+use warnings;
+use vars '%Config', '$VERSION';
+
+$VERSION = "5.026001";
+
+# Skip @Config::EXPORT because it only contains %Config, which we special
+# case below as it's not a function. @Config::EXPORT won't change in the
+# lifetime of Perl 5.
+my %Export_Cache = (myconfig => 1, config_sh => 1, config_vars => 1,
+		    config_re => 1, compile_date => 1, local_patches => 1,
+		    bincompat_options => 1, non_bincompat_options => 1,
+		    header_files => 1);
+
+@Config::EXPORT = qw(%Config);
+@Config::EXPORT_OK = keys %Export_Cache;
+
+# Need to stub all the functions to make code such as print Config::config_sh
+# keep working
+
+sub bincompat_options;
+sub compile_date;
+sub config_re;
+sub config_sh;
+sub config_vars;
+sub header_files;
+sub local_patches;
+sub myconfig;
+sub non_bincompat_options;
+
+# Define our own import method to avoid pulling in the full Exporter:
+sub import {
+    shift;
+    @_ = @Config::EXPORT unless @_;
+
+    my @funcs = grep $_ ne '%Config', @_;
+    my $export_Config = @funcs < @_ ? 1 : 0;
+
+    no strict 'refs';
+    my $callpkg = caller(0);
+    foreach my $func (@funcs) {
+	die qq{"$func" is not exported by the Config module\n}
+	    unless $Export_Cache{$func};
+	*{$callpkg.'::'.$func} = \&{$func};
+    }
+
+    *{"$callpkg\::Config"} = \%Config if $export_Config;
+    return;
+}
+
+die "$0: Perl lib version (5.26.1) doesn't match executable '$^X' version ($])"
+    unless $^V;
+
+$^V eq 5.26.1
+    or die sprintf "%s: Perl lib version (5.26.1) doesn't match executable '$^X' version (%vd)", $0, $^V;
+
+
+sub FETCH {
+    my($self, $key) = @_;
+
+    # check for cached value (which may be undef so we use exists not defined)
+    return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key);
+}
+
+sub TIEHASH {
+    bless $_[1], $_[0];
+}
+
+sub DESTROY { }
+
+sub AUTOLOAD {
+    require 'Config_heavy.pl';
+    goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/;
+    die "&Config::AUTOLOAD failed on $Config::AUTOLOAD";
+}
+
+# tie returns the object, so the value returned to require will be true.
+tie %Config, 'Config', {
+    archlibexp => '/usr/lib/arm-linux-gnueabihf/perl/5.26',
+    archname => 'arm-linux-gnueabihf-thread-multi-64int',
+    cc => 'arm-linux-gnueabihf-gcc',
+    d_readlink => 'define',
+    d_symlink => 'define',
+    dlext => 'so',
+    dlsrc => 'dl_dlopen.xs',
+    dont_use_nlink => undef,
+    exe_ext => '',
+    inc_version_list => '5.26.0 5.26.0/arm-linux-gnueabihf-thread-multi-64int',
+    intsize => '4',
+    ldlibpthname => 'LD_LIBRARY_PATH',
+    libpth => '/usr/local/lib /usr/lib/gcc/arm-linux-gnueabihf/7/include-fixed /usr/include/arm-linux-gnueabihf /usr/lib /lib/arm-linux-gnueabihf /lib/../lib /usr/lib/arm-linux-gnueabihf /usr/lib/../lib /lib',
+    osname => 'linux',
+    osvers => '4.9.0',
+    path_sep => ':',
+    privlibexp => '/usr/share/perl/5.26',
+    scriptdir => '/usr/bin',
+    sitearchexp => '/usr/local/lib/arm-linux-gnueabihf/perl/5.26.1',
+    sitelibexp => '/usr/local/share/perl/5.26.1',
+    so => 'so',
+    useithreads => 'define',
+    usevendorprefix => 'define',
+    version => '5.26.1',
+};
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/DynaLoader.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/DynaLoader.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/DynaLoader.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/DynaLoader.pm	2020-07-29 12:42:38.000000000 +0300
@@ -0,0 +1,314 @@
+# Generated from DynaLoader_pm.PL, this file is unique for every OS
+
+package DynaLoader;
+
+#   And Gandalf said: 'Many folk like to know beforehand what is to
+#   be set on the table; but those who have laboured to prepare the
+#   feast like to keep their secret; for wonder makes the words of
+#   praise louder.'
+
+#   (Quote from Tolkien suggested by Anno Siegel.)
+#
+# See pod text at end of file for documentation.
+# See also ext/DynaLoader/README in source tree for other information.
+#
+# Tim.Bunce@ig.co.uk, August 1994
+
+BEGIN {
+    $VERSION = '1.42';
+}
+
+use Config;
+
+# enable debug/trace messages from DynaLoader perl code
+$dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
+
+#
+# Flags to alter dl_load_file behaviour.  Assigned bits:
+#   0x01  make symbols available for linking later dl_load_file's.
+#         (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
+#         (ignored under VMS; effect is built-in to image linking)
+#         (ignored under Android; the linker always uses RTLD_LOCAL)
+#
+# This is called as a class method $module->dl_load_flags.  The
+# definition here will be inherited and result on "default" loading
+# behaviour unless a sub-class of DynaLoader defines its own version.
+#
+
+sub dl_load_flags { 0x00 }
+
+($dl_dlext, $dl_so, $dlsrc) = @Config::Config{qw(dlext so dlsrc)};
+
+$do_expand = 0;
+
+@dl_require_symbols = ();       # names of symbols we need
+@dl_library_path    = ();       # path to look for files
+
+#XSLoader.pm may have added elements before we were required
+#@dl_shared_objects  = ();       # shared objects for symbols we have 
+#@dl_librefs         = ();       # things we have loaded
+#@dl_modules         = ();       # Modules we have loaded
+
+# Initialise @dl_library_path with the 'standard' library path
+# for this platform as determined by Configure.
+
+push(@dl_library_path, split(' ', $Config::Config{libpth}));
+
+my $ldlibpthname         = $Config::Config{ldlibpthname};
+my $ldlibpthname_defined = defined $Config::Config{ldlibpthname};
+my $pthsep               = $Config::Config{path_sep};
+
+# Add to @dl_library_path any extra directories we can gather from environment
+# during runtime.
+
+if ($ldlibpthname_defined &&
+    exists $ENV{$ldlibpthname}) {
+    push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
+}
+
+# E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
+
+if ($ldlibpthname_defined &&
+    $ldlibpthname ne 'LD_LIBRARY_PATH' &&
+    exists $ENV{LD_LIBRARY_PATH}) {
+    push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
+}
+
+# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
+# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
+boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
+                                !defined(&dl_error);
+
+if ($dl_debug) {
+    print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n";
+    print STDERR "DynaLoader not linked into this perl\n"
+	    unless defined(&boot_DynaLoader);
+}
+
+1; # End of main code
+
+sub croak   { require Carp; Carp::croak(@_)   }
+
+sub bootstrap_inherit {
+    my $module = $_[0];
+    local *isa = *{"$module\::ISA"};
+    local @isa = (@isa, 'DynaLoader');
+    # Cannot goto due to delocalization.  Will report errors on a wrong line?
+    bootstrap(@_);
+}
+
+sub bootstrap {
+    # use local vars to enable $module.bs script to edit values
+    local(@args) = @_;
+    local($module) = $args[0];
+    local(@dirs, $file);
+
+    unless ($module) {
+	require Carp;
+	Carp::confess("Usage: DynaLoader::bootstrap(module)");
+    }
+
+    # A common error on platforms which don't support dynamic loading.
+    # Since it's fatal and potentially confusing we give a detailed message.
+    croak("Can't load module $module, dynamic loading not available in this perl.\n".
+	"  (You may need to build a new perl executable which either supports\n".
+	"  dynamic loading or has the $module module statically linked into it.)\n")
+	unless defined(&dl_load_file);
+
+    
+    my @modparts = split(/::/,$module);
+    my $modfname = $modparts[-1];
+    my $modfname_orig = $modfname; # For .bs file search
+
+    # Some systems have restrictions on files names for DLL's etc.
+    # mod2fname returns appropriate file base name (typically truncated)
+    # It may also edit @modparts if required.
+    $modfname = &mod2fname(\@modparts) if defined &mod2fname;
+
+    
+
+    my $modpname = join('/',@modparts);
+
+    print STDERR "DynaLoader::bootstrap for $module ",
+		       "(auto/$modpname/$modfname.$dl_dlext)\n"
+	if $dl_debug;
+
+    my $dir;
+    foreach (@INC) {
+	
+	    $dir = "$_/auto/$modpname";
+	
+	next unless -d $dir; # skip over uninteresting directories
+	
+	# check for common cases to avoid autoload of dl_findfile
+        my $try = "$dir/$modfname.$dl_dlext";
+	last if $file = ($do_expand) ? dl_expandspec($try) : ((-f $try) && $try);
+	
+	# no luck here, save dir for possible later dl_findfile search
+	push @dirs, $dir;
+    }
+    # last resort, let dl_findfile have a go in all known locations
+    $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
+
+    croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
+	unless $file;	# wording similar to error from 'require'
+
+    
+    my $bootname = "boot_$module";
+    $bootname =~ s/\W/_/g;
+    @dl_require_symbols = ($bootname);
+
+    # Execute optional '.bootstrap' perl script for this module.
+    # The .bs file can be used to configure @dl_resolve_using etc to
+    # match the needs of the individual module on this architecture.
+    # N.B. The .bs file does not following the naming convention used
+    # by mod2fname.
+    my $bs = "$dir/$modfname_orig";
+    $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
+    if (-s $bs) { # only read file if it's not empty
+        print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
+        eval { local @INC = ('.'); do $bs; };
+        warn "$bs: $@\n" if $@;
+    }
+
+    my $boot_symbol_ref;
+
+    
+
+    # Many dynamic extension loading problems will appear to come from
+    # this section of code: XYZ failed at line 123 of DynaLoader.pm.
+    # Often these errors are actually occurring in the initialisation
+    # C code of the extension XS file. Perl reports the error as being
+    # in this perl code simply because this was the last perl code
+    # it executed.
+
+    my $flags = $module->dl_load_flags;
+    
+    my $libref = dl_load_file($file, $flags) or
+	croak("Can't load '$file' for module $module: ".dl_error());
+
+    push(@dl_librefs,$libref);  # record loaded object
+
+    $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
+         croak("Can't find '$bootname' symbol in $file\n");
+
+    push(@dl_modules, $module); # record loaded module
+
+  boot:
+    my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
+
+    # See comment block above
+
+	push(@dl_shared_objects, $file); # record files loaded
+
+    &$xs(@args);
+}
+
+sub dl_findfile {
+    # This function does not automatically consider the architecture
+    # or the perl library auto directories.
+    my (@args) = @_;
+    my (@dirs,  $dir);   # which directories to search
+    my (@found);         # full paths to real files we have found
+    #my $dl_ext= 'so'; # $Config::Config{'dlext'} suffix for perl extensions
+    #my $dl_so = 'so'; # $Config::Config{'so'} suffix for shared libraries
+
+    print STDERR "dl_findfile(@args)\n" if $dl_debug;
+
+    # accumulate directories but process files as they appear
+    arg: foreach(@args) {
+        #  Special fast case: full filepath requires no search
+	
+	
+        if (m:/: && -f $_) {
+	    push(@found,$_);
+	    last arg unless wantarray;
+	    next;
+	}
+	
+
+        # Deal with directories first:
+        #  Using a -L prefix is the preferred option (faster and more robust)
+        if (m:^-L:) { s/^-L//; push(@dirs, $_); next; }
+
+        #  Otherwise we try to try to spot directories by a heuristic
+        #  (this is a more complicated issue than it first appears)
+        if (m:/: && -d $_) {   push(@dirs, $_); next; }
+
+	
+
+        #  Only files should get this far...
+        my(@names, $name);    # what filenames to look for
+        if (m:-l: ) {          # convert -lname to appropriate library name
+            s/-l//;
+            push(@names,"lib$_.$dl_so");
+            push(@names,"lib$_.a");
+        } else {                # Umm, a bare name. Try various alternatives:
+            # these should be ordered with the most likely first
+            push(@names,"$_.$dl_dlext")    unless m/\.$dl_dlext$/o;
+            push(@names,"$_.$dl_so")     unless m/\.$dl_so$/o;
+	    
+            push(@names,"lib$_.$dl_so")  unless m:/:;
+            push(@names, $_);
+        }
+	my $dirsep = '/';
+	
+        foreach $dir (@dirs, @dl_library_path) {
+            next unless -d $dir;
+	    
+            foreach $name (@names) {
+		my($file) = "$dir$dirsep$name";
+                print STDERR " checking in $dir for $name\n" if $dl_debug;
+		$file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
+		#$file = _check_file($file);
+		if ($file) {
+                    push(@found, $file);
+                    next arg; # no need to look any further
+                }
+            }
+        }
+    }
+    if ($dl_debug) {
+        foreach(@dirs) {
+            print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_;
+        }
+        print STDERR "dl_findfile found: @found\n";
+    }
+    return $found[0] unless wantarray;
+    @found;
+}
+
+sub dl_expandspec {
+    my($spec) = @_;
+    # Optional function invoked if DynaLoader.pm sets $do_expand.
+    # Most systems do not require or use this function.
+    # Some systems may implement it in the dl_*.xs file in which case
+    # this Perl version should be excluded at build time.
+
+    # This function is designed to deal with systems which treat some
+    # 'filenames' in a special way. For example VMS 'Logical Names'
+    # (something like unix environment variables - but different).
+    # This function should recognise such names and expand them into
+    # full file paths.
+    # Must return undef if $spec is invalid or file does not exist.
+
+    my $file = $spec; # default output to input
+
+	return undef unless -f $file;
+    print STDERR "dl_expandspec($spec) => $file\n" if $dl_debug;
+    $file;
+}
+
+sub dl_find_symbol_anywhere
+{
+    my $sym = shift;
+    my $libref;
+    foreach $libref (@dl_librefs) {
+	my $symref = dl_find_symbol($libref,$sym,1);
+	return $symref if $symref;
+    }
+    return undef;
+}
+
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Errno.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Errno.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Errno.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Errno.pm	2020-07-29 12:58:35.000000000 +0300
@@ -0,0 +1,229 @@
+# -*- buffer-read-only: t -*-
+#
+# This file is auto-generated by ext/Errno/Errno_pm.PL.
+# ***ANY*** changes here will be lost.
+#
+
+package Errno;
+require Exporter;
+use strict;
+
+our $VERSION = "1.28";
+$VERSION = eval $VERSION;
+our @ISA = 'Exporter';
+
+my %err;
+
+BEGIN {
+    %err = (
+	EPERM => 1,
+	ENOENT => 2,
+	ESRCH => 3,
+	EINTR => 4,
+	EIO => 5,
+	ENXIO => 6,
+	E2BIG => 7,
+	ENOEXEC => 8,
+	EBADF => 9,
+	ECHILD => 10,
+	EAGAIN => 11,
+	EWOULDBLOCK => 11,
+	ENOMEM => 12,
+	EACCES => 13,
+	EFAULT => 14,
+	ENOTBLK => 15,
+	EBUSY => 16,
+	EEXIST => 17,
+	EXDEV => 18,
+	ENODEV => 19,
+	ENOTDIR => 20,
+	EISDIR => 21,
+	EINVAL => 22,
+	ENFILE => 23,
+	EMFILE => 24,
+	ENOTTY => 25,
+	ETXTBSY => 26,
+	EFBIG => 27,
+	ENOSPC => 28,
+	ESPIPE => 29,
+	EROFS => 30,
+	EMLINK => 31,
+	EPIPE => 32,
+	EDOM => 33,
+	ERANGE => 34,
+	EDEADLK => 35,
+	EDEADLOCK => 35,
+	ENAMETOOLONG => 36,
+	ENOLCK => 37,
+	ENOSYS => 38,
+	ENOTEMPTY => 39,
+	ELOOP => 40,
+	ENOMSG => 42,
+	EIDRM => 43,
+	ECHRNG => 44,
+	EL2NSYNC => 45,
+	EL3HLT => 46,
+	EL3RST => 47,
+	ELNRNG => 48,
+	EUNATCH => 49,
+	ENOCSI => 50,
+	EL2HLT => 51,
+	EBADE => 52,
+	EBADR => 53,
+	EXFULL => 54,
+	ENOANO => 55,
+	EBADRQC => 56,
+	EBADSLT => 57,
+	EBFONT => 59,
+	ENOSTR => 60,
+	ENODATA => 61,
+	ETIME => 62,
+	ENOSR => 63,
+	ENONET => 64,
+	ENOPKG => 65,
+	EREMOTE => 66,
+	ENOLINK => 67,
+	EADV => 68,
+	ESRMNT => 69,
+	ECOMM => 70,
+	EPROTO => 71,
+	EMULTIHOP => 72,
+	EDOTDOT => 73,
+	EBADMSG => 74,
+	EOVERFLOW => 75,
+	ENOTUNIQ => 76,
+	EBADFD => 77,
+	EREMCHG => 78,
+	ELIBACC => 79,
+	ELIBBAD => 80,
+	ELIBSCN => 81,
+	ELIBMAX => 82,
+	ELIBEXEC => 83,
+	EILSEQ => 84,
+	ERESTART => 85,
+	ESTRPIPE => 86,
+	EUSERS => 87,
+	ENOTSOCK => 88,
+	EDESTADDRREQ => 89,
+	EMSGSIZE => 90,
+	EPROTOTYPE => 91,
+	ENOPROTOOPT => 92,
+	EPROTONOSUPPORT => 93,
+	ESOCKTNOSUPPORT => 94,
+	ENOTSUP => 95,
+	EOPNOTSUPP => 95,
+	EPFNOSUPPORT => 96,
+	EAFNOSUPPORT => 97,
+	EADDRINUSE => 98,
+	EADDRNOTAVAIL => 99,
+	ENETDOWN => 100,
+	ENETUNREACH => 101,
+	ENETRESET => 102,
+	ECONNABORTED => 103,
+	ECONNRESET => 104,
+	ENOBUFS => 105,
+	EISCONN => 106,
+	ENOTCONN => 107,
+	ESHUTDOWN => 108,
+	ETOOMANYREFS => 109,
+	ETIMEDOUT => 110,
+	ECONNREFUSED => 111,
+	EHOSTDOWN => 112,
+	EHOSTUNREACH => 113,
+	EALREADY => 114,
+	EINPROGRESS => 115,
+	ESTALE => 116,
+	EUCLEAN => 117,
+	ENOTNAM => 118,
+	ENAVAIL => 119,
+	EISNAM => 120,
+	EREMOTEIO => 121,
+	EDQUOT => 122,
+	ENOMEDIUM => 123,
+	EMEDIUMTYPE => 124,
+	ECANCELED => 125,
+	ENOKEY => 126,
+	EKEYEXPIRED => 127,
+	EKEYREVOKED => 128,
+	EKEYREJECTED => 129,
+	EOWNERDEAD => 130,
+	ENOTRECOVERABLE => 131,
+	ERFKILL => 132,
+	EHWPOISON => 133,
+    );
+    # Generate proxy constant subroutines for all the values.
+    # Well, almost all the values. Unfortunately we can't assume that at this
+    # point that our symbol table is empty, as code such as if the parser has
+    # seen code such as C<exists &Errno::EINVAL>, it will have created the
+    # typeglob.
+    # Doing this before defining @EXPORT_OK etc means that even if a platform is
+    # crazy enough to define EXPORT_OK as an error constant, everything will
+    # still work, because the parser will upgrade the PCS to a real typeglob.
+    # We rely on the subroutine definitions below to update the internal caches.
+    # Don't use %each, as we don't want a copy of the value.
+    foreach my $name (keys %err) {
+        if ($Errno::{$name}) {
+            # We expect this to be reached fairly rarely, so take an approach
+            # which uses the least compile time effort in the common case:
+            eval "sub $name() { $err{$name} }; 1" or die $@;
+        } else {
+            $Errno::{$name} = \$err{$name};
+        }
+    }
+}
+
+our @EXPORT_OK = keys %err;
+
+our %EXPORT_TAGS = (
+    POSIX => [qw(
+	E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY
+	EBADF EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK
+	EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH
+	EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK
+	EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS
+	ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK
+	ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM
+	EPFNOSUPPORT EPIPE EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART
+	EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT
+	ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV
+    )],
+);
+
+sub TIEHASH { bless \%err }
+
+sub FETCH {
+    my (undef, $errname) = @_;
+    return "" unless exists $err{$errname};
+    my $errno = $err{$errname};
+    return $errno == $! ? $errno : 0;
+}
+
+sub STORE {
+    require Carp;
+    Carp::confess("ERRNO hash is read only!");
+}
+
+# This is the true return value
+*CLEAR = *DELETE = \*STORE; # Typeglob aliasing uses less space
+
+sub NEXTKEY {
+    each %err;
+}
+
+sub FIRSTKEY {
+    my $s = scalar keys %err;	# initialize iterator
+    each %err;
+}
+
+sub EXISTS {
+    my (undef, $errname) = @_;
+    exists $err{$errname};
+}
+
+sub _tie_it {
+    tie %{$_[0]}, __PACKAGE__;
+}
+
+__END__
+
+# ex: set ro:
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter/Heavy.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter/Heavy.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter/Heavy.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter/Heavy.pm	2020-07-29 12:59:27.000000000 +0300
@@ -0,0 +1,239 @@
+package Exporter::Heavy;
+
+use strict;
+no strict 'refs';
+
+# On one line so MakeMaker will see it.
+require Exporter;  our $VERSION = $Exporter::VERSION;
+
+#
+# We go to a lot of trouble not to 'require Carp' at file scope,
+#  because Carp requires Exporter, and something has to give.
+#
+
+sub _rebuild_cache {
+    my ($pkg, $exports, $cache) = @_;
+    s/^&// foreach @$exports;
+    @{$cache}{@$exports} = (1) x @$exports;
+    my $ok = \@{"${pkg}::EXPORT_OK"};
+    if (@$ok) {
+	s/^&// foreach @$ok;
+	@{$cache}{@$ok} = (1) x @$ok;
+    }
+}
+
+sub heavy_export {
+
+    # Save the old __WARN__ handler in case it was defined
+    my $oldwarn = $SIG{__WARN__};
+
+    # First make import warnings look like they're coming from the "use".
+    local $SIG{__WARN__} = sub {
+	# restore it back so proper stacking occurs
+	local $SIG{__WARN__} = $oldwarn;
+	my $text = shift;
+	if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) {
+	    require Carp;
+	    local $Carp::CarpLevel = 1;	# ignore package calling us too.
+	    Carp::carp($text);
+	}
+	else {
+	    warn $text;
+	}
+    };
+    local $SIG{__DIE__} = sub {
+	require Carp;
+	local $Carp::CarpLevel = 1;	# ignore package calling us too.
+	Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT")
+	    if $_[0] =~ /^Unable to create sub named "(.*?)::"/;
+    };
+
+    my($pkg, $callpkg, @imports) = @_;
+    my($type, $sym, $cache_is_current, $oops);
+    my($exports, $export_cache) = (\@{"${pkg}::EXPORT"},
+                                   $Exporter::Cache{$pkg} ||= {});
+
+    if (@imports) {
+	if (!%$export_cache) {
+	    _rebuild_cache ($pkg, $exports, $export_cache);
+	    $cache_is_current = 1;
+	}
+
+	if (grep m{^[/!:]}, @imports) {
+	    my $tagsref = \%{"${pkg}::EXPORT_TAGS"};
+	    my $tagdata;
+	    my %imports;
+	    my($remove, $spec, @names, @allexports);
+	    # negated first item implies starting with default set:
+	    unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/;
+	    foreach $spec (@imports){
+		$remove = $spec =~ s/^!//;
+
+		if ($spec =~ s/^://){
+		    if ($spec eq 'DEFAULT'){
+			@names = @$exports;
+		    }
+		    elsif ($tagdata = $tagsref->{$spec}) {
+			@names = @$tagdata;
+		    }
+		    else {
+			warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS];
+			++$oops;
+			next;
+		    }
+		}
+		elsif ($spec =~ m:^/(.*)/$:){
+		    my $patn = $1;
+		    @allexports = keys %$export_cache unless @allexports; # only do keys once
+		    @names = grep(/$patn/, @allexports); # not anchored by default
+		}
+		else {
+		    @names = ($spec); # is a normal symbol name
+		}
+
+		warn "Import ".($remove ? "del":"add").": @names "
+		    if $Exporter::Verbose;
+
+		if ($remove) {
+		   foreach $sym (@names) { delete $imports{$sym} } 
+		}
+		else {
+		    @imports{@names} = (1) x @names;
+		}
+	    }
+	    @imports = keys %imports;
+	}
+
+        my @carp;
+	foreach $sym (@imports) {
+	    if (!$export_cache->{$sym}) {
+		if ($sym =~ m/^\d/) {
+		    $pkg->VERSION($sym); # inherit from UNIVERSAL
+		    # If the version number was the only thing specified
+		    # then we should act as if nothing was specified:
+		    if (@imports == 1) {
+			@imports = @$exports;
+			last;
+		    }
+		    # We need a way to emulate 'use Foo ()' but still
+		    # allow an easy version check: "use Foo 1.23, ''";
+		    if (@imports == 2 and !$imports[1]) {
+			@imports = ();
+			last;
+		    }
+		} elsif ($sym !~ s/^&// || !$export_cache->{$sym}) {
+		    # Last chance - see if they've updated EXPORT_OK since we
+		    # cached it.
+
+		    unless ($cache_is_current) {
+			%$export_cache = ();
+			_rebuild_cache ($pkg, $exports, $export_cache);
+			$cache_is_current = 1;
+		    }
+
+		    if (!$export_cache->{$sym}) {
+			# accumulate the non-exports
+			push @carp,
+			  qq["$sym" is not exported by the $pkg module\n];
+			$oops++;
+		    }
+		}
+	    }
+	}
+	if ($oops) {
+	    require Carp;
+	    Carp::croak("@{carp}Can't continue after import errors");
+	}
+    }
+    else {
+	@imports = @$exports;
+    }
+
+    my($fail, $fail_cache) = (\@{"${pkg}::EXPORT_FAIL"},
+                              $Exporter::FailCache{$pkg} ||= {});
+
+    if (@$fail) {
+	if (!%$fail_cache) {
+	    # Build cache of symbols. Optimise the lookup by adding
+	    # barewords twice... both with and without a leading &.
+	    # (Technique could be applied to $export_cache at cost of memory)
+	    my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @$fail;
+	    warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Exporter::Verbose;
+	    @{$fail_cache}{@expanded} = (1) x @expanded;
+	}
+	my @failed;
+	foreach $sym (@imports) { push(@failed, $sym) if $fail_cache->{$sym} }
+	if (@failed) {
+	    @failed = $pkg->export_fail(@failed);
+	    foreach $sym (@failed) {
+                require Carp;
+		Carp::carp(qq["$sym" is not implemented by the $pkg module ],
+			"on this architecture");
+	    }
+	    if (@failed) {
+		require Carp;
+		Carp::croak("Can't continue after import errors");
+	    }
+	}
+    }
+
+    warn "Importing into $callpkg from $pkg: ",
+		join(", ",sort @imports) if $Exporter::Verbose;
+
+    foreach $sym (@imports) {
+	# shortcut for the common case of no type character
+	(*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next)
+	    unless $sym =~ s/^(\W)//;
+	$type = $1;
+	no warnings 'once';
+	*{"${callpkg}::$sym"} =
+	    $type eq '&' ? \&{"${pkg}::$sym"} :
+	    $type eq '$' ? \${"${pkg}::$sym"} :
+	    $type eq '@' ? \@{"${pkg}::$sym"} :
+	    $type eq '%' ? \%{"${pkg}::$sym"} :
+	    $type eq '*' ?  *{"${pkg}::$sym"} :
+	    do { require Carp; Carp::croak("Can't export symbol: $type$sym") };
+    }
+}
+
+sub heavy_export_to_level
+{
+      my $pkg = shift;
+      my $level = shift;
+      (undef) = shift;			# XXX redundant arg
+      my $callpkg = caller($level);
+      $pkg->export($callpkg, @_);
+}
+
+# Utility functions
+
+sub _push_tags {
+    my($pkg, $var, $syms) = @_;
+    my @nontag = ();
+    my $export_tags = \%{"${pkg}::EXPORT_TAGS"};
+    push(@{"${pkg}::$var"},
+	map { $export_tags->{$_} ? @{$export_tags->{$_}} 
+                                 : scalar(push(@nontag,$_),$_) }
+		(@$syms) ? @$syms : keys %$export_tags);
+    if (@nontag and $^W) {
+	# This may change to a die one day
+	require Carp;
+	Carp::carp(join(", ", @nontag)." are not tags of $pkg");
+    }
+}
+
+sub heavy_require_version {
+    my($self, $wanted) = @_;
+    my $pkg = ref $self || $self;
+    return ${pkg}->VERSION($wanted);
+}
+
+sub heavy_export_tags {
+  _push_tags((caller)[0], "EXPORT",    \@_);
+}
+
+sub heavy_export_ok_tags {
+  _push_tags((caller)[0], "EXPORT_OK", \@_);
+}
+
+1;
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Exporter.pm	2020-07-29 12:42:38.000000000 +0300
@@ -0,0 +1,98 @@
+package Exporter;
+
+require 5.006;
+
+# Be lean.
+#use strict;
+#no strict 'refs';
+
+our $Debug = 0;
+our $ExportLevel = 0;
+our $Verbose ||= 0;
+our $VERSION = '5.72';
+our (%Cache);
+
+sub as_heavy {
+  require Exporter::Heavy;
+  # Unfortunately, this does not work if the caller is aliased as *name = \&foo
+  # Thus the need to create a lot of identical subroutines
+  my $c = (caller(1))[3];
+  $c =~ s/.*:://;
+  \&{"Exporter::Heavy::heavy_$c"};
+}
+
+sub export {
+  goto &{as_heavy()};
+}
+
+sub import {
+  my $pkg = shift;
+  my $callpkg = caller($ExportLevel);
+
+  if ($pkg eq "Exporter" and @_ and $_[0] eq "import") {
+    *{$callpkg."::import"} = \&import;
+    return;
+  }
+
+  # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
+  my $exports = \@{"$pkg\::EXPORT"};
+  # But, avoid creating things if they don't exist, which saves a couple of
+  # hundred bytes per package processed.
+  my $fail = ${$pkg . '::'}{EXPORT_FAIL} && \@{"$pkg\::EXPORT_FAIL"};
+  return export $pkg, $callpkg, @_
+    if $Verbose or $Debug or $fail && @$fail > 1;
+  my $export_cache = ($Cache{$pkg} ||= {});
+  my $args = @_ or @_ = @$exports;
+
+  if ($args and not %$export_cache) {
+    s/^&//, $export_cache->{$_} = 1
+      foreach (@$exports, @{"$pkg\::EXPORT_OK"});
+  }
+  my $heavy;
+  # Try very hard not to use {} and hence have to  enter scope on the foreach
+  # We bomb out of the loop with last as soon as heavy is set.
+  if ($args or $fail) {
+    ($heavy = (/\W/ or $args and not exists $export_cache->{$_}
+               or $fail and @$fail and $_ eq $fail->[0])) and last
+                 foreach (@_);
+  } else {
+    ($heavy = /\W/) and last
+      foreach (@_);
+  }
+  return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy;
+  local $SIG{__WARN__} = 
+	sub {require Carp; &Carp::carp} if not $SIG{__WARN__};
+  # shortcut for the common case of no type character
+  *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_;
+}
+
+# Default methods
+
+sub export_fail {
+    my $self = shift;
+    @_;
+}
+
+# Unfortunately, caller(1)[3] "does not work" if the caller is aliased as
+# *name = \&foo.  Thus the need to create a lot of identical subroutines
+# Otherwise we could have aliased them to export().
+
+sub export_to_level {
+  goto &{as_heavy()};
+}
+
+sub export_tags {
+  goto &{as_heavy()};
+}
+
+sub export_ok_tags {
+  goto &{as_heavy()};
+}
+
+sub require_version {
+  goto &{as_heavy()};
+}
+
+1;
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Handle.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Handle.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Handle.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Handle.pm	2020-07-29 12:54:45.000000000 +0300
@@ -0,0 +1,391 @@
+package IO::Handle;
+
+use 5.006_001;
+use strict;
+our($VERSION, @EXPORT_OK, @ISA);
+use Carp;
+use Symbol;
+use SelectSaver;
+use IO ();	# Load the XS module
+
+require Exporter;
+@ISA = qw(Exporter);
+
+$VERSION = "1.36";
+$VERSION = eval $VERSION;
+
+@EXPORT_OK = qw(
+    autoflush
+    output_field_separator
+    output_record_separator
+    input_record_separator
+    input_line_number
+    format_page_number
+    format_lines_per_page
+    format_lines_left
+    format_name
+    format_top_name
+    format_line_break_characters
+    format_formfeed
+    format_write
+
+    print
+    printf
+    say
+    getline
+    getlines
+
+    printflush
+    flush
+
+    SEEK_SET
+    SEEK_CUR
+    SEEK_END
+    _IOFBF
+    _IOLBF
+    _IONBF
+);
+
+################################################
+## Constructors, destructors.
+##
+
+sub new {
+    my $class = ref($_[0]) || $_[0] || "IO::Handle";
+    if (@_ != 1) {
+	# Since perl will automatically require IO::File if needed, but
+	# also initialises IO::File's @ISA as part of the core we must
+	# ensure IO::File is loaded if IO::Handle is. This avoids effect-
+	# ively "half-loading" IO::File.
+	if ($] > 5.013 && $class eq 'IO::File' && !$INC{"IO/File.pm"}) {
+	    require IO::File;
+	    shift;
+	    return IO::File::->new(@_);
+	}
+	croak "usage: $class->new()";
+    }
+    my $io = gensym;
+    bless $io, $class;
+}
+
+sub new_from_fd {
+    my $class = ref($_[0]) || $_[0] || "IO::Handle";
+    @_ == 3 or croak "usage: $class->new_from_fd(FD, MODE)";
+    my $io = gensym;
+    shift;
+    IO::Handle::fdopen($io, @_)
+	or return undef;
+    bless $io, $class;
+}
+
+#
+# There is no need for DESTROY to do anything, because when the
+# last reference to an IO object is gone, Perl automatically
+# closes its associated files (if any).  However, to avoid any
+# attempts to autoload DESTROY, we here define it to do nothing.
+#
+sub DESTROY {}
+
+################################################
+## Open and close.
+##
+
+sub _open_mode_string {
+    my ($mode) = @_;
+    $mode =~ /^\+?(<|>>?)$/
+      or $mode =~ s/^r(\+?)$/$1</
+      or $mode =~ s/^w(\+?)$/$1>/
+      or $mode =~ s/^a(\+?)$/$1>>/
+      or croak "IO::Handle: bad open mode: $mode";
+    $mode;
+}
+
+sub fdopen {
+    @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
+    my ($io, $fd, $mode) = @_;
+    local(*GLOB);
+
+    if (ref($fd) && "".$fd =~ /GLOB\(/o) {
+	# It's a glob reference; Alias it as we cannot get name of anon GLOBs
+	my $n = qualify(*GLOB);
+	*GLOB = *{*$fd};
+	$fd =  $n;
+    } elsif ($fd =~ m#^\d+$#) {
+	# It's an FD number; prefix with "=".
+	$fd = "=$fd";
+    }
+
+    open($io, _open_mode_string($mode) . '&' . $fd)
+	? $io : undef;
+}
+
+sub close {
+    @_ == 1 or croak 'usage: $io->close()';
+    my($io) = @_;
+
+    close($io);
+}
+
+################################################
+## Normal I/O functions.
+##
+
+# flock
+# select
+
+sub opened {
+    @_ == 1 or croak 'usage: $io->opened()';
+    defined fileno($_[0]);
+}
+
+sub fileno {
+    @_ == 1 or croak 'usage: $io->fileno()';
+    fileno($_[0]);
+}
+
+sub getc {
+    @_ == 1 or croak 'usage: $io->getc()';
+    getc($_[0]);
+}
+
+sub eof {
+    @_ == 1 or croak 'usage: $io->eof()';
+    eof($_[0]);
+}
+
+sub print {
+    @_ or croak 'usage: $io->print(ARGS)';
+    my $this = shift;
+    print $this @_;
+}
+
+sub printf {
+    @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
+    my $this = shift;
+    printf $this @_;
+}
+
+sub say {
+    @_ or croak 'usage: $io->say(ARGS)';
+    my $this = shift;
+    local $\ = "\n";
+    print $this @_;
+}
+
+# Special XS wrapper to make them inherit lexical hints from the caller.
+_create_getline_subs( <<'END' ) or die $@;
+sub getline {
+    @_ == 1 or croak 'usage: $io->getline()';
+    my $this = shift;
+    return scalar <$this>;
+} 
+
+sub getlines {
+    @_ == 1 or croak 'usage: $io->getlines()';
+    wantarray or
+	croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
+    my $this = shift;
+    return <$this>;
+}
+1; # return true for error checking
+END
+
+*gets = \&getline;  # deprecated
+
+sub truncate {
+    @_ == 2 or croak 'usage: $io->truncate(LEN)';
+    truncate($_[0], $_[1]);
+}
+
+sub read {
+    @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
+    read($_[0], $_[1], $_[2], $_[3] || 0);
+}
+
+sub sysread {
+    @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
+    sysread($_[0], $_[1], $_[2], $_[3] || 0);
+}
+
+sub write {
+    @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
+    local($\) = "";
+    $_[2] = length($_[1]) unless defined $_[2];
+    print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
+}
+
+sub syswrite {
+    @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
+    if (defined($_[2])) {
+	syswrite($_[0], $_[1], $_[2], $_[3] || 0);
+    } else {
+	syswrite($_[0], $_[1]);
+    }
+}
+
+sub stat {
+    @_ == 1 or croak 'usage: $io->stat()';
+    stat($_[0]);
+}
+
+################################################
+## State modification functions.
+##
+
+sub autoflush {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $|;
+    $| = @_ > 1 ? $_[1] : 1;
+    $prev;
+}
+
+sub output_field_separator {
+    carp "output_field_separator is not supported on a per-handle basis"
+	if ref($_[0]);
+    my $prev = $,;
+    $, = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub output_record_separator {
+    carp "output_record_separator is not supported on a per-handle basis"
+	if ref($_[0]);
+    my $prev = $\;
+    $\ = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub input_record_separator {
+    carp "input_record_separator is not supported on a per-handle basis"
+	if ref($_[0]);
+    my $prev = $/;
+    $/ = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub input_line_number {
+    local $.;
+    () = tell qualify($_[0], caller) if ref($_[0]);
+    my $prev = $.;
+    $. = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_page_number {
+    my $old;
+    $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+    my $prev = $%;
+    $% = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_lines_per_page {
+    my $old;
+    $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+    my $prev = $=;
+    $= = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_lines_left {
+    my $old;
+    $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+    my $prev = $-;
+    $- = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_name {
+    my $old;
+    $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+    my $prev = $~;
+    $~ = qualify($_[1], caller) if @_ > 1;
+    $prev;
+}
+
+sub format_top_name {
+    my $old;
+    $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
+    my $prev = $^;
+    $^ = qualify($_[1], caller) if @_ > 1;
+    $prev;
+}
+
+sub format_line_break_characters {
+    carp "format_line_break_characters is not supported on a per-handle basis"
+	if ref($_[0]);
+    my $prev = $:;
+    $: = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_formfeed {
+    carp "format_formfeed is not supported on a per-handle basis"
+	if ref($_[0]);
+    my $prev = $^L;
+    $^L = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub formline {
+    my $io = shift;
+    my $picture = shift;
+    local($^A) = $^A;
+    local($\) = "";
+    formline($picture, @_);
+    print $io $^A;
+}
+
+sub format_write {
+    @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
+    if (@_ == 2) {
+	my ($io, $fmt) = @_;
+	my $oldfmt = $io->format_name(qualify($fmt,caller));
+	CORE::write($io);
+	$io->format_name($oldfmt);
+    } else {
+	CORE::write($_[0]);
+    }
+}
+
+sub fcntl {
+    @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
+    my ($io, $op) = @_;
+    return fcntl($io, $op, $_[2]);
+}
+
+sub ioctl {
+    @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
+    my ($io, $op) = @_;
+    return ioctl($io, $op, $_[2]);
+}
+
+# this sub is for compatibility with older releases of IO that used
+# a sub called constant to determine if a constant existed -- GMB
+#
+# The SEEK_* and _IO?BF constants were the only constants at that time
+# any new code should just check defined(&CONSTANT_NAME)
+
+sub constant {
+    no strict 'refs';
+    my $name = shift;
+    (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
+	? &{$name}() : undef;
+}
+
+# so that flush.pl can be deprecated
+
+sub printflush {
+    my $io = shift;
+    my $old;
+    $old = new SelectSaver qualify($io, caller) if ref($io);
+    local $| = 1;
+    if(ref($io)) {
+        print $io @_;
+    }
+    else {
+	print @_;
+    }
+}
+
+1;
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/INET.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/INET.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/INET.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/INET.pm	2020-07-29 12:54:08.000000000 +0300
@@ -0,0 +1,311 @@
+# IO::Socket::INET.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Socket::INET;
+
+use strict;
+our(@ISA, $VERSION);
+use IO::Socket;
+use Socket;
+use Carp;
+use Exporter;
+use Errno;
+
+@ISA = qw(IO::Socket);
+$VERSION = "1.35";
+
+my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1;
+
+IO::Socket::INET->register_domain( AF_INET );
+
+my %socket_type = ( tcp  => SOCK_STREAM,
+		    udp  => SOCK_DGRAM,
+		    icmp => SOCK_RAW
+		  );
+my %proto_number;
+$proto_number{tcp}  = Socket::IPPROTO_TCP()  if defined &Socket::IPPROTO_TCP;
+$proto_number{udp}  = Socket::IPPROTO_UDP()  if defined &Socket::IPPROTO_UDP;
+$proto_number{icmp} = Socket::IPPROTO_ICMP() if defined &Socket::IPPROTO_ICMP;
+my %proto_name = reverse %proto_number;
+
+sub new {
+    my $class = shift;
+    unshift(@_, "PeerAddr") if @_ == 1;
+    return $class->SUPER::new(@_);
+}
+
+sub _cache_proto {
+    my @proto = @_;
+    for (map lc($_), $proto[0], split(' ', $proto[1])) {
+	$proto_number{$_} = $proto[2];
+    }
+    $proto_name{$proto[2]} = $proto[0];
+}
+
+sub _get_proto_number {
+    my $name = lc(shift);
+    return undef unless defined $name;
+    return $proto_number{$name} if exists $proto_number{$name};
+
+    my @proto = eval { getprotobyname($name) };
+    return undef unless @proto;
+    _cache_proto(@proto);
+
+    return $proto[2];
+}
+
+sub _get_proto_name {
+    my $num = shift;
+    return undef unless defined $num;
+    return $proto_name{$num} if exists $proto_name{$num};
+
+    my @proto = eval { getprotobynumber($num) };
+    return undef unless @proto;
+    _cache_proto(@proto);
+
+    return $proto[0];
+}
+
+sub _sock_info {
+  my($addr,$port,$proto) = @_;
+  my $origport = $port;
+  my @serv = ();
+
+  $port = $1
+	if(defined $addr && $addr =~ s,:([\w\(\)/]+)$,,);
+
+  if(defined $proto  && $proto =~ /\D/) {
+    my $num = _get_proto_number($proto);
+    unless (defined $num) {
+      $@ = "Bad protocol '$proto'";
+      return;
+    }
+    $proto = $num;
+  }
+
+  if(defined $port) {
+    my $defport = ($port =~ s,\((\d+)\)$,,) ? $1 : undef;
+    my $pnum = ($port =~ m,^(\d+)$,)[0];
+
+    @serv = getservbyname($port, _get_proto_name($proto) || "")
+	if ($port =~ m,\D,);
+
+    $port = $serv[2] || $defport || $pnum;
+    unless (defined $port) {
+	$@ = "Bad service '$origport'";
+	return;
+    }
+
+    $proto = _get_proto_number($serv[3]) if @serv && !$proto;
+  }
+
+ return ($addr || undef,
+	 $port || undef,
+	 $proto || undef
+	);
+}
+
+sub _error {
+    my $sock = shift;
+    my $err = shift;
+    {
+      local($!);
+      my $title = ref($sock).": ";
+      $@ = join("", $_[0] =~ /^$title/ ? "" : $title, @_);
+      $sock->close()
+	if(defined fileno($sock));
+    }
+    $! = $err;
+    return undef;
+}
+
+sub _get_addr {
+    my($sock,$addr_str, $multi) = @_;
+    my @addr;
+    if ($multi && $addr_str !~ /^\d+(?:\.\d+){3}$/) {
+	(undef, undef, undef, undef, @addr) = gethostbyname($addr_str);
+    } else {
+	my $h = inet_aton($addr_str);
+	push(@addr, $h) if defined $h;
+    }
+    @addr;
+}
+
+sub configure {
+    my($sock,$arg) = @_;
+    my($lport,$rport,$laddr,$raddr,$proto,$type);
+
+    $arg->{LocalAddr} = $arg->{LocalHost}
+	if exists $arg->{LocalHost} && !exists $arg->{LocalAddr};
+
+    ($laddr,$lport,$proto) = _sock_info($arg->{LocalAddr},
+					$arg->{LocalPort},
+					$arg->{Proto})
+			or return _error($sock, $!, $@);
+
+    $laddr = defined $laddr ? inet_aton($laddr)
+			    : INADDR_ANY;
+
+    return _error($sock, $EINVAL, "Bad hostname '",$arg->{LocalAddr},"'")
+	unless(defined $laddr);
+
+    $arg->{PeerAddr} = $arg->{PeerHost}
+	if exists $arg->{PeerHost} && !exists $arg->{PeerAddr};
+
+    unless(exists $arg->{Listen}) {
+	($raddr,$rport,$proto) = _sock_info($arg->{PeerAddr},
+					    $arg->{PeerPort},
+					    $proto)
+			or return _error($sock, $!, $@);
+    }
+
+    $proto ||= _get_proto_number('tcp');
+
+    $type = $arg->{Type} || $socket_type{lc _get_proto_name($proto)};
+
+    my @raddr = ();
+
+    if(defined $raddr) {
+	@raddr = $sock->_get_addr($raddr, $arg->{MultiHomed});
+	return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'")
+	    unless @raddr;
+    }
+
+    while(1) {
+
+	$sock->socket(AF_INET, $type, $proto) or
+	    return _error($sock, $!, "$!");
+
+        if (defined $arg->{Blocking}) {
+	    defined $sock->blocking($arg->{Blocking})
+		or return _error($sock, $!, "$!");
+	}
+
+	if ($arg->{Reuse} || $arg->{ReuseAddr}) {
+	    $sock->sockopt(SO_REUSEADDR,1) or
+		    return _error($sock, $!, "$!");
+	}
+
+	if ($arg->{ReusePort}) {
+	    $sock->sockopt(SO_REUSEPORT,1) or
+		    return _error($sock, $!, "$!");
+	}
+
+	if ($arg->{Broadcast}) {
+		$sock->sockopt(SO_BROADCAST,1) or
+		    return _error($sock, $!, "$!");
+	}
+
+	if($lport || ($laddr ne INADDR_ANY) || exists $arg->{Listen}) {
+	    $sock->bind($lport || 0, $laddr) or
+		    return _error($sock, $!, "$!");
+	}
+
+	if(exists $arg->{Listen}) {
+	    $sock->listen($arg->{Listen} || 5) or
+		return _error($sock, $!, "$!");
+	    last;
+	}
+
+ 	# don't try to connect unless we're given a PeerAddr
+ 	last unless exists($arg->{PeerAddr});
+ 
+        $raddr = shift @raddr;
+
+	return _error($sock, $EINVAL, 'Cannot determine remote port')
+		unless($rport || $type == SOCK_DGRAM || $type == SOCK_RAW);
+
+	last
+	    unless($type == SOCK_STREAM || defined $raddr);
+
+	return _error($sock, $EINVAL, "Bad hostname '",$arg->{PeerAddr},"'")
+	    unless defined $raddr;
+
+#        my $timeout = ${*$sock}{'io_socket_timeout'};
+#        my $before = time() if $timeout;
+
+	undef $@;
+        if ($sock->connect(pack_sockaddr_in($rport, $raddr))) {
+#            ${*$sock}{'io_socket_timeout'} = $timeout;
+            return $sock;
+        }
+
+	return _error($sock, $!, $@ || "Timeout")
+	    unless @raddr;
+
+#	if ($timeout) {
+#	    my $new_timeout = $timeout - (time() - $before);
+#	    return _error($sock,
+#                         (exists(&Errno::ETIMEDOUT) ? Errno::ETIMEDOUT() : $EINVAL),
+#                         "Timeout") if $new_timeout <= 0;
+#	    ${*$sock}{'io_socket_timeout'} = $new_timeout;
+#        }
+
+    }
+
+    $sock;
+}
+
+sub connect {
+    @_ == 2 || @_ == 3 or
+       croak 'usage: $sock->connect(NAME) or $sock->connect(PORT, ADDR)';
+    my $sock = shift;
+    return $sock->SUPER::connect(@_ == 1 ? shift : pack_sockaddr_in(@_));
+}
+
+sub bind {
+    @_ == 2 || @_ == 3 or
+       croak 'usage: $sock->bind(NAME) or $sock->bind(PORT, ADDR)';
+    my $sock = shift;
+    return $sock->SUPER::bind(@_ == 1 ? shift : pack_sockaddr_in(@_))
+}
+
+sub sockaddr {
+    @_ == 1 or croak 'usage: $sock->sockaddr()';
+    my($sock) = @_;
+    my $name = $sock->sockname;
+    $name ? (sockaddr_in($name))[1] : undef;
+}
+
+sub sockport {
+    @_ == 1 or croak 'usage: $sock->sockport()';
+    my($sock) = @_;
+    my $name = $sock->sockname;
+    $name ? (sockaddr_in($name))[0] : undef;
+}
+
+sub sockhost {
+    @_ == 1 or croak 'usage: $sock->sockhost()';
+    my($sock) = @_;
+    my $addr = $sock->sockaddr;
+    $addr ? inet_ntoa($addr) : undef;
+}
+
+sub peeraddr {
+    @_ == 1 or croak 'usage: $sock->peeraddr()';
+    my($sock) = @_;
+    my $name = $sock->peername;
+    $name ? (sockaddr_in($name))[1] : undef;
+}
+
+sub peerport {
+    @_ == 1 or croak 'usage: $sock->peerport()';
+    my($sock) = @_;
+    my $name = $sock->peername;
+    $name ? (sockaddr_in($name))[0] : undef;
+}
+
+sub peerhost {
+    @_ == 1 or croak 'usage: $sock->peerhost()';
+    my($sock) = @_;
+    my $addr = $sock->peeraddr;
+    $addr ? inet_ntoa($addr) : undef;
+}
+
+1;
+
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/UNIX.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/UNIX.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/UNIX.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket/UNIX.pm	2020-07-29 12:58:59.000000000 +0300
@@ -0,0 +1,68 @@
+# IO::Socket::UNIX.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Socket::UNIX;
+
+use strict;
+our(@ISA, $VERSION);
+use IO::Socket;
+use Carp;
+
+@ISA = qw(IO::Socket);
+$VERSION = "1.26";
+$VERSION = eval $VERSION;
+
+IO::Socket::UNIX->register_domain( AF_UNIX );
+
+sub new {
+    my $class = shift;
+    unshift(@_, "Peer") if @_ == 1;
+    return $class->SUPER::new(@_);
+}
+
+sub configure {
+    my($sock,$arg) = @_;
+    my($bport,$cport);
+
+    my $type = $arg->{Type} || SOCK_STREAM;
+
+    $sock->socket(AF_UNIX, $type, 0) or
+	return undef;
+
+    if(exists $arg->{Local}) {
+	my $addr = sockaddr_un($arg->{Local});
+	$sock->bind($addr) or
+	    return undef;
+    }
+    if(exists $arg->{Listen} && $type != SOCK_DGRAM) {
+	$sock->listen($arg->{Listen} || 5) or
+	    return undef;
+    }
+    elsif(exists $arg->{Peer}) {
+	my $addr = sockaddr_un($arg->{Peer});
+	$sock->connect($addr) or
+	    return undef;
+    }
+
+    $sock;
+}
+
+sub hostpath {
+    @_ == 1 or croak 'usage: $sock->hostpath()';
+    my $n = $_[0]->sockname || return undef;
+    (sockaddr_un($n))[0];
+}
+
+sub peerpath {
+    @_ == 1 or croak 'usage: $sock->peerpath()';
+    my $n = $_[0]->peername || return undef;
+    (sockaddr_un($n))[0];
+}
+
+1; # Keep require happy
+
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO/Socket.pm	2020-07-29 12:54:33.000000000 +0300
@@ -0,0 +1,381 @@
+# IO::Socket.pm
+#
+# Copyright (c) 1997-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package IO::Socket;
+
+require 5.006;
+
+use IO::Handle;
+use Socket 1.3;
+use Carp;
+use strict;
+our(@ISA, $VERSION, @EXPORT_OK);
+use Exporter;
+use Errno;
+
+# legacy
+
+require IO::Socket::INET;
+require IO::Socket::UNIX if ($^O ne 'epoc' && $^O ne 'symbian');
+
+@ISA = qw(IO::Handle);
+
+$VERSION = "1.38";
+
+@EXPORT_OK = qw(sockatmark);
+
+sub import {
+    my $pkg = shift;
+    if (@_ && $_[0] eq 'sockatmark') { # not very extensible but for now, fast
+	Exporter::export_to_level('IO::Socket', 1, $pkg, 'sockatmark');
+    } else {
+	my $callpkg = caller;
+	Exporter::export 'Socket', $callpkg, @_;
+    }
+}
+
+sub new {
+    my($class,%arg) = @_;
+    my $sock = $class->SUPER::new();
+
+    $sock->autoflush(1);
+
+    ${*$sock}{'io_socket_timeout'} = delete $arg{Timeout};
+
+    return scalar(%arg) ? $sock->configure(\%arg)
+			: $sock;
+}
+
+my @domain2pkg;
+
+sub register_domain {
+    my($p,$d) = @_;
+    $domain2pkg[$d] = $p;
+}
+
+sub configure {
+    my($sock,$arg) = @_;
+    my $domain = delete $arg->{Domain};
+
+    croak 'IO::Socket: Cannot configure a generic socket'
+	unless defined $domain;
+
+    croak "IO::Socket: Unsupported socket domain"
+	unless defined $domain2pkg[$domain];
+
+    croak "IO::Socket: Cannot configure socket in domain '$domain'"
+	unless ref($sock) eq "IO::Socket";
+
+    bless($sock, $domain2pkg[$domain]);
+    $sock->configure($arg);
+}
+
+sub socket {
+    @_ == 4 or croak 'usage: $sock->socket(DOMAIN, TYPE, PROTOCOL)';
+    my($sock,$domain,$type,$protocol) = @_;
+
+    socket($sock,$domain,$type,$protocol) or
+    	return undef;
+
+    ${*$sock}{'io_socket_domain'} = $domain;
+    ${*$sock}{'io_socket_type'}   = $type;
+    ${*$sock}{'io_socket_proto'}  = $protocol;
+
+    $sock;
+}
+
+sub socketpair {
+    @_ == 4 || croak 'usage: IO::Socket->socketpair(DOMAIN, TYPE, PROTOCOL)';
+    my($class,$domain,$type,$protocol) = @_;
+    my $sock1 = $class->new();
+    my $sock2 = $class->new();
+
+    socketpair($sock1,$sock2,$domain,$type,$protocol) or
+    	return ();
+
+    ${*$sock1}{'io_socket_type'}  = ${*$sock2}{'io_socket_type'}  = $type;
+    ${*$sock1}{'io_socket_proto'} = ${*$sock2}{'io_socket_proto'} = $protocol;
+
+    ($sock1,$sock2);
+}
+
+sub connect {
+    @_ == 2 or croak 'usage: $sock->connect(NAME)';
+    my $sock = shift;
+    my $addr = shift;
+    my $timeout = ${*$sock}{'io_socket_timeout'};
+    my $err;
+    my $blocking;
+
+    $blocking = $sock->blocking(0) if $timeout;
+    if (!connect($sock, $addr)) {
+	if (defined $timeout && ($!{EINPROGRESS} || $!{EWOULDBLOCK})) {
+	    require IO::Select;
+
+	    my $sel = new IO::Select $sock;
+
+	    undef $!;
+	    my($r,$w,$e) = IO::Select::select(undef,$sel,$sel,$timeout);
+	    if(@$e[0]) {
+		# Windows return from select after the timeout in case of
+		# WSAECONNREFUSED(10061) if exception set is not used.
+		# This behavior is different from Linux.
+		# Using the exception
+		# set we now emulate the behavior in Linux
+		#    - Karthik Rajagopalan
+		$err = $sock->getsockopt(SOL_SOCKET,SO_ERROR);
+		$@ = "connect: $err";
+	    }
+	    elsif(!@$w[0]) {
+		$err = $! || (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
+		$@ = "connect: timeout";
+	    }
+	    elsif (!connect($sock,$addr) &&
+                not ($!{EISCONN} || ($^O eq 'MSWin32' &&
+                ($! == (($] < 5.019004) ? 10022 : Errno::EINVAL))))
+            ) {
+		# Some systems refuse to re-connect() to
+		# an already open socket and set errno to EISCONN.
+		# Windows sets errno to WSAEINVAL (10022) (pre-5.19.4) or
+		# EINVAL (22) (5.19.4 onwards).
+		$err = $!;
+		$@ = "connect: $!";
+	    }
+	}
+        elsif ($blocking || !($!{EINPROGRESS} || $!{EWOULDBLOCK}))  {
+	    $err = $!;
+	    $@ = "connect: $!";
+	}
+    }
+
+    $sock->blocking(1) if $blocking;
+
+    $! = $err if $err;
+
+    $err ? undef : $sock;
+}
+
+# Enable/disable blocking IO on sockets.
+# Without args return the current status of blocking,
+# with args change the mode as appropriate, returning the
+# old setting, or in case of error during the mode change
+# undef.
+
+sub blocking {
+    my $sock = shift;
+
+    return $sock->SUPER::blocking(@_)
+        if $^O ne 'MSWin32' && $^O ne 'VMS';
+
+    # Windows handles blocking differently
+    #
+    # http://groups.google.co.uk/group/perl.perl5.porters/browse_thread/thread/b4e2b1d88280ddff/630b667a66e3509f?#630b667a66e3509f
+    # http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/ioctlsocket_2.asp
+    #
+    # 0x8004667e is FIONBIO
+    #
+    # which is used to set blocking behaviour.
+
+    # NOTE: 
+    # This is a little confusing, the perl keyword for this is
+    # 'blocking' but the OS level behaviour is 'non-blocking', probably
+    # because sockets are blocking by default.
+    # Therefore internally we have to reverse the semantics.
+
+    my $orig= !${*$sock}{io_sock_nonblocking};
+        
+    return $orig unless @_;
+
+    my $block = shift;
+    
+    if ( !$block != !$orig ) {
+        ${*$sock}{io_sock_nonblocking} = $block ? 0 : 1;
+        ioctl($sock, 0x8004667e, pack("L!",${*$sock}{io_sock_nonblocking}))
+            or return undef;
+    }
+    
+    return $orig;        
+}
+
+sub close {
+    @_ == 1 or croak 'usage: $sock->close()';
+    my $sock = shift;
+    ${*$sock}{'io_socket_peername'} = undef;
+    $sock->SUPER::close();
+}
+
+sub bind {
+    @_ == 2 or croak 'usage: $sock->bind(NAME)';
+    my $sock = shift;
+    my $addr = shift;
+
+    return bind($sock, $addr) ? $sock
+			      : undef;
+}
+
+sub listen {
+    @_ >= 1 && @_ <= 2 or croak 'usage: $sock->listen([QUEUE])';
+    my($sock,$queue) = @_;
+    $queue = 5
+	unless $queue && $queue > 0;
+
+    return listen($sock, $queue) ? $sock
+				 : undef;
+}
+
+sub accept {
+    @_ == 1 || @_ == 2 or croak 'usage $sock->accept([PKG])';
+    my $sock = shift;
+    my $pkg = shift || $sock;
+    my $timeout = ${*$sock}{'io_socket_timeout'};
+    my $new = $pkg->new(Timeout => $timeout);
+    my $peer = undef;
+
+    if(defined $timeout) {
+	require IO::Select;
+
+	my $sel = new IO::Select $sock;
+
+	unless ($sel->can_read($timeout)) {
+	    $@ = 'accept: timeout';
+	    $! = (exists &Errno::ETIMEDOUT ? &Errno::ETIMEDOUT : 1);
+	    return;
+	}
+    }
+
+    $peer = accept($new,$sock)
+	or return;
+
+    ${*$new}{$_} = ${*$sock}{$_} for qw( io_socket_domain io_socket_type io_socket_proto );
+
+    return wantarray ? ($new, $peer)
+    	      	     : $new;
+}
+
+sub sockname {
+    @_ == 1 or croak 'usage: $sock->sockname()';
+    getsockname($_[0]);
+}
+
+sub peername {
+    @_ == 1 or croak 'usage: $sock->peername()';
+    my($sock) = @_;
+    ${*$sock}{'io_socket_peername'} ||= getpeername($sock);
+}
+
+sub connected {
+    @_ == 1 or croak 'usage: $sock->connected()';
+    my($sock) = @_;
+    getpeername($sock);
+}
+
+sub send {
+    @_ >= 2 && @_ <= 4 or croak 'usage: $sock->send(BUF, [FLAGS, [TO]])';
+    my $sock  = $_[0];
+    my $flags = $_[2] || 0;
+    my $peer  = $_[3] || $sock->peername;
+
+    croak 'send: Cannot determine peer address'
+	 unless(defined $peer);
+
+    my $r = defined(getpeername($sock))
+	? send($sock, $_[1], $flags)
+	: send($sock, $_[1], $flags, $peer);
+
+    # remember who we send to, if it was successful
+    ${*$sock}{'io_socket_peername'} = $peer
+	if(@_ == 4 && defined $r);
+
+    $r;
+}
+
+sub recv {
+    @_ == 3 || @_ == 4 or croak 'usage: $sock->recv(BUF, LEN [, FLAGS])';
+    my $sock  = $_[0];
+    my $len   = $_[2];
+    my $flags = $_[3] || 0;
+
+    # remember who we recv'd from
+    ${*$sock}{'io_socket_peername'} = recv($sock, $_[1]='', $len, $flags);
+}
+
+sub shutdown {
+    @_ == 2 or croak 'usage: $sock->shutdown(HOW)';
+    my($sock, $how) = @_;
+    ${*$sock}{'io_socket_peername'} = undef;
+    shutdown($sock, $how);
+}
+
+sub setsockopt {
+    @_ == 4 or croak '$sock->setsockopt(LEVEL, OPTNAME, OPTVAL)';
+    setsockopt($_[0],$_[1],$_[2],$_[3]);
+}
+
+my $intsize = length(pack("i",0));
+
+sub getsockopt {
+    @_ == 3 or croak '$sock->getsockopt(LEVEL, OPTNAME)';
+    my $r = getsockopt($_[0],$_[1],$_[2]);
+    # Just a guess
+    $r = unpack("i", $r)
+	if(defined $r && length($r) == $intsize);
+    $r;
+}
+
+sub sockopt {
+    my $sock = shift;
+    @_ == 1 ? $sock->getsockopt(SOL_SOCKET,@_)
+	    : $sock->setsockopt(SOL_SOCKET,@_);
+}
+
+sub atmark {
+    @_ == 1 or croak 'usage: $sock->atmark()';
+    my($sock) = @_;
+    sockatmark($sock);
+}
+
+sub timeout {
+    @_ == 1 || @_ == 2 or croak 'usage: $sock->timeout([VALUE])';
+    my($sock,$val) = @_;
+    my $r = ${*$sock}{'io_socket_timeout'};
+
+    ${*$sock}{'io_socket_timeout'} = defined $val ? 0 + $val : $val
+	if(@_ == 2);
+
+    $r;
+}
+
+sub sockdomain {
+    @_ == 1 or croak 'usage: $sock->sockdomain()';
+    my $sock = shift;
+    if (!defined(${*$sock}{'io_socket_domain'})) {
+	my $addr = $sock->sockname();
+	${*$sock}{'io_socket_domain'} = sockaddr_family($addr)
+	    if (defined($addr));
+    }
+    ${*$sock}{'io_socket_domain'};
+}
+
+sub socktype {
+    @_ == 1 or croak 'usage: $sock->socktype()';
+    my $sock = shift;
+    ${*$sock}{'io_socket_type'} = $sock->sockopt(Socket::SO_TYPE)
+	if (!defined(${*$sock}{'io_socket_type'}) && defined(eval{Socket::SO_TYPE}));
+    ${*$sock}{'io_socket_type'}
+}
+
+sub protocol {
+    @_ == 1 or croak 'usage: $sock->protocol()';
+    my($sock) = @_;
+    ${*$sock}{'io_socket_proto'} = $sock->sockopt(Socket::SO_PROTOCOL)
+	if (!defined(${*$sock}{'io_socket_proto'}) && defined(eval{Socket::SO_PROTOCOL}));
+    ${*$sock}{'io_socket_proto'};
+}
+
+1;
+
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/IO.pm	2020-07-29 12:55:27.000000000 +0300
@@ -0,0 +1,30 @@
+#
+
+package IO;
+
+use XSLoader ();
+use Carp;
+use strict;
+use warnings;
+
+our $VERSION = "1.38";
+XSLoader::load 'IO', $VERSION;
+
+sub import {
+    shift;
+
+    warnings::warnif('deprecated', qq{Parameterless "use IO" deprecated})
+        if @_ == 0 ;
+    
+    my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir);
+
+    local @INC = @INC;
+    pop @INC if $INC[-1] eq '.';
+    eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l)
+	or croak $@;
+}
+
+1;
+
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/SelectSaver.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/SelectSaver.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/SelectSaver.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/SelectSaver.pm	2020-07-29 12:55:15.000000000 +0300
@@ -0,0 +1,22 @@
+package SelectSaver;
+
+our $VERSION = '1.02';
+
+require 5.000;
+use Carp;
+use Symbol;
+
+sub new {
+    @_ >= 1 && @_ <= 2 or croak 'usage: SelectSaver->new( [FILEHANDLE] )';
+    my $fh = select;
+    my $self = bless \$fh, $_[0];
+    select qualify($_[1], caller) if @_ > 1;
+    $self;
+}
+
+sub DESTROY {
+    my $self = $_[0];
+    select $$self;
+}
+
+1;
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Socket.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Socket.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Socket.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Socket.pm	2020-07-29 12:57:19.000000000 +0300
@@ -0,0 +1,444 @@
+package Socket;
+
+use strict;
+{ use 5.006001; }
+
+our $VERSION = '2.020_03'; # patched in perl5.git
+
+# Still undocumented: SCM_*, SOMAXCONN, IOV_MAX, UIO_MAXIOV
+
+use Carp;
+use warnings::register;
+
+require Exporter;
+require XSLoader;
+our @ISA = qw(Exporter);
+
+# <@Nicholas> you can't change @EXPORT without breaking the implicit API
+# Please put any new constants in @EXPORT_OK!
+
+# List re-ordered to match documentation above. Try to keep the ordering
+# consistent so it's easier to see which ones are or aren't documented.
+our @EXPORT = qw(
+	PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT
+	PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6
+	PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI
+	PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN
+	PF_X25
+
+	AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT
+	AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6
+	AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI
+	AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN
+	AF_X25
+
+	SOCK_DGRAM SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM
+
+	SOL_SOCKET
+
+	SO_ACCEPTCONN SO_ATTACH_FILTER SO_BACKLOG SO_BROADCAST SO_CHAMELEON
+	SO_DEBUG SO_DETACH_FILTER SO_DGRAM_ERRIND SO_DOMAIN SO_DONTLINGER
+	SO_DONTROUTE SO_ERROR SO_FAMILY SO_KEEPALIVE SO_LINGER SO_OOBINLINE
+	SO_PASSCRED SO_PASSIFNAME SO_PEERCRED SO_PROTOCOL SO_PROTOTYPE
+	SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT
+	SO_SECURITY_AUTHENTICATION SO_SECURITY_ENCRYPTION_NETWORK
+	SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO
+	SO_STATE SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE
+
+	IP_OPTIONS IP_HDRINCL IP_TOS IP_TTL IP_RECVOPTS IP_RECVRETOPTS
+	IP_RETOPTS
+
+	MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_CTRUNC MSG_DONTROUTE
+	MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FIN
+	MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_PROXY MSG_RST
+	MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
+
+	SHUT_RD SHUT_RDWR SHUT_WR
+
+	INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
+
+	SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_RIGHTS SCM_TIMESTAMP
+
+	SOMAXCONN
+
+	IOV_MAX
+	UIO_MAXIOV
+
+	sockaddr_family
+	pack_sockaddr_in  unpack_sockaddr_in  sockaddr_in
+	pack_sockaddr_in6 unpack_sockaddr_in6 sockaddr_in6
+	pack_sockaddr_un  unpack_sockaddr_un  sockaddr_un 
+
+	inet_aton inet_ntoa
+);
+
+# List re-ordered to match documentation above. Try to keep the ordering
+# consistent so it's easier to see which ones are or aren't documented.
+our @EXPORT_OK = qw(
+	CR LF CRLF $CR $LF $CRLF
+
+	SOCK_NONBLOCK SOCK_CLOEXEC
+
+	IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP IP_DROP_MEMBERSHIP
+	IP_DROP_SOURCE_MEMBERSHIP IP_MULTICAST_IF IP_MULTICAST_LOOP
+	IP_MULTICAST_TTL
+
+	IPPROTO_IP IPPROTO_IPV6 IPPROTO_RAW IPPROTO_ICMP IPPROTO_IGMP
+	IPPROTO_TCP IPPROTO_UDP IPPROTO_GRE IPPROTO_ESP IPPROTO_AH
+	IPPROTO_SCTP
+
+	IPTOS_LOWDELAY IPTOS_THROUGHPUT IPTOS_RELIABILITY IPTOS_MINCOST
+
+	TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT TCP_INFO
+	TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT TCP_KEEPIDLE TCP_KEEPINTVL
+	TCP_LINGER2 TCP_MAXRT TCP_MAXSEG TCP_MD5SIG TCP_NODELAY TCP_NOOPT
+	TCP_NOPUSH TCP_QUICKACK TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT
+	TCP_WINDOW_CLAMP
+
+	IN6ADDR_ANY IN6ADDR_LOOPBACK
+
+	IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP IPV6_JOIN_GROUP
+	IPV6_LEAVE_GROUP IPV6_MTU IPV6_MTU_DISCOVER IPV6_MULTICAST_HOPS
+	IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_UNICAST_HOPS IPV6_V6ONLY
+
+	pack_ip_mreq unpack_ip_mreq pack_ip_mreq_source unpack_ip_mreq_source
+
+	pack_ipv6_mreq unpack_ipv6_mreq
+
+	inet_pton inet_ntop
+
+	getaddrinfo getnameinfo
+
+	AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN
+	AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST
+	AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED
+
+	NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES
+	NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV
+
+	NIx_NOHOST NIx_NOSERV
+
+	EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY
+	EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM
+);
+
+our %EXPORT_TAGS = (
+    crlf     => [qw(CR LF CRLF $CR $LF $CRLF)],
+    addrinfo => [qw(getaddrinfo getnameinfo), grep m/^(?:AI|NI|NIx|EAI)_/, @EXPORT_OK],
+    all      => [@EXPORT, @EXPORT_OK],
+);
+
+BEGIN {
+    sub CR   () {"\015"}
+    sub LF   () {"\012"}
+    sub CRLF () {"\015\012"}
+
+    # These are not gni() constants; they're extensions for the perl API
+    # The definitions in Socket.pm and Socket.xs must match
+    sub NIx_NOHOST() {1 << 0}
+    sub NIx_NOSERV() {1 << 1}
+}
+
+*CR   = \CR();
+*LF   = \LF();
+*CRLF = \CRLF();
+
+sub sockaddr_in {
+    if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die
+	my($af, $port, @quad) = @_;
+	warnings::warn "6-ARG sockaddr_in call is deprecated" 
+	    if warnings::enabled();
+	pack_sockaddr_in($port, inet_aton(join('.', @quad)));
+    } elsif (wantarray) {
+	croak "usage:   (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1;
+        unpack_sockaddr_in(@_);
+    } else {
+	croak "usage:   sin_sv = sockaddr_in(port,iaddr))" unless @_ == 2;
+        pack_sockaddr_in(@_);
+    }
+}
+
+sub sockaddr_in6 {
+    if (wantarray) {
+	croak "usage:   (port,in6addr,scope_id,flowinfo) = sockaddr_in6(sin6_sv)" unless @_ == 1;
+	unpack_sockaddr_in6(@_);
+    }
+    else {
+	croak "usage:   sin6_sv = sockaddr_in6(port,in6addr,[scope_id,[flowinfo]])" unless @_ >= 2 and @_ <= 4;
+	pack_sockaddr_in6(@_);
+    }
+}
+
+sub sockaddr_un {
+    if (wantarray) {
+	croak "usage:   (filename) = sockaddr_un(sun_sv)" unless @_ == 1;
+        unpack_sockaddr_un(@_);
+    } else {
+	croak "usage:   sun_sv = sockaddr_un(filename)" unless @_ == 1;
+        pack_sockaddr_un(@_);
+    }
+}
+
+XSLoader::load(__PACKAGE__, $VERSION);
+
+my %errstr;
+
+if( defined &getaddrinfo ) {
+    # These are not part of the API, nothing uses them, and deleting them
+    # reduces the size of %Socket:: by about 12K
+    delete $Socket::{fake_getaddrinfo};
+    delete $Socket::{fake_getnameinfo};
+} else {
+    require Scalar::Util;
+
+    *getaddrinfo = \&fake_getaddrinfo;
+    *getnameinfo = \&fake_getnameinfo;
+
+    # These numbers borrowed from GNU libc's implementation, but since
+    # they're only used by our emulation, it doesn't matter if the real
+    # platform's values differ
+    my %constants = (
+	AI_PASSIVE     => 1,
+	AI_CANONNAME   => 2,
+	AI_NUMERICHOST => 4,
+	AI_V4MAPPED    => 8,
+	AI_ALL         => 16,
+	AI_ADDRCONFIG  => 32,
+	# RFC 2553 doesn't define this but Linux does - lets be nice and
+	# provide it since we can
+	AI_NUMERICSERV => 1024,
+
+	EAI_BADFLAGS   => -1,
+	EAI_NONAME     => -2,
+	EAI_NODATA     => -5,
+	EAI_FAMILY     => -6,
+	EAI_SERVICE    => -8,
+
+	NI_NUMERICHOST => 1,
+	NI_NUMERICSERV => 2,
+	NI_NOFQDN      => 4,
+	NI_NAMEREQD    => 8,
+	NI_DGRAM       => 16,
+
+	# Constants we don't support. Export them, but croak if anyone tries to
+	# use them
+	AI_IDN                      => 64,
+	AI_CANONIDN                 => 128,
+	AI_IDN_ALLOW_UNASSIGNED     => 256,
+	AI_IDN_USE_STD3_ASCII_RULES => 512,
+	NI_IDN                      => 32,
+	NI_IDN_ALLOW_UNASSIGNED     => 64,
+	NI_IDN_USE_STD3_ASCII_RULES => 128,
+
+	# Error constants we'll never return, so it doesn't matter what value
+	# these have, nor that we don't provide strings for them
+	EAI_SYSTEM   => -11,
+	EAI_BADHINTS => -1000,
+	EAI_PROTOCOL => -1001
+    );
+
+    foreach my $name ( keys %constants ) {
+	my $value = $constants{$name};
+
+	no strict 'refs';
+	defined &$name or *$name = sub () { $value };
+    }
+
+    %errstr = (
+	# These strings from RFC 2553
+	EAI_BADFLAGS()   => "invalid value for ai_flags",
+	EAI_NONAME()     => "nodename nor servname provided, or not known",
+	EAI_NODATA()     => "no address associated with nodename",
+	EAI_FAMILY()     => "ai_family not supported",
+	EAI_SERVICE()    => "servname not supported for ai_socktype",
+    );
+}
+
+# The following functions are used if the system does not have a
+# getaddrinfo(3) function in libc; and are used to emulate it for the AF_INET
+# family
+
+# Borrowed from Regexp::Common::net
+my $REGEXP_IPv4_DECIMAL = qr/25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}/;
+my $REGEXP_IPv4_DOTTEDQUAD = qr/$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL\.$REGEXP_IPv4_DECIMAL/;
+
+sub fake_makeerr
+{
+    my ( $errno ) = @_;
+    my $errstr = $errno == 0 ? "" : ( $errstr{$errno} || $errno );
+    return Scalar::Util::dualvar( $errno, $errstr );
+}
+
+sub fake_getaddrinfo
+{
+    my ( $node, $service, $hints ) = @_;
+
+    $node = "" unless defined $node;
+
+    $service = "" unless defined $service;
+
+    my ( $family, $socktype, $protocol, $flags ) = @$hints{qw( family socktype protocol flags )};
+
+    $family ||= Socket::AF_INET(); # 0 == AF_UNSPEC, which we want too
+    $family == Socket::AF_INET() or return fake_makeerr( EAI_FAMILY() );
+
+    $socktype ||= 0;
+
+    $protocol ||= 0;
+
+    $flags ||= 0;
+
+    my $flag_passive     = $flags & AI_PASSIVE();     $flags &= ~AI_PASSIVE();
+    my $flag_canonname   = $flags & AI_CANONNAME();   $flags &= ~AI_CANONNAME();
+    my $flag_numerichost = $flags & AI_NUMERICHOST(); $flags &= ~AI_NUMERICHOST();
+    my $flag_numericserv = $flags & AI_NUMERICSERV(); $flags &= ~AI_NUMERICSERV();
+
+    # These constants don't apply to AF_INET-only lookups, so we might as well
+    # just ignore them. For AI_ADDRCONFIG we just presume the host has ability
+    # to talk AF_INET. If not we'd have to return no addresses at all. :)
+    $flags &= ~(AI_V4MAPPED()|AI_ALL()|AI_ADDRCONFIG());
+
+    $flags & (AI_IDN()|AI_CANONIDN()|AI_IDN_ALLOW_UNASSIGNED()|AI_IDN_USE_STD3_ASCII_RULES()) and
+	croak "Socket::getaddrinfo() does not support IDN";
+
+    $flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
+
+    $node eq "" and $service eq "" and return fake_makeerr( EAI_NONAME() );
+
+    my $canonname;
+    my @addrs;
+    if( $node ne "" ) {
+	return fake_makeerr( EAI_NONAME() ) if( $flag_numerichost and $node !~ m/^$REGEXP_IPv4_DOTTEDQUAD$/ );
+	( $canonname, undef, undef, undef, @addrs ) = gethostbyname( $node );
+	defined $canonname or return fake_makeerr( EAI_NONAME() );
+
+	undef $canonname unless $flag_canonname;
+    }
+    else {
+	$addrs[0] = $flag_passive ? Socket::inet_aton( "0.0.0.0" )
+				  : Socket::inet_aton( "127.0.0.1" );
+    }
+
+    my @ports; # Actually ARRAYrefs of [ socktype, protocol, port ]
+    my $protname = "";
+    if( $protocol ) {
+	$protname = eval { getprotobynumber( $protocol ) };
+    }
+
+    if( $service ne "" and $service !~ m/^\d+$/ ) {
+	return fake_makeerr( EAI_NONAME() ) if( $flag_numericserv );
+	getservbyname( $service, $protname ) or return fake_makeerr( EAI_SERVICE() );
+    }
+
+    foreach my $this_socktype ( Socket::SOCK_STREAM(), Socket::SOCK_DGRAM(), Socket::SOCK_RAW() ) {
+	next if $socktype and $this_socktype != $socktype;
+
+	my $this_protname = "raw";
+	$this_socktype == Socket::SOCK_STREAM() and $this_protname = "tcp";
+	$this_socktype == Socket::SOCK_DGRAM()  and $this_protname = "udp";
+
+	next if $protname and $this_protname ne $protname;
+
+	my $port;
+	if( $service ne "" ) {
+	    if( $service =~ m/^\d+$/ ) {
+		$port = "$service";
+	    }
+	    else {
+		( undef, undef, $port, $this_protname ) = getservbyname( $service, $this_protname );
+		next unless defined $port;
+	    }
+	}
+	else {
+	    $port = 0;
+	}
+
+	push @ports, [ $this_socktype, eval { scalar getprotobyname( $this_protname ) } || 0, $port ];
+    }
+
+    my @ret;
+    foreach my $addr ( @addrs ) {
+	foreach my $portspec ( @ports ) {
+	    my ( $socktype, $protocol, $port ) = @$portspec;
+	    push @ret, {
+		family    => $family,
+		socktype  => $socktype,
+		protocol  => $protocol,
+		addr      => Socket::pack_sockaddr_in( $port, $addr ),
+		canonname => undef,
+	    };
+	}
+    }
+
+    # Only supply canonname for the first result
+    if( defined $canonname ) {
+	$ret[0]->{canonname} = $canonname;
+    }
+
+    return ( fake_makeerr( 0 ), @ret );
+}
+
+sub fake_getnameinfo
+{
+    my ( $addr, $flags, $xflags ) = @_;
+
+    my ( $port, $inetaddr );
+    eval { ( $port, $inetaddr ) = Socket::unpack_sockaddr_in( $addr ) }
+	or return fake_makeerr( EAI_FAMILY() );
+
+    my $family = Socket::AF_INET();
+
+    $flags ||= 0;
+
+    my $flag_numerichost = $flags & NI_NUMERICHOST(); $flags &= ~NI_NUMERICHOST();
+    my $flag_numericserv = $flags & NI_NUMERICSERV(); $flags &= ~NI_NUMERICSERV();
+    my $flag_nofqdn      = $flags & NI_NOFQDN();      $flags &= ~NI_NOFQDN();
+    my $flag_namereqd    = $flags & NI_NAMEREQD();    $flags &= ~NI_NAMEREQD();
+    my $flag_dgram       = $flags & NI_DGRAM()   ;    $flags &= ~NI_DGRAM();
+
+    $flags & (NI_IDN()|NI_IDN_ALLOW_UNASSIGNED()|NI_IDN_USE_STD3_ASCII_RULES()) and
+	croak "Socket::getnameinfo() does not support IDN";
+
+    $flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
+
+    $xflags ||= 0;
+
+    my $node;
+    if( $xflags & NIx_NOHOST ) {
+	$node = undef;
+    }
+    elsif( $flag_numerichost ) {
+	$node = Socket::inet_ntoa( $inetaddr );
+    }
+    else {
+	$node = gethostbyaddr( $inetaddr, $family );
+	if( !defined $node ) {
+	    return fake_makeerr( EAI_NONAME() ) if $flag_namereqd;
+	    $node = Socket::inet_ntoa( $inetaddr );
+	}
+	elsif( $flag_nofqdn ) {
+	    my ( $shortname ) = split m/\./, $node;
+	    my ( $fqdn ) = gethostbyname $shortname;
+	    $node = $shortname if defined $fqdn and $fqdn eq $node;
+	}
+    }
+
+    my $service;
+    if( $xflags & NIx_NOSERV ) {
+	$service = undef;
+    }
+    elsif( $flag_numericserv ) {
+	$service = "$port";
+    }
+    else {
+	my $protname = $flag_dgram ? "udp" : "";
+	$service = getservbyport( $port, $protname );
+	if( !defined $service ) {
+	    $service = "$port";
+	}
+    }
+
+    return ( fake_makeerr( 0 ), $node, $service );
+}
+
+1;
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Symbol.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Symbol.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/Symbol.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/Symbol.pm	2020-07-29 12:55:03.000000000 +0300
@@ -0,0 +1,91 @@
+package Symbol;
+
+BEGIN { require 5.005; }
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw(gensym ungensym qualify qualify_to_ref);
+@EXPORT_OK = qw(delete_package geniosym);
+
+$VERSION = '1.08';
+
+my $genpkg = "Symbol::";
+my $genseq = 0;
+
+my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT);
+
+#
+# Note that we never _copy_ the glob; we just make a ref to it.
+# If we did copy it, then SVf_FAKE would be set on the copy, and
+# glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work.
+#
+sub gensym () {
+    my $name = "GEN" . $genseq++;
+    my $ref = \*{$genpkg . $name};
+    delete $$genpkg{$name};
+    $ref;
+}
+
+sub geniosym () {
+    my $sym = gensym();
+    # force the IO slot to be filled
+    select(select $sym);
+    *$sym{IO};
+}
+
+sub ungensym ($) {}
+
+sub qualify ($;$) {
+    my ($name) = @_;
+    if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) {
+	my $pkg;
+	# Global names: special character, "^xyz", or other. 
+	if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) {
+	    # RGS 2001-11-05 : translate leading ^X to control-char
+	    $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei;
+	    $pkg = "main";
+	}
+	else {
+	    $pkg = (@_ > 1) ? $_[1] : caller;
+	}
+	$name = $pkg . "::" . $name;
+    }
+    $name;
+}
+
+sub qualify_to_ref ($;$) {
+    return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller };
+}
+
+#
+# of Safe.pm lineage
+#
+sub delete_package ($) {
+    my $pkg = shift;
+
+    # expand to full symbol table name if needed
+
+    unless ($pkg =~ /^main::.*::$/) {
+        $pkg = "main$pkg"	if	$pkg =~ /^::/;
+        $pkg = "main::$pkg"	unless	$pkg =~ /^main::/;
+        $pkg .= '::'		unless	$pkg =~ /::$/;
+    }
+
+    my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
+    my $stem_symtab = *{$stem}{HASH};
+    return unless defined $stem_symtab and exists $stem_symtab->{$leaf};
+
+    # free all the symbols in the package
+
+    my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH};
+    foreach my $name (keys %$leaf_symtab) {
+        undef *{$pkg . $name};
+    }
+
+    # delete the symbol table
+
+    %$leaf_symtab = ();
+    delete $stem_symtab->{$leaf};
+}
+
+1;
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/XSLoader.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/XSLoader.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/XSLoader.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/XSLoader.pm	2020-07-29 12:42:38.000000000 +0300
@@ -0,0 +1,125 @@
+# Generated from XSLoader_pm.PL (resolved %Config::Config value)
+# This file is unique for every OS
+
+package XSLoader;
+
+$VERSION = "0.27";
+
+#use strict;
+
+package DynaLoader;
+
+# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
+# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
+boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
+                                !defined(&dl_error);
+package XSLoader;
+
+sub load {
+    package DynaLoader;
+
+    my ($caller, $modlibname) = caller();
+    my $module = $caller;
+
+    if (@_) {
+        $module = $_[0];
+    } else {
+        $_[0] = $module;
+    }
+
+    # work with static linking too
+    my $boots = "$module\::bootstrap";
+    goto &$boots if defined &$boots;
+
+    goto \&XSLoader::bootstrap_inherit unless $module and defined &dl_load_file;
+
+    my @modparts = split(/::/,$module);
+    my $modfname = $modparts[-1];
+
+    my $modpname = join('/',@modparts);
+    my $c = () = split(/::/,$caller,-1);
+    $modlibname =~ s,[\\/][^\\/]+$,, while $c--;    # Q&D basename
+    # Does this look like a relative path?
+    if ($modlibname !~ m{^/}) {
+        # Someone may have a #line directive that changes the file name, or
+        # may be calling XSLoader::load from inside a string eval.  We cer-
+        # tainly do not want to go loading some code that is not in @INC,
+        # as it could be untrusted.
+        #
+        # We could just fall back to DynaLoader here, but then the rest of
+        # this function would go untested in the perl core, since all @INC
+        # paths are relative during testing.  That would be a time bomb
+        # waiting to happen, since bugs could be introduced into the code.
+        #
+        # So look through @INC to see if $modlibname is in it.  A rela-
+        # tive $modlibname is not a common occurrence, so this block is
+        # not hot code.
+        FOUND: {
+            for (@INC) {
+                if ($_ eq $modlibname) {
+                    last FOUND;
+                }
+            }
+            # Not found.  Fall back to DynaLoader.
+            goto \&XSLoader::bootstrap_inherit;
+        }
+    }
+    my $file = "$modlibname/auto/$modpname/$modfname.so";
+
+#   print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug;
+
+    my $bs = $file;
+    $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
+
+    if (-s $bs) { # only read file if it's not empty
+#       print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
+        eval { local @INC = ('.'); do $bs; };
+        warn "$bs: $@\n" if $@;
+	goto \&XSLoader::bootstrap_inherit;
+    }
+
+    goto \&XSLoader::bootstrap_inherit if not -f $file;
+
+    my $bootname = "boot_$module";
+    $bootname =~ s/\W/_/g;
+    @DynaLoader::dl_require_symbols = ($bootname);
+
+    my $boot_symbol_ref;
+
+    # Many dynamic extension loading problems will appear to come from
+    # this section of code: XYZ failed at line 123 of DynaLoader.pm.
+    # Often these errors are actually occurring in the initialisation
+    # C code of the extension XS file. Perl reports the error as being
+    # in this perl code simply because this was the last perl code
+    # it executed.
+
+    my $libref = dl_load_file($file, 0) or do { 
+        require Carp;
+        Carp::croak("Can't load '$file' for module $module: " . dl_error());
+    };
+    push(@DynaLoader::dl_librefs,$libref);  # record loaded object
+
+    $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
+        require Carp;
+        Carp::croak("Can't find '$bootname' symbol in $file\n");
+    };
+
+    push(@DynaLoader::dl_modules, $module); # record loaded module
+
+  boot:
+    my $xs = dl_install_xsub($boots, $boot_symbol_ref, $file);
+
+    # See comment block above
+    push(@DynaLoader::dl_shared_objects, $file); # record files loaded
+    return &$xs(@_);
+}
+
+sub bootstrap_inherit {
+    require DynaLoader;
+    goto \&DynaLoader::bootstrap_inherit;
+}
+
+1;
+
+__END__
+
Binary files /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/auto/IO/IO.so and /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/auto/IO/IO.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/auto/Socket/Socket.so and /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/auto/Socket/Socket.so differ
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/strict.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/strict.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/strict.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/strict.pm	2020-07-29 12:42:38.000000000 +0300
@@ -0,0 +1,79 @@
+package strict;
+
+$strict::VERSION = "1.11";
+
+my ( %bitmask, %explicit_bitmask );
+
+BEGIN {
+    # Verify that we're called correctly so that strictures will work.
+    # Can't use Carp, since Carp uses us!
+    # see also warnings.pm.
+    die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
+        if __FILE__ !~ ( '(?x) \b     '.__PACKAGE__.'  \.pmc? \z' )
+        && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
+
+    %bitmask = (
+        refs => 0x00000002,
+        subs => 0x00000200,
+        vars => 0x00000400,
+    );
+
+    %explicit_bitmask = (
+        refs => 0x00000020,
+        subs => 0x00000040,
+        vars => 0x00000080,
+    );
+
+    my $bits = 0;
+    $bits |= $_ for values %bitmask;
+
+    my $inline_all_bits = $bits;
+    *all_bits = sub () { $inline_all_bits };
+
+    $bits = 0;
+    $bits |= $_ for values %explicit_bitmask;
+
+    my $inline_all_explicit_bits = $bits;
+    *all_explicit_bits = sub () { $inline_all_explicit_bits };
+}
+
+sub bits {
+    my $bits = 0;
+    my @wrong;
+    foreach my $s (@_) {
+        if (exists $bitmask{$s}) {
+            $^H |= $explicit_bitmask{$s};
+
+            $bits |= $bitmask{$s};
+        }
+        else {
+            push @wrong, $s;
+        }
+    }
+    if (@wrong) {
+        require Carp;
+        Carp::croak("Unknown 'strict' tag(s) '@wrong'");
+    }
+    $bits;
+}
+
+sub import {
+    shift;
+    $^H |= @_ ? &bits : all_bits | all_explicit_bits;
+}
+
+sub unimport {
+    shift;
+
+    if (@_) {
+        $^H &= ~&bits;
+    }
+    else {
+        $^H &= ~all_bits;
+        $^H |= all_explicit_bits;
+    }
+}
+
+1;
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/vars.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/vars.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/vars.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/vars.pm	2020-07-29 12:55:45.000000000 +0300
@@ -0,0 +1,48 @@
+package vars;
+
+use 5.006;
+
+our $VERSION = '1.03';
+
+use warnings::register;
+use strict qw(vars subs);
+
+sub import {
+    my $callpack = caller;
+    my (undef, @imports) = @_;
+    my ($sym, $ch);
+    foreach (@imports) {
+        if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) {
+	    if ($sym =~ /\W/) {
+		# time for a more-detailed check-up
+		if ($sym =~ /^\w+[[{].*[]}]$/) {
+		    require Carp;
+		    Carp::croak("Can't declare individual elements of hash or array");
+		} elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
+		    warnings::warn("No need to declare built-in vars");
+		} elsif  (($^H &= strict::bits('vars'))) {
+		    require Carp;
+		    Carp::croak("'$_' is not a valid variable name under strict vars");
+		}
+	    }
+	    $sym = "${callpack}::$sym" unless $sym =~ /::/;
+	    *$sym =
+		(  $ch eq "\$" ? \$$sym
+		 : $ch eq "\@" ? \@$sym
+		 : $ch eq "\%" ? \%$sym
+		 : $ch eq "\*" ? \*$sym
+		 : $ch eq "\&" ? \&$sym 
+		 : do {
+		     require Carp;
+		     Carp::croak("'$_' is not a valid variable name");
+		 });
+	} else {
+	    require Carp;
+	    Carp::croak("'$_' is not a valid variable name");
+	}
+    }
+};
+
+1;
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings/register.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings/register.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings/register.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings/register.pm	2020-07-29 12:56:10.000000000 +0300
@@ -0,0 +1,29 @@
+package warnings::register;
+
+our $VERSION = '1.04';
+require warnings;
+
+# left here as cruft in case other users were using this undocumented routine
+# -- rjbs, 2010-09-08
+sub mkMask
+{
+    my ($bit) = @_;
+    my $mask = "";
+
+    vec($mask, $bit, 1) = 1;
+    return $mask;
+}
+
+sub import
+{
+    shift;
+    my @categories = @_;
+
+    my $package = (caller(0))[0];
+    warnings::register_categories($package);
+
+    warnings::register_categories($package . "::$_") for @categories;
+}
+1;
+__END__
+
diff -ruN /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings.pm /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings.pm
--- /image.org/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings.pm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/arm-linux-gnueabihf/perl5/5.26/warnings.pm	2020-07-29 12:42:38.000000000 +0300
@@ -0,0 +1,484 @@
+# -*- buffer-read-only: t -*-
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+# This file is built by regen/warnings.pl.
+# Any changes made here will be lost!
+
+package warnings;
+
+our $VERSION = "1.37";
+
+# Verify that we're called correctly so that warnings will work.
+# Can't use Carp, since Carp uses us!
+# String regexps because constant folding = smaller optree = less memory vs regexp literal
+# see also strict.pm.
+die sprintf "Incorrect use of pragma '%s' at %s line %d.\n", __PACKAGE__, +(caller)[1,2]
+    if __FILE__ !~ ( '(?x) \b     '.__PACKAGE__.'  \.pmc? \z' )
+    && __FILE__ =~ ( '(?x) \b (?i:'.__PACKAGE__.') \.pmc? \z' );
+
+our %Offsets = (
+    # Warnings Categories added in Perl 5.008
+    'all'				=> 0,
+    'closure'				=> 2,
+    'deprecated'			=> 4,
+    'exiting'				=> 6,
+    'glob'				=> 8,
+    'io'				=> 10,
+    'closed'				=> 12,
+    'exec'				=> 14,
+    'layer'				=> 16,
+    'newline'				=> 18,
+    'pipe'				=> 20,
+    'unopened'				=> 22,
+    'misc'				=> 24,
+    'numeric'				=> 26,
+    'once'				=> 28,
+    'overflow'				=> 30,
+    'pack'				=> 32,
+    'portable'				=> 34,
+    'recursion'				=> 36,
+    'redefine'				=> 38,
+    'regexp'				=> 40,
+    'severe'				=> 42,
+    'debugging'				=> 44,
+    'inplace'				=> 46,
+    'internal'				=> 48,
+    'malloc'				=> 50,
+    'signal'				=> 52,
+    'substr'				=> 54,
+    'syntax'				=> 56,
+    'ambiguous'				=> 58,
+    'bareword'				=> 60,
+    'digit'				=> 62,
+    'parenthesis'			=> 64,
+    'precedence'			=> 66,
+    'printf'				=> 68,
+    'prototype'				=> 70,
+    'qw'				=> 72,
+    'reserved'				=> 74,
+    'semicolon'				=> 76,
+    'taint'				=> 78,
+    'threads'				=> 80,
+    'uninitialized'			=> 82,
+    'unpack'				=> 84,
+    'untie'				=> 86,
+    'utf8'				=> 88,
+    'void'				=> 90,
+
+    # Warnings Categories added in Perl 5.011
+    'imprecision'			=> 92,
+    'illegalproto'			=> 94,
+
+    # Warnings Categories added in Perl 5.013
+    'non_unicode'			=> 96,
+    'nonchar'				=> 98,
+    'surrogate'				=> 100,
+
+    # Warnings Categories added in Perl 5.017
+    'experimental'			=> 102,
+    'experimental::lexical_subs'	=> 104,
+    'experimental::regex_sets'		=> 106,
+    'experimental::smartmatch'		=> 108,
+
+    # Warnings Categories added in Perl 5.019
+    'experimental::postderef'		=> 110,
+    'experimental::signatures'		=> 112,
+    'syscalls'				=> 114,
+
+    # Warnings Categories added in Perl 5.021
+    'experimental::bitwise'		=> 116,
+    'experimental::const_attr'		=> 118,
+    'experimental::re_strict'		=> 120,
+    'experimental::refaliasing'		=> 122,
+    'experimental::win32_perlio'	=> 124,
+    'locale'				=> 126,
+    'missing'				=> 128,
+    'redundant'				=> 130,
+
+    # Warnings Categories added in Perl 5.025
+    'experimental::declared_refs'	=> 132,
+);
+
+our %Bits = (
+    'all'				=> "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x15", # [0..66]
+    'ambiguous'				=> "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
+    'bareword'				=> "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
+    'closed'				=> "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
+    'closure'				=> "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
+    'debugging'				=> "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
+    'deprecated'			=> "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
+    'digit'				=> "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
+    'exec'				=> "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
+    'exiting'				=> "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
+    'experimental'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x10", # [51..56,58..62,66]
+    'experimental::bitwise'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [58]
+    'experimental::const_attr'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [59]
+    'experimental::declared_refs'	=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [66]
+    'experimental::lexical_subs'	=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [52]
+    'experimental::postderef'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [55]
+    'experimental::re_strict'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [60]
+    'experimental::refaliasing'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [61]
+    'experimental::regex_sets'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [53]
+    'experimental::signatures'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [56]
+    'experimental::smartmatch'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [54]
+    'experimental::win32_perlio'	=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [62]
+    'glob'				=> "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
+    'illegalproto'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [47]
+    'imprecision'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [46]
+    'inplace'				=> "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
+    'internal'				=> "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
+    'io'				=> "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [5..11,57]
+    'layer'				=> "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
+    'locale'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [63]
+    'malloc'				=> "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
+    'misc'				=> "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
+    'missing'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [64]
+    'newline'				=> "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
+    'non_unicode'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [48]
+    'nonchar'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [49]
+    'numeric'				=> "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
+    'once'				=> "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
+    'overflow'				=> "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
+    'pack'				=> "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
+    'parenthesis'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
+    'pipe'				=> "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
+    'portable'				=> "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
+    'precedence'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
+    'printf'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
+    'prototype'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
+    'qw'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [36]
+    'recursion'				=> "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
+    'redefine'				=> "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
+    'redundant'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [65]
+    'regexp'				=> "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
+    'reserved'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [37]
+    'semicolon'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [38]
+    'severe'				=> "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
+    'signal'				=> "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
+    'substr'				=> "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
+    'surrogate'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [50]
+    'syntax'				=> "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x40\x00\x00\x00\x00\x00", # [28..38,47]
+    'syscalls'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [57]
+    'taint'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [39]
+    'threads'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [40]
+    'uninitialized'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00", # [41]
+    'unopened'				=> "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
+    'unpack'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [42]
+    'untie'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [43]
+    'utf8'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x15\x00\x00\x00\x00", # [44,48..50]
+    'void'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [45]
+);
+
+our %DeadBits = (
+    'all'				=> "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x2a", # [0..66]
+    'ambiguous'				=> "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
+    'bareword'				=> "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
+    'closed'				=> "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
+    'closure'				=> "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
+    'debugging'				=> "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
+    'deprecated'			=> "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
+    'digit'				=> "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
+    'exec'				=> "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
+    'exiting'				=> "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
+    'experimental'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\x20", # [51..56,58..62,66]
+    'experimental::bitwise'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [58]
+    'experimental::const_attr'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [59]
+    'experimental::declared_refs'	=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [66]
+    'experimental::lexical_subs'	=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [52]
+    'experimental::postderef'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [55]
+    'experimental::re_strict'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [60]
+    'experimental::refaliasing'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [61]
+    'experimental::regex_sets'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [53]
+    'experimental::signatures'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [56]
+    'experimental::smartmatch'		=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [54]
+    'experimental::win32_perlio'	=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [62]
+    'glob'				=> "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
+    'illegalproto'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [47]
+    'imprecision'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [46]
+    'inplace'				=> "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
+    'internal'				=> "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
+    'io'				=> "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [5..11,57]
+    'layer'				=> "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
+    'locale'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [63]
+    'malloc'				=> "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
+    'misc'				=> "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
+    'missing'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [64]
+    'newline'				=> "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
+    'non_unicode'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [48]
+    'nonchar'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [49]
+    'numeric'				=> "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
+    'once'				=> "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
+    'overflow'				=> "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
+    'pack'				=> "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
+    'parenthesis'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
+    'pipe'				=> "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
+    'portable'				=> "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
+    'precedence'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
+    'printf'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
+    'prototype'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
+    'qw'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [36]
+    'recursion'				=> "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
+    'redefine'				=> "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
+    'redundant'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [65]
+    'regexp'				=> "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
+    'reserved'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [37]
+    'semicolon'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [38]
+    'severe'				=> "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
+    'signal'				=> "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
+    'substr'				=> "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
+    'surrogate'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [50]
+    'syntax'				=> "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x80\x00\x00\x00\x00\x00", # [28..38,47]
+    'syscalls'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [57]
+    'taint'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [39]
+    'threads'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [40]
+    'uninitialized'			=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00", # [41]
+    'unopened'				=> "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
+    'unpack'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [42]
+    'untie'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [43]
+    'utf8'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x2a\x00\x00\x00\x00", # [44,48..50]
+    'void'				=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [45]
+);
+
+# These are used by various things, including our own tests
+our $NONE				=  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+our $DEFAULT				=  "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x10", # [2,4,22,23,25,52..56,58..63,66]
+our $LAST_BIT				=  134 ;
+our $BYTES				=  17 ;
+
+our $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
+
+sub Croaker
+{
+    require Carp; # this initializes %CarpInternal
+    local $Carp::CarpInternal{'warnings'};
+    delete $Carp::CarpInternal{'warnings'};
+    Carp::croak(@_);
+}
+
+sub _bits {
+    my $mask = shift ;
+    my $catmask ;
+    my $fatal = 0 ;
+    my $no_fatal = 0 ;
+
+    foreach my $word ( @_ ) {
+	if ($word eq 'FATAL') {
+	    $fatal = 1;
+	    $no_fatal = 0;
+	}
+	elsif ($word eq 'NONFATAL') {
+	    $fatal = 0;
+	    $no_fatal = 1;
+	}
+	elsif ($catmask = $Bits{$word}) {
+	    $mask |= $catmask ;
+	    $mask |= $DeadBits{$word} if $fatal ;
+	    $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
+	}
+	else
+	  { Croaker("Unknown warnings category '$word'")}
+    }
+
+    return $mask ;
+}
+
+sub bits
+{
+    # called from B::Deparse.pm
+    push @_, 'all' unless @_ ;
+    return _bits(undef, @_) ;
+}
+
+sub import
+{
+    shift;
+
+    my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
+
+    if (vec($mask, $Offsets{'all'}, 1)) {
+	$mask |= $Bits{'all'} ;
+	$mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
+    }
+
+    # append 'all' when implied (after a lone "FATAL" or "NONFATAL")
+    push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
+
+    # Empty @_ is equivalent to @_ = 'all' ;
+    ${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
+}
+
+sub unimport
+{
+    shift;
+
+    my $catmask ;
+    my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
+
+    if (vec($mask, $Offsets{'all'}, 1)) {
+	$mask |= $Bits{'all'} ;
+	$mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
+    }
+
+    # append 'all' when implied (empty import list or after a lone "FATAL")
+    push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
+
+    foreach my $word ( @_ ) {
+	if ($word eq 'FATAL') {
+	    next;
+	}
+	elsif ($catmask = $Bits{$word}) {
+	    $mask &= ~($catmask | $DeadBits{$word} | $All);
+	}
+	else
+	  { Croaker("Unknown warnings category '$word'")}
+    }
+
+    ${^WARNING_BITS} = $mask ;
+}
+
+my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
+
+sub MESSAGE () { 4 };
+sub FATAL () { 2 };
+sub NORMAL () { 1 };
+
+sub __chk
+{
+    my $category ;
+    my $offset ;
+    my $isobj = 0 ;
+    my $wanted = shift;
+    my $has_message = $wanted & MESSAGE;
+
+    unless (@_ == 1 || @_ == ($has_message ? 2 : 0)) {
+	my $sub = (caller 1)[3];
+	my $syntax = $has_message ? "[category,] 'message'" : '[category]';
+	Croaker("Usage: $sub($syntax)");
+    }
+
+    my $message = pop if $has_message;
+
+    if (@_) {
+	# check the category supplied.
+	$category = shift ;
+	if (my $type = ref $category) {
+	    Croaker("not an object")
+		if exists $builtin_type{$type};
+	    $category = $type;
+	    $isobj = 1 ;
+	}
+	$offset = $Offsets{$category};
+	Croaker("Unknown warnings category '$category'")
+	    unless defined $offset;
+    }
+    else {
+	$category = (caller(1))[0] ;
+	$offset = $Offsets{$category};
+	Croaker("package '$category' not registered for warnings")
+	    unless defined $offset ;
+    }
+
+    my $i;
+
+    if ($isobj) {
+	my $pkg;
+	$i = 2;
+	while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
+	    last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
+	}
+	$i -= 2 ;
+    }
+    else {
+	$i = _error_loc(); # see where Carp will allocate the error
+    }
+
+    # Default to 0 if caller returns nothing.  Default to $DEFAULT if it
+    # explicitly returns undef.
+    my(@callers_bitmask) = (caller($i))[9] ;
+    my $callers_bitmask =
+	 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
+
+    my @results;
+    foreach my $type (FATAL, NORMAL) {
+	next unless $wanted & $type;
+
+	push @results, (vec($callers_bitmask, $offset + $type - 1, 1) ||
+			vec($callers_bitmask, $Offsets{'all'} + $type - 1, 1));
+    }
+
+    # &enabled and &fatal_enabled
+    return $results[0] unless $has_message;
+
+    # &warnif, and the category is neither enabled as warning nor as fatal
+    return if $wanted == (NORMAL | FATAL | MESSAGE)
+	&& !($results[0] || $results[1]);
+
+    require Carp;
+    Carp::croak($message) if $results[0];
+    # will always get here for &warn. will only get here for &warnif if the
+    # category is enabled
+    Carp::carp($message);
+}
+
+sub _mkMask
+{
+    my ($bit) = @_;
+    my $mask = "";
+
+    vec($mask, $bit, 1) = 1;
+    return $mask;
+}
+
+sub register_categories
+{
+    my @names = @_;
+
+    for my $name (@names) {
+	if (! defined $Bits{$name}) {
+	    $Bits{$name}     = _mkMask($LAST_BIT);
+	    vec($Bits{'all'}, $LAST_BIT, 1) = 1;
+	    $Offsets{$name}  = $LAST_BIT ++;
+	    foreach my $k (keys %Bits) {
+		vec($Bits{$k}, $LAST_BIT, 1) = 0;
+	    }
+	    $DeadBits{$name} = _mkMask($LAST_BIT);
+	    vec($DeadBits{'all'}, $LAST_BIT++, 1) = 1;
+	}
+    }
+}
+
+sub _error_loc {
+    require Carp;
+    goto &Carp::short_error_loc; # don't introduce another stack frame
+}
+
+sub enabled
+{
+    return __chk(NORMAL, @_);
+}
+
+sub fatal_enabled
+{
+    return __chk(FATAL, @_);
+}
+
+sub warn
+{
+    return __chk(FATAL | MESSAGE, @_);
+}
+
+sub warnif
+{
+    return __chk(NORMAL | FATAL | MESSAGE, @_);
+}
+
+# These are not part of any public interface, so we can delete them to save
+# space.
+delete @warnings::{qw(NORMAL FATAL MESSAGE)};
+
+1;
+__END__
+=head1 NAME
+
+warnings - Perl pragma to control optional warnings
+
+# ex: set ro:
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_alsa.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_alsa.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_amr_nb.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_amr_nb.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_amr_wb.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_amr_wb.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_ao.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_ao.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_caf.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_caf.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_fap.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_fap.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_flac.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_flac.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_gsm.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_gsm.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_lpc10.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_lpc10.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_mat4.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_mat4.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_mat5.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_mat5.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_mp3.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_mp3.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_oss.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_oss.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_paf.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_paf.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_pulseaudio.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_pulseaudio.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_pvf.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_pvf.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_sd2.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_sd2.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_sndfile.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_sndfile.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_vorbis.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_vorbis.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_w64.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_w64.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_wavpack.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_wavpack.so differ
Binary files /image.org/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_xi.so and /image/usr/lib/arm-linux-gnueabihf/sox/libsox_fmt_xi.so differ
Binary files /image.org/usr/lib/dropbear/dropbearconvert and /image/usr/lib/dropbear/dropbearconvert differ
Binary files /image.org/usr/lib/libid3tag.so.0 and /image/usr/lib/libid3tag.so.0 differ
Binary files /image.org/usr/lib/libid3tag.so.0.3.0 and /image/usr/lib/libid3tag.so.0.3.0 differ
Binary files /image.org/usr/lib/libtwolame.so.0 and /image/usr/lib/libtwolame.so.0 differ
Binary files /image.org/usr/lib/libtwolame.so.0.0.0 and /image/usr/lib/libtwolame.so.0.0.0 differ
diff -ruN /image.org/usr/lib/mime/packages/sox /image/usr/lib/mime/packages/sox
--- /image.org/usr/lib/mime/packages/sox	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/lib/mime/packages/sox	2020-03-09 16:33:02.000000000 +0300
@@ -0,0 +1,5 @@
+audio/basic; /usr/bin/play -t au %s
+audio/x-aiff; /usr/bin/play -t aiff %s
+audio/x-gsm; /usr/bin/play -t gsm %s
+audio/x-wav; /usr/bin/play -t wav %s
+
Binary files /image.org/usr/lib/openssh/sftp-server and /image/usr/lib/openssh/sftp-server differ
Binary files /image.org/usr/lib/sftp-server and /image/usr/lib/sftp-server differ
diff -ruN /image.org/usr/local/bin/phrases.sh /image/usr/local/bin/phrases.sh
--- /image.org/usr/local/bin/phrases.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/local/bin/phrases.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,76 @@
+#!/usr/bin/env bash
+
+LANG=C LC_ALL=C
+DIR='/mnt/data/random_phrases/phrases'
+
+if [ `ls $DIR | wc -l` -eq 0 ]; then
+    echo "sound directory is empty"
+    exit
+fi
+
+if [ -f "/root/bin/busybox" ]; then
+    SHUF="/root/bin/busybox shuf"
+else
+    SHUF=`which shuf`
+fi
+
+if [ -z "$SHUF" ]; then
+    echo "'shuf' not found"
+    exit 2
+fi
+
+HANDSHAKE='21310020ffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
+ID=1
+ATTEMPTS=50
+TOKEN=$(head -c 16 /mnt/data/miio/device.token | xxd -p -c 1000000)
+KEY=$(echo -n $TOKEN | xxd -r -p | md5sum | awk '{print $1}')
+IV=$(echo -n $KEY | xxd -r -p | cat - <(echo -n $TOKEN | xxd -r -p) | md5sum | awk '{print $1}')
+exec 3<>/dev/udp/127.0.0.1/54321
+while [[ (-z "$STATUS" || -z "$VOLUME") && "$ATTEMPTS" -ne 0 ]]; do
+    echo -n $HANDSHAKE | xxd -r -p >&3
+    SHEADER=$(timeout 0.1 dd bs=16 count=1 <&3 2> /dev/null | xxd -p -c 1000000)
+    if [ -z "$STATUS" ]; then
+        MESSAGE=$(echo -n '{"method":"get_status","id":'$ID'}' | openssl aes-128-cbc -e -K $KEY -iv $IV | xxd -p -c 1000000)
+        LENGTH=$(printf '%04x' $((32+${#MESSAGE}/2)))
+        HEADER=$(echo -n ${SHEADER:0:4}$LENGTH${SHEADER:8})
+        CHECKSUM=$(echo -n $HEADER$TOKEN$MESSAGE | xxd -r -p |  md5sum | awk '{print $1}')
+        HEADER=$(echo -n ${HEADER:0:32}$CHECKSUM)
+        PACKET=$HEADER$MESSAGE
+        echo -n $PACKET  | xxd -r -p >&3
+        STATUS=$(timeout 0.1 dd bs=999 count=1 <&3 2> /dev/null | xxd -p -c 1000000)
+    fi
+    if [ -z "$VOLUME" ]; then
+        ID=$((ID+1))
+        MESSAGE=$(echo -n '{"method":"get_sound_volume","id":'$ID'}' | openssl aes-128-cbc -e -K $KEY -iv $IV | xxd -p -c 1000000)
+        LENGTH=$(printf '%04x' $((32+${#MESSAGE}/2)))
+        HEADER=$(echo -n ${SHEADER:0:4}$LENGTH${SHEADER:8})
+        CHECKSUM=$(echo -n $HEADER$TOKEN$MESSAGE | xxd -r -p |  md5sum | awk '{print $1}')
+        HEADER=$(echo -n ${HEADER:0:32}$CHECKSUM)
+        PACKET=$HEADER$MESSAGE
+        echo -n $PACKET  | xxd -r -p >&3
+        VOLUME=$(timeout 0.1 dd bs=999 count=1 <&3 2> /dev/null | xxd -p -c 1000000)
+    fi
+    ID=$((ID+10))
+    ATTEMPTS=$((ATTEMPTS-1))
+    echo -n '>'
+done
+echo ''
+if [ -n "$STATUS" ]; then
+    DECRYPTED=$(echo -n ${STATUS:64} | xxd -r -p | openssl aes-128-cbc -d -K $KEY -iv $IV)
+    STATE=$(echo -n $DECRYPTED | sed 's/.*"state"\s*:\s*\([0-9]\+\).*/\1/')
+    DND=$(echo -n $DECRYPTED | sed 's/.*"dnd_enabled"\s*:\s*\([0-9]\+\).*/\1/')
+    if [[ "$DND" -eq 0 && ("$STATE" -eq 5 || "$STATE" -eq 11 || "$STATE" -eq 17 || "$STATE" -eq 18) ]]; then
+        if [ -n "${VOLUME_OVERRIDE}" ]; then
+            VOLUME="${VOLUME_OVERRIDE}"
+        elif [ -z "$VOLUME" ]; then
+            VOLUME='0.5'
+        else
+            VOLUME=$(echo -n ${VOLUME:64} | xxd -r -p | openssl aes-128-cbc -d -K $KEY -iv $IV | sed 's/.*"result"\s*:\s*\[\s*\([0-9]\+\).*/\1/')
+            VOLUME=$(printf '%03d'  $(((VOLUME - 30) * (100 - 10) / (90 - 30) + 10)) | sed 's/..$/.&/')
+        fi
+        FILE=$(ls $DIR | $SHUF -n 1)
+        echo 'Play phrase' $FILE
+        sox -v $VOLUME $DIR/$FILE -d > /dev/null 2>&1
+    fi
+fi
+exec 3>&-
diff -ruN /image.org/usr/local/bin/rrlogclean.sh /image/usr/local/bin/rrlogclean.sh
--- /image.org/usr/local/bin/rrlogclean.sh	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/local/bin/rrlogclean.sh	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+if [ -d /mnt/data/rockrobo/rrlog ]; then
+  items=/mnt/data/rockrobo/rrlog/*
+  for item in $items
+  do
+    if [ -d "$item" ]; then
+      echo "Removing directory '$item'..."
+      rm -fr "$item"
+    elif [ -f "$item" ]; then
+      if [[ "$item" == *".log" ]]; then
+        echo "Shrinking log '$item'..."
+        echo "$(tail -50 "$item")" > $item
+      else
+        echo "Removing file '$item'..."
+        rm "$item"
+      fi
+    fi
+  done
+fi
\ No newline at end of file
diff -ruN /image.org/usr/local/bin/sound_server.pl /image/usr/local/bin/sound_server.pl
--- /image.org/usr/local/bin/sound_server.pl	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/local/bin/sound_server.pl	2023-07-31 03:34:14.000000000 +0300
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+#
+# Source: https://habr.com/ru/post/435064/
+
+use strict;
+use warnings;
+use IO::Socket::INET;
+
+$| = 1;
+
+my $volume = 1.0;
+my $volume_file = "/mnt/data/sox_volume";
+if (-e $volume_file) {
+    open FILE, $volume_file;
+    $volume = <FILE>;
+    chomp $volume;
+    close FILE;
+    print "restored volume level: $volume\n";
+}
+
+my $socket = new IO::Socket::INET (
+    LocalHost => '0.0.0.0',
+    LocalPort => '7777',
+    Proto => 'tcp',
+    Listen => 2,
+    Reuse => 1
+);
+
+die "cannot create socket $!\n" unless $socket;
+print "server waiting for client connection on port 7777\n";
+
+while(1)
+{
+    my $client_socket = $socket->accept();
+    my $client_address = $client_socket->peerhost();
+    my $client_port = $client_socket->peerport();
+    # print "connection from $client_address:$client_port\n";
+    my $data = '';
+    my $playing = 'False';
+    $client_socket->recv($data, 256);
+    # print "received data: $data\n";
+    my @urls = split /;/, $data;
+    if (scalar(@urls) > 1 && not grep(/^$urls[1]$/, ('', 'None', $volume))) {
+        $volume = $urls[1];
+        open FILE, ">$volume_file";
+        print FILE $volume, "\n";
+        close FILE;
+    }
+    if ($urls[0] ne '' && $urls[0] ne 'None') {
+        system("killall -s 9 play > /dev/null 2>&1");
+        if ($urls[0] ne 'stop') {
+            system("play -q -v " . $volume * 2 . " \"$urls[0]\" &");
+        }
+    }
+    $playing = system("ps aux | grep -e '[ ]play ' >/dev/null") == 0 ? 'True' : 'False';
+    $client_socket->send("playing=$playing;volume=$volume");
+    shutdown($client_socket, 1);
+}
+
+$socket->close();
Binary files /image.org/usr/sbin/dropbear and /image/usr/sbin/dropbear differ
Binary files /image.org/usr/share/file/magic.mgc and /image/usr/share/file/magic.mgc differ
Binary files /image.org/usr/share/misc/magic.mgc and /image/usr/share/misc/magic.mgc differ
diff -ruN /image.org/usr/share/nano/asm.nanorc /image/usr/share/nano/asm.nanorc
--- /image.org/usr/share/nano/asm.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/asm.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,17 @@
+## Here is an example for assembler.
+##
+syntax "asm" "\.(S|s|asm)$"
+color red "\<[A-Z_]{2,}\>"
+color brightgreen "\.(data|subsection|text)"
+color green "\.(align|file|globl|global|hidden|section|size|type|weak)"
+color brightyellow "\.(ascii|asciz|byte|double|float|hword|int|long|short|single|struct|word)"
+icolor brightred "^[[:space:]]*[.0-9A-Z_]*:"
+color brightcyan "^[[:space:]]*#[[:space:]]*(define|undef|include|ifn?def|endif|elif|else|if|warning|error)"
+## Highlight strings (note: VERY resource intensive)
+color brightyellow "<[^= 	]*>" ""(\\.|[^"])*""
+color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*""
+## Highlight comments
+color brightblue "//.*"
+color brightblue start="/\*" end="\*/"
+## Highlight trailing whitespace
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/awk.nanorc /image/usr/share/nano/awk.nanorc
--- /image.org/usr/share/nano/awk.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/awk.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,38 @@
+## Here is an example for awk.
+##
+syntax "awk" "\.awk$"
+## records
+icolor brightred "\$[0-9A-Z_!@#$*?-]+"
+## awk-set variables
+color red "\<(ARGC|ARGIND|ARGV|BINMODE|CONVFMT|ENVIRON|ERRNO|FIELDWIDTHS)\>"
+color red "\<(FILENAME|FNR|FS|IGNORECASE|LINT|NF|NR|OFMT|OFS|ORS)\>"
+color red "\<(PROCINFO|RS|RT|RSTART|RLENGTH|SUBSEP|TEXTDOMAIN)\>"
+## function declarations and special patterns
+color brightgreen "\<(function|extension|BEGIN|END)\>"
+## operators
+color green "(\{|\}|\(|\)|\;|\]|\[|\\|<|>|!|=|&|\+|-|\*|%|/|\?:|\^|\|)"
+## flow control
+color brightyellow "\<(for|if|while|do|else|in|delete|exit)\>"
+color brightyellow "\<(break|continue|return)\>"
+## I/O statements
+color brightgreen "\<(close|getline|next|nextfile|print|printf)\>"
+color brightgreen "\<(system|fflush)\>"
+## standard functions
+color magenta "\<(atan2|cos|exp|int|log|rand|sin|sqrt|srand)\>"
+color magenta "\<(asort|asorti|gensub|gsub|index|length|match)\>"
+color magenta "\<(split|sprintf|strtonum|sub|substr|tolower|toupper)\>"
+color magenta "\<(mktime|strftime|systime)\>"
+color magenta "\<(and|compl|lshift|or|rshift|xor)\>"
+color magenta "\<(bindtextdomain|dcgettext|dcngettext)\>"
+
+##
+## String highlighting.  You will in general want your comments and
+## strings to come last, because syntax highlighting rules will be
+## applied in the order they are read in.
+color brightyellow "<[^= 	]*>" ""(\\.|[^"])*""
+
+## Comment highlighting
+color brightblue "(^|[[:space:]])#.*$"
+
+## Trailing whitespace
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/c.nanorc /image/usr/share/nano/c.nanorc
--- /image.org/usr/share/nano/c.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/c.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,30 @@
+## Here is an example for C/C++.
+##
+syntax "c" "\.(c(c|pp|xx)?|C)$" "\.(h(h|pp|xx)?|H)$" "\.ii?$"
+color brightred "\<[A-Z_][0-9A-Z_]+\>" 
+color green "\<(float|double|bool|char|int|short|long|sizeof|enum|void|auto|static|const|struct|union|typedef|extern|(un)?signed|inline)\>"
+color green "\<((s?size)|((u_?)?int(8|16|32|64|ptr)))_t\>"
+color green "\<(class|namespace|template|public|protected|private|typename|this|friend|virtual|using|mutable|volatile|register|explicit)\>"
+color brightyellow "\<(for|if|while|do|else|case|default|switch)\>"
+color brightyellow "\<(try|throw|catch|operator|new|delete)\>"
+color magenta "\<(goto|continue|break|return)\>"
+color brightcyan "^[[:space:]]*#[[:space:]]*(define|include(_next)?|(un|ifn?)def|endif|el(if|se)|if|warning|error|pragma)"
+color brightmagenta "'([^'\]|(\\["'abfnrtv\\]))'" "'\\(([0-3]?[0-7]{1,2}))'" "'\\x[0-9A-Fa-f]{1,2}'"
+##
+## GCC builtins
+color cyan "__attribute__[[:space:]]*\(\([^)]*\)\)" "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__"
+##
+## String highlighting.  You will in general want your comments and
+## strings to come last, because syntax highlighting rules will be
+## applied in the order they are read in.
+color brightyellow "<[^= 	]*>" ""(\\.|[^"])*""
+##
+## This string is VERY resource intensive!
+color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*""
+
+## Comment highlighting
+color brightblue "//.*"
+color brightblue start="/\*" end="\*/"
+
+## Trailing whitespace
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/cmake.nanorc /image/usr/share/nano/cmake.nanorc
--- /image.org/usr/share/nano/cmake.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/cmake.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,19 @@
+## CMake syntax highlighter for GNU Nano
+##
+syntax "cmake" "(CMakeLists\.txt|\.cmake)$"
+
+icolor green "^[[:space:]]*[A-Z0-9_]+"
+icolor brightyellow "^[[:space:]]*(include|include_directories|include_external_msproject)\>"
+
+icolor brightgreen "^[[:space:]]*\<((else|end)?if|else|(end)?while|(end)?foreach|break)\>"
+color brightgreen "\<(NOT|COMMAND|POLICY|TARGET|EXISTS|IS_(DIRECTORY|ABSOLUTE)|DEFINED)\>[[:space:]]"
+color brightgreen "[[:space:]]\<(OR|AND|IS_NEWER_THAN|MATCHES|(STR|VERSION_)?(LESS|GREATER|EQUAL))\>[[:space:]]"
+
+icolor brightred "^[[:space:]]*\<((end)?(function|macro)|return)"
+
+icolor cyan start="\$(\{|ENV\{)" end="\}"
+color magenta "\<(APPLE|UNIX|WIN32|CYGWIN|BORLAND|MINGW|MSVC(_IDE|60|71|80|90)?)\>"
+
+icolor brightblue "^([[:space:]]*)?#.*"
+icolor brightblue "[[:space:]]#.*"
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/css.nanorc /image/usr/share/nano/css.nanorc
--- /image.org/usr/share/nano/css.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/css.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,9 @@
+## Here is an example for css files.
+##
+syntax "css" "\.css$"
+color brightred     "."
+color brightyellow  start="\{" end="\}"
+color brightwhite   start=":" end="([;^\{]|$)"
+color brightblue    ":active|:focus|:hover|:link|:visited|:link|:after|:before|$"
+color brightblue    start="\/\*" end="\\*/"
+color green         ";|:|\{|\}"
diff -ruN /image.org/usr/share/nano/debian.nanorc /image/usr/share/nano/debian.nanorc
--- /image.org/usr/share/nano/debian.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/debian.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,20 @@
+## Here is an exmaple for apt's sources.list
+## Adapted from http://milianw.de/blog/Syntax-Highlighting-in-Nano
+## (mail@milianw.de).
+##
+syntax "apt/sources.list" "sources\.list(\.old|~)?$"
+# component
+color brightmagenta "^deb(-src)? ((http|file|ftp):/[^ ]+|cdrom:\[[^\]]+\]/|cdrom:\[[-a-zA-Z0-9\._\(\) ]+\]/) [^ ]+ .+$"
+# distribution
+color brightred "^deb(-src)? ((http|file|ftp):/[^ ]+|cdrom:\[[^\]]+\]/|cdrom:\[[-a-zA-Z0-9\._\(\) ]+\]/) [^ ]+"
+# URI
+color brightgreen "(http|file|ftp):/[^ ]+"
+# cdroms
+# [^\]] does not work...
+color brightgreen "cdrom:\[[-a-zA-Z0-9\._\(\) ]+\]/"
+# deb / deb-src
+color yellow "^deb"
+color yellow "^deb-src"
+# comments
+color brightblue "#.*"
+
diff -ruN /image.org/usr/share/nano/fortran.nanorc /image/usr/share/nano/fortran.nanorc
--- /image.org/usr/share/nano/fortran.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/fortran.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,41 @@
+## Here is an example for Fortran 90/95
+
+syntax "fortran" "\.(f|f90|f95)$" 
+
+#color red "\<[A-Z_]a[0-9A-Z_]+\>" 
+color red "\<[0-9]+\>" 
+
+icolor green "\<(action|advance|all|allocatable|allocated|any|apostrophe)\>"
+icolor green "\<(append|asis|assign|assignment|associated|character|common)\>"
+icolor green "\<(complex|data|default|delim|dimension|double precision)\>"
+icolor green "\<(elemental|epsilon|external|file|fmt|form|format|huge)\>"
+icolor green "\<(implicit|include|index|inquire|integer|intent|interface)\>"
+icolor green "\<(intrinsic|iostat|kind|logical|module|none|null|only)>"
+icolor green "\<(operator|optional|pack|parameter|pointer|position|private)\>"
+icolor green "\<(program|public|real|recl|recursive|selected_int_kind)\>"
+icolor green "\<(selected_real_kind|subroutine|status)\>"
+
+icolor cyan "\<(abs|achar|adjustl|adjustr|allocate|bit_size|call|char)\>" 
+icolor cyan "\<(close|contains|count|cpu_time|cshift|date_and_time)\>" 
+icolor cyan "\<(deallocate|digits|dot_product|eor|eoshift|function|iachar)\>" 
+icolor cyan "\<(iand|ibclr|ibits|ibset|ichar|ieor|iolength|ior|ishft|ishftc)\>" 
+icolor cyan "\<(lbound|len|len_trim|matmul|maxexponent|maxloc|maxval|merge)\>" 
+icolor cyan "\<(minexponent|minloc|minval|mvbits|namelist|nearest|nullify)\>" 
+icolor cyan "\<(open|pad|present|print|product|pure|quote|radix)\>" 
+icolor cyan "\<(random_number|random_seed|range|read|readwrite|replace)\>" 
+icolor cyan "\<(reshape|rewind|save|scan|sequence|shape|sign|size|spacing)\>" 
+icolor cyan "\<(spread|sum|system_clock|target|transfer|transpose|trim)\>" 
+icolor cyan "\<(ubound|unpack|verify|write|tiny|type|use|yes)\>"
+
+icolor yellow "\<(.and.|case|do|else|else?if|else?where|end|end?do|end?if)\>"
+icolor yellow "\<(end?select|.eqv.|forall|if|lge|lgt|lle|llt|.neqv.|.not.)\>"
+icolor yellow "\<(.or.|repeat|select case|then|where|while)\>"
+
+icolor magenta "\<(continue|cycle|exit|go?to|result|return)\>"
+
+## String highlighting.  
+icolor yellow "<[^= 	]*>" ""(\\.|[^"])*""
+
+## Comment highlighting
+icolor blue "!.*"
+
diff -ruN /image.org/usr/share/nano/gentoo.nanorc /image/usr/share/nano/gentoo.nanorc
--- /image.org/usr/share/nano/gentoo.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/gentoo.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,55 @@
+## Here is an example for Gentoo ebuilds/eclasses
+##
+syntax "ebuild" "\.e(build|class)$"
+## All the standard portage functions
+color brightgreen "^src_(unpack|prepare|configure|compile|install|test)" "^pkg_(config|nofetch|setup|(pre|post)(inst|rm))"
+## Highlight bash related syntax
+color green "\<(case|do|done|elif|else|esac|exit|fi|for|function|if|in|local|read|return|select|shift|then|time|until|while|continue|break)\>"
+color green "\<(declare|eval|exec|let)\>"
+color green "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)"
+color green "-[edfgruwxL]\>"
+color green "-(eq|ne|gt|lt|ge|le|s|n|z)\>"
+## Highlight variables ... official portage ones in red, all others in bright red
+color brightred "\$\{?[a-zA-Z_0-9]+\}?"
+color red "\<(EAPI|ARCH|HOMEPAGE|DESCRIPTION|IUSE|SRC_URI|LICENSE|SLOT|KEYWORDS|(P|R)?DEPEND|PROVIDE|PROPERTIES|RESTRICT|USERLAND)\>"
+color red "\<(S|D|T|PV|PF|P|PN|PR|PVR|A|CATEGORY|DISTDIR|FILESDIR|ROOT|WORKDIR)\>" "\<(AS|C(PP|XX)?|LD)FLAGS\>" "\<C(HOST|TARGET|BUILD)\>"
+color red "\<QA_((TEXTRELS|EXECSTACK|WX_LOAD)(_[a-zA-Z_0-9]+)?|DT_HASH|PRESTRIPPED)\>" "\<WANT_AUTO(CONF|MAKE)\>" "\<AT_M4DIR\>"
+## Highlight portage commands
+color magenta "\<use(_(with|enable))?\> [!a-zA-Z0-9_+ -]*" "inherit.*"
+color brightblue "\<e(begin|end|conf|install|make|qmake[34]|ant|(qa)?warn|infon?|error|log|patch|new(group|user))\>"
+color brightblue "\<e(pause|beep|mktemp|(cvs|svn)_clean|punt_cxx)\>" "\<e(aclocal|auto(reconf|header|conf|make))\>"
+color brightblue "\<built_with_use\>" "\<make_desktop_entry\>" "\<unpack(_(makeself|pdv))?\>"
+color brightblue "\<die\>" "\<use(_(with|enable))?\>" "\<inherit\>" "\<has\>" "\<(has|best)_version\>"
+color brightblue "\<(do|new)(ins|(games)?s?bin|doc|lib(\.so|\.a)?|man|info|exe|initd|confd|envd|pam|menu|icon)\>"
+color brightblue "\<do(python|sed|dir|hard|sym|html|jar|mo)\>" "\<keepdir\>"
+color brightblue "prepall(docs|info|man|strip)?" "prep(info|lib|lib\.(so|a)|man|strip|gamesdirs)"
+color brightblue "\<(doc|ins|exe)?into\>" "\<(f|games)(owners|perms)\>" "\<(exe|ins|dir)opts\>"
+## Highlight common commands used in ebuilds
+color blue "\<make\>" "\<(awk|cat|cd|chmod|chown|cp|echo|env|export|find|e?grep|ln|mkdir|mv|rm|sed|set|tar|touch|unset|xargs)\>"
+## Highlight comments (doesnt work that well)
+color yellow "(^|[[:space:]])#.*$"
+## Highlight strings (doesnt work that well)
+color brightyellow ""(\\.|[^\"])*"" "'(\\.|[^'])*'"
+## Trailing space is bad!
+color ,green "[[:space:]]+$"
+
+## Here is an example for Portage control files
+##
+syntax "/etc/portage" "\.(keywords|mask|unmask|use)(/.+)?$"
+## Base text:
+color green "^.+$"
+## Use flags:
+color brightred "[[:space:]]+\+?[a-zA-Z0-9_-]+"
+color brightblue "[[:space:]]+-[a-zA-Z0-9_-]+"
+## Likely version and slot numbers:
+color magenta "-[[:digit:]].*([[:space:]]|$)"
+color magenta ":[^[:space:]]+([[:space:]]|$)"
+## Accepted arches:
+color white "[~-]?\<(alpha|amd64|arm|hppa|ia64|mips|ppc|ppc64|s390|sh|sparc(-fbsd)?|x86(-fbsd)?)\>"
+color white "[[:space:]][*~-]?\*"
+## Categories:
+color cyan "^[[:space:]]*.*/"
+## Masking regulators:
+color brightmagenta "^[[:space:]]*(=|~|<|<=|=<|>|>=|=>)"
+## Comments:
+color yellow "#.*$"
diff -ruN /image.org/usr/share/nano/groff.nanorc /image/usr/share/nano/groff.nanorc
--- /image.org/usr/share/nano/groff.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/groff.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,24 @@
+## Here is an example for groff.
+##
+syntax "groff" "\.m[ems]$" "\.rof" "\.tmac$" "^tmac."
+## The argument of .ds or .nr
+color cyan "^\.(ds|nr) [^[[:space:]]]*"
+## Single character escapes
+color brightmagenta "\\."
+## Highlight the argument of \f or \s in the same color
+color brightmagenta "\\f." "\\f\(.." "\\s(\+|\-)?[0-9]"
+## Newlines
+color cyan "(\\|\\\\)n(.|\(..)"
+color cyan start="(\\|\\\\)n\[" end="]"
+## Requests
+color brightgreen "^\.[[:space:]]*[^[[:space:]]]*"
+## Comments
+color yellow "^\.\\".*$"
+## Strings
+color green "(\\|\\\\)\*(.|\(..)"
+color green start="(\\|\\\\)\*\[" end="]"
+## Characters
+color brightred "\\\(.."
+color brightred start="\\\[" end="]"
+## Macro arguments
+color brightcyan "\\\\\$[1-9]"
diff -ruN /image.org/usr/share/nano/html.nanorc /image/usr/share/nano/html.nanorc
--- /image.org/usr/share/nano/html.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/html.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,5 @@
+## Here is a short example for HTML.
+##
+syntax "html" "\.html$"
+color blue start="<" end=">"
+color red "&[^;[[:space:]]]*;"
diff -ruN /image.org/usr/share/nano/java.nanorc /image/usr/share/nano/java.nanorc
--- /image.org/usr/share/nano/java.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/java.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,12 @@
+## Here is an example for Java.
+##
+syntax "java" "\.java$"
+color green "\<(boolean|byte|char|double|float|int|long|new|short|this|transient|void)\>"
+color red "\<(break|case|catch|continue|default|do|else|finally|for|if|return|switch|throw|try|while)\>"
+color cyan "\<(abstract|class|extends|final|implements|import|instanceof|interface|native|package|private|protected|public|static|strictfp|super|synchronized|throws|volatile)\>"
+color red ""[^"]*""
+color yellow "\<(true|false|null)\>"
+color blue "//.*"
+color blue start="/\*" end="\*/"
+color brightblue start="/\*\*" end="\*/"
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/makefile.nanorc /image/usr/share/nano/makefile.nanorc
--- /image.org/usr/share/nano/makefile.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/makefile.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,8 @@
+# unattributed syntax highlighting example from wiki.linuxhelp.net/
+
+syntax "makefile" "Makefile[^/]*$"
+color red "[:=]"
+color magenta "\<(if|ifeq|else|endif)\>"
+color blue "\$+[{(][a-zA-Z0-9_-]+[})]"
+color brightblue "^[^ 	]+:"
+color green "#.*$"
diff -ruN /image.org/usr/share/nano/man.nanorc /image/usr/share/nano/man.nanorc
--- /image.org/usr/share/nano/man.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/man.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,9 @@
+## Here is an example for manpages.
+##
+syntax "man" "\.[1-9]x?$"
+color green "\.(S|T)H.*$"
+color brightgreen "\.(S|T)H" "\.TP"
+color brightred "\.(BR?|I[PR]?).*$"
+color brightblue "\.(BR?|I[PR]?|PP)"
+color brightwhite "\\f[BIPR]"
+color yellow "\.(br|DS|RS|RE|PD)"
diff -ruN /image.org/usr/share/nano/mgp.nanorc /image/usr/share/nano/mgp.nanorc
--- /image.org/usr/share/nano/mgp.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/mgp.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,8 @@
+## Here is an example for Magicpoint presentations
+##
+syntax "mgp" "\.mgp$"
+header "^%include.*"
+icolor green "^%[a-z].*$"
+color cyan "(^|[[:space:]])#.*$"
+color cyan "(^|[[:space:]])%%.*$"
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/mutt.nanorc /image/usr/share/nano/mutt.nanorc
--- /image.org/usr/share/nano/mutt.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/mutt.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,4 @@
+## Here is an example for quoted emails (under e.g. mutt).
+##
+syntax "mutt"
+color green "^>.*"
diff -ruN /image.org/usr/share/nano/nano-menu.xpm /image/usr/share/nano/nano-menu.xpm
--- /image.org/usr/share/nano/nano-menu.xpm	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/nano-menu.xpm	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,279 @@
+/* XPM */
+static char * nano_menu_xpm[] = {
+"32 32 244 2",
+"  	c None",
+". 	c #E5E5E5",
+"+ 	c #AAE8E8",
+"@ 	c #A4E8E8",
+"# 	c #9BDADA",
+"$ 	c #AEAEAE",
+"% 	c #98E8E8",
+"& 	c #D5D5D5",
+"* 	c #8ECDCD",
+"= 	c #8AA9A9",
+"- 	c #97D6D6",
+"; 	c #DFDFDF",
+"> 	c #77E2E2",
+", 	c #D3D3D3",
+"' 	c #85C4C4",
+") 	c #6C8B8B",
+"! 	c #505050",
+"~ 	c #112B2B",
+"{ 	c #060606",
+"] 	c #070707",
+"^ 	c #BCBCBC",
+"/ 	c #85F0F0",
+"( 	c #DCDCDC",
+"_ 	c #6CAAAA",
+": 	c #515151",
+"< 	c #121212",
+"[ 	c #535353",
+"} 	c #A3E2E2",
+"| 	c #B3BABA",
+"1 	c #3E3E3E",
+"2 	c #0F0F0F",
+"3 	c #010101",
+"4 	c #0C0C0C",
+"5 	c #0E0E0E",
+"6 	c #181818",
+"7 	c #A8E6E6",
+"8 	c #D0E7E7",
+"9 	c #AEECEC",
+"0 	c #9E9E9E",
+"a 	c #424242",
+"b 	c #131313",
+"c 	c #141414",
+"d 	c #365555",
+"e 	c #E3E3E3",
+"f 	c #A0B8B8",
+"g 	c #222222",
+"h 	c #101010",
+"i 	c #080808",
+"j 	c #2D4C4C",
+"k 	c #D7E7E7",
+"l 	c #A3D4D4",
+"m 	c #5D5D5D",
+"n 	c #282828",
+"o 	c #212121",
+"p 	c #2D2D2D",
+"q 	c #323232",
+"r 	c #252525",
+"s 	c #1B1B1B",
+"t 	c #1C1C1C",
+"u 	c #232323",
+"v 	c #292929",
+"w 	c #A2C1C1",
+"x 	c #89EFEF",
+"y 	c #ECECEC",
+"z 	c #8FD3D3",
+"A 	c #A1B3B3",
+"B 	c #686868",
+"C 	c #747474",
+"D 	c #7FB7B7",
+"E 	c #494949",
+"F 	c #3C3C3C",
+"G 	c #5B6D6D",
+"H 	c #B8B8B8",
+"I 	c #93DCDC",
+"J 	c #A4ECEC",
+"K 	c #BECFCF",
+"L 	c #696969",
+"M 	c #2E2E2E",
+"N 	c #333333",
+"O 	c #353535",
+"P 	c #3B3B3B",
+"Q 	c #93B2B2",
+"R 	c #C5E9E9",
+"S 	c #56F5F5",
+"T 	c #828282",
+"U 	c #262626",
+"V 	c #525252",
+"W 	c #344A4A",
+"X 	c #6C6C6C",
+"Y 	c #84C3C3",
+"Z 	c #B5EAEA",
+"` 	c #A1EDED",
+" .	c #CBDEDE",
+"..	c #3D3D3D",
+"+.	c #484848",
+"@.	c #4C4C4C",
+"#.	c #B6B6B6",
+"$.	c #94EEEE",
+"%.	c #CEE8E8",
+"&.	c #2F2F2F",
+"*.	c #799898",
+"=.	c #9EE3E3",
+"-.	c #BEE9E9",
+";.	c #5D6868",
+">.	c #4E4E4E",
+",.	c #555555",
+"'.	c #606060",
+").	c #A2E1E1",
+"!.	c #C0E9E9",
+"~.	c #343434",
+"{.	c #A3A3A3",
+"].	c #A7ECEC",
+"^.	c #507070",
+"/.	c #5B5B5B",
+"(.	c #626262",
+"_.	c #587777",
+":.	c #E1E1E1",
+"<.	c #D1D1D1",
+"[.	c #1D1D1D",
+"}.	c #393939",
+"|.	c #6B6B6B",
+"1.	c #AFEEEE",
+"2.	c #E0E0E0",
+"3.	c #495D5D",
+"4.	c #666666",
+"5.	c #749393",
+"6.	c #AAAAAA",
+"7.	c #191919",
+"8.	c #6B8B8B",
+"9.	c #EBEBEB",
+"0.	c #90CFCF",
+"a.	c #5A5A5A",
+"b.	c #A8A8A8",
+"c.	c #B1EBEB",
+"d.	c #74F2F2",
+"e.	c #808080",
+"f.	c #303030",
+"g.	c #88A7A7",
+"h.	c #B0EBEB",
+"i.	c #89A6A6",
+"j.	c #636363",
+"k.	c #9CBBBB",
+"l.	c #4C7D7D",
+"m.	c #404040",
+"n.	c #3D5C5C",
+"o.	c #C9E8E8",
+"p.	c #202020",
+"q.	c #363636",
+"r.	c #BBDCDC",
+"s.	c #E2E2E2",
+"t.	c #364646",
+"u.	c #436363",
+"v.	c #C7E8E8",
+"w.	c #CECECE",
+"x.	c #0D0D0D",
+"y.	c #324444",
+"z.	c #CEECEC",
+"A.	c #8FCECE",
+"B.	c #2C2C2C",
+"C.	c #7A7A7A",
+"D.	c #C6E8E8",
+"E.	c #9D9D9D",
+"F.	c #090909",
+"G.	c #596767",
+"H.	c #C1EDED",
+"I.	c #799E9E",
+"J.	c #87A6A6",
+"K.	c #A2EDED",
+"L.	c #707070",
+"M.	c #2A2A2A",
+"N.	c #878787",
+"O.	c #B7EAEA",
+"P.	c #526C6C",
+"Q.	c #C2C2C2",
+"R.	c #364A4A",
+"S.	c #8CABAB",
+"T.	c #9BEDED",
+"U.	c #ADEBEB",
+"V.	c #242424",
+"W.	c #273B3B",
+"X.	c #0F1919",
+"Y.	c #111111",
+"Z.	c #CCCCCC",
+"`.	c #B8CECE",
+" +	c #355F5F",
+".+	c #AAC0C0",
+"++	c #1E1E1E",
+"@+	c #2A4040",
+"#+	c #BBE8E8",
+"$+	c #71A7A7",
+"%+	c #649C9C",
+"&+	c #555E5E",
+"*+	c #D2E7E7",
+"=+	c #637575",
+"-+	c #2B2B2B",
+";+	c #89A0A0",
+">+	c #5E6D6D",
+",+	c #7B7B7B",
+"'+	c #8DEFEF",
+")+	c #374F4F",
+"!+	c #7CA3A3",
+"~+	c #294242",
+"{+	c #88A1A1",
+"]+	c #CCE8E8",
+"^+	c #303737",
+"/+	c #526B6B",
+"(+	c #AAE0E0",
+"_+	c #9EEDED",
+":+	c #DDDDDD",
+"<+	c #0B1111",
+"[+	c #97BDBD",
+"}+	c #DAE6E6",
+"|+	c #284242",
+"1+	c #414747",
+"2+	c #6B7777",
+"3+	c #87A2A2",
+"4+	c #89B0B0",
+"5+	c #7B9595",
+"6+	c #A4A4A4",
+"7+	c #B4BDBD",
+"8+	c #1F1F1F",
+"9+	c #ACE2E2",
+"0+	c #648484",
+"a+	c #747979",
+"b+	c #7A7F7F",
+"c+	c #979C9C",
+"d+	c #676767",
+"e+	c #737373",
+"f+	c #757575",
+"g+	c #629B9B",
+"h+	c #DCE6E6",
+"i+	c #DEE2E2",
+"j+	c #949494",
+"k+	c #646464",
+"l+	c #395555",
+"m+	c #8E8E8E",
+"n+	c #B3B3B3",
+"o+	c #ABE4E4",
+"p+	c #98E9E9",
+"q+	c #7CF1F1",
+"r+	c #DCE7E7",
+"s+	c #A9E6E6",
+"t+	c #9BE7E7",
+"u+	c #79EEEE",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"                . + @ # $             % & * = - ;               ",
+"          > , ' ) ! ~ { ] ^     / ( _ : < ] < < [ }             ",
+"        | 1 2 3 3 { 4 5 6 7 8 9 0 a 2 5 b c 5 c c d e           ",
+"        f g c h i 4 c c j k l m n o p q r s s t u v w           ",
+"        x y z A B c s o C D E F G H I J K L M N O P Q R         ",
+"              S T s U M V W X Y Z       `  .P ..+.@.#.$.        ",
+"              %.m U &...! *.=..           -.;.>.,.'.).          ",
+"              !.~.U O >.{.].              . ^./.(._.:.          ",
+"              <.[.&.}.|.1.                2.3.'.4.5.%.          ",
+"              6.7.p }.8.9.                0.[ a.4.b.c.          ",
+"            d.e.7.f.}.g.h.              . i.! V j.k.h.          ",
+"            R [ 7.U }.H                 . l.m.E n.(             ",
+"            o.p.7.U q.r.                s.t.N F u.v.            ",
+"            w.x.7.U y.z.                A.B.N N C.D.            ",
+"            E.F.7.U G.H.              . I.u v p J.K.            ",
+"          . L.4 7.M.N.O.              . P.t p.p Q.              ",
+"          ].R.4 7.p S.T.              U.1 7.V.W.e               ",
+"          . X.Y.7.N Z.                `.[.7.g  +.               ",
+"          .+x.b ++@+#+              . $+s ++p.T $.              ",
+"        . %+i 7.p.&+*+              . =+7.p.-+;+R               ",
+"        . >+4 7.-+,+'+              U.)+7.p.n !+.               ",
+"        . ~+< 7.p {+]+              O.^+7.p.q /+(+. _+. :+      ",
+"        Z <+b 7.}.[+                }+|+7.U N 1+2+3+4+5+6+      ",
+"        7+4 x.8+N 9+                . 0+7.U N @.4.a+b+c+w       ",
+"        ^ d+e+f+g+h+                  i+j+k+l+L m+n+o+p+        ",
+"          q+q+. r+                      q+s.s+t+u+.             ",
+"                                                                ",
+"                                                                "};
diff -ruN /image.org/usr/share/nano/nanorc.nanorc /image/usr/share/nano/nanorc.nanorc
--- /image.org/usr/share/nano/nanorc.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/nanorc.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,16 @@
+## Here is an example for nanorc files.
+##
+syntax "nanorc" "\.?nanorc$"
+## Possible errors and parameters
+icolor brightwhite "^[[:space:]]*((un)?set|include|syntax|i?color).*$"
+## Keywords
+icolor brightgreen "^[[:space:]]*(set|unset)[[:space:]]+(allow_insecure_backup|autoindent|backup|backupdir|backwards|boldtext|brackets|casesensitive|const|cut|fill|historylog|matchbrackets|morespace|mouse|multibuffer|noconvert|nofollow|nohelp|nonewlines|nowrap|operatingdir|preserve|punct)\>" "^[[:space:]]*(set|unset)[[:space:]]+(quickblank|quotestr|rebinddelete|rebindkeypad|regexp|smarthome|smooth|softwrap|speller|suspend|suspendenable|tabsize|tabstospaces|tempfile|undo|view|whitespace|wordbounds)\>"
+icolor green "^[[:space:]]*(set|unset|include|syntax|header)\>"
+## Colors
+icolor yellow "^[[:space:]]*i?color[[:space:]]*(bright)?(white|black|red|blue|green|yellow|magenta|cyan)?(,(white|black|red|blue|green|yellow|magenta|cyan))?\>"
+icolor magenta "^[[:space:]]*i?color\>" "\<(start|end)="
+## Strings
+icolor white ""(\\.|[^"])*""
+## Comments
+icolor brightblue "^[[:space:]]*#.*$"
+icolor cyan "^[[:space:]]*##.*$"
diff -ruN /image.org/usr/share/nano/objc.nanorc /image/usr/share/nano/objc.nanorc
--- /image.org/usr/share/nano/objc.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/objc.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,41 @@
+## Here is an example for C/C++/Obj-C.
+##
+syntax "m" "\.m$"
+
+
+## Stuffs
+color brightwhite "\<[A-Z_][0-9A-Z_]+\>" 
+color green "\<(float|double|BOOL|bool|char|int|short|long|id|sizeof|enum|void|static|const|struct|union|typedef|extern|(un)?signed|inline)\>"
+color green "\<[[:alpha:]_][[:alnum:]_]*_t\>"
+color green "\<(class|namespace|template|public|protected|private|typename|this|friend|virtual|using|mutable|volatile|register|explicit)\>"
+color brightgreen "\<(for|if|while|do|else|case|default|switch)\>"
+color brightgreen "\<(try|throw|catch|operator|new|delete)\>"
+color brightgreen "\<(goto|continue|break|return)\>"
+color brightgreen "@\<(en(code|d)|i(mplementation|nterface)|selector)\>"
+##
+## GCC builtins
+color cyan "__attribute__[[:space:]]*\(\([^)]*\)\)" "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__"
+
+## Selector/method
+color brightmagenta "(^|[[:space:]])\[.*[[:space:]].*\]"
+color white ":[[:alnum:]]*"
+color magenta "[[:alnum:]]*:"
+color white "\[[^][:space:]]*\]"
+
+##
+## String highlighting.  You will in general want your comments and
+## strings to come last, because syntax highlighting rules will be
+## applied in the order they are read in.
+color brightblack "'([^'\]|(\\["'abfnrtv\\]))'" "'\\(([0-3]?[0-7]{1,2}))'" "'\\x[0-9A-Fa-f]{1,2}'"
+color brightblack "<[^= 	]*>" ""(\\.|[^"])*""
+color brightblue "@"(\\.|[^"])*""
+##
+## This string is VERY resource intensive!
+## color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*""
+
+color brightblue "^[[:space:]]*#[[:space:]]*(define|include|import|(un|ifn?)def|endif|el(if|se)|if|warning|error)"
+
+## Comment highlighting
+color yellow "//.*"
+color yellow start="/\*" end="\*/"
+
diff -ruN /image.org/usr/share/nano/ocaml.nanorc /image/usr/share/nano/ocaml.nanorc
--- /image.org/usr/share/nano/ocaml.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/ocaml.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,27 @@
+# OCaml sample nanorc
+#
+syntax "ocaml" "\.mli?$"
+#uid
+color red "\<[A-Z][0-9a-z_]{2,}\>"
+#declarations
+color green "\<(let|val|method|in|and|rec|private|virtual|constraint)\>"
+#structure items
+color red "\<(type|open|class|module|exception|external)\>"
+#patterns
+color blue "\<(fun|function|functor|match|try|with)\>"
+#patterns-modifiers
+color yellow "\<(as|when|of)\>" 
+#conditions
+color cyan "\<(if|then|else)\>"
+#blocs
+color magenta "\<(begin|end|object|struct|sig|for|while|do|done|to|downto)\>"
+#constantes
+color green "\<(true|false)\>"
+#modules/classes
+color green "\<(include|inherit|initializer)\>"
+#expr modifiers
+color yellow "\<(new|ref|mutable|lazy|assert|raise)\>"
+#comments
+color white start="\(\*" end="\*\)"
+#strings (no multiline handling yet)
+color brightblack ""[^\"]*""
diff -ruN /image.org/usr/share/nano/patch.nanorc /image/usr/share/nano/patch.nanorc
--- /image.org/usr/share/nano/patch.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/patch.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,10 @@
+## Here is an example for patch files.
+##
+syntax "patch" "\.(patch|diff)$"
+color brightgreen "^\+.*"
+color green "^\+\+\+.*"
+color brightblue "^ .*"
+color brightred "^-.*"
+color red "^---.*"
+color brightyellow "^@@.*"
+color magenta "^diff.*"
diff -ruN /image.org/usr/share/nano/perl.nanorc /image/usr/share/nano/perl.nanorc
--- /image.org/usr/share/nano/perl.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/perl.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,12 @@
+## Here is an example for Perl.
+##
+syntax "perl" "\.p[lm]$"
+header "^#!.*/perl[-0-9._]*"
+color red "\<(accept|alarm|atan2|bin(d|mode)|c(aller|h(dir|mod|op|own|root)|lose(dir)?|onnect|os|rypt)|d(bm(close|open)|efined|elete|ie|o|ump)|e(ach|of|val|x(ec|ists|it|p))|f(cntl|ileno|lock|ork))\>" "\<(get(c|login|peername|pgrp|ppid|priority|pwnam|(host|net|proto|serv)byname|pwuid|grgid|(host|net)byaddr|protobynumber|servbyport)|([gs]et|end)(pw|gr|host|net|proto|serv)ent|getsock(name|opt)|gmtime|goto|grep|hex|index|int|ioctl|join)\>" "\<(keys|kill|last|length|link|listen|local(time)?|log|lstat|m|mkdir|msg(ctl|get|snd|rcv)|next|oct|open(dir)?|ord|pack|pipe|pop|printf?|push|q|qq|qx|rand|re(ad(dir|link)?|cv|do|name|quire|set|turn|verse|winddir)|rindex|rmdir|s|scalar|seek(dir)?)\>" "\<(se(lect|mctl|mget|mop|nd|tpgrp|tpriority|tsockopt)|shift|shm(ctl|get|read|write)|shutdown|sin|sleep|socket(pair)?|sort|spli(ce|t)|sprintf|sqrt|srand|stat|study|substr|symlink|sys(call|read|tem|write)|tell(dir)?|time|tr(y)?|truncate|umask)\>" "\<(un(def|link|pack|shift)|utime|values|vec|wait(pid)?|wantarray|warn|write)\>"
+color magenta "\<(continue|else|elsif|do|for|foreach|if|unless|until|while|eq|ne|lt|gt|le|ge|cmp|x|my|sub|use|package|can|isa)\>"
+icolor cyan start="[$@%]" end="( |[^0-9A-Z_]|-)"
+color yellow "".*"|qq\|.*\|"
+color white "[sm]/.*/"
+color white start="(^use| = new)" end=";"
+color green "#.*"
+color yellow start="<< 'STOP'" end="STOP"
diff -ruN /image.org/usr/share/nano/php.nanorc /image/usr/share/nano/php.nanorc
--- /image.org/usr/share/nano/php.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/php.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,30 @@
+## Here is an example for PHP
+##
+syntax "php" "\.php[2345s~]?$"
+
+## php markings
+color brightgreen "(<\?(php)?|\?>)"
+
+## functions
+color white "\<[a-z_]*\("
+
+## types
+color green "\<(var|float|global|double|bool|char|int|enum|const)\>"
+
+## structure
+color brightyellow "\<(class|new|private|public|function|for|foreach|if|while|do|else|elseif|case|default|switch)\>"
+
+## control flow
+color magenta "\<(goto|continue|break|return)\>"
+
+## strings
+color brightyellow "<[^=       ]*>" ""(\.|[^"])*""
+
+## comments
+color brightblue "//.*"
+color brightblue start="/\*" end="\*/"
+#color blue start="<" end=">"
+#color red "&[^;[[:space:]]]*;"
+
+## Trailing whitespace
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/pov.nanorc /image/usr/share/nano/pov.nanorc
--- /image.org/usr/share/nano/pov.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/pov.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,15 @@
+## Here is an example for POV-Ray.
+##
+syntax "pov" "\.(pov|POV|povray|POVRAY)$"
+color brightcyan "^[[:space:]]*#[[:space:]]*(declare)"
+color brightyellow "\<(sphere|cylinder|translate|matrix|rotate|scale)\>"
+color brightyellow "\<(orthographic|location|up|right|direction|clipped_by)\>"
+color brightyellow "\<(fog_type|fog_offset|fog_alt|rgb|distance|transform)\>"
+color brightred "^\<(texture)\>"
+color brightred "\<(light_source|background)\>"
+color brightred "\<(fog|object|camera)\>"
+color green "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)"
+color brightmagenta "\<(union|group|subgroup)\>"
+## Comment highlighting
+color brightblue "//.*"
+color brightblue start="/\*" end="\*/"
diff -ruN /image.org/usr/share/nano/python.nanorc /image/usr/share/nano/python.nanorc
--- /image.org/usr/share/nano/python.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/python.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,10 @@
+## Here is an example for Python.
+##
+syntax "python" "\.py$"
+header "^#!.*/python[-0-9._]*"
+icolor brightblue "def [0-9A-Z_]+"
+color brightcyan "\<(and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield)\>"
+color brightgreen "['][^']*[^\\][']" "[']{3}.*[^\\][']{3}"
+color brightgreen "["][^"]*[^\\]["]" "["]{3}.*[^\\]["]{3}"
+color brightgreen start=""""[^"]" end=""""" start="'''[^']" end="'''"
+color brightred "#.*$"
diff -ruN /image.org/usr/share/nano/ruby.nanorc /image/usr/share/nano/ruby.nanorc
--- /image.org/usr/share/nano/ruby.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/ruby.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,31 @@
+## Here is an example for Ruby.
+##
+syntax "ruby" "\.rb$"
+header "^#!.*/ruby[-0-9._]*"
+## Asciibetical list of reserved words
+color yellow "\<(BEGIN|END|alias|and|begin|break|case|class|def|defined\?|do|else|elsif|end|ensure|false|for|if|in|module|next|nil|not|or|redo|rescue|retry|return|self|super|then|true|undef|unless|until|when|while|yield)\>"
+## Constants
+color brightblue "(\$|@|@@)?\<[A-Z]+[0-9A-Z_a-z]*"
+## Ruby "symbols"
+icolor magenta "([ 	]|^):[0-9A-Z_]+\>"
+## Some unique things we want to stand out
+color brightyellow "\<(__FILE__|__LINE__)\>"
+## Regular expressions
+color brightmagenta "/([^/]|(\\/))*/[iomx]*" "%r\{([^}]|(\\}))*\}[iomx]*"
+## Shell command expansion is in `backticks` or like %x{this}.  These are
+## "double-quotish" (to use a perlism).
+color brightblue "`[^`]*`" "%x\{[^}]*\}"
+## Strings, double-quoted
+color green ""([^"]|(\\"))*"" "%[QW]?\{[^}]*\}" "%[QW]?\([^)]*\)" "%[QW]?<[^>]*>" "%[QW]?\[[^]]*\]" "%[QW]?\$[^$]*\$" "%[QW]?\^[^^]*\^" "%[QW]?![^!]*!"
+## Expression substitution.  These go inside double-quoted strings,
+## "like #{this}".
+color brightgreen "#\{[^}]*\}"
+## Strings, single-quoted
+color green "'([^']|(\\'))*'" "%[qw]\{[^}]*\}" "%[qw]\([^)]*\)" "%[qw]<[^>]*>" "%[qw]\[[^]]*\]" "%[qw]\$[^$]*\$" "%[qw]\^[^^]*\^" "%[qw]![^!]*!"
+## Comments
+color cyan "#[^{].*$" "#$"
+color brightcyan "##[^{].*$" "##$"
+## "Here" docs
+color green start="<<-?'?EOT'?" end="^EOT"
+## Some common markers
+color brightcyan "(XXX|TODO|FIXME|\?\?\?)"
diff -ruN /image.org/usr/share/nano/sh.nanorc /image/usr/share/nano/sh.nanorc
--- /image.org/usr/share/nano/sh.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/sh.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,14 @@
+## Here is an example for Bourne shell scripts.
+##
+syntax "sh" "\.sh$"
+header "^#!.*/(ba|k|pdk)?sh[-0-9_]*"
+icolor brightgreen "^[0-9A-Z_]+\(\)"
+color green "\<(case|do|done|elif|else|esac|exit|fi|for|function|if|in|local|read|return|select|shift|then|time|until|while)\>"
+color green "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)"
+color green "-[Ldefgruwx]\>"
+color green "-(eq|ne|gt|lt|ge|le|s|n|z)\>"
+color brightblue "\<(cat|cd|chmod|chown|cp|echo|env|export|grep|install|let|ln|make|mkdir|mv|rm|sed|set|tar|touch|umask|unset)\>"
+icolor brightred "\$\{?[0-9A-Z_!@#$*?-]+\}?"
+color cyan "(^|[[:space:]])#.*$"
+color brightyellow ""(\\.|[^"])*"" "'(\\.|[^'])*'"
+color ,green "[[:space:]]+$"
diff -ruN /image.org/usr/share/nano/tcl.nanorc /image/usr/share/nano/tcl.nanorc
--- /image.org/usr/share/nano/tcl.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/tcl.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,16 @@
+syntax "tcl" "\.tcl$"
+
+## Standard Tcl [info commands]
+color green "\<(after|append|array|auto_execok|auto_import|auto_load|auto_load_index|auto_qualify|binary|break|case|catch|cd|clock|close|concat|continue|encoding|eof|error|eval|exec|exit|expr|fblocked|fconfigure|fcopy|file|fileevent|flush|for|foreach|format|gets|glob|global|history|if|incr|info|interp|join|lappend|lindex|linsert|list|llength|load|lrange|lreplace|lsearch|lset|lsort|namespace|open|package|pid|puts|pwd|read|regexp|regsub|rename|return|scan|seek|set|socket|source|split|string|subst|switch|tclLog|tell|time|trace|unknown|unset|update|uplevel|upvar|variable|vwait|while)\>"
+## Basic Tcl sub commands.
+color green "\<(array anymore|array donesearch|array exists|array get|array names|array nextelement|array set|array size|array startsearch|array statistics|array unset)\>"
+color green "\<(string bytelength|string compare|string equal|string first|string index|string is|string last|string length|string map|string match|string range|string repeat|string replace|string to|string tolower|string totitle|string toupper|string trim|string trimleft|string trimright|string will|string wordend|string wordstart)\>"
+## Extended TclX [info commands]
+color green "\<(alarm|auto_load_pkg|bsearch|catclose|catgets|catopen|ccollate|cconcat|cequal|chgrp|chmod|chown|chroot|cindex|clength|cmdtrace|commandloop|crange|csubstr|ctoken|ctype|dup|echo|execl|fcntl|flock|fork|fstat|ftruncate|funlock|host_info|id|infox|keyldel|keylget|keylkeys|keylset|kill|lassign|lcontain|lempty|lgets|link|lmatch|loadlibindex|loop|lvarcat|lvarpop|lvarpush|max|min|nice|pipe|profile|random|readdir|replicate|scancontext|scanfile|scanmatch|select|server_accept|server_create|signal|sleep|sync|system|tclx_findinit|tclx_fork|tclx_load_tndxs|tclx_sleep|tclx_system|tclx_wait|times|translit|try_eval|umask|wait)\>"
+## Syntax.
+color brightblue "proc[[:space:]]" "(\{|\})"
+color green "(\(|\)|\;|`|\\|\$|<|>|!|=|&|\|)"
+color brightyellow ""(\\.|[^"])*"" "'(\\.|[^'])*'"
+icolor brightred "\$\{?[0-9A-Z_!@#$*?-]+\}?"
+color ,green "[[:space:]]+$"
+color ,magenta "^[[:space:]]*#.*"
diff -ruN /image.org/usr/share/nano/tex.nanorc /image/usr/share/nano/tex.nanorc
--- /image.org/usr/share/nano/tex.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/tex.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,6 @@
+## Here is a short example for TeX files.
+##
+syntax "tex" "\.tex$"
+icolor green "\\.|\\[A-Z]*"
+color magenta "[{}]"
+color blue "(^|[^\])%.*"
diff -ruN /image.org/usr/share/nano/xml.nanorc /image/usr/share/nano/xml.nanorc
--- /image.org/usr/share/nano/xml.nanorc	1970-01-01 03:00:00.000000000 +0300
+++ /image/usr/share/nano/xml.nanorc	2020-01-02 12:32:18.000000000 +0300
@@ -0,0 +1,9 @@
+## Here is an example for xml files.
+##
+syntax "xml" "\.([jrs]html?|sgml?|xml|xslt?)$"
+color green  start="<" end=">"
+color cyan   "<[^> ]+"
+color cyan   ">"
+color yellow start="<!DOCTYPE" end="[/]?>"
+color yellow start="<!--" end="-->"
+color red    "&[^;]*;"
