<86>May 4 02:19:54 userdel[3489540]: delete user 'rooter' <86>May 4 02:19:54 userdel[3489540]: removed group 'rooter' owned by 'rooter' <86>May 4 02:19:54 userdel[3489540]: removed shadow group 'rooter' owned by 'rooter' <86>May 4 02:19:54 groupadd[3489602]: group added to /etc/group: name=rooter, GID=1847 <86>May 4 02:19:54 groupadd[3489602]: group added to /etc/gshadow: name=rooter <86>May 4 02:19:54 groupadd[3489602]: new group: name=rooter, GID=1847 <86>May 4 02:19:54 useradd[3489662]: new user: name=rooter, UID=1847, GID=1847, home=/root, shell=/bin/bash, from=none <86>May 4 02:19:54 userdel[3489738]: delete user 'builder' <86>May 4 02:19:54 userdel[3489738]: removed group 'builder' owned by 'builder' <86>May 4 02:19:54 userdel[3489738]: removed shadow group 'builder' owned by 'builder' <86>May 4 02:19:54 groupadd[3489792]: group added to /etc/group: name=builder, GID=1848 <86>May 4 02:19:54 groupadd[3489792]: group added to /etc/gshadow: name=builder <86>May 4 02:19:54 groupadd[3489792]: new group: name=builder, GID=1848 <86>May 4 02:19:54 useradd[3489837]: new user: name=builder, UID=1848, GID=1848, home=/usr/src, shell=/bin/bash, from=none /usr/src/in/srpm/splitvt-1.6.6_6-alt1.qa1.src.rpm: The use of such a license name is ambiguous: GPL <13>May 4 02:19:58 rpmi: libncurses6-6.3.20220618-alt4 sisyphus+327286.4600.14.1 1711486705 installed <13>May 4 02:19:58 rpmi: libtinfo-devel-6.3.20220618-alt4 sisyphus+327286.4600.14.1 1711486705 installed <13>May 4 02:19:58 rpmi: libncurses-devel-6.3.20220618-alt4 sisyphus+327286.4600.14.1 1711486705 installed Building target platforms: x86_64 Building for target x86_64 Wrote: /usr/src/in/nosrpm/splitvt-1.6.6_6-alt1.qa1.nosrc.rpm (w1.gzdio) Installing splitvt-1.6.6_6-alt1.qa1.src.rpm Building target platforms: x86_64 Building for target x86_64 Executing(%prep): /bin/sh -e /usr/src/tmp/rpm-tmp.60829 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + rm -rf splitvt-1.6.6_6 + echo 'Source #0 (splitvt-1.6.6_6.tar.bz2):' Source #0 (splitvt-1.6.6_6.tar.bz2): + /bin/bzip2 -dc /usr/src/RPM/SOURCES/splitvt-1.6.6_6.tar.bz2 + /bin/tar -xf - + cd splitvt-1.6.6_6 + /bin/chmod -c -Rf u+rwX,go-w . + exit 0 Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.60829 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd splitvt-1.6.6_6 + ./configure Making configuration... config.c:32:1: warning: return type defaults to 'int' [-Wimplicit-int] 32 | main(argc, argv) | ^~~~ config.c: In function 'main': config.c:116:14: warning: implicit declaration of function 'grep' [-Wimplicit-function-declaration] 116 | if ( grep(INCLUDE, "utmp.h", "ut_host") ) { | ^~~~ config.c:176:15: warning: implicit declaration of function 'access' [-Wimplicit-function-declaration] 176 | if ( (access("/var/run/utmp", (R_OK|W_OK)) == 0) && getuid() ) | ^~~~~~ config.c:176:61: warning: implicit declaration of function 'getuid' [-Wimplicit-function-declaration] 176 | if ( (access("/var/run/utmp", (R_OK|W_OK)) == 0) && getuid() ) | ^~~~~~ Aha! You are running Linux! Congratulations on the choice of a GNU generation. Your utmp file uses the host field. I will use termio tty structures. I will use your sockets definition header. I will use wait4() instead of waitpid(). If installed set-uid root, this program will put entries for its windows in /var/run/utmp, and will also change ownership of the ttys it acquires to the user running this program. Done. Type 'make' to build + make make: Entering directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o splitvt.o splitvt.c splitvt.c: In function 'main': splitvt.c:451:57: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 451 | write(thisfd, selection, strlen(selection)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ splitvt.c: In function 'normal_input': splitvt.c:547:17: warning: ignoring return value of 'read' declared with attribute 'warn_unused_result' [-Wunused-result] 547 | read(ttyfd, &c, 1); | ^~~~~~~~~~~~~~~~~~ splitvt.c:592:35: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 592 | write(thisfd, selection, strlen(selection)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ splitvt.c:626:17: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 626 | write(thisfd, &c, 1); | ^~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o misc.o misc.c misc.c: In function 'pty_open': misc.c:81:17: warning: ignoring return value of 'dup' declared with attribute 'warn_unused_result' [-Wunused-result] 81 | dup(slave_fd); dup(slave_fd); dup(slave_fd); | ^~~~~~~~~~~~~ misc.c:81:32: warning: ignoring return value of 'dup' declared with attribute 'warn_unused_result' [-Wunused-result] 81 | dup(slave_fd); dup(slave_fd); dup(slave_fd); | ^~~~~~~~~~~~~ misc.c:81:47: warning: ignoring return value of 'dup' declared with attribute 'warn_unused_result' [-Wunused-result] 81 | dup(slave_fd); dup(slave_fd); dup(slave_fd); | ^~~~~~~~~~~~~ misc.c: In function 'safe_popen': misc.c:900:43: warning: ignoring return value of 'dup' declared with attribute 'warn_unused_result' [-Wunused-result] 900 | close(1); dup(pipe_fds[1]); close(0); | ^~~~~~~~~~~~~~~~ misc.c:902:43: warning: ignoring return value of 'dup' declared with attribute 'warn_unused_result' [-Wunused-result] 902 | close(0); dup(pipe_fds[0]); close(1); | ^~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o utmp.o utmp.c utmp.c: In function 'addutmp': utmp.c:204:21: warning: passing argument 1 of 'time' from incompatible pointer type [-Wincompatible-pointer-types] 204 | (void) time(&ut.ut_time); | ^ | | | int32_t * {aka int *} In file included from utmp.c:11: /usr/include/time.h:76:29: note: expected 'time_t *' {aka 'long int *'} but argument is of type 'int32_t *' {aka 'int *'} 76 | extern time_t time (time_t *__timer) __THROW; | ~~~~~~~~^~~~~~~ utmp.c: In function 'delutmp': utmp.c:240:29: warning: passing argument 1 of 'time' from incompatible pointer type [-Wincompatible-pointer-types] 240 | (void) time(&ut.ut_time); | ^ | | | int32_t * {aka int *} /usr/include/time.h:76:29: note: expected 'time_t *' {aka 'long int *'} but argument is of type 'int32_t *' {aka 'int *'} 76 | extern time_t time (time_t *__timer) __THROW; | ~~~~~~~~^~~~~~~ utmp.c:249:24: warning: ignoring return value of 'chown' declared with attribute 'warn_unused_result' [-Wunused-result] 249 | (void) chown(tty, 0, sb.st_gid); | ^~~~~~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o vt100.o vt100.c vt100.c: In function 'set_attr': vt100.c:144:45: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 144 | (void) check_attr(0, win->textattr, (int)&on); | ^ vt100.c: In function 'E_': vt100.c:364:33: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 364 | write(*source, "\033[?6c", 5); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vt100.c: In function 'E_brac': vt100.c:646:41: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 646 | write(*source, "\033[0n", 4); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ vt100.c:652:41: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 652 | write(*source, reply, strlen(reply)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vt100.c:658:33: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 658 | write(*source, "\033[?6c", 5); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o videomem.o videomem.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o terminal.o terminal.c terminal.c: In function 'vt_insertchar': terminal.c:427:6: warning: type of 'numcols' defaults to 'int' [-Wimplicit-int] 427 | void vt_insertchar(numcols) | ^~~~~~~~~~~~~ terminal.c: At top level: terminal.c:24:19: warning: 'capabilities' defined but not used [-Wunused-variable] 24 | static capability capabilities[] = { | ^~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o vttest.o vttest.c vttest.c: In function 'vttest': vttest.c:85:9: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result] 85 | write(fd,"\033[c", 3); /* Vt100 test: ESC [ c */ | ^~~~~~~~~~~~~~~~~~~~~ gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o vtmouse.o vtmouse.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o parserc.o parserc.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o lock.o lock.c gcc -Wall -O2 -DHAVE_UTHOST -DHAVE_TERMIO_H -DHAVE_UNISTD_H -DNEED_SELECT_H -DHAVE_WAIT4 -DSHELL=\"/bin/sh\" -DPTYCHAR=\"\" -DHEXDIGIT=\"\" -c -o cut-paste.o cut-paste.c cut-paste.c: In function 'put_sel_char': cut-paste.c:48:44: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 48 | (*oldattr)=check_attr(c, *oldattr, (int)on); | ^ In function 'extract_sel', inlined from 'vt_getsel' at cut-paste.c:286:11: cut-paste.c:95:12: warning: 'mark1.x' may be used uninitialized [-Wmaybe-uninitialized] 95 | if ( mark1->x == mark2->x ) | ^ cut-paste.c: In function 'vt_getsel': cut-paste.c:261:32: note: 'mark1.x' was declared here 261 | position here, cursor, mark1, mark2; | ^~~~~ In function 'extract_sel', inlined from 'vt_getsel' at cut-paste.c:286:11: cut-paste.c:97:20: warning: 'mark1.y' may be used uninitialized [-Wmaybe-uninitialized] 97 | if ( mark1->y == mark2->y ) { | ^ cut-paste.c: In function 'vt_getsel': cut-paste.c:261:32: note: 'mark1.y' was declared here 261 | position here, cursor, mark1, mark2; | ^~~~~ gcc -o splitvt splitvt.o misc.o utmp.o vt100.o videomem.o terminal.o vttest.o vtmouse.o parserc.o lock.o cut-paste.o make: Leaving directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' + exit 0 Executing(%install): /bin/sh -e /usr/src/tmp/rpm-tmp.45087 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + /bin/chmod -Rf u+rwX -- /usr/src/tmp/splitvt-buildroot + : + /bin/rm -rf -- /usr/src/tmp/splitvt-buildroot + PATH=/usr/libexec/rpm-build:/usr/src/bin:/usr/bin:/bin:/usr/local/bin:/usr/games + cd splitvt-1.6.6_6 + mkdir -p /usr/src/tmp/splitvt-buildroot/usr/share/man/man1 + mkdir -p /usr/src/tmp/splitvt-buildroot/usr/bin + make 'INSTALL=/usr/libexec/rpm-build/install -p' install DESTDIR=/usr/src/tmp/splitvt-buildroot make: Entering directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' cp splitvt.man /usr/src/tmp/splitvt-buildroot/usr/share/man/man1/splitvt.1 mv splitvt /usr/src/tmp/splitvt-buildroot/usr/bin/splitvt mv examples/xsplitvt /usr/src/tmp/splitvt-buildroot/usr/bin/xsplitvt make: Leaving directory '/usr/src/RPM/BUILD/splitvt-1.6.6_6' + /usr/lib/rpm/brp-alt Cleaning files in /usr/src/tmp/splitvt-buildroot (auto) Verifying and fixing files in /usr/src/tmp/splitvt-buildroot (binconfig,pkgconfig,libtool,desktop,gnuconfig) Checking contents of files in /usr/src/tmp/splitvt-buildroot/ (default) Compressing files in /usr/src/tmp/splitvt-buildroot (auto) 056-debuginfo.brp: WARNING: debuginfo without debug sources. Verifying ELF objects in /usr/src/tmp/splitvt-buildroot (arch=normal,fhs=normal,lfs=relaxed,lint=relaxed,rpath=normal,stack=normal,textrel=normal,unresolved=normal) Splitting links to aliased files under /{,s}bin in /usr/src/tmp/splitvt-buildroot Processing files: splitvt-1.6.6_6-alt1.qa1 Finding Provides (using /usr/lib/rpm/find-provides) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.PqAakb find-provides: running scripts (debuginfo,lib,pam,perl,pkgconfig,python,python3,shell) Finding Requires (using /usr/lib/rpm/find-requires) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.jdGPDv find-requires: running scripts (cpp,debuginfo,files,lib,pam,perl,pkgconfig,pkgconfiglib,python,python3,rpmlib,shebang,shell,static,symlinks,systemd-services) find-requires: FINDPACKAGE-COMMANDS: xterm Requires: /bin/sh, /lib64/ld-linux-x86-64.so.2, libc.so.6(GLIBC_2.15)(64bit), libc.so.6(GLIBC_2.2.5)(64bit), libc.so.6(GLIBC_2.3)(64bit), libc.so.6(GLIBC_2.3.4)(64bit), libc.so.6(GLIBC_2.33)(64bit), libc.so.6(GLIBC_2.34)(64bit), libc.so.6(GLIBC_2.4)(64bit), rtld(GNU_HASH), xterm Finding debuginfo files (using /usr/lib/rpm/find-debuginfo-files) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.eVnKtY Creating splitvt-debuginfo package Processing files: splitvt-debuginfo-1.6.6_6-alt1.qa1 Finding Provides (using /usr/lib/rpm/find-provides) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.VfEn49 find-provides: running scripts (debuginfo) Finding Requires (using /usr/lib/rpm/find-requires) Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.WfUsoO find-requires: running scripts (debuginfo) Requires: splitvt = 1.6.6_6-alt1.qa1, /usr/lib/debug/lib64/ld-linux-x86-64.so.2.debug, debug64(libc.so.6) Wrote: /usr/src/RPM/RPMS/x86_64/splitvt-1.6.6_6-alt1.qa1.x86_64.rpm (w2.lzdio) Wrote: /usr/src/RPM/RPMS/x86_64/splitvt-debuginfo-1.6.6_6-alt1.qa1.x86_64.rpm (w2.lzdio) 1.00user 1.06system 0:06.47elapsed 31%CPU (0avgtext+0avgdata 33060maxresident)k 0inputs+0outputs (0major+193286minor)pagefaults 0swaps /.out/splitvt-1.6.6_6-alt1.qa1.x86_64.rpm: The use of such a license name is ambiguous: GPL /.out/splitvt-debuginfo-1.6.6_6-alt1.qa1.x86_64.rpm: The use of such a license name is ambiguous: GPL 3.68user 2.64system 0:15.84elapsed 39%CPU (0avgtext+0avgdata 133364maxresident)k 0inputs+0outputs (0major+190800minor)pagefaults 0swaps --- splitvt-1.6.6_6-alt1.qa1.x86_64.rpm.repo 2013-04-17 16:27:14.000000000 +0000 +++ splitvt-1.6.6_6-alt1.qa1.x86_64.rpm.hasher 2024-05-04 02:20:07.037833526 +0000 @@ -2,6 +2,5 @@ /usr/bin/xsplitvt 100755 root:root -/usr/share/man/man1/splitvt.1 100644 root:root +/usr/share/man/man1/splitvt.1.xz 100644 root:root Requires: /bin/sh Requires: /lib64/ld-linux-x86-64.so.2 -Requires: libc.so.6(GLIBC_2.14)(64bit) Requires: libc.so.6(GLIBC_2.15)(64bit) @@ -10,2 +9,4 @@ Requires: libc.so.6(GLIBC_2.3.4)(64bit) +Requires: libc.so.6(GLIBC_2.33)(64bit) +Requires: libc.so.6(GLIBC_2.34)(64bit) Requires: libc.so.6(GLIBC_2.4)(64bit) @@ -15,5 +16,5 @@ Provides: splitvt = 1.6.6_6-alt1.qa1 -File: /usr/bin/splitvt 100755 root:root 71e02a8fdb6f1c5ebf3c9d44965fe409 +File: /usr/bin/splitvt 100755 root:root 54825ef8d04ab2a83a61632c16b948aa File: /usr/bin/xsplitvt 100755 root:root 1c1190db931a2dc4440ba64cfa38538a -File: /usr/share/man/man1/splitvt.1 100644 root:root e3a04149378ce0f7b1e7aeab708eff15 -RPMIdentity: a618576c73e6365bf25190036c78f1356aab62bb36e2f4164e152dd1d33ee5f5caaeb82db603ad9f9c73ec3b1ec1751cb4cfedef13e5b9a5a1ee7e1176e27d8f +File: /usr/share/man/man1/splitvt.1.xz 100644 root:root 0b5ab537b3bd859f0d9230e574d038c7 +RPMIdentity: 6a1badd7b7893fdb72d87d1eb101a77badc20ee31e0cc0898bc68733b6bb4bfb5431e64142436a72b7e965df24e6e6247e544828ead3ce2437ab082771231bf0 --- splitvt-debuginfo-1.6.6_6-alt1.qa1.x86_64.rpm.repo 2013-04-17 16:27:14.000000000 +0000 +++ splitvt-debuginfo-1.6.6_6-alt1.qa1.x86_64.rpm.hasher 2024-05-04 02:20:07.103834649 +0000 @@ -1,4 +1,4 @@ -/usr/lib/debug/.build-id/9a 40755 root:root -/usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4 120777 root:root ../../../../bin/splitvt -/usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4.debug 120777 root:root ../../usr/bin/splitvt.debug +/usr/lib/debug/.build-id/1b 40755 root:root +/usr/lib/debug/.build-id/1b/f3cd09a8ec0502ba323ddc67098bd90f39a97d 120777 root:root ../../../../bin/splitvt +/usr/lib/debug/.build-id/1b/f3cd09a8ec0502ba323ddc67098bd90f39a97d.debug 120777 root:root ../../usr/bin/splitvt.debug /usr/lib/debug/usr/bin/splitvt.debug 100644 root:root @@ -9,6 +9,6 @@ Provides: splitvt-debuginfo = 1.6.6_6-alt1.qa1 -File: /usr/lib/debug/.build-id/9a 40755 root:root -File: /usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4 120777 root:root ../../../../bin/splitvt -File: /usr/lib/debug/.build-id/9a/bb15d94ba86550097b838f855931703ff405d4.debug 120777 root:root ../../usr/bin/splitvt.debug -File: /usr/lib/debug/usr/bin/splitvt.debug 100644 root:root 5496b4030ae1b2997a5324fa492f56d5 -RPMIdentity: 0b8ca5b7ebf3007f4879ee8059e928b15362b5c305e4ca45b4111ca84eb02e6875a91bec741a2917e795f855e2498056726b7251a1cee3fabfdc5b2abae36a46 +File: /usr/lib/debug/.build-id/1b 40755 root:root +File: /usr/lib/debug/.build-id/1b/f3cd09a8ec0502ba323ddc67098bd90f39a97d 120777 root:root ../../../../bin/splitvt +File: /usr/lib/debug/.build-id/1b/f3cd09a8ec0502ba323ddc67098bd90f39a97d.debug 120777 root:root ../../usr/bin/splitvt.debug +File: /usr/lib/debug/usr/bin/splitvt.debug 100644 root:root 473e61fb0ba9f5d2264e2b2af2e694f8 +RPMIdentity: 2dcad110a9a76be9fa222c708ddb2b9b992112b693a1550e345b54fc00083b0783a0c8857a4a3b973e9e6da0f1950e30bfd5ee454696f7ab557248d60d1daff5