Browse Source

Added rotary-switch emulation plugin MixSwitchPlugin.

master
edgeeffect 22 years ago
parent
commit
13b5834935
6 changed files with 846 additions and 0 deletions
  1. +170
    -0
      SpiralSound/Plugins/MixSwitchPlugin/Makefile.in
  2. +155
    -0
      SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C
  3. +57
    -0
      SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h
  4. +95
    -0
      SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPluginGUI.C
  5. +45
    -0
      SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPluginGUI.h
  6. +324
    -0
      SpiralSound/Plugins/MixSwitchPlugin/SpiralIcon.xpm

+ 170
- 0
SpiralSound/Plugins/MixSwitchPlugin/Makefile.in View File

@@ -0,0 +1,170 @@
#############################################################################
# Makefile for building MixSwitchPlugin.so
#############################################################################

####### Compiler, tools and options

CC = gcc
CXX = g++
CFLAGS = @CFLAGS@
CXXFLAGS= @CXXFLAGS@
INCPATH = -I/usr/X11R6/include
LINK = g++ -shared
LFLAGS =
LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl
MOC = moc
UIC =

TAR = tar -cf
GZIP = gzip -9f

INSTALL = @INSTALL@

###### Autoconf variables

prefix = @prefix@
exec_prefix = @exec_prefix@

bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@

####### Files

HEADERS = ../SpiralPlugin.h \
../SpiralPluginGUI.h \
../../ChannelHandler.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../../Sample.h \
MixSwitchPlugin.h \
MixSwitchPluginGUI.h
SOURCES = ../SpiralPlugin.C \
../SpiralPluginGUI.C \
../../ChannelHandler.C \
../Widgets/Fl_Knob.cxx \
../Widgets/Fl_DragBar.cxx \
../../Sample.C \
MixSwitchPlugin.C \
MixSwitchPluginGUI.C
OBJECTS = ../SpiralPlugin.o \
../SpiralPluginGUI.o \
../../ChannelHandler.o \
../Widgets/Fl_Knob.o \
../Widgets/Fl_DragBar.o \
../../Sample.o \
MixSwitchPlugin.o \
MixSwitchPluginGUI.o
INTERFACES =
UICDECLS =
UICIMPLS =
SRCMOC =
OBJMOC =
DIST =
TARGET = MixSwitchPlugin.so

####### Implicit rules

.SUFFIXES: .cpp .cxx .cc .C .c

.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

####### Build rules


all: $(TARGET)

$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)

moc: $(SRCMOC)

tmake:
tmake MixSwitchPlugin.pro

dist:
$(TAR) MixSwitchPlugin.tar MixSwitchPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
$(GZIP) MixSwitchPlugin.tar

clean:
-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)
-rm -f *~ core
install:
$(INSTALL) $(TARGET) $(libdir)/SpiralPlugins

####### Sub-libraries


###### Combined headers


####### Compile

../SpiralPlugin.o: ../SpiralPlugin.C \
../SpiralPlugin.h \
../../Sample.h

../SpiralPluginGUI.o: ../SpiralPluginGUI.C \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
../SpiralPlugin.h \
../../Sample.h

../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \
../Widgets/Fl_Knob.H

../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \
../Widgets/Fl_DragBar.H

../../Sample.o: ../../Sample.C \
../../Sample.h \
../../SpiralInfo.h

MixSwitchPlugin.o: MixSwitchPlugin.C \
MixSwitchPlugin.h \
../SpiralPlugin.h \
../../Sample.h \
../../SpiralInfo.h \
../../Sample.h \
MixSwitchPluginGUI.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H \
SpiralIcon.xpm

MixSwitchPluginGUI.o: MixSwitchPluginGUI.C \
MixSwitchPluginGUI.h \
../Widgets/Fl_Knob.H \
../Widgets/Fl_DragBar.H \
MixSwitchPlugin.h \
../SpiralPlugin.h \
../../Sample.h \
../../SpiralInfo.h \
../../Sample.h \
../SpiralPluginGUI.h \
../Widgets/Fl_DragBar.H

../../ChannelHandler.o: ../../ChannelHandler.C \
../../ChannelHandler.h

+ 155
- 0
SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.C View File

