osc-vnc 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +169 -0
- data/Rakefile +1 -0
- data/config/script.yml +35 -0
- data/examples/desktop/xstartup +5 -0
- data/examples/paraview/fvwm/fvwmrc +80 -0
- data/examples/paraview/fvwm/winxp/images/close-activedown.xpm +237 -0
- data/examples/paraview/fvwm/winxp/images/close-activeup.xpm +286 -0
- data/examples/paraview/fvwm/winxp/images/close-inactive.xpm +88 -0
- data/examples/paraview/fvwm/winxp/images/maximize-activedown.xpm +190 -0
- data/examples/paraview/fvwm/winxp/images/maximize-activeup.xpm +257 -0
- data/examples/paraview/fvwm/winxp/images/maximize-inactive.xpm +66 -0
- data/examples/paraview/fvwm/winxp/images/title-active.xpm +58 -0
- data/examples/paraview/fvwm/winxp/images/title-inactive.xpm +58 -0
- data/examples/paraview/xstartup +17 -0
- data/examples/totalsim-desktop/config/menus/applications.menu +84 -0
- data/examples/totalsim-desktop/config/menus/settings.menu +20 -0
- data/examples/totalsim-desktop/images/TS_LOGO.jpg +0 -0
- data/examples/totalsim-desktop/xlogout +8 -0
- data/examples/totalsim-desktop/xstartup +20 -0
- data/lib/osc/vnc/connview.rb +95 -0
- data/lib/osc/vnc/error.rb +6 -0
- data/lib/osc/vnc/listenable.rb +45 -0
- data/lib/osc/vnc/scriptview.rb +63 -0
- data/lib/osc/vnc/session.rb +116 -0
- data/lib/osc/vnc/version.rb +6 -0
- data/lib/osc/vnc.rb +23 -0
- data/osc-vnc.gemspec +26 -0
- data/templates/conn/awesim.mustache +1 -0
- data/templates/conn/jnlp.mustache +49 -0
- data/templates/conn/novnc.mustache +1 -0
- data/templates/conn/osxvnc.mustache +1 -0
- data/templates/conn/terminal.mustache +1 -0
- data/templates/conn/txt.mustache +4 -0
- data/templates/conn/vnc.mustache +1 -0
- data/templates/conn/yaml.mustache +6 -0
- data/templates/script/_port_helpers.mustache +28 -0
- data/templates/script/_setup_env.mustache +7 -0
- data/templates/script/_ssh_tunnel.mustache +28 -0
- data/templates/script/_start_vncserver.mustache +38 -0
- data/templates/script/_tcp_server.mustache +6 -0
- data/templates/script/server.mustache +46 -0
- data/templates/script/vnc.mustache +86 -0
- metadata +153 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cbe041b5ff1e10a7d5e977d28a299a3c58ccd8d5
|
4
|
+
data.tar.gz: 9f2a6dc121713f6124e3d29f79d59dfca43d0ab0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a1d89ddb96dc57d38b0b42e1c4f5bf0bb2ef18852048c07bb7124fd8ec858e4e383e28ddbdea544447ed3f7a681c044b4e941eb24d7ec0297d8249f7a0a3c61
|
7
|
+
data.tar.gz: f4516b6091852f4433817a65085d96c8f37061626add5828aa792f3ee6c2e41dff999c7934d8f6a041b381fd0520d20ea1f9752e895fbe5d584f0fa008c7fca7
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
vendor/
|
19
|
+
*.lock
|
20
|
+
*.swp
|
21
|
+
*.output
|
22
|
+
*.log
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014-2016 Ohio Supercomputer Center
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
# OSC::VNC
|
2
|
+
|
3
|
+
Ruby library that provides VNC job submission to the OSC systems.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
Add this gem to your Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'osc-vnc'
|
11
|
+
```
|
12
|
+
|
13
|
+
Run Bundler to update your gems:
|
14
|
+
|
15
|
+
```bash
|
16
|
+
$ bundle install
|
17
|
+
```
|
18
|
+
|
19
|
+
## Examples
|
20
|
+
|
21
|
+
### Run App on Oxymoron Batch System
|
22
|
+
|
23
|
+
For all cases we will need to create a new VNC session object. To create a VNC
|
24
|
+
session object you need to supply it the required information:
|
25
|
+
|
26
|
+
* a `PBS::Job` object that connects to the specified batch server
|
27
|
+
* the PBS script that will run when the job is submitted, defined by
|
28
|
+
* type of script (`:vnc` or `:server`)
|
29
|
+
* `:vnc` launches a VNC server
|
30
|
+
* `:server` doesn't launch a VNC server (expects developer specified server in `xstartup`)
|
31
|
+
* cluster type (`:glenn`, `:oakley`, `:ruby`), not to be confused with the
|
32
|
+
batch server (i.e., `quick-batch` can use `:oakley` or `:ruby`)
|
33
|
+
|
34
|
+
A bare bones setup would be:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
job = PBS::Job.new(conn: PBS::Conn.batch('quick'))
|
38
|
+
script = OSC::VNC::ScriptView.new(
|
39
|
+
:vnc,
|
40
|
+
'oakley',
|
41
|
+
:subtype => :shared,
|
42
|
+
:xstartup => '/path/to/script',
|
43
|
+
:outdir => ENV['PWD']
|
44
|
+
)
|
45
|
+
|
46
|
+
session = OSC::VNC::Session.new(job, script)
|
47
|
+
```
|
48
|
+
|
49
|
+
In most cases we will want to supply more options for finer control of the
|
50
|
+
session:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
# Headers are the PBS headers you see at the top of a PBS batch job.
|
54
|
+
# They are defined similarly here accept the header argument
|
55
|
+
# is used as a key in the PBS::ATTR hash object
|
56
|
+
# e.g., for a PBS job name (#PBS -N MyVNCJob)
|
57
|
+
headers = { PBS::ATTR[:N] => "MyVNCJob" }
|
58
|
+
|
59
|
+
# Resources are the attributes in the PBS batch job given with `-l`.
|
60
|
+
# e.g., for walltime (#PBS -l walltime=24:00:00)
|
61
|
+
resources = { walltime: "24:00:00" }
|
62
|
+
|
63
|
+
# Environment variables can also be passed to the script
|
64
|
+
envvars = { DATAFILE: "/path/to/datafile" }
|
65
|
+
```
|
66
|
+
|
67
|
+
To submit the VNC session, use the `#submit` instance method on the object:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
session.submit(headers: headers, resources: resources, envvars: envvars)
|
71
|
+
```
|
72
|
+
|
73
|
+
After enough time has passed and the session is runninq in the batch system
|
74
|
+
(i.e., not queued) there are a variety of formats to output the connection
|
75
|
+
information. The most user-friendly being the `*.jnlp` format if the user has
|
76
|
+
Java installed:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
conn_info = OSC::VNC::ConnView.new(session)
|
80
|
+
conn_info.render(:jnlp)
|
81
|
+
```
|
82
|
+
|
83
|
+
**Note:** Once someone successfully authenticates with the VNC server the
|
84
|
+
password will change if using `vncauth` form of authentication. So it is
|
85
|
+
imperative that you run `ConnView#refresh` to update the connection
|
86
|
+
information.
|
87
|
+
|
88
|
+
### VNC Server options
|
89
|
+
|
90
|
+
You can specify different options when running a vnc session. You can use the
|
91
|
+
`default` set of VNC options to submit the job with or choose from pre-defined
|
92
|
+
subtypes (i.e., `:shared`) found in [config/script.yml](config/script.yml).
|
93
|
+
|
94
|
+
You can alter these options when creating a session by specifying them as a
|
95
|
+
hash in the when initializing the `ScriptView` object. An example:
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
# Specify your personal VNC session options to override defaults
|
99
|
+
script = OSC::VNC::ScriptView.new(
|
100
|
+
:vnc,
|
101
|
+
'oakley',
|
102
|
+
:subtype => :shared,
|
103
|
+
:geom => '1920x1200',
|
104
|
+
:'otp?' => false,
|
105
|
+
:'vncauth?' => true,
|
106
|
+
:'ssh_tunnel?' => true,
|
107
|
+
...
|
108
|
+
)
|
109
|
+
```
|
110
|
+
|
111
|
+
### xstartup
|
112
|
+
|
113
|
+
An `xstartup` script is treated like any other bash script that launches the
|
114
|
+
application you want. If no environment variables are needed, it could
|
115
|
+
theoretically be run directly on an OSC desktop session by itself.
|
116
|
+
|
117
|
+
One such example would be launching Paraview:
|
118
|
+
|
119
|
+
```bash
|
120
|
+
#!/bin/bash
|
121
|
+
|
122
|
+
# This loads up any Xresources the user specifies
|
123
|
+
# as well as gives the background a nice grey color
|
124
|
+
if [ -e $HOME/.Xresources ]; then
|
125
|
+
xrdb $HOME/.Xresources
|
126
|
+
fi
|
127
|
+
xsetroot -solid grey
|
128
|
+
|
129
|
+
# We need a window manager otherwise the windows will
|
130
|
+
# look horrendous, for this we use FVWM (please refer to
|
131
|
+
# FillSim for an example of the `fvwmrc` file used)
|
132
|
+
export XSTARTUP_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
133
|
+
XDIR=${XSTARTUP_DIR} /usr/bin/fvwm -f ${XSTARTUP_DIR}/fvwm/fvwmrc &
|
134
|
+
|
135
|
+
# Load the required modules on Oakley
|
136
|
+
. /etc/profile.d/lmod.sh
|
137
|
+
module load paraview/3.14.1
|
138
|
+
|
139
|
+
# If we are running this app on a node with an Xorg server running
|
140
|
+
# i.e., there is a GPU on this node that we can utilize for OpenGL
|
141
|
+
# graphics (which is true for the Oxymoron cluster)
|
142
|
+
module load virtualgl/2.3
|
143
|
+
|
144
|
+
# Now we start the application
|
145
|
+
vglrun paraview
|
146
|
+
|
147
|
+
# Be sure to clean up the VNC server after the user exits the above
|
148
|
+
# running process
|
149
|
+
vncserver -kill ${DISPLAY}
|
150
|
+
```
|
151
|
+
|
152
|
+
You may or may not need VirtualGL depending on the type of application. Be sure
|
153
|
+
to only use it on a node with an Xorg server running. For any other node you
|
154
|
+
should omit it and its binary `vglrun`.
|
155
|
+
|
156
|
+
You can find a very generic example of an `fvwmrc` file in the
|
157
|
+
`containerfillsim` GitHub repo under the path:
|
158
|
+
|
159
|
+
```bash
|
160
|
+
containerfillsim/jobs/vnc/paraview/fvwm/fvwmrc
|
161
|
+
```
|
162
|
+
|
163
|
+
## Contributing
|
164
|
+
|
165
|
+
1. Fork it
|
166
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
167
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
168
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
169
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/config/script.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
vnc:
|
2
|
+
default: &DEFAULT_VNC
|
3
|
+
name: 'vnc'
|
4
|
+
geom: '800x600'
|
5
|
+
dpi: 96
|
6
|
+
idletimeout: 0
|
7
|
+
extra_args: null
|
8
|
+
otp?: false
|
9
|
+
vncauth?: true
|
10
|
+
pam?: false
|
11
|
+
ssh_tunnel?: true
|
12
|
+
tcp_server?: false
|
13
|
+
novnc?: false
|
14
|
+
cluster:
|
15
|
+
oakley:
|
16
|
+
fonts: '/usr/share/X11/fonts/misc,/usr/share/X11/fonts/75dpi,/usr/share/X11/fonts/100dpi,/usr/share/X11/fonts/Type1,/usr/share/fonts/default/Type1'
|
17
|
+
load_turbovnc: |
|
18
|
+
module use /nfs/gpfs/PZS0645/local-oakley/share/modulefiles
|
19
|
+
module load turbovnc/2.0.0
|
20
|
+
novnc_launcher: '/usr/local/novnc/utils/launch.sh'
|
21
|
+
ruby:
|
22
|
+
fonts: '/usr/share/X11/fonts/misc,/usr/share/X11/fonts/100dpi,/usr/share/X11/fonts/Type1,/usr/share/fonts/default/Type1'
|
23
|
+
load_turbovnc: |
|
24
|
+
module use /nfs/gpfs/PZS0645/local-ruby/share/modulefiles
|
25
|
+
module load turbovnc/2.0.0
|
26
|
+
novnc_launcher: '/usr/local/novnc/utils/launch.sh'
|
27
|
+
shared:
|
28
|
+
<<: *DEFAULT_VNC
|
29
|
+
idletimeout: 300
|
30
|
+
tcp_server?: true
|
31
|
+
|
32
|
+
server:
|
33
|
+
default: &DEFAULT_SERVER
|
34
|
+
ssh_tunnel?: true
|
35
|
+
tcp_server?: false
|
@@ -0,0 +1,80 @@
|
|
1
|
+
SetEnv XPMPath $[XDIR]/fvwm/winxp/images
|
2
|
+
|
3
|
+
# Makes the Maximize button look pressed-in when the window is maximized
|
4
|
+
Style * MWMButtons
|
5
|
+
# Allows turns off the mwm hints completely
|
6
|
+
Style * NoFuncHint
|
7
|
+
# Attempt to recognize & respect the mwm decoration hints that applications occasionally use
|
8
|
+
Style * MWMDecor
|
9
|
+
# Causes transient windows, which are normally left undecorated, to be given the usual fvwm decorations (title bar, buttons, etc.)
|
10
|
+
Style * DecorateTransient
|
11
|
+
Style * SmartPlacement
|
12
|
+
|
13
|
+
# Tells fvwm the maximum size window with which opaque window movement should be used
|
14
|
+
OpaqueMoveSize 100
|
15
|
+
# Specifies the percentage of a page to scroll when the cursor hits the edge of a page
|
16
|
+
EdgeScroll 100 100
|
17
|
+
# The special flag Clear clears any existing flags
|
18
|
+
ButtonStyle 2 - Clear
|
19
|
+
TitleStyle Active AdjustedPixmap $[XPMPath]/title-active.xpm -- Flat
|
20
|
+
TitleStyle Inactive AdjustedPixmap $[XPMPath]/title-inactive.xpm -- Flat
|
21
|
+
ButtonStyle 2 ActiveUp AdjustedPixmap $[XPMPath]/close-activeup.xpm -- UseTitleStyle Flat
|
22
|
+
ButtonStyle 2 ActiveDown AdjustedPixmap $[XPMPath]/close-activedown.xpm -- UseTitleStyle Flat
|
23
|
+
ButtonStyle 2 AllInactive AdjustedPixmap $[XPMPath]/close-inactive.xpm -- UseTitleStyle Flat
|
24
|
+
TitleStyle Centered Height 24
|
25
|
+
BorderStyle Active Colorset
|
26
|
+
BorderStyle Inactive Solid Dodgerblue2 -- HiddenHandles NoInset
|
27
|
+
BorderStyle Active Solid Steelblue3 -- HiddenHandles NoInset
|
28
|
+
|
29
|
+
ButtonStyle 4 - Clear
|
30
|
+
ButtonStyle 4 ActiveUp AdjustedPixmap $[XPMPath]/maximize-activeup.xpm -- UseTitleStyle Flat
|
31
|
+
ButtonStyle 4 ActiveDown AdjustedPixmap $[XPMPath]/maximize-activedown.xpm -- UseTitleStyle Flat
|
32
|
+
ButtonStyle 4 AllInactive AdjustedPixmap $[XPMPath]/maximize-inactive.xpm -- UseTitleStyle Flat
|
33
|
+
|
34
|
+
# BorderWidth - width of the border to place the window if it does not have resize-handles
|
35
|
+
# HandleWidth - width of the border to place the window if it does have resize-handles
|
36
|
+
Style * BorderWidth 4, HandleWidth 4
|
37
|
+
# ForeColor - foreground color (black)
|
38
|
+
# BackColor - background color (steelblue3)
|
39
|
+
Style * ForeColor black, BackColor Steelblue3
|
40
|
+
# HilightFore - window has focus foreground color (white)
|
41
|
+
# HilightBack - window has focus background color (dodgerblue2)
|
42
|
+
Style * HilightFore white, HilightBack Dodgerblue2
|
43
|
+
# Font - name of the font r-regular 14-size
|
44
|
+
Style * Font -*-helvetica-medium-r-*-*-14-*-*-*-*-*-*-*
|
45
|
+
# Start Windows in the top left corner unless the application specifies otherwise
|
46
|
+
Style * PositionPlacement
|
47
|
+
#Style * PositionPlacement Center
|
48
|
+
|
49
|
+
# R - root window
|
50
|
+
# W - application window
|
51
|
+
# D - desktop application
|
52
|
+
# T - window title-bar
|
53
|
+
# S - window side, top, or bottom bar
|
54
|
+
# F - window frame (corners)
|
55
|
+
# I - icon window
|
56
|
+
# 2 - 0-9 title-bar buttons
|
57
|
+
Mouse 0 RI A -
|
58
|
+
Mouse 0 2 A Close
|
59
|
+
Mouse 1 2 A Close
|
60
|
+
Mouse 2 2 A Close
|
61
|
+
Mouse 1 RSFTI A -
|
62
|
+
Mouse 2 RSFTI A -
|
63
|
+
Mouse 0 4 A Maximize 100 100
|
64
|
+
Mouse 1 T A Maximize-or-Move
|
65
|
+
|
66
|
+
AddToFunc Maximize-or-Move
|
67
|
+
+ D Maximize
|
68
|
+
+ C Raise
|
69
|
+
+ C Focus
|
70
|
+
+ M Move
|
71
|
+
|
72
|
+
DesktopSize 1x1
|
73
|
+
|
74
|
+
# Added below 3 to remove root menu, F1 & all help menus
|
75
|
+
DestroyMenu MenuFvwmRoot
|
76
|
+
Key F1 R A -
|
77
|
+
Silent Key Help R A -
|
78
|
+
|
79
|
+
# Wine fix
|
80
|
+
Style * Lenience
|
@@ -0,0 +1,237 @@
|
|
1
|
+
/* XPM */
|
2
|
+
static char *close-activedown[] = {
|
3
|
+
/* columns rows colors chars-per-pixel */
|
4
|
+
"23 23 208 2",
|
5
|
+
" c black",
|
6
|
+
". c #003DAD",
|
7
|
+
"X c #053FB2",
|
8
|
+
"o c #0036CB",
|
9
|
+
"O c #0040AD",
|
10
|
+
"+ c #0041B3",
|
11
|
+
"@ c #0049B4",
|
12
|
+
"# c #0048C4",
|
13
|
+
"$ c #004ECD",
|
14
|
+
"% c #004CD2",
|
15
|
+
"& c #004EDA",
|
16
|
+
"* c #0056CA",
|
17
|
+
"= c #085ECB",
|
18
|
+
"- c #0052D3",
|
19
|
+
"; c #005BDC",
|
20
|
+
": c #0053E1",
|
21
|
+
"> c #015AE5",
|
22
|
+
", c #025FE8",
|
23
|
+
"< c #035CF4",
|
24
|
+
"1 c #0860CE",
|
25
|
+
"2 c #0864D8",
|
26
|
+
"3 c #1A64DF",
|
27
|
+
"4 c #0060E2",
|
28
|
+
"5 c #0164EA",
|
29
|
+
"6 c #096DEC",
|
30
|
+
"7 c #0165F3",
|
31
|
+
"8 c #0068F3",
|
32
|
+
"9 c #0269FD",
|
33
|
+
"0 c #486FAF",
|
34
|
+
"q c #4E78AE",
|
35
|
+
"w c #4D76B4",
|
36
|
+
"e c #A35642",
|
37
|
+
"r c #AD5E5E",
|
38
|
+
"t c #B2574F",
|
39
|
+
"y c #B35E46",
|
40
|
+
"u c #B5594F",
|
41
|
+
"i c #B05953",
|
42
|
+
"p c #B85C52",
|
43
|
+
"a c #B05F60",
|
44
|
+
"s c #B6614E",
|
45
|
+
"d c #B5615C",
|
46
|
+
"f c #B5695C",
|
47
|
+
"g c #BB6256",
|
48
|
+
"h c #B96359",
|
49
|
+
"j c #B96A5A",
|
50
|
+
"k c #AE6A6E",
|
51
|
+
"l c #B56362",
|
52
|
+
"z c #B96B64",
|
53
|
+
"x c #B2706C",
|
54
|
+
"c c #B87069",
|
55
|
+
"v c #B97A77",
|
56
|
+
"b c #EC6032",
|
57
|
+
"n c #EC6B3F",
|
58
|
+
"m c #F26839",
|
59
|
+
"M c #C0675A",
|
60
|
+
"N c #DC7155",
|
61
|
+
"B c #C36961",
|
62
|
+
"V c #C66C70",
|
63
|
+
"C c #C57075",
|
64
|
+
"Z c #C07079",
|
65
|
+
"A c #D07F65",
|
66
|
+
"S c #D17C76",
|
67
|
+
"D c #D57E7C",
|
68
|
+
"F c #EC6D45",
|
69
|
+
"G c #EC6F4A",
|
70
|
+
"H c #E3754E",
|
71
|
+
"J c #EA7242",
|
72
|
+
"K c #ED764D",
|
73
|
+
"L c #E77257",
|
74
|
+
"P c #E4715C",
|
75
|
+
"I c #E17957",
|
76
|
+
"U c #EB7451",
|
77
|
+
"Y c #EA7854",
|
78
|
+
"T c #ED7F5A",
|
79
|
+
"R c #F06C41",
|
80
|
+
"E c #F07348",
|
81
|
+
"W c #F27A4C",
|
82
|
+
"Q c #F8794F",
|
83
|
+
"! c #F07757",
|
84
|
+
"~ c #F37A53",
|
85
|
+
"^ c #E47F64",
|
86
|
+
"/ c #E57F6A",
|
87
|
+
"( c #EC7B63",
|
88
|
+
") c #F57F61",
|
89
|
+
"_ c #BE7980",
|
90
|
+
"` c #C2816C",
|
91
|
+
"' c #CE856E",
|
92
|
+
"] c #D4896F",
|
93
|
+
"[ c #DD896D",
|
94
|
+
"{ c #D38678",
|
95
|
+
"} c #D28D76",
|
96
|
+
"| c #D58E7A",
|
97
|
+
" . c #D88D70",
|
98
|
+
".. c #D6937C",
|
99
|
+
"X. c #DC917C",
|
100
|
+
"o. c #E78253",
|
101
|
+
"O. c #E3895F",
|
102
|
+
"+. c #EE805F",
|
103
|
+
"@. c #EE885E",
|
104
|
+
"#. c #F6814D",
|
105
|
+
"$. c #F48353",
|
106
|
+
"%. c #F3825B",
|
107
|
+
"&. c #E38362",
|
108
|
+
"*. c #E0846B",
|
109
|
+
"=. c #E78965",
|
110
|
+
"-. c #E68B6F",
|
111
|
+
";. c #EC8160",
|
112
|
+
":. c #E88B67",
|
113
|
+
">. c #EF8B6D",
|
114
|
+
",. c #E08B73",
|
115
|
+
"<. c #EB8D71",
|
116
|
+
"1. c #E69273",
|
117
|
+
"2. c #E3927A",
|
118
|
+
"3. c #ED9376",
|
119
|
+
"4. c #ED967B",
|
120
|
+
"5. c #EC9D7E",
|
121
|
+
"6. c #F38463",
|
122
|
+
"7. c #F18168",
|
123
|
+
"8. c #F38A6B",
|
124
|
+
"9. c #FA8E6F",
|
125
|
+
"0. c #F4926B",
|
126
|
+
"q. c #FD9063",
|
127
|
+
"w. c #F39172",
|
128
|
+
"e. c #F3947C",
|
129
|
+
"r. c #F3997B",
|
130
|
+
"t. c #FD9572",
|
131
|
+
"y. c #FC957B",
|
132
|
+
"u. c #F9997C",
|
133
|
+
"i. c #F6A27F",
|
134
|
+
"p. c #B08188",
|
135
|
+
"a. c #C59A8A",
|
136
|
+
"s. c #C09A94",
|
137
|
+
"d. c #D48A85",
|
138
|
+
"f. c #D48E88",
|
139
|
+
"g. c #D79181",
|
140
|
+
"h. c #D6938B",
|
141
|
+
"j. c #D39D8E",
|
142
|
+
"k. c #DB9483",
|
143
|
+
"l. c #D9938A",
|
144
|
+
"z. c #DB9A87",
|
145
|
+
"x. c #DD9A8C",
|
146
|
+
"c. c #D19A90",
|
147
|
+
"v. c #DC9799",
|
148
|
+
"b. c #DB9F91",
|
149
|
+
"n. c #DD9B9F",
|
150
|
+
"m. c #DB9FA0",
|
151
|
+
"M. c #D5A092",
|
152
|
+
"N. c #DDA398",
|
153
|
+
"B. c #D8AA9D",
|
154
|
+
"V. c #D7A5A4",
|
155
|
+
"C. c #DDA7A4",
|
156
|
+
"Z. c #D7B2B5",
|
157
|
+
"A. c #E5978C",
|
158
|
+
"S. c #E69B8A",
|
159
|
+
"D. c #E99780",
|
160
|
+
"F. c #EE998A",
|
161
|
+
"G. c #E59D90",
|
162
|
+
"H. c #F09787",
|
163
|
+
"J. c #F39A82",
|
164
|
+
"K. c #F99A81",
|
165
|
+
"L. c #F89F8A",
|
166
|
+
"P. c #E2A38C",
|
167
|
+
"I. c #E6A090",
|
168
|
+
"U. c #ECA59B",
|
169
|
+
"Y. c #F1A486",
|
170
|
+
"T. c #F3A48D",
|
171
|
+
"R. c #F8A181",
|
172
|
+
"E. c #FBA38E",
|
173
|
+
"W. c #F4A494",
|
174
|
+
"Q. c #F3AA9B",
|
175
|
+
"!. c #FCA391",
|
176
|
+
"~. c #F9A699",
|
177
|
+
"^. c #FCAC9A",
|
178
|
+
"/. c #FBB69E",
|
179
|
+
"(. c #FBBA9E",
|
180
|
+
"). c #E0A7A0",
|
181
|
+
"_. c #EBAFA6",
|
182
|
+
"`. c #E7B0A3",
|
183
|
+
"'. c #F4B4A4",
|
184
|
+
"]. c #F3B6AB",
|
185
|
+
"[. c #F6BAA3",
|
186
|
+
"{. c #F6BDAB",
|
187
|
+
"}. c #FBB7A2",
|
188
|
+
"|. c #FABBA4",
|
189
|
+
" X c #FAC4AC",
|
190
|
+
".X c #F1C4B6",
|
191
|
+
"XX c #F1C8BC",
|
192
|
+
"oX c #FFCFB6",
|
193
|
+
"OX c #FFD5B9",
|
194
|
+
"+X c #CEDEFC",
|
195
|
+
"@X c #EBC9CA",
|
196
|
+
"#X c #E5CFD8",
|
197
|
+
"$X c #FFD6C0",
|
198
|
+
"%X c #FFDDCF",
|
199
|
+
"&X c #FFDED4",
|
200
|
+
"*X c #E8DFF1",
|
201
|
+
"=X c #FFEAD5",
|
202
|
+
"-X c #FFECDC",
|
203
|
+
";X c #EBE2F3",
|
204
|
+
":X c #FFECE2",
|
205
|
+
">X c #F4E0F5",
|
206
|
+
",X c #FFF5E7",
|
207
|
+
"<X c #FFF4EB",
|
208
|
+
"1X c #FFF8ED",
|
209
|
+
"2X c #FFF3F3",
|
210
|
+
"3X c #FFF9F3",
|
211
|
+
"4X c #FFFBFE",
|
212
|
+
"5X c None",
|
213
|
+
/* pixels */
|
214
|
+
"5X6 = = = = = = = = = = = = = = = = = = 2 3 5X",
|
215
|
+
"4 * +X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X+X; o ",
|
216
|
+
"@ +X*Xd d d d d r d d r d d d d d d d d ;X+X; ",
|
217
|
+
"+ 4Xd v @XC.N.j.j.j.j.h.h.k.d.| } ' ..` p.4X$ ",
|
218
|
+
". 4Xd #X.X X|.|.Q.Q.Q.W.T.T.Y.J.J.e.<.^ x 4X$ ",
|
219
|
+
"X 4Xd Z. XoX(.}.Q.W.!.L.R.R.R.r.r.e.>.%.c 4X% ",
|
220
|
+
". 4Xd V.[. X[.'.'.W.L.K.0.u.5.2.D.2.=.@.f 4X% ",
|
221
|
+
". 4Xd n./.[.{.&X<XG.T.( t.<.[ z.,X$X=.H f 4X% ",
|
222
|
+
"X 4Xd n.^.Q.].:X3X1X..T./ ,.{ 1X1X=Xw.Y j 4X% ",
|
223
|
+
"+ 4Xd v.~.~.G.XX:X1X,Xz.{ b.1X1X,X<.L L z 4X% ",
|
224
|
+
"+ 4Xh l.K.!.H.G.`.1X3X4Xp.3X1X1XA N %.8.j 4X% ",
|
225
|
+
"+ 4Xr l.y.K.J.H.S.x.3X2X4X4X3X] ^ %.~ ! j 4X% ",
|
226
|
+
"+ 4Xd f.w.K.K.K.J.X.M.4X4X3Xa.*.U W F R g 4X& ",
|
227
|
+
"+ 4Xd d.8.u.u.e.H.S.1X4X4X3X1X1.@.E W Q j 4X& ",
|
228
|
+
"# 4Xd S 9.8.e.A.B.3X3X1XB.,X1X<X..o.#.R u 4X: ",
|
229
|
+
"$ 4Xd D ) t.e._.<X3X,XS...P.1X3X1XO.J ~ p 4X: ",
|
230
|
+
"$ 4Xd D 7.;.D.<X1X1X..T.=.1.] 1X1X=XY G u 4X> ",
|
231
|
+
"- 4Xd V 7.8.3.&X,Xk.5.N 0.0.O.2.-XOXK F s 4X> ",
|
232
|
+
"; 4Xr V ( ! T *.4.-.0.%.q.W $.Y @.W n m e 4X> ",
|
233
|
+
"5 4Xh Z P U %.8.^ ( 6.%.W $.#.W J E R b v 4X5 ",
|
234
|
+
"7 +X>Xv i B l r a l z r h g p p p p t k >X+X8 ",
|
235
|
+
"9 7 +X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X4X+X8 < ",
|
236
|
+
"5X9 7 , , , , , , , , , , , , , , , , , 7 < 5X"
|
237
|
+
};
|