1
0
mirror of https://github.com/gryf/wmtemp.git synced 2026-02-02 14:15:45 +01:00

initial import of wmtempmon

This commit is contained in:
2012-05-30 10:50:49 +02:00
commit 44276089b4
16 changed files with 1726 additions and 0 deletions

35
wmtempmon/Makefile Normal file
View File

@@ -0,0 +1,35 @@
# By RedSeb 1999, Liverbugg 2002
SRC = wmtempmon.c ../wmgeneral/wmgeneral.c ../wmgeneral/misc.c ../wmgeneral/list.c
EXE = wmtempmon
OBJ = $(SRC:.c=.o)
CFLAGS = -Wall -O3
LIB = -L/usr/X11R6/lib -lXpm -lXext -lX11 -lsensors
INSTALL = /usr/bin/install
CC = gcc
all: $(OBJ)
$(CC) -o $(EXE) $(OBJ) $(LIB)
strip $(EXE)
$(OBJ): %.o : %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -rf $(EXE)
rm -rf *.o
rm -rf ../wmgeneral/*.o
install:
$(INSTALL) $(EXE) /usr/local/bin/
uninstall:
rm -rf /usr/local/bin/$(EXE)
remove: uninstall

25
wmtempmon/standards.h Normal file
View File

@@ -0,0 +1,25 @@
/*****************************************************************************
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <sys/io.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <dlfcn.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/time.h>
/* Testing Values */
#define TRUE 1
#define FALSE 0
#define OK 0
#define ERROR -1

134
wmtempmon/wmtempmon.c Normal file
View File

@@ -0,0 +1,134 @@
/*
* wmtempmon: a sensor monitor for WindowMaker. this little app is mainly based
* on wmsensormon and other simple dockapps.
*
* version = 0.1
* date: Fri Oct 31 20:41:14 CET 2008 @861 /Internet Time/
* author: Roman 'gryf' Dobosz
* requirements: configured lm_sensors and sensor program, nvidia-settings, cut,
* grep.
* licence: gpl
*/
#include <sys/param.h>
#include <sys/types.h>
#include "standards.h"
#include <X11/Xlib.h>
#include <X11/xpm.h>
#include <X11/extensions/shape.h>
#include <string.h>
#include "../wmgeneral/wmgeneral.h"
#include "../wmgeneral/misc.h"
#include "wmtempmon_master2.xpm"
#include "wmtempmon_mask.xbm"
#define MAXSTRLEN 8
#define TEMP 40
#define TEMP_OVER 47
#define GPU_T 70
#define GPU_T_OVER 85
void display_values(int, int, int);
int get_temp(int core_number);
int get_offset(int temp, int cpu);
int main(int argc, char **argv){
int temp1=0, temp2=0, temp3=0;
/* offset is one of 0 (normal), 7 (alert), 14 (warning) */
int offset1=0, offset2=0, offset3=0;
int counter = 0;
openXwindow(argc, argv, wmtempmon_master2_xpm, wmtempmon_mask_bits, wmtempmon_mask_width, wmtempmon_mask_height);
while(TRUE){
if(counter==0){
temp1 = get_temp(0);
offset1 = get_offset(temp1, 1);
temp2 = get_temp(1);
offset2 = get_offset(temp2, 1);
temp3 = get_temp(2);
offset3 = get_offset(temp3, 0);
counter = 200;
}
// core 1
copyXPMArea(0, 87 + offset1, 23, 7, 4, 7); // LCD: "CPU"
copyXPMArea(69, 87 + offset1, 5, 7, 22, 7); // LCD: number of cpu
copyXPMArea(66, 65 + offset1, 9, 7, 51, 7); // LCD: "°C"
display_values(temp1, 0, offset1);
// core 2
copyXPMArea(0, 87 + offset2, 23, 7, 4, 21);
copyXPMArea(75, 87 + offset2, 5, 7, 22, 21);
copyXPMArea(66, 65 + offset2, 9, 7, 51, 21);
display_values(temp2, 14, offset2);
// gpu
copyXPMArea(23, 87 + offset3, 23, 7, 4, 35);
copyXPMArea(66, 65 + offset3, 9, 7, 51, 35);
display_values(temp3, 28, offset3);
RedrawWindow();
counter--;
usleep(5000);
}
}
int get_offset(int temp, int cpu){
int alt, wrn;
if(cpu == 1){
wrn = TEMP;
alt = TEMP_OVER;
}else{
wrn = GPU_T;
alt = GPU_T_OVER;
}
if(temp >= alt){
return 7; // Alert
}else if(temp >= wrn){
return 14; // Warning
}else{
return 0; // Normal
}
}
void display_values(int temp, int offset, int offset2){
char text[5], num1, num2, num3, num4;
sprintf(text, "%03d", temp);
num1 = (text[0] - '0');
num2 = (text[1] - '0');
num3 = (text[2] - '0');
num4 = (text[3] - '0');
if(num1)
copyXPMArea(5 * num1, 65 + offset2, 5, 7, 31, 7 + offset);
else
copyXPMArea(60, 65 + offset2, 5, 7, 31, 7 + offset);
copyXPMArea(5 * num2, 65 + offset2, 5, 7, 38, 7 + offset);
copyXPMArea(5 * num3, 65 + offset2, 5, 7, 45, 7 + offset);
copyXPMArea(5 * num4, 65 + offset2, 5, 7, 51, 7 + offset);
}
int get_temp(int core_number){
// Core temperature. argument is core number. core no.2 is GPU
FILE *file;
int core=0;
char cmd[] = " ";
if(core_number==2){
sprintf(cmd, "echo `nvidia-settings -q 'GPUCoreTemp'|grep Attribute|cut -d ':' -f 3|cut -d '.' -f 1`");
}else{
sprintf(cmd, "echo `sensors |grep 'Core %d'|cut -d ':' -f 2|cut -d '.' -f 1`", core_number);
}
file = popen(cmd, "r");
while (! feof(file)) {
char line[MAXSTRLEN + 1];
bzero(line, MAXSTRLEN + 1);
fgets(line, MAXSTRLEN, file);
if(line[0] != 0){
sscanf(line, "%d", &core);
}
}
pclose(file);
return core;
}