@@ -0,0 +1,155 @@
/* SpiralSound
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "MixSwitchPlugin.h"
#include "MixSwitchPluginGUI.h"
#include <FL/Fl_Button.h>
#include <stdio.h>
#include "SpiralIcon.xpm"

extern "C" {

SpiralPlugin* CreateInstance () { return new MixSwitchPlugin; }

char** GetIcon () { return SpiralIcon_xpm; }

int GetID () { return 126; }

}

///////////////////////////////////////////////////////

MixSwitchPlugin::MixSwitchPlugin () :
m_SwitchPos (0),
m_Triggered (false)
{
m_GUIArgs.Chans = 2;
m_GUIArgs.Switch = 1;
m_GUIArgs.Echo = 1;
m_PluginInfo.Name = "MixSwitch";
m_PluginInfo.Width = 93;
m_PluginInfo.Height = 55;
CreatePorts ();
// Channels
m_AudioCH->Register ("Chans", &m_GUIArgs.Chans);
m_AudioCH->Register ("Switch", &m_GUIArgs.Switch);
m_AudioCH->Register ("Echo", &m_GUIArgs.Echo, ChannelHandler::OUTPUT);
}

MixSwitchPlugin::~MixSwitchPlugin () {
}

PluginInfo &MixSwitchPlugin::Initialise (const HostInfo *Host) {
return SpiralPlugin::Initialise (Host);
}

SpiralGUIType *MixSwitchPlugin::CreateGUI () {
return new MixSwitchPluginGUI (m_PluginInfo.Width, m_PluginInfo.Height, this, m_AudioCH, m_HostInfo);
}

void MixSwitchPlugin::ExecuteCommands () {
if (m_AudioCH->IsCommandWaiting ()) {
switch (m_AudioCH->GetCommand()) {
case (SETCHANS) : SetChans (m_GUIArgs.Chans);
break;
case (SETSWITCH) : SetSwitch (m_GUIArgs.Switch);
break;
}
}
}

void MixSwitchPlugin::CreatePorts (int n = 2, bool AddPorts = false) {
int c;
m_PluginInfo.NumInputs = 2 + n;
m_PluginInfo.PortTips.push_back ("CV");
m_PluginInfo.PortTips.push_back ("Clock");
char t[256];
for (c=1; c<=n; c++) {
sprintf (t, "In %d", c);
m_PluginInfo.PortTips.push_back (t);
}
m_PluginInfo.NumOutputs = 2;
m_PluginInfo.PortTips.push_back ("CV");
m_PluginInfo.PortTips.push_back ("Out");
if (AddPorts) {
for (c=0; c<m_PluginInfo.NumInputs; c++) AddInput();
for (c=0; c<m_PluginInfo.NumOutputs; c++) AddOutput();
}
}

void MixSwitchPlugin::SetChans (int n) {
// once to clear the connections with the current info
// do we need this????
UpdatePluginInfoWithHost();
// Things can get a bit confused deleting and adding inputs
// so we just chuck away all the ports...
RemoveAllInputs ();
RemoveAllOutputs ();
m_PluginInfo.NumInputs = 0;
m_PluginInfo.NumOutputs = 0;
m_PluginInfo.PortTips.clear ();
// ... and then create some new ones
CreatePorts (n, true);
// do the actual update
UpdatePluginInfoWithHost ();
}

void MixSwitchPlugin::SetSwitch (int n) {
m_SwitchPos=(m_GUIArgs.Switch - 1) % (m_PluginInfo.NumInputs - 2);
}

void MixSwitchPlugin::Execute() {
int n;
float f;
int NumChans = m_PluginInfo.NumInputs - 2;
for (n=0; n<m_HostInfo->BUFSIZE; n++) {
if (InputExists (0)) {
// Check the Switch Pos CV Value
m_SwitchPos = int (GetInput (0, n)-1) % NumChans;
}
else if (InputExists (1)) {
// Check the trigger CV value
if (GetInput (1, n) < 0.01) {
m_Triggered = false;
}
else {
if (!m_Triggered) {
m_Triggered = true;
m_SwitchPos = (m_SwitchPos+1) % NumChans;
}
}
}
int o = m_SwitchPos+1;
m_GUIArgs.Echo = o;
SetOutput (0, n, o);
o++;
if (InputExists (o)) f=GetInput (o, n);
else f=0.0;
SetOutput (1, n, f);
}
}

void MixSwitchPlugin::StreamOut (ostream &s) {
s << m_Version << " " << m_PluginInfo.NumInputs - 2 << " " << m_SwitchPos << " ";
}

void MixSwitchPlugin::StreamIn (istream &s) {
int Version, Chans, SwitchPos;
s >> Version >> Chans >> SwitchPos;
SetChans (Chans);
m_SwitchPos = SwitchPos;
}

+ 57
- 0
SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPlugin.h View File

@@ -0,0 +1,57 @@
/* SpiralSound
* Copyleft (C) 2001 David Griffiths <dave@pawfal.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include "../SpiralPlugin.h"
#include <FL/Fl_Pixmap.H>

#ifndef MixSwitchPLUGIN
#define MixSwitchPLUGIN

class MixSwitchPlugin : public SpiralPlugin {
public:
MixSwitchPlugin ();
virtual ~MixSwitchPlugin ();
virtual PluginInfo& Initialise (const HostInfo *Host);
virtual SpiralGUIType* CreateGUI ();
virtual void Execute ();
virtual void ExecuteCommands();
virtual void StreamOut (ostream &s);
virtual void StreamIn (istream &s);
int GetSwitch (void) { return m_SwitchPos + 1; }
int GetChans (void) { return m_PluginInfo.NumInputs - 2; }
enum GUICommands {NONE, SETCHANS, SETSWITCH};
struct GUIArgs {
int Chans;
int Switch;
int Echo;
};
private:
GUIArgs m_GUIArgs;
void SetChans (int n);
void SetSwitch (int n);
int m_SwitchPos;
bool m_Triggered;
void CreatePorts (int n = 2, bool AddPorts = false);
friend istream &operator>> (istream &s, MixSwitchPlugin &o);
friend ostream &operator<< (ostream &s, MixSwitchPlugin &o);
};

istream &operator>> (istream &s, MixSwitchPlugin &o);
ostream &operator<< (ostream &s, MixSwitchPlugin &o);

#endif

+ 95
- 0
SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPluginGUI.C View File

@@ -0,0 +1,95 @@
/* SpiralPlugin
* Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/



#include "MixSwitchPluginGUI.h"
#include <FL/fl_draw.h>
#include <FL/fl_draw.H>
#include <stdio.h>

static const int GUI_COLOUR = 179;
static const int GUIBG_COLOUR = 144;
static const int GUIBG2_COLOUR = 145;

////////////////////////////////////////////

MixSwitchPluginGUI::MixSwitchPluginGUI (int w, int h, MixSwitchPlugin *o, ChannelHandler *ch, const HostInfo *Info) :
SpiralPluginGUI (w, h, o, ch)
{
m_Chans = new Fl_Counter (5, 20, 40, 20, "Channels");
m_Chans->labelsize (10);
m_Chans->type (FL_SIMPLE_COUNTER);
m_Chans->step (1);
m_Chans->value (2);
m_Chans->callback ((Fl_Callback*) cb_Chans);
add (m_Chans);

m_Switch = new Fl_Counter (49, 20, 40, 20, "Select");
m_Switch->labelsize (10);
m_Switch->type (FL_SIMPLE_COUNTER);
m_Switch->step (1);
m_Switch->value (1);
m_Switch->callback ((Fl_Callback*) cb_Switch);
add (m_Switch);
}

inline void MixSwitchPluginGUI::cb_Chans_i (Fl_Counter* o, void* v) {
if (o->value() < 2) o->value(2);
else {
m_GUICH->Set ("Chans", int (o->value ()));
m_GUICH->SetCommand (MixSwitchPlugin::SETCHANS);
}
}

void MixSwitchPluginGUI::cb_Chans (Fl_Counter* o, void* v) {
((MixSwitchPluginGUI*) (o->parent ())) -> cb_Chans_i (o, v);
}


inline void MixSwitchPluginGUI::cb_Switch_i (Fl_Counter* o, void* v) {
if (o->value() < 1 || o->value() > m_Chans->value ())
o->value (1);
m_GUICH->Set ("Switch", int (o->value ()));
m_GUICH->SetCommand (MixSwitchPlugin::SETSWITCH);
}

void MixSwitchPluginGUI::cb_Switch (Fl_Counter* o, void* v) {
((MixSwitchPluginGUI*) (o->parent ())) -> cb_Switch_i (o, v);
}

void MixSwitchPluginGUI::Update () {
m_Switch->value (m_GUICH->GetInt ("Echo"));
}

void MixSwitchPluginGUI::UpdateValues (SpiralPlugin *o) {
MixSwitchPlugin* Plugin = (MixSwitchPlugin*)o;
m_Chans->value (Plugin->GetChans ());
m_Switch->value (Plugin->GetSwitch ());
}

const string MixSwitchPluginGUI::GetHelpText(const string &loc){
return string("")
+ "It's a simple n-input 1-output rotary switch.\n\n"
+ "The 'Channels' parameter controls the number of outputs.\n\n"
+ "The 'Select' parameter selects which input is echoed at the output.\n\n"
+ "The 'CV' input also selects which input is echoed at the output.\n\n"
+ "The 'Clock' input is a trigger to select the next input chanel.\n\n"
+ "The 'CV' output enables you to gang several switches together, by\n"
+ "connecting it to the other switches' 'CV' input.\n";
}

+ 45
- 0
SpiralSound/Plugins/MixSwitchPlugin/MixSwitchPluginGUI.h View File

@@ -0,0 +1,45 @@
/* SpiralPlugin
* Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Counter.H>

#include "MixSwitchPlugin.h"
#include "../SpiralPluginGUI.h"

#ifndef MixSwitchGUI
#define MixSwitchGUI

class MixSwitchPluginGUI : public SpiralPluginGUI {
public:
MixSwitchPluginGUI(int w, int h, MixSwitchPlugin *o, ChannelHandler *ch, const HostInfo *Info);
virtual void UpdateValues(SpiralPlugin *o);
virtual void Update();
protected:
const string GetHelpText(const string &loc);
private:
Fl_Counter *m_Switch, *m_Chans;
inline void cb_Switch_i (Fl_Counter* o, void* v);
static void cb_Switch (Fl_Counter* o, void* v);
inline void cb_Chans_i (Fl_Counter* o, void* v);
static void cb_Chans (Fl_Counter* o, void* v);
};

#endif

+ 324
- 0
SpiralSound/Plugins/MixSwitchPlugin/SpiralIcon.xpm View File

@@ -0,0 +1,324 @@
/* XPM */
static char * SpiralIcon_xpm[] = {
"36 36 285 2",
" c None",
". c #8B889B",
"+ c #9C99AA",
"@ c #ADAAB9",
"# c #837F94",
"$ c #7D7990",
"% c #9995A7",
"& c #67627C",
"* c #CDCBD4",
"= c #FCFCFC",
"- c #D1D0D8",
"; c #FFFFFF",
"> c #F1F1F3",
", c #848095",
"' c #2A2248",
") c #CFCED6",
"! c #68637D",
"~ c #ABA8B6",
"{ c #D5D3DB",
"] c #9490A2",
"^ c #C4C4C4",
"/ c #1D1C1D",
"( c #313134",
"_ c #EEEFEE",
": c #FBFBFB",
"< c #EFEFEF",
"[ c #7B768D",
"} c #464060",
"| c #DEDEE1",
"1 c #CBCACC",
"2 c #EEEEF1",
"3 c #79758C",
"4 c #FBFBFC",
"5 c #A2A2A2",
"6 c #000000",
"7 c #F5F6F5",
"8 c #747474",
"9 c #2A2A2B",
"0 c #403958",
"a c #7D788F",
"b c #C0BEC8",
"c c #BCBAC6",
"d c #BCBAC5",
"e c #625C79",
"f c #2B2932",
"g c #191919",
"h c #CCCCCC",
"i c #807B91",
"j c #3B3556",
"k c #F2F2F4",
"l c #929292",
"m c #0E0E0E",
"n c #BFBFBF",
"o c #111111",
"p c #100E15",
"q c #868689",
"r c #FEFDFE",
"s c #D9D7DE",
"t c #9C98AA",
"u c #FDFCFD",
"v c #DDDDDD",
"w c #575755",
"x c #5E5E5E",
"y c #C4C2CD",
"z c #423C5C",
"A c #F0F0F2",
"B c #939393",
"C c #555555",
"D c #4A4A4A",
"E c #010101",
"F c #282828",
"G c #C2C2C2",
"H c #DBDAE0",
"I c #615C78",
"J c #F6F6F7",
"K c #DADADA",
"L c #545454",
"M c #0F0F0F",
"N c #B8B8B8",
"O c #48445C",
"P c #2B2B2C",
"Q c #181900",
"R c #D3D3D3",
"S c #C1BEC9",
"T c #474060",
"U c #31294D",
"V c #716C85",
"W c #65607A",
"X c #625D78",
"Y c #D5D4DB",
"Z c #F7F7F7",
"` c #8B8B8B",
" . c #161616",
".. c #0C0C0C",
"+. c #161800",
"@. c #1A1B00",
"#. c #060600",
"$. c #191A00",
"%. c #393643",
"&. c #47415F",
"*. c #9692A4",
"=. c #D9D8DE",
"-. c #F7F7F8",
";. c #918DA0",
">. c #B8B5C1",
",. c #D1D1D1",
"'. c #252525",
"). c #040400",
"!. c #FFFF00",
"~. c #141500",
"{. c #727175",
"]. c #FEFEFF",
"^. c #9D99AA",
"/. c #DBD9E0",
"(. c #E9E9E9",
"_. c #CBCBCB",
":. c #E0E0E0",
"<. c #6C6C6C",
"[. c #515151",
"}. c #A6A6A7",
"|. c #827E93",
"1. c #615C77",
"2. c #EAEAED",
"3. c #DFDFE1",
"4. c #1E1D24",
"5. c #9894A7",
"6. c #B1AEBB",
"7. c #69686F",
"8. c #000001",
"9. c #0A0A00",
"0. c #171800",
"a. c #615C76",
"b. c #5F5A75",
"c. c #413E4D",
"d. c #020203",
"e. c #040500",
"f. c #050500",
"g. c #1A1A1C",
"h. c #C3C1CB",
"i. c #9D9D9D",
"j. c #202020",
"k. c #383838",
"l. c #4C4C4C",
"m. c #111112",
"n. c #C9C7D0",
"o. c #F1F1F1",
"p. c #F8F8F8",
"q. c #232323",
"r. c #010100",
"s. c #121300",
"t. c #050408",
"u. c #AEACB9",
"v. c #FEFEFE",
"w. c #1D1D1D",
"x. c #020200",
"y. c #101100",
"z. c #B7B5C1",
"A. c #9390A2",
"B. c #BBBBBB",
"C. c #414141",
"D. c #030303",
"E. c #28272A",
"F. c #F4F4F6",
"G. c #605B76",
"H. c #736E86",
"I. c #D8D8D8",
"J. c #727272",
"K. c #101010",
"L. c #848486",
"M. c #CCCBD3",
"N. c #747087",
"O. c #6D6881",
"P. c #1C1C1C",
"Q. c #242424",
"R. c #656566",
"S. c #F6F6F6",
"T. c #E8E6EA",
"U. c #706B84",
"V. c #E3E1E6",
"W. c #474746",
"X. c #151515",
"Y. c #C8C8C8",
"Z. c #AEAEAE",
"`. c #080808",
" + c #373639",
".+ c #FDFCFE",
"++ c #ABA8B7",
"@+ c #F1F0F3",
"#+ c #6D6980",
"$+ c #0A090E",
"%+ c #95929E",
"&+ c #0A0810",
"*+ c #0D0D0D",
"=+ c #050505",
"-+ c #5B5A5C",
";+ c #F7F6F7",
">+ c #F4F3F5",
",+ c #908C9F",
"'+ c #C8C6D0",
")+ c #837E96",
"!+ c #86868A",
"~+ c #070608",
"{+ c #ECEBEE",
"]+ c #5B5571",
"^+ c #646078",
"/+ c #AFAFB0",
"(+ c #454545",
"_+ c #363636",
":+ c #7A7A7A",
"<+ c #C8C8C9",
"[+ c #212025",
"}+ c #060607",
"|+ c #969699",
"1+ c #FAFAFA",
"2+ c #F8F8F9",
"3+ c #A29EAF",
"4+ c #F7F6F8",
"5+ c #F0F0F1",
"6+ c #B8B7B9",
"7+ c #E4E4E4",
"8+ c #FDFDFD",
"9+ c #A5A2B2",
"0+ c #3B3456",
"a+ c #A8A5B4",
"b+ c #525252",
"c+ c #848387",
"d+ c #CDCDCD",
"e+ c #8D899C",
"f+ c #494262",
"g+ c #68627C",
"h+ c #40395A",
"i+ c #ECECEC",
"j+ c #020202",
"k+ c #B4B5B5",
"l+ c #0B0B0B",
"m+ c #313232",
"n+ c #E3E3E3",
"o+ c #B1AEBC",
"p+ c #BDBBC6",
"q+ c #3C3556",
"r+ c #898599",
"s+ c #EDEDED",
"t+ c #39393A",
"u+ c #040404",
"v+ c #333333",
"w+ c #F5F5F5",
"x+ c #2B2B2B",
"y+ c #2D2A3D",
"z+ c #B6B4C1",
"A+ c #F5F5F6",
"B+ c #605A76",
"C+ c #DAD8DF",
"D+ c #F5F4F6",
"E+ c #615B76",
"F+ c #524D6A",
"G+ c #E4E3E8",
"H+ c #D5D5D5",
"I+ c #1B1B1B",
"J+ c #303030",
"K+ c #AAABAB",
"L+ c #585464",
"M+ c #B0AEBB",
"N+ c #A29FAF",
"O+ c #E9E8E9",
"P+ c #787779",
"Q+ c #0F0E15",
"R+ c #2D2D2E",
"S+ c #595959",
"T+ c #FAFAFB",
"U+ c #807B92",
"V+ c #B0ADBB",
"W+ c #E8E7EB",
"X+ c #3A3258",
"Y+ c #E6E5EA",
"Z+ c #DFDEE3",
"`+ c #443E5E",
" @ c #BAB8C4",
".@ c #C1BFCA",
"+@ c #E0E0E5",
"@@ c #D0CED6",
"#@ c #362F52",
"$@ c #CECCD5",
"%@ c #413A5B",
"&@ c #6A657F",
"*@ c #9793A6",
" ",
" ",
" ",
" . + @ # $ % ",
" & * = * - ; > , ' ; ; ; ) ! ",
" ~ ; ; { ] ; ^ / ( _ ; : < [ ",
" } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ",
" c : d e f g h i j k l 6 m ; n o 6 p q r s ",
" t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ",
" I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ",
" X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ",
" >.; ; ; ; ; ; = ,.'.6 6 ).6 !.~.6 6 6 6 E {.].; ; ^. ",
" /.; ; (.R h _.:.<.6 !.!.!.!.!.!.6 6 6 6 6 E [.}.4 |. ",
" 1.2.; 3...6 6 6 6 6 6 6 6 6 6 !.!.!.6 6 6 6 6 6 4.5. ",
" V @ 6.7.8.6 6 6 6 6 9.0.6 6 6 6 6 !.!.6 6 6 6 6 6 6 ",
" a.b.c.6 d.6 6 6 6 6 e.6 6 6 !.6 6 !.!.f.6 6 6 g.6 ",
" h.; ; i.j.j.k.l.j.6 6 !.!.!.!.!.!.6 6 !.!.!.!.!.m.6 ",
" n.; ; o.p.; ; ; q.6 r.~.6 6 6 !.6 6 6 6 s.6 6 6 t.6 ",
" u.; ; ; ; v.; ; w.6 x.y.6 6 6 6 6 6 6 6 s.6 6 6 6 z., ",
" A.; ; v.; : B.C.D.6 6 6 6 6 6 !.6 6 6 6 x.6 6 6 E.v.F.G. ",
" H.; ; ; I.J.K.6 6 6 6 !.!.!.!.!.!.6 6 6 6 6 6 6 L.; ; M.N. ",
" O.J ; : P.6 6 6 6 Q...6 6 6 6 !.6 6 6 6 r.6 6 6 R.S.; ; T.U. ",
" V.; ; W.6 E 6 X.Y.Z.`.6 6 6 6 6 6 6 6 r.6 6 6 6 +.+; ; > U. ",
" ++; @+#+$+6 6 Z.v.; %+&+6 6 6 6 6 6 6 6 *+=+6 6 6 -+;+; ; >+,+ ",
" U.'+! )+!+~+x ; ; {+]+^+/+l (+6 6 6 _+:+<+[+6 6 6 }+|+1+; ; 2+@ ",
" 3+4+5+6+7+8+; 9+0+a+; S.(+6 6 E b+; ; c+6 6 E 6 o d+; ; = e+ ",
" f+> ; ; ; ; ; ; g+h+; ; i+k.6 6 j+D ; ; k+l+6 6 6 m+n+; ; o+ ",
" > ; ; ; ; p+q+r+; ; s+t+6 6 u+v+; ; w+x+6 6 y+z+; A+3 ",
" B+C+= ; D+E+F+G+; ; H+I+6 6 j+J+; ; ; K+b+L+ ",
" M+4 N+ X ; ; ; O+P+J+Q+R+S+; ; ; v.T+U+ ",
" V+; ; ; ; ; W+X+Y+; ; ; ; = Z+`+ ",
" @.@+@4 ; ; @@#@$@; ; ; s r+T ",
" %@ &@*@r+ ",
" ",
" ",
" "};

Loading…
Cancel
Save