View File

@@ -0,0 +1,46 @@
#define wmtempmon_mask_width 64
#define wmtempmon_mask_height 64
static unsigned char wmtempmon_mask_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

View File

@@ -0,0 +1,206 @@
/* XPM */
static char * wmtempmon_master2_xpm[] = {
"93 122 81 1",
" c None",
". c #0000FF",
"+ c #000000",
"@ c #202020",
"# c #C7C7C7",
"$ c #007D71",
"% c #20B6AE",
"& c #004941",
"* c #188A86",
"= c #20B2AE",
"- c #107D79",
"; c #0A3F00",
"> c #660000",
", c #177700",
"' c #27B500",
") c #A50000",
"! c #C90000",
"~ c #3FFF00",
"{ c #FF0000",
"] c #E00000",
"^ c #440000",
"/ c #A80000",
"( c #FF8200",
"_ c #542A00",
": c #A85500",
"< c #00FF0F",
"[ c #04FA0F",
"} c #09F50F",
"| c #0DF10F",
"1 c #12EC0E",
"2 c #16E80E",
"3 c #1BE30E",
"4 c #1FDF0D",
"5 c #24DA0D",
"6 c #28D60D",
"7 c #2DD10D",
"8 c #32CC0C",
"9 c #36C80C",
"0 c #3BC30C",
"a c #3FBF0B",
"b c #44BA0B",
"c c #48B60B",
"d c #4DB10B",
"e c #51AD0A",
"f c #56A80A",
"g c #5BA30A",
"h c #5F9F09",
"i c #649A09",
"j c #689609",
"k c #6D9109",
"l c #718D08",
"m c #768808",
"n c #7A8408",
"o c #7F7F07",
"p c #847A07",
"q c #887607",
"r c #8D7107",
"s c #916D06",
"t c #966806",
"u c #9A6406",
"v c #9F5F05",
"w c #A35B05",
"x c #A85605",
"y c #AD5105",
"z c #B14D04",
"A c #B64804",
"B c #BA4404",
"C c #BF3F03",
"D c #C33B03",
"E c #C83603",
"F c #CC3203",
"G c #D12D02",
"H c #D62802",
"I c #DA2402",
"J c #DF1F01",
"K c #E31B01",
"L c #E81601",
"M c #EC1201",
"N c #F10D00",
"O c #F50900",
"P c #FA0400",
"................................................................+............................",
"................................................................+............................",
"..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@$%%%$@$%%%$@$&&&$@@&&&$@@@@@@&&&@@@@&&&@@@@&&&@@*=@$%$@@#..+............................",
"..+@@%@@@&@%@@@%@%@@@%@&@@@%@@@@@&@@@&@@&@@@&@@&@@@&@-=@%@&@@#..+............................",
"..+@@%@@@&@%@@@%@%@@@%@&@@@%@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@$&&&@@$%%%$@$&&&$@@&&&$@@@@@@&&&@@@@&&&@@@@&&&@@@@@$&@@@#..+............................",
"..+@@%@@@&@%@@@&@%@@@%@&@@@%@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@%@@@&@%@@@&@%@@@%@&@@@%@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@$%%%$@$&&&@@$%%%$@@&&&$@@@@@@&&&@@@@&&&@@@@&&&@@@@@$%$@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..############################################################..+............................",
"................................................................+............................",
"................................................................+............................",
"..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@$%%%$@$%%%$@$&&&$@$%%%$@@@@@@&&&@@@@&&&@@@@&&&@@*=@$%$@@#..+............................",
"..+@@%@@@&@%@@@%@%@@@%@&@@@%@@@@@&@@@&@@&@@@&@@&@@@&@-=@%@&@@#..+............................",
"..+@@%@@@&@%@@@%@%@@@%@&@@@%@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@$&&&@@$%%%$@$&&&$@$%%%$@@@@@@&&&@@@@&&&@@@@&&&@@@@@$&@@@#..+............................",
"..+@@%@@@&@%@@@&@%@@@%@%@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@%@@@&@%@@@&@%@@@%@%@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@$%%%$@$&&&@@$%%%$@$%%%$@@@@@@&&&@@@@&&&@@@@&&&@@@@@$%$@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..############################################################..+............................",
"................................................................+............................",
"................................................................+............................",
"..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@$%%%$@$%%%$@$&&&$@@&&&@@@@@@@&&&@@@@&&&@@@@&&&@@*=@$%$@@#..+............................",
"..+@@%@@@&@%@@@%@%@@@%@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@-=@%@&@@#..+............................",
"..+@@%@@@&@%@@@%@%@@@%@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@$&&&$@$%%%$@$&&&$@@&&&@@@@@@@&&&@@@@&&&@@@@&&&@@@@@$&@@@#..+............................",
"..+@@%@@@%@%@@@&@%@@@%@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@%@@@%@%@@@&@%@@@%@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@@@%@&@@#..+............................",
"..+@@$%%%$@$&&&@@$%%%$@@&&&@@@@@@@&&&@@@@&&&@@@@&&&@@@@@$%$@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..############################################################..+............................",
"................................................................+............................",
"................................................................+............................",
"..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@&&&@@@&&&@@@&&&@@@&&&@@@@@@@&&&@@@@&&&@@@@&&&@@@@&&&@@@#..+............................",
"..+@@&@@@&@&@@@&@&@@@&@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@&@@@&@@#..+............................",
"..+@@&@@@&@&@@@&@&@@@&@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@&@@@&@@#..+............................",
"..+@@@&&&@@@&&&@@@&&&@@@&&&@@@@@@@&&&@@@@&&&@@@@&&&@@@@&&&@@@#..+............................",
"..+@@&@@@&@&@@@&@&@@@&@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@&@@@&@@#..+............................",
"..+@@&@@@&@&@@@&@&@@@&@&@@@&@@@@@&@@@&@@&@@@&@@&@@@&@@&@@@&@@#..+............................",
"..+@@@&&&@@@&&&@@@&&&@@@&&&@@@@@@@&&&@@@@&&&@@@@&&&@@@@&&&@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..############################################################..+............................",
"................................................................+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#..+............................",
"..############################################################..+............................",
"................................................................+............................",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;;;@@>>>@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@..",
"@===@@&&&**===**===*=&&&=*===**===**===**===**===*;,',;>)!)>@&&&@.*=@$%$@*=@$%$@$&&&$@@===@..",
"=@@@=&@@@=&@@@=&@@@==@@@==@@@&=@@@&&@@@==@@@==@@@=;'~';>!{!>&@@@&.-=@%@&@-=@%@&@%@@@%@=@@@=..",
"=@@@=&@@@=&@@@=&@@@==@@@==@@@&=@@@&&@@@==@@@==@@@=;,',;>)!)>&@@@&.@@@%@&@@@@%@&@%@@@%@=@@@=..",
"*&&&*@&&&**===*@===**===*====**===*@&&&**===**===*@;;;@@>>>@@&&&@.@@@$&@@@@@$%$@$&&&$@*&&&*..",
"=@@@=&@@@==@@@&&@@@=&@@@=&@@@==@@@=&@@@==@@@=&@@@=..........&@@@&.@@@%@&@@@@%@&@%@@@%@=@@@=..",
"=@@@=&@@@==@@@&&@@@=&@@@=&@@@==@@@=&@@@==@@@=&@@@=.@=.@@....&@@@&.@@@%@&@@@@%@&@$%@%$@=@@@=..",
"@===@@&&&**===**===*@&&&**===**===*@&&&=*===**===*.*=.@@....@&&&@.@@@$%$@@@@@&@@@$%$@@@===@..",
"@]]]@@^^^//]]]//]]]/]^^^]/]]]//]]]//]]]//]]]//]]]/..........@^^^@./]@/]/@/]@/]/@.............",
"]@@@]^@@@]^@@@]^@@@]]@@@]]@@@^]@@@^^@@@]]@@@]]@@@]..........^@@@^./]@]@^@/]@]@^@.............",
"]@@@]^@@@]^@@@]^@@@]]@@@]]@@@^]@@@^^@@@]]@@@]]@@@]..........^@@@^.@@@]@^@@@@]@^@.............",
"/^^^/@^^^//]]]/@]]]//]]]/]]]]//]]]/@^^^//]]]//]]]/..........@^^^@.@@@/^@@@@@/]/@.............",
"]@@@]^@@@]]@@@^^@@@]^@@@]^@@@]]@@@]^@@@]]@@@]^@@@]..........^@@@^.@@@]@^@@@@]@^@.............",
"]@@@]^@@@]]@@@^^@@@]^@@@]^@@@]]@@@]^@@@]]@@@]^@@@].@].@@....^@@@^.@@@]@^@@@@]@^@.............",
"@]]]@@^^^//]]]//]]]/@^^^//]]]//]]]/@^^^]/]]]//]]]/./].@@....@^^^@.@@@/]/@@@@@^@@.............",
"@(((@@___::(((::(((:(___(:(((::(((::(((::(((::(((:..........@___@.:(@:(:@:(@:(:@.............",
"(@@@(_@@@(_@@@(_@@@((@@@((@@@_(@@@__@@@((@@@((@@@(.........._@@@_.:(@(@_@:(@(@_@.............",
"(@@@(_@@@(_@@@(_@@@((@@@((@@@_(@@@__@@@((@@@((@@@(.........._@@@_.@@@(@_@@@@(@_@.............",
":___:@___::(((:@(((::(((:((((::(((:@___::(((::(((:..........@___@.@@@:_@@@@@:(:@.............",
"(@@@(_@@@((@@@__@@@(_@@@(_@@@((@@@(_@@@((@@@(_@@@(.........._@@@_.@@@(@_@@@@(@_@.............",
"(@@@(_@@@((@@@__@@@(_@@@(_@@@((@@@(_@@@((@@@(_@@@(.@(.@@...._@@@_.@@@(@_@@@@(@_@.............",
"@(((@@___::(((::(((:@___::(((::(((:@___(:(((::(((:.:(.@@....@___@.@@@:(:@@@@@_@@.............",
".............................................................................................",
"$%%%$@$%%%$@$&&&$@@&&&@$%%%$@$%%%$@$&&&$@@&&&@$%%%$@@%%%@@$&&&$@@&&&@@&&&*@*===*.............",
"%@@@&@%@@@%@%@@@%@&@@@&%@@@&@%@@@%@%@@@%@&@@@&%@@@&@%@@@%@%@@@%@&@@@&&@@@=@&@@@=.............",
"%@@@&@%@@@%@%@@@%@&@@@&%@@@&@%@@@%@%@@@%@&@@@&%@@@&@%@@@%@%%@@%@&@@@&&@@@=@&@@@=.............",
"$&&&@@$%%%$@$&&&$@@&&&@$&&&$@$%%%$@$&&&$@@&&&@$%%%@@$%%%$@$&%&$@@&&&@@&&&*@*===*.............",
"%@@@&@%@@@&@%@@@%@&@@@&%@@@%@%@@@&@%@@@%@&@@@&%@@@&@%@@@%@%@@%%@&@@@&&@@@=@=@@@&.............",
"%@@@&@%@@@&@%@@@%@&@@@&%@@@%@%@@@&@%@@@%@&@@@&%@@@&@%@@@%@%@@@%@&@@@&&@@@=@=@@@&.............",
"$%%%$@$&&&@@$%%%$@@&&&@$%%%$@$&&&@@$%%%$@@&&&@$&&&@@$&&&$@$&&&$@@&&&@@&&&*@*===*.............",
"/]]]/@/]]]/@/^^^/@@^^^@/]]]/@/]]]/@/^^^/@@^^^@/]]]/@@]]]@@/^^^/@@^^^@@^^^/@/]]]/.............",
"]@@@^@]@@@]@]@@@]@^@@@^]@@@^@]@@@]@]@@@]@^@@@^]@@@^@]@@@]@]@@@]@^@@@^^@@@]@^@@@].............",
"]@@@^@]@@@]@]@@@]@^@@@^]@@@^@]@@@]@]@@@]@^@@@^]@@@^@]@@@]@]]@@]@^@@@^^@@@]@^@@@].............",
"/^^^@@/]]]/@/^^^/@@^^^@/^^^/@/]]]/@/^^^/@@^^^@/]]]@@/]]]/@/^]^/@@^^^@@^^^/@/]]]/.............",
"]@@@^@]@@@^@]@@@]@^@@@^]@@@]@]@@@^@]@@@]@^@@@^]@@@^@]@@@]@]@@]]@^@@@^^@@@]@]@@@^.............",
"]@@@^@]@@@^@]@@@]@^@@@^]@@@]@]@@@^@]@@@]@^@@@^]@@@^@]@@@]@]@@@]@^@@@^^@@@]@]@@@^.............",
"/]]]/@/^^^@@/]]]/@@^^^@/]]]/@/^^^@@/]]]/@@^^^@/^^^@@/^^^/@/^^^/@@^^^@@^^^/@/]]]/.............",
":(((:@:(((:@:___:@@___@:(((:@:(((:@:___:@@___@:(((:@@(((@@:___:@@___@@___:@:(((:.............",
"(@@@_@(@@@(@(@@@(@_@@@_(@@@_@(@@@(@(@@@(@_@@@_(@@@_@(@@@(@(@@@(@_@@@__@@@(@_@@@(.............",
"(@@@_@(@@@(@(@@@(@_@@@_(@@@_@(@@@(@(@@@(@_@@@_(@@@_@(@@@(@((@@(@_@@@__@@@(@_@@@(.............",
":___@@:(((:@:___:@@___@:___:@:(((:@:___:@@___@:(((@@:(((:@:_(_:@@___@@___:@:(((:.............",
"(@@@_@(@@@_@(@@@(@_@@@_(@@@(@(@@@_@(@@@(@_@@@_(@@@_@(@@@(@(@@((@_@@@__@@@(@(@@@_.............",
"(@@@_@(@@@_@(@@@(@_@@@_(@@@(@(@@@_@(@@@(@_@@@_(@@@_@(@@@(@(@@@(@_@@@__@@@(@(@@@_.............",
":(((:@:___@@:(((:@@___@:(((:@:___@@:(((:@@___@:___@@:___:@:___:@@___@@___:@:(((:.............",
".............................................................................................",
"<<[}|1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP{...................................",
"<<[}|1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP{...................................",
"<<[}|1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP{...................................",
"<<[}|1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP{...................................",
"<<[}|1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP{...................................",
"<<[}|1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP{...................................",
".............................................................................................",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..................................",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..................................",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..................................",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..................................",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..................................",
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.................................."